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.

  • 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.

Reply
  • 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.

Children
No Data
Related