xref: /nrf52832-nimble/packages/NimBLE-latest/nimble/host/src/ble_att_cmd.c (revision 042d53a763ad75cb1465103098bb88c245d95138)
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