| /* |
| * Copyright (C) 2014 Intel Corporation |
| * |
| * Licensed 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. |
| * |
| */ |
| |
| #include <stdbool.h> |
| |
| #include "emulator/bthost.h" |
| #include "lib/bluetooth.h" |
| #include "src/shared/util.h" |
| #include "src/shared/tester.h" |
| #include "src/shared/queue.h" |
| #include "tester-main.h" |
| |
| #define ATT_HANDLE_SIZE 2 |
| |
| #define L2CAP_ATT_ERROR 0x01 |
| #define L2CAP_ATT_EXCHANGE_MTU_REQ 0x02 |
| #define L2CAP_ATT_EXCHANGE_MTU_RSP 0x03 |
| #define L2CAP_ATT_FIND_BY_TYPE_REQ 0x06 |
| #define L2CAP_ATT_READ_REQ 0x0a |
| #define L2CAP_ATT_READ_RSP 0x0b |
| #define L2CAP_ATT_WRITE_REQ 0x12 |
| #define L2CAP_ATT_WRITE_RSP 0x13 |
| #define L2CAP_ATT_HANDLE_VALUE_NOTIFY 0x1b |
| #define L2CAP_ATT_HANDLE_VALUE_IND 0x1d |
| |
| #define GATT_STATUS_SUCCESS 0x00000000 |
| #define GATT_STATUS_FAILURE 0x00000101 |
| #define GATT_STATUS_INS_AUTH 0x08 |
| |
| #define GATT_ERR_INVAL_ATTR_VALUE_LEN 0x0D |
| |
| #define GATT_SERVER_DISCONNECTED 0 |
| #define GATT_SERVER_CONNECTED 1 |
| |
| #define APP1_ID 1 |
| #define APP2_ID 2 |
| |
| #define CONN1_ID 1 |
| #define CONN2_ID 2 |
| |
| #define TRANS1_ID 1 |
| |
| #define BT_TRANSPORT_UNKNOWN 0x00 |
| |
| #define GATT_SERVER_TRANSPORT_LE 0x01 |
| #define GATT_SERVER_TRANSPORT_BREDR 0x02 |
| #define GATT_SERVER_TRANSPORT_LE_BREDR (0x01 | 0x02) |
| |
| #define GATT_WRITE_TYPE_NO_RESPONSE 0x01 |
| #define GATT_WRITE_TYPE_DEFAULT 0x02 |
| #define GATT_WRITE_TYPE_PREPARE 0x03 |
| #define GATT_WRITE_TYPE_SIGNED 0x04 |
| |
| #define CHAR_PROP_BROADCAST 0x01 |
| #define CHAR_PROP_READ 0x02 |
| #define CHAR_PROP_WRITE_WITHOUT_RESPONSE 0x04 |
| #define CHAR_PROP_WRITE 0x08 |
| #define CHAR_PROP_NOTIFY 0x10 |
| #define CHAR_PROP_INDICATE 0x20 |
| #define CHAR_PROP_AUTHENTICATED_SIGNED_WRITES 0x40 |
| #define CHAR_PROP_EXTENDED_PROPERTIES 0x80 |
| |
| #define CHAR_PERM_READ 0x0001 |
| #define CHAR_PERM_READ_ENCRYPTED 0x0002 |
| #define CHAR_PERM_READ_ENCRYPTED_MITM 0x0004 |
| #define CHAR_PERM_WRITE 0x0010 |
| #define CHAR_PERM_WRITE_ENCRYPTED 0x0020 |
| #define CHAR_PERM_WRITE_ENCRYPTED_MITM 0x0040 |
| #define CHAR_PERM_WRITE_SIGNED 0x0080 |
| #define CHAR_PERM_WRITE_SIGNED_MITM 0x0100 |
| |
| static struct queue *list; /* List of gatt test cases */ |
| |
| static uint16_t srvc1_handle; |
| static uint16_t inc_srvc1_handle; |
| static uint16_t char1_handle; |
| |
| static struct iovec char1_handle_v = { |
| .iov_base = &char1_handle, |
| .iov_len = sizeof(char1_handle), |
| }; |
| |
| struct set_att_data { |
| char *to; |
| char *from; |
| int len; |
| }; |
| |
| struct att_write_req_data { |
| uint16_t *attr_handle; |
| uint8_t *value; |
| }; |
| |
| static bt_uuid_t app1_uuid = { |
| .uu = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, |
| 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, |
| }; |
| |
| static bt_uuid_t app2_uuid = { |
| .uu = { 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, |
| 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02 }, |
| }; |
| |
| static uint8_t value_1[] = {0x01}; |
| |
| static uint8_t att_write_req_value_1[] = {0x00, 0x01, 0x02, 0x03}; |
| static struct iovec att_write_req_value_1_v = { |
| .iov_base = att_write_req_value_1, |
| .iov_len = sizeof(att_write_req_value_1), |
| }; |
| |
| struct gatt_connect_data { |
| const int app_id; |
| const int conn_id; |
| }; |
| |
| struct gatt_search_service_data { |
| const int conn_id; |
| bt_uuid_t *filter_uuid; |
| }; |
| |
| struct get_char_data { |
| const int conn_id; |
| btgatt_srvc_id_t *service; |
| }; |
| |
| struct get_desc_data { |
| const int conn_id; |
| btgatt_srvc_id_t *service; |
| btgatt_gatt_id_t *characteristic; |
| btgatt_gatt_id_t *desc; |
| }; |
| |
| struct get_incl_data { |
| const int conn_id; |
| btgatt_srvc_id_t *service; |
| btgatt_srvc_id_t *start_service; |
| }; |
| |
| struct read_char_data { |
| const int conn_id; |
| btgatt_srvc_id_t *service; |
| btgatt_gatt_id_t *characteristic; |
| int auth_req; |
| }; |
| |
| struct read_desc_data { |
| const int conn_id; |
| btgatt_srvc_id_t *service; |
| btgatt_gatt_id_t *characteristic; |
| btgatt_gatt_id_t *descriptor; |
| int auth_req; |
| }; |
| |
| struct write_char_data { |
| int conn_id; |
| btgatt_srvc_id_t *service; |
| btgatt_gatt_id_t *characteristic; |
| int write_type; |
| int len; |
| int auth_req; |
| char *p_value; |
| }; |
| |
| struct write_desc_data { |
| int conn_id; |
| btgatt_srvc_id_t *service; |
| btgatt_gatt_id_t *characteristic; |
| btgatt_gatt_id_t *descriptor; |
| int write_type; |
| int len; |
| int auth_req; |
| char *p_value; |
| }; |
| |
| struct notif_data { |
| int conn_id; |
| const bt_bdaddr_t *bdaddr; |
| btgatt_srvc_id_t *service; |
| btgatt_gatt_id_t *charac; |
| }; |
| |
| struct add_service_data { |
| int app_id; |
| btgatt_srvc_id_t *service; |
| int num_handles; |
| }; |
| |
| struct add_included_service_data { |
| int app_id; |
| uint16_t *inc_srvc_handle; |
| uint16_t *srvc_handle; |
| }; |
| struct add_char_data { |
| int app_id; |
| uint16_t *srvc_handle; |
| bt_uuid_t *uuid; |
| int properties; |
| int permissions; |
| }; |
| |
| struct add_desc_data { |
| int app_id; |
| uint16_t *srvc_handle; |
| bt_uuid_t *uuid; |
| int permissions; |
| }; |
| |
| struct start_srvc_data { |
| int app_id; |
| uint16_t *srvc_handle; |
| int transport; |
| }; |
| |
| struct stop_srvc_data { |
| int app_id; |
| uint16_t *srvc_handle; |
| }; |
| |
| struct delete_srvc_data { |
| int app_id; |
| uint16_t *srvc_handle; |
| }; |
| |
| struct send_indication_data { |
| int app_id; |
| uint16_t *attr_handle; |
| int conn_id; |
| int len; |
| int confirm; |
| char *p_value; |
| }; |
| |
| struct send_resp_data { |
| int conn_id; |
| int trans_id; |
| int status; |
| btgatt_response_t *response; |
| }; |
| |
| static bt_bdaddr_t emu_remote_bdaddr_val = { |
| .address = { 0x00, 0xaa, 0x01, 0x01, 0x00, 0x00 }, |
| }; |
| static bt_device_type_t emu_remote_ble_device_type = BT_DEVICE_DEVTYPE_BLE; |
| |
| static bt_property_t prop_emu_remotes_default_set[] = { |
| { BT_PROPERTY_BDADDR, sizeof(emu_remote_bdaddr_val), |
| &emu_remote_bdaddr_val }, |
| }; |
| static bt_property_t prop_emu_remotes_default_le_set[] = { |
| { BT_PROPERTY_BDADDR, sizeof(emu_remote_bdaddr_val), |
| &emu_remote_bdaddr_val }, |
| { BT_PROPERTY_TYPE_OF_DEVICE, sizeof(bt_device_type_t), |
| &emu_remote_ble_device_type }, |
| }; |
| |
| static struct bt_action_data prop_test_remote_ble_bdaddr_req = { |
| .addr = &emu_remote_bdaddr_val, |
| .prop_type = BT_PROPERTY_BDADDR, |
| .prop = &prop_emu_remotes_default_set[0], |
| }; |
| |
| static bt_scan_mode_t setprop_scan_mode_conn_val = |
| BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE; |
| |
| static bt_property_t prop_test_scan_mode_conn = { |
| .type = BT_PROPERTY_ADAPTER_SCAN_MODE, |
| .val = &setprop_scan_mode_conn_val, |
| .len = sizeof(setprop_scan_mode_conn_val), |
| }; |
| |
| static struct emu_l2cap_cid_data cid_data; |
| |
| static struct gatt_connect_data app1_conn_req = { |
| .app_id = APP1_ID, |
| .conn_id = CONN1_ID, |
| }; |
| |
| static struct gatt_connect_data app1_conn2_req = { |
| .app_id = APP1_ID, |
| .conn_id = CONN2_ID, |
| }; |
| |
| static struct gatt_connect_data app2_conn_req = { |
| .app_id = APP2_ID, |
| .conn_id = CONN2_ID, |
| }; |
| |
| static struct gatt_search_service_data search_services_1 = { |
| .conn_id = CONN1_ID, |
| .filter_uuid = NULL, |
| }; |
| |
| static const struct iovec exchange_mtu_req_pdu = raw_pdu(0x02, 0xa0, 0x02); |
| static const struct iovec exchange_mtu_resp_pdu = raw_pdu(0x03, 0xa0, 0x02); |
| |
| static struct bt_action_data bearer_type = { |
| .bearer_type = BDADDR_LE_PUBLIC, |
| }; |
| |
| static btgatt_srvc_id_t service_1 = { |
| .is_primary = true, |
| .id = { |
| .inst_id = 0, |
| .uuid.uu = {0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, |
| 0x00, 0x10, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00} |
| } |
| }; |
| |
| static btgatt_srvc_id_t service_2 = { |
| .is_primary = true, |
| .id = { |
| .inst_id = 1, |
| .uuid.uu = {0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, |
| 0x00, 0x10, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00}, |
| } |
| }; |
| |
| static btgatt_srvc_id_t service_add_1 = { |
| .is_primary = true, |
| .id = { |
| .inst_id = 0, |
| .uuid.uu = {0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, |
| 0x00, 0x10, 0x00, 0x00, 0xFF, 0xEF, 0x00, 0x00}, |
| } |
| }; |
| |
| static btgatt_srvc_id_t service_add_2 = { |
| .is_primary = true, |
| .id = { |
| .inst_id = 1, |
| .uuid.uu = {0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, |
| 0x00, 0x10, 0x00, 0x00, 0xFF, 0xDF, 0x00, 0x00}, |
| } |
| }; |
| |
| static btgatt_srvc_id_t service_add_3 = { |
| .is_primary = true, |
| .id = { |
| .inst_id = 2, |
| .uuid.uu = {0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, |
| 0x00, 0x10, 0x00, 0x00, 0xFF, 0xCF, 0x00, 0x00}, |
| } |
| }; |
| |
| static btgatt_srvc_id_t included_1 = { |
| .is_primary = false, |
| .id = { |
| .inst_id = 1, |
| .uuid.uu = {0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, |
| 0x00, 0x10, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00}, |
| } |
| }; |
| |
| static btgatt_srvc_id_t included_2 = { |
| .is_primary = false, |
| .id = { |
| .inst_id = 1, |
| .uuid.uu = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, |
| 0x08, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10}, |
| } |
| }; |
| |
| static btgatt_gatt_id_t characteristic_1 = { |
| .inst_id = 1, |
| .uuid.uu = {0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, |
| 0x00, 0x10, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00} |
| }; |
| |
| static btgatt_gatt_id_t desc_1 = { |
| .inst_id = 1, |
| .uuid.uu = {0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, |
| 0x00, 0x10, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00} |
| }; |
| |
| static btgatt_gatt_id_t desc_2 = { |
| .inst_id = 2, |
| .uuid.uu = {0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, |
| 0x00, 0x10, 0x00, 0x00, 0x01, 0x29, 0x00, 0x00} |
| }; |
| |
| static btgatt_read_params_t read_params_1; |
| static btgatt_write_params_t write_params_1; |
| static btgatt_notify_params_t notify_params_1; |
| |
| static struct get_char_data get_char_data_1 = { |
| .conn_id = CONN1_ID, |
| .service = &service_1 |
| }; |
| |
| static struct get_char_data get_char_data_2 = { |
| .conn_id = CONN1_ID, |
| .service = &service_2 |
| }; |
| |
| static struct get_desc_data get_desc_data_1 = { |
| .conn_id = CONN1_ID, |
| .service = &service_1, |
| .characteristic = &characteristic_1, |
| }; |
| |
| static struct get_desc_data get_desc_data_2 = { |
| .conn_id = CONN1_ID, |
| .service = &service_1, |
| .characteristic = &characteristic_1, |
| .desc = &desc_1, |
| }; |
| |
| static struct read_char_data read_char_data_1 = { |
| .conn_id = CONN1_ID, |
| .service = &service_1, |
| .characteristic = &characteristic_1, |
| }; |
| |
| static struct read_char_data read_char_data_2 = { |
| .conn_id = CONN1_ID, |
| .service = &service_2, |
| .characteristic = &characteristic_1, |
| }; |
| |
| static struct read_desc_data read_desc_data_1 = { |
| .conn_id = CONN1_ID, |
| .service = &service_1, |
| .characteristic = &characteristic_1, |
| .descriptor = &desc_1, |
| }; |
| |
| static struct read_desc_data read_desc_data_2 = { |
| .conn_id = CONN1_ID, |
| .service = &service_1, |
| .characteristic = &characteristic_1, |
| .descriptor = &desc_2, |
| }; |
| |
| static struct get_incl_data get_incl_data_1 = { |
| .conn_id = CONN1_ID, |
| .service = &service_1 |
| }; |
| |
| static char value_2[] = {0x00, 0x01, 0x02, 0x03}; |
| |
| static struct write_char_data write_char_data_1 = { |
| .conn_id = CONN1_ID, |
| .service = &service_1, |
| .characteristic = &characteristic_1, |
| .write_type = GATT_WRITE_TYPE_NO_RESPONSE, |
| .len = sizeof(value_2), |
| .p_value = value_2, |
| .auth_req = 0 |
| }; |
| |
| static struct write_char_data write_char_data_2 = { |
| .conn_id = CONN1_ID, |
| .service = &service_1, |
| .characteristic = &characteristic_1, |
| .write_type = GATT_WRITE_TYPE_DEFAULT, |
| .len = sizeof(value_2), |
| .p_value = value_2, |
| .auth_req = 0 |
| }; |
| |
| static struct write_desc_data write_desc_data_1 = { |
| .conn_id = CONN1_ID, |
| .service = &service_1, |
| .characteristic = &characteristic_1, |
| .descriptor = &desc_1, |
| .write_type = 2, |
| .len = sizeof(value_2), |
| .auth_req = 0, |
| .p_value = value_2, |
| }; |
| |
| static struct write_desc_data write_desc_data_2 = { |
| .conn_id = CONN1_ID, |
| .service = &service_1, |
| .characteristic = &characteristic_1, |
| .descriptor = &desc_2, |
| .write_type = 2, |
| .len = sizeof(value_2), |
| .auth_req = 0, |
| .p_value = value_2, |
| }; |
| |
| static struct notif_data notif_data_1 = { |
| .conn_id = CONN1_ID, |
| .service = &service_1, |
| .charac = &characteristic_1, |
| .bdaddr = &emu_remote_bdaddr_val, |
| }; |
| |
| static struct add_service_data add_service_data_1 = { |
| .app_id = APP1_ID, |
| .service = &service_add_1, |
| .num_handles = 1 |
| }; |
| |
| static struct add_service_data add_service_data_2 = { |
| .app_id = APP1_ID, |
| .service = &service_add_2, |
| .num_handles = 1 |
| }; |
| |
| static struct add_service_data add_service_data_3 = { |
| .app_id = APP1_ID, |
| .service = &service_add_3, |
| .num_handles = 1 |
| }; |
| |
| static struct add_service_data add_service_data_4 = { |
| .app_id = APP1_ID, |
| .service = &service_add_1, |
| .num_handles = 2 |
| }; |
| |
| static struct add_service_data add_service_data_5 = { |
| .app_id = APP1_ID, |
| .service = &service_add_1, |
| .num_handles = 3 |
| }; |
| |
| static struct add_service_data add_service_data_6 = { |
| .app_id = APP1_ID, |
| .service = &service_add_1, |
| .num_handles = 4 |
| }; |
| |
| static struct add_service_data add_bad_service_data_1 = { |
| .app_id = APP1_ID, |
| .service = &service_add_1, |
| .num_handles = 0 |
| }; |
| |
| static struct add_service_data add_sec_service_data_1 = { |
| .app_id = APP1_ID, |
| .service = &included_1, |
| .num_handles = 1 |
| }; |
| |
| static uint16_t srvc_bad_handle = 0xffff; |
| |
| static struct add_included_service_data add_inc_service_data_1 = { |
| .app_id = APP1_ID, |
| .inc_srvc_handle = &inc_srvc1_handle, |
| .srvc_handle = &srvc1_handle |
| }; |
| |
| static struct add_included_service_data add_bad_inc_service_data_1 = { |
| .app_id = APP1_ID, |
| .inc_srvc_handle = &srvc_bad_handle, |
| .srvc_handle = &srvc1_handle |
| }; |
| |
| static struct add_char_data add_char_data_1 = { |
| .app_id = APP1_ID, |
| .srvc_handle = &srvc1_handle, |
| .uuid = &app1_uuid, |
| .properties = 0, |
| .permissions = 0 |
| }; |
| |
| static struct add_char_data add_char_data_2 = { |
| .app_id = APP1_ID, |
| .srvc_handle = &srvc1_handle, |
| .uuid = &app1_uuid, |
| .properties = CHAR_PROP_WRITE, |
| .permissions = CHAR_PERM_WRITE |
| }; |
| |
| static struct add_char_data add_bad_char_data_1 = { |
| .app_id = APP1_ID, |
| .srvc_handle = &srvc_bad_handle, |
| .uuid = &app1_uuid, |
| .properties = 0, |
| .permissions = 0 |
| }; |
| |
| static struct add_desc_data add_bad_desc_data_1 = { |
| .app_id = APP1_ID, |
| .srvc_handle = &srvc_bad_handle, |
| .uuid = &app2_uuid, |
| .permissions = 0 |
| }; |
| |
| static struct add_desc_data add_bad_desc_data_2 = { |
| .app_id = APP2_ID, |
| .srvc_handle = &srvc1_handle, |
| .uuid = &app2_uuid, |
| .permissions = 0 |
| }; |
| |
| static struct add_desc_data add_desc_data_1 = { |
| .app_id = APP1_ID, |
| .srvc_handle = &srvc1_handle, |
| .uuid = &app2_uuid, |
| .permissions = 0 |
| }; |
| |
| static struct start_srvc_data start_srvc_data_1 = { |
| .app_id = APP1_ID, |
| .srvc_handle = &srvc1_handle, |
| .transport = GATT_SERVER_TRANSPORT_LE_BREDR |
| }; |
| |
| static struct start_srvc_data start_srvc_data_2 = { |
| .app_id = APP1_ID, |
| .srvc_handle = &srvc1_handle, |
| .transport = GATT_SERVER_TRANSPORT_LE |
| }; |
| |
| static struct start_srvc_data start_bad_srvc_data_1 = { |
| .app_id = APP1_ID, |
| .srvc_handle = &srvc_bad_handle, |
| .transport = GATT_SERVER_TRANSPORT_LE |
| }; |
| |
| static struct start_srvc_data start_bad_srvc_data_2 = { |
| .app_id = APP1_ID, |
| .srvc_handle = &srvc1_handle, |
| .transport = 0 |
| }; |
| |
| static struct stop_srvc_data stop_srvc_data_1 = { |
| .app_id = APP1_ID, |
| .srvc_handle = &srvc1_handle |
| }; |
| |
| static struct stop_srvc_data stop_bad_srvc_data_1 = { |
| .app_id = APP1_ID, |
| .srvc_handle = &srvc_bad_handle |
| }; |
| |
| static struct delete_srvc_data delete_srvc_data_1 = { |
| .app_id = APP1_ID, |
| .srvc_handle = &srvc1_handle |
| }; |
| |
| static struct delete_srvc_data delete_bad_srvc_data_1 = { |
| .app_id = APP1_ID, |
| .srvc_handle = &srvc_bad_handle |
| }; |
| |
| static uint16_t srvc_indication_handle_1 = 0x01; |
| |
| static struct send_indication_data send_indication_data_1 = { |
| .app_id = APP1_ID, |
| .attr_handle = &srvc_indication_handle_1, |
| .conn_id = CONN1_ID, |
| .len = sizeof(value_2), |
| .p_value = value_2, |
| .confirm = 1 |
| }; |
| |
| static struct send_indication_data send_indication_data_2 = { |
| .app_id = APP1_ID, |
| .attr_handle = &srvc_indication_handle_1, |
| .conn_id = CONN1_ID, |
| .len = sizeof(value_2), |
| .p_value = value_2, |
| .confirm = 0 |
| }; |
| |
| static struct send_indication_data send_bad_indication_data_1 = { |
| .app_id = APP1_ID, |
| .attr_handle = &srvc_indication_handle_1, |
| .conn_id = CONN2_ID, |
| .len = sizeof(value_2), |
| .p_value = value_2, |
| .confirm = 0 |
| }; |
| |
| struct set_read_params { |
| btgatt_read_params_t *params; |
| btgatt_srvc_id_t *srvc_id; |
| btgatt_gatt_id_t *char_id; |
| btgatt_gatt_id_t *descr_id; |
| uint8_t *value; |
| uint16_t len; |
| uint16_t value_type; |
| uint8_t status; |
| }; |
| |
| struct set_write_params { |
| btgatt_write_params_t *params; |
| btgatt_srvc_id_t *srvc_id; |
| btgatt_gatt_id_t *char_id; |
| btgatt_gatt_id_t *descr_id; |
| uint8_t status; |
| }; |
| |
| struct set_notify_params { |
| btgatt_notify_params_t *params; |
| uint8_t *value; |
| uint16_t len; |
| uint8_t is_notify; |
| btgatt_srvc_id_t *srvc_id; |
| btgatt_gatt_id_t *char_id; |
| bt_bdaddr_t *bdaddr; |
| }; |
| |
| static struct set_read_params set_read_param_1 = { |
| .params = &read_params_1, |
| .srvc_id = &service_1, |
| .char_id = &characteristic_1, |
| .value = value_1, |
| .len = sizeof(value_1), |
| .status = BT_STATUS_SUCCESS |
| }; |
| |
| static struct set_read_params set_read_param_2 = { |
| .params = &read_params_1, |
| .srvc_id = &service_1, |
| .char_id = &characteristic_1, |
| .status = GATT_STATUS_INS_AUTH |
| }; |
| |
| static struct set_read_params set_read_param_3 = { |
| .params = &read_params_1, |
| .srvc_id = &service_2, |
| .char_id = &characteristic_1, |
| .status = BT_STATUS_FAIL |
| }; |
| |
| static struct set_read_params set_read_param_4 = { |
| .params = &read_params_1, |
| .srvc_id = &service_1, |
| .char_id = &characteristic_1, |
| .descr_id = &desc_1, |
| .value = value_1, |
| .len = sizeof(value_1), |
| .status = BT_STATUS_SUCCESS |
| }; |
| |
| static struct set_read_params set_read_param_5 = { |
| .params = &read_params_1, |
| .srvc_id = &service_1, |
| .char_id = &characteristic_1, |
| .descr_id = &desc_1, |
| .status = GATT_STATUS_INS_AUTH |
| }; |
| |
| static struct set_read_params set_read_param_6 = { |
| .params = &read_params_1, |
| .srvc_id = &service_1, |
| .char_id = &characteristic_1, |
| .descr_id = &desc_2, |
| .status = BT_STATUS_FAIL |
| }; |
| |
| static struct set_write_params set_write_param_1 = { |
| .params = &write_params_1, |
| .srvc_id = &service_1, |
| .char_id = &characteristic_1, |
| .status = BT_STATUS_SUCCESS |
| }; |
| |
| static struct set_write_params set_write_param_2 = { |
| .params = &write_params_1, |
| .srvc_id = &service_1, |
| .char_id = &characteristic_1, |
| .status = GATT_STATUS_INS_AUTH |
| }; |
| |
| static struct set_write_params set_write_param_3 = { |
| .params = &write_params_1, |
| .srvc_id = &service_1, |
| .char_id = &characteristic_1, |
| .status = BT_STATUS_FAIL |
| }; |
| |
| static struct set_write_params set_write_param_4 = { |
| .params = &write_params_1, |
| .srvc_id = &service_1, |
| .char_id = &characteristic_1, |
| .descr_id = &desc_1, |
| .status = BT_STATUS_SUCCESS |
| }; |
| |
| static struct set_write_params set_write_param_5 = { |
| .params = &write_params_1, |
| .srvc_id = &service_1, |
| .char_id = &characteristic_1, |
| .descr_id = &desc_2, |
| .status = BT_STATUS_FAIL |
| }; |
| |
| static struct set_write_params set_write_param_6 = { |
| .params = &write_params_1, |
| .srvc_id = &service_1, |
| .char_id = &characteristic_1, |
| .descr_id = &desc_1, |
| .status = GATT_STATUS_INS_AUTH |
| }; |
| |
| static struct set_notify_params set_notify_param_1 = { |
| .params = ¬ify_params_1, |
| .value = value_1, |
| .len = sizeof(value_1), |
| .is_notify = 0, |
| .srvc_id = &service_1, |
| .char_id = &characteristic_1, |
| .bdaddr = &emu_remote_bdaddr_val |
| }; |
| |
| static struct set_notify_params set_notify_param_2 = { |
| .params = ¬ify_params_1, |
| .value = value_1, |
| .len = sizeof(value_1), |
| .is_notify = 1, |
| .srvc_id = &service_1, |
| .char_id = &characteristic_1, |
| .bdaddr = &emu_remote_bdaddr_val |
| }; |
| |
| static btgatt_response_t response_1 = { |
| .handle = 0x1c, |
| .attr_value.auth_req = 0, |
| .attr_value.handle = 0x1d, |
| .attr_value.len = 0, |
| .attr_value.offset = 0, |
| }; |
| |
| static btgatt_response_t response_2 = { |
| .handle = 0x1c, |
| .attr_value.auth_req = 0, |
| .attr_value.handle = 0x1d, |
| .attr_value.len = sizeof(att_write_req_value_1), |
| .attr_value.offset = 0, |
| }; |
| |
| static struct send_resp_data send_resp_data_1 = { |
| .conn_id = CONN1_ID, |
| .trans_id = TRANS1_ID, |
| .status = BT_STATUS_SUCCESS, |
| .response = &response_1, |
| }; |
| |
| static struct send_resp_data send_resp_data_2 = { |
| .conn_id = CONN1_ID, |
| .trans_id = TRANS1_ID, |
| .status = BT_STATUS_SUCCESS, |
| .response = &response_2, |
| }; |
| |
| static struct send_resp_data send_resp_data_2_error = { |
| .conn_id = CONN1_ID, |
| .trans_id = TRANS1_ID, |
| .status = GATT_ERR_INVAL_ATTR_VALUE_LEN, |
| .response = &response_2, |
| }; |
| |
| #define SEARCH_SERVICE_SINGLE_SUCCESS_PDUS \ |
| raw_pdu(0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28), \ |
| raw_pdu(0x11, 0x06, 0x01, 0x00, 0x10, 0x00, 0x00, 0x18), \ |
| raw_pdu(0x10, 0x11, 0x00, 0xff, 0xff, 0x00, 0x28), \ |
| raw_pdu(0x01, 0x10, 0x11, 0x00, 0x0a) |
| |
| #define READ_BY_TYPE_SINGLE_CHARACTERISTIC_PDUS \ |
| raw_pdu(0x08, 0x01, 0x00, 0x10, 0x00, 0x03, 0x28), \ |
| raw_pdu(0x09, 0x07, 0x02, 0x00, 0x04, 0x00, 0x00, 0x19, 0x00), \ |
| raw_pdu(0x08, 0x03, 0x00, 0x10, 0x00, 0x03, 0x28), \ |
| raw_pdu(0x01, 0x08, 0x03, 0x00, 0x0a) |
| |
| static struct iovec search_service[] = { |
| SEARCH_SERVICE_SINGLE_SUCCESS_PDUS, |
| end_pdu |
| }; |
| |
| static struct iovec search_service_2[] = { |
| raw_pdu(0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28), |
| raw_pdu(0x11, 0x06, 0x01, 0x00, 0x10, 0x00, 0x00, 0x18), |
| raw_pdu(0x10, 0x11, 0x00, 0xff, 0xff, 0x00, 0x28), |
| raw_pdu(0x11, 0x06, 0x11, 0x00, 0x20, 0x00, 0x01, 0x18), |
| raw_pdu(0x10, 0x21, 0x00, 0xff, 0xff, 0x00, 0x28), |
| raw_pdu(0x01, 0x10, 0x21, 0x00, 0x0a), |
| end_pdu |
| }; |
| |
| static struct iovec search_service_3[] = { |
| raw_pdu(0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28), |
| raw_pdu(0x01, 0x08, 0x01, 0x00, 0x0a), |
| end_pdu |
| }; |
| |
| static struct iovec search_service_4[] = { |
| raw_pdu(0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28), |
| raw_pdu(0x11, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x18), |
| end_pdu |
| }; |
| |
| static struct iovec get_characteristic_1[] = { |
| SEARCH_SERVICE_SINGLE_SUCCESS_PDUS, |
| READ_BY_TYPE_SINGLE_CHARACTERISTIC_PDUS, |
| end_pdu |
| }; |
| |
| static struct iovec get_characteristic_2[] = { |
| SEARCH_SERVICE_SINGLE_SUCCESS_PDUS, |
| raw_pdu(0x08, 0x01, 0x00, 0x10, 0x00, 0x03, 0x28), |
| raw_pdu(0x09, 0x07, 0x00, 0x00, 0x04, 0x00, 0x00, 0x19, 0x00), |
| end_pdu |
| }; |
| |
| static struct iovec get_descriptor_0[] = { |
| SEARCH_SERVICE_SINGLE_SUCCESS_PDUS, |
| READ_BY_TYPE_SINGLE_CHARACTERISTIC_PDUS, |
| raw_pdu(0x04, 0x01, 0x00, 0x10, 0x00), |
| raw_pdu(0x05, 0x01, 0x00, 0x00, 0x00, 0x29), |
| end_pdu |
| }; |
| |
| static struct iovec get_descriptor_1[] = { |
| SEARCH_SERVICE_SINGLE_SUCCESS_PDUS, |
| READ_BY_TYPE_SINGLE_CHARACTERISTIC_PDUS, |
| raw_pdu(0x04, 0x01, 0x00, 0x10, 0x00), |
| raw_pdu(0x05, 0x01, 0x04, 0x00, 0x00, 0x29), |
| raw_pdu(0x04, 0x05, 0x00, 0x10, 0x00), |
| raw_pdu(0x01, 0x04, 0x05, 0x00, 0x0a), |
| end_pdu |
| }; |
| |
| static struct iovec get_descriptor_2[] = { |
| SEARCH_SERVICE_SINGLE_SUCCESS_PDUS, |
| READ_BY_TYPE_SINGLE_CHARACTERISTIC_PDUS, |
| raw_pdu(0x04, 0x01, 0x00, 0x10, 0x00), |
| raw_pdu(0x05, 0x01, 0x04, 0x00, 0x00, 0x29, 0x05, 0x00, 0x01, 0x29), |
| raw_pdu(0x04, 0x06, 0x00, 0x10, 0x00), |
| raw_pdu(0x01, 0x04, 0x06, 0x00, 0x0a), |
| end_pdu |
| }; |
| |
| static struct iovec get_descriptor_3[] = { |
| SEARCH_SERVICE_SINGLE_SUCCESS_PDUS, |
| READ_BY_TYPE_SINGLE_CHARACTERISTIC_PDUS, |
| raw_pdu(0x04, 0x01, 0x00, 0x10, 0x00), |
| raw_pdu(0x01, 0x04, 0x01, 0x00, 0x0a), |
| end_pdu |
| }; |
| |
| static struct iovec get_included_0[] = { |
| SEARCH_SERVICE_SINGLE_SUCCESS_PDUS, |
| raw_pdu(0x08, 0x01, 0x00, 0x10, 0x00, 0x02, 0x28), |
| raw_pdu(0x09, 0x08, 0x00, 0x00, 0x15, 0x00, 0x19, 0x00, 0xff, 0xfe), |
| end_pdu |
| }; |
| |
| static struct iovec get_included_1[] = { |
| SEARCH_SERVICE_SINGLE_SUCCESS_PDUS, |
| raw_pdu(0x08, 0x01, 0x00, 0x10, 0x00, 0x02, 0x28), |
| raw_pdu(0x09, 0x08, 0x02, 0x00, 0x15, 0x00, 0x19, 0x00, 0xff, 0xfe), |
| raw_pdu(0x08, 0x03, 0x00, 0x10, 0x00, 0x02, 0x28), |
| raw_pdu(0x01, 0x08, 0x03, 0x00, 0x0a), |
| end_pdu |
| }; |
| |
| static struct iovec get_included_2[] = { |
| SEARCH_SERVICE_SINGLE_SUCCESS_PDUS, |
| raw_pdu(0x08, 0x01, 0x00, 0x10, 0x00, 0x02, 0x28), |
| raw_pdu(0x09, 0x06, 0x02, 0x00, 0x15, 0x00, 0x19, 0x00), |
| raw_pdu(0x0a, 0x15, 0x00), |
| raw_pdu(0x0b, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, |
| 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10), |
| raw_pdu(0x08, 0x03, 0x00, 0x10, 0x00, 0x02, 0x28), |
| raw_pdu(0x01, 0x08, 0x03, 0x00, 0x0a), |
| end_pdu |
| }; |
| |
| static struct iovec get_included_3[] = { |
| SEARCH_SERVICE_SINGLE_SUCCESS_PDUS, |
| raw_pdu(0x08, 0x01, 0x00, 0x10, 0x00, 0x02, 0x28), |
| raw_pdu(0x01, 0x08, 0x01, 0x00, 0x0a), |
| end_pdu |
| }; |
| |
| static struct iovec read_characteristic_1[] = { |
| SEARCH_SERVICE_SINGLE_SUCCESS_PDUS, |
| raw_pdu(0x08, 0x01, 0x00, 0x10, 0x00, 0x03, 0x28), |
| raw_pdu(0x09, 0x07, 0x02, 0x00, 0x04, 0x03, 0x00, 0x19, 0x00), |
| raw_pdu(0x08, 0x03, 0x00, 0x10, 0x00, 0x03, 0x28), |
| raw_pdu(0x01, 0x08, 0x03, 0x00, 0x0a), |
| raw_pdu(0x0a, 0x03, 0x00), |
| raw_pdu(0x0b, 0x01), |
| end_pdu |
| }; |
| |
| static struct iovec read_characteristic_2[] = { |
| SEARCH_SERVICE_SINGLE_SUCCESS_PDUS, |
| raw_pdu(0x08, 0x01, 0x00, 0x10, 0x00, 0x03, 0x28), |
| raw_pdu(0x09, 0x07, 0x02, 0x00, 0x04, 0x03, 0x00, 0x19, 0x00), |
| raw_pdu(0x08, 0x03, 0x00, 0x10, 0x00, 0x03, 0x28), |
| raw_pdu(0x01, 0x08, 0x03, 0x00, 0x0a), |
| raw_pdu(0x0a, 0x03, 0x00), |
| raw_pdu(0x01, 0x0a, 0x03, 0x00, 0x08), |
| end_pdu |
| }; |
| |
| static struct iovec read_descriptor_1[] = { |
| SEARCH_SERVICE_SINGLE_SUCCESS_PDUS, |
| READ_BY_TYPE_SINGLE_CHARACTERISTIC_PDUS, |
| raw_pdu(0x04, 0x01, 0x00, 0x10, 0x00), |
| raw_pdu(0x05, 0x01, 0x04, 0x00, 0x00, 0x29), |
| raw_pdu(0x04, 0x05, 0x00, 0x10, 0x00), |
| raw_pdu(0x01, 0x04, 0x05, 0x00, 0x0a), |
| raw_pdu(0x0a, 0x04, 0x00), |
| raw_pdu(0x0b, 0x01), |
| end_pdu |
| }; |
| |
| static struct iovec read_descriptor_2[] = { |
| SEARCH_SERVICE_SINGLE_SUCCESS_PDUS, |
| READ_BY_TYPE_SINGLE_CHARACTERISTIC_PDUS, |
| raw_pdu(0x04, 0x01, 0x00, 0x10, 0x00), |
| raw_pdu(0x05, 0x01, 0x04, 0x00, 0x00, 0x29), |
| raw_pdu(0x04, 0x05, 0x00, 0x10, 0x00), |
| raw_pdu(0x01, 0x04, 0x05, 0x00, 0x0a), |
| raw_pdu(0x0a, 0x04, 0x00), |
| raw_pdu(0x01, 0x0a, 0x04, 0x00, 0x08), |
| end_pdu |
| }; |
| |
| static struct iovec write_characteristic_1[] = { |
| SEARCH_SERVICE_SINGLE_SUCCESS_PDUS, |
| raw_pdu(0x08, 0x01, 0x00, 0x10, 0x00, 0x03, 0x28), |
| raw_pdu(0x09, 0x07, 0x02, 0x00, 0x04, 0x03, 0x00, 0x19, 0x00), |
| raw_pdu(0x08, 0x03, 0x00, 0x10, 0x00, 0x03, 0x28), |
| raw_pdu(0x01, 0x08, 0x03, 0x00, 0x0a), |
| raw_pdu(0x52, 0x03, 0x00, 0x00, 0x01, 0x02, 0x03), |
| end_pdu |
| }; |
| |
| static struct iovec write_characteristic_2[] = { |
| SEARCH_SERVICE_SINGLE_SUCCESS_PDUS, |
| raw_pdu(0x08, 0x01, 0x00, 0x10, 0x00, 0x03, 0x28), |
| raw_pdu(0x09, 0x07, 0x02, 0x00, 0x04, 0x03, 0x00, 0x19, 0x00), |
| raw_pdu(0x08, 0x03, 0x00, 0x10, 0x00, 0x03, 0x28), |
| raw_pdu(0x01, 0x08, 0x03, 0x00, 0x0a), |
| raw_pdu(0x12, 0x03, 0x00, 0x00, 0x01, 0x02, 0x03), |
| raw_pdu(0x13), |
| end_pdu |
| }; |
| |
| static struct iovec write_characteristic_3[] = { |
| SEARCH_SERVICE_SINGLE_SUCCESS_PDUS, |
| raw_pdu(0x08, 0x01, 0x00, 0x10, 0x00, 0x03, 0x28), |
| raw_pdu(0x09, 0x07, 0x02, 0x00, 0x04, 0x03, 0x00, 0x19, 0x00), |
| raw_pdu(0x08, 0x03, 0x00, 0x10, 0x00, 0x03, 0x28), |
| raw_pdu(0x01, 0x08, 0x03, 0x00, 0x0a), |
| raw_pdu(0x12, 0x03, 0x00, 0x00, 0x01, 0x02, 0x03), |
| raw_pdu(0x01, 0x12, 0x03, 0x00, 0x08), |
| end_pdu |
| }; |
| |
| static struct iovec write_descriptor_1[] = { |
| SEARCH_SERVICE_SINGLE_SUCCESS_PDUS, |
| READ_BY_TYPE_SINGLE_CHARACTERISTIC_PDUS, |
| raw_pdu(0x04, 0x01, 0x00, 0x10, 0x00), |
| raw_pdu(0x05, 0x01, 0x04, 0x00, 0x00, 0x29), |
| raw_pdu(0x04, 0x05, 0x00, 0x10, 0x00), |
| raw_pdu(0x01, 0x04, 0x05, 0x00, 0x0a), |
| raw_pdu(0x12, 0x04, 0x00, 0x00, 0x01, 0x02, 0x03), |
| raw_pdu(0x13), |
| end_pdu |
| }; |
| |
| static struct iovec write_descriptor_2[] = { |
| SEARCH_SERVICE_SINGLE_SUCCESS_PDUS, |
| READ_BY_TYPE_SINGLE_CHARACTERISTIC_PDUS, |
| raw_pdu(0x04, 0x01, 0x00, 0x10, 0x00), |
| raw_pdu(0x05, 0x01, 0x04, 0x00, 0x00, 0x29), |
| raw_pdu(0x04, 0x05, 0x00, 0x10, 0x00), |
| raw_pdu(0x01, 0x04, 0x05, 0x00, 0x0a), |
| raw_pdu(0x12, 0x04, 0x00, 0x00, 0x01, 0x02, 0x03), |
| raw_pdu(0x01, 0x12, 0x04, 0x00, 0x08), |
| end_pdu |
| }; |
| |
| static struct iovec notification_1[] = { |
| SEARCH_SERVICE_SINGLE_SUCCESS_PDUS, |
| READ_BY_TYPE_SINGLE_CHARACTERISTIC_PDUS, |
| end_pdu |
| }; |
| |
| static struct iovec notification_2[] = { |
| SEARCH_SERVICE_SINGLE_SUCCESS_PDUS, |
| READ_BY_TYPE_SINGLE_CHARACTERISTIC_PDUS, |
| raw_pdu(0x1d, 0x03, 0x00, 0x01), |
| raw_pdu(0x1e), |
| end_pdu |
| }; |
| |
| static struct iovec notification_3[] = { |
| SEARCH_SERVICE_SINGLE_SUCCESS_PDUS, |
| READ_BY_TYPE_SINGLE_CHARACTERISTIC_PDUS, |
| raw_pdu(0x1b, 0x03, 0x00, 0x01), |
| end_pdu |
| }; |
| |
| static struct iovec send_indication_1[] = { |
| raw_pdu(0x1d, 0x01, 0x00, 0x00, 0x01, 0x02, 0x03), |
| raw_pdu(0x1e), |
| end_pdu |
| }; |
| |
| static struct iovec send_notification_1[] = { |
| raw_pdu(0x1b, 0x01, 0x00, 0x00, 0x01, 0x02, 0x03), |
| end_pdu |
| }; |
| |
| static struct iovec search_range_1[] = { |
| raw_pdu(0x01, 0xff, 0xff, 0xff), |
| end_pdu |
| }; |
| |
| static struct iovec primary_type = raw_pdu(0x00, 0x28); |
| |
| /* att commands define raw pdus */ |
| static struct iovec att_read_req_op_v = raw_pdu(L2CAP_ATT_READ_REQ); |
| static struct iovec att_write_req_op_v = raw_pdu(L2CAP_ATT_WRITE_REQ); |
| static struct iovec att_find_by_type_req_op_v = |
| raw_pdu(L2CAP_ATT_FIND_BY_TYPE_REQ); |
| |
| static struct iovec svc_change_ccc_handle_v = raw_pdu(0x1c, 0x00); |
| static struct iovec svc_change_ccc_value_v = raw_pdu(0x00, 0x01); |
| |
| static void gatt_client_register_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| bt_uuid_t *app_uuid = current_data_step->set_data; |
| struct step *step = g_new0(struct step, 1); |
| |
| if (!app_uuid) { |
| tester_warn("No app uuid provided for register action."); |
| return; |
| } |
| |
| step->action_status = data->if_gatt->client->register_client(app_uuid); |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_client_unregister_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| int32_t cl_id = PTR_TO_INT(current_data_step->set_data); |
| struct step *step = g_new0(struct step, 1); |
| |
| step->action_status = data->if_gatt->client->unregister_client(cl_id); |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_client_start_scan_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *step = g_new0(struct step, 1); |
| |
| step->action_status = data->if_gatt->client->scan(TRUE); |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_client_stop_scan_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *step = g_new0(struct step, 1); |
| |
| step->action_status = data->if_gatt->client->scan(FALSE); |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_client_connect_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct gatt_connect_data *conn_data = current_data_step->set_data; |
| struct step *step = g_new0(struct step, 1); |
| |
| step->action_status = data->if_gatt->client->connect( |
| conn_data->app_id, |
| &emu_remote_bdaddr_val, 0, |
| BT_TRANSPORT_UNKNOWN); |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_client_disconnect_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct gatt_connect_data *conn_data = current_data_step->set_data; |
| struct step *step = g_new0(struct step, 1); |
| |
| step->action_status = data->if_gatt->client->disconnect( |
| conn_data->app_id, |
| &emu_remote_bdaddr_val, |
| conn_data->conn_id); |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_client_do_listen_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct gatt_connect_data *conn_data = current_data_step->set_data; |
| struct step *step = g_new0(struct step, 1); |
| |
| step->action_status = data->if_gatt->client->listen( |
| conn_data->app_id, |
| 1); |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_client_stop_listen_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct gatt_connect_data *conn_data = current_data_step->set_data; |
| struct step *step = g_new0(struct step, 1); |
| |
| step->action_status = data->if_gatt->client->listen( |
| conn_data->app_id, |
| 0); |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_client_get_characteristic_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct get_char_data *get_char = current_data_step->set_data; |
| const btgatt_client_interface_t *client = data->if_gatt->client; |
| struct step *step = g_new0(struct step, 1); |
| int status; |
| |
| status = client->get_characteristic(get_char->conn_id, |
| get_char->service, NULL); |
| step->action_status = status; |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_client_get_descriptor_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct get_desc_data *get_desc = current_data_step->set_data; |
| const btgatt_client_interface_t *client = data->if_gatt->client; |
| struct step *step = g_new0(struct step, 1); |
| int status; |
| |
| status = client->get_descriptor(get_desc->conn_id, get_desc->service, |
| get_desc->characteristic, |
| get_desc->desc); |
| step->action_status = status; |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_client_get_included_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct get_incl_data *get_incl = current_data_step->set_data; |
| const btgatt_client_interface_t *client = data->if_gatt->client; |
| struct step *step = g_new0(struct step, 1); |
| int status; |
| |
| status = client->get_included_service(get_incl->conn_id, |
| get_incl->service, get_incl->start_service); |
| |
| step->action_status = status; |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_client_read_characteristic_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct read_char_data *read_char_data = current_data_step->set_data; |
| const btgatt_client_interface_t *client = data->if_gatt->client; |
| struct step *step = g_new0(struct step, 1); |
| int status; |
| |
| status = client->read_characteristic(read_char_data->conn_id, |
| read_char_data->service, read_char_data->characteristic, |
| read_char_data->auth_req); |
| |
| step->action_status = status; |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_client_read_descriptor_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct read_desc_data *read_desc_data = current_data_step->set_data; |
| const btgatt_client_interface_t *client = data->if_gatt->client; |
| struct step *step = g_new0(struct step, 1); |
| int status; |
| |
| status = client->read_descriptor(read_desc_data->conn_id, |
| read_desc_data->service, read_desc_data->characteristic, |
| read_desc_data->descriptor, |
| read_desc_data->auth_req); |
| |
| step->action_status = status; |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_client_write_characteristic_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct write_char_data *write_char_data = current_data_step->set_data; |
| const btgatt_client_interface_t *client = data->if_gatt->client; |
| struct step *step = g_new0(struct step, 1); |
| int status; |
| |
| status = client->write_characteristic(write_char_data->conn_id, |
| write_char_data->service, |
| write_char_data->characteristic, |
| write_char_data->write_type, |
| write_char_data->len, |
| write_char_data->auth_req, |
| write_char_data->p_value); |
| |
| step->action_status = status; |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_client_register_for_notification_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct notif_data *notif_data = current_data_step->set_data; |
| const btgatt_client_interface_t *client = data->if_gatt->client; |
| struct step *step = g_new0(struct step, 1); |
| int status; |
| |
| status = client->register_for_notification(notif_data->conn_id, |
| notif_data->bdaddr, |
| notif_data->service, |
| notif_data->charac); |
| step->action_status = status; |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_client_deregister_for_notification_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct notif_data *notif_data = current_data_step->set_data; |
| const btgatt_client_interface_t *client = data->if_gatt->client; |
| struct step *step = g_new0(struct step, 1); |
| int status; |
| |
| status = client->deregister_for_notification(notif_data->conn_id, |
| notif_data->bdaddr, |
| notif_data->service, |
| notif_data->charac); |
| step->action_status = status; |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_server_register_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| bt_uuid_t *app_uuid = current_data_step->set_data; |
| struct step *step = g_new0(struct step, 1); |
| |
| if (!app_uuid) { |
| tester_warn("No app uuid provided for register action."); |
| return; |
| } |
| |
| step->action_status = data->if_gatt->server->register_server(app_uuid); |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_server_unregister_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| int32_t sr_id = PTR_TO_INT(current_data_step->set_data); |
| struct step *step = g_new0(struct step, 1); |
| |
| step->action_status = data->if_gatt->server->unregister_server(sr_id); |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_server_connect_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct gatt_connect_data *conn_data = current_data_step->set_data; |
| struct step *step = g_new0(struct step, 1); |
| |
| step->action_status = data->if_gatt->server->connect( |
| conn_data->app_id, |
| &emu_remote_bdaddr_val, 0, |
| BT_TRANSPORT_UNKNOWN); |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_server_disconnect_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct gatt_connect_data *conn_data = current_data_step->set_data; |
| struct step *step = g_new0(struct step, 1); |
| |
| step->action_status = data->if_gatt->server->disconnect( |
| conn_data->app_id, |
| &emu_remote_bdaddr_val, |
| conn_data->conn_id); |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_server_add_service_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct add_service_data *add_srvc_data = current_data_step->set_data; |
| struct step *step = g_new0(struct step, 1); |
| |
| step->action_status = data->if_gatt->server->add_service( |
| add_srvc_data->app_id, |
| add_srvc_data->service, |
| add_srvc_data->num_handles); |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_server_add_inc_service_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct add_included_service_data *add_inc_srvc_data = |
| current_data_step->set_data; |
| struct step *step = g_new0(struct step, 1); |
| |
| step->action_status = data->if_gatt->server->add_included_service( |
| add_inc_srvc_data->app_id, |
| *add_inc_srvc_data->srvc_handle, |
| *add_inc_srvc_data->inc_srvc_handle); |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_server_add_char_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct add_char_data *add_char_data = current_data_step->set_data; |
| struct step *step = g_new0(struct step, 1); |
| |
| step->action_status = data->if_gatt->server->add_characteristic( |
| add_char_data->app_id, |
| *add_char_data->srvc_handle, |
| add_char_data->uuid, |
| add_char_data->properties, |
| add_char_data->permissions); |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_server_add_desc_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct add_desc_data *add_desc_data = current_data_step->set_data; |
| struct step *step = g_new0(struct step, 1); |
| |
| step->action_status = data->if_gatt->server->add_descriptor( |
| add_desc_data->app_id, |
| *add_desc_data->srvc_handle, |
| add_desc_data->uuid, |
| add_desc_data->permissions); |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_client_write_descriptor_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct write_desc_data *write_desc_data = current_data_step->set_data; |
| const btgatt_client_interface_t *client = data->if_gatt->client; |
| struct step *step = g_new0(struct step, 1); |
| int status; |
| |
| status = client->write_descriptor(write_desc_data->conn_id, |
| write_desc_data->service, |
| write_desc_data->characteristic, |
| write_desc_data->descriptor, |
| write_desc_data->write_type, |
| write_desc_data->len, |
| write_desc_data->auth_req, |
| write_desc_data->p_value); |
| |
| step->action_status = status; |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_server_start_srvc_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct start_srvc_data *start_srvc_data = current_data_step->set_data; |
| struct step *step = g_new0(struct step, 1); |
| |
| step->action_status = data->if_gatt->server->start_service( |
| start_srvc_data->app_id, |
| *start_srvc_data->srvc_handle, |
| start_srvc_data->transport); |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_server_stop_srvc_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct stop_srvc_data *stop_srvc_data = current_data_step->set_data; |
| struct step *step = g_new0(struct step, 1); |
| |
| step->action_status = data->if_gatt->server->stop_service( |
| stop_srvc_data->app_id, |
| *stop_srvc_data->srvc_handle); |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_server_delete_srvc_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct delete_srvc_data *delete_srvc_data = current_data_step->set_data; |
| struct step *step = g_new0(struct step, 1); |
| |
| step->action_status = data->if_gatt->server->delete_service( |
| delete_srvc_data->app_id, |
| *delete_srvc_data->srvc_handle); |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_server_send_indication_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct send_indication_data *send_indication_data = |
| current_data_step->set_data; |
| struct step *step = g_new0(struct step, 1); |
| |
| step->action_status = data->if_gatt->server->send_indication( |
| send_indication_data->app_id, |
| *send_indication_data->attr_handle, |
| send_indication_data->conn_id, |
| send_indication_data->len, |
| send_indication_data->confirm, |
| send_indication_data->p_value); |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_server_send_response_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct send_resp_data *send_resp_data = current_data_step->set_data; |
| struct step *step = g_new0(struct step, 1); |
| |
| step->action_status = data->if_gatt->server->send_response( |
| send_resp_data->conn_id, |
| send_resp_data->trans_id, |
| send_resp_data->status, |
| send_resp_data->response); |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_cid_hook_cb(const void *data, uint16_t len, void *user_data) |
| { |
| struct test_data *t_data = tester_get_data(); |
| struct bthost *bthost = hciemu_client_get_host(t_data->hciemu); |
| struct emu_l2cap_cid_data *cid_data = user_data; |
| const uint8_t *pdu = data; |
| struct iovec *gatt_pdu = queue_peek_head(t_data->pdus); |
| struct step *step; |
| |
| tester_debug("Received att pdu with opcode 0x%02x", pdu[0]); |
| |
| switch (pdu[0]) { |
| case L2CAP_ATT_ERROR: |
| step = g_new0(struct step, 1); |
| |
| step->callback = CB_EMU_ATT_ERROR; |
| step->callback_result.error = pdu[4]; |
| |
| schedule_callback_verification(step); |
| break; |
| case L2CAP_ATT_EXCHANGE_MTU_REQ: |
| tester_print("Exchange MTU request received."); |
| |
| if (!memcmp(exchange_mtu_req_pdu.iov_base, pdu, len)) |
| bthost_send_cid_v(bthost, cid_data->handle, |
| cid_data->cid, |
| &exchange_mtu_resp_pdu, 1); |
| |
| break; |
| case L2CAP_ATT_EXCHANGE_MTU_RSP: |
| tester_print("Exchange MTU response received."); |
| |
| break; |
| case L2CAP_ATT_HANDLE_VALUE_IND: |
| step = g_new0(struct step, 1); |
| |
| step->callback = CB_EMU_VALUE_INDICATION; |
| |
| schedule_callback_verification(step); |
| goto respond; |
| case L2CAP_ATT_HANDLE_VALUE_NOTIFY: |
| step = g_new0(struct step, 1); |
| |
| step->callback = CB_EMU_VALUE_NOTIFICATION; |
| |
| schedule_callback_verification(step); |
| break; |
| case L2CAP_ATT_READ_RSP: |
| /* TODO - More complicated cases should also verify pdu data */ |
| step = g_new0(struct step, 1); |
| |
| step->callback = CB_EMU_READ_RESPONSE; |
| |
| schedule_callback_verification(step); |
| break; |
| case L2CAP_ATT_WRITE_RSP: |
| /* TODO - More complicated cases should also verify pdu data */ |
| step = g_new0(struct step, 1); |
| |
| step->callback = CB_EMU_WRITE_RESPONSE; |
| |
| schedule_callback_verification(step); |
| break; |
| default: |
| if (!gatt_pdu || !gatt_pdu->iov_base) { |
| tester_print("Unknown ATT packet."); |
| break; |
| } |
| |
| if (gatt_pdu->iov_len != len) { |
| tester_print("Size of incoming frame is not valid"); |
| tester_print("Expected size = %zd incoming size = %d", |
| gatt_pdu->iov_len, len); |
| break; |
| } |
| |
| respond: |
| if (memcmp(gatt_pdu->iov_base, data, len)) { |
| tester_print("Incoming data mismatch"); |
| break; |
| } |
| queue_pop_head(t_data->pdus); |
| gatt_pdu = queue_pop_head(t_data->pdus); |
| if (!gatt_pdu || !gatt_pdu->iov_base) |
| break; |
| |
| bthost_send_cid_v(bthost, cid_data->handle, cid_data->cid, |
| gatt_pdu, 1); |
| |
| break; |
| } |
| } |
| |
| static void gatt_remote_send_frame_action(void) |
| { |
| struct test_data *t_data = tester_get_data(); |
| struct bthost *bthost = hciemu_client_get_host(t_data->hciemu); |
| struct iovec *gatt_pdu = queue_pop_head(t_data->pdus); |
| struct step *step = g_new0(struct step, 1); |
| |
| if (!gatt_pdu) { |
| tester_print("No frame to send"); |
| step->action_status = BT_STATUS_FAIL; |
| } else { |
| bthost_send_cid_v(bthost, cid_data.handle, cid_data.cid, |
| gatt_pdu, 1); |
| step->action_status = BT_STATUS_SUCCESS; |
| } |
| |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_remote_send_raw_pdu_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct bthost *bthost = hciemu_client_get_host(data->hciemu); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct iovec *pdu = current_data_step->set_data; |
| struct iovec *pdu2 = current_data_step->set_data_2; |
| struct iovec *pdu3 = current_data_step->set_data_3; |
| struct step *step = g_new0(struct step, 1); |
| |
| if (cid_data.handle && cid_data.cid) { |
| struct iovec rsp[3]; |
| size_t len = 0; |
| |
| if (!pdu) { |
| step->action_status = BT_STATUS_FAIL; |
| goto done; |
| } |
| |
| rsp[0].iov_base = pdu->iov_base; |
| rsp[0].iov_len = pdu->iov_len; |
| len++; |
| |
| if (pdu2) { |
| rsp[1].iov_base = pdu2->iov_base; |
| rsp[1].iov_len = pdu2->iov_len; |
| len++; |
| } |
| |
| if (pdu3) { |
| rsp[2].iov_base = pdu3->iov_base; |
| rsp[2].iov_len = pdu3->iov_len; |
| len++; |
| } |
| |
| bthost_send_cid_v(bthost, cid_data.handle, cid_data.cid, rsp, |
| len); |
| step->action_status = BT_STATUS_SUCCESS; |
| } else { |
| tester_debug("No connection set up"); |
| step->action_status = BT_STATUS_FAIL; |
| } |
| |
| done: |
| schedule_action_verification(step); |
| } |
| |
| static void gatt_conn_cb(uint16_t handle, void *user_data) |
| { |
| struct test_data *data = tester_get_data(); |
| struct bthost *bthost = hciemu_client_get_host(data->hciemu); |
| |
| tester_print("New connection with handle 0x%04x", handle); |
| |
| if (data->hciemu_type == HCIEMU_TYPE_BREDR) { |
| tester_warn("Not handled device type."); |
| return; |
| } |
| |
| cid_data.cid = 0x0004; |
| cid_data.handle = handle; |
| |
| bthost_add_cid_hook(bthost, handle, cid_data.cid, gatt_cid_hook_cb, |
| &cid_data); |
| } |
| |
| static void gatt_client_search_services(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct step *step = g_new0(struct step, 1); |
| struct gatt_search_service_data *search_data; |
| int status; |
| |
| search_data = current_data_step->set_data; |
| |
| status = data->if_gatt->client->search_service(search_data->conn_id, |
| search_data->filter_uuid); |
| step->action_status = status; |
| |
| schedule_action_verification(step); |
| } |
| |
| static void init_pdus(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct step *step = g_new0(struct step, 1); |
| struct iovec *pdu = current_data_step->set_data; |
| |
| while (pdu->iov_base) { |
| queue_push_tail(data->pdus, pdu); |
| pdu++; |
| } |
| |
| step->action_status = BT_STATUS_SUCCESS; |
| |
| schedule_action_verification(step); |
| } |
| |
| static void init_read_params_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct step *step = g_new0(struct step, 1); |
| struct set_read_params *set_param_data = current_data_step->set_data; |
| btgatt_read_params_t *param = set_param_data->params; |
| |
| memset(param, 0, sizeof(*param)); |
| |
| if (set_param_data->srvc_id) |
| memcpy(¶m->srvc_id, set_param_data->srvc_id, |
| sizeof(btgatt_srvc_id_t)); |
| |
| if (set_param_data->char_id) |
| memcpy(¶m->char_id, set_param_data->char_id, |
| sizeof(btgatt_gatt_id_t)); |
| |
| if (set_param_data->descr_id) |
| memcpy(¶m->descr_id, set_param_data->descr_id, |
| sizeof(btgatt_gatt_id_t)); |
| |
| param->value_type = set_param_data->value_type; |
| param->status = set_param_data->status; |
| param->value.len = set_param_data->len; |
| |
| if (param->value.len != 0) |
| memcpy(¶m->value.value, set_param_data->value, |
| param->value.len); |
| |
| step->action_status = BT_STATUS_SUCCESS; |
| |
| schedule_action_verification(step); |
| } |
| |
| static void init_write_params_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct step *step = g_new0(struct step, 1); |
| struct set_write_params *set_param_data = current_data_step->set_data; |
| btgatt_write_params_t *param = set_param_data->params; |
| |
| memset(param, 0, sizeof(*param)); |
| |
| if (set_param_data->srvc_id) |
| memcpy(¶m->srvc_id, set_param_data->srvc_id, |
| sizeof(btgatt_srvc_id_t)); |
| |
| if (set_param_data->char_id) |
| memcpy(¶m->char_id, set_param_data->char_id, |
| sizeof(btgatt_gatt_id_t)); |
| |
| if (set_param_data->descr_id) |
| memcpy(¶m->descr_id, set_param_data->descr_id, |
| sizeof(btgatt_gatt_id_t)); |
| |
| param->status = set_param_data->status; |
| |
| step->action_status = BT_STATUS_SUCCESS; |
| |
| schedule_action_verification(step); |
| } |
| |
| static void init_notify_params_action(void) |
| { |
| struct test_data *data = tester_get_data(); |
| struct step *current_data_step = queue_peek_head(data->steps); |
| struct step *step = g_new0(struct step, 1); |
| struct set_notify_params *set_param_data = current_data_step->set_data; |
| btgatt_notify_params_t *param = set_param_data->params; |
| |
| memset(param, 0, sizeof(*param)); |
| |
| if (set_param_data->srvc_id) |
| memcpy(¶m->srvc_id, set_param_data->srvc_id, |
| sizeof(btgatt_srvc_id_t)); |
| |
| if (set_param_data->char_id) |
| memcpy(¶m->char_id, set_param_data->char_id, |
| sizeof(btgatt_gatt_id_t)); |
| |
| param->len = set_param_data->len; |
| param->is_notify = set_param_data->is_notify; |
| |
| memcpy(¶m->bda, set_param_data->bdaddr, sizeof(bt_bdaddr_t)); |
| if (param->len != 0) |
| memcpy(¶m->value, set_param_data->value, param->len); |
| |
| step->action_status = BT_STATUS_SUCCESS; |
| |
| schedule_action_verification(step); |
| } |
| |
| static struct test_case test_cases[] = { |
| TEST_CASE_BREDRLE("Gatt Init", |
| ACTION_SUCCESS(dummy_action, NULL), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Register", |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Unregister", |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_unregister_action, |
| INT_TO_PTR(APP1_ID)), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Scan", |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CALLBACK_DEVICE_FOUND(prop_emu_remotes_default_le_set, 2), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - LE Connect", |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CALLBACK_DEVICE_FOUND(prop_emu_remotes_default_le_set, 2), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - LE Disconnect", |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CALLBACK_DEVICE_FOUND(prop_emu_remotes_default_le_set, 2), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_disconnect_action, |
| &app1_conn_req), |
| CALLBACK_GATTC_DISCONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - LE Multiple Client Conn./Disc.", |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_register_action, &app2_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_connect_action, &app2_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN2_ID, APP2_ID), |
| ACTION_SUCCESS(gatt_client_disconnect_action, |
| &app2_conn_req), |
| CALLBACK_GATTC_DISCONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN2_ID, APP2_ID), |
| ACTION_SUCCESS(gatt_client_disconnect_action, |
| &app1_conn_req), |
| CALLBACK_GATTC_DISCONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Listen and Disconnect", |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(bt_set_property_action, |
| &prop_test_scan_mode_conn), |
| CALLBACK_ADAPTER_PROPS(&prop_test_scan_mode_conn, 1), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_do_listen_action, &app1_conn_req), |
| CALLBACK_STATUS(CB_GATTC_LISTEN, GATT_STATUS_SUCCESS), |
| ACTION_SUCCESS(emu_remote_connect_hci_action, &bearer_type), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_stop_listen_action, |
| &app1_conn_req), |
| CALLBACK_STATUS(CB_GATTC_LISTEN, GATT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_disconnect_action, |
| &app1_conn_req), |
| CALLBACK_GATTC_DISCONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Double Listen", |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(bt_set_property_action, |
| &prop_test_scan_mode_conn), |
| CALLBACK_ADAPTER_PROPS(&prop_test_scan_mode_conn, 1), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_do_listen_action, &app1_conn_req), |
| CALLBACK_STATUS(CB_GATTC_LISTEN, GATT_STATUS_SUCCESS), |
| ACTION_SUCCESS(emu_remote_connect_hci_action, &bearer_type), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_stop_listen_action, |
| &app1_conn_req), |
| CALLBACK_STATUS(CB_GATTC_LISTEN, GATT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_disconnect_action, |
| &app1_conn_req), |
| CALLBACK_GATTC_DISCONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| /* Close ACL on emulated remotes side so it can reconnect */ |
| ACTION_SUCCESS(emu_remote_disconnect_hci_action, |
| &cid_data.handle), |
| CALLBACK_STATE(CB_BT_ACL_STATE_CHANGED, |
| BT_ACL_STATE_DISCONNECTED), |
| ACTION_SUCCESS(gatt_client_do_listen_action, &app1_conn_req), |
| CALLBACK_STATUS(CB_GATTC_LISTEN, GATT_STATUS_SUCCESS), |
| ACTION_SUCCESS(emu_remote_connect_hci_action, &bearer_type), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN2_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_disconnect_action, |
| &app1_conn2_req), |
| CALLBACK_GATTC_DISCONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN2_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_stop_listen_action, |
| &app1_conn_req), |
| CALLBACK_STATUS(CB_GATTC_LISTEN, GATT_STATUS_SUCCESS), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Search Service - Single", |
| ACTION_SUCCESS(init_pdus, search_service), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_RESULT(CONN1_ID, &service_1), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Search Service - Multiple", |
| ACTION_SUCCESS(init_pdus, search_service_2), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_RESULT(CONN1_ID, &service_1), |
| CALLBACK_GATTC_SEARCH_RESULT(CONN1_ID, &service_2), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Search Service - None", |
| ACTION_SUCCESS(init_pdus, search_service_3), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Search Service - Incorrect rsp", |
| ACTION_SUCCESS(init_pdus, search_service_4), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Get Characteristic - Single", |
| ACTION_SUCCESS(init_pdus, get_characteristic_1), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_SUCCESS(gatt_client_get_characteristic_action, |
| &get_char_data_1), |
| CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_SUCCESS, |
| CONN1_ID, &service_1, &characteristic_1, 4), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Get Characteristic - Incorrect rsp", |
| ACTION_SUCCESS(init_pdus, get_characteristic_2), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_SUCCESS(gatt_client_get_characteristic_action, |
| &get_char_data_1), |
| CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_FAILURE, |
| CONN1_ID, &service_1, NULL, 0), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Get Characteristic - None", |
| ACTION_SUCCESS(init_pdus, get_characteristic_1), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_FAIL(gatt_client_get_characteristic_action, |
| &get_char_data_2), |
| CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_FAILURE, |
| CONN1_ID, &service_2, |
| NULL, 0), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Get Descriptor - Incorrect rsp", |
| ACTION_SUCCESS(init_pdus, get_descriptor_0), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_SUCCESS(gatt_client_get_characteristic_action, |
| &get_char_data_1), |
| CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_SUCCESS, |
| CONN1_ID, &service_1, &characteristic_1, 4), |
| ACTION_SUCCESS(gatt_client_get_descriptor_action, |
| &get_desc_data_1), |
| CALLBACK_GATTC_GET_DESCRIPTOR(GATT_STATUS_FAILURE, CONN1_ID, |
| &service_1, &characteristic_1, NULL), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Get Descriptor - Single", |
| ACTION_SUCCESS(init_pdus, get_descriptor_1), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_SUCCESS(gatt_client_get_characteristic_action, |
| &get_char_data_1), |
| CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_SUCCESS, |
| CONN1_ID, &service_1, &characteristic_1, 4), |
| ACTION_SUCCESS(gatt_client_get_descriptor_action, |
| &get_desc_data_1), |
| CALLBACK_GATTC_GET_DESCRIPTOR(GATT_STATUS_SUCCESS, CONN1_ID, |
| &service_1, &characteristic_1, &desc_1), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Get Descriptor - Multiple", |
| ACTION_SUCCESS(init_pdus, get_descriptor_2), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_SUCCESS(gatt_client_get_characteristic_action, |
| &get_char_data_1), |
| CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_SUCCESS, |
| CONN1_ID, &service_1, |
| &characteristic_1, 4), |
| ACTION_SUCCESS(gatt_client_get_descriptor_action, |
| &get_desc_data_1), |
| CALLBACK_GATTC_GET_DESCRIPTOR(GATT_STATUS_SUCCESS, CONN1_ID, |
| &service_1, &characteristic_1, |
| &desc_1), |
| ACTION_SUCCESS(gatt_client_get_descriptor_action, |
| &get_desc_data_2), |
| CALLBACK_GATTC_GET_DESCRIPTOR(GATT_STATUS_SUCCESS, CONN1_ID, |
| &service_1, &characteristic_1, |
| &desc_2), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Get Descriptor - None", |
| ACTION_SUCCESS(init_pdus, get_descriptor_3), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_SUCCESS(gatt_client_get_characteristic_action, |
| &get_char_data_1), |
| CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_SUCCESS, |
| CONN1_ID, &service_1, &characteristic_1, 4), |
| ACTION_SUCCESS(gatt_client_get_descriptor_action, |
| &get_desc_data_1), |
| CALLBACK_GATTC_GET_DESCRIPTOR(GATT_STATUS_FAILURE, CONN1_ID, |
| &service_1, &characteristic_1, NULL), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Get Included Services - Incorrect rsp", |
| ACTION_SUCCESS(init_pdus, get_included_0), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_SUCCESS(gatt_client_get_included_action, |
| &get_incl_data_1), |
| CALLBACK_GATTC_GET_INCLUDED(GATT_STATUS_FAILURE, CONN1_ID, |
| &service_1, NULL), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Get Included Service - 16 UUID", |
| ACTION_SUCCESS(init_pdus, get_included_1), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_SUCCESS(gatt_client_get_included_action, |
| &get_incl_data_1), |
| CALLBACK_GATTC_GET_INCLUDED(GATT_STATUS_SUCCESS, CONN1_ID, |
| &service_1, &included_1), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Get Included Service - 128 UUID", |
| ACTION_SUCCESS(init_pdus, get_included_2), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_SUCCESS(gatt_client_get_included_action, |
| &get_incl_data_1), |
| CALLBACK_GATTC_GET_INCLUDED(GATT_STATUS_SUCCESS, CONN1_ID, |
| &service_1, &included_2), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Get Included Service - None", |
| ACTION_SUCCESS(init_pdus, get_included_3), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_SUCCESS(gatt_client_get_included_action, |
| &get_incl_data_1), |
| CALLBACK_GATTC_GET_INCLUDED(GATT_STATUS_FAILURE, CONN1_ID, |
| &service_1, NULL), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Read Characteristic - Success", |
| ACTION_SUCCESS(init_pdus, read_characteristic_1), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(init_read_params_action, &set_read_param_1), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_SUCCESS(gatt_client_get_characteristic_action, |
| &get_char_data_1), |
| CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_SUCCESS, |
| CONN1_ID, &service_1, &characteristic_1, 4), |
| ACTION_SUCCESS(gatt_client_read_characteristic_action, |
| &read_char_data_1), |
| CALLBACK_GATTC_READ_CHARACTERISTIC(GATT_STATUS_SUCCESS, |
| CONN1_ID, &read_params_1), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| |
| TEST_CASE_BREDRLE("Gatt Client - Read Characteristic - Insuf. Auth.", |
| ACTION_SUCCESS(init_pdus, read_characteristic_2), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(init_read_params_action, &set_read_param_2), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_SUCCESS(gatt_client_get_characteristic_action, |
| &get_char_data_1), |
| CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_SUCCESS, |
| CONN1_ID, &service_1, &characteristic_1, 4), |
| ACTION_SUCCESS(gatt_client_read_characteristic_action, |
| &read_char_data_1), |
| CALLBACK_GATTC_READ_CHARACTERISTIC(GATT_STATUS_INS_AUTH, |
| CONN1_ID, &read_params_1), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Read Characteristic - Wrong params", |
| ACTION_SUCCESS(init_pdus, read_characteristic_2), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(init_read_params_action, &set_read_param_3), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_SUCCESS(gatt_client_get_characteristic_action, |
| &get_char_data_1), |
| CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_SUCCESS, |
| CONN1_ID, &service_1, &characteristic_1, 4), |
| ACTION_FAIL(gatt_client_read_characteristic_action, |
| &read_char_data_2), |
| CALLBACK_GATTC_READ_CHARACTERISTIC(GATT_STATUS_FAILURE, |
| CONN1_ID, &read_params_1), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Read Descriptor - Success", |
| ACTION_SUCCESS(init_pdus, read_descriptor_1), |
| ACTION_SUCCESS(init_read_params_action, &set_read_param_4), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_SUCCESS(gatt_client_get_characteristic_action, |
| &get_char_data_1), |
| CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_SUCCESS, |
| CONN1_ID, &service_1, &characteristic_1, 4), |
| ACTION_SUCCESS(gatt_client_get_descriptor_action, |
| &get_desc_data_1), |
| CALLBACK_GATTC_GET_DESCRIPTOR(GATT_STATUS_SUCCESS, CONN1_ID, |
| &service_1, &characteristic_1, &desc_1), |
| ACTION_SUCCESS(gatt_client_read_descriptor_action, |
| &read_desc_data_1), |
| CALLBACK_GATTC_READ_DESCRIPTOR(GATT_STATUS_SUCCESS, |
| CONN1_ID, &read_params_1), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Read Descriptor - Insuf. Auth.", |
| ACTION_SUCCESS(init_pdus, read_descriptor_2), |
| ACTION_SUCCESS(init_read_params_action, &set_read_param_5), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_SUCCESS(gatt_client_get_characteristic_action, |
| &get_char_data_1), |
| CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_SUCCESS, |
| CONN1_ID, &service_1, &characteristic_1, 4), |
| ACTION_SUCCESS(gatt_client_get_descriptor_action, |
| &get_desc_data_1), |
| CALLBACK_GATTC_GET_DESCRIPTOR(GATT_STATUS_SUCCESS, CONN1_ID, |
| &service_1, &characteristic_1, &desc_1), |
| ACTION_SUCCESS(gatt_client_read_descriptor_action, |
| &read_desc_data_1), |
| CALLBACK_GATTC_READ_DESCRIPTOR(GATT_STATUS_INS_AUTH, |
| CONN1_ID, &read_params_1), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Read Descriptor - Wrong params", |
| ACTION_SUCCESS(init_pdus, read_descriptor_2), |
| ACTION_SUCCESS(init_read_params_action, &set_read_param_6), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_SUCCESS(gatt_client_get_characteristic_action, |
| &get_char_data_1), |
| CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_SUCCESS, |
| CONN1_ID, &service_1, &characteristic_1, 4), |
| ACTION_SUCCESS(gatt_client_get_descriptor_action, |
| &get_desc_data_1), |
| CALLBACK_GATTC_GET_DESCRIPTOR(GATT_STATUS_SUCCESS, CONN1_ID, |
| &service_1, &characteristic_1, &desc_1), |
| ACTION_FAIL(gatt_client_read_descriptor_action, |
| &read_desc_data_2), |
| CALLBACK_GATTC_READ_DESCRIPTOR(GATT_STATUS_FAILURE, |
| CONN1_ID, &read_params_1), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Write Characteristic Cmd - Success", |
| ACTION_SUCCESS(init_pdus, write_characteristic_1), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(init_write_params_action, &set_write_param_1), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_SUCCESS(gatt_client_get_characteristic_action, |
| &get_char_data_1), |
| CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_SUCCESS, |
| CONN1_ID, &service_1, &characteristic_1, 4), |
| ACTION_SUCCESS(gatt_client_write_characteristic_action, |
| &write_char_data_1), |
| CALLBACK_GATTC_WRITE_CHARACTERISTIC(GATT_STATUS_SUCCESS, |
| CONN1_ID, &write_params_1), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Write Characteristic Req - Success", |
| ACTION_SUCCESS(init_pdus, write_characteristic_2), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(init_write_params_action, &set_write_param_1), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_SUCCESS(gatt_client_get_characteristic_action, |
| &get_char_data_1), |
| CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_SUCCESS, |
| CONN1_ID, &service_1, &characteristic_1, 4), |
| ACTION_SUCCESS(gatt_client_write_characteristic_action, |
| &write_char_data_2), |
| CALLBACK_GATTC_WRITE_CHARACTERISTIC(GATT_STATUS_SUCCESS, |
| CONN1_ID, &write_params_1), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Write Characteristic - Insuf. Auth.", |
| ACTION_SUCCESS(init_pdus, write_characteristic_3), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(init_write_params_action, &set_write_param_2), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_SUCCESS(gatt_client_get_characteristic_action, |
| &get_char_data_1), |
| CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_SUCCESS, |
| CONN1_ID, &service_1, &characteristic_1, 4), |
| ACTION_SUCCESS(gatt_client_write_characteristic_action, |
| &write_char_data_2), |
| CALLBACK_GATTC_WRITE_CHARACTERISTIC(GATT_STATUS_INS_AUTH, |
| CONN1_ID, &write_params_1), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Write Characteristic - Wrong Params", |
| ACTION_SUCCESS(init_pdus, write_characteristic_3), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(init_write_params_action, &set_write_param_3), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_FAIL(gatt_client_write_characteristic_action, |
| &write_char_data_2), |
| CALLBACK_GATTC_WRITE_CHARACTERISTIC(GATT_STATUS_FAILURE, |
| CONN1_ID, &write_params_1), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Register For Notification - Success", |
| ACTION_SUCCESS(init_pdus, notification_1), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_SUCCESS(gatt_client_get_characteristic_action, |
| &get_char_data_1), |
| CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_SUCCESS, |
| CONN1_ID, &service_1, &characteristic_1, 4), |
| ACTION_SUCCESS(gatt_client_register_for_notification_action, |
| ¬if_data_1), |
| CALLBACK_GATTC_REGISTER_FOR_NOTIF(GATT_STATUS_SUCCESS, CONN1_ID, |
| &characteristic_1, |
| &service_1, 1), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
| TEST_CASE_BREDRLE("Gatt Client - Deregister For Notification - Success", |
| ACTION_SUCCESS(init_pdus, notification_1), |
| ACTION_SUCCESS(bluetooth_enable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_ON), |
| ACTION_SUCCESS(emu_setup_powered_remote_action, NULL), |
| ACTION_SUCCESS(emu_set_ssp_mode_action, NULL), |
| ACTION_SUCCESS(emu_set_connect_cb_action, gatt_conn_cb), |
| ACTION_SUCCESS(gatt_client_register_action, &app1_uuid), |
| CALLBACK_STATUS(CB_GATTC_REGISTER_CLIENT, BT_STATUS_SUCCESS), |
| ACTION_SUCCESS(gatt_client_start_scan_action, NULL), |
| CLLBACK_GATTC_SCAN_RES(prop_emu_remotes_default_set, 1, TRUE), |
| ACTION_SUCCESS(gatt_client_stop_scan_action, NULL), |
| ACTION_SUCCESS(gatt_client_connect_action, &app1_conn_req), |
| CALLBACK_GATTC_CONNECT(GATT_STATUS_SUCCESS, |
| prop_emu_remotes_default_set, |
| CONN1_ID, APP1_ID), |
| ACTION_SUCCESS(gatt_client_search_services, &search_services_1), |
| CALLBACK_GATTC_SEARCH_COMPLETE(GATT_STATUS_SUCCESS, CONN1_ID), |
| ACTION_SUCCESS(gatt_client_get_characteristic_action, |
| &get_char_data_1), |
| CALLBACK_GATTC_GET_CHARACTERISTIC_CB(GATT_STATUS_SUCCESS, |
| CONN1_ID, &service_1, &characteristic_1, 4), |
| ACTION_SUCCESS(gatt_client_register_for_notification_action, |
| ¬if_data_1), |
| CALLBACK_GATTC_REGISTER_FOR_NOTIF(GATT_STATUS_SUCCESS, CONN1_ID, |
| &characteristic_1, |
| &service_1, 1), |
| ACTION_SUCCESS(gatt_client_deregister_for_notification_action, |
| ¬if_data_1), |
| CALLBACK_GATTC_REGISTER_FOR_NOTIF(GATT_STATUS_SUCCESS, CONN1_ID, |
| &characteristic_1, |
| &service_1, 0), |
| ACTION_SUCCESS(bluetooth_disable_action, NULL), |
| CALLBACK_STATE(CB_BT_ADAPTER_STATE_CHANGED, BT_STATE_OFF), |
| ), |
|