51822 --- 主机主动扫描和被动扫描

1.目的

     识别什么是主动扫描 什么是被动扫描

2.分析

      在实际中如果需要获得扫描响应,需要主机设置为主动扫描。如果仅仅是需要广播数据则设置为被动扫描。主动扫描和被动扫描的区别在于:主动扫描可以获得广播数据和扫描回应数据。而被动扫描只能获得广播数据不能获得扫描数据。

3.平台:

协议栈版本:SDK10.0.0

编译软件:keil 5.12

硬件平台:微雪开发板nrf51822

例子:SDK10.0\examples\ble_central_and_peripheral\experimental\ble_app_hrs_rscs_relay\pca10028\s130\arm4

4.步骤

  参考资料:《低功耗蓝牙开发权威指南》

1.被动扫描 



2.主动扫描

 

详细参考书籍《低功耗蓝牙开发权威指南》 第114页


接下来实验:

 扫描参数设置:

/** @brief Scan parameters requested for scanning and connection. */
static const ble_gap_scan_params_t m_scan_param =
{
    0,              // Active scanning not set.  //设置为被动扫描
    0,              // Selective scanning not set.
    NULL,           // No whitelist provided.
    SCAN_INTERVAL,
    SCAN_WINDOW,
    0x0000          // No timeout.
};


        case BLE_GAP_EVT_ADV_REPORT:
        {
            uint32_t err_code;
            data_t   adv_data;
            data_t   type_data;

            // For readibility.
            const ble_gap_addr_t  * const peer_addr = &p_gap_evt->params.adv_report.peer_addr;

            // Initialize advertisement report for parsing.                                                                                      adv_data.p_data     = (uint8_t *)p_gap_evt->params.adv_report.data;
            adv_data.data_len   = p_gap_evt->params.adv_report.dlen;
          //这里是打印蓝牙地址					 
            NRF_LOG_PRINTF(" peer_addr  = %d %d %d %d %d %d\r\n", peer_addr->addr[0],peer_addr->addr[1],peer_addr->addr[2],peer_addr->addr[3],peer_addr->addr[4],peer_addr->addr[5] );
		 // NRF_LOG_PRINTF(" p_gap_evt->params.adv_report.type  = %d\r\n", p_gap_evt->params.adv_report.type );                            //这里是打印是否为回应包 回应包为1,广播包为0      
		  NRF_LOG_PRINTF(" p_gap_evt->params.adv_report.scan_rsp  = %d\r\n", p_gap_evt->params.adv_report.scan_rsp );                         //答应对应的数据  广播包或者回应报
		  NRF_LOG_PRINTF(" adv_data.p_data = %s\r\n", adv_data.p_data );

因为周围有很多蓝牙设备 。现在就来扫描了。


可以看到p_gap_evt->params.adv_report.scan_rsp = 0 表示是广播包。


再看把扫描改为主动扫描

/** @brief Scan parameters requested for scanning and connection. */
static const ble_gap_scan_params_t m_scan_param =
{
    1,              // Active scanning not set. //改为主动扫描
    0,              // Selective scanning not set. 
    NULL,           // No whitelist provided.
    SCAN_INTERVAL,
    SCAN_WINDOW,
    0x0000          // No timeout.
};

结果如下:



扫描回应数据了。。。ok 实验成功!!!!!




 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值