This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

例程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  找不到这个参数相关的地方。然道封装起来了。不可见?