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?