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

What is a 'system attribute'

I see this in the documentation for this method

uint32_t sd_ble_gatts_value_set ( uint16_t  conn_handle,
uint16_t  handle,
ble_gatts_value_t  p_value 
)

with this note:

Values other than system attributes can be set at any time, regardless of whether any active connections exist.

But what is a system attribute? Why is one attribute have preference over another? They are, after all, attributes. Is a system attribute any attribute that has no characteristic value, for example, a characteristic declaration? How about a descriptor?

Parents
  • Hi,

    After a chat with the SoftDevice team, I can confirm that:

    System attributes are the parts of the GATT database that should be kept for bonded peers, that is, they should be restored after reconnecting. CCCDs are among the things that needs to be kept for bonded peers.

    System services are default services, such as the GAP service with characteristics such as Peripheral Preferred Connection Parameters (PPCP), Service Changed, etc., that are controlled by the SoftDevice, e.g. either through SoftDevice configuration or because they are mandatory.

    User services are the services added by the application. That can be either SIG defined services such as the Heart Rate Service, or it can be vendor specific services such as the Nordic UART Service (NUS).

    Regards,
    Terje

  • I sort of went forward on that assumption. I save the CCCD tables on shutdown with that 'get' and restore them on connection with that 'set'. I save the table to a file in between. Still can get service-changed to work. Still get BLE_ERROR_GATTS_SYS_ATTR_MISSING.

Reply Children
No Data
Related