1*042d53a7SEvalZero /*
2*042d53a7SEvalZero * Licensed to the Apache Software Foundation (ASF) under one
3*042d53a7SEvalZero * or more contributor license agreements. See the NOTICE file
4*042d53a7SEvalZero * distributed with this work for additional information
5*042d53a7SEvalZero * regarding copyright ownership. The ASF licenses this file
6*042d53a7SEvalZero * to you under the Apache License, Version 2.0 (the
7*042d53a7SEvalZero * "License"); you may not use this file except in compliance
8*042d53a7SEvalZero * with the License. You may obtain a copy of the License at
9*042d53a7SEvalZero *
10*042d53a7SEvalZero * http://www.apache.org/licenses/LICENSE-2.0
11*042d53a7SEvalZero *
12*042d53a7SEvalZero * Unless required by applicable law or agreed to in writing,
13*042d53a7SEvalZero * software distributed under the License is distributed on an
14*042d53a7SEvalZero * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15*042d53a7SEvalZero * KIND, either express or implied. See the License for the
16*042d53a7SEvalZero * specific language governing permissions and limitations
17*042d53a7SEvalZero * under the License.
18*042d53a7SEvalZero */
19*042d53a7SEvalZero
20*042d53a7SEvalZero #include <errno.h>
21*042d53a7SEvalZero #include <string.h>
22*042d53a7SEvalZero #include "os/os.h"
23*042d53a7SEvalZero #include "nimble/ble.h"
24*042d53a7SEvalZero #include "ble_hs_priv.h"
25*042d53a7SEvalZero #include "host/ble_att.h"
26*042d53a7SEvalZero #include "host/ble_uuid.h"
27*042d53a7SEvalZero #include "ble_hs_priv.h"
28*042d53a7SEvalZero
29*042d53a7SEvalZero void *
ble_att_cmd_prepare(uint8_t opcode,size_t len,struct os_mbuf * txom)30*042d53a7SEvalZero ble_att_cmd_prepare(uint8_t opcode, size_t len, struct os_mbuf *txom)
31*042d53a7SEvalZero {
32*042d53a7SEvalZero struct ble_att_hdr *hdr;
33*042d53a7SEvalZero
34*042d53a7SEvalZero if (os_mbuf_extend(txom, sizeof(*hdr) + len) == NULL) {
35*042d53a7SEvalZero os_mbuf_free_chain(txom);
36*042d53a7SEvalZero return NULL;
37*042d53a7SEvalZero }
38*042d53a7SEvalZero
39*042d53a7SEvalZero hdr = (struct ble_att_hdr *)(txom)->om_data;
40*042d53a7SEvalZero
41*042d53a7SEvalZero hdr->opcode = opcode;
42*042d53a7SEvalZero
43*042d53a7SEvalZero return hdr->data;
44*042d53a7SEvalZero }
45*042d53a7SEvalZero
46*042d53a7SEvalZero void *
ble_att_cmd_get(uint8_t opcode,size_t len,struct os_mbuf ** txom)47*042d53a7SEvalZero ble_att_cmd_get(uint8_t opcode, size_t len, struct os_mbuf **txom)
48*042d53a7SEvalZero {
49*042d53a7SEvalZero *txom = ble_hs_mbuf_l2cap_pkt();
50*042d53a7SEvalZero if (*txom == NULL) {
51*042d53a7SEvalZero return NULL;
52*042d53a7SEvalZero }
53*042d53a7SEvalZero
54*042d53a7SEvalZero return ble_att_cmd_prepare(opcode, len, *txom);
55*042d53a7SEvalZero }
56*042d53a7SEvalZero
57*042d53a7SEvalZero int
ble_att_tx(uint16_t conn_handle,struct os_mbuf * txom)58*042d53a7SEvalZero ble_att_tx(uint16_t conn_handle, struct os_mbuf *txom)
59*042d53a7SEvalZero {
60*042d53a7SEvalZero struct ble_l2cap_chan *chan;
61*042d53a7SEvalZero struct ble_hs_conn *conn;
62*042d53a7SEvalZero int rc;
63*042d53a7SEvalZero
64*042d53a7SEvalZero BLE_HS_DBG_ASSERT_EVAL(txom->om_len >= 1);
65*042d53a7SEvalZero ble_att_inc_tx_stat(txom->om_data[0]);
66*042d53a7SEvalZero
67*042d53a7SEvalZero ble_hs_lock();
68*042d53a7SEvalZero
69*042d53a7SEvalZero ble_hs_misc_conn_chan_find_reqd(conn_handle, BLE_L2CAP_CID_ATT, &conn,
70*042d53a7SEvalZero &chan);
71*042d53a7SEvalZero if (chan == NULL) {
72*042d53a7SEvalZero os_mbuf_free_chain(txom);
73*042d53a7SEvalZero rc = BLE_HS_ENOTCONN;
74*042d53a7SEvalZero } else {
75*042d53a7SEvalZero ble_att_truncate_to_mtu(chan, txom);
76*042d53a7SEvalZero rc = ble_l2cap_tx(conn, chan, txom);
77*042d53a7SEvalZero }
78*042d53a7SEvalZero
79*042d53a7SEvalZero ble_hs_unlock();
80*042d53a7SEvalZero
81*042d53a7SEvalZero return rc;
82*042d53a7SEvalZero }
83*042d53a7SEvalZero
84*042d53a7SEvalZero static const void *
ble_att_init_parse(uint8_t op,const void * payload,int min_len,int actual_len)85*042d53a7SEvalZero ble_att_init_parse(uint8_t op, const void *payload,
86*042d53a7SEvalZero int min_len, int actual_len)
87*042d53a7SEvalZero {
88*042d53a7SEvalZero const uint8_t *u8ptr;
89*042d53a7SEvalZero
90*042d53a7SEvalZero BLE_HS_DBG_ASSERT(actual_len >= min_len);
91*042d53a7SEvalZero
92*042d53a7SEvalZero u8ptr = payload;
93*042d53a7SEvalZero BLE_HS_DBG_ASSERT(u8ptr[0] == op);
94*042d53a7SEvalZero
95*042d53a7SEvalZero return u8ptr + 1;
96*042d53a7SEvalZero }
97*042d53a7SEvalZero
98*042d53a7SEvalZero static void *
ble_att_init_write(uint8_t op,void * payload,int min_len,int actual_len)99*042d53a7SEvalZero ble_att_init_write(uint8_t op, void *payload, int min_len, int actual_len)
100*042d53a7SEvalZero {
101*042d53a7SEvalZero uint8_t *u8ptr;
102*042d53a7SEvalZero
103*042d53a7SEvalZero BLE_HS_DBG_ASSERT(actual_len >= min_len);
104*042d53a7SEvalZero
105*042d53a7SEvalZero u8ptr = payload;
106*042d53a7SEvalZero u8ptr[0] = op;
107*042d53a7SEvalZero
108*042d53a7SEvalZero return u8ptr + 1;
109*042d53a7SEvalZero }
110*042d53a7SEvalZero
111*042d53a7SEvalZero void
ble_att_error_rsp_parse(const void * payload,int len,struct ble_att_error_rsp * dst)112*042d53a7SEvalZero ble_att_error_rsp_parse(const void *payload, int len,
113*042d53a7SEvalZero struct ble_att_error_rsp *dst)
114*042d53a7SEvalZero {
115*042d53a7SEvalZero const struct ble_att_error_rsp *src;
116*042d53a7SEvalZero
117*042d53a7SEvalZero src = ble_att_init_parse(BLE_ATT_OP_ERROR_RSP, payload,
118*042d53a7SEvalZero BLE_ATT_ERROR_RSP_SZ, len);
119*042d53a7SEvalZero
120*042d53a7SEvalZero dst->baep_req_op = src->baep_req_op;
121*042d53a7SEvalZero dst->baep_handle = le16toh(src->baep_handle);
122*042d53a7SEvalZero dst->baep_error_code = src->baep_error_code;
123*042d53a7SEvalZero }
124*042d53a7SEvalZero
125*042d53a7SEvalZero void
ble_att_error_rsp_write(void * payload,int len,const struct ble_att_error_rsp * src)126*042d53a7SEvalZero ble_att_error_rsp_write(void *payload, int len,
127*042d53a7SEvalZero const struct ble_att_error_rsp *src)
128*042d53a7SEvalZero {
129*042d53a7SEvalZero struct ble_att_error_rsp *dst;
130*042d53a7SEvalZero
131*042d53a7SEvalZero dst = ble_att_init_write(BLE_ATT_OP_ERROR_RSP, payload,
132*042d53a7SEvalZero BLE_ATT_ERROR_RSP_SZ, len);
133*042d53a7SEvalZero
134*042d53a7SEvalZero dst->baep_req_op = src->baep_req_op;
135*042d53a7SEvalZero dst->baep_handle = htole16(src->baep_handle);
136*042d53a7SEvalZero dst->baep_error_code = src->baep_error_code;
137*042d53a7SEvalZero }
138*042d53a7SEvalZero
139*042d53a7SEvalZero void
ble_att_error_rsp_log(const struct ble_att_error_rsp * cmd)140*042d53a7SEvalZero ble_att_error_rsp_log(const struct ble_att_error_rsp *cmd)
141*042d53a7SEvalZero {
142*042d53a7SEvalZero BLE_HS_LOG(DEBUG, "req_op=%d handle=0x%04x error_code=%d",
143*042d53a7SEvalZero cmd->baep_req_op, cmd->baep_handle, cmd->baep_error_code);
144*042d53a7SEvalZero }
145*042d53a7SEvalZero
146*042d53a7SEvalZero void
ble_att_mtu_req_parse(const void * payload,int len,struct ble_att_mtu_cmd * dst)147*042d53a7SEvalZero ble_att_mtu_req_parse(const void *payload, int len,
148*042d53a7SEvalZero struct ble_att_mtu_cmd *dst)
149*042d53a7SEvalZero {
150*042d53a7SEvalZero const struct ble_att_mtu_cmd *src;
151*042d53a7SEvalZero
152*042d53a7SEvalZero src = ble_att_init_parse(BLE_ATT_OP_MTU_REQ, payload, BLE_ATT_MTU_CMD_SZ,
153*042d53a7SEvalZero len);
154*042d53a7SEvalZero
155*042d53a7SEvalZero dst->bamc_mtu = le16toh(src->bamc_mtu);
156*042d53a7SEvalZero }
157*042d53a7SEvalZero
158*042d53a7SEvalZero void
ble_att_mtu_rsp_parse(const void * payload,int len,struct ble_att_mtu_cmd * dst)159*042d53a7SEvalZero ble_att_mtu_rsp_parse(const void *payload, int len,
160*042d53a7SEvalZero struct ble_att_mtu_cmd *dst)
161*042d53a7SEvalZero {
162*042d53a7SEvalZero const struct ble_att_mtu_cmd *src;
163*042d53a7SEvalZero
164*042d53a7SEvalZero src = ble_att_init_parse(BLE_ATT_OP_MTU_RSP, payload, BLE_ATT_MTU_CMD_SZ,
165*042d53a7SEvalZero len);
166*042d53a7SEvalZero
167*042d53a7SEvalZero dst->bamc_mtu = le16toh(src->bamc_mtu);
168*042d53a7SEvalZero }
169*042d53a7SEvalZero
170*042d53a7SEvalZero void
ble_att_mtu_req_write(void * payload,int len,const struct ble_att_mtu_cmd * src)171*042d53a7SEvalZero ble_att_mtu_req_write(void *payload, int len,
172*042d53a7SEvalZero const struct ble_att_mtu_cmd *src)
173*042d53a7SEvalZero {
174*042d53a7SEvalZero struct ble_att_mtu_cmd *dst;
175*042d53a7SEvalZero
176*042d53a7SEvalZero dst = ble_att_init_write(BLE_ATT_OP_MTU_REQ, payload,
177*042d53a7SEvalZero BLE_ATT_MTU_CMD_SZ, len);
178*042d53a7SEvalZero
179*042d53a7SEvalZero dst->bamc_mtu = htole16(src->bamc_mtu);
180*042d53a7SEvalZero }
181*042d53a7SEvalZero
182*042d53a7SEvalZero void
ble_att_mtu_rsp_write(void * payload,int len,const struct ble_att_mtu_cmd * src)183*042d53a7SEvalZero ble_att_mtu_rsp_write(void *payload, int len,
184*042d53a7SEvalZero const struct ble_att_mtu_cmd *src)
185*042d53a7SEvalZero {
186*042d53a7SEvalZero struct ble_att_mtu_cmd *dst;
187*042d53a7SEvalZero
188*042d53a7SEvalZero dst = ble_att_init_write(BLE_ATT_OP_MTU_RSP, payload,
189*042d53a7SEvalZero BLE_ATT_MTU_CMD_SZ, len);
190*042d53a7SEvalZero dst->bamc_mtu = htole16(src->bamc_mtu);
191*042d53a7SEvalZero }
192*042d53a7SEvalZero
193*042d53a7SEvalZero void
ble_att_mtu_cmd_log(const struct ble_att_mtu_cmd * cmd)194*042d53a7SEvalZero ble_att_mtu_cmd_log(const struct ble_att_mtu_cmd *cmd)
195*042d53a7SEvalZero {
196*042d53a7SEvalZero BLE_HS_LOG(DEBUG, "mtu=%d", cmd->bamc_mtu);
197*042d53a7SEvalZero }
198*042d53a7SEvalZero
199*042d53a7SEvalZero void
ble_att_find_info_req_parse(const void * payload,int len,struct ble_att_find_info_req * dst)200*042d53a7SEvalZero ble_att_find_info_req_parse(const void *payload, int len,
201*042d53a7SEvalZero struct ble_att_find_info_req *dst)
202*042d53a7SEvalZero {
203*042d53a7SEvalZero const struct ble_att_find_info_req *src;
204*042d53a7SEvalZero
205*042d53a7SEvalZero src = ble_att_init_parse(BLE_ATT_OP_FIND_INFO_REQ, payload,
206*042d53a7SEvalZero BLE_ATT_FIND_INFO_REQ_SZ, len);
207*042d53a7SEvalZero
208*042d53a7SEvalZero dst->bafq_start_handle = le16toh(src->bafq_start_handle);
209*042d53a7SEvalZero dst->bafq_end_handle = le16toh(src->bafq_end_handle);
210*042d53a7SEvalZero }
211*042d53a7SEvalZero
212*042d53a7SEvalZero void
ble_att_find_info_req_write(void * payload,int len,const struct ble_att_find_info_req * src)213*042d53a7SEvalZero ble_att_find_info_req_write(void *payload, int len,
214*042d53a7SEvalZero const struct ble_att_find_info_req *src)
215*042d53a7SEvalZero {
216*042d53a7SEvalZero struct ble_att_find_info_req *dst;
217*042d53a7SEvalZero
218*042d53a7SEvalZero dst = ble_att_init_write(BLE_ATT_OP_FIND_INFO_REQ, payload,
219*042d53a7SEvalZero BLE_ATT_FIND_INFO_REQ_SZ, len);
220*042d53a7SEvalZero
221*042d53a7SEvalZero dst->bafq_start_handle = htole16(src->bafq_start_handle);
222*042d53a7SEvalZero dst->bafq_end_handle = htole16(src->bafq_end_handle);
223*042d53a7SEvalZero }
224*042d53a7SEvalZero
225*042d53a7SEvalZero void
ble_att_find_info_req_log(const struct ble_att_find_info_req * cmd)226*042d53a7SEvalZero ble_att_find_info_req_log(const struct ble_att_find_info_req *cmd)
227*042d53a7SEvalZero {
228*042d53a7SEvalZero BLE_HS_LOG(DEBUG, "start_handle=0x%04x end_handle=0x%04x",
229*042d53a7SEvalZero cmd->bafq_start_handle, cmd->bafq_end_handle);
230*042d53a7SEvalZero }
231*042d53a7SEvalZero
232*042d53a7SEvalZero void
ble_att_find_info_rsp_parse(const void * payload,int len,struct ble_att_find_info_rsp * dst)233*042d53a7SEvalZero ble_att_find_info_rsp_parse(const void *payload, int len,
234*042d53a7SEvalZero struct ble_att_find_info_rsp *dst)
235*042d53a7SEvalZero {
236*042d53a7SEvalZero const struct ble_att_find_info_rsp *src;
237*042d53a7SEvalZero
238*042d53a7SEvalZero src = ble_att_init_parse(BLE_ATT_OP_FIND_INFO_RSP, payload,
239*042d53a7SEvalZero BLE_ATT_FIND_INFO_RSP_BASE_SZ, len);
240*042d53a7SEvalZero
241*042d53a7SEvalZero dst->bafp_format = src->bafp_format;
242*042d53a7SEvalZero }
243*042d53a7SEvalZero
244*042d53a7SEvalZero void
ble_att_find_info_rsp_write(void * payload,int len,const struct ble_att_find_info_rsp * src)245*042d53a7SEvalZero ble_att_find_info_rsp_write(void *payload, int len,
246*042d53a7SEvalZero const struct ble_att_find_info_rsp *src)
247*042d53a7SEvalZero {
248*042d53a7SEvalZero struct ble_att_find_info_rsp *dst;
249*042d53a7SEvalZero
250*042d53a7SEvalZero dst = ble_att_init_write(BLE_ATT_OP_FIND_INFO_RSP, payload,
251*042d53a7SEvalZero BLE_ATT_FIND_INFO_RSP_BASE_SZ, len);
252*042d53a7SEvalZero
253*042d53a7SEvalZero dst->bafp_format = src->bafp_format;
254*042d53a7SEvalZero }
255*042d53a7SEvalZero
256*042d53a7SEvalZero void
ble_att_find_info_rsp_log(const struct ble_att_find_info_rsp * cmd)257*042d53a7SEvalZero ble_att_find_info_rsp_log(const struct ble_att_find_info_rsp *cmd)
258*042d53a7SEvalZero {
259*042d53a7SEvalZero BLE_HS_LOG(DEBUG, "format=%d", cmd->bafp_format);
260*042d53a7SEvalZero }
261*042d53a7SEvalZero
262*042d53a7SEvalZero void
ble_att_find_type_value_req_parse(const void * payload,int len,struct ble_att_find_type_value_req * dst)263*042d53a7SEvalZero ble_att_find_type_value_req_parse(const void *payload, int len,
264*042d53a7SEvalZero struct ble_att_find_type_value_req *dst)
265*042d53a7SEvalZero {
266*042d53a7SEvalZero const struct ble_att_find_type_value_req *src;
267*042d53a7SEvalZero
268*042d53a7SEvalZero src = ble_att_init_parse(BLE_ATT_OP_FIND_TYPE_VALUE_REQ, payload,
269*042d53a7SEvalZero BLE_ATT_FIND_TYPE_VALUE_REQ_BASE_SZ, len);
270*042d53a7SEvalZero
271*042d53a7SEvalZero dst->bavq_start_handle = le16toh(src->bavq_start_handle);
272*042d53a7SEvalZero dst->bavq_end_handle = le16toh(src->bavq_end_handle);
273*042d53a7SEvalZero dst->bavq_attr_type = le16toh(src->bavq_attr_type);
274*042d53a7SEvalZero }
275*042d53a7SEvalZero
276*042d53a7SEvalZero void
ble_att_find_type_value_req_write(void * payload,int len,const struct ble_att_find_type_value_req * src)277*042d53a7SEvalZero ble_att_find_type_value_req_write(
278*042d53a7SEvalZero void *payload, int len, const struct ble_att_find_type_value_req *src)
279*042d53a7SEvalZero {
280*042d53a7SEvalZero struct ble_att_find_type_value_req *dst;
281*042d53a7SEvalZero
282*042d53a7SEvalZero dst = ble_att_init_write(BLE_ATT_OP_FIND_TYPE_VALUE_REQ, payload,
283*042d53a7SEvalZero BLE_ATT_FIND_TYPE_VALUE_REQ_BASE_SZ, len);
284*042d53a7SEvalZero
285*042d53a7SEvalZero dst->bavq_start_handle = htole16(src->bavq_start_handle);
286*042d53a7SEvalZero dst->bavq_end_handle = htole16(src->bavq_end_handle);
287*042d53a7SEvalZero dst->bavq_attr_type = htole16(src->bavq_attr_type);
288*042d53a7SEvalZero }
289*042d53a7SEvalZero
290*042d53a7SEvalZero void
ble_att_find_type_value_req_log(const struct ble_att_find_type_value_req * cmd)291*042d53a7SEvalZero ble_att_find_type_value_req_log(const struct ble_att_find_type_value_req *cmd)
292*042d53a7SEvalZero {
293*042d53a7SEvalZero BLE_HS_LOG(DEBUG, "start_handle=0x%04x end_handle=0x%04x attr_type=%d",
294*042d53a7SEvalZero cmd->bavq_start_handle, cmd->bavq_end_handle,
295*042d53a7SEvalZero cmd->bavq_attr_type);
296*042d53a7SEvalZero }
297*042d53a7SEvalZero
298*042d53a7SEvalZero void
ble_att_read_type_req_parse(const void * payload,int len,struct ble_att_read_type_req * dst)299*042d53a7SEvalZero ble_att_read_type_req_parse(const void *payload, int len,
300*042d53a7SEvalZero struct ble_att_read_type_req *dst)
301*042d53a7SEvalZero {
302*042d53a7SEvalZero const struct ble_att_read_type_req *src;
303*042d53a7SEvalZero
304*042d53a7SEvalZero src = ble_att_init_parse(BLE_ATT_OP_READ_TYPE_REQ, payload,
305*042d53a7SEvalZero BLE_ATT_READ_TYPE_REQ_BASE_SZ, len);
306*042d53a7SEvalZero
307*042d53a7SEvalZero dst->batq_start_handle = le16toh(src->batq_start_handle);
308*042d53a7SEvalZero dst->batq_end_handle = le16toh(src->batq_end_handle);
309*042d53a7SEvalZero }
310*042d53a7SEvalZero
311*042d53a7SEvalZero void
ble_att_read_type_req_write(void * payload,int len,const struct ble_att_read_type_req * src)312*042d53a7SEvalZero ble_att_read_type_req_write(void *payload, int len,
313*042d53a7SEvalZero const struct ble_att_read_type_req *src)
314*042d53a7SEvalZero {
315*042d53a7SEvalZero struct ble_att_read_type_req *dst;
316*042d53a7SEvalZero
317*042d53a7SEvalZero dst = ble_att_init_write(BLE_ATT_OP_READ_TYPE_REQ, payload,
318*042d53a7SEvalZero BLE_ATT_READ_TYPE_REQ_BASE_SZ, len);
319*042d53a7SEvalZero
320*042d53a7SEvalZero dst->batq_start_handle = htole16(src->batq_start_handle);
321*042d53a7SEvalZero dst->batq_end_handle = htole16(src->batq_end_handle);
322*042d53a7SEvalZero }
323*042d53a7SEvalZero
324*042d53a7SEvalZero void
ble_att_read_type_req_log(const struct ble_att_read_type_req * cmd)325*042d53a7SEvalZero ble_att_read_type_req_log(const struct ble_att_read_type_req *cmd)
326*042d53a7SEvalZero {
327*042d53a7SEvalZero BLE_HS_LOG(DEBUG, "start_handle=0x%04x end_handle=0x%04x",
328*042d53a7SEvalZero cmd->batq_start_handle, cmd->batq_end_handle);
329*042d53a7SEvalZero }
330*042d53a7SEvalZero
331*042d53a7SEvalZero void
ble_att_read_type_rsp_parse(const void * payload,int len,struct ble_att_read_type_rsp * dst)332*042d53a7SEvalZero ble_att_read_type_rsp_parse(const void *payload, int len,
333*042d53a7SEvalZero struct ble_att_read_type_rsp *dst)
334*042d53a7SEvalZero {
335*042d53a7SEvalZero const struct ble_att_read_type_rsp *src;
336*042d53a7SEvalZero
337*042d53a7SEvalZero src = ble_att_init_parse(BLE_ATT_OP_READ_TYPE_RSP, payload,
338*042d53a7SEvalZero BLE_ATT_READ_TYPE_RSP_BASE_SZ, len);
339*042d53a7SEvalZero
340*042d53a7SEvalZero dst->batp_length = src->batp_length;
341*042d53a7SEvalZero }
342*042d53a7SEvalZero
343*042d53a7SEvalZero void
ble_att_read_type_rsp_write(void * payload,int len,const struct ble_att_read_type_rsp * src)344*042d53a7SEvalZero ble_att_read_type_rsp_write(void *payload, int len,
345*042d53a7SEvalZero const struct ble_att_read_type_rsp *src)
346*042d53a7SEvalZero {
347*042d53a7SEvalZero struct ble_att_read_type_rsp *dst;
348*042d53a7SEvalZero
349*042d53a7SEvalZero dst = ble_att_init_write(BLE_ATT_OP_READ_TYPE_RSP, payload,
350*042d53a7SEvalZero BLE_ATT_READ_TYPE_RSP_BASE_SZ, len);
351*042d53a7SEvalZero
352*042d53a7SEvalZero dst->batp_length = src->batp_length;
353*042d53a7SEvalZero }
354*042d53a7SEvalZero
355*042d53a7SEvalZero void
ble_att_read_type_rsp_log(const struct ble_att_read_type_rsp * cmd)356*042d53a7SEvalZero ble_att_read_type_rsp_log(const struct ble_att_read_type_rsp *cmd)
357*042d53a7SEvalZero {
358*042d53a7SEvalZero BLE_HS_LOG(DEBUG, "length=%d", cmd->batp_length);
359*042d53a7SEvalZero }
360*042d53a7SEvalZero
361*042d53a7SEvalZero void
ble_att_read_req_parse(const void * payload,int len,struct ble_att_read_req * dst)362*042d53a7SEvalZero ble_att_read_req_parse(const void *payload, int len,
363*042d53a7SEvalZero struct ble_att_read_req *dst)
364*042d53a7SEvalZero {
365*042d53a7SEvalZero const struct ble_att_read_req *src;
366*042d53a7SEvalZero
367*042d53a7SEvalZero src = ble_att_init_parse(BLE_ATT_OP_READ_REQ, payload,
368*042d53a7SEvalZero BLE_ATT_READ_REQ_SZ, len);
369*042d53a7SEvalZero
370*042d53a7SEvalZero dst->barq_handle = le16toh(src->barq_handle);
371*042d53a7SEvalZero }
372*042d53a7SEvalZero
373*042d53a7SEvalZero void
ble_att_read_req_write(void * payload,int len,const struct ble_att_read_req * src)374*042d53a7SEvalZero ble_att_read_req_write(void *payload, int len,
375*042d53a7SEvalZero const struct ble_att_read_req *src)
376*042d53a7SEvalZero {
377*042d53a7SEvalZero struct ble_att_read_req *dst;
378*042d53a7SEvalZero
379*042d53a7SEvalZero dst = ble_att_init_write(BLE_ATT_OP_READ_REQ, payload,
380*042d53a7SEvalZero BLE_ATT_READ_REQ_SZ, len);
381*042d53a7SEvalZero
382*042d53a7SEvalZero dst->barq_handle = htole16(src->barq_handle);
383*042d53a7SEvalZero }
384*042d53a7SEvalZero
385*042d53a7SEvalZero void
ble_att_read_req_log(const struct ble_att_read_req * cmd)386*042d53a7SEvalZero ble_att_read_req_log(const struct ble_att_read_req *cmd)
387*042d53a7SEvalZero {
388*042d53a7SEvalZero BLE_HS_LOG(DEBUG, "handle=0x%04x", cmd->barq_handle);
389*042d53a7SEvalZero }
390*042d53a7SEvalZero
391*042d53a7SEvalZero void
ble_att_read_blob_req_parse(const void * payload,int len,struct ble_att_read_blob_req * dst)392*042d53a7SEvalZero ble_att_read_blob_req_parse(const void *payload, int len,
393*042d53a7SEvalZero struct ble_att_read_blob_req *dst)
394*042d53a7SEvalZero {
395*042d53a7SEvalZero const struct ble_att_read_blob_req *src;
396*042d53a7SEvalZero
397*042d53a7SEvalZero src = ble_att_init_parse(BLE_ATT_OP_READ_BLOB_REQ, payload,
398*042d53a7SEvalZero BLE_ATT_READ_BLOB_REQ_SZ, len);
399*042d53a7SEvalZero
400*042d53a7SEvalZero dst->babq_handle = le16toh(src->babq_handle);
401*042d53a7SEvalZero dst->babq_offset = le16toh(src->babq_offset);
402*042d53a7SEvalZero }
403*042d53a7SEvalZero
404*042d53a7SEvalZero void
ble_att_read_blob_req_write(void * payload,int len,const struct ble_att_read_blob_req * src)405*042d53a7SEvalZero ble_att_read_blob_req_write(void *payload, int len,
406*042d53a7SEvalZero const struct ble_att_read_blob_req *src)
407*042d53a7SEvalZero {
408*042d53a7SEvalZero struct ble_att_read_blob_req *dst;
409*042d53a7SEvalZero
410*042d53a7SEvalZero dst = ble_att_init_write(BLE_ATT_OP_READ_BLOB_REQ, payload,
411*042d53a7SEvalZero BLE_ATT_READ_BLOB_REQ_SZ, len);
412*042d53a7SEvalZero
413*042d53a7SEvalZero dst->babq_handle = htole16(src->babq_handle);
414*042d53a7SEvalZero dst->babq_offset = htole16(src->babq_offset);
415*042d53a7SEvalZero }
416*042d53a7SEvalZero
417*042d53a7SEvalZero void
ble_att_read_blob_req_log(const struct ble_att_read_blob_req * cmd)418*042d53a7SEvalZero ble_att_read_blob_req_log(const struct ble_att_read_blob_req *cmd)
419*042d53a7SEvalZero {
420*042d53a7SEvalZero BLE_HS_LOG(DEBUG, "handle=0x%04x offset=%d", cmd->babq_handle,
421*042d53a7SEvalZero cmd->babq_offset);
422*042d53a7SEvalZero }
423*042d53a7SEvalZero
424*042d53a7SEvalZero void
ble_att_read_mult_req_parse(const void * payload,int len)425*042d53a7SEvalZero ble_att_read_mult_req_parse(const void *payload, int len)
426*042d53a7SEvalZero {
427*042d53a7SEvalZero ble_att_init_parse(BLE_ATT_OP_READ_MULT_REQ, payload,
428*042d53a7SEvalZero BLE_ATT_READ_MULT_REQ_BASE_SZ, len);
429*042d53a7SEvalZero }
430*042d53a7SEvalZero
431*042d53a7SEvalZero void
ble_att_read_mult_req_write(void * payload,int len)432*042d53a7SEvalZero ble_att_read_mult_req_write(void *payload, int len)
433*042d53a7SEvalZero {
434*042d53a7SEvalZero ble_att_init_write(BLE_ATT_OP_READ_MULT_REQ, payload,
435*042d53a7SEvalZero BLE_ATT_READ_MULT_REQ_BASE_SZ, len);
436*042d53a7SEvalZero }
437*042d53a7SEvalZero
438*042d53a7SEvalZero void
ble_att_read_mult_rsp_parse(const void * payload,int len)439*042d53a7SEvalZero ble_att_read_mult_rsp_parse(const void *payload, int len)
440*042d53a7SEvalZero {
441*042d53a7SEvalZero ble_att_init_parse(BLE_ATT_OP_READ_MULT_RSP, payload,
442*042d53a7SEvalZero BLE_ATT_READ_MULT_RSP_BASE_SZ, len);
443*042d53a7SEvalZero }
444*042d53a7SEvalZero
445*042d53a7SEvalZero void
ble_att_read_mult_rsp_write(void * payload,int len)446*042d53a7SEvalZero ble_att_read_mult_rsp_write(void *payload, int len)
447*042d53a7SEvalZero {
448*042d53a7SEvalZero ble_att_init_write(BLE_ATT_OP_READ_MULT_RSP, payload,
449*042d53a7SEvalZero BLE_ATT_READ_MULT_RSP_BASE_SZ, len);
450*042d53a7SEvalZero }
451*042d53a7SEvalZero
452*042d53a7SEvalZero void
ble_att_read_group_type_req_parse(const void * payload,int len,struct ble_att_read_group_type_req * dst)453*042d53a7SEvalZero ble_att_read_group_type_req_parse(const void *payload, int len,
454*042d53a7SEvalZero struct ble_att_read_group_type_req *dst)
455*042d53a7SEvalZero {
456*042d53a7SEvalZero const struct ble_att_read_group_type_req *src;
457*042d53a7SEvalZero
458*042d53a7SEvalZero src = ble_att_init_parse(BLE_ATT_OP_READ_GROUP_TYPE_REQ, payload,
459*042d53a7SEvalZero BLE_ATT_READ_GROUP_TYPE_REQ_BASE_SZ, len);
460*042d53a7SEvalZero
461*042d53a7SEvalZero dst->bagq_start_handle = le16toh(src->bagq_start_handle);
462*042d53a7SEvalZero dst->bagq_end_handle = le16toh(src->bagq_end_handle);
463*042d53a7SEvalZero }
464*042d53a7SEvalZero
465*042d53a7SEvalZero void
ble_att_read_group_type_req_write(void * payload,int len,const struct ble_att_read_group_type_req * src)466*042d53a7SEvalZero ble_att_read_group_type_req_write(
467*042d53a7SEvalZero void *payload, int len, const struct ble_att_read_group_type_req *src)
468*042d53a7SEvalZero {
469*042d53a7SEvalZero struct ble_att_read_group_type_req *dst;
470*042d53a7SEvalZero
471*042d53a7SEvalZero dst = ble_att_init_write(BLE_ATT_OP_READ_GROUP_TYPE_REQ, payload,
472*042d53a7SEvalZero BLE_ATT_READ_GROUP_TYPE_REQ_BASE_SZ, len);
473*042d53a7SEvalZero
474*042d53a7SEvalZero dst->bagq_start_handle = htole16(src->bagq_start_handle);
475*042d53a7SEvalZero dst->bagq_end_handle = htole16(src->bagq_end_handle);
476*042d53a7SEvalZero }
477*042d53a7SEvalZero
478*042d53a7SEvalZero void
ble_att_read_group_type_req_log(const struct ble_att_read_group_type_req * cmd)479*042d53a7SEvalZero ble_att_read_group_type_req_log(const struct ble_att_read_group_type_req *cmd)
480*042d53a7SEvalZero {
481*042d53a7SEvalZero BLE_HS_LOG(DEBUG, "start_handle=0x%04x end_handle=0x%04x",
482*042d53a7SEvalZero cmd->bagq_start_handle, cmd->bagq_end_handle);
483*042d53a7SEvalZero }
484*042d53a7SEvalZero
485*042d53a7SEvalZero void
ble_att_read_group_type_rsp_parse(const void * payload,int len,struct ble_att_read_group_type_rsp * dst)486*042d53a7SEvalZero ble_att_read_group_type_rsp_parse(const void *payload, int len,
487*042d53a7SEvalZero struct ble_att_read_group_type_rsp *dst)
488*042d53a7SEvalZero {
489*042d53a7SEvalZero const struct ble_att_read_group_type_rsp *src;
490*042d53a7SEvalZero
491*042d53a7SEvalZero src = ble_att_init_parse(BLE_ATT_OP_READ_GROUP_TYPE_RSP, payload,
492*042d53a7SEvalZero BLE_ATT_READ_GROUP_TYPE_RSP_BASE_SZ, len);
493*042d53a7SEvalZero
494*042d53a7SEvalZero dst->bagp_length = src->bagp_length;
495*042d53a7SEvalZero }
496*042d53a7SEvalZero
497*042d53a7SEvalZero void
ble_att_read_group_type_rsp_write(void * payload,int len,const struct ble_att_read_group_type_rsp * src)498*042d53a7SEvalZero ble_att_read_group_type_rsp_write(
499*042d53a7SEvalZero void *payload, int len, const struct ble_att_read_group_type_rsp *src)
500*042d53a7SEvalZero {
501*042d53a7SEvalZero struct ble_att_read_group_type_rsp *dst;
502*042d53a7SEvalZero
503*042d53a7SEvalZero dst = ble_att_init_write(BLE_ATT_OP_READ_GROUP_TYPE_RSP, payload,
504*042d53a7SEvalZero BLE_ATT_READ_GROUP_TYPE_RSP_BASE_SZ, len);
505*042d53a7SEvalZero
506*042d53a7SEvalZero dst->bagp_length = src->bagp_length;
507*042d53a7SEvalZero }
508*042d53a7SEvalZero
509*042d53a7SEvalZero void
ble_att_read_group_type_rsp_log(const struct ble_att_read_group_type_rsp * cmd)510*042d53a7SEvalZero ble_att_read_group_type_rsp_log(const struct ble_att_read_group_type_rsp *cmd)
511*042d53a7SEvalZero {
512*042d53a7SEvalZero BLE_HS_LOG(DEBUG, "length=%d", cmd->bagp_length);
513*042d53a7SEvalZero }
514*042d53a7SEvalZero
515*042d53a7SEvalZero void
ble_att_write_req_parse(const void * payload,int len,struct ble_att_write_req * dst)516*042d53a7SEvalZero ble_att_write_req_parse(const void *payload, int len,
517*042d53a7SEvalZero struct ble_att_write_req *dst)
518*042d53a7SEvalZero {
519*042d53a7SEvalZero const struct ble_att_write_req *src;
520*042d53a7SEvalZero
521*042d53a7SEvalZero src = ble_att_init_parse(BLE_ATT_OP_WRITE_REQ, payload,
522*042d53a7SEvalZero BLE_ATT_WRITE_REQ_BASE_SZ, len);
523*042d53a7SEvalZero
524*042d53a7SEvalZero dst->bawq_handle = le16toh(src->bawq_handle);
525*042d53a7SEvalZero }
526*042d53a7SEvalZero
527*042d53a7SEvalZero void
ble_att_write_cmd_parse(const void * payload,int len,struct ble_att_write_req * dst)528*042d53a7SEvalZero ble_att_write_cmd_parse(const void *payload, int len,
529*042d53a7SEvalZero struct ble_att_write_req *dst)
530*042d53a7SEvalZero {
531*042d53a7SEvalZero const struct ble_att_write_req *src;
532*042d53a7SEvalZero
533*042d53a7SEvalZero src = ble_att_init_parse(BLE_ATT_OP_WRITE_CMD, payload,
534*042d53a7SEvalZero BLE_ATT_WRITE_REQ_BASE_SZ, len);
535*042d53a7SEvalZero dst->bawq_handle = le16toh(src->bawq_handle);
536*042d53a7SEvalZero }
537*042d53a7SEvalZero
538*042d53a7SEvalZero void
ble_att_write_req_write(void * payload,int len,const struct ble_att_write_req * src)539*042d53a7SEvalZero ble_att_write_req_write(void *payload, int len,
540*042d53a7SEvalZero const struct ble_att_write_req *src)
541*042d53a7SEvalZero {
542*042d53a7SEvalZero struct ble_att_write_req *dst;
543*042d53a7SEvalZero
544*042d53a7SEvalZero dst = ble_att_init_write(BLE_ATT_OP_WRITE_REQ, payload,
545*042d53a7SEvalZero BLE_ATT_WRITE_REQ_BASE_SZ, len);
546*042d53a7SEvalZero dst->bawq_handle = htole16(src->bawq_handle);
547*042d53a7SEvalZero }
548*042d53a7SEvalZero
549*042d53a7SEvalZero void
ble_att_write_cmd_write(void * payload,int len,const struct ble_att_write_req * src)550*042d53a7SEvalZero ble_att_write_cmd_write(void *payload, int len,
551*042d53a7SEvalZero const struct ble_att_write_req *src)
552*042d53a7SEvalZero {
553*042d53a7SEvalZero struct ble_att_write_req *dst;
554*042d53a7SEvalZero
555*042d53a7SEvalZero dst = ble_att_init_write(BLE_ATT_OP_WRITE_CMD, payload,
556*042d53a7SEvalZero BLE_ATT_WRITE_REQ_BASE_SZ, len);
557*042d53a7SEvalZero dst->bawq_handle = htole16(src->bawq_handle);
558*042d53a7SEvalZero }
559*042d53a7SEvalZero
560*042d53a7SEvalZero void
ble_att_write_cmd_log(const struct ble_att_write_cmd * cmd)561*042d53a7SEvalZero ble_att_write_cmd_log(const struct ble_att_write_cmd *cmd)
562*042d53a7SEvalZero {
563*042d53a7SEvalZero BLE_HS_LOG(DEBUG, "handle=0x%04x", cmd->handle);
564*042d53a7SEvalZero }
565*042d53a7SEvalZero
566*042d53a7SEvalZero void
ble_att_write_req_log(const struct ble_att_write_req * req)567*042d53a7SEvalZero ble_att_write_req_log(const struct ble_att_write_req *req)
568*042d53a7SEvalZero {
569*042d53a7SEvalZero BLE_HS_LOG(DEBUG, "handle=0x%04x", req->bawq_handle);
570*042d53a7SEvalZero }
571*042d53a7SEvalZero
572*042d53a7SEvalZero void
ble_att_prep_write_req_parse(const void * payload,int len,struct ble_att_prep_write_cmd * dst)573*042d53a7SEvalZero ble_att_prep_write_req_parse(const void *payload, int len,
574*042d53a7SEvalZero struct ble_att_prep_write_cmd *dst)
575*042d53a7SEvalZero {
576*042d53a7SEvalZero const struct ble_att_prep_write_cmd *src;
577*042d53a7SEvalZero
578*042d53a7SEvalZero src = ble_att_init_parse(BLE_ATT_OP_PREP_WRITE_REQ, payload,
579*042d53a7SEvalZero BLE_ATT_PREP_WRITE_CMD_BASE_SZ, len);
580*042d53a7SEvalZero
581*042d53a7SEvalZero dst->bapc_handle = le16toh(src->bapc_handle);
582*042d53a7SEvalZero dst->bapc_offset = le16toh(src->bapc_offset);
583*042d53a7SEvalZero }
584*042d53a7SEvalZero
585*042d53a7SEvalZero void
ble_att_prep_write_req_write(void * payload,int len,const struct ble_att_prep_write_cmd * src)586*042d53a7SEvalZero ble_att_prep_write_req_write(void *payload, int len,
587*042d53a7SEvalZero const struct ble_att_prep_write_cmd *src)
588*042d53a7SEvalZero {
589*042d53a7SEvalZero struct ble_att_prep_write_cmd *dst;
590*042d53a7SEvalZero
591*042d53a7SEvalZero dst = ble_att_init_write(BLE_ATT_OP_PREP_WRITE_REQ, payload,
592*042d53a7SEvalZero BLE_ATT_PREP_WRITE_CMD_BASE_SZ, len);
593*042d53a7SEvalZero
594*042d53a7SEvalZero dst->bapc_handle = htole16(src->bapc_handle);
595*042d53a7SEvalZero dst->bapc_offset = htole16(src->bapc_offset);
596*042d53a7SEvalZero }
597*042d53a7SEvalZero
598*042d53a7SEvalZero void
ble_att_prep_write_rsp_parse(const void * payload,int len,struct ble_att_prep_write_cmd * dst)599*042d53a7SEvalZero ble_att_prep_write_rsp_parse(const void *payload, int len,
600*042d53a7SEvalZero struct ble_att_prep_write_cmd *dst)
601*042d53a7SEvalZero {
602*042d53a7SEvalZero const struct ble_att_prep_write_cmd *src;
603*042d53a7SEvalZero
604*042d53a7SEvalZero src = ble_att_init_parse(BLE_ATT_OP_PREP_WRITE_RSP, payload,
605*042d53a7SEvalZero BLE_ATT_PREP_WRITE_CMD_BASE_SZ, len);
606*042d53a7SEvalZero
607*042d53a7SEvalZero dst->bapc_handle = le16toh(src->bapc_handle);
608*042d53a7SEvalZero dst->bapc_offset = le16toh(src->bapc_offset);
609*042d53a7SEvalZero }
610*042d53a7SEvalZero
611*042d53a7SEvalZero void
ble_att_prep_write_rsp_write(void * payload,int len,const struct ble_att_prep_write_cmd * src)612*042d53a7SEvalZero ble_att_prep_write_rsp_write(void *payload, int len,
613*042d53a7SEvalZero const struct ble_att_prep_write_cmd *src)
614*042d53a7SEvalZero {
615*042d53a7SEvalZero struct ble_att_prep_write_cmd *dst;
616*042d53a7SEvalZero
617*042d53a7SEvalZero dst = ble_att_init_write(BLE_ATT_OP_PREP_WRITE_RSP, payload,
618*042d53a7SEvalZero BLE_ATT_PREP_WRITE_CMD_BASE_SZ, len);
619*042d53a7SEvalZero
620*042d53a7SEvalZero dst->bapc_handle = htole16(src->bapc_handle);
621*042d53a7SEvalZero dst->bapc_offset = htole16(src->bapc_offset);
622*042d53a7SEvalZero }
623*042d53a7SEvalZero
624*042d53a7SEvalZero void
ble_att_prep_write_cmd_log(const struct ble_att_prep_write_cmd * cmd)625*042d53a7SEvalZero ble_att_prep_write_cmd_log(const struct ble_att_prep_write_cmd *cmd)
626*042d53a7SEvalZero {
627*042d53a7SEvalZero BLE_HS_LOG(DEBUG, "handle=0x%04x offset=%d", cmd->bapc_handle,
628*042d53a7SEvalZero cmd->bapc_offset);
629*042d53a7SEvalZero }
630*042d53a7SEvalZero
631*042d53a7SEvalZero void
ble_att_exec_write_req_parse(const void * payload,int len,struct ble_att_exec_write_req * dst)632*042d53a7SEvalZero ble_att_exec_write_req_parse(const void *payload, int len,
633*042d53a7SEvalZero struct ble_att_exec_write_req *dst)
634*042d53a7SEvalZero {
635*042d53a7SEvalZero const struct ble_att_exec_write_req *src;
636*042d53a7SEvalZero
637*042d53a7SEvalZero src = ble_att_init_parse(BLE_ATT_OP_EXEC_WRITE_REQ, payload,
638*042d53a7SEvalZero BLE_ATT_EXEC_WRITE_REQ_SZ, len);
639*042d53a7SEvalZero
640*042d53a7SEvalZero dst->baeq_flags = src->baeq_flags;
641*042d53a7SEvalZero }
642*042d53a7SEvalZero
643*042d53a7SEvalZero void
ble_att_exec_write_req_write(void * payload,int len,const struct ble_att_exec_write_req * src)644*042d53a7SEvalZero ble_att_exec_write_req_write(void *payload, int len,
645*042d53a7SEvalZero const struct ble_att_exec_write_req *src)
646*042d53a7SEvalZero {
647*042d53a7SEvalZero struct ble_att_exec_write_req *dst;
648*042d53a7SEvalZero
649*042d53a7SEvalZero dst = ble_att_init_write(BLE_ATT_OP_EXEC_WRITE_REQ, payload,
650*042d53a7SEvalZero BLE_ATT_EXEC_WRITE_REQ_SZ, len);
651*042d53a7SEvalZero
652*042d53a7SEvalZero dst->baeq_flags = src->baeq_flags;
653*042d53a7SEvalZero }
654*042d53a7SEvalZero
655*042d53a7SEvalZero void
ble_att_exec_write_req_log(const struct ble_att_exec_write_req * cmd)656*042d53a7SEvalZero ble_att_exec_write_req_log(const struct ble_att_exec_write_req *cmd)
657*042d53a7SEvalZero {
658*042d53a7SEvalZero BLE_HS_LOG(DEBUG, "flags=0x%02x", cmd->baeq_flags);
659*042d53a7SEvalZero }
660*042d53a7SEvalZero
661*042d53a7SEvalZero void
ble_att_exec_write_rsp_parse(const void * payload,int len)662*042d53a7SEvalZero ble_att_exec_write_rsp_parse(const void *payload, int len)
663*042d53a7SEvalZero {
664*042d53a7SEvalZero ble_att_init_parse(BLE_ATT_OP_EXEC_WRITE_RSP, payload,
665*042d53a7SEvalZero BLE_ATT_EXEC_WRITE_RSP_SZ, len);
666*042d53a7SEvalZero }
667*042d53a7SEvalZero
668*042d53a7SEvalZero void
ble_att_exec_write_rsp_write(void * payload,int len)669*042d53a7SEvalZero ble_att_exec_write_rsp_write(void *payload, int len)
670*042d53a7SEvalZero {
671*042d53a7SEvalZero ble_att_init_write(BLE_ATT_OP_EXEC_WRITE_RSP, payload,
672*042d53a7SEvalZero BLE_ATT_EXEC_WRITE_RSP_SZ, len);
673*042d53a7SEvalZero }
674*042d53a7SEvalZero
675*042d53a7SEvalZero void
ble_att_notify_req_parse(const void * payload,int len,struct ble_att_notify_req * dst)676*042d53a7SEvalZero ble_att_notify_req_parse(const void *payload, int len,
677*042d53a7SEvalZero struct ble_att_notify_req *dst)
678*042d53a7SEvalZero {
679*042d53a7SEvalZero const struct ble_att_notify_req *src;
680*042d53a7SEvalZero
681*042d53a7SEvalZero src = ble_att_init_parse(BLE_ATT_OP_NOTIFY_REQ, payload,
682*042d53a7SEvalZero BLE_ATT_NOTIFY_REQ_BASE_SZ, len);
683*042d53a7SEvalZero
684*042d53a7SEvalZero dst->banq_handle = le16toh(src->banq_handle);
685*042d53a7SEvalZero }
686*042d53a7SEvalZero
687*042d53a7SEvalZero void
ble_att_notify_req_write(void * payload,int len,const struct ble_att_notify_req * src)688*042d53a7SEvalZero ble_att_notify_req_write(void *payload, int len,
689*042d53a7SEvalZero const struct ble_att_notify_req *src)
690*042d53a7SEvalZero {
691*042d53a7SEvalZero struct ble_att_notify_req *dst;
692*042d53a7SEvalZero
693*042d53a7SEvalZero dst = ble_att_init_write(BLE_ATT_OP_NOTIFY_REQ, payload,
694*042d53a7SEvalZero BLE_ATT_NOTIFY_REQ_BASE_SZ, len);
695*042d53a7SEvalZero
696*042d53a7SEvalZero dst->banq_handle = htole16(src->banq_handle);
697*042d53a7SEvalZero }
698*042d53a7SEvalZero
699*042d53a7SEvalZero void
ble_att_notify_req_log(const struct ble_att_notify_req * cmd)700*042d53a7SEvalZero ble_att_notify_req_log(const struct ble_att_notify_req *cmd)
701*042d53a7SEvalZero {
702*042d53a7SEvalZero BLE_HS_LOG(DEBUG, "handle=0x%04x", cmd->banq_handle);
703*042d53a7SEvalZero }
704*042d53a7SEvalZero
705*042d53a7SEvalZero void
ble_att_indicate_req_parse(const void * payload,int len,struct ble_att_indicate_req * dst)706*042d53a7SEvalZero ble_att_indicate_req_parse(const void *payload, int len,
707*042d53a7SEvalZero struct ble_att_indicate_req *dst)
708*042d53a7SEvalZero {
709*042d53a7SEvalZero const struct ble_att_indicate_req *src;
710*042d53a7SEvalZero
711*042d53a7SEvalZero src = ble_att_init_parse(BLE_ATT_OP_INDICATE_REQ, payload,
712*042d53a7SEvalZero BLE_ATT_INDICATE_REQ_BASE_SZ, len);
713*042d53a7SEvalZero
714*042d53a7SEvalZero dst->baiq_handle = le16toh(src->baiq_handle);
715*042d53a7SEvalZero }
716*042d53a7SEvalZero
717*042d53a7SEvalZero void
ble_att_indicate_req_write(void * payload,int len,const struct ble_att_indicate_req * src)718*042d53a7SEvalZero ble_att_indicate_req_write(void *payload, int len,
719*042d53a7SEvalZero const struct ble_att_indicate_req *src)
720*042d53a7SEvalZero {
721*042d53a7SEvalZero struct ble_att_indicate_req *dst;
722*042d53a7SEvalZero
723*042d53a7SEvalZero dst = ble_att_init_write(BLE_ATT_OP_INDICATE_REQ, payload,
724*042d53a7SEvalZero BLE_ATT_INDICATE_REQ_BASE_SZ, len);
725*042d53a7SEvalZero
726*042d53a7SEvalZero dst->baiq_handle = htole16(src->baiq_handle);
727*042d53a7SEvalZero }
728*042d53a7SEvalZero
729*042d53a7SEvalZero void
ble_att_indicate_req_log(const struct ble_att_indicate_req * cmd)730*042d53a7SEvalZero ble_att_indicate_req_log(const struct ble_att_indicate_req *cmd)
731*042d53a7SEvalZero {
732*042d53a7SEvalZero BLE_HS_LOG(DEBUG, "handle=0x%04x", cmd->baiq_handle);
733*042d53a7SEvalZero }
734*042d53a7SEvalZero
735*042d53a7SEvalZero void
ble_att_indicate_rsp_parse(const void * payload,int len)736*042d53a7SEvalZero ble_att_indicate_rsp_parse(const void *payload, int len)
737*042d53a7SEvalZero {
738*042d53a7SEvalZero ble_att_init_parse(BLE_ATT_OP_INDICATE_RSP, payload,
739*042d53a7SEvalZero BLE_ATT_INDICATE_RSP_SZ, len);
740*042d53a7SEvalZero }
741*042d53a7SEvalZero
742*042d53a7SEvalZero void
ble_att_indicate_rsp_write(void * payload,int len)743*042d53a7SEvalZero ble_att_indicate_rsp_write(void *payload, int len)
744*042d53a7SEvalZero {
745*042d53a7SEvalZero ble_att_init_write(BLE_ATT_OP_INDICATE_RSP, payload,
746*042d53a7SEvalZero BLE_ATT_INDICATE_RSP_SZ, len);
747*042d53a7SEvalZero }
748