6626扫描广播回应包例子

yangzh · 56次点击 · 4天前

       我们使用6626做主机,扫描广播数据(广播回应包),使用mutilink做主机,simple工程做从机,使用方法如下:

  1. main函数添加函数

    结构体定义

    static struct {

        uint8_t dev_addr;

        uint8_t role;

    } dev_info[256];

       

    ob_event_callback_reg(app_dut_event_cb);//注册回调
    dut_scan_start();//开启扫描
  2. 函数内容如下:


    static void dut_scan_start(void)
    {
        static ob_scanning_param_t param_scan_1m = {
            .scan_type = true,//false,            //设置true
            .interval = DUT_SCAN_INTERVAL,
            .window = DUT_SCAN_WINDOW,
        };
        ob_scan_param_t scan_param = {
            OB_ADV_ADDR_TYPE_RANDOM,
            OB_SCAN_FILTER_BASIC_UNFILTER,
            0,
            &param_scan_1m,
            NULL,
        };
           
            //for better scan  performance    添加如下语句,扫描到的概率会增大
        *(__IO uint32_t *)0x41300080 = (*(__IO uint32_t *)0x41300080 & (~(0xFF<<16))) | (62<<16);      
           
        ob_gap_scan_start(&scan_param);
        OM_LOG_DEBUG("DEV(%2d) scan started:\n", DEV_IDX);
    }
  3. 回调函数实现

          

    static void app_dut_event_cb(uint16_t evt_id, const omble_evt_t *evt)
    {
        if (evt_id == OB_GAP_EVT_CONNECTED) {
            dev_info[evt->gap.conn_idx].dev_addr = evt->gap.connected.peer_addr.addr[0];
            dev_info[evt->gap.conn_idx].role = evt->gap.connected.role;
            OM_LOG_DEBUG("DEV(%2d) role(%d) CONNECTED\n", dev_info[evt->gap.conn_idx].dev_addr, evt->gap.connected.role);
         
        } else if (evt_id == OB_GAP_EVT_DISCONNECTED) {
            OM_LOG_DEBUG("DEV(%2d) role(%d) DISCONNECTED: 0x%02X\n",
            dev_info[evt->gap.conn_idx].dev_addr, dev_info[evt->gap.conn_idx].role, evt->gap.disconnected.reason);
                               
        } else if (evt_id == OB_GAP_EVT_ADV_REPORT) {
            const ob_gap_evt_adv_report_t *ad = &evt->gap.adv_report;
       
            //OM_LOG_DEBUG("rsp:=%d,%d,%d\n",ad->report_type.scan_resp,ad->report_type.legacy_adv,ad->report_type.data_state);  

            if(ad->report_type.scan_resp)
            {
                OM_LOG_DEBUG_ARRAY_EX("scan",ad->data,ad->data_len);
            }

        } else if (evt_id == OB_GAP_EVT_HCI_ERROR) {
            printf("OB_GAP_EVT_HCI_ERROR: 0x%04X -> 0x%02X\n", evt->gap.hci_error.hci_opcode, evt->gap.hci_error.status);
        }
    }
  4.    从机以simple工程做示例,烧录到另外一块板,串口打印如下:

    image.png

  5.  程序扫描会一直开启,调用如下会关闭扫描 


    ob_gap_scan_stop();


被收藏 0  ∙  0 赞  
加入收藏
点赞
0 回复  
善言善语 (您需要 登录 后才能回复 没有账号 ?)

请先登录网站