1d3762d15SMatthias Ringwald #include <stdint.h> 2d3762d15SMatthias Ringwald #include <stdio.h> 3d3762d15SMatthias Ringwald #include <stdlib.h> 4d3762d15SMatthias Ringwald #include <string.h> 5d3762d15SMatthias Ringwald 6d3762d15SMatthias Ringwald #include "CppUTest/TestHarness.h" 7d3762d15SMatthias Ringwald #include "CppUTest/CommandLineTestRunner.h" 8d3762d15SMatthias Ringwald #include "CppUTestExt/MockSupport.h" 9d3762d15SMatthias Ringwald 10d3762d15SMatthias Ringwald #include "hci_cmd.h" 11d3762d15SMatthias Ringwald 12d3762d15SMatthias Ringwald #include "btstack_memory.h" 13d3762d15SMatthias Ringwald #include "hci.h" 14d3762d15SMatthias Ringwald #include "ble/gatt_client.h" 15d3762d15SMatthias Ringwald #include "btstack_event.h" 16d3762d15SMatthias Ringwald #include "hci_dump.h" 17d3762d15SMatthias Ringwald #include "hci_dump_posix_fs.h" 18d3762d15SMatthias Ringwald #include "btstack_debug.h" 19fcebe167SMilanka Ringwald #include "btstack_util.h" 20fcebe167SMilanka Ringwald #include "btstack_run_loop_posix.h" 21d3762d15SMatthias Ringwald 22d3762d15SMatthias Ringwald typedef struct { 23d3762d15SMatthias Ringwald uint8_t type; 24d3762d15SMatthias Ringwald uint16_t size; 25d3762d15SMatthias Ringwald uint8_t buffer[258]; 26d3762d15SMatthias Ringwald } hci_packet_t; 27d3762d15SMatthias Ringwald 28d3762d15SMatthias Ringwald #define MAX_HCI_PACKETS 10 29d3762d15SMatthias Ringwald static uint16_t transport_count_packets; 30d3762d15SMatthias Ringwald static hci_packet_t transport_packets[MAX_HCI_PACKETS]; 31d3762d15SMatthias Ringwald 32d3762d15SMatthias Ringwald static void (*packet_handler)(uint8_t packet_type, uint8_t *packet, uint16_t size); 33d3762d15SMatthias Ringwald 34d3762d15SMatthias Ringwald static const uint8_t packet_sent_event[] = { HCI_EVENT_TRANSPORT_PACKET_SENT, 0}; 35d3762d15SMatthias Ringwald 36d3762d15SMatthias Ringwald static int hci_transport_test_set_baudrate(uint32_t baudrate){ 37d3762d15SMatthias Ringwald return 0; 38d3762d15SMatthias Ringwald } 39d3762d15SMatthias Ringwald 40d3762d15SMatthias Ringwald static int hci_transport_test_can_send_now(uint8_t packet_type){ 41d3762d15SMatthias Ringwald return 1; 42d3762d15SMatthias Ringwald } 43d3762d15SMatthias Ringwald 44d3762d15SMatthias Ringwald static int hci_transport_test_send_packet(uint8_t packet_type, uint8_t * packet, int size){ 45d3762d15SMatthias Ringwald btstack_assert(transport_count_packets < MAX_HCI_PACKETS); 46d3762d15SMatthias Ringwald memcpy(transport_packets[transport_count_packets].buffer, packet, size); 47d3762d15SMatthias Ringwald transport_packets[transport_count_packets].type = packet_type; 48d3762d15SMatthias Ringwald transport_packets[transport_count_packets].size = size; 49d3762d15SMatthias Ringwald transport_count_packets++; 50d3762d15SMatthias Ringwald // notify upper stack that it can send again 51d3762d15SMatthias Ringwald packet_handler(HCI_EVENT_PACKET, (uint8_t *) &packet_sent_event[0], sizeof(packet_sent_event)); 52d3762d15SMatthias Ringwald return 0; 53d3762d15SMatthias Ringwald } 54d3762d15SMatthias Ringwald 55d3762d15SMatthias Ringwald static void hci_transport_test_init(const void * transport_config){ 56d3762d15SMatthias Ringwald } 57d3762d15SMatthias Ringwald 58d3762d15SMatthias Ringwald static int hci_transport_test_open(void){ 59d3762d15SMatthias Ringwald return 0; 60d3762d15SMatthias Ringwald } 61d3762d15SMatthias Ringwald 62d3762d15SMatthias Ringwald static int hci_transport_test_close(void){ 63d3762d15SMatthias Ringwald return 0; 64d3762d15SMatthias Ringwald } 65d3762d15SMatthias Ringwald 66d3762d15SMatthias Ringwald static void hci_transport_test_register_packet_handler(void (*handler)(uint8_t packet_type, uint8_t *packet, uint16_t size)){ 67d3762d15SMatthias Ringwald packet_handler = handler; 68d3762d15SMatthias Ringwald } 69d3762d15SMatthias Ringwald 70d3762d15SMatthias Ringwald static const hci_transport_t hci_transport_test = { 71d3762d15SMatthias Ringwald /* const char * name; */ "TEST", 72d3762d15SMatthias Ringwald /* void (*init) (const void *transport_config); */ &hci_transport_test_init, 73d3762d15SMatthias Ringwald /* int (*open)(void); */ &hci_transport_test_open, 74d3762d15SMatthias Ringwald /* int (*close)(void); */ &hci_transport_test_close, 75d3762d15SMatthias Ringwald /* void (*register_packet_handler)(void (*handler)(...); */ &hci_transport_test_register_packet_handler, 76d3762d15SMatthias Ringwald /* int (*can_send_packet_now)(uint8_t packet_type); */ &hci_transport_test_can_send_now, 77d3762d15SMatthias Ringwald /* int (*send_packet)(...); */ &hci_transport_test_send_packet, 78d3762d15SMatthias Ringwald /* int (*set_baudrate)(uint32_t baudrate); */ &hci_transport_test_set_baudrate, 79d3762d15SMatthias Ringwald /* void (*reset_link)(void); */ NULL, 80d3762d15SMatthias Ringwald /* void (*set_sco_config)(uint16_t voice_setting, int num_connections); */ NULL, 81d3762d15SMatthias Ringwald }; 82d3762d15SMatthias Ringwald 83d3762d15SMatthias Ringwald static uint16_t next_hci_packet; 84d3762d15SMatthias Ringwald 85d3762d15SMatthias Ringwald void CHECK_EQUAL_ARRAY(const uint8_t * expected, uint8_t * actual, int size){ 86d3762d15SMatthias Ringwald for (int i=0; i<size; i++){ 87d3762d15SMatthias Ringwald BYTES_EQUAL(expected[i], actual[i]); 88d3762d15SMatthias Ringwald } 89d3762d15SMatthias Ringwald } 90d3762d15SMatthias Ringwald 91d3762d15SMatthias Ringwald void CHECK_HCI_COMMAND(const hci_cmd_t * expected_hci_command){ 92d3762d15SMatthias Ringwald uint16_t actual_opcode = little_endian_read_16(transport_packets[next_hci_packet].buffer, 0); 93d3762d15SMatthias Ringwald next_hci_packet++; 94d3762d15SMatthias Ringwald CHECK_EQUAL(expected_hci_command->opcode, actual_opcode); 95d3762d15SMatthias Ringwald } 96d3762d15SMatthias Ringwald 97d3762d15SMatthias Ringwald TEST_GROUP(HCI){ 98d3762d15SMatthias Ringwald void setup(void){ 99d3762d15SMatthias Ringwald transport_count_packets = 0; 100d3762d15SMatthias Ringwald next_hci_packet = 0; 101d3762d15SMatthias Ringwald hci_init(&hci_transport_test, NULL); 102d3762d15SMatthias Ringwald hci_simulate_working_fuzz(); 103d3762d15SMatthias Ringwald hci_setup_test_connections_fuzz(); 104d3762d15SMatthias Ringwald // register for HCI events 105d3762d15SMatthias Ringwald mock().expectOneCall("hci_can_send_packet_now_using_packet_buffer").andReturnValue(1); 106d3762d15SMatthias Ringwald } 107d3762d15SMatthias Ringwald void teardown(void){ 108d3762d15SMatthias Ringwald mock().clear(); 109d3762d15SMatthias Ringwald } 110d3762d15SMatthias Ringwald }; 111d3762d15SMatthias Ringwald 112d3762d15SMatthias Ringwald TEST(HCI, GetSetConnectionRange){ 113d3762d15SMatthias Ringwald le_connection_parameter_range_t range; 114d3762d15SMatthias Ringwald gap_get_connection_parameter_range(&range); 115d3762d15SMatthias Ringwald gap_set_connection_parameter_range(&range); 116d3762d15SMatthias Ringwald } 117d3762d15SMatthias Ringwald 118d3762d15SMatthias Ringwald TEST(HCI, ConnectionRangeValid){ 119d3762d15SMatthias Ringwald le_connection_parameter_range_t range = { 120fcebe167SMilanka Ringwald .le_conn_interval_min = 1, 121fcebe167SMilanka Ringwald .le_conn_interval_max = 10, 122fcebe167SMilanka Ringwald .le_conn_latency_min = 1, 123fcebe167SMilanka Ringwald .le_conn_latency_max = 10, 124fcebe167SMilanka Ringwald .le_supervision_timeout_min = 1, 125fcebe167SMilanka Ringwald .le_supervision_timeout_max = 10 126d3762d15SMatthias Ringwald }; 127d3762d15SMatthias Ringwald CHECK_EQUAL( 0, gap_connection_parameter_range_included(&range, 0, 0, 0, 0)); 128fcebe167SMilanka Ringwald CHECK_EQUAL( 0, gap_connection_parameter_range_included(&range, 2, 11, 0, 0)); 129fcebe167SMilanka Ringwald CHECK_EQUAL( 0, gap_connection_parameter_range_included(&range, 2, 9, 11, 0)); 130d3762d15SMatthias Ringwald CHECK_EQUAL( 0, gap_connection_parameter_range_included(&range, 2, 0, 0, 0)); 131d3762d15SMatthias Ringwald CHECK_EQUAL( 0, gap_connection_parameter_range_included(&range, 2, 9, 0, 0)); 132d3762d15SMatthias Ringwald CHECK_EQUAL( 0, gap_connection_parameter_range_included(&range, 2, 9, 10, 0)); 133d3762d15SMatthias Ringwald CHECK_EQUAL( 0, gap_connection_parameter_range_included(&range, 2, 9, 5, 0)); 134d3762d15SMatthias Ringwald CHECK_EQUAL( 0, gap_connection_parameter_range_included(&range, 2, 9, 5, 11)); 135d3762d15SMatthias Ringwald CHECK_EQUAL( 1, gap_connection_parameter_range_included(&range, 2, 9, 5, 5)); 136d3762d15SMatthias Ringwald } 137d3762d15SMatthias Ringwald 138fcebe167SMilanka Ringwald TEST(HCI, other_functions){ 139fcebe167SMilanka Ringwald gap_set_scan_phys(1); 140fcebe167SMilanka Ringwald gap_set_connection_phys(1); 141fcebe167SMilanka Ringwald hci_enable_custom_pre_init(); 142fcebe167SMilanka Ringwald gap_whitelist_clear(); 143fcebe167SMilanka Ringwald } 144fcebe167SMilanka Ringwald 145fcebe167SMilanka Ringwald TEST(HCI, gap_whitelist_add_remove){ 146fcebe167SMilanka Ringwald bd_addr_type_t addr_type = BD_ADDR_TYPE_ACL; 147fcebe167SMilanka Ringwald bd_addr_t addr = { 0 }; 148fcebe167SMilanka Ringwald 149fcebe167SMilanka Ringwald uint8_t status = gap_whitelist_add(addr_type, addr); 150fcebe167SMilanka Ringwald CHECK_EQUAL(ERROR_CODE_SUCCESS, status); 151fcebe167SMilanka Ringwald 152fcebe167SMilanka Ringwald status = gap_whitelist_add(addr_type, addr); 153fcebe167SMilanka Ringwald CHECK_EQUAL(ERROR_CODE_COMMAND_DISALLOWED, status); 154fcebe167SMilanka Ringwald 155fcebe167SMilanka Ringwald status = gap_whitelist_remove(addr_type, addr); 156fcebe167SMilanka Ringwald CHECK_EQUAL(ERROR_CODE_SUCCESS, status); 157fcebe167SMilanka Ringwald 158fcebe167SMilanka Ringwald status = gap_whitelist_remove(addr_type, addr); 159*e406aa8dSMatthias Ringwald CHECK_EQUAL(ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER, status); 160fcebe167SMilanka Ringwald 161fcebe167SMilanka Ringwald status = gap_whitelist_remove(BD_ADDR_TYPE_SCO, addr); 162fcebe167SMilanka Ringwald CHECK_EQUAL(ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER, status); 163fcebe167SMilanka Ringwald } 164fcebe167SMilanka Ringwald 165fcebe167SMilanka Ringwald TEST(HCI, gap_connect_with_whitelist){ 166fcebe167SMilanka Ringwald uint8_t status = gap_connect_with_whitelist(); 167fcebe167SMilanka Ringwald CHECK_EQUAL(ERROR_CODE_SUCCESS, status); 168fcebe167SMilanka Ringwald 169fcebe167SMilanka Ringwald status = gap_connect_with_whitelist(); 170fcebe167SMilanka Ringwald CHECK_EQUAL(ERROR_CODE_COMMAND_DISALLOWED, status); 171fcebe167SMilanka Ringwald } 172fcebe167SMilanka Ringwald 173fcebe167SMilanka Ringwald TEST(HCI, gap_auto_connection_start_stop){ 174fcebe167SMilanka Ringwald bd_addr_type_t addr_type = BD_ADDR_TYPE_LE_PUBLIC; 175fcebe167SMilanka Ringwald bd_addr_t addr = { 0 }; 176fcebe167SMilanka Ringwald 177fcebe167SMilanka Ringwald uint8_t status = gap_auto_connection_start(addr_type, addr); 178fcebe167SMilanka Ringwald CHECK_EQUAL(ERROR_CODE_SUCCESS, status); 179fcebe167SMilanka Ringwald 180fcebe167SMilanka Ringwald status = gap_auto_connection_stop(addr_type, addr); 181fcebe167SMilanka Ringwald CHECK_EQUAL(ERROR_CODE_SUCCESS, status); 182fcebe167SMilanka Ringwald } 183fcebe167SMilanka Ringwald 184fcebe167SMilanka Ringwald TEST(HCI, gap_auto_connection_stop_all){ 185fcebe167SMilanka Ringwald bd_addr_type_t addr_type = BD_ADDR_TYPE_LE_PUBLIC; 186fcebe167SMilanka Ringwald bd_addr_t addr = { 0 }; 187fcebe167SMilanka Ringwald 188fcebe167SMilanka Ringwald uint8_t status = gap_auto_connection_start(addr_type, addr); 189fcebe167SMilanka Ringwald CHECK_EQUAL(ERROR_CODE_SUCCESS, status); 190fcebe167SMilanka Ringwald 191fcebe167SMilanka Ringwald status = gap_auto_connection_stop_all(); 192fcebe167SMilanka Ringwald CHECK_EQUAL(ERROR_CODE_SUCCESS, status); 193fcebe167SMilanka Ringwald } 194fcebe167SMilanka Ringwald 195fcebe167SMilanka Ringwald TEST(HCI, gap_read_rssi){ 196fcebe167SMilanka Ringwald int status = gap_read_rssi(HCI_CON_HANDLE_INVALID); 197fcebe167SMilanka Ringwald CHECK_EQUAL(0, status); 198fcebe167SMilanka Ringwald 199fcebe167SMilanka Ringwald status = gap_read_rssi(0x01); 200fcebe167SMilanka Ringwald CHECK_EQUAL(1, status); 201fcebe167SMilanka Ringwald } 202fcebe167SMilanka Ringwald 203fcebe167SMilanka Ringwald TEST(HCI, gap_le_connection_interval){ 204fcebe167SMilanka Ringwald uint16_t con_interval = gap_le_connection_interval(HCI_CON_HANDLE_INVALID); 205fcebe167SMilanka Ringwald CHECK_EQUAL(0, con_interval); 206fcebe167SMilanka Ringwald 207fcebe167SMilanka Ringwald con_interval = gap_le_connection_interval(0x01); 208fcebe167SMilanka Ringwald CHECK_EQUAL(0, con_interval); 209fcebe167SMilanka Ringwald } 210fcebe167SMilanka Ringwald 211fcebe167SMilanka Ringwald 212fcebe167SMilanka Ringwald TEST(HCI, gap_get_connection_type){ 213fcebe167SMilanka Ringwald gap_connection_type_t type = gap_get_connection_type(HCI_CON_HANDLE_INVALID); 214fcebe167SMilanka Ringwald CHECK_EQUAL(GAP_CONNECTION_INVALID, type); 215fcebe167SMilanka Ringwald 216fcebe167SMilanka Ringwald type = gap_get_connection_type(0x01); 217fcebe167SMilanka Ringwald CHECK_EQUAL(GAP_CONNECTION_ACL, type); 218fcebe167SMilanka Ringwald } 219fcebe167SMilanka Ringwald 220fcebe167SMilanka Ringwald TEST(HCI, gap_le_set_phy){ 221fcebe167SMilanka Ringwald uint8_t status = gap_le_set_phy(HCI_CON_HANDLE_INVALID, 0, 0, 0, 0); 222fcebe167SMilanka Ringwald CHECK_EQUAL(ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER, status); 223fcebe167SMilanka Ringwald 224fcebe167SMilanka Ringwald status = gap_le_set_phy(0x01, 0, 0, 0, 0); 225fcebe167SMilanka Ringwald CHECK_EQUAL(ERROR_CODE_SUCCESS, status); 226fcebe167SMilanka Ringwald } 227fcebe167SMilanka Ringwald 228fcebe167SMilanka Ringwald TEST(HCI, hci_connection_for_bd_addr_and_type){ 229fcebe167SMilanka Ringwald bd_addr_type_t addr_type = BD_ADDR_TYPE_ACL; 230fcebe167SMilanka Ringwald bd_addr_t addr = { 0 }; 231fcebe167SMilanka Ringwald 232fcebe167SMilanka Ringwald hci_connection_t * con = hci_connection_for_bd_addr_and_type(addr , addr_type); 233fcebe167SMilanka Ringwald CHECK_EQUAL(NULL, con); 234fcebe167SMilanka Ringwald } 235fcebe167SMilanka Ringwald 236fcebe167SMilanka Ringwald TEST(HCI, hci_number_free_acl_slots_for_handle){ 237fcebe167SMilanka Ringwald int free_acl_slots_num = hci_number_free_acl_slots_for_handle(HCI_CON_HANDLE_INVALID); 238fcebe167SMilanka Ringwald CHECK_EQUAL(0, free_acl_slots_num); 239fcebe167SMilanka Ringwald } 240fcebe167SMilanka Ringwald 241fcebe167SMilanka Ringwald TEST(HCI, hci_send_acl_packet_buffer){ 242fcebe167SMilanka Ringwald hci_reserve_packet_buffer(); 243fcebe167SMilanka Ringwald uint8_t status = hci_send_acl_packet_buffer(HCI_CON_HANDLE_INVALID); 244fcebe167SMilanka Ringwald CHECK_EQUAL(ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER, status); 245fcebe167SMilanka Ringwald } 246fcebe167SMilanka Ringwald 247fcebe167SMilanka Ringwald TEST(HCI, hci_send_cmd_packet){ 248fcebe167SMilanka Ringwald bd_addr_t addr = { 0 }; 249fcebe167SMilanka Ringwald 250fcebe167SMilanka Ringwald uint8_t status = hci_send_cmd(&hci_write_loopback_mode, 1); 251fcebe167SMilanka Ringwald CHECK_EQUAL(0, status); 252fcebe167SMilanka Ringwald 253fcebe167SMilanka Ringwald uint8_t i; 254fcebe167SMilanka Ringwald for (i = 0; i < 3; i++){ 255fcebe167SMilanka Ringwald status = hci_send_cmd(&hci_le_create_connection, 256fcebe167SMilanka Ringwald 1000, // scan interval: 625 ms 257fcebe167SMilanka Ringwald 1000, // scan interval: 625 ms 258fcebe167SMilanka Ringwald i, // don't use whitelist 259fcebe167SMilanka Ringwald 0, // peer address type: public 260fcebe167SMilanka Ringwald addr, // remote bd addr 261fcebe167SMilanka Ringwald 0, // random or public 262fcebe167SMilanka Ringwald 80, // conn interval min 263fcebe167SMilanka Ringwald 80, // conn interval max (3200 * 0.625) 264fcebe167SMilanka Ringwald 0, // conn latency 265fcebe167SMilanka Ringwald 2000, // supervision timeout 266fcebe167SMilanka Ringwald 0, // min ce length 267fcebe167SMilanka Ringwald 1000 // max ce length 268fcebe167SMilanka Ringwald ); 269fcebe167SMilanka Ringwald CHECK_EQUAL(0, status); 270fcebe167SMilanka Ringwald } 271fcebe167SMilanka Ringwald } 272fcebe167SMilanka Ringwald 273fcebe167SMilanka Ringwald TEST(HCI, hci_send_cmd_va_arg){ 274fcebe167SMilanka Ringwald hci_reserve_packet_buffer(); 275fcebe167SMilanka Ringwald uint8_t status = hci_send_cmd(&hci_write_loopback_mode, 1); 276fcebe167SMilanka Ringwald CHECK_EQUAL(ERROR_CODE_COMMAND_DISALLOWED, status); 277fcebe167SMilanka Ringwald } 278fcebe167SMilanka Ringwald 279fcebe167SMilanka Ringwald TEST(HCI, hci_power_control){ 280fcebe167SMilanka Ringwald int status = hci_power_control(HCI_POWER_ON); 281fcebe167SMilanka Ringwald CHECK_EQUAL(0, status); 282fcebe167SMilanka Ringwald } 283fcebe167SMilanka Ringwald 284d3762d15SMatthias Ringwald TEST(HCI, NumPeripherals){ 285d3762d15SMatthias Ringwald gap_set_max_number_peripheral_connections(1); 286d3762d15SMatthias Ringwald } 287d3762d15SMatthias Ringwald 288d3762d15SMatthias Ringwald TEST(HCI, MaxAclLen){ 289d3762d15SMatthias Ringwald hci_max_acl_data_packet_length(); 290d3762d15SMatthias Ringwald } 291d3762d15SMatthias Ringwald 292d3762d15SMatthias Ringwald TEST(HCI, Flushable){ 293d3762d15SMatthias Ringwald hci_non_flushable_packet_boundary_flag_supported(); 294d3762d15SMatthias Ringwald } 295d3762d15SMatthias Ringwald 296d3762d15SMatthias Ringwald TEST(HCI, DoubleReserve){ 297d3762d15SMatthias Ringwald CHECK_TRUE(hci_reserve_packet_buffer()); 298d3762d15SMatthias Ringwald CHECK_FALSE(hci_reserve_packet_buffer()); 299d3762d15SMatthias Ringwald } 300d3762d15SMatthias Ringwald 301d3762d15SMatthias Ringwald TEST(HCI, RemovePacketHandler){ 302d3762d15SMatthias Ringwald hci_remove_event_handler(NULL); 303d3762d15SMatthias Ringwald } 304d3762d15SMatthias Ringwald 305d3762d15SMatthias Ringwald static void dummy_fn(const void * config){}; 306d3762d15SMatthias Ringwald TEST(HCI, SetChipset){ 307d3762d15SMatthias Ringwald hci_set_chipset(NULL); 308d3762d15SMatthias Ringwald btstack_chipset_t chipset_driver = { 0 }; 309d3762d15SMatthias Ringwald hci_set_chipset(NULL); 310d3762d15SMatthias Ringwald chipset_driver.init = dummy_fn; 311d3762d15SMatthias Ringwald } 312d3762d15SMatthias Ringwald 313d3762d15SMatthias Ringwald TEST(HCI, SetControl){ 314d3762d15SMatthias Ringwald btstack_control_t hardware_control = { .init = &dummy_fn}; 315d3762d15SMatthias Ringwald hci_set_control(&hardware_control); 316d3762d15SMatthias Ringwald } 317d3762d15SMatthias Ringwald 318d3762d15SMatthias Ringwald //TEST(HCI, Close){ 319d3762d15SMatthias Ringwald // hci_close(); 320d3762d15SMatthias Ringwald //} 321d3762d15SMatthias Ringwald 322d3762d15SMatthias Ringwald TEST(HCI, SetPublicAddress){ 323d3762d15SMatthias Ringwald bd_addr_t addr = { 0 }; 324d3762d15SMatthias Ringwald hci_set_bd_addr(addr); 325d3762d15SMatthias Ringwald } 326d3762d15SMatthias Ringwald 327d3762d15SMatthias Ringwald TEST(HCI, DisconnectSecurityBlock){ 328d3762d15SMatthias Ringwald hci_disconnect_security_block(HCI_CON_HANDLE_INVALID); 329d3762d15SMatthias Ringwald hci_disconnect_security_block(3); 330d3762d15SMatthias Ringwald } 331d3762d15SMatthias Ringwald 332d3762d15SMatthias Ringwald TEST(HCI, SetDuplicateFilter){ 333d3762d15SMatthias Ringwald gap_set_scan_duplicate_filter(true); 334d3762d15SMatthias Ringwald } 335d3762d15SMatthias Ringwald 336d3762d15SMatthias Ringwald TEST(HCI, ConnectCancel){ 337d3762d15SMatthias Ringwald gap_connect_cancel(); 338d3762d15SMatthias Ringwald } 339d3762d15SMatthias Ringwald 340d3762d15SMatthias Ringwald TEST(HCI, SetGapConnParams){ 341d3762d15SMatthias Ringwald gap_set_connection_parameters(0, 0, 0, 0, 0, 0, 0, 0); 342d3762d15SMatthias Ringwald } 343d3762d15SMatthias Ringwald 344d3762d15SMatthias Ringwald TEST(HCI, UpdateConnParams){ 345d3762d15SMatthias Ringwald gap_update_connection_parameters(HCI_CON_HANDLE_INVALID, 0, 0, 0, 0); 346d3762d15SMatthias Ringwald gap_update_connection_parameters(5, 0, 0, 0, 0); 347d3762d15SMatthias Ringwald } 348d3762d15SMatthias Ringwald 349d3762d15SMatthias Ringwald TEST(HCI, RequestConnParamUpdate){ 350d3762d15SMatthias Ringwald gap_request_connection_parameter_update(HCI_CON_HANDLE_INVALID, 0, 0, 0, 0); 351d3762d15SMatthias Ringwald gap_request_connection_parameter_update(5, 0, 0, 0, 0); 352d3762d15SMatthias Ringwald } 353d3762d15SMatthias Ringwald 354d3762d15SMatthias Ringwald TEST(HCI, SetScanResponse){ 355d3762d15SMatthias Ringwald gap_scan_response_set_data(0, NULL); 356d3762d15SMatthias Ringwald } 357d3762d15SMatthias Ringwald 358d3762d15SMatthias Ringwald TEST(HCI, SetAddrType){ 359d3762d15SMatthias Ringwald hci_le_set_own_address_type(0); 360d3762d15SMatthias Ringwald hci_le_set_own_address_type(1); 361d3762d15SMatthias Ringwald } 362d3762d15SMatthias Ringwald 363d3762d15SMatthias Ringwald TEST(HCI, AdvEnable){ 364d3762d15SMatthias Ringwald gap_advertisements_enable(0); 365d3762d15SMatthias Ringwald gap_advertisements_enable(1); 366d3762d15SMatthias Ringwald } 367d3762d15SMatthias Ringwald 368d3762d15SMatthias Ringwald TEST(HCI, SetRandomAddr){ 369d3762d15SMatthias Ringwald bd_addr_t addr = { 0 }; 370d3762d15SMatthias Ringwald hci_le_random_address_set(addr); 371d3762d15SMatthias Ringwald } 372d3762d15SMatthias Ringwald 373d3762d15SMatthias Ringwald TEST(HCI, Disconnect){ 374d3762d15SMatthias Ringwald gap_disconnect(HCI_CON_HANDLE_INVALID); 375d3762d15SMatthias Ringwald gap_disconnect(5); 376d3762d15SMatthias Ringwald } 377d3762d15SMatthias Ringwald 378d3762d15SMatthias Ringwald TEST(HCI, GetRole){ 379d3762d15SMatthias Ringwald gap_get_role(HCI_CON_HANDLE_INVALID); 380d3762d15SMatthias Ringwald gap_get_role(5); 381d3762d15SMatthias Ringwald } 382d3762d15SMatthias Ringwald 383d3762d15SMatthias Ringwald int main (int argc, const char * argv[]){ 384fcebe167SMilanka Ringwald btstack_run_loop_init(btstack_run_loop_posix_get_instance()); 385d3762d15SMatthias Ringwald return CommandLineTestRunner::RunAllTests(argc, argv); 386d3762d15SMatthias Ringwald } 387