This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Listing characteristics of a service

Hi,

I'm using the nrf52840 with sdk v15.3 and I'm trying to list of the characteristics of a specific service that has a 128 bit uuid running on a peripheral. However, even though I'm able to connect to the peripheral, I'm encountering problems when trying to retrieve characteristics using the db discovery module.

Here's a sample of the code that doesn't work:

static void ble_evt_handler(ble_evt_t const * p_ble_evt, void * p_context)
{
    ret_code_t            err_code;

    switch (p_ble_evt->header.evt_id)
    {
        case BLE_GAP_EVT_CONNECTED:
            NRF_LOG_INFO("Connected.");

            err_code = ble_db_discovery_start(&m_db_disc, p_ble_evt->evt.gap_evt.conn_handle);
            APP_ERROR_CHECK(err_code);
            break;

        [...]
    }
}

static void db_discovery_init(void)
{
    ble_db_discovery_init_t db_init;

    memset(&db_init, 0, sizeof(db_init));

    db_init.evt_handler  = db_disc_handler;
    db_init.p_gatt_queue = &m_ble_gatt_queue;

    ret_code_t err_code = ble_db_discovery_init(&db_init);
    APP_ERROR_CHECK(err_code);

    ble_uuid128_t service_uuid = {{0x6d, 0x7d, 0x66, 0xec,
                                   0x0c, 0xf1, 0x11, 0xea,
                                   0x8d, 0x71, 0x36, 0x2b,
                                   0x9e, 0x15, 0x56, 0x67}};
    sd_ble_uuid_vs_add(&service_uuid, &custom_uuid_type);

    ble_uuid_t uuid;
    uuid.type = custom_uuid_type;
    uuid.uuid = 0x66ec;

    ble_db_discovery_evt_register(&uuid);
}

The issue is that my handler consistenly gets BLE_DB_DISCOVERY_ERROR events because, in ${SDK}/components/ble/nrf_ble_gq/nrf_ble_gq.c, the call to sd_ble_gattc_primary_services_discover() is failing in request_process() with NRF_ERROR_INVALID_PARAM, which I assume is because of my UUID.

Am I doing something fundamentally wrong here?

Thanks,

Related