6626 RSSI 读取

wen sir · 123次点击 · 2个月前


(1)扫描广播包中,获取目标的RSSI值

    ob_event_callback_reg(app_scan_event_cb);


static void app_scan_event_cb(uint16_t evt_id, const omble_evt_t *evt)
{
    const ob_gap_evt_adv_report_t *report;
    if (evt_id == OB_GAP_EVT_ADV_REPORT)
    {
        report = &evt->gap.adv_report;
        OM_LOG_DEBUG("adv rssi =%d", report->rssi); 
    }
    else if (evt_id == OB_GAP_EVT_TIMEOUT)
    {
        log_info("scan timeout");
    }
}


(2) 连接中 获取连接目标的 RSSI。

在蓝牙事件处理中,如Datalength 交换后,通过ob_gap_get_device_info来发起读RSSI事件。

并在返回RSSI的事件中,再次发起N次,直到读取N次,然后可以求平均值。

当然也可以在任意其它地方发。不一定非在蓝牙事件处理中发现。

接收则是得在这里处理。


static void app_master_event_cb(uint16_t evt_id, const omble_evt_t *evt)
{
    uint16_t handle = 0;
    uint16_t uuid16;
    int i = evt->gap.conn_idx;
    if (evt_id == OB_GAP_EVT_CONNECTED)
    {

    //......

    }

   else if (evt_id == OB_GAP_EVT_DATA_LEN_CHANGED)

    {
        uint16_t rx_cnt, tx_cnt;
        log_debug("\nOB_GAP_EVT_DATA_LEN_CHANGED");
        rx_cnt = evt->gap.data_len_changed.max_rx_octets;
        tx_cnt = evt->gap.data_len_changed.max_tx_octets;
        log_debug("\nrx cnt=%d,tx_cnt=%d", rx_cnt, tx_cnt);
        //
        log_debug("\nget rssi");
        memset(&rssi_record, 0, sizeof(rssi_record));//清空记录
        ob_gap_get_device_info(OB_DEV_INFO_RSSI, 0); //获取 OB_DEV_INFO_RSSI, 0-连接Idx
    }
    else if (evt_id == OB_GAP_EVT_DEVICE_INFO)
    {
        ob_gap_evt_device_info_t *dev_info = &evt->gap.device_info;
        int16_t rssi = 0;
        if (dev_info->type ==  OB_DEV_INFO_RSSI)
        {
            if (rssi_record.rssi_index < RSSI_IDX_MAX)
            {
                rssi_record.rssi[rssi_record.rssi_index++] = dev_info->rssi;
                log_debug("\nRSSI [%d]:%d", rssi_record.rssi_index, dev_info->rssi);
                ob_gap_get_device_info(OB_DEV_INFO_RSSI, 0); //OB_DEV_INFO_RSSI, 0-连接Idx
            }
            else
            {
                extern  void respond_rssi_result(int16_t rssi);
                for (i = 0; i < RSSI_IDX_MAX; i++)
                {
                    rssi += rssi_record.rssi[i];
                }
                rssi = rssi / RSSI_IDX_MAX;
                respond_rssi_result(rssi);
            }
        }

    }

    //......

}


void respond_rssi_result(int16_t rssi)
{
    uint8_t  data[20];
    if (rssi_measure_flag == true)
    {
        sprintf(data, "RSSI:%d\r\n", (int)rssi);
        rssi_measure_flag = false;
        log_debug("report rssi=%d\r\n", rssi);
    }
}

[13:29:06.009]收←◆RSSI:-38 [13:29:06.900]收←◆RSSI:-47 [13:29:07.833]收←◆RSSI:-46 [13:29:12.784]收←◆RSSI:-39

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

请先登录网站