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