static void ble_evt_handler(ble_evt_t const *p_ble_evt, void *p_context)
{
ret_code_t err_code;
NRF_LOG_INFO("Received BLE event: %d", p_ble_evt->header.evt_id);
switch (p_ble_evt->header.evt_id)
{
case BLE_GAP_EVT_ADV_REPORT: // 29
{
NRF_LOG_INFO("Report_I");
on_adv_report(&(p_ble_evt->evt.gap_evt));
break;
}
/**@brief Function called on BLE_GAP_EVT_ADV_REPORT event.
*
* @details Create a connection if received advertising packet corresponds to desired BLE device.
*
* @param[in] p_ble_gap_evt Advertising Report Event.
*/
void on_adv_report(const ble_gap_evt_t *const p_ble_gap_evt)
{
uint32_t err_code = 0;
uint8_t str[STRING_BUFFER_SIZE] = {0};
NRF_LOG_INFO("Adv Report.");
// Log the Bluetooth device address of advertisement packet received.
// ble_address_to_string_convert(p_ble_gap_evt->params.adv_report.peer_addr, str);
const uint8_t *address = p_ble_gap_evt->params.adv_report.peer_addr.addr;
char _temp_str[250];
memset(_temp_str, 0, 250);
sprintf(_temp_str, "Advertising Report: Device Address: %02x%02x%02x%02x%02x%02x, ", address[5], address[4], address[3], address[2], address[1], address[0]);
sprintf(_temp_str + strlen(_temp_str), "Addr Type: 0x%d, ", p_ble_gap_evt->params.adv_report.peer_addr.addr_type);
sprintf(_temp_str + strlen(_temp_str), "Addr ID Peer: 0x%d, ", p_ble_gap_evt->params.adv_report.peer_addr.addr_id_peer);
sprintf(_temp_str + strlen(_temp_str), "Device Rssi: %d\n", p_ble_gap_evt->params.adv_report.rssi);
usb_printf_variadic("%s\r\n", _temp_str);
// usb_printf_variadic("Advertising Data: %s", p_ble_gap_evt->params.adv_report.data.p_data);
NRF_LOG_INFO("SCAN_START_1");
nrf_delay_us(100000);
NRF_LOG_INFO("DELAY_END");
err_code = sd_ble_gap_scan_start(NULL, &m_adv_report_buffer);
NRF_LOG_INFO("SCAN_START_2");
if (err_code != NRF_SUCCESS)
{
usb_printf_variadic("Error starting scan. Error code 0x%02X\r\n", err_code);
}
else
{
// //printf("Scan started\n");
// usb_printf_variadic("GAP Scan Start\n");
}
}
The above is my code.
[19:03:32.288]收←◆<info> app: SCAN_START_2 <info> app: Received BLE event: 29 <info> app: Report_I <info> app: Adv Report. <info> app: SCAN_START_1 <info> app: DELAY_END <info> app: SCAN_START_2 <info> app: Received BLE event: 29 <info> app: Report_I <info> app: Adv Report. <info> app: SCAN_START_1 <info> app: DELAY_END <info> app: SCAN_START_2 [19:03:32.443]收←◆<info> app: Received BLE event: 29
This is running log.
After scanning multiple times, my application may freeze, as shown in the log, and there will be no response after receiving the event.