(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 |