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

Problem with sd_ble_gatts_hvx without notifications enabled

Hi there!

I am trying to add custom UUID's for my BLE application. I have a custom service which has 2 RX and 3 TX characteristics.

I have a situation where the Android APP that I am using doesn't notify. Because of this I am not able to write my data into one of the TX characteristics to transmit data to the mobile.

This results in sd_ble_gatts_hvx() returning error code as 8 - INVALID STATE.

As a workaround I added the following:

    case BLE_GAP_EVT_CONNECTED:
    	gu16_connhandle = lsp_ble_evt->evt.gap_evt.conn_handle;
    	errcode = sd_ble_gatts_sys_attr_set(gu16_connhandle, NULL, 0, 0);

As this did not work, I tried doing the following too:

    	lu16ar_Buffer[0] = 16;      // cccd handle
    	lu16ar_Buffer[1] = 2;       // cccd attribute size = 2
    	lu16ar_Buffer[2] = 1;       // 1 = enable notifications
    	lu16ar_Buffer[3] = 0xCACD;  // CRC-CCITT (0xFFFF)
    	lu32_errcode = sd_ble_gatts_sys_attr_set(gu16_connhandle, (u8*)lu16ar_Buffer, 8, 0);

Inspite of doing the above, I did not have any luck transmitting the BLE data that I intend to.

Is there any way that I can transmit (write in the characteristics) without the notification being enabled from the Android APP?

I am using SDK 12.1

Thanks in advance!

Parents Reply
  • That link only say that you cannot write the cccd of the characteristics using sd_ble_gatts_value_set(). You should still be able to set the value of the characteristics using this function. I tested this on the BLE UART example, and that works fine. Are you getting any error codes from sd_ble_gatts_value_set() when you use that code? Note that you explicitly have to read the characteristics on the phone to get the value, you will not get any hints that a new value is available.

Children
No Data
Related