diff --git a/example/embedded/ancs_client_demo.c b/example/embedded/ancs_client_demo.c index b4a02578b..05a4bb384 100644 --- a/example/embedded/ancs_client_demo.c +++ b/example/embedded/ancs_client_demo.c @@ -72,7 +72,7 @@ // ancs client demo profile #include "ancs_client_demo.h" -const uint8_t adv_data[] = { +static const uint8_t adv_data[] = { // Flags general discoverable 0x02, 0x01, 0x02, // Name @@ -80,7 +80,8 @@ const uint8_t adv_data[] = { // Service Solicitation, 128-bit UUIDs - ANCS (little endian) 0x11,0x15,0xD0,0x00,0x2D,0x12,0x1E,0x4B,0x0F,0xA4,0x99,0x4E,0xCE,0xB5,0x31,0xF4,0x05,0x79 }; -uint8_t adv_data_len = sizeof(adv_data); +static uint8_t adv_data_len = sizeof(adv_data); +static btstack_packet_callback_registration_t hci_event_callback_registration; static void app_packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ switch (packet_type) { @@ -122,11 +123,19 @@ static void ancs_callback(uint8_t packet_type, uint8_t *packet, uint16_t size){ } } +static void hci_event_handler(uint8_t packet_type, uint8_t * packet, uint16_t size){ + app_packet_handler(packet_type, 0, packet, size); +} + int btstack_main(int argc, const char * argv[]); int btstack_main(int argc, const char * argv[]){ printf("BTstack ANCS Client starting up...\n"); + // register for HCI events + hci_event_callback_registration.callback = &hci_event_handler; + hci_add_event_handler(&hci_event_callback_registration); + // set up l2cap_le l2cap_init(); diff --git a/example/embedded/gap_le_advertisements.c b/example/embedded/gap_le_advertisements.c index c41b73fad..92f98de09 100644 --- a/example/embedded/gap_le_advertisements.c +++ b/example/embedded/gap_le_advertisements.c @@ -72,6 +72,7 @@ static void gap_le_advertisements_setup(void){ hci_event_callback_registration.callback = &packet_handler; hci_add_event_handler(&hci_event_callback_registration); } + /* LISTING_END */ /* @section GAP LE Advertising Data Dumper diff --git a/example/embedded/gatt_battery_query.c b/example/embedded/gatt_battery_query.c index f30d049a4..89cb9045b 100644 --- a/example/embedded/gatt_battery_query.c +++ b/example/embedded/gatt_battery_query.c @@ -91,6 +91,7 @@ static le_service_t battery_service; static le_characteristic_t config_characteristic; static gc_state_t state = TC_IDLE; +static btstack_packet_callback_registration_t hci_event_callback_registration; static void printUUID(uint8_t * uuid128, uint16_t uuid16){ if (uuid16){ @@ -234,7 +235,7 @@ static void fill_advertising_report_from_packet(advertising_report_t * report, u dump_advertising_report(report); } -static void handle_hci_event(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ +static void hci_event_handler(uint8_t packet_type, uint8_t *packet, uint16_t size){ if (packet_type != HCI_EVENT_PACKET) return; advertising_report_t report; uint8_t event = packet[0]; @@ -304,8 +305,10 @@ int btstack_main(int argc, const char * argv[]){ return 0; } + hci_event_callback_registration.callback = &hci_event_handler; + hci_add_event_handler(&hci_event_callback_registration); + l2cap_init(); - l2cap_register_packet_handler(&handle_hci_event); gatt_client_init(); gc_id = gatt_client_register_packet_handler(&handle_gatt_client_event); diff --git a/example/embedded/gatt_browser.c b/example/embedded/gatt_browser.c index 9a6883201..b84a1e700 100644 --- a/example/embedded/gatt_browser.c +++ b/example/embedded/gatt_browser.c @@ -85,11 +85,12 @@ typedef struct advertising_report { static bd_addr_t cmdline_addr = { }; static int cmdline_addr_found = 0; -uint16_t gc_handle; +static uint16_t gc_handle; static le_service_t services[40]; static int service_count = 0; static int service_index = 0; +static btstack_packet_callback_registration_t hci_event_callback_registration; /* @section GATT client setup * @@ -105,16 +106,20 @@ static uint16_t gc_id; // Handles connect, disconnect, and advertising report events, // starts the GATT client, and sends the first query. -static void handle_hci_event(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size); +static void handle_hci_event(uint8_t packet_type, uint8_t *packet, uint16_t size); // Handles GATT client query results, sends queries and the // GAP disconnect command when the querying is done. void handle_gatt_client_event(uint8_t packet_type, uint8_t *packet, uint16_t size); static void gatt_client_setup(void){ + + // register for HCI events + hci_event_callback_registration.callback = &handle_hci_event; + hci_add_event_handler(&hci_event_callback_registration); + // Initialize L2CAP and register HCI event handler l2cap_init(); - l2cap_register_packet_handler(&handle_hci_event); // Initialize GATT client gatt_client_init(); @@ -180,7 +185,7 @@ static void fill_advertising_report_from_packet(advertising_report_t * report, u */ /* LISTING_START(GATTBrowserHCIPacketHandler): Connecting and disconnecting from the GATT client */ -static void handle_hci_event(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ +static void handle_hci_event(uint8_t packet_type, uint8_t *packet, uint16_t size){ if (packet_type != HCI_EVENT_PACKET) return; advertising_report_t report; diff --git a/example/embedded/hsp_hs_test.c b/example/embedded/hsp_hs_test.c index 6858e7da3..d21f9f756 100644 --- a/example/embedded/hsp_hs_test.c +++ b/example/embedded/hsp_hs_test.c @@ -76,6 +76,8 @@ #include "l2cap.h" #include "btstack_debug.h" +static btstack_packet_callback_registration_t hci_event_callback_registration; + static uint8_t hsp_service_buffer[150]; static const uint8_t rfcomm_channel_nr = 1; static const char hsp_hs_service_name[] = "Headset Test"; @@ -215,6 +217,9 @@ static void packet_handler(uint8_t * event, uint16_t event_size){ break; } } +static void hci_event_handler(uint8_t packet_type, uint8_t * packet, uint16_t size){ + packet_handler(packet, size); +} int btstack_main(int argc, const char * argv[]); int btstack_main(int argc, const char * argv[]){ @@ -223,16 +228,17 @@ int btstack_main(int argc, const char * argv[]){ compute_signal(); #endif - // 8-bit, 2's complement (== int8_t) - // 16-bit samples probably required for USB: - // hci_set_sco_voice_setting(0x0060); - - hci_register_sco_packet_handler(&sco_packet_handler); - hci_discoverable_control(1); hci_ssp_set_io_capability(SSP_IO_CAPABILITY_DISPLAY_YES_NO); gap_set_local_name("BTstack HSP HS"); + // register for HCI events + hci_event_callback_registration.callback = &hci_event_handler; + hci_add_event_handler(&hci_event_callback_registration); + + // register for SCO packets + hci_register_sco_packet_handler(&sco_packet_handler); + hsp_hs_init(rfcomm_channel_nr); hsp_hs_register_packet_handler(packet_handler); diff --git a/example/embedded/le_counter.c b/example/embedded/le_counter.c index 8751c4752..98920bbfb 100644 --- a/example/embedded/le_counter.c +++ b/example/embedded/le_counter.c @@ -85,8 +85,9 @@ /* LISTING_START(MainConfiguration): Init L2CAP SM ATT Server and start heartbeat timer */ static int le_notification_enabled; static btstack_timer_source_t heartbeat; +static btstack_packet_callback_registration_t hci_event_callback_registration; -static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size); +static void packet_handler (uint8_t packet_type, uint8_t *packet, uint16_t size); static uint16_t att_read_callback(uint16_t con_handle, uint16_t att_handle, uint16_t offset, uint8_t * buffer, uint16_t buffer_size); static int att_write_callback(uint16_t con_handle, uint16_t att_handle, uint16_t transaction_mode, uint16_t offset, uint8_t *buffer, uint16_t buffer_size); static void heartbeat_handler(struct btstack_timer_source *ts); @@ -101,8 +102,12 @@ const uint8_t adv_data[] = { const uint8_t adv_data_len = sizeof(adv_data); static void le_counter_setup(void){ + + // register for HCI events + hci_event_callback_registration.callback = &packet_handler; + hci_add_event_handler(&hci_event_callback_registration); + l2cap_init(); - l2cap_register_packet_handler(packet_handler); // setup le device db le_device_db_init(); @@ -137,7 +142,7 @@ static void le_counter_setup(void){ */ /* LISTING_START(packetHandler): Packet Handler */ -static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ +static void packet_handler (uint8_t packet_type, uint8_t *packet, uint16_t size){ switch (packet_type) { case HCI_EVENT_PACKET: switch (packet[0]) { diff --git a/example/embedded/le_streamer.c b/example/embedded/le_streamer.c index 204181834..14ef2cb70 100644 --- a/example/embedded/le_streamer.c +++ b/example/embedded/le_streamer.c @@ -74,8 +74,10 @@ static int le_notification_enabled; static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size); +static void hci_event_handler(uint8_t packet_type, uint8_t * packet, uint16_t size); static int att_write_callback(uint16_t con_handle, uint16_t att_handle, uint16_t transaction_mode, uint16_t offset, uint8_t *buffer, uint16_t buffer_size); static void streamer(void); +static btstack_packet_callback_registration_t hci_event_callback_registration; const uint8_t adv_data[] = { // Flags general discoverable @@ -102,6 +104,11 @@ static uint16_t conn_handle; /* LISTING_START(MainConfiguration): Init L2CAP, SM, ATT Server, and enable advertisements */ static void le_streamer_setup(void){ + + // register for HCI events + hci_event_callback_registration.callback = &hci_event_handler; + hci_add_event_handler(&hci_event_callback_registration); + l2cap_init(); // setup le device db @@ -198,6 +205,10 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack streamer(); } +static void hci_event_handler(uint8_t packet_type, uint8_t * packet, uint16_t size){ + packet_handler(packet_type, 0, packet, size); +} + /* LISTING_END */ /* * @section Streamer diff --git a/example/embedded/panu_demo.c b/example/embedded/panu_demo.c index 277e1f654..cff98e59d 100644 --- a/example/embedded/panu_demo.c +++ b/example/embedded/panu_demo.c @@ -125,6 +125,7 @@ static char tap_dev_name[16] = "bnep%d"; static btstack_data_source_t tap_dev_ds; +static btstack_packet_callback_registration_t hci_event_callback_registration; /* @section Main application configuration * @@ -137,9 +138,13 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack static void handle_sdp_client_query_result(uint8_t packet_type, uint8_t *packet, uint16_t size); static void panu_setup(void){ + + // register for HCI events + hci_event_callback_registration.callback = &packet_handler; + hci_add_event_handler(&hci_event_callback_registration); + // Initialize L2CAP l2cap_init(); - l2cap_register_packet_handler(packet_handler); // Initialise BNEP bnep_init(); diff --git a/example/embedded/sdp_bnep_query.c b/example/embedded/sdp_bnep_query.c index 9c41b9278..7c6731a4d 100644 --- a/example/embedded/sdp_bnep_query.c +++ b/example/embedded/sdp_bnep_query.c @@ -71,6 +71,7 @@ static uint8_t attribute_value[1000]; static const int attribute_value_buffer_size = sizeof(attribute_value); static bd_addr_t remote = {0x04,0x0C,0xCE,0xE4,0x85,0xD3}; +static btstack_packet_callback_registration_t hci_event_callback_registration; static void assertBuffer(int size){ if (size > attribute_value_buffer_size){ @@ -88,13 +89,17 @@ static void assertBuffer(int size){ */ /* LISTING_START(SDPClientInit): SDP client setup */ -static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size); +static void packet_handler (uint8_t packet_type, uint8_t *packet, uint16_t size); static void handle_sdp_client_query_result(uint8_t packet_type, uint8_t *packet, uint16_t size); static void sdp_client_init(void){ + + // register for HCI events + hci_event_callback_registration.callback = &packet_handler; + hci_add_event_handler(&hci_event_callback_registration); + // init L2CAP l2cap_init(); - l2cap_register_packet_handler(packet_handler); sdp_parser_init(); sdp_parser_register_callback(handle_sdp_client_query_result); @@ -111,7 +116,7 @@ static void sdp_client_init(void){ */ /* LISTING_START(SDPQueryUUID): Querying the a list of service records on a remote device. */ -static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ +static void packet_handler (uint8_t packet_type, uint8_t *packet, uint16_t size){ if (packet_type != HCI_EVENT_PACKET) return; uint8_t event = packet[0]; diff --git a/example/embedded/sdp_general_query.c b/example/embedded/sdp_general_query.c index dd9cf4b0a..73bdd8b1f 100644 --- a/example/embedded/sdp_general_query.c +++ b/example/embedded/sdp_general_query.c @@ -67,6 +67,7 @@ int attribute_id = -1; static uint8_t attribute_value[1000]; static const int attribute_value_buffer_size = sizeof(attribute_value); +static btstack_packet_callback_registration_t hci_event_callback_registration; /* @section SDP Client Setup * @@ -78,13 +79,17 @@ static const int attribute_value_buffer_size = sizeof(attribute_value); */ /* LISTING_START(SDPClientInit): SDP client setup */ -static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size); +static void packet_handler (uint8_t packet_type, uint8_t *packet, uint16_t size); static void handle_sdp_client_query_result(uint8_t packet_type, uint8_t *packet, uint16_t size); static void sdp_client_init(void){ + + // register for HCI events + hci_event_callback_registration.callback = &packet_handler; + hci_add_event_handler(&hci_event_callback_registration); + // init L2CAP l2cap_init(); - l2cap_register_packet_handler(packet_handler); sdp_parser_init(); sdp_parser_register_callback(handle_sdp_client_query_result); @@ -106,7 +111,7 @@ static bd_addr_t remote = {0x04,0x0C,0xCE,0xE4,0x85,0xD3}; /* LISTING_END */ /* LISTING_START(SDPQueryUUID): Querying a list of service records on a remote device. */ -static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ +static void packet_handler (uint8_t packet_type, uint8_t *packet, uint16_t size){ // printf("packet_handler type %u, packet[0] %x\n", packet_type, packet[0]); if (packet_type != HCI_EVENT_PACKET) return; diff --git a/example/embedded/sdp_rfcomm_query.c b/example/embedded/sdp_rfcomm_query.c index 0761aeda5..d22e691ab 100644 --- a/example/embedded/sdp_rfcomm_query.c +++ b/example/embedded/sdp_rfcomm_query.c @@ -65,9 +65,10 @@ static bd_addr_t remote = {0x84, 0x38, 0x35, 0x65, 0xD1, 0x15}; static uint8_t service_index = 0; static uint8_t channel_nr[10]; static char* service_name[10]; +static btstack_packet_callback_registration_t hci_event_callback_registration; -static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ +static void packet_handler (uint8_t packet_type, uint8_t *packet, uint16_t size){ // printf("packet_handler type %u, packet[0] %x\n", packet_type, packet[0]); if (packet_type != HCI_EVENT_PACKET) return; @@ -125,9 +126,12 @@ int btstack_main(int argc, const char * argv[]){ printf("Client HCI init done\r\n"); + // register for HCI events + hci_event_callback_registration.callback = &packet_handler; + hci_add_event_handler(&hci_event_callback_registration); + // init L2CAP l2cap_init(); - l2cap_register_packet_handler(packet_handler); sdp_query_rfcomm_register_callback(handle_query_rfcomm_event); diff --git a/example/embedded/spp_and_le_counter.c b/example/embedded/spp_and_le_counter.c index bb0fd1d04..e9fba2cf8 100644 --- a/example/embedded/spp_and_le_counter.c +++ b/example/embedded/spp_and_le_counter.c @@ -87,6 +87,8 @@ static int counter = 0; static char counter_string[30]; static int counter_string_len; +static btstack_packet_callback_registration_t hci_event_callback_registration; + /* * @section Advertisements * @@ -179,6 +181,10 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack } } +static void hci_event_handler(uint8_t packet_type, uint8_t * packet, uint16_t size){ + packet_handler(packet_type, 0, packet, size); +} + // ATT Client Read Callback for Dynamic Data // - if buffer == NULL, don't copy data, just return size of value // - if buffer != NULL, copy data and return number bytes copied @@ -250,8 +256,11 @@ int btstack_main(void) { hci_discoverable_control(1); + // register for HCI events + hci_event_callback_registration.callback = &hci_event_handler; + hci_add_event_handler(&hci_event_callback_registration); + l2cap_init(); - l2cap_register_packet_handler(packet_handler); rfcomm_init(); rfcomm_register_packet_handler(packet_handler); diff --git a/example/embedded/spp_counter.c b/example/embedded/spp_counter.c index ec192879e..692628d1e 100644 --- a/example/embedded/spp_counter.c +++ b/example/embedded/spp_counter.c @@ -70,9 +70,11 @@ #define HEARTBEAT_PERIOD_MS 1000 static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size); +static void hci_event_handler(uint8_t packet_type, uint8_t * packet, uint16_t size); static uint16_t rfcomm_channel_id; static uint8_t spp_service_buffer[150]; +static btstack_packet_callback_registration_t hci_event_callback_registration; /* @section SPP Service Setup @@ -91,8 +93,12 @@ static uint8_t spp_service_buffer[150]; /* LISTING_START(SPPSetup): SPP service setup */ static void spp_service_setup(void){ + + // register for HCI events + hci_event_callback_registration.callback = &hci_event_handler; + hci_add_event_handler(&hci_event_callback_registration); + l2cap_init(); - l2cap_register_packet_handler(packet_handler); rfcomm_init(); rfcomm_register_packet_handler(packet_handler); @@ -252,6 +258,9 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack } /* LISTING_RESUME */ } +static void hci_event_handler(uint8_t packet_type, uint8_t * packet, uint16_t size){ + packet_handler(packet_type, 0, packet, size); +} /* LISTING_END */ int btstack_main(int argc, const char * argv[]); diff --git a/example/embedded/spp_flowcontrol.c b/example/embedded/spp_flowcontrol.c index aaab6bba6..f508c8da7 100644 --- a/example/embedded/spp_flowcontrol.c +++ b/example/embedded/spp_flowcontrol.c @@ -68,6 +68,7 @@ static uint8_t rfcomm_channel_nr = 1; static uint16_t rfcomm_channel_id; static uint8_t rfcomm_send_credit = 0; static uint8_t spp_service_buffer[150]; +static btstack_packet_callback_registration_t hci_event_callback_registration; /* @section SPP Service Setup * @@ -80,9 +81,13 @@ static uint8_t spp_service_buffer[150]; /* LISTING_START(explicitFlowControl): Providing one initial credit during RFCOMM service initialization */ static void spp_service_setup(void){ + + // register for HCI events + hci_event_callback_registration.callback = &packet_handler; + hci_add_event_handler(&hci_event_callback_registration); + // init L2CAP l2cap_init(); - l2cap_register_packet_handler(packet_handler); // init RFCOMM rfcomm_init(); diff --git a/example/embedded/spp_streamer.c b/example/embedded/spp_streamer.c index 4e5eb5ad6..ad84614f6 100644 --- a/example/embedded/spp_streamer.c +++ b/example/embedded/spp_streamer.c @@ -84,6 +84,7 @@ static uint16_t mtu; static uint16_t rfcomm_cid = 0; static uint32_t data_to_send = DATA_VOLUME; static state_t state = W4_SDP_RESULT; +static btstack_packet_callback_registration_t hci_event_callback_registration; static void create_test_data(void){ int x,y; @@ -150,6 +151,9 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack break; } } +static void hci_event_handler(uint8_t packet_type, uint8_t * packet, uint16_t size){ + packet_handler(packet_type, 0, packet, size); +} static void handle_found_service(const char * name, uint8_t port){ printf("APP: Service name: '%s', RFCOMM port %u\n", name, port); @@ -189,9 +193,12 @@ int btstack_main(int argc, const char * argv[]){ printf("Client HCI init done\r\n"); + // register for HCI events + hci_event_callback_registration.callback = &hci_event_handler; + hci_add_event_handler(&hci_event_callback_registration); + // init L2CAP l2cap_init(); - l2cap_register_packet_handler(packet_handler); rfcomm_register_packet_handler(packet_handler); diff --git a/platform/daemon/daemon.c b/platform/daemon/daemon.c index 1dfd1ceb6..136635ae8 100644 --- a/platform/daemon/daemon.c +++ b/platform/daemon/daemon.c @@ -192,6 +192,8 @@ static uint16_t gatt_client_id = 0; static void (*bluetooth_status_handler)(BLUETOOTH_STATE state) = dummy_bluetooth_status_handler; +static btstack_packet_callback_registration_t hci_event_callback_registration; + static int global_enable = 0; static btstack_link_key_db_t const * btstack_link_key_db = NULL; @@ -1637,6 +1639,9 @@ static void daemon_packet_handler(void * connection, uint8_t packet_type, uint16 daemon_emit_packet(connection, packet_type, channel, packet, size); } +static void hci_packet_handler(uint8_t packet_type, uint8_t * packet, uint16_t size){ + daemon_packet_handler(NULL, packet_type, 0, packet, size); +} static void l2cap_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t * packet, uint16_t size){ daemon_packet_handler(NULL, packet_type, channel, packet, size); } @@ -2067,6 +2072,10 @@ int main (int argc, char * const * argv){ hci_ssp_set_enable(0); #endif + // register for HCI events + hci_event_callback_registration.callback = &hci_packet_handler; + hci_add_event_handler(&hci_event_callback_registration); + // init L2CAP l2cap_init(); l2cap_register_packet_handler(&l2cap_packet_handler); diff --git a/port/ez430-rf2560/example/ant_test.c b/port/ez430-rf2560/example/ant_test.c index bd6e80bc1..8650ea93c 100644 --- a/port/ez430-rf2560/example/ant_test.c +++ b/port/ez430-rf2560/example/ant_test.c @@ -76,6 +76,7 @@ static uint8_t rfcomm_channel_nr = 1; static uint16_t rfcomm_channel_id = 0; static uint8_t spp_service_buffer[100]; +static btstack_packet_callback_registration_t hci_event_callback_registration; // Bluetooth logic static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ @@ -193,6 +194,10 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack } } +static void hci_event_handler(uint8_t packet_type, uint8_t * packet, uint16_t size){ + packet_handler(packet, size); +} + static void heartbeat_handler(struct btstack_timer_source *ts){ if (rfcomm_channel_id){ @@ -215,9 +220,12 @@ static void heartbeat_handler(struct btstack_timer_source *ts){ int btstack_main(int argc, const char * argv[]); int btstack_main(int argc, const char * argv[]){ + // register for HCI events + hci_event_callback_registration.callback = &hci_event_handler; + hci_add_event_handler(&hci_event_callback_registration); + // init L2CAP l2cap_init(); - l2cap_register_packet_handler(packet_handler); // init RFCOMM rfcomm_init(); diff --git a/port/ez430-rf2560/example/spp_accel.c b/port/ez430-rf2560/example/spp_accel.c index 7fc4f6521..761bc0c14 100644 --- a/port/ez430-rf2560/example/spp_accel.c +++ b/port/ez430-rf2560/example/spp_accel.c @@ -76,6 +76,7 @@ char lineBuffer[80]; static uint8_t rfcomm_channel_nr = 1; static uint16_t rfcomm_channel_id; static uint8_t spp_service_buffer[150]; +static btstack_packet_callback_registration_t hci_event_callback_registration; // SPP description static uint8_t accel_buffer[6]; @@ -197,6 +198,10 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack break; } } +static void hci_event_handler(uint8_t packet_type, uint8_t * packet, uint16_t size){ + packet_handler(packet, size); +} + int btstack_main(int argc, const char * argv[]); int btstack_main(int argc, const char * argv[]){ @@ -205,9 +210,12 @@ int btstack_main(int argc, const char * argv[]){ halAccelerometerInit(); prepare_accel_packet(); + // register for HCI events + hci_event_callback_registration.callback = &hci_event_handler; + hci_add_event_handler(&hci_event_callback_registration); + // init L2CAP l2cap_init(); - l2cap_register_packet_handler(packet_handler); // init RFCOMM rfcomm_init(); diff --git a/port/msp-exp430f5438-cc2564b/example/ant_test.c b/port/msp-exp430f5438-cc2564b/example/ant_test.c index c0da210ce..16b36c20d 100644 --- a/port/msp-exp430f5438-cc2564b/example/ant_test.c +++ b/port/msp-exp430f5438-cc2564b/example/ant_test.c @@ -76,6 +76,7 @@ static uint8_t rfcomm_channel_nr = 1; static uint16_t rfcomm_channel_id = 0; static uint8_t spp_service_buffer[100]; +static btstack_packet_callback_registration_t hci_event_callback_registration; // Bluetooth logic static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ @@ -192,6 +193,9 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack break; } } +static void hci_event_handler(uint8_t packet_type, uint8_t * packet, uint16_t size){ + packet_handler(packet, size); +} static void heartbeat_handler(struct btstack_timer_source *ts){ @@ -215,9 +219,12 @@ static void heartbeat_handler(struct btstack_timer_source *ts){ int btstack_main(int argc, const char * argv[]); int btstack_main(int argc, const char * argv[]){ + // register for HCI events + hci_event_callback_registration.callback = &hci_event_handler; + hci_add_event_handler(&hci_event_callback_registration); + // init L2CAP l2cap_init(); - l2cap_register_packet_handler(packet_handler); // init RFCOMM rfcomm_init(); diff --git a/port/msp-exp430f5438-cc2564b/example/hid_demo.c b/port/msp-exp430f5438-cc2564b/example/hid_demo.c index 6c5eb65be..7b0b18f6d 100644 --- a/port/msp-exp430f5438-cc2564b/example/hid_demo.c +++ b/port/msp-exp430f5438-cc2564b/example/hid_demo.c @@ -86,6 +86,8 @@ typedef enum { static state_t state = 0; +static btstack_packet_callback_registration_t hci_event_callback_registration; + #define KEYCODE_RETURN '\n' #define KEYCODE_ESCAPE 27 #define KEYCODE_TAB '\t' @@ -341,6 +343,9 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack } } } +static void hci_event_handler(uint8_t packet_type, uint8_t * packet, uint16_t size){ + packet_handler(packet, size); +} static hci_transport_config_uart_t config = { HCI_TRANSPORT_CONFIG_UART, @@ -383,9 +388,12 @@ int main(void){ // use eHCILL btstack_chipset_cc256x_enable_ehcill(1); + // register for HCI events + hci_event_callback_registration.callback = &hci_event_handler; + hci_add_event_handler(&hci_event_callback_registration); + // init L2CAP l2cap_init(); - l2cap_register_packet_handler(packet_handler); // ready - enable irq used in h4 task __enable_interrupt(); diff --git a/port/msp-exp430f5438-cc2564b/example/spp_accel.c b/port/msp-exp430f5438-cc2564b/example/spp_accel.c index 51bb0e2d6..17607f1c4 100644 --- a/port/msp-exp430f5438-cc2564b/example/spp_accel.c +++ b/port/msp-exp430f5438-cc2564b/example/spp_accel.c @@ -80,6 +80,8 @@ static uint8_t spp_service_buffer[150]; // SPP description static uint8_t accel_buffer[6]; +static btstack_packet_callback_registration_t hci_event_callback_registration; + static void prepare_accel_packet(void){ int16_t accl_x; int16_t accl_y; @@ -197,6 +199,9 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack break; } } +static void hci_event_handler(uint8_t packet_type, uint8_t * packet, uint16_t size){ + packet_handler(packet, size); +} int btstack_main(int argc, const char * argv[]); int btstack_main(int argc, const char * argv[]){ @@ -205,9 +210,12 @@ int btstack_main(int argc, const char * argv[]){ halAccelerometerInit(); prepare_accel_packet(); + // register for HCI events + hci_event_callback_registration.callback = &hci_event_handler; + hci_add_event_handler(&hci_event_callback_registration); + // init L2CAP l2cap_init(); - l2cap_register_packet_handler(packet_handler); // init RFCOMM rfcomm_init(); diff --git a/src/ble/sm.c b/src/ble/sm.c index 5c75a0a16..4657b32b5 100644 --- a/src/ble/sm.c +++ b/src/ble/sm.c @@ -314,7 +314,7 @@ static void sm_truncate_key(sm_key_t key, int max_encryption_size){ static void sm_timeout_handler(btstack_timer_source_t * timer){ log_info("SM timeout"); - sm_connection_t * sm_conn = btstack_run_loop_get_timer_context(timer); + sm_connection_t * sm_conn = (sm_connection_t*) btstack_run_loop_get_timer_context(timer); sm_conn->sm_engine_state = SM_GENERAL_TIMEOUT; sm_done_for_handle(sm_conn->sm_handle); diff --git a/src/classic/hfp.c b/src/classic/hfp.c index 88876e59f..d06d477de 100644 --- a/src/classic/hfp.c +++ b/src/classic/hfp.c @@ -415,7 +415,7 @@ void hfp_create_sdp_record(uint8_t * service, uint32_t service_record_handle, ui static hfp_connection_t * connection_doing_sdp_query = NULL; -static void handle_query_rfcomm_event(uint8_t packet_type, uint8_t *packet, uint16_t size, void * context){ +static void handle_query_rfcomm_event(uint8_t packet_type, uint8_t *packet, uint16_t size){ hfp_connection_t * connection = connection_doing_sdp_query; if ( connection->state != HFP_W4_SDP_EVENT_QUERY_COMPLETE) return; @@ -1274,7 +1274,7 @@ static void parse_sequence(hfp_connection_t * context){ void hfp_init(uint16_t rfcomm_channel_nr){ rfcomm_register_service(rfcomm_channel_nr, 0xffff); - sdp_query_rfcomm_register_callback(handle_query_rfcomm_event, NULL); + sdp_query_rfcomm_register_callback(handle_query_rfcomm_event); } void hfp_establish_service_level_connection(bd_addr_t bd_addr, uint16_t service_uuid){ diff --git a/src/classic/hfp_ag.c b/src/classic/hfp_ag.c index 5cbed012c..bbeacdf75 100644 --- a/src/classic/hfp_ag.c +++ b/src/classic/hfp_ag.c @@ -62,6 +62,21 @@ #include "classic/hfp_gsm_model.h" #include "classic/hfp_ag.h" +// private prototypes +static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size); +static void hfp_run_for_context(hfp_connection_t *context); +static void hfp_ag_setup_audio_connection(hfp_connection_t * connection); +static void hfp_ag_hf_start_ringing(hfp_connection_t * context); + +// public prototypes +hfp_generic_status_indicator_t * get_hfp_generic_status_indicators(); +int get_hfp_generic_status_indicators_nr(); +void set_hfp_generic_status_indicators(hfp_generic_status_indicator_t * indicators, int indicator_nr); +void set_hfp_ag_indicators(hfp_ag_indicator_t * indicators, int indicator_nr); +int get_hfp_ag_indicators_nr(hfp_connection_t * context); +hfp_ag_indicator_t * get_hfp_ag_indicators(hfp_connection_t * context); + +// gobals static const char default_hfp_ag_service_name[] = "Voice gateway"; static uint16_t hfp_supported_features = HFP_DEFAULT_AG_SUPPORTED_FEATURES; @@ -83,17 +98,8 @@ static int hfp_ag_response_and_hold_active = 0; static hfp_phone_number_t * subscriber_numbers = NULL; static int subscriber_numbers_count = 0; -static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size); -static void hfp_run_for_context(hfp_connection_t *context); -static void hfp_ag_setup_audio_connection(hfp_connection_t * connection); -static void hfp_ag_hf_start_ringing(hfp_connection_t * context); +static btstack_packet_callback_registration_t hci_event_callback_registration; -hfp_generic_status_indicator_t * get_hfp_generic_status_indicators(); -int get_hfp_generic_status_indicators_nr(); -void set_hfp_generic_status_indicators(hfp_generic_status_indicator_t * indicators, int indicator_nr); -void set_hfp_ag_indicators(hfp_ag_indicator_t * indicators, int indicator_nr); -int get_hfp_ag_indicators_nr(hfp_connection_t * context); -hfp_ag_indicator_t * get_hfp_ag_indicators(hfp_connection_t * context); hfp_ag_indicator_t * get_hfp_ag_indicators(hfp_connection_t * context){ // TODO: save only value, and value changed in the context? @@ -1969,6 +1975,10 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe hfp_run(); } +static void hci_event_handler(uint8_t packet_type, uint8_t * packet, uint16_t size){ + packet_handler(packet_type, 0, packet, size); +} + static void hfp_ag_set_ag_indicators(hfp_ag_indicator_t * ag_indicators, int ag_indicators_nr){ hfp_ag_indicators_nr = ag_indicators_nr; memcpy(hfp_ag_indicators, ag_indicators, ag_indicators_nr * sizeof(hfp_ag_indicator_t)); @@ -1983,8 +1993,12 @@ void hfp_ag_init(uint16_t rfcomm_channel_nr, uint32_t supported_features, log_error("hfp_init: codecs_nr (%d) > HFP_MAX_NUM_CODECS (%d)", codecs_nr, HFP_MAX_NUM_CODECS); return; } + + // register for HCI events + hci_event_callback_registration.callback = &hci_event_handler; + hci_add_event_handler(&hci_event_callback_registration); + l2cap_init(); - l2cap_register_packet_handler(packet_handler); rfcomm_register_packet_handler(packet_handler); diff --git a/src/classic/hfp_hf.c b/src/classic/hfp_hf.c index b1762c02d..47aa72220 100644 --- a/src/classic/hfp_hf.c +++ b/src/classic/hfp_hf.c @@ -83,6 +83,8 @@ static hfp_callheld_status_t hfp_callheld_status; static char phone_number[25]; +static btstack_packet_callback_registration_t hci_event_callback_registration; + void hfp_hf_register_packet_handler(hfp_callback_t callback){ hfp_callback = callback; if (callback == NULL){ @@ -1022,6 +1024,10 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe hfp_run(); } +static void hci_event_handler(uint8_t packet_type, uint8_t * packet, uint16_t size){ + packet_handler(packet_type, 0, packet, size); +} + void hfp_hf_set_codecs(uint8_t * codecs, int codecs_nr){ if (codecs_nr > HFP_MAX_NUM_CODECS){ log_error("hfp_hf_set_codecs: codecs_nr (%d) > HFP_MAX_NUM_CODECS (%d)", codecs_nr, HFP_MAX_NUM_CODECS); @@ -1048,8 +1054,12 @@ void hfp_hf_set_codecs(uint8_t * codecs, int codecs_nr){ } void hfp_hf_init(uint16_t rfcomm_channel_nr, uint32_t supported_features, uint16_t * indicators, int indicators_nr, uint32_t indicators_status){ + + // register for HCI events + hci_event_callback_registration.callback = &hci_event_handler; + hci_add_event_handler(&hci_event_callback_registration); + l2cap_init(); - l2cap_register_packet_handler(packet_handler); rfcomm_register_packet_handler(packet_handler); hfp_init(rfcomm_channel_nr); diff --git a/src/classic/hsp_ag.c b/src/classic/hsp_ag.c index 904dcbab8..b66397d03 100644 --- a/src/classic/hsp_ag.c +++ b/src/classic/hsp_ag.c @@ -94,6 +94,8 @@ static uint8_t ag_send_error = 0; static uint8_t ag_num_button_press_received = 0; static uint8_t ag_support_custom_commands = 0; +static btstack_packet_callback_registration_t hci_event_callback_registration; + typedef enum { HSP_IDLE, HSP_SDP_QUERY_RFCOMM_CHANNEL, @@ -237,7 +239,6 @@ int hsp_ag_send_result(char * result){ return hsp_ag_send_str_over_rfcomm(rfcomm_cid, result); } - static void hsp_ag_reset_state(void){ hsp_state = HSP_IDLE; @@ -256,10 +257,17 @@ static void hsp_ag_reset_state(void){ ag_speaker_gain = -1; } +static void hci_event_handler(uint8_t packet_type, uint8_t * packet, uint16_t size){ + packet_handler(packet, size); +} + void hsp_ag_init(uint8_t rfcomm_channel_nr){ + // register for HCI events + hci_event_callback_registration.callback = &hci_event_handler; + hci_add_event_handler(&hci_event_callback_registration); + // init L2CAP l2cap_init(); - l2cap_register_packet_handler(packet_handler); rfcomm_init(); rfcomm_register_packet_handler(packet_handler); diff --git a/src/classic/hsp_hs.c b/src/classic/hsp_hs.c index 879d69af6..dc3547104 100644 --- a/src/classic/hsp_hs.c +++ b/src/classic/hsp_hs.c @@ -89,6 +89,8 @@ static uint8_t hs_send_button_press = 0; static uint8_t hs_support_custom_indications = 0; static uint8_t hs_outgoing_connection = 0; +static btstack_packet_callback_registration_t hci_event_callback_registration; + typedef enum { HSP_IDLE, HSP_SDP_QUERY_RFCOMM_CHANNEL, @@ -253,10 +255,17 @@ static void hsp_hs_reset_state(void){ hs_support_custom_indications = 0; } +static void hci_event_handler(uint8_t packet_type, uint8_t * packet, uint16_t size){ + packet_handler(packet, size); +} + void hsp_hs_init(uint8_t rfcomm_channel_nr){ + // register for HCI events + hci_event_callback_registration.callback = &hci_event_handler; + hci_add_event_handler(&hci_event_callback_registration); + // init L2CAP l2cap_init(); - l2cap_register_packet_handler(packet_handler); rfcomm_init(); rfcomm_register_packet_handler(packet_handler); diff --git a/src/classic/rfcomm.c b/src/classic/rfcomm.c index 0e13569da..07b7538d5 100644 --- a/src/classic/rfcomm.c +++ b/src/classic/rfcomm.c @@ -715,7 +715,7 @@ static void rfcomm_multiplexer_finalize(rfcomm_multiplexer_t * multiplexer){ } static void rfcomm_multiplexer_timer_handler(btstack_timer_source_t *timer){ - rfcomm_multiplexer_t * multiplexer = btstack_run_loop_get_timer_context(timer); + rfcomm_multiplexer_t * multiplexer = (rfcomm_multiplexer_t*) btstack_run_loop_get_timer_context(timer); if (rfcomm_multiplexer_has_channels(multiplexer)) return; log_info("rfcomm_multiplexer_timer_handler timeout: shutting down multiplexer! (no channels)"); diff --git a/src/l2cap.c b/src/l2cap.c index 988d2efdd..2af4cf76e 100644 --- a/src/l2cap.c +++ b/src/l2cap.c @@ -956,9 +956,6 @@ static void l2cap_event_handler(uint8_t *packet, uint16_t size){ break; } - // pass on: main packet handler - (*packet_handler)(HCI_EVENT_PACKET, 0, packet, size); - l2cap_run(); } diff --git a/test/ble_client/advertising_data_parser.c b/test/ble_client/advertising_data_parser.c index 83faf5962..96e66684f 100644 --- a/test/ble_client/advertising_data_parser.c +++ b/test/ble_client/advertising_data_parser.c @@ -88,6 +88,7 @@ static uint8_t adv_multi_packet[] = { }; static int adv_index = 0; +static btstack_packet_callback_registration_t hci_event_callback_registration; void CHECK_EQUAL_ARRAY(const uint8_t * expected, uint8_t * actual, int size){ for (int i=0; iopcode & 0xff, cmd->opcode >> 8, 0}; - registered_l2cap_packet_handler(HCI_EVENT_PACKET, NULL, (uint8_t *)&packet, sizeof(packet)); + registered_hci_event_handler(HCI_EVENT_PACKET, (uint8_t *)&packet, sizeof(packet)); } void mock_simulate_hci_state_working(void){ uint8_t packet[3] = {BTSTACK_EVENT_STATE, 0, HCI_STATE_WORKING}; - registered_l2cap_packet_handler(HCI_EVENT_PACKET, NULL, (uint8_t *)&packet, 3); + registered_hci_event_handler(HCI_EVENT_PACKET, (uint8_t *)&packet, 3); } void mock_simulate_connected(void){ uint8_t packet[] = {0x3E, 0x13, 0x01, 0x00, 0x40, 0x00, 0x00, 0x00, 0x9B, 0x77, 0xD1, 0xF7, 0xB1, 0x34, 0x50, 0x00, 0x00, 0x00, 0xD0, 0x07, 0x05}; - registered_l2cap_packet_handler(HCI_EVENT_PACKET, NULL, (uint8_t *)&packet, sizeof(packet)); + registered_hci_event_handler(HCI_EVENT_PACKET, (uint8_t *)&packet, sizeof(packet)); } void mock_simulate_scan_response(void){ uint8_t packet[] = {0xE2, 0x13, 0xE2, 0x01, 0x34, 0xB1, 0xF7, 0xD1, 0x77, 0x9B, 0xCC, 0x09, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}; - registered_l2cap_packet_handler(HCI_EVENT_PACKET, NULL, (uint8_t *)&packet, sizeof(packet)); + registered_hci_event_handler(HCI_EVENT_PACKET, (uint8_t *)&packet, sizeof(packet)); } uint8_t le_central_start_scan(void){ @@ -89,11 +89,10 @@ void l2cap_register_fixed_channel(btstack_packet_handler_t packet_handler, uint1 att_packet_handler = packet_handler; } -void l2cap_register_packet_handler(void (*handler)(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size)){ - registered_l2cap_packet_handler = handler; +void hci_add_event_handler(btstack_packet_callback_registration_t * callback_handler){ + registered_hci_event_handler = callback_handler->callback; } - int l2cap_reserve_packet_buffer(void){ return 1; } diff --git a/test/hfp/Makefile b/test/hfp/Makefile index fd71658f5..a827db5ba 100644 --- a/test/hfp/Makefile +++ b/test/hfp/Makefile @@ -10,6 +10,7 @@ include ${BTSTACK_ROOT}/example/embedded/Makefile.inc COMMON = \ sdp.c \ sdp_query_rfcomm.c \ + btstack_link_key_db_memory.c \ btstack_linked_list.c \ btstack_memory.c \ btstack_memory_pool.c \ @@ -21,7 +22,6 @@ COMMON = \ hci_dump.c \ l2cap.c \ l2cap_signaling.c \ - remote_device_db_memory.c \ rfcomm.c \ sdp_client.c \ sdp_parser.c \ @@ -32,14 +32,14 @@ COMMON = \ MOCK = \ mock.c \ test_sequences.c \ + btstack_link_key_db_memory.c \ btstack_linked_list.c \ btstack_memory.c \ + btstack_memory_pool.c \ + btstack_util.c \ hci_cmd.c \ hci_dump.c \ - btstack_memory_pool.c \ - remote_device_db_memory.c \ sdp_util.c \ - btstack_util.c \ COMMON_OBJ = $(COMMON:.c=.o) MOCK_OBJ = $(MOCK:.c=.o) diff --git a/test/hfp/mock.c b/test/hfp/mock.c index d2ab54f48..5c9a37232 100644 --- a/test/hfp/mock.c +++ b/test/hfp/mock.c @@ -54,7 +54,6 @@ #include "mock.h" -static void *registered_sdp_app_context; static uint8_t sdp_rfcomm_channel_nr = 1; const char sdp_rfcomm_service_name[] = "BTstackMock"; static uint16_t rfcomm_cid = 1; @@ -71,7 +70,7 @@ static uint8_t rfcomm_reserved_buffer[1000]; hfp_connection_t * hfp_context; void (*registered_rfcomm_packet_handler)(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size); -void (*registered_sdp_app_callback)(uint8_t packet_type, uint8_t *packet, uint16_t size, void * context); +void (*registered_sdp_app_callback)(uint8_t packet_type, uint8_t *packet, uint16_t size); uint8_t * get_rfcomm_payload(){ return &rfcomm_payload[0]; @@ -129,8 +128,7 @@ void print_without_newlines(uint8_t *data, uint16_t len){ } extern "C" void l2cap_init(void){} - -extern "C" void l2cap_register_packet_handler(void (*handler)(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size)){ +extern "C" void hci_add_event_handler(btstack_packet_callback_registration_t * callback_handler){ } int rfcomm_send(uint16_t rfcomm_cid, uint8_t *data, uint16_t len){ @@ -201,9 +199,8 @@ int hci_send_cmd(const hci_cmd_t *cmd, ...){ } -void sdp_query_rfcomm_register_callback(void(*sdp_app_callback)(uint8_t packet_type, uint8_t *packet, uint16_t size, void * context), void * context){ +void sdp_query_rfcomm_register_callback(void(*sdp_app_callback)(uint8_t packet_type, uint8_t *packet, uint16_t size)){ registered_sdp_app_callback = sdp_app_callback; - registered_sdp_app_context = context; } static void sdp_query_complete_response(uint8_t status){ @@ -211,7 +208,7 @@ static void sdp_query_complete_response(uint8_t status){ event[0] = SDP_EVENT_QUERY_COMPLETE; event[1] = 1; event[2] = status; - (*registered_sdp_app_callback)(HCI_EVENT_PACKET, event, sizeof(event), registered_sdp_app_context); + (*registered_sdp_app_callback)(HCI_EVENT_PACKET, event, sizeof(event)); } static void sdp_query_rfcomm_service_response(uint8_t status){ @@ -222,7 +219,7 @@ static void sdp_query_rfcomm_service_response(uint8_t status){ event[2] = sdp_rfcomm_channel_nr; memcpy(&event[3], sdp_rfcomm_service_name, sdp_service_name_len); event[3+sdp_service_name_len] = 0; - (*registered_sdp_app_callback)(HCI_EVENT_PACKET, event, sizeof(event), registered_sdp_app_context); + (*registered_sdp_app_callback)(HCI_EVENT_PACKET, event, sizeof(event)); } void sdp_query_rfcomm_channel_and_name_for_uuid(bd_addr_t remote, uint16_t uuid){ diff --git a/test/pts/bnep_test.c b/test/pts/bnep_test.c index 88023e6a0..742611eff 100644 --- a/test/pts/bnep_test.c +++ b/test/pts/bnep_test.c @@ -135,6 +135,8 @@ static size_t network_buffer_len = 0; static uint8_t panu_sdp_record[200]; +static btstack_packet_callback_registration_t hci_event_callback_registration; + static uint16_t setup_ethernet_header(int src_compressed, int dst_compressed, int broadcast, uint16_t network_protocol_type){ // setup packet int pos = 0; @@ -782,13 +784,19 @@ static void packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packe } } +static void hci_event_handler(uint8_t packet_type, uint8_t * packet, uint16_t size){ + packet_handler(packet_type, 0, packet, size); +} + int btstack_main(int argc, const char * argv[]); int btstack_main(int argc, const char * argv[]){ + /* Register for HCI events */ + hci_event_callback_registration.callback = &hci_event_handler; + hci_add_event_handler(&hci_event_callback_registration); /* Initialize L2CAP */ l2cap_init(); - l2cap_register_packet_handler(packet_handler); /* Initialise BNEP */ bnep_init(); diff --git a/test/pts/classic_test.c b/test/pts/classic_test.c index 68556b983..68dae2e0f 100644 --- a/test/pts/classic_test.c +++ b/test/pts/classic_test.c @@ -777,7 +777,6 @@ int btstack_main(int argc, const char * argv[]){ hci_add_event_handler(&hci_event_callback_registration); l2cap_init(); - l2cap_register_packet_handler(&packet_handler); l2cap_register_fixed_channel(&packet_handler, L2CAP_CID_CONNECTIONLESS_CHANNEL); rfcomm_init(); diff --git a/test/pts/hfp_test.c b/test/pts/hfp_test.c index 5a128f37a..b73480b65 100644 --- a/test/pts/hfp_test.c +++ b/test/pts/hfp_test.c @@ -70,6 +70,8 @@ static int send_err = 0; static uint8_t hfp_service_level_connection_state = 0; +static btstack_packet_callback_registration_t hci_event_callback_registration; + static void send_str_over_rfcomm(uint16_t cid, char * command){ printf("Send %s.\n", command); int err = rfcomm_send(cid, (uint8_t*) command, strlen(command)); @@ -139,6 +141,12 @@ static void packet_handler(void * connection, uint8_t packet_type, uint16_t chan } } + +static void hci_event_handler(uint8_t packet_type, uint8_t * packet, uint16_t size){ + packet_handler(packet_type, 0, packet, size); +} + + void handle_query_rfcomm_event(uint8_t packet_type, uint8_t *packet, uint16_t size, void * context){ switch (event->type){ case SDP_EVENT_QUERY_RFCOMM_SERVICE: @@ -162,9 +170,12 @@ int btstack_main(int argc, const char * argv[]){ printf("Client HCI init done\r\n"); + /* Register for HCI events */ + hci_event_callback_registration.callback = &hci_event_handler; + hci_add_event_handler(&hci_event_callback_registration); + // init L2CAP l2cap_init(); - l2cap_register_packet_handler(packet_handler); rfcomm_init(); rfcomm_register_packet_handler(packet_handler); diff --git a/test/pts/l2cap_test.c b/test/pts/l2cap_test.c index c2716da66..f4567d106 100644 --- a/test/pts/l2cap_test.c +++ b/test/pts/l2cap_test.c @@ -67,6 +67,8 @@ static bd_addr_t remote = {0x84, 0x38, 0x35, 0x65, 0xD1, 0x15}; static uint16_t handle; static uint16_t local_cid; +static btstack_packet_callback_registration_t hci_event_callback_registration; + static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ bd_addr_t event_addr; @@ -108,6 +110,11 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack } } +static void hci_event_handler(uint8_t packet_type, uint8_t * packet, uint16_t size){ + packet_handler(packet_type, 0, packet, size); +} + + static void show_usage(void){ printf("\n--- CLI for L2CAP TEST ---\n"); printf("c - create connection to SDP at addr %s\n", bd_addr_to_str(remote)); @@ -156,8 +163,11 @@ int btstack_main(int argc, const char * argv[]){ hci_set_class_of_device(0x220404); hci_discoverable_control(1); + /* Register for HCI events */ + hci_event_callback_registration.callback = &hci_event_handler; + hci_add_event_handler(&hci_event_callback_registration); + l2cap_init(); - l2cap_register_packet_handler(&packet_handler); l2cap_register_service(packet_handler, PSM_SDP, 100, LEVEL_0); // turn on! diff --git a/test/sdp_client/sdp_rfcomm_query.c b/test/sdp_client/sdp_rfcomm_query.c index e9d38af0b..cfa79beea 100644 --- a/test/sdp_client/sdp_rfcomm_query.c +++ b/test/sdp_client/sdp_rfcomm_query.c @@ -90,7 +90,7 @@ extern "C" void sdp_client_query(bd_addr_t remote, uint8_t * des_serviceSearchPa void sdp_query_rfcomm_init(); -void handle_query_rfcomm_event(uint8_t packet_type, uint8_t *packet, uint16_t size, void * context){ +void handle_query_rfcomm_event(uint8_t packet_type, uint8_t *packet, uint16_t size){ switch (packet[0]){ case SDP_EVENT_QUERY_RFCOMM_SERVICE: channel_nr[service_index] = sdp_event_query_rfcomm_service_get_rfcomm_channel(packet); @@ -112,7 +112,7 @@ TEST_GROUP(SDPClient){ void setup(void){ service_index = 0; - sdp_query_rfcomm_register_callback(handle_query_rfcomm_event, NULL); + sdp_query_rfcomm_register_callback(handle_query_rfcomm_event); sdp_parser_init(); sdp_query_rfcomm_init(); } diff --git a/test/sdp_client/service_search_query.c b/test/sdp_client/service_search_query.c index 8fc0113c8..3a8b17d20 100644 --- a/test/sdp_client/service_search_query.c +++ b/test/sdp_client/service_search_query.c @@ -44,7 +44,7 @@ static void handle_sdp_parser_event(uint8_t packet_type, uint8_t *packet, uint16 static uint32_t record_handle = sdp_test_record_list[0]; switch (packet[0]){ case SDP_EVENT_QUERY_SERVICE_RECORD_HANDLE: - CHECK_EQUAL(sdp_query_service_record_handle_event_get_record_handle(packet), record_handle); + CHECK_EQUAL(sdp_event_query_service_record_handle_get_record_handle(packet), record_handle); record_handle++; break; case SDP_EVENT_QUERY_COMPLETE: diff --git a/test/security_manager/mock.c b/test/security_manager/mock.c index c7779c52b..faadfa69c 100644 --- a/test/security_manager/mock.c +++ b/test/security_manager/mock.c @@ -11,7 +11,7 @@ static btstack_packet_handler_t le_data_handler; -static void (*event_packet_handler) (void * connection, uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size) = NULL; +static void (*event_packet_handler) (uint8_t packet_type, uint8_t *packet, uint16_t size) = NULL; static uint8_t packet_buffer[256]; static uint16_t packet_buffer_len = 0; @@ -59,7 +59,7 @@ void aes128_calc_cyphertext(uint8_t key[16], uint8_t plaintext[16], uint8_t cyph void mock_simulate_hci_event(uint8_t * packet, uint16_t size){ hci_dump_packet(HCI_EVENT_PACKET, 1, packet, size); if (event_packet_handler){ - event_packet_handler(NULL, HCI_EVENT_PACKET, NULL, packet, size); + event_packet_handler(HCI_EVENT_PACKET, packet, size); } if (le_data_handler){ le_data_handler(HCI_EVENT_PACKET, NULL, packet, size); @@ -187,9 +187,8 @@ void l2cap_register_fixed_channel(btstack_packet_handler_t packet_handler, uint1 le_data_handler = packet_handler; } -void l2cap_register_packet_handler(void (*handler)(void * connection, uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size)){ - printf("l2cap_register_packet_handler\n"); - event_packet_handler = handler; +void hci_add_event_handler(btstack_packet_callback_registration_t * callback_handler){ + event_packet_handler = callback_handler->callback; } int l2cap_reserve_packet_buffer(void){