uint32_t ble_gatts_evt_rw_authorize_request_t_dec(uint8_t const * const p_buf, uint32_t buf_len, uint32_t * const p_index, uint32_t * const p_ext_len, void * const p_void_struct) { SER_STRUCT_DEC_BEGIN(ble_gatts_evt_rw_authorize_request_t); SER_PULL_uint8(&p_struct->type); switch (p_struct->type) { case BLE_GATTS_AUTHORIZE_TYPE_READ: SER_PULL_FIELD(&p_struct->request.read, ble_gatts_evt_read_t_dec); break; case BLE_GATTS_AUTHORIZE_TYPE_WRITE: err_code = ble_gatts_evt_write_t_dec(p_buf, buf_len, p_index, p_ext_len, &p_struct->request.write); SER_ASSERT(err_code == NRF_SUCCESS, err_code); break; default: case BLE_GATTS_AUTHORIZE_TYPE_INVALID: return NRF_ERROR_INVALID_DATA; } SER_STRUCT_ENC_END; }
uint32_t ble_gatts_evt_write_dec(uint8_t const * const p_buf, uint32_t packet_len, ble_evt_t * const p_event, uint32_t * const p_event_len) { SER_ASSERT_NOT_NULL(p_buf); SER_ASSERT_NOT_NULL(p_event_len); uint32_t err_code = NRF_SUCCESS; uint32_t index = 0; uint32_t in_event_len = *p_event_len; *p_event_len = offsetof(ble_evt_t, evt.gatts_evt.params) - sizeof (ble_evt_hdr_t); uint16_t conn_handle; err_code = uint16_t_dec(p_buf, packet_len, &index, &conn_handle); SER_ASSERT(err_code == NRF_SUCCESS, err_code); void * p_void_write = NULL; if (p_event != NULL) { SER_ASSERT_LENGTH_LEQ(*p_event_len, in_event_len); p_event->evt.gatts_evt.conn_handle = conn_handle; p_void_write = &(p_event->evt.gatts_evt.params.write); } uint32_t tmp_struct_len = in_event_len - *p_event_len; err_code = ble_gatts_evt_write_t_dec(p_buf, packet_len, &index, &tmp_struct_len, p_void_write); SER_ASSERT(err_code == NRF_SUCCESS, err_code); *p_event_len += tmp_struct_len; SER_ASSERT_LENGTH_EQ(index, packet_len); return err_code; }
uint32_t ble_gatts_evt_rw_authorize_request_t_dec(uint8_t const * const p_buf, uint32_t buf_len, uint32_t * const p_index, uint32_t * const p_struct_len, void * const p_void_authorize_request) { SER_ASSERT_NOT_NULL(p_buf); SER_ASSERT_NOT_NULL(p_struct_len); SER_ASSERT_NOT_NULL(p_index); uint32_t err_code = NRF_SUCCESS; uint8_t type; err_code = uint8_t_dec(p_buf, buf_len, p_index, &type); SER_ASSERT(err_code == NRF_SUCCESS, err_code); uint32_t in_struct_len = *p_struct_len; *p_struct_len = offsetof(ble_gatts_evt_rw_authorize_request_t, request); ble_gatts_evt_rw_authorize_request_t * p_authorize_request = (ble_gatts_evt_rw_authorize_request_t *)p_void_authorize_request; void * p_void_request = NULL; if (p_void_authorize_request != NULL) { p_authorize_request->type = type; SER_ASSERT_LENGTH_LEQ(*p_struct_len, in_struct_len); switch (type) { case BLE_GATTS_AUTHORIZE_TYPE_READ: p_void_request = &(p_authorize_request->request.read); break; case BLE_GATTS_AUTHORIZE_TYPE_WRITE: p_void_request = &(p_authorize_request->request.write); break; default: case BLE_GATTS_AUTHORIZE_TYPE_INVALID: return NRF_ERROR_INVALID_DATA; } } switch (type) { case BLE_GATTS_AUTHORIZE_TYPE_READ: err_code = ble_gatts_evt_read_t_dec(p_buf, buf_len, p_index, &in_struct_len, p_void_request); SER_ASSERT(err_code == NRF_SUCCESS, err_code); break; case BLE_GATTS_AUTHORIZE_TYPE_WRITE: err_code = ble_gatts_evt_write_t_dec(p_buf, buf_len, p_index, &in_struct_len, p_void_request); SER_ASSERT(err_code == NRF_SUCCESS, err_code); break; default: case BLE_GATTS_AUTHORIZE_TYPE_INVALID: return NRF_ERROR_INVALID_DATA; } *p_struct_len += in_struct_len; return err_code; }