Hi everyone,
I am developing a remote control using nRF52832 chip. My prototype is currently developed in PC10040 board. The IDE is Eclipse Oxygen, and the SDK is S132 v5.0.0.
Currently, I am trying to discover the services. But the number of of services found at the peers GATT database, which is returned by m_db_disc.srv_count, is 0. Below is the ble_evt_handler
function.
static void ble_evt_handler(ble_evt_t const * p_ble_evt, void * p_context)
{
ret_code_t err_code;
ble_gap_evt_t const * p_gap_evt = &p_ble_evt->evt.gap_evt;
switch (p_ble_evt->header.evt_id)
{
case BLE_GAP_EVT_CONNECTED:
PrintInfo("BLE GAP event: Connected");
err_code = ble_rcs_handles_assign(&m_ble_rcs, p_ble_evt->evt.gap_evt.conn_handle, NULL);
APP_ERROR_CHECK(err_code);
// start discovery of services. The service client waits for a discovery result
PrintInfo("Start discovery of services");
err_code = ble_db_discovery_start(&m_db_disc, p_ble_evt->evt.gap_evt.conn_handle);
PrintInfo("Number of services at the peers GATT database: %d", m_db_disc.srv_count);
int i;
for(i = 0; i < m_db_disc.srv_count; i++)
{
PrintInfo("Service %X", m_db_disc.services[i].srv_uuid.type);
}
APP_ERROR_CHECK(err_code);
break;
case BLE_GAP_EVT_DISCONNECTED:
PrintInfo("BLE GAP event: Disconnected");
break;
break;
case BLE_GAP_EVT_ADV_REPORT:
{
// The advertisement report
ble_gap_evt_adv_report_t const * p_adv_report = &p_gap_evt->params.adv_report;
PrintDebug("Discovered device %02x%02x%02x%02x%02x%02x",
p_adv_report->peer_addr.addr[0],
p_adv_report->peer_addr.addr[1],
p_adv_report->peer_addr.addr[2],
p_adv_report->peer_addr.addr[3],
p_adv_report->peer_addr.addr[4],
p_adv_report->peer_addr.addr[5]);
if (is_uuid_present(&m_scan_uuids, p_adv_report))
{
err_code = sd_ble_gap_connect(&p_adv_report->peer_addr,
&m_scan_params,
&m_connection_param,
APP_BLE_CONN_CFG_TAG);
if (err_code == NRF_SUCCESS)
{
// scan is automatically stopped by the connect
PrintInfo("Connecting to target %02x%02x%02x%02x%02x%02x",
p_adv_report->peer_addr.addr[0],
p_adv_report->peer_addr.addr[1],
p_adv_report->peer_addr.addr[2],
p_adv_report->peer_addr.addr[3],
p_adv_report->peer_addr.addr[4],
p_adv_report->peer_addr.addr[5]);
}
}
}
break;
case BLE_GATTC_EVT_TIMEOUT:
// Disconnect on GATT Client timeout event.
PrintInfo("GATT Client Timeout.");
err_code = sd_ble_gap_disconnect(p_ble_evt->evt.gattc_evt.conn_handle,
BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);
APP_ERROR_CHECK(err_code);
break;
case BLE_GATTS_EVT_TIMEOUT:
// Disconnect on GATT Server timeout event.
PrintInfo("GATT Server Timeout.");
err_code = sd_ble_gap_disconnect(p_ble_evt->evt.gatts_evt.conn_handle,
BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);
APP_ERROR_CHECK(err_code);
break;
default:
// No implementation needed.
break;
}
}