diff --git a/example/embedded/spp_and_le_counter.c b/example/embedded/spp_and_le_counter.c index 4d3bf4643..9beea78db 100644 --- a/example/embedded/spp_and_le_counter.c +++ b/example/embedded/spp_and_le_counter.c @@ -259,7 +259,6 @@ int btstack_main(void) l2cap_init(); rfcomm_init(); - rfcomm_register_packet_handler(packet_handler); rfcomm_register_service(packet_handler, RFCOMM_SERVER_CHANNEL, 0xffff); // init SDP, create record for SPP and register with SDP diff --git a/example/embedded/spp_counter.c b/example/embedded/spp_counter.c index 57888ab3a..45ebdae42 100644 --- a/example/embedded/spp_counter.c +++ b/example/embedded/spp_counter.c @@ -100,7 +100,6 @@ static void spp_service_setup(void){ l2cap_init(); rfcomm_init(); - rfcomm_register_packet_handler(packet_handler); rfcomm_register_service(packet_handler, RFCOMM_SERVER_CHANNEL, 0xffff); // reserved channel, mtu limited by l2cap // init SDP, create record for SPP and register with SDP diff --git a/example/embedded/spp_flowcontrol.c b/example/embedded/spp_flowcontrol.c index f508c8da7..8cc80cecf 100644 --- a/example/embedded/spp_flowcontrol.c +++ b/example/embedded/spp_flowcontrol.c @@ -91,7 +91,6 @@ static void spp_service_setup(void){ // init RFCOMM rfcomm_init(); - rfcomm_register_packet_handler(packet_handler); // reserved channel, mtu limited by l2cap, 1 credit rfcomm_register_service_with_initial_credits(rfcomm_channel_nr, 0xffff, 1); diff --git a/example/embedded/spp_streamer.c b/example/embedded/spp_streamer.c index 8899cd6c6..24d32695d 100644 --- a/example/embedded/spp_streamer.c +++ b/example/embedded/spp_streamer.c @@ -197,8 +197,6 @@ int btstack_main(int argc, const char * argv[]){ // init L2CAP l2cap_init(); - rfcomm_register_packet_handler(packet_handler); - sdp_query_rfcomm_register_callback(handle_query_rfcomm_event); // turn on! diff --git a/platform/daemon/daemon.c b/platform/daemon/daemon.c index 43f09e988..5dd2299f7 100644 --- a/platform/daemon/daemon.c +++ b/platform/daemon/daemon.c @@ -2081,7 +2081,6 @@ int main (int argc, char * const * argv){ #ifdef ENABLE_RFCOMM log_info("config.h: ENABLE_RFCOMM\n"); rfcomm_init(); - rfcomm_register_packet_handler(&rfcomm_packet_handler); #endif #ifdef ENABLE_SDP diff --git a/port/ez430-rf2560/example/ant_test.c b/port/ez430-rf2560/example/ant_test.c index 14955985d..c3ec790c4 100644 --- a/port/ez430-rf2560/example/ant_test.c +++ b/port/ez430-rf2560/example/ant_test.c @@ -225,7 +225,6 @@ int btstack_main(int argc, const char * argv[]){ // init RFCOMM rfcomm_init(); - rfcomm_register_packet_handler(packet_handler); rfcomm_register_service(packet_handler, rfcomm_channel_nr, 100); // reserved channel, mtu=100 // init SDP, create record for SPP and register with SDP diff --git a/port/ez430-rf2560/example/spp_accel.c b/port/ez430-rf2560/example/spp_accel.c index 2a148bd37..2d411ce31 100644 --- a/port/ez430-rf2560/example/spp_accel.c +++ b/port/ez430-rf2560/example/spp_accel.c @@ -215,7 +215,6 @@ int btstack_main(int argc, const char * argv[]){ // init RFCOMM rfcomm_init(); - rfcomm_register_packet_handler(packet_handler); rfcomm_register_service(rfcomm_packet_handler, rfcomm_channel_nr, 100); // reserved channel, mtu=100 // init SDP, create record for SPP and register with SDP diff --git a/port/msp-exp430f5438-cc2564b/example/ant_test.c b/port/msp-exp430f5438-cc2564b/example/ant_test.c index 98fe71495..3f20b3a13 100644 --- a/port/msp-exp430f5438-cc2564b/example/ant_test.c +++ b/port/msp-exp430f5438-cc2564b/example/ant_test.c @@ -225,7 +225,6 @@ int btstack_main(int argc, const char * argv[]){ // init RFCOMM rfcomm_init(); - rfcomm_register_packet_handler(packet_handler); rfcomm_register_service(packet_handler, rfcomm_channel_nr, 100); // reserved channel, mtu=100 // init SDP, create record for SPP and register with SDP diff --git a/port/msp-exp430f5438-cc2564b/example/spp_accel.c b/port/msp-exp430f5438-cc2564b/example/spp_accel.c index 5c282cea2..1dc40389b 100644 --- a/port/msp-exp430f5438-cc2564b/example/spp_accel.c +++ b/port/msp-exp430f5438-cc2564b/example/spp_accel.c @@ -216,7 +216,6 @@ int btstack_main(int argc, const char * argv[]){ // init RFCOMM rfcomm_init(); - rfcomm_register_packet_handler(packet_handler); rfcomm_register_service(packet_handler, rfcomm_channel_nr, 100); // reserved channel, mtu=100 // init SDP, create record for SPP and register with SDP diff --git a/src/classic/hfp_ag.c b/src/classic/hfp_ag.c index 4860cca76..f96e112fc 100644 --- a/src/classic/hfp_ag.c +++ b/src/classic/hfp_ag.c @@ -1996,7 +1996,6 @@ void hfp_ag_init(uint16_t rfcomm_channel_nr, uint32_t supported_features, l2cap_init(); - rfcomm_register_packet_handler(packet_handler); rfcomm_register_service(packet_handler, rfcomm_channel_nr, 0xffff); hfp_init(); diff --git a/src/classic/hfp_hf.c b/src/classic/hfp_hf.c index d9cc217bb..8cc7bb973 100644 --- a/src/classic/hfp_hf.c +++ b/src/classic/hfp_hf.c @@ -1056,7 +1056,6 @@ void hfp_hf_init(uint16_t rfcomm_channel_nr, uint32_t supported_features, uint16 hci_add_event_handler(&hci_event_callback_registration); l2cap_init(); - rfcomm_register_packet_handler(packet_handler); rfcomm_register_service(packet_handler, rfcomm_channel_nr, 0xffff); hfp_init(); diff --git a/src/classic/hsp_ag.c b/src/classic/hsp_ag.c index 52e1765d0..d639b81cd 100644 --- a/src/classic/hsp_ag.c +++ b/src/classic/hsp_ag.c @@ -266,7 +266,6 @@ void hsp_ag_init(uint8_t rfcomm_channel_nr){ l2cap_init(); rfcomm_init(); - rfcomm_register_packet_handler(packet_handler); rfcomm_register_service(packet_handler, rfcomm_channel_nr, 0xffff); // reserved channel, mtu limited by l2cap sdp_query_rfcomm_register_callback(handle_query_rfcomm_event); diff --git a/src/classic/hsp_hs.c b/src/classic/hsp_hs.c index bdb50a65a..e41bc58e9 100644 --- a/src/classic/hsp_hs.c +++ b/src/classic/hsp_hs.c @@ -264,7 +264,6 @@ void hsp_hs_init(uint8_t rfcomm_channel_nr){ l2cap_init(); rfcomm_init(); - rfcomm_register_packet_handler(packet_handler); rfcomm_register_service(packet_handler, rfcomm_channel_nr, 0xffff); // reserved channel, mtu limited by l2cap sdp_query_rfcomm_register_callback(handle_query_rfcomm_event); diff --git a/src/classic/rfcomm.c b/src/classic/rfcomm.c index e5c0a9ec3..809e27bd8 100644 --- a/src/classic/rfcomm.c +++ b/src/classic/rfcomm.c @@ -84,9 +84,6 @@ static btstack_linked_list_t rfcomm_services = NULL; static gap_security_level_t rfcomm_security_level; -static void (*app_packet_handler)(uint8_t packet_type, - uint16_t channel, uint8_t *packet, uint16_t size); - static void rfcomm_run(void); static void rfcomm_channel_state_machine(rfcomm_channel_t *channel, rfcomm_channel_event_t *event); static void rfcomm_channel_state_machine_2(rfcomm_multiplexer_t * multiplexer, uint8_t dlci, rfcomm_channel_event_t *event); @@ -107,7 +104,7 @@ static void rfcomm_emit_connection_request(rfcomm_channel_t *channel) { event[8] = channel->dlci >> 1; little_endian_store_16(event, 9, channel->rfcomm_cid); hci_dump_packet(HCI_EVENT_PACKET, 0, event, sizeof(event)); - (*app_packet_handler)(HCI_EVENT_PACKET, 0, (uint8_t *) event, sizeof(event)); + (channel->packet_handler)(HCI_EVENT_PACKET, 0, (uint8_t *) event, sizeof(event)); } // API Change: BTstack-0.3.50x uses @@ -129,7 +126,7 @@ static void rfcomm_emit_channel_opened(rfcomm_channel_t *channel, uint8_t status little_endian_store_16(event, pos, channel->rfcomm_cid); pos += 2; // 12 - channel ID little_endian_store_16(event, pos, channel->max_frame_size); pos += 2; // max frame size hci_dump_packet(HCI_EVENT_PACKET, 0, event, sizeof(event)); - (*app_packet_handler)(HCI_EVENT_PACKET, 0, (uint8_t *) event, pos); + (channel->packet_handler)(HCI_EVENT_PACKET, 0, (uint8_t *) event, pos); } // data: event(8), len(8), rfcomm_cid(16) @@ -140,7 +137,7 @@ static void rfcomm_emit_channel_closed(rfcomm_channel_t * channel) { event[1] = sizeof(event) - 2; little_endian_store_16(event, 2, channel->rfcomm_cid); hci_dump_packet(HCI_EVENT_PACKET, 0, event, sizeof(event)); - (*app_packet_handler)(HCI_EVENT_PACKET, 0, (uint8_t *) event, sizeof(event)); + (channel->packet_handler)(HCI_EVENT_PACKET, 0, (uint8_t *) event, sizeof(event)); } static void rfcomm_emit_remote_line_status(rfcomm_channel_t *channel, uint8_t line_status){ @@ -151,7 +148,7 @@ static void rfcomm_emit_remote_line_status(rfcomm_channel_t *channel, uint8_t li little_endian_store_16(event, 2, channel->rfcomm_cid); event[4] = line_status; hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event)); - (*app_packet_handler)(HCI_EVENT_PACKET, 0, (uint8_t *) event, sizeof(event)); + (channel->packet_handler)(HCI_EVENT_PACKET, 0, (uint8_t *) event, sizeof(event)); } static void rfcomm_emit_port_configuration(rfcomm_channel_t *channel){ @@ -161,7 +158,7 @@ static void rfcomm_emit_port_configuration(rfcomm_channel_t *channel){ event[1] = sizeof(rfcomm_rpn_data_t); memcpy(&event[2], (uint8_t*) &channel->rpn_data, sizeof(rfcomm_rpn_data_t)); hci_dump_packet( HCI_EVENT_PACKET, 0, event, sizeof(event)); - (*app_packet_handler)(HCI_EVENT_PACKET, channel->rfcomm_cid, (uint8_t*)event, sizeof(event)); + (channel->packet_handler)(HCI_EVENT_PACKET, channel->rfcomm_cid, (uint8_t*)event, sizeof(event)); } // MARK RFCOMM RPN DATA HELPER @@ -1019,7 +1016,7 @@ static void rfcomm_multiplexer_state_machine(rfcomm_multiplexer_t * multiplexer, for (it = (btstack_linked_item_t *) rfcomm_channels; it ; it = it->next){ rfcomm_channel_t * channel = ((rfcomm_channel_t *) it); if (channel->multiplexer != multiplexer) continue; - (*app_packet_handler)(HCI_EVENT_PACKET, 0, (uint8_t *) packet_sent_event, sizeof(packet_sent_event)); + (channel->packet_handler)(HCI_EVENT_PACKET, 0, (uint8_t *) packet_sent_event, sizeof(packet_sent_event)); } return; } @@ -1148,7 +1145,7 @@ static void rfcomm_channel_packet_handler_uih(rfcomm_multiplexer_t *multiplexer, } // deliver payload - (*app_packet_handler)(RFCOMM_DATA_PACKET, channel->rfcomm_cid, + (channel->packet_handler)(RFCOMM_DATA_PACKET, channel->rfcomm_cid, &packet[payload_offset], size-payload_offset-1); } @@ -1407,16 +1404,12 @@ static void rfcomm_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t return; } - // we only handle l2cap packet over open multiplexer channel now - if (packet_type != L2CAP_DATA_PACKET) { - (*app_packet_handler)(packet_type, channel, packet, size); - return; - } + // we only handle l2cap packets + if (packet_type != L2CAP_DATA_PACKET) return; + + // ... over open multiplexer channel now rfcomm_multiplexer_t * multiplexer = rfcomm_multiplexer_for_l2cap_cid(channel); - if (!multiplexer || multiplexer->state != RFCOMM_MULTIPLEXER_OPEN) { - (*app_packet_handler)(packet_type, channel, packet, size); - return; - } + if (!multiplexer || multiplexer->state != RFCOMM_MULTIPLEXER_OPEN) return; // channel data ? // rfcomm: (0) addr [76543 server channel] [2 direction: initiator uses 1] [1 C/R: CMD by initiator = 1] [0 EA=1] @@ -1551,7 +1544,7 @@ static void rfcomm_channel_state_machine(rfcomm_channel_t *channel, rfcomm_chann modem_status_event[0] = RFCOMM_EVENT_REMOTE_MODEM_STATUS; modem_status_event[1] = 1; modem_status_event[2] = event_msc->modem_status; - (*app_packet_handler)(HCI_EVENT_PACKET, channel->rfcomm_cid, (uint8_t*)&modem_status_event, sizeof(modem_status_event)); + (channel->packet_handler)(HCI_EVENT_PACKET, channel->rfcomm_cid, (uint8_t*)&modem_status_event, sizeof(modem_status_event)); // no return, MSC_CMD will be handled by state machine below } @@ -1737,7 +1730,7 @@ static void rfcomm_channel_state_machine(rfcomm_channel_t *channel, rfcomm_chann case CH_EVT_RCVD_CREDITS: { // notify daemon -> might trigger re-try of parked connections uint8_t credits_event[2] = { DAEMON_EVENT_NEW_RFCOMM_CREDITS, 0 }; - (*app_packet_handler)(DAEMON_EVENT_PACKET, channel->rfcomm_cid, credits_event, sizeof(credits_event)); + (channel->packet_handler)(DAEMON_EVENT_PACKET, channel->rfcomm_cid, credits_event, sizeof(credits_event)); break; } default: @@ -1854,12 +1847,6 @@ void rfcomm_set_required_security_level(gap_security_level_t security_level){ rfcomm_security_level = security_level; } -// register packet handler -void rfcomm_register_packet_handler(void (*handler)(uint8_t packet_type, - uint16_t channel, uint8_t *packet, uint16_t size)){ - app_packet_handler = handler; -} - int rfcomm_can_send_packet_now(uint16_t rfcomm_cid){ rfcomm_channel_t * channel = rfcomm_channel_for_rfcomm_cid(rfcomm_cid); if (!channel){ diff --git a/src/classic/rfcomm.h b/src/classic/rfcomm.h index 57a97a638..32c7aaf5c 100644 --- a/src/classic/rfcomm.h +++ b/src/classic/rfcomm.h @@ -298,11 +298,6 @@ void rfcomm_init(void); */ void rfcomm_set_required_security_level(gap_security_level_t security_level); -/** - * @brief Register packet handler. - */ -void rfcomm_register_packet_handler(void (*handler)(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size)); - /* * @brief Create RFCOMM connection to a given server channel on a remote deivce. * This channel will automatically provide enough credits to the remote side. diff --git a/test/hfp/mock.c b/test/hfp/mock.c index 769b5e229..2e1821f49 100644 --- a/test/hfp/mock.c +++ b/test/hfp/mock.c @@ -266,10 +266,6 @@ void rfcomm_disconnect(uint16_t rfcomm_cid){ (*registered_rfcomm_packet_handler)(HCI_EVENT_PACKET, 0, (uint8_t *) event, sizeof(event)); } -void rfcomm_register_packet_handler(void (*handler)(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size)){ - registered_rfcomm_packet_handler = handler; -} - uint8_t rfcomm_register_service(btstack_packet_handler_t packet_handler, uint8_t channel, uint16_t max_frame_size){ printf("rfcomm_register_service\n"); registered_rfcomm_packet_handler = handler; diff --git a/test/pts/classic_test.c b/test/pts/classic_test.c index e0d63509b..77e349c5d 100644 --- a/test/pts/classic_test.c +++ b/test/pts/classic_test.c @@ -780,7 +780,6 @@ int btstack_main(int argc, const char * argv[]){ l2cap_register_fixed_channel(&packet_handler, L2CAP_CID_CONNECTIONLESS_CHANNEL); rfcomm_init(); - rfcomm_register_packet_handler(packet_handler); rfcomm_register_service(packet_handler, RFCOMM_SERVER_CHANNEL, 150); // reserved channel, mtu=100 // init SDP, create record for SPP and register with SDP diff --git a/test/pts/hfp_test.c b/test/pts/hfp_test.c index e969102f8..ae4ea8566 100644 --- a/test/pts/hfp_test.c +++ b/test/pts/hfp_test.c @@ -177,7 +177,6 @@ int btstack_main(int argc, const char * argv[]){ // init L2CAP l2cap_init(); rfcomm_init(); - rfcomm_register_packet_handler(packet_handler); sdp_query_rfcomm_register_callback(handle_query_rfcomm_event);