例程SimpleBLECentral里面的一些回调函数的参数是这么传递的?
就比如这个 static void simpleBLECentralEventCB( gapCentralRoleEvent_t *pEvent )。我用这个例程添加了串口打印,通过串口输入1 开始扫描,
在这个函数simpleBLECentralEventCB( gapCentralRoleEvent_t *pEvent ) 里面的 case GAP_DEVICE_INFO_EVENT:里面的
if ( simpleBLEFindSvcUuid( SIMPLEPROFILE_SERV_UUID,
pEvent->deviceInfo.pEvtData,
pEvent->deviceInfo.dataLen ) )
{
// LCD_WRITE_STRING( " 668 GAP_DEVICE_INFO_EVENT ", HAL_LCD_LINE_1 );
simpleBLEAddDeviceInfo( pEvent->deviceInfo.addr, pEvent->deviceInfo.addrType );
}
通过串口打印知道 simpleBLEFindSvcUuid 是返回假的。 所以就没有办法simpleBLEAddDeviceInfo() 添加设备了。
进去simpleBLEFindSvcUuid() 看到:
adLen = *pData++;
adType = *pData;
// If AD type is for 16-bit service UUID
if ( adType == GAP_ADTYPE_16BIT_MORE || adType == GAP_ADTYPE_16BIT_COMPLETE ) 是因为这个if () 为假造成的。
我想看 pData 里面到底是什么内容 使之为假,所以我找到 gapCentralRoleEvent_t *pEvent 这个参数。
问题来了:
回调函数的参数是怎么传递的。 还有我怎么找不到 pEvent 这个变量是在哪里赋值或者改变 的。
hainong,
这是比较UUID的一个过滤。
默认的SimpleBLECentral 工程只会连接SimpleBLEPeripheral 设备。
这段代码是过滤central查找到设备的代码,通过比较SIMPLEPROFILE_SERV_UUID 这个UUID 来实现。
如果你的外设不带这个service, 那么返回就会是假,那么你的central设备就无法连上你的外设。
当然,你可以通过修改central代码来实现和你的外设连接。
真的是太感谢了,我这样说你知道我的外设不是烧录SimpleBLEPeripheral 工程。 我直接把simpleBLEFindSvcUuid()注释掉了就可以了。
1、还有什么方法可以改呢?主设备跟外设备要改的的话。主设备跟外设(比如让外设带这个service)分别要改哪部分。?
2、回调函数的参数是这么传递的。就是说,原型只说明了函数名跟,跟参数类型还有参数名字,那这个参数的值是在哪里定义的,在哪里赋值的。 我用ctrl+shitf+f 找不到这个参数相关的地方。然道封装起来了。不可见?