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

Usage of uuids_complete, uuids_more_available & uuids_solicited

Is there a comprehensive explanation of the usage of uuids_complete, uuids_more_available & uuids_solicited when to use them and how the stack behaves/uses them. I getting bits and pieces by searching through previous questions, but never the whole picture.

The advertising tutorial is out of date, but helpful. Using the HRM example I see that the HRM service is added, plus the Battery & Information service, three services in total.

static ble_uuid_t m_adv_uuids[] = {{BLE_UUID_HEART_RATE_SERVICE, BLE_UUID_TYPE_BLE}, {BLE_UUID_BATTERY_SERVICE, BLE_UUID_TYPE_BLE}, {BLE_UUID_DEVICE_INFORMATION_SERVICE, BLE_UUID_TYPE_BLE}}; /**< Universally unique service identifiers. */

image description

Within advertising_init() m_adv_uuids is assigned to advdata.uuids_complete.p_uuids

advdata.uuids_complete.p_uuids = m_adv_uuids;

And the Master Control Panel showing 3 in total, the same 3 assigned in advertising_init(). When would I want to use uuids_more_available & uuids_solicited and how would the stack make use of these values.

I am conscious that this example is just using 16 bit UUID's.

Once connected I see the following:image description

So once connected where are the other service being added? Generic services (0x1800, 0x1801) are added. I guess the client searches for all services, once connected. Are these two being added by the stack ? & from the application how can they be disabled/enabled if necessary?

Parents
  • So UUID complete vs incomplete - Two Service UUID data types are assigned to each size of Service UUID. One Service UUID data type indicates that the Service UUID list is incomplete and the other indicates the Service UUID list is complete.

    Service solicited - A Peripheral device may send the Service Solicitation data type to invite Central devices that expose one or more of the services specified in the Service Solicitation data to connect.

    Please note that adding services to the list in the Advertisment packet does not add the same services to the attribute table. The attribute table needs to be populated using the GATTS functions. I recommend looking throught the tutorials if you want more details.

Reply
  • So UUID complete vs incomplete - Two Service UUID data types are assigned to each size of Service UUID. One Service UUID data type indicates that the Service UUID list is incomplete and the other indicates the Service UUID list is complete.

    Service solicited - A Peripheral device may send the Service Solicitation data type to invite Central devices that expose one or more of the services specified in the Service Solicitation data to connect.

    Please note that adding services to the list in the Advertisment packet does not add the same services to the attribute table. The attribute table needs to be populated using the GATTS functions. I recommend looking throught the tutorials if you want more details.

Children
  • Very sorry run, I don't understand any of your reply. I will have to go through it step by step in detail and try to relate it to the CoreBT Spec and the Nordic Documentation. The tutorial on the subject doesn't help.

  • If you are new to bluetooth it would make sense to go through all our bluetooth tutorials. The stack doesn't really do much with the advertisement package. It just does a simple check to see if it's valid and starts adveritising. So it is up to the application to configure the string that is advertised. This should reflect the capabilities of the advertiser and make it easy for the scanner to identify the advertiser. You can advertise a complete or a incomplete list of the services your device supports depending on what you have space for in the advertisement package. The complete and incomplete list uses different advertisement types to tell the scanner whether the list is complete or not.

  • Been using BlueGiga, on and off, since 2013! but it's a walk in the park, usability wise, compared with Nordic. BlueGiga doco is just as bad :O) but their stack is more abstracted so no need to understand so much detail, but less control. Unfortunately many of the Nordic tutorials, I have looked at, are out of date, hence they less efficient learning tools.

    So when you say "incomplete list" you mean uuids_more_available referencing the spec; you mean values 0x02 (for 16 bit), 0x04 (for 32 bit) & 0x06 (128-bit). The Nordic stack will compose using these value if data if UUID are added to uuids_more_available list?

    I am still confused by Service Solicitation I need todo more work on this.

  • Yes, by incomplete I mean "more available. The nordic stack will just check that you have the correct formating for the advertisement packet. You will need to use other functions to actually add the services to the attribute table. Note that the sdk has multiple services that you can add to your application.

    An example for Service solicitation would be ANCS. Here the Peripheral is a GATT client and it needs a central with a gatt server with the ANCS service. By advertising with ANCS in service solicited it tells the scanner (iOS) that it is "looking for" a Central that has the ANCS service. The same thing is true for the current time service client. ble_app_cts_c uses service solicited because it needs a central with a gatt server that has the current time service server.

  • This is a useful link however I am struggling to find the explicit explanation for "More & Complete available" in the BT spec - so would greatly appreciate any spec references.

Related