/* * 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 #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_no_sysinit_no_start(void); void ble_hs_test_util_init(void); #ifdef __cplusplus } #endif #endif