xref: /nrf52832-nimble/packages/NimBLE-latest/nimble/host/src/ble_att_cmd_priv.h (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 #ifndef H_BLE_ATT_CMD_
21*042d53a7SEvalZero #define H_BLE_ATT_CMD_
22*042d53a7SEvalZero 
23*042d53a7SEvalZero #include <inttypes.h>
24*042d53a7SEvalZero #include <stddef.h>
25*042d53a7SEvalZero #include "os/os_mbuf.h"
26*042d53a7SEvalZero 
27*042d53a7SEvalZero #ifdef __cplusplus
28*042d53a7SEvalZero extern "C" {
29*042d53a7SEvalZero #endif
30*042d53a7SEvalZero 
31*042d53a7SEvalZero struct ble_att_hdr {
32*042d53a7SEvalZero     uint8_t opcode;
33*042d53a7SEvalZero     uint8_t data[0];
34*042d53a7SEvalZero } __attribute__((packed));
35*042d53a7SEvalZero 
36*042d53a7SEvalZero /**
37*042d53a7SEvalZero  * | Parameter                          | Size (octets)     |
38*042d53a7SEvalZero  * +------------------------------------+-------------------+
39*042d53a7SEvalZero  * | Attribute Opcode                   | 1                 |
40*042d53a7SEvalZero  * | Request Opcode In Error            | 1                 |
41*042d53a7SEvalZero  * | Attribute Handle In Error          | 2                 |
42*042d53a7SEvalZero  * | Error Code                         | 1                 |
43*042d53a7SEvalZero  */
44*042d53a7SEvalZero #define BLE_ATT_ERROR_RSP_SZ             5
45*042d53a7SEvalZero struct ble_att_error_rsp {
46*042d53a7SEvalZero     uint8_t baep_req_op;
47*042d53a7SEvalZero     uint16_t baep_handle;
48*042d53a7SEvalZero     uint8_t baep_error_code;
49*042d53a7SEvalZero } __attribute__((packed));
50*042d53a7SEvalZero 
51*042d53a7SEvalZero /**
52*042d53a7SEvalZero  * | Parameter                          | Size (octets)     |
53*042d53a7SEvalZero  * +------------------------------------+-------------------+
54*042d53a7SEvalZero  * | Attribute Opcode                   | 1                 |
55*042d53a7SEvalZero  * | Server Rx MTU                      | 2                 |
56*042d53a7SEvalZero  */
57*042d53a7SEvalZero #define BLE_ATT_MTU_CMD_SZ               3
58*042d53a7SEvalZero struct ble_att_mtu_cmd {
59*042d53a7SEvalZero     uint16_t bamc_mtu;
60*042d53a7SEvalZero } __attribute__((packed));
61*042d53a7SEvalZero 
62*042d53a7SEvalZero /**
63*042d53a7SEvalZero  * | Parameter                          | Size (octets)     |
64*042d53a7SEvalZero  * +------------------------------------+-------------------+
65*042d53a7SEvalZero  * | Attribute Opcode                   | 1                 |
66*042d53a7SEvalZero  * | Starting Handle                    | 2                 |
67*042d53a7SEvalZero  * | Ending Handle                      | 2                 |
68*042d53a7SEvalZero  */
69*042d53a7SEvalZero #define BLE_ATT_FIND_INFO_REQ_SZ         5
70*042d53a7SEvalZero struct ble_att_find_info_req {
71*042d53a7SEvalZero     uint16_t bafq_start_handle;
72*042d53a7SEvalZero     uint16_t bafq_end_handle;
73*042d53a7SEvalZero } __attribute__((packed));
74*042d53a7SEvalZero 
75*042d53a7SEvalZero /**
76*042d53a7SEvalZero  * | Parameter                          | Size (octets)     |
77*042d53a7SEvalZero  * +------------------------------------+-------------------+
78*042d53a7SEvalZero  * | Attribute Opcode                   | 1                 |
79*042d53a7SEvalZero  * | Format                             | 1                 |
80*042d53a7SEvalZero  * | Information Data                   | 4 to (ATT_MTU-2)  |
81*042d53a7SEvalZero  */
82*042d53a7SEvalZero #define BLE_ATT_FIND_INFO_RSP_BASE_SZ       2
83*042d53a7SEvalZero struct ble_att_find_info_rsp {
84*042d53a7SEvalZero     uint8_t bafp_format;
85*042d53a7SEvalZero     /* Followed by information data. */
86*042d53a7SEvalZero } __attribute__((packed));
87*042d53a7SEvalZero 
88*042d53a7SEvalZero #define BLE_ATT_FIND_INFO_RSP_FORMAT_16BIT   1
89*042d53a7SEvalZero #define BLE_ATT_FIND_INFO_RSP_FORMAT_128BIT  2
90*042d53a7SEvalZero 
91*042d53a7SEvalZero #define BLE_ATT_FIND_INFO_IDATA_16_SZ           4
92*042d53a7SEvalZero #define BLE_ATT_FIND_INFO_IDATA_128_SZ          18
93*042d53a7SEvalZero 
94*042d53a7SEvalZero /**
95*042d53a7SEvalZero  * | Parameter                          | Size (octets)     |
96*042d53a7SEvalZero  * +------------------------------------+-------------------+
97*042d53a7SEvalZero  * | Attribute Opcode                   | 1                 |
98*042d53a7SEvalZero  * | Starting Handle                    | 2                 |
99*042d53a7SEvalZero  * | Ending Handle                      | 2                 |
100*042d53a7SEvalZero  * | Attribute Type                     | 2                 |
101*042d53a7SEvalZero  * | Attribute Value                    | 0 to (ATT_MTU-7)  |
102*042d53a7SEvalZero  */
103*042d53a7SEvalZero #define BLE_ATT_FIND_TYPE_VALUE_REQ_BASE_SZ   7
104*042d53a7SEvalZero struct ble_att_find_type_value_req {
105*042d53a7SEvalZero     uint16_t bavq_start_handle;
106*042d53a7SEvalZero     uint16_t bavq_end_handle;
107*042d53a7SEvalZero     uint16_t bavq_attr_type;
108*042d53a7SEvalZero     uint16_t bavq_value[0];
109*042d53a7SEvalZero } __attribute__((packed));
110*042d53a7SEvalZero 
111*042d53a7SEvalZero /**
112*042d53a7SEvalZero  * | Parameter                          | Size (octets)     |
113*042d53a7SEvalZero  * +------------------------------------+-------------------+
114*042d53a7SEvalZero  * | Attribute Opcode                   | 1                 |
115*042d53a7SEvalZero  * | Information Data                   | 4 to (ATT_MTU-1)  |
116*042d53a7SEvalZero  */
117*042d53a7SEvalZero #define BLE_ATT_FIND_TYPE_VALUE_RSP_BASE_SZ     1
118*042d53a7SEvalZero #define BLE_ATT_FIND_TYPE_VALUE_HINFO_BASE_SZ   4
119*042d53a7SEvalZero 
120*042d53a7SEvalZero struct ble_att_handle_group {
121*042d53a7SEvalZero         uint16_t attr_handle;
122*042d53a7SEvalZero         uint16_t group_end_handle;
123*042d53a7SEvalZero } __attribute__((packed));
124*042d53a7SEvalZero 
125*042d53a7SEvalZero struct ble_att_find_type_value_rsp {
126*042d53a7SEvalZero     struct ble_att_handle_group list[0];
127*042d53a7SEvalZero } __attribute__((packed));
128*042d53a7SEvalZero 
129*042d53a7SEvalZero /**
130*042d53a7SEvalZero  * | Parameter                          | Size (octets)     |
131*042d53a7SEvalZero  * +------------------------------------+-------------------+
132*042d53a7SEvalZero  * | Attribute Opcode                   | 1                 |
133*042d53a7SEvalZero  * | Starting Handle                    | 2                 |
134*042d53a7SEvalZero  * | Ending Handle                      | 2                 |
135*042d53a7SEvalZero  * | Attribute Type                     | 2 or 16           |
136*042d53a7SEvalZero  */
137*042d53a7SEvalZero #define BLE_ATT_READ_TYPE_REQ_BASE_SZ   5
138*042d53a7SEvalZero #define BLE_ATT_READ_TYPE_REQ_SZ_16     7
139*042d53a7SEvalZero #define BLE_ATT_READ_TYPE_REQ_SZ_128    21
140*042d53a7SEvalZero struct ble_att_read_type_req {
141*042d53a7SEvalZero     uint16_t batq_start_handle;
142*042d53a7SEvalZero     uint16_t batq_end_handle;
143*042d53a7SEvalZero     uint8_t uuid[0];
144*042d53a7SEvalZero } __attribute__((packed));
145*042d53a7SEvalZero 
146*042d53a7SEvalZero /**
147*042d53a7SEvalZero  * | Parameter                          | Size (octets)     |
148*042d53a7SEvalZero  * +------------------------------------+-------------------+
149*042d53a7SEvalZero  * | Attribute Opcode                   | 1                 |
150*042d53a7SEvalZero  * | Length                             | 1                 |
151*042d53a7SEvalZero  * | Attribute Data List                | 2 to (ATT_MTU-2)  |
152*042d53a7SEvalZero  */
153*042d53a7SEvalZero #define BLE_ATT_READ_TYPE_RSP_BASE_SZ       2
154*042d53a7SEvalZero 
155*042d53a7SEvalZero struct ble_att_attr_data_list {
156*042d53a7SEvalZero     uint16_t handle;
157*042d53a7SEvalZero     uint8_t value[0];
158*042d53a7SEvalZero } __attribute__((packed));
159*042d53a7SEvalZero 
160*042d53a7SEvalZero struct ble_att_read_type_rsp {
161*042d53a7SEvalZero     uint8_t batp_length;
162*042d53a7SEvalZero     struct ble_att_attr_data_list batp_list[0];
163*042d53a7SEvalZero } __attribute__((packed));
164*042d53a7SEvalZero 
165*042d53a7SEvalZero #define BLE_ATT_READ_TYPE_ADATA_BASE_SZ     2
166*042d53a7SEvalZero #define BLE_ATT_READ_TYPE_ADATA_SZ_16       6
167*042d53a7SEvalZero #define BLE_ATT_READ_TYPE_ADATA_SZ_128      20
168*042d53a7SEvalZero 
169*042d53a7SEvalZero /**
170*042d53a7SEvalZero  * | Parameter                          | Size (octets)     |
171*042d53a7SEvalZero  * +------------------------------------+-------------------+
172*042d53a7SEvalZero  * | Attribute Opcode                   | 1                 |
173*042d53a7SEvalZero  * | Attribute Handle                   | 2                 |
174*042d53a7SEvalZero  */
175*042d53a7SEvalZero #define BLE_ATT_READ_REQ_SZ              3
176*042d53a7SEvalZero struct ble_att_read_req {
177*042d53a7SEvalZero     uint16_t barq_handle;
178*042d53a7SEvalZero } __attribute__((packed));
179*042d53a7SEvalZero 
180*042d53a7SEvalZero /**
181*042d53a7SEvalZero  * | Parameter                          | Size (octets)     |
182*042d53a7SEvalZero  * +------------------------------------+-------------------+
183*042d53a7SEvalZero  * | Attribute Opcode                   | 1                 |
184*042d53a7SEvalZero  * | Attribute Value                    | 0 to (ATT_MTU-1)  |
185*042d53a7SEvalZero  */
186*042d53a7SEvalZero #define BLE_ATT_READ_RSP_BASE_SZ        1
187*042d53a7SEvalZero 
188*042d53a7SEvalZero /**
189*042d53a7SEvalZero  * | Parameter                          | Size (octets)     |
190*042d53a7SEvalZero  * +------------------------------------+-------------------+
191*042d53a7SEvalZero  * | Attribute Opcode                   | 1                 |
192*042d53a7SEvalZero  * | Attribute Handle                   | 2                 |
193*042d53a7SEvalZero  * | Value Offset                       | 2                 |
194*042d53a7SEvalZero  */
195*042d53a7SEvalZero #define BLE_ATT_READ_BLOB_REQ_SZ        5
196*042d53a7SEvalZero struct ble_att_read_blob_req {
197*042d53a7SEvalZero     uint16_t babq_handle;
198*042d53a7SEvalZero     uint16_t babq_offset;
199*042d53a7SEvalZero } __attribute__((packed));
200*042d53a7SEvalZero 
201*042d53a7SEvalZero /**
202*042d53a7SEvalZero  * | Parameter                          | Size (octets)     |
203*042d53a7SEvalZero  * +------------------------------------+-------------------+
204*042d53a7SEvalZero  * | Attribute Opcode                   | 1                 |
205*042d53a7SEvalZero  * | Attribute Value                    | 0 to (ATT_MTU-1)  |
206*042d53a7SEvalZero  */
207*042d53a7SEvalZero #define BLE_ATT_READ_BLOB_RSP_BASE_SZ   1
208*042d53a7SEvalZero 
209*042d53a7SEvalZero /**
210*042d53a7SEvalZero  * | Parameter                          | Size (octets)     |
211*042d53a7SEvalZero  * +------------------------------------+-------------------+
212*042d53a7SEvalZero  * | Attribute Opcode                   | 1                 |
213*042d53a7SEvalZero  * | Set Of Handles                     | 4 to (ATT_MTU-1)  |
214*042d53a7SEvalZero  */
215*042d53a7SEvalZero #define BLE_ATT_READ_MULT_REQ_BASE_SZ   1
216*042d53a7SEvalZero struct ble_att_read_mult_req {
217*042d53a7SEvalZero         uint16_t handles[0];
218*042d53a7SEvalZero } __attribute__((packed));
219*042d53a7SEvalZero 
220*042d53a7SEvalZero /**
221*042d53a7SEvalZero  * | Parameter                          | Size (octets)     |
222*042d53a7SEvalZero  * +------------------------------------+-------------------+
223*042d53a7SEvalZero  * | Attribute Opcode                   | 1                 |
224*042d53a7SEvalZero  * | Set Of Values                      | 4 to (ATT_MTU-1)  |
225*042d53a7SEvalZero  */
226*042d53a7SEvalZero #define BLE_ATT_READ_MULT_RSP_BASE_SZ   1
227*042d53a7SEvalZero 
228*042d53a7SEvalZero /**
229*042d53a7SEvalZero  * | Parameter                          | Size (octets)     |
230*042d53a7SEvalZero  * +------------------------------------+-------------------+
231*042d53a7SEvalZero  * | Attribute Opcode                   | 1                 |
232*042d53a7SEvalZero  * | Starting Handle                    | 2                 |
233*042d53a7SEvalZero  * | Ending Handle                      | 2                 |
234*042d53a7SEvalZero  * | Attribute Group Type               | 2 or 16           |
235*042d53a7SEvalZero  */
236*042d53a7SEvalZero #define BLE_ATT_READ_GROUP_TYPE_REQ_BASE_SZ  5
237*042d53a7SEvalZero #define BLE_ATT_READ_GROUP_TYPE_REQ_SZ_16    7
238*042d53a7SEvalZero #define BLE_ATT_READ_GROUP_TYPE_REQ_SZ_128   21
239*042d53a7SEvalZero struct ble_att_read_group_type_req {
240*042d53a7SEvalZero     uint16_t bagq_start_handle;
241*042d53a7SEvalZero     uint16_t bagq_end_handle;
242*042d53a7SEvalZero     uint8_t uuid[0];
243*042d53a7SEvalZero } __attribute__((packed));
244*042d53a7SEvalZero 
245*042d53a7SEvalZero /**
246*042d53a7SEvalZero  * | Parameter                          | Size (octets)     |
247*042d53a7SEvalZero  * +------------------------------------+-------------------+
248*042d53a7SEvalZero  * | Attribute Opcode                   | 1                 |
249*042d53a7SEvalZero  * | Length                             | 1                 |
250*042d53a7SEvalZero  * | Attribute Data List                | 2 to (ATT_MTU-2)  |
251*042d53a7SEvalZero  */
252*042d53a7SEvalZero #define BLE_ATT_READ_GROUP_TYPE_RSP_BASE_SZ  2
253*042d53a7SEvalZero struct ble_att_read_group_type_rsp {
254*042d53a7SEvalZero     uint8_t bagp_length;
255*042d53a7SEvalZero } __attribute__((packed));
256*042d53a7SEvalZero 
257*042d53a7SEvalZero #define BLE_ATT_READ_GROUP_TYPE_ADATA_BASE_SZ   4
258*042d53a7SEvalZero #define BLE_ATT_READ_GROUP_TYPE_ADATA_SZ_16     6
259*042d53a7SEvalZero #define BLE_ATT_READ_GROUP_TYPE_ADATA_SZ_128    20
260*042d53a7SEvalZero 
261*042d53a7SEvalZero /**
262*042d53a7SEvalZero  * | Parameter                          | Size (octets)     |
263*042d53a7SEvalZero  * +------------------------------------+-------------------+
264*042d53a7SEvalZero  * | Attribute Opcode                   | 1                 |
265*042d53a7SEvalZero  * | Attribute Handle                   | 2                 |
266*042d53a7SEvalZero  * | Attribute Value                    | 0 to (ATT_MTU-3)  |
267*042d53a7SEvalZero  */
268*042d53a7SEvalZero #define BLE_ATT_WRITE_REQ_BASE_SZ       3
269*042d53a7SEvalZero struct ble_att_write_req {
270*042d53a7SEvalZero     uint16_t bawq_handle;
271*042d53a7SEvalZero     uint8_t value[0];
272*042d53a7SEvalZero } __attribute__((packed));
273*042d53a7SEvalZero 
274*042d53a7SEvalZero #define BLE_ATT_WRITE_RSP_SZ            1
275*042d53a7SEvalZero 
276*042d53a7SEvalZero /**
277*042d53a7SEvalZero  * | Parameter                          | Size (octets)     |
278*042d53a7SEvalZero  * +------------------------------------+-------------------+
279*042d53a7SEvalZero  * | Attribute Opcode                   | 1                 |
280*042d53a7SEvalZero  * | Attribute Handle                   | 2                 |
281*042d53a7SEvalZero  * | Value Offset                       | 2                 |
282*042d53a7SEvalZero  * | Part Attribute Value               | 0 to (ATT_MTU-5)  |
283*042d53a7SEvalZero  */
284*042d53a7SEvalZero #define BLE_ATT_PREP_WRITE_CMD_BASE_SZ  5
285*042d53a7SEvalZero struct ble_att_prep_write_cmd {
286*042d53a7SEvalZero     uint16_t bapc_handle;
287*042d53a7SEvalZero     uint16_t bapc_offset;
288*042d53a7SEvalZero     uint16_t bapc_value[0];
289*042d53a7SEvalZero } __attribute__((packed));
290*042d53a7SEvalZero 
291*042d53a7SEvalZero /**
292*042d53a7SEvalZero  * | Parameter                          | Size (octets)     |
293*042d53a7SEvalZero  * +------------------------------------+-------------------+
294*042d53a7SEvalZero  * | Attribute Opcode                   | 1                 |
295*042d53a7SEvalZero  * | Flags                              | 1                 |
296*042d53a7SEvalZero  */
297*042d53a7SEvalZero #define BLE_ATT_EXEC_WRITE_REQ_SZ       2
298*042d53a7SEvalZero struct ble_att_exec_write_req {
299*042d53a7SEvalZero     uint8_t baeq_flags;
300*042d53a7SEvalZero } __attribute__((packed));
301*042d53a7SEvalZero 
302*042d53a7SEvalZero #define BLE_ATT_EXEC_WRITE_F_CANCEL     0x00
303*042d53a7SEvalZero #define BLE_ATT_EXEC_WRITE_F_EXECUTE    0x01
304*042d53a7SEvalZero 
305*042d53a7SEvalZero /**
306*042d53a7SEvalZero  * | Parameter                          | Size (octets)     |
307*042d53a7SEvalZero  * +------------------------------------+-------------------+
308*042d53a7SEvalZero  * | Attribute Opcode                   | 1                 |
309*042d53a7SEvalZero  */
310*042d53a7SEvalZero #define BLE_ATT_EXEC_WRITE_RSP_SZ       1
311*042d53a7SEvalZero 
312*042d53a7SEvalZero /**
313*042d53a7SEvalZero  * | Parameter                          | Size (octets)     |
314*042d53a7SEvalZero  * +------------------------------------+-------------------+
315*042d53a7SEvalZero  * | Attribute Opcode                   | 1                 |
316*042d53a7SEvalZero  * | Attribute Handle                   | 2                 |
317*042d53a7SEvalZero  * | Attribute Value                    | 0 to (ATT_MTU-3)  |
318*042d53a7SEvalZero  */
319*042d53a7SEvalZero #define BLE_ATT_NOTIFY_REQ_BASE_SZ      3
320*042d53a7SEvalZero struct ble_att_notify_req {
321*042d53a7SEvalZero     uint16_t banq_handle;
322*042d53a7SEvalZero } __attribute__((packed));
323*042d53a7SEvalZero 
324*042d53a7SEvalZero /**
325*042d53a7SEvalZero  * | Parameter                          | Size (octets)     |
326*042d53a7SEvalZero  * +------------------------------------+-------------------+
327*042d53a7SEvalZero  * | Attribute Opcode                   | 1                 |
328*042d53a7SEvalZero  * | Attribute Handle                   | 2                 |
329*042d53a7SEvalZero  * | Attribute Value                    | 0 to (ATT_MTU-3)  |
330*042d53a7SEvalZero  */
331*042d53a7SEvalZero #define BLE_ATT_INDICATE_REQ_BASE_SZ    3
332*042d53a7SEvalZero struct ble_att_indicate_req {
333*042d53a7SEvalZero     uint16_t baiq_handle;
334*042d53a7SEvalZero } __attribute__((packed));
335*042d53a7SEvalZero 
336*042d53a7SEvalZero /**
337*042d53a7SEvalZero  * | Parameter                          | Size (octets)     |
338*042d53a7SEvalZero  * +------------------------------------+-------------------+
339*042d53a7SEvalZero  * | Attribute Opcode                   | 1                 |
340*042d53a7SEvalZero  */
341*042d53a7SEvalZero #define BLE_ATT_INDICATE_RSP_SZ         1
342*042d53a7SEvalZero 
343*042d53a7SEvalZero /**
344*042d53a7SEvalZero  * | Parameter                          | Size (octets)     |
345*042d53a7SEvalZero  * +------------------------------------+-------------------+
346*042d53a7SEvalZero  * | Attribute Opcode                   | 1                 |
347*042d53a7SEvalZero  * | Attribute Handle                   | 2                 |
348*042d53a7SEvalZero  * | Attribute Value                    | 0 to (ATT_MTU-3)  |
349*042d53a7SEvalZero  */
350*042d53a7SEvalZero #define BLE_ATT_WRITE_CMD_BASE_SZ       3
351*042d53a7SEvalZero struct ble_att_write_cmd {
352*042d53a7SEvalZero     uint16_t handle;
353*042d53a7SEvalZero     uint8_t value[0];
354*042d53a7SEvalZero } __attribute__((packed));
355*042d53a7SEvalZero 
356*042d53a7SEvalZero void ble_att_error_rsp_parse(const void *payload, int len,
357*042d53a7SEvalZero                              struct ble_att_error_rsp *rsp);
358*042d53a7SEvalZero void ble_att_error_rsp_write(void *payload, int len,
359*042d53a7SEvalZero                              const struct ble_att_error_rsp *rsp);
360*042d53a7SEvalZero void ble_att_error_rsp_log(const struct ble_att_error_rsp *cmd);
361*042d53a7SEvalZero void ble_att_mtu_req_parse(const void *payload, int len,
362*042d53a7SEvalZero                            struct ble_att_mtu_cmd *cmd);
363*042d53a7SEvalZero void ble_att_mtu_req_write(void *payload, int len,
364*042d53a7SEvalZero                            const struct ble_att_mtu_cmd *cmd);
365*042d53a7SEvalZero void ble_att_mtu_rsp_parse(const void *payload, int len,
366*042d53a7SEvalZero                            struct ble_att_mtu_cmd *cmd);
367*042d53a7SEvalZero void ble_att_mtu_rsp_write(void *payload, int len,
368*042d53a7SEvalZero                            const struct ble_att_mtu_cmd *cmd);
369*042d53a7SEvalZero void ble_att_mtu_cmd_log(const struct ble_att_mtu_cmd *cmd);
370*042d53a7SEvalZero void ble_att_find_info_req_parse(const void *payload, int len,
371*042d53a7SEvalZero                                  struct ble_att_find_info_req *req);
372*042d53a7SEvalZero void ble_att_find_info_req_write(void *payload, int len,
373*042d53a7SEvalZero                                  const struct ble_att_find_info_req *req);
374*042d53a7SEvalZero void ble_att_find_info_req_log(const struct ble_att_find_info_req *cmd);
375*042d53a7SEvalZero void ble_att_find_info_rsp_parse(const void *payload, int len,
376*042d53a7SEvalZero                                  struct ble_att_find_info_rsp *rsp);
377*042d53a7SEvalZero void ble_att_find_info_rsp_write(void *payload, int len,
378*042d53a7SEvalZero                                  const struct ble_att_find_info_rsp *rsp);
379*042d53a7SEvalZero void ble_att_find_info_rsp_log(const struct ble_att_find_info_rsp *cmd);
380*042d53a7SEvalZero void ble_att_find_type_value_req_parse(
381*042d53a7SEvalZero     const void *payload, int len, struct ble_att_find_type_value_req *req);
382*042d53a7SEvalZero void ble_att_find_type_value_req_write(
383*042d53a7SEvalZero     void *payload, int len, const struct ble_att_find_type_value_req *req);
384*042d53a7SEvalZero void ble_att_find_type_value_req_log(
385*042d53a7SEvalZero     const struct ble_att_find_type_value_req *cmd);
386*042d53a7SEvalZero void ble_att_read_type_req_parse(const void *payload, int len,
387*042d53a7SEvalZero                                  struct ble_att_read_type_req *req);
388*042d53a7SEvalZero void ble_att_read_type_req_write(void *payload, int len,
389*042d53a7SEvalZero                                  const struct ble_att_read_type_req *req);
390*042d53a7SEvalZero void ble_att_read_type_req_log(const struct ble_att_read_type_req *cmd);
391*042d53a7SEvalZero void ble_att_read_type_rsp_parse(const void *payload, int len,
392*042d53a7SEvalZero                                  struct ble_att_read_type_rsp *rsp);
393*042d53a7SEvalZero void ble_att_read_type_rsp_write(void *payload, int len,
394*042d53a7SEvalZero                                  const struct ble_att_read_type_rsp *rsp);
395*042d53a7SEvalZero void ble_att_read_type_rsp_log(const struct ble_att_read_type_rsp *cmd);
396*042d53a7SEvalZero void ble_att_read_req_parse(const void *payload, int len,
397*042d53a7SEvalZero                             struct ble_att_read_req *req);
398*042d53a7SEvalZero void ble_att_read_req_write(void *payload, int len,
399*042d53a7SEvalZero                             const struct ble_att_read_req *req);
400*042d53a7SEvalZero void ble_att_read_req_log(const struct ble_att_read_req *cmd);
401*042d53a7SEvalZero void ble_att_read_blob_req_parse(const void *payload, int len,
402*042d53a7SEvalZero                                  struct ble_att_read_blob_req *req);
403*042d53a7SEvalZero void ble_att_read_blob_req_write(void *payload, int len,
404*042d53a7SEvalZero                                  const struct ble_att_read_blob_req *req);
405*042d53a7SEvalZero void ble_att_read_blob_req_log(const struct ble_att_read_blob_req *cmd);
406*042d53a7SEvalZero void ble_att_read_mult_req_parse(const void *payload, int len);
407*042d53a7SEvalZero void ble_att_read_mult_req_write(void *payload, int len);
408*042d53a7SEvalZero void ble_att_read_mult_rsp_parse(const void *payload, int len);
409*042d53a7SEvalZero void ble_att_read_mult_rsp_write(void *payload, int len);
410*042d53a7SEvalZero void ble_att_read_group_type_req_parse(
411*042d53a7SEvalZero     const void *payload, int len, struct ble_att_read_group_type_req *req);
412*042d53a7SEvalZero void ble_att_read_group_type_req_write(
413*042d53a7SEvalZero     void *payload, int len, const struct ble_att_read_group_type_req *req);
414*042d53a7SEvalZero void ble_att_read_group_type_req_log(
415*042d53a7SEvalZero     const struct ble_att_read_group_type_req *cmd);
416*042d53a7SEvalZero void ble_att_read_group_type_rsp_parse(
417*042d53a7SEvalZero     const void *payload, int len, struct ble_att_read_group_type_rsp *rsp);
418*042d53a7SEvalZero void ble_att_read_group_type_rsp_write(
419*042d53a7SEvalZero     void *payload, int len, const struct ble_att_read_group_type_rsp *rsp);
420*042d53a7SEvalZero void ble_att_read_group_type_rsp_log(
421*042d53a7SEvalZero     const struct ble_att_read_group_type_rsp *cmd);
422*042d53a7SEvalZero void ble_att_write_req_parse(const void *payload, int len,
423*042d53a7SEvalZero                              struct ble_att_write_req *req);
424*042d53a7SEvalZero void ble_att_write_req_write(void *payload, int len,
425*042d53a7SEvalZero                              const struct ble_att_write_req *req);
426*042d53a7SEvalZero void ble_att_write_cmd_parse(const void *payload, int len,
427*042d53a7SEvalZero                              struct ble_att_write_req *req);
428*042d53a7SEvalZero void ble_att_write_cmd_write(void *payload, int len,
429*042d53a7SEvalZero                              const struct ble_att_write_req *req);
430*042d53a7SEvalZero void ble_att_write_cmd_log(const struct ble_att_write_cmd *cmd);
431*042d53a7SEvalZero void ble_att_write_req_log(const struct ble_att_write_req *req);
432*042d53a7SEvalZero void ble_att_prep_write_req_parse(const void *payload, int len,
433*042d53a7SEvalZero                                   struct ble_att_prep_write_cmd *cmd);
434*042d53a7SEvalZero void ble_att_prep_write_req_write(void *payload, int len,
435*042d53a7SEvalZero                                   const struct ble_att_prep_write_cmd *cmd);
436*042d53a7SEvalZero void ble_att_prep_write_cmd_log(const struct ble_att_prep_write_cmd *cmd);
437*042d53a7SEvalZero void ble_att_prep_write_rsp_parse(const void *payload, int len,
438*042d53a7SEvalZero                                   struct ble_att_prep_write_cmd *cmd);
439*042d53a7SEvalZero void ble_att_prep_write_rsp_write(void *payload, int len,
440*042d53a7SEvalZero                                   const struct ble_att_prep_write_cmd *cmd);
441*042d53a7SEvalZero void ble_att_exec_write_req_parse(const void *payload, int len,
442*042d53a7SEvalZero                                   struct ble_att_exec_write_req *req);
443*042d53a7SEvalZero void ble_att_exec_write_req_log(const struct ble_att_exec_write_req *cmd);
444*042d53a7SEvalZero void ble_att_exec_write_req_write(void *payload, int len,
445*042d53a7SEvalZero                                   const struct ble_att_exec_write_req *req);
446*042d53a7SEvalZero void ble_att_exec_write_rsp_parse(const void *payload, int len);
447*042d53a7SEvalZero void ble_att_exec_write_rsp_write(void *payload, int len);
448*042d53a7SEvalZero void ble_att_notify_req_parse(const void *payload, int len,
449*042d53a7SEvalZero                               struct ble_att_notify_req *req);
450*042d53a7SEvalZero void ble_att_notify_req_write(void *payload, int len,
451*042d53a7SEvalZero                               const struct ble_att_notify_req *req);
452*042d53a7SEvalZero void ble_att_notify_req_log(const struct ble_att_notify_req *cmd);
453*042d53a7SEvalZero void ble_att_indicate_req_parse(const void *payload, int len,
454*042d53a7SEvalZero                                 struct ble_att_indicate_req *req);
455*042d53a7SEvalZero void ble_att_indicate_req_write(void *payload, int len,
456*042d53a7SEvalZero                                 const struct ble_att_indicate_req *req);
457*042d53a7SEvalZero void ble_att_indicate_rsp_parse(const void *payload, int len);
458*042d53a7SEvalZero void ble_att_indicate_rsp_write(void *payload, int len);
459*042d53a7SEvalZero void ble_att_indicate_req_log(const struct ble_att_indicate_req *cmd);
460*042d53a7SEvalZero 
461*042d53a7SEvalZero void *ble_att_cmd_prepare(uint8_t opcode, size_t len, struct os_mbuf *txom);
462*042d53a7SEvalZero void *ble_att_cmd_get(uint8_t opcode, size_t len, struct os_mbuf **txom);
463*042d53a7SEvalZero int ble_att_tx(uint16_t conn_handle, struct os_mbuf *txom);
464*042d53a7SEvalZero 
465*042d53a7SEvalZero #ifdef __cplusplus
466*042d53a7SEvalZero }
467*042d53a7SEvalZero #endif
468*042d53a7SEvalZero 
469*042d53a7SEvalZero #endif
470