xref: /nrf52832-nimble/packages/NimBLE-latest/nimble/host/test/src/ble_hs_test_util.h (revision 042d53a763ad75cb1465103098bb88c245d95138)
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements.  See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership.  The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License.  You may obtain a copy of the License at
9  *
10  *  http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied.  See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  */
19 
20 #ifndef H_BLE_HS_TEST_UTIL_
21 #define H_BLE_HS_TEST_UTIL_
22 
23 #include <inttypes.h>
24 #include "host/ble_gap.h"
25 #include "ble_hs_priv.h"
26 #include "ble_hs_test_util_hci.h"
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30 
31 struct ble_hs_conn;
32 struct ble_l2cap_chan;
33 struct hci_disconn_complete;
34 struct hci_create_conn;
35 
36 #define BLE_HS_TEST_UTIL_LE_OPCODE(ocf) \
37     ble_hs_hci_util_opcode_join(BLE_HCI_OGF_LE, (ocf))
38 
39 #define BLE_HS_TEST_UTIL_PUB_ADDR_VAL { 0x0a, 0x54, 0xab, 0x49, 0x7f, 0x06 }
40 
41 extern const struct ble_gap_adv_params ble_hs_test_util_adv_params;
42 
43 struct ble_hs_test_util_flat_attr {
44     uint16_t handle;
45     uint16_t offset;
46     uint8_t value[BLE_ATT_ATTR_MAX_LEN];
47     uint16_t value_len;
48 };
49 
50 struct ble_hs_test_util_mbuf_params {
51     unsigned prev_tx:1;
52     unsigned rx_queue:1;
53     unsigned prep_list:1;
54 };
55 
56 struct ble_hs_test_util_att_info_entry {
57     uint16_t handle;        /* 0 on last entry */
58     const ble_uuid_t *uuid;
59 };
60 
61 struct ble_hs_test_util_att_group_type_entry {
62     uint16_t start_handle;  /* 0 on last entry */
63     uint16_t end_handle;    /* 0 on last entry */
64     const ble_uuid_t *uuid;
65 };
66 
67 #define BLE_HS_TEST_UTIL_L2CAP_HCI_HDR(handle, pb, len) \
68     ((struct hci_data_hdr) {                            \
69         .hdh_handle_pb_bc = ((handle)  << 0) |          \
70                             ((pb)      << 12),          \
71         .hdh_len = (len)                                \
72     })
73 
74 #define BLE_HS_TEST_CONN_FEAT_ALL               (0xFF)
75 #define BLE_HS_TEST_CONN_FEAT_NO_CONN_PARAM     (0xFD)
76 
77 void ble_hs_test_util_prev_tx_enqueue(struct os_mbuf *om);
78 struct os_mbuf *ble_hs_test_util_prev_tx_dequeue(void);
79 struct os_mbuf *ble_hs_test_util_prev_tx_dequeue_pullup(void);
80 int ble_hs_test_util_prev_tx_queue_sz(void);
81 void ble_hs_test_util_prev_tx_queue_clear(void);
82 
83 void ble_hs_test_util_create_rpa_conn(uint16_t handle, uint8_t own_addr_type,
84                                       const uint8_t *our_rpa,
85                                       uint8_t peer_addr_type,
86                                       const uint8_t *peer_id_addr,
87                                       const uint8_t *peer_rpa,
88                                       uint8_t conn_features,
89                                       ble_gap_event_fn *cb, void *cb_arg);
90 void ble_hs_test_util_create_conn(uint16_t handle, const uint8_t *addr,
91                                   ble_gap_event_fn *cb, void *cb_arg);
92 void ble_hs_test_util_create_conn_feat(uint16_t handle, const uint8_t *addr,
93                                   uint8_t conn_features,
94                                   ble_gap_event_fn *cb, void *cb_arg);
95 int ble_hs_test_util_connect(uint8_t own_addr_type,
96                                    const ble_addr_t *peer_addr,
97                                    int32_t duration_ms,
98                                    const struct ble_gap_conn_params *params,
99                                    ble_gap_event_fn *cb,
100                                    void *cb_arg,
101                                    uint8_t ack_status);
102 int ble_hs_test_util_conn_cancel(uint8_t ack_status);
103 void ble_hs_test_util_rx_conn_cancel_evt(void);
104 void ble_hs_test_util_conn_cancel_full(void);
105 int ble_hs_test_util_conn_terminate(uint16_t conn_handle, uint8_t hci_status);
106 void ble_hs_test_util_rx_disconn_complete(uint16_t conn_handle,
107                                           uint8_t reason);
108 void ble_hs_test_util_conn_disconnect(uint16_t conn_handle);
109 int ble_hs_test_util_disc(uint8_t own_addr_type, int32_t duration_ms,
110                           const struct ble_gap_disc_params *disc_params,
111                           ble_gap_event_fn *cb, void *cb_arg, int fail_idx,
112                           uint8_t fail_status);
113 int ble_hs_test_util_disc_cancel(uint8_t ack_status);
114 int ble_hs_test_util_adv_set_fields(const struct ble_hs_adv_fields *adv_fields,
115                                     int cmd_fail_idx, uint8_t hci_status);
116 int ble_hs_test_util_adv_rsp_set_fields(
117     const struct ble_hs_adv_fields *adv_fields,
118     int cmd_fail_idx, uint8_t hci_status);
119 int ble_hs_test_util_adv_start(uint8_t own_addr_type,
120                                const ble_addr_t *peer_addr,
121                                const struct ble_gap_adv_params *adv_params,
122                                int32_t duration_ms,
123                                ble_gap_event_fn *cb, void *cb_arg,
124                                int fail_idx, uint8_t fail_status);
125 int ble_hs_test_util_adv_stop(uint8_t hci_status);
126 int ble_hs_test_util_wl_set(ble_addr_t *addrs, uint8_t addrs_count,
127                             int fail_idx, uint8_t fail_status);
128 int ble_hs_test_util_conn_update(uint16_t conn_handle,
129                                  struct ble_gap_upd_params *params,
130                                  uint8_t hci_status);
131 int ble_hs_test_util_set_our_irk(const uint8_t *irk, int fail_idx,
132                                  uint8_t hci_status);
133 int ble_hs_test_util_security_initiate(uint16_t conn_handle,
134                                        uint8_t hci_status);
135 int ble_hs_test_util_l2cap_rx_first_frag(uint16_t conn_handle, uint16_t cid,
136                                          struct hci_data_hdr *hci_hdr,
137                                          struct os_mbuf *om);
138 int ble_hs_test_util_l2cap_rx(uint16_t conn_handle,
139                               struct hci_data_hdr *hci_hdr,
140                               struct os_mbuf *om);
141 int ble_hs_test_util_l2cap_rx_payload_flat(uint16_t conn_handle, uint16_t cid,
142                                            const void *data, int len);
143 uint8_t ble_hs_test_util_verify_tx_l2cap_sig(uint16_t opcode, void *cmd,
144                                                  uint16_t cmd_size);
145 int ble_hs_test_util_inject_rx_l2cap_sig(uint16_t conn_handle, uint8_t opcode,
146                                      uint8_t id, void *cmd, uint16_t cmd_size);
147 void ble_hs_test_util_verify_tx_l2cap(struct os_mbuf *txom);
148 void ble_hs_test_util_inject_rx_l2cap(uint16_t conn_handle, uint16_t cid,
149                                       struct os_mbuf *rxom);
150 void ble_hs_test_util_set_att_mtu(uint16_t conn_handle, uint16_t mtu);
151 int ble_hs_test_util_rx_att_mtu_cmd(uint16_t conn_handle, int is_req,
152                                     uint16_t mtu);
153 int ble_hs_test_util_rx_att_find_info_req(uint16_t conn_handle,
154                                           uint16_t start_handle,
155                                           uint16_t end_handle);
156 int ble_hs_test_util_rx_att_find_type_value_req(uint16_t conn_handle,
157                                                 uint16_t start_handle,
158                                                 uint16_t end_handle,
159                                                 uint16_t attr_type,
160                                                 const void *attr_val,
161                                                 uint16_t attr_len);
162 int ble_hs_test_util_rx_att_read_type_req(uint16_t conn_handle,
163                                           uint16_t start_handle,
164                                           uint16_t end_handle,
165                                           const ble_uuid_t *uuid);
166 int ble_hs_test_util_rx_att_read_type_req16(uint16_t conn_handle,
167                                             uint16_t start_handle,
168                                             uint16_t end_handle,
169                                             uint16_t uuid16);
170 int ble_hs_test_util_rx_att_read_req(uint16_t conn_handle,
171                                      uint16_t attr_handle);
172 int ble_hs_test_util_rx_att_read_blob_req(uint16_t conn_handle,
173                                           uint16_t attr_handle,
174                                           uint16_t offset);
175 int ble_hs_test_util_rx_att_read_mult_req(uint16_t conn_handle,
176                                           const uint16_t *handles,
177                                           int num_handles);
178 int ble_hs_test_util_rx_att_read_group_type_req(uint16_t conn_handle,
179                                                 uint16_t start_handle,
180                                                 uint16_t end_handle,
181                                                 const ble_uuid_t *uuid);
182 int ble_hs_test_util_rx_att_read_group_type_req16(uint16_t conn_handle,
183                                                   uint16_t start_handle,
184                                                   uint16_t end_handle,
185                                                   uint16_t uuid16);
186 int ble_hs_test_util_rx_att_write_req(uint16_t conn_handle,
187                                       uint16_t attr_handle,
188                                       const void *attr_val,
189                                       uint16_t attr_len);
190 int ble_hs_test_util_rx_att_write_cmd(uint16_t conn_handle,
191                                       uint16_t attr_handle,
192                                       const void *attr_val,
193                                       uint16_t attr_len);
194 int ble_hs_test_util_rx_att_prep_write_req(uint16_t conn_handle,
195                                            uint16_t attr_handle,
196                                            uint16_t offset,
197                                            const void *attr_val,
198                                            uint16_t attr_len);
199 int ble_hs_test_util_rx_att_exec_write_req(uint16_t conn_handle,
200                                            uint8_t flags);
201 int ble_hs_test_util_rx_att_notify_req(uint16_t conn_handle,
202                                        uint16_t attr_handle,
203                                        void *attr_val,
204                                        uint16_t attr_len);
205 int ble_hs_test_util_rx_att_indicate_req(uint16_t conn_handle,
206                                          uint16_t attr_handle,
207                                          void *attr_val,
208                                          uint16_t attr_len);
209 void ble_hs_test_util_rx_att_err_rsp(uint16_t conn_handle, uint8_t req_op,
210                                      uint8_t error_code, uint16_t err_handle);
211 void ble_hs_test_util_verify_tx_prep_write(uint16_t attr_handle,
212                                            uint16_t offset,
213                                            const void *data, int data_len);
214 void ble_hs_test_util_verify_tx_exec_write(uint8_t expected_flags);
215 void ble_hs_test_util_verify_tx_find_type_value(uint16_t start_handle,
216                                                 uint16_t end_handle,
217                                                 uint16_t attr_type,
218                                                 const void *value,
219                                                 uint16_t value_len);
220 void ble_hs_test_util_verify_tx_disc_svc_uuid(const ble_uuid_t *uuid);
221 void ble_hs_test_util_verify_tx_read_rsp(uint8_t *attr_data, int attr_len);
222 void ble_hs_test_util_verify_tx_read_blob_rsp(uint8_t *attr_data,
223                                               int attr_len);
224 void ble_hs_test_util_verify_tx_write_rsp(void);
225 void ble_hs_test_util_verify_tx_find_info_rsp(
226     struct ble_hs_test_util_att_info_entry *entries);
227 void ble_hs_test_util_verify_tx_mtu_cmd(int is_req, uint16_t mtu);
228 void ble_hs_test_util_verify_tx_read_group_type_rsp(
229     struct ble_hs_test_util_att_group_type_entry *entries);
230 void ble_hs_test_util_verify_tx_err_rsp(uint8_t req_op, uint16_t handle,
231                                         uint8_t error_code);
232 void ble_hs_test_util_verify_tx_write_cmd(uint16_t handle, const void *data,
233                                           uint16_t data_len);
234 
235 uint8_t ble_hs_test_util_verify_tx_l2cap_update_req(
236     struct ble_l2cap_sig_update_params *params);
237 int ble_hs_test_util_rx_l2cap_update_rsp(uint16_t conn_handle,
238                                          uint8_t id, uint16_t result);
239 void ble_hs_test_util_verify_tx_l2cap_update_rsp(uint8_t exp_id,
240                                                  uint16_t exp_result);
241 void ble_hs_test_util_set_static_rnd_addr(const uint8_t *addr);
242 struct os_mbuf *ble_hs_test_util_om_from_flat(const void *buf, uint16_t len);
243 int ble_hs_test_util_flat_attr_cmp(const struct ble_hs_test_util_flat_attr *a,
244                                    const struct ble_hs_test_util_flat_attr *b);
245 void ble_hs_test_util_attr_to_flat(struct ble_hs_test_util_flat_attr *flat,
246                                    const struct ble_gatt_attr *attr);
247 void ble_hs_test_util_attr_from_flat(
248     struct ble_gatt_attr *attr, const struct ble_hs_test_util_flat_attr *flat);
249 int ble_hs_test_util_read_local_flat(uint16_t attr_handle, uint16_t max_len,
250                                      void *buf, uint16_t *out_len);
251 int ble_hs_test_util_write_local_flat(uint16_t attr_handle,
252                                       const void *buf, uint16_t buf_len);
253 int ble_hs_test_util_gatt_write_flat(uint16_t conn_handle,
254                                      uint16_t attr_handle,
255                                      const void *data, uint16_t data_len,
256                                      ble_gatt_attr_fn *cb, void *cb_arg);
257 int ble_hs_test_util_gatt_write_no_rsp_flat(uint16_t conn_handle,
258                                             uint16_t attr_handle,
259                                             const void *data,
260                                             uint16_t data_len);
261 int ble_hs_test_util_gatt_write_long_flat(uint16_t conn_handle,
262                                           uint16_t attr_handle,
263                                           const void *data, uint16_t data_len,
264                                           ble_gatt_attr_fn *cb, void *cb_arg);
265 struct os_mbuf *ble_hs_test_util_mbuf_alloc_all_but(int count);
266 int ble_hs_test_util_mbuf_count(
267     const struct ble_hs_test_util_mbuf_params *params);
268 void ble_hs_test_util_assert_mbufs_freed(
269     const struct ble_hs_test_util_mbuf_params *params);
270 void ble_hs_test_util_post_test(void *arg);
271 int ble_hs_test_util_num_cccds(void);
272 int ble_hs_test_util_num_our_secs(void);
273 int ble_hs_test_util_num_peer_secs(void);
274 void ble_hs_test_util_reg_svcs(const struct ble_gatt_svc_def *svcs,
275                                ble_gatt_register_fn *reg_cb,
276                                void *cb_arg);
277 void ble_hs_test_util_init_no_start(void);
278 void ble_hs_test_util_init_no_sysinit_no_start(void);
279 void ble_hs_test_util_init(void);
280 
281 #ifdef __cplusplus
282 }
283 #endif
284 
285 #endif
286