Hello, I want to scan all ble devices present near by nrf52-dk and process the data in my application. I am unable to find the scanning ble device code in nrf52 sdk. I am absolutely new in nrf development. Please give some idea.
Hello, I want to scan all ble devices present near by nrf52-dk and process the data in my application. I am unable to find the scanning ble device code in nrf52 sdk. I am absolutely new in nrf development. Please give some idea.
A good starting point would be a BLE central example, for instance the ble_app_blinky_c in the nRF5 SDK.
What you are looking for is handling of the BLE_GAP_EVT_ADV_REPORT event, this is typically handled by the nrf_ble_scan.c module. However you may also add it to your ble_evt_handler() in main.c and extract whatever information you want.
/**@brief Event structure for @ref BLE_GAP_EVT_ADV_REPORT. * * @note If @ref ble_gap_adv_report_type_t::status is set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, * not all fields in the advertising report may be available. * * @note When ble_gap_adv_report_type_t::status is not set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, * scanning will be paused. To continue scanning, call @ref sd_ble_gap_scan_start. */ typedef struct { ble_gap_adv_report_type_t type; /**< Advertising report type. See @ref ble_gap_adv_report_type_t. */ ble_gap_addr_t peer_addr; /**< Bluetooth address of the peer device. If the peer_addr is resolved: @ref ble_gap_addr_t::addr_id_peer is set to 1 and the address is the peer's identity address. */ ble_gap_addr_t direct_addr; /**< Contains the target address of the advertising event if @ref ble_gap_adv_report_type_t::directed is set to 1. If the SoftDevice was able to resolve the address, @ref ble_gap_addr_t::addr_id_peer is set to 1 and the direct_addr contains the local identity address. If the target address of the advertising event is @ref BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE, and the SoftDevice was unable to resolve it, the application may try to resolve this address to find out if the advertising event was directed to us. */ uint8_t primary_phy; /**< Indicates the PHY on which the primary advertising packet was received. See @ref BLE_GAP_PHYS. */ uint8_t secondary_phy; /**< Indicates the PHY on which the secondary advertising packet was received. See @ref BLE_GAP_PHYS. This field is set to @ref BLE_GAP_PHY_NOT_SET if no packets were received on a secondary advertising channel. */ int8_t tx_power; /**< TX Power reported by the advertiser in the last packet header received. This field is set to @ref BLE_GAP_POWER_LEVEL_INVALID if the last received packet did not contain the Tx Power field. @note TX Power is only included in extended advertising packets. */ int8_t rssi; /**< Received Signal Strength Indication in dBm of the last packet received. @note ERRATA-153 and ERRATA-225 require the rssi sample to be compensated based on a temperature measurement. */ uint8_t ch_index; /**< Channel Index on which the last advertising packet is received (0-39). */ uint8_t set_id; /**< Set ID of the received advertising data. Set ID is not present if set to @ref BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE. */ uint16_t data_id:12; /**< The advertising data ID of the received advertising data. Data ID is not present if @ref ble_gap_evt_adv_report_t::set_id is set to @ref BLE_GAP_ADV_REPORT_SET_ID_NOT_AVAILABLE. */ ble_data_t data; /**< Received advertising or scan response data. If @ref ble_gap_adv_report_type_t::status is not set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA, the data buffer provided in @ref sd_ble_gap_scan_start is now released. */ ble_gap_aux_pointer_t aux_pointer; /**< The offset and PHY of the next advertising packet in this extended advertising event. @note This field is only set if @ref ble_gap_adv_report_type_t::status is set to @ref BLE_GAP_ADV_DATA_STATUS_INCOMPLETE_MORE_DATA. */ } ble_gap_evt_adv_report_t;
Kenneth
Thanks for reply. Just, I have tried. I have initialized "ble_gap_evt_adv_report_t ble_gap_evt_adv_report_temp_var" in main.c and printing the rssi value in "ble_evt_handler" function by "NRF_LOG_INFO("%d",ble_gap_evt_adv_report_temp_var.rssi)". Output is 0 . Can you please help me in detail what exactly, i have to do?
Did you call sd_ble_gap_rssi_start()?
Kenneth
In main.c, i have found the function scan_start(). This function is being called and right after the scan_start(), i expect the scan data(UUID, data, rssi, tx_value).
In main.c, i have found the function scan_start(). This function is being called and right after the scan_start(), i expect the scan data(UUID, data, rssi, tx_value).