CH58x/CH59x动态修改广播包
前言:在日常使用中我们可能有需要动态修改广播包的情况。从机设备不走连接将一些传感器数据通过广播包显示出来
程序中提供了接口函数进行动态修改不用再先关闭广播再重新开启。
/******************************************************************************* * @fn GAP_UpdateAdvertisingData * * @brief Setup or change advertising and scan response data. * * NOTE: if the return status from this function is SUCCESS, * the task isn't complete until the GAP_ADV_DATA_UPDATE_DONE_EVENT * is sent to the calling application task. * * input parameters * * @param taskID - task ID of the app requesting the change * @param adType - TRUE - advertisement data, FALSE - scan response data * @param dataLen - Octet length of advertData * @param pAdvertData - advertising or scan response data * * output parameters * * @param None. * * @return SUCCESS: data accepted,<BR> * bleIncorrectMode: invalid profile role,<BR> */ extern bStatus_t GAP_UpdateAdvertisingData( u8 taskID,u8 adType,u8 dataLen,u8 *pAdvertData );
GAP_UpdateAdvertisingData( 0,TRUE ,sizeof( advertData ),advertData ); // 广播包
GAP_UpdateAdvertisingData( 0,FALSE ,sizeof( scanRspData ),scanRspData ); // 扫描应答包
使用示例:
static uint8_t advertData[] = { // Flags; this sets the device to use limited discoverable // mode (advertises for 30 seconds at a time) instead of general // discoverable mode (advertises indefinitely) 0x02, // length of this data GAP_ADTYPE_FLAGS, DEFAULT_DISCOVERABLE_MODE | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED, // service UUID, to notify central devices what services are included // in this peripheral 0x03, // length of this data GAP_ADTYPE_16BIT_MORE, // some of the UUID's, but not all LO_UINT16(SIMPLEPROFILE_SERV_UUID), HI_UINT16(SIMPLEPROFILE_SERV_UUID), 0x05, 0xff, 0x01,0x02,0x03,0x04 };
上述为广播包内容,下面给出实际更新示例
if(events & Change_advdata_evt) { advertData[12] = 0xaa; GAP_UpdateAdvertisingData( 0,TRUE ,sizeof( advertData ),advertData ); tmos_start_task(Peripheral_TaskID, Change_advdata_evt, 16000); return (events ^ Change_advdata_evt); }
实际效果:
修改前:
修改后:
浙公网安备 33010602011771号