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

SCCD not visible in nrfToolbox

I am trying to implement SCCD on S130 v2 sdk11 but this is not in the scope of the tutorial. I have populated the structure just the same as for CCCD, but I can't have the descriptor shown in nRF toolbox or in my own android app when using getDescriptors (developer.android.com/.../BluetoothGattCharacteristic.html. I have tried to un-re-bond device but it does not help. do I have to use add_descriptor function, ? it is not used for cccd, so I don't use it for sccd. If it is needed, please provide an example as the doc does not really help. I want to use this descriptor in order to activate some hardware peripheral on my device independantly from notifications, as the peripheral is HW ressource, hence unique for all clients.

here is my code (sorry for formatting but I am a newbie on this forum)

ble_gatts_attr_md_t sccd_md;
memset(&sccd_md, 0, sizeof(sccd_md));
BLE_GAP_CONN_SEC_MODE_SET_OPEN(&sccd_md.read_perm);
BLE_GAP_CONN_SEC_MODE_SET_OPEN(&sccd_md.write_perm);
    sccd_md.vloc                = BLE_GATTS_VLOC_STACK; 
    sccd_md.rd_auth = 0;
    sccd_md.wr_auth = 0;
    char_md.p_sccd_md           = &sccd_md;  				
    
err_code =  sd_ble_gatts_characteristic_add(p_dss->service_handle,
                                       &char_md,
                                       &attr_char_value,
                                       &p_dss->accelerometer_handles);
Parents
  • Hi jfDEVmoto,

    I don't think the SCCD would fit with what you planed to do with it. The only defined function that the SCCD would do is defined in the spec is "Broadcast" which means the client enable the value of the characteristic to be added to advertising packet if possible. I guess you already figured it out.

    It's not a good idea to use the RFU bit for your purpose.

    If you want to control a hardware on the server, you can simply create a new proprietary characteristic add to the server att table and use it for your purpose.

    If you still want to use the SCCD, you would need to treat it as a normal descriptor, and use getDescriptors and BluetoothGattDescriptor (on Android) to read/write to it.

  • Thanks for your answer. I agree with your advise, however, is it possible to add a custom descriptor instead of using a custom characteristic ? Then do you confirm the descriptor value can be read with sd_ble_gatts_sys_attr_get ?

    I have currently different services, one of them is sensor service with one characteristic per sensor, than I wish to have one descriptor for each sensor char in order to activate the hardware sensor. I think this is easier for modularity than having a characteristic to activate the hardware sensor. However, having one characteristic to handle all sensors hardware status may be of lower memory overhead but I think it wil be hard to maintain when different versions of the product may have different set of sensor features.

Reply
  • Thanks for your answer. I agree with your advise, however, is it possible to add a custom descriptor instead of using a custom characteristic ? Then do you confirm the descriptor value can be read with sd_ble_gatts_sys_attr_get ?

    I have currently different services, one of them is sensor service with one characteristic per sensor, than I wish to have one descriptor for each sensor char in order to activate the hardware sensor. I think this is easier for modularity than having a characteristic to activate the hardware sensor. However, having one characteristic to handle all sensors hardware status may be of lower memory overhead but I think it wil be hard to maintain when different versions of the product may have different set of sensor features.

Children
No Data
Related