xref: /btstack/test/gap/hci_test.cpp (revision e406aa8dcddf82d5948c432ea27798047dd9413d)
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