CH57x/CH58x/CH59x獲取從機廣播資訊

小舟从此逝_1發表於2024-05-31

有時需要透過主機裝置(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");
                }
            }

個人學習分享;如有問題請指正

轉載請保留出處;

相關文章