Characteristic Discovery with 128bit UUID

Hi,

We are evaluating the possibility to connect our nRF52840 to another BLE device but we are facing issues with UUID Nordic handling strategy.

Quickly: 

  • We have a central nRF and two pheripheral. The first is Nordic the second is system in production and we cannot change the SW.
  • We created a custom service on the Nordic pheripheral and it works properly (characteristic discovered sendind data etc.)
  • Later we tried to discovery the service on the second pheripheral.
    Second pheripheral has:
    • SERVICE UUID acbd3540-0211-4126-8c1f-45bcb7722f9e
    • CHAR_1 UUID acbd3540-0211-4126-8c1f-45bcb7722fA0
    • CHAR_2 UUID acbd3540-0211-4126-8c1f-45bcb7722fA1
    • CHAR_3 UUID acbd3540-0211-4126-8c1f-45bcb7722fA2

As you can see the other vendor is adopting the same Nordic strategy for UUID but on 00-01 octet instead of 12-13 octet as Nordic.

We added SERVICE UUID and CHAR_1 UUID to UUID List in the SD (sd_ble_uuid_vs_add(..) ) and we provide 0x3540 to ble_db_discovery_evt_register

It connects to the pheripheal but the discovery fail.
Here the log:

ble_db_disc: Starting discovery of service with UUID 0x3540 on connection handle 0x1

nrf_ble_gq: Adding item to the request queue

nrf_ble_gq: GATTC Primary Services Discovery Request

nrf_ble_gq: SD GATT procedure (2) succeeded on connection handle: 1

nrf_ble_gq: Processing the request queue...

ble_db_disc: Service UUID 0xB03E not found

Did someone solved a similar problem or someone from Nordic can support?

Alessandro

Parents Reply Children
  • Hi Simon,

    happy to know it's possible.

    Justo to be clear.

    First of all I have to add the different UUID with sd_ble_uuid_vs_add() with something like this

    So, I will add all my UUID128 (service and characteristics).

        err_code = sd_ble_uuid_vs_add(&ads_base_uuid, &p_ble_ads_c->uuid_type);
    
        VERIFY_SUCCESS(err_code);

    Later I will have to register the UUID for the discovery event.

    But here my question: I have to do it?

    All the characteristic have the same 16bit UUID so I need to use the 128UUID.

    Here the code I am using up to now. This function accept only 16UUID not 128UUID

        ads_uuid.type = p_ble_ads_c->uuid_type;
        ads_uuid.uuid = ADS_SERVICE_UUID;
    
        return ble_db_discovery_evt_register(&ads_uuid);

    This is why I am asking your support.

    Alessandro

Related