Hi everyone,
I've written a custom BLE service with two characteristics. I want to write more that one bytes to one of the characteristics and then to store the written value to a variable.
By default the data member of ble_gatts_evt_write_t is size 1. I am not sure if I have to modify the size of data member..
typedef struct { uint16_t handle; /**< Attribute Handle. */ ble_uuid_t uuid; /**< Attribute UUID. */ uint8_t op; /**< Type of write operation, see @ref BLE_GATTS_OPS. */ uint8_t auth_required; /**< Writing operation deferred due to authorization requirement. Application may use @ref sd_ble_gatts_value_set to finalize the writing operation. */ uint16_t offset; /**< Offset for the write operation. */ uint16_t len; /**< Length of the received data. */ uint8_t data[1]; /**< Received data. @note This is a variable length array. The size of 1 indicated is only a placeholder for compilation. See @ref sd_ble_evt_get for more information on how to use event structures with variable length array members. */ } ble_gatts_evt_write_t;
For example if I write two bytes to the characteristic, is this approach going to work?
static void on_write(ble_cus_t *p_cus, ble_evt_t const *p_ble_evt) { ble_gatts_evt_write_t const *p_evt_write = &p_ble_evt->evt.gatts_evt.params.write; static ble_cus_evt_t evt; if ((p_evt_write->handle == p_cus->sampling_rate_handles.value_handle) && (p_evt_write->len == 2)) { if (p_cus->evt_handler != NULL) { uint8_t msb; uint8_t lsb; msb = p_evt_write->data[0]; lsb = p_evt_write->data[1]; unint16_t data = (msb << 8) | lsb; evt.sampling_rate = data; p_cus->evt_handler(p_cus, &evt); // na - Call the application event handler. }
Thanks in advance
Nick