- 蓝牙主模式RSSI获取只需要三步
- 蓝牙连接成功后调用sd_ble_gap_rssi_start函数启动rssi
sd_ble_gap_rssi_start(m_conn_handle,0,0);
2.启动后调用sd_ble_gap_rssi_get函数就可以获取到rssi相关信息
int8_t rssi;
uint8_t connectChannel;
sd_ble_gap_rssi_get(m_conn_handle, &rssi,&connectChannel);
- 蓝牙断开后调用sd_ble_gap_rssi_stop函数停止rssi
sd_ble_gap_rssi_stop(m_conn_handle);
三个函数的原型说明如下:
/**@brief Start reporting the received signal strength to the application.
*
* A new event is reported whenever the RSSI value changes, until @ref sd_ble_gap_rssi_stop is called.
*
* @events
* @event{@ref BLE_GAP_EVT_RSSI_CHANGED, New RSSI data available. How often the event is generated is
* dependent on the settings of the threshold_dbm
* and skip_count
input parameters.}
* @endevents
*
* @mscs
* @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC}
* @mmsc{@ref BLE_GAP_RSSI_FILT_MSC}
* @endmscs
*
* @param[in] conn_handle Connection handle.
* @param[in] threshold_dbm Minimum change in dBm before triggering the @ref BLE_GAP_EVT_RSSI_CHANGED event. Events are disabled if threshold_dbm equals @ref BLE_GAP_RSSI_THRESHOLD_INVALID.
* @param[in] skip_count Number of RSSI samples with a change of threshold_dbm or more before sending a new @ref BLE_GAP_EVT_RSSI_CHANGED event.
*
* @retval ::NRF_SUCCESS Successfully activated RSSI reporting.
* @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is already ongoing.
* @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied.
*/
SVCALL(SD_BLE_GAP_RSSI_START, uint32_t, sd_ble_gap_rssi_start(uint16_t conn_handle, uint8_t threshold_dbm, uint8_t skip_count));
/**@brief Stop reporting the received signal strength.
*
* @note An RSSI change detected before the call but not yet received by the application
* may be reported after @ref sd_ble_gap_rssi_stop has been called.
*
* @mscs
* @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC}
* @mmsc{@ref BLE_GAP_RSSI_FILT_MSC}
* @endmscs
*
* @param[in] conn_handle Connection handle.
*
* @retval ::NRF_SUCCESS Successfully deactivated RSSI reporting.
* @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is not ongoing.
* @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied.
*/
SVCALL(SD_BLE_GAP_RSSI_STOP, uint32_t, sd_ble_gap_rssi_stop(uint16_t conn_handle));
/**@brief Get the received signal strength for the last connection event.
*
* @ref sd_ble_gap_rssi_start must be called to start reporting RSSI before using this function. @ref NRF_ERROR_NOT_FOUND
* will be returned until RSSI was sampled for the first time after calling @ref sd_ble_gap_rssi_start.
* @mscs
* @mmsc{@ref BLE_GAP_CENTRAL_RSSI_READ_MSC}
* @endmscs
*
* @param[in] conn_handle Connection handle.
* @param[out] p_rssi Pointer to the location where the RSSI measurement shall be stored.
* @param[out] p_ch_index Pointer to the location where Channel Index for the RSSI measurement shall be stored.
*
* @retval ::NRF_SUCCESS Successfully read the RSSI.
* @retval ::NRF_ERROR_NOT_FOUND No sample is available.
* @retval ::NRF_ERROR_INVALID_ADDR Invalid pointer supplied.
* @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid connection handle supplied.
* @retval ::NRF_ERROR_INVALID_STATE RSSI reporting is not ongoing.
*/
SVCALL(SD_BLE_GAP_RSSI_GET, uint32_t, sd_ble_gap_rssi_get(uint16_t conn_handle, int8_t *p_rssi, uint8_t *p_ch_index));