| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| #ifndef H_BLE_HS_TEST_UTIL_ |
| #define H_BLE_HS_TEST_UTIL_ |
| |
| #include <inttypes.h> |
| #include "host/ble_gap.h" |
| #include "ble_hs_priv.h" |
| #include "ble_hs_test_util_hci.h" |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| struct ble_hs_conn; |
| struct ble_l2cap_chan; |
| struct hci_disconn_complete; |
| struct hci_create_conn; |
| |
| #define BLE_HS_TEST_UTIL_LE_OPCODE(ocf) \ |
| ble_hs_hci_util_opcode_join(BLE_HCI_OGF_LE, (ocf)) |
| |
| #define BLE_HS_TEST_UTIL_PUB_ADDR_VAL { 0x0a, 0x54, 0xab, 0x49, 0x7f, 0x06 } |
| |
| extern const struct ble_gap_adv_params ble_hs_test_util_adv_params; |
| |
| struct ble_hs_test_util_flat_attr { |
| uint16_t handle; |
| uint16_t offset; |
| uint8_t value[BLE_ATT_ATTR_MAX_LEN]; |
| uint16_t value_len; |
| }; |
| |
| struct ble_hs_test_util_mbuf_params { |
| unsigned prev_tx:1; |
| unsigned rx_queue:1; |
| unsigned prep_list:1; |
| }; |
| |
| struct ble_hs_test_util_att_info_entry { |
| uint16_t handle; /* 0 on last entry */ |
| const ble_uuid_t *uuid; |
| }; |
| |
| struct ble_hs_test_util_att_group_type_entry { |
| uint16_t start_handle; /* 0 on last entry */ |
| uint16_t end_handle; /* 0 on last entry */ |
| const ble_uuid_t *uuid; |
| }; |
| |
| #define BLE_HS_TEST_UTIL_L2CAP_HCI_HDR(handle, pb, len) \ |
| ((struct hci_data_hdr) { \ |
| .hdh_handle_pb_bc = ((handle) << 0) | \ |
| ((pb) << 12), \ |
| .hdh_len = (len) \ |
| }) |
| |
| #define BLE_HS_TEST_CONN_FEAT_ALL (0xFF) |
| #define BLE_HS_TEST_CONN_FEAT_NO_CONN_PARAM (0xFD) |
| |
| void ble_hs_test_util_prev_tx_enqueue(struct os_mbuf *om); |
| struct os_mbuf *ble_hs_test_util_prev_tx_dequeue(void); |
| struct os_mbuf *ble_hs_test_util_prev_tx_dequeue_pullup(void); |
| int ble_hs_test_util_prev_tx_queue_sz(void); |
| void ble_hs_test_util_prev_tx_queue_clear(void); |
| |
| void ble_hs_test_util_create_rpa_conn(uint16_t handle, uint8_t own_addr_type, |
| const uint8_t *our_rpa, |
| uint8_t peer_addr_type, |
| const uint8_t *peer_id_addr, |
| const uint8_t *peer_rpa, |
| uint8_t conn_features, |
| ble_gap_event_fn *cb, void *cb_arg); |
| void ble_hs_test_util_create_conn(uint16_t handle, const uint8_t *addr, |
| ble_gap_event_fn *cb, void *cb_arg); |
| void ble_hs_test_util_create_conn_feat(uint16_t handle, const uint8_t *addr, |
| uint8_t conn_features, |
| ble_gap_event_fn *cb, void *cb_arg); |
| int ble_hs_test_util_connect(uint8_t own_addr_type, |
| const ble_addr_t *peer_addr, |
| int32_t duration_ms, |
| const struct ble_gap_conn_params *params, |
| ble_gap_event_fn *cb, |
| void *cb_arg, |
| uint8_t ack_status); |
| int ble_hs_test_util_conn_cancel(uint8_t ack_status); |
| void ble_hs_test_util_rx_conn_cancel_evt(void); |
| void ble_hs_test_util_conn_cancel_full(void); |
| int ble_hs_test_util_conn_terminate(uint16_t conn_handle, uint8_t hci_status); |
| void ble_hs_test_util_rx_disconn_complete(uint16_t conn_handle, |
| uint8_t reason); |
| void ble_hs_test_util_conn_disconnect(uint16_t conn_handle); |
| int ble_hs_test_util_disc(uint8_t own_addr_type, int32_t duration_ms, |
| const struct ble_gap_disc_params *disc_params, |
| ble_gap_event_fn *cb, void *cb_arg, int fail_idx, |
| uint8_t fail_status); |
| int ble_hs_test_util_disc_cancel(uint8_t ack_status); |
| int ble_hs_test_util_adv_set_fields(const struct ble_hs_adv_fields *adv_fields, |
| int cmd_fail_idx, uint8_t hci_status); |
| int ble_hs_test_util_adv_rsp_set_fields( |
| const struct ble_hs_adv_fields *adv_fields, |
| int cmd_fail_idx, uint8_t hci_status); |
| int ble_hs_test_util_adv_start(uint8_t own_addr_type, |
| const ble_addr_t *peer_addr, |
| const struct ble_gap_adv_params *adv_params, |
| int32_t duration_ms, |
| ble_gap_event_fn *cb, void *cb_arg, |
| int fail_idx, uint8_t fail_status); |
| int ble_hs_test_util_adv_stop(uint8_t hci_status); |
| int ble_hs_test_util_wl_set(ble_addr_t *addrs, uint8_t addrs_count, |
| int fail_idx, uint8_t fail_status); |
| int ble_hs_test_util_conn_update(uint16_t conn_handle, |
| struct ble_gap_upd_params *params, |
| uint8_t hci_status); |
| int ble_hs_test_util_set_our_irk(const uint8_t *irk, int fail_idx, |
| uint8_t hci_status); |
| int ble_hs_test_util_security_initiate(uint16_t conn_handle, |
| uint8_t hci_status); |
| int ble_hs_test_util_l2cap_rx_first_frag(uint16_t conn_handle, uint16_t cid, |
| struct hci_data_hdr *hci_hdr, |
| struct os_mbuf *om); |
| int ble_hs_test_util_l2cap_rx(uint16_t conn_handle, |
| struct hci_data_hdr *hci_hdr, |
| struct os_mbuf *om); |
| int ble_hs_test_util_l2cap_rx_payload_flat(uint16_t conn_handle, uint16_t cid, |
| const void *data, int len); |
| uint8_t ble_hs_test_util_verify_tx_l2cap_sig(uint16_t opcode, void *cmd, |
| uint16_t cmd_size); |
| int ble_hs_test_util_inject_rx_l2cap_sig(uint16_t conn_handle, uint8_t opcode, |
| uint8_t id, void *cmd, uint16_t cmd_size); |
| void ble_hs_test_util_verify_tx_l2cap(struct os_mbuf *txom); |
| void ble_hs_test_util_inject_rx_l2cap(uint16_t conn_handle, uint16_t cid, |
| struct os_mbuf *rxom); |
| void ble_hs_test_util_set_att_mtu(uint16_t conn_handle, uint16_t mtu); |
| int ble_hs_test_util_rx_att_mtu_cmd(uint16_t conn_handle, int is_req, |
| uint16_t mtu); |
| int ble_hs_test_util_rx_att_find_info_req(uint16_t conn_handle, |
| uint16_t start_handle, |
| uint16_t end_handle); |
| int ble_hs_test_util_rx_att_find_type_value_req(uint16_t conn_handle, |
| uint16_t start_handle, |
| uint16_t end_handle, |
| uint16_t attr_type, |
| const void *attr_val, |
| uint16_t attr_len); |
| int ble_hs_test_util_rx_att_read_type_req(uint16_t conn_handle, |
| uint16_t start_handle, |
| uint16_t end_handle, |
| const ble_uuid_t *uuid); |
| int ble_hs_test_util_rx_att_read_type_req16(uint16_t conn_handle, |
| uint16_t start_handle, |
| uint16_t end_handle, |
| uint16_t uuid16); |
| int ble_hs_test_util_rx_att_read_req(uint16_t conn_handle, |
| uint16_t attr_handle); |
| int ble_hs_test_util_rx_att_read_blob_req(uint16_t conn_handle, |
| uint16_t attr_handle, |
| uint16_t offset); |
| int ble_hs_test_util_rx_att_read_mult_req(uint16_t conn_handle, |
| const uint16_t *handles, |
| int num_handles); |
| int ble_hs_test_util_rx_att_read_group_type_req(uint16_t conn_handle, |
| uint16_t start_handle, |
| uint16_t end_handle, |
| const ble_uuid_t *uuid); |
| int ble_hs_test_util_rx_att_read_group_type_req16(uint16_t conn_handle, |
| uint16_t start_handle, |
| uint16_t end_handle, |
| uint16_t uuid16); |
| int ble_hs_test_util_rx_att_write_req(uint16_t conn_handle, |
| uint16_t attr_handle, |
| const void *attr_val, |
| uint16_t attr_len); |
| int ble_hs_test_util_rx_att_write_cmd(uint16_t conn_handle, |
| uint16_t attr_handle, |
| const void *attr_val, |
| uint16_t attr_len); |
| int ble_hs_test_util_rx_att_prep_write_req(uint16_t conn_handle, |
| uint16_t attr_handle, |
| uint16_t offset, |
| const void *attr_val, |
| uint16_t attr_len); |
| int ble_hs_test_util_rx_att_exec_write_req(uint16_t conn_handle, |
| uint8_t flags); |
| int ble_hs_test_util_rx_att_notify_req(uint16_t conn_handle, |
| uint16_t attr_handle, |
| void *attr_val, |
| uint16_t attr_len); |
| int ble_hs_test_util_rx_att_indicate_req(uint16_t conn_handle, |
| uint16_t attr_handle, |
| void *attr_val, |
| uint16_t attr_len); |
| void ble_hs_test_util_rx_att_err_rsp(uint16_t conn_handle, uint8_t req_op, |
| uint8_t error_code, uint16_t err_handle); |
| void ble_hs_test_util_verify_tx_prep_write(uint16_t attr_handle, |
| uint16_t offset, |
| const void *data, int data_len); |
| void ble_hs_test_util_verify_tx_exec_write(uint8_t expected_flags); |
| void ble_hs_test_util_verify_tx_find_type_value(uint16_t start_handle, |
| uint16_t end_handle, |
| uint16_t attr_type, |
| const void *value, |
| uint16_t value_len); |
| void ble_hs_test_util_verify_tx_disc_svc_uuid(const ble_uuid_t *uuid); |
| void ble_hs_test_util_verify_tx_read_rsp(uint8_t *attr_data, int attr_len); |
| void ble_hs_test_util_verify_tx_read_blob_rsp(uint8_t *attr_data, |
| int attr_len); |
| void ble_hs_test_util_verify_tx_write_rsp(void); |
| void ble_hs_test_util_verify_tx_find_info_rsp( |
| struct ble_hs_test_util_att_info_entry *entries); |
| void ble_hs_test_util_verify_tx_mtu_cmd(int is_req, uint16_t mtu); |
| void ble_hs_test_util_verify_tx_read_group_type_rsp( |
| struct ble_hs_test_util_att_group_type_entry *entries); |
| void ble_hs_test_util_verify_tx_err_rsp(uint8_t req_op, uint16_t handle, |
| uint8_t error_code); |
| void ble_hs_test_util_verify_tx_write_cmd(uint16_t handle, const void *data, |
| uint16_t data_len); |
| |
| uint8_t ble_hs_test_util_verify_tx_l2cap_update_req( |
| struct ble_l2cap_sig_update_params *params); |
| int ble_hs_test_util_rx_l2cap_update_rsp(uint16_t conn_handle, |
| uint8_t id, uint16_t result); |
| void ble_hs_test_util_verify_tx_l2cap_update_rsp(uint8_t exp_id, |
| uint16_t exp_result); |
| void ble_hs_test_util_set_static_rnd_addr(const uint8_t *addr); |
| struct os_mbuf *ble_hs_test_util_om_from_flat(const void *buf, uint16_t len); |
| int ble_hs_test_util_flat_attr_cmp(const struct ble_hs_test_util_flat_attr *a, |
| const struct ble_hs_test_util_flat_attr *b); |
| void ble_hs_test_util_attr_to_flat(struct ble_hs_test_util_flat_attr *flat, |
| const struct ble_gatt_attr *attr); |
| void ble_hs_test_util_attr_from_flat( |
| struct ble_gatt_attr *attr, const struct ble_hs_test_util_flat_attr *flat); |
| int ble_hs_test_util_read_local_flat(uint16_t attr_handle, uint16_t max_len, |
| void *buf, uint16_t *out_len); |
| int ble_hs_test_util_write_local_flat(uint16_t attr_handle, |
| const void *buf, uint16_t buf_len); |
| int ble_hs_test_util_gatt_write_flat(uint16_t conn_handle, |
| uint16_t attr_handle, |
| const void *data, uint16_t data_len, |
| ble_gatt_attr_fn *cb, void *cb_arg); |
| int ble_hs_test_util_gatt_write_no_rsp_flat(uint16_t conn_handle, |
| uint16_t attr_handle, |
| const void *data, |
| uint16_t data_len); |
| int ble_hs_test_util_gatt_write_long_flat(uint16_t conn_handle, |
| uint16_t attr_handle, |
| const void *data, uint16_t data_len, |
| ble_gatt_attr_fn *cb, void *cb_arg); |
| struct os_mbuf *ble_hs_test_util_mbuf_alloc_all_but(int count); |
| int ble_hs_test_util_mbuf_count( |
| const struct ble_hs_test_util_mbuf_params *params); |
| void ble_hs_test_util_assert_mbufs_freed( |
| const struct ble_hs_test_util_mbuf_params *params); |
| void ble_hs_test_util_post_test(void *arg); |
| int ble_hs_test_util_num_cccds(void); |
| int ble_hs_test_util_num_our_secs(void); |
| int ble_hs_test_util_num_peer_secs(void); |
| void ble_hs_test_util_reg_svcs(const struct ble_gatt_svc_def *svcs, |
| ble_gatt_register_fn *reg_cb, |
| void *cb_arg); |
| void ble_hs_test_util_init_no_start(void); |
| void ble_hs_test_util_init(void); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif |