How do I discover multiple services via ble?

I have a device which advertises some services, I want to discover those services and write to those characteristics. However I can only find one service and not multiple.

I have the following code that registers one service:

static void db_discovery_init(void)
{
	uint32_t err_code = ble_db_discovery_init(db_disc_handler);
	APP_ERROR_CHECK(err_code);
	ble_uuid_t    auth_uuid;
	ble_uuid128_t auth_base_uuid = {{0xa0, 0xde, 0xbc, 0x9a, 0x78, 0x56, 0x34, 0x13, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x13}};

	auth_uuid.type = 1;
	auth_uuid.uuid = 0x5678;

	err_code = sd_ble_uuid_vs_add(&auth_base_uuid, &auth_uuid.type);
	if (err_code != NRF_SUCCESS)
	{
		NRF_LOG_INFO("err: %d\n", err_code);
		return;
	}

	err_code = ble_db_discovery_evt_register(&auth_uuid);
	APP_ERROR_CHECK(err_code);
}

But I also have the following service that I want to discover:

ble_uuid128_t other_service_base_uuid = {{0xf3, 0xde, 0xbc, 0x9a, 0x78, 0x56, 0x34, 0x13, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x13}}; which has the same 0x5678 uuid as the other.

I'm thinking maybe there is a way to register a service based on the full uuid, rather than two bytes.

I use sdk 12.3.0 for my nrf51802 with s130.

Edit 1:

I've remade the function so that I register both services to the discovery module and changed the ble_enable_params.common_enable_params.vs_uuid_count to 2. New code:

static void db_discovery_init(void)
{
	uint32_t err_code = ble_db_discovery_init(db_disc_handler);
	APP_ERROR_CHECK(err_code);
	ble_uuid_t    auth_uuid;
	ble_uuid128_t auth_base_uuid = {{0xa0, 0xde, 0xbc, 0x9a, 0x78, 0x56, 0x34, 0x13, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x13}};

	auth_uuid.type = 1;
	auth_uuid.uuid = 0x5678;

	err_code = sd_ble_uuid_vs_add(&auth_base_uuid, &auth_uuid.type);
	if (err_code != NRF_SUCCESS)
	{
		NRF_LOG_INFO("err: %d\n", err_code);
		return;
	}
	err_code = ble_db_discovery_evt_register(&auth_uuid);
	APP_ERROR_CHECK(err_code);

    // Second service:

	ble_uuid_t    ctrl_uuid;
	ble_uuid128_t ctrl_base_uuid = {{0xf3, 0xde, 0xbc, 0x9a, 0x78, 0x56, 0x34, 0x13, 0x78, 0x56, 0x34, 0x12, 0x78, 0x56, 0x34, 0x13}};
	ctrl_uuid.type = 1;
	ctrl_uuid.uuid = 0x5678;

	err_code = sd_ble_uuid_vs_add(&ctrl_base_uuid, &ctrl_uuid.type);
	if (err_code != NRF_SUCCESS)
	{
		NRF_LOG_INFO("err: %d\n", err_code);
		return;
	}

	err_code = ble_db_discovery_evt_register(&ctrl_uuid);
	APP_ERROR_CHECK(err_code);
}

These are my logs:

BLEDRV:INFO:Scanning started, waiting for device...
BLEDRV:INFO:Found the device, connecting...
BLEDRV:INFO:Device connected
BLE_DB_DISC:INFO:Starting discovery of service with UUID 0x5678 for Connection handle 0
BLE_DB_DISC:INFO:Found service UUID 0x5678
BLE_DB_DISC:INFO:Discovery of service with UUID 0x5678 completed with success for Connection handle 0
BLE_DB_DISC:INFO:Starting discovery of service with UUID 0x5678 for Connection handle 0
BLE_DB_DISC:INFO:Service UUID 0x5678 Not found
BLEDRV:INFO:db disc evt type: 0
BLEDRV:INFO:db disc evt type: 2

Parents Reply Children
No Data
Related