CH57x/CH58x/CH59x获取从机广播信息

ch57x,ch58x,ch59x · 浏览次数 : 0

小编点评

```c #include #include "observer.h" void ObserverAddDeviceInfo(uint8_t* deviceAddr, uint8_t deviceType) { // 获取广播信息 uint8_t advtype_flag; uint8_t* advdata; switch (deviceType) { case GAP_DEVICE_INFO_EVENT: { // 获取广播信息 advtype_flag = pEvent->deviceInfo.eventType; if (advtype_flag == 0) { len = pEvent->deviceInfo.dataLen; // 打印广播数据 for (uint8_t i = 0; i < len; i++) { advdata[i] = pEvent->deviceInfo.pEvtData[i]; PRINT("\"%02x\",", advdata[i]); PRINT("\"%c\",", advdata[i]); } PRINT("\"\\"); } } break; } } int main() { // 注册观察回调函数 ObserverAddDeviceInfo(NULL, GAP_DEVICE_INFO_EVENT); // 监听广播信息事件 while (1) { // 等待事件 observerEvent(); } return 0; } ```

正文

有时需要通过主机设备(MCU非手机)获取从设备的广播信息例如广播包,MAC地址,扫描应答包等

以下的程序片段及功能实现是在WCH的CH59X的observer例程上实现的;

1、获取广播包

所有的函数在库函数中都可以找到,具体实现函数如下:

 case GAP_DEVICE_INFO_EVENT:
        {
            ObserverAddDeviceInfo(pEvent->deviceInfo.addr, pEvent->deviceInfo.addrType);
        //获取广播信息
            advtype_flag = pEvent->deviceInfo.eventType;
                  // PRINT("广播类型:%d\n",advtype_flag);
                   if(advtype_flag == 0)
                   {
                       len=pEvent->deviceInfo.dataLen;
                    // PRINT("广播数据:");
                     for(uint8_t i=0 ;i<len;i++)
                     {
                       advdata[i]= pEvent->deviceInfo.pEvtData[i];
                       //PRINT("%02x",advdata[i]);
                       PRINT("%c",advdata[i]);
                     }
                     PRINT("\n");
              }
        }
        break;

这里的判断(if(advtype_flag == 0))是对广播类型的筛选,有几种不同的广播类型;这里筛选了第一种普通广播:

 2、MAC地址

            if(pEvent->discCmpl.numDevs > 0)
            {
                int i, j;
                // Increment index of current result (with wraparound)
                for(j = 0; j < pEvent->discCmpl.numDevs; j++)
                {
                    PRINT("Device %d : ", j);
                    for(i = 0; i < 6; i++)
                    {
                        PRINT("%x ", pEvent->discCmpl.pDevList[j].addr[i]);
                    }
                    PRINT("\n");
                }
            }

个人学习分享;如有问题请指正

转载请保留出处;

与CH57x/CH58x/CH59x获取从机广播信息相似的内容: