论坛上说使用GAP_UpdateAdvertisingData可以更新广播数据。也提到了在GAPRole_SetParameter中的case GAPROLE_ADVERT_DATA:加上这个函数就可以实现动态更新广播数据。效果如下:
case GAPROLE_ADVERT_DATA:if ( len <= B_MAX_ADV_LEN ){VOID osal_memset( gapRole_AdvertData, 0, B_MAX_ADV_LEN );VOID osal_memcpy( gapRole_AdvertData, pValue, len );gapRole_AdvertDataLen = len;GAP_UpdateAdvertisingData(gapRole_TaskID, TRUE, gapRole_AdvertDataLen, gapRole_AdvertData);}else{ret = bleInvalidRange;}break;
但是,我在同文件里面的gapRole_ProcessGAPMsg函数里面发现有使用GAP_UpdateAdvertisingData函数。其中的两个事件中也使用了更新函数。
GAP_DEVICE_INIT_DONE_EVENT
GAP_ADV_DATA_UPDATE_DONE_EVENT
后者应该就是广播更新事件吧。那不是应该理解为GAPRole_SetParameter只是设置广播数据内容。只有当某一时刻的时候,进入gapRole_ProcessGAPMsg的GAP_ADV_DATA_UPDATE_DONE_EVENT才去更新GAPRole_SetParameter设置的数据吗?
hanhan:
居然没人回复
cedar_xuesong:
协议栈都是异步操作的,
GAPRole_SetParameter只是通知底层来更新广播信息,不代表更新完毕