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);
    }

实际效果:

修改前:  修改后:

 

posted @ 2025-03-31 19:39  小舟从此逝_1  阅读(126)  评论(0)    收藏  举报