This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

the CCCD of custom value characteristic with nrf52832

Hello,

I am using 14.1.0 SDK, I implemented the custom service and characteristic, but if adding CCCD(Client Characteristic Configuration Descriptor) with the custom value characteristic, the system will be reset, I can't know the reason,

when checking the issue point, the issue is happened with sd_ble_gatts_hvx function,

please help me the method to solve issue,

thanks

refer the code below,

uint32_t ble_cus_custom_value_update(ble_cus_t * p_cus, uint8_t custom_value)
{
    NRF_LOG_INFO("In ble_cus_custom_value_update. \r\n"); 
    if (p_cus == NULL)
    {
        return NRF_ERROR_NULL;
    }
	
    uint32_t err_code = NRF_SUCCESS;
    ble_gatts_value_t gatts_value;

    // Initialize value struct.
    memset(&gatts_value, 0, sizeof(gatts_value));

    gatts_value.len     = sizeof(uint8_t);
    gatts_value.offset  = 0;
    gatts_value.p_value = &custom_value;

    // Update database.
    err_code = sd_ble_gatts_value_set(p_cus->conn_handle,
                                      p_cus->custom_value_handles.value_handle,
                                      &gatts_value);
    if (err_code != NRF_SUCCESS)
    {
    	printf("ERROR sd_ble_gatts_value_set \r\n");
        return err_code;
    }

    // Send value if connected and notifying.
    if ((p_cus->conn_handle != BLE_CONN_HANDLE_INVALID)) 
    {
        ble_gatts_hvx_params_t hvx_params;

        memset(&hvx_params, 0, sizeof(hvx_params));

        hvx_params.handle = p_cus->custom_value_handles.value_handle;
        hvx_params.type   = BLE_GATT_HVX_NOTIFICATION;
        hvx_params.offset = gatts_value.offset;
        hvx_params.p_len  = &gatts_value.len;
        hvx_params.p_data = gatts_value.p_value;
//	printf("hvx_params.p_data : %d \r\n", *hvx_params.p_data); 
        err_code = sd_ble_gatts_hvx(p_cus->conn_handle, &hvx_params);
//        printf("sd_ble_gatts_hvx result: %x  \r\n", err_code); 
    }
    else
    {
        err_code = NRF_ERROR_INVALID_STATE;
        printf("sd_ble_gatts_hvx result: NRF_ERROR_INVALID_STATE. \r\n"); 
    }

    return err_code;
}
Parents
  • Sorry but I don't see anything related to CCCD in your code snippet. Can you be more precise in the description? You have Nordic FW which is GAP Peripheral and GATT Server? You create custom GATT Service and Characteristic during the start-up? At that time you also set Notify property of the Characteristic so the stack automatically creates CCCD handle? Do you store the structure with all the handles created by stack (response to characteristic create function call) for later use?

Reply
  • Sorry but I don't see anything related to CCCD in your code snippet. Can you be more precise in the description? You have Nordic FW which is GAP Peripheral and GATT Server? You create custom GATT Service and Characteristic during the start-up? At that time you also set Notify property of the Characteristic so the stack automatically creates CCCD handle? Do you store the structure with all the handles created by stack (response to characteristic create function call) for later use?

Children
No Data
Related