int btstack_main(int argc, const char * argv[]){ int arg = 1; cmdline_addr_found = 0; while (arg < argc) { if(!strcmp(argv[arg], "-a") || !strcmp(argv[arg], "--address")){ arg++; cmdline_addr_found = sscanf_bd_addr(argv[arg], cmdline_addr); arg++; if (!cmdline_addr_found) exit(1); continue; } usage(argv[0]); return 0; } hci_event_callback_registration.callback = &hci_event_handler; hci_add_event_handler(&hci_event_callback_registration); l2cap_init(); gatt_client_init(); sm_init(); sm_set_io_capabilities(IO_CAPABILITY_NO_INPUT_NO_OUTPUT); // turn on! hci_power_control(HCI_POWER_ON); return 0; }
int btstack_main(int argc, const char * argv[]){ /* Register for HCI events */ hci_event_callback_registration.callback = &packet_handler; hci_add_event_handler(&hci_event_callback_registration); /* Initialize L2CAP */ l2cap_init(); /* Initialise BNEP */ bnep_init(); bnep_register_service(&packet_handler, bnep_local_service_uuid, 1691); /* Minimum L2CAP MTU for bnep is 1691 bytes */ /* Initialize SDP and add PANU record */ sdp_init(); uint16_t network_packet_types[] = { NETWORK_TYPE_IPv4, NETWORK_TYPE_ARP, 0}; // 0 as end of list pan_create_panu_sdp_record(panu_sdp_record, 0x10002, network_packet_types, NULL, NULL, BNEP_SECURITY_NONE); printf("SDP service record size: %u\n", de_get_len((uint8_t*) panu_sdp_record)); sdp_register_service((uint8_t*)panu_sdp_record); /* Turn on the device */ hci_power_control(HCI_POWER_ON); gap_discoverable_control(1); btstack_stdin_setup(stdin_process); return 0; }
int main(int argc, const char * argv[]){ /// GET STARTED with BTstack /// btstack_memory_init(); btstack_run_loop_init(btstack_run_loop_posix_get_instance()); // use logger: format HCI_DUMP_PACKETLOGGER, HCI_DUMP_BLUEZ or HCI_DUMP_STDOUT hci_dump_open("/tmp/hci_dump.pklg", HCI_DUMP_PACKETLOGGER); // init HCI hci_init(hci_transport_usb_instance(), NULL); hci_set_link_key_db(btstack_link_key_db_fs_instance()); // inform about BTstack state hci_event_callback_registration.callback = &packet_handler; hci_add_event_handler(&hci_event_callback_registration); // handle CTRL-c signal(SIGINT, sigint_handler); // setup app btstack_main(argc, argv); // go btstack_run_loop_execute(); return 0; }
// main int app_main(void){ printf("BTstack: setup\n"); // enable packet logger hci_dump_open(NULL, HCI_DUMP_STDOUT); /// GET STARTED with BTstack /// btstack_memory_init(); btstack_run_loop_init(btstack_run_loop_freertos_get_instance()); // init HCI hci_init(transport_get_instance(), NULL); // setup TLV ESP32 implementation const btstack_tlv_t * btstack_tlv_impl = btstack_tlv_esp32_get_instance(); // setup Link Key DB using TLV const btstack_link_key_db_t * btstack_link_key_db = btstack_link_key_db_tlv_get_instance(btstack_tlv_impl, NULL); hci_set_link_key_db(btstack_link_key_db); // setup LE Device DB using TLV le_device_db_tlv_configure(btstack_tlv_impl, NULL); // inform about BTstack state hci_event_callback_registration.callback = &packet_handler; hci_add_event_handler(&hci_event_callback_registration); btstack_main(0, NULL); printf("BTstack: execute run loop\n"); btstack_run_loop_execute(); return 0; }
int btstack_main(int argc, const char * argv[]){ UNUSED(argc); (void)argv; /* Register for HCI events */ hci_event_callback_registration.callback = &packet_handler; hci_add_event_handler(&hci_event_callback_registration); l2cap_init(); // Initialize AVRCP COntroller avrcp_controller_init(); avrcp_controller_register_packet_handler(&packet_handler); // Initialize SDP sdp_init(); memset(sdp_avrcp_controller_service_buffer, 0, sizeof(sdp_avrcp_controller_service_buffer)); avrcp_controller_create_sdp_record(sdp_avrcp_controller_service_buffer, 0x10001, AVRCP_BROWSING_ENABLED, 1, NULL, NULL); sdp_register_service(sdp_avrcp_controller_service_buffer); gap_set_local_name("BTstack AVRCP Test"); gap_discoverable_control(1); // gap_set_class_of_device(0x200408); // parse human readable Bluetooth address sscanf_bd_addr(device_addr_string, device_addr); // turn on! hci_power_control(HCI_POWER_ON); #ifdef HAVE_BTSTACK_STDIN btstack_stdin_setup(stdin_process); #endif return 0; }
int btstack_main(int argc, const char * argv[]){ (void)argc; (void)argv; // register for HCI events hci_event_callback_registration.callback = &packet_handler; hci_add_event_handler(&hci_event_callback_registration); hci_register_sco_packet_handler(&packet_handler); gap_discoverable_control(1); gap_set_class_of_device(0x2540); gap_set_local_name("HID Mouse Demo 00:00:00:00:00:00"); // L2CAP l2cap_init(); // SDP Server sdp_init(); memset(hid_service_buffer, 0, sizeof(hid_service_buffer)); // hid sevice subclass 2540 Keyboard, hid counntry code 33 US, hid virtual cable off, hid reconnect initiate off, hid boot device off hid_create_sdp_record(hid_service_buffer, 0x10001, 0x2540, 33, 0, 0, 0, hid_descriptor_mouse_boot_mode, sizeof(hid_descriptor_mouse_boot_mode), hid_device_name); printf("SDP service record size: %u\n", de_get_len( hid_service_buffer)); sdp_register_service(hid_service_buffer); // HID Device hid_device_init(); hid_device_register_packet_handler(&packet_handler); #ifdef HAVE_BTSTACK_STDIN btstack_stdin_setup(stdin_process); #endif // turn on! hci_power_control(HCI_POWER_ON); return 0; }
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(); // setup le device db le_device_db_init(); // setup SM: Display only sm_init(); // setup ATT server att_server_init(profile_data, att_read_callback, att_write_callback); att_server_register_packet_handler(packet_handler); // setup advertisements uint16_t adv_int_min = 0x0030; uint16_t adv_int_max = 0x0030; uint8_t adv_type = 0; bd_addr_t null_addr; memset(null_addr, 0, 6); gap_advertisements_set_params(adv_int_min, adv_int_max, adv_type, 0, null_addr, 0x07, 0x00); gap_advertisements_set_data(adv_data_len, (uint8_t*) adv_data); gap_advertisements_enable(1); // set one-shot timer heartbeat.process = &heartbeat_handler; btstack_run_loop_set_timer(&heartbeat, HEARTBEAT_PERIOD_MS); btstack_run_loop_add_timer(&heartbeat); }
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(); }
void hsp_hs_init(uint8_t rfcomm_channel_nr){ // register for HCI events hci_event_callback_registration.callback = &packet_handler; hci_add_event_handler(&hci_event_callback_registration); rfcomm_register_service(packet_handler, rfcomm_channel_nr, 0xffff); // reserved channel, mtu limited by l2cap hsp_hs_reset_state(); }
int btstack_main(void) { // register for HCI events hci_event_callback_registration.callback = &packet_handler; hci_add_event_handler(&hci_event_callback_registration); l2cap_init(); rfcomm_init(); rfcomm_register_service(packet_handler, RFCOMM_SERVER_CHANNEL, 0xffff); // init SDP, create record for SPP and register with SDP sdp_init(); memset(spp_service_buffer, 0, sizeof(spp_service_buffer)); spp_create_sdp_record(spp_service_buffer, 0x10001, RFCOMM_SERVER_CHANNEL, "SPP Counter"); sdp_register_service(spp_service_buffer); printf("SDP service record size: %u\n", de_get_len(spp_service_buffer)); gap_set_local_name("SPP and LE Counter 00:00:00:00:00:00"); gap_ssp_set_io_capability(SSP_IO_CAPABILITY_DISPLAY_YES_NO); gap_discoverable_control(1); // setup le device db le_device_db_init(); // setup SM: Display only sm_init(); // setup ATT server att_server_init(profile_data, att_read_callback, att_write_callback); att_server_register_packet_handler(packet_handler); // set one-shot timer heartbeat.process = &heartbeat_handler; btstack_run_loop_set_timer(&heartbeat, HEARTBEAT_PERIOD_MS); btstack_run_loop_add_timer(&heartbeat); // setup advertisements uint16_t adv_int_min = 0x0030; uint16_t adv_int_max = 0x0030; uint8_t adv_type = 0; bd_addr_t null_addr; memset(null_addr, 0, 6); gap_advertisements_set_params(adv_int_min, adv_int_max, adv_type, 0, null_addr, 0x07, 0x00); gap_advertisements_set_data(adv_data_len, (uint8_t*) adv_data); gap_advertisements_enable(1); // beat once beat(); // turn on! hci_power_control(HCI_POWER_ON); return 0; }
static void sm_peripheral_setup(void){ // register for HCI events hci_event_callback_registration.callback = &packet_handler; hci_add_event_handler(&hci_event_callback_registration); l2cap_init(); // setup le device db le_device_db_init(); // setup SM: Display only sm_init(); sm_event_callback_registration.callback = &packet_handler; sm_add_event_handler(&sm_event_callback_registration); /** * Choose ONE of the following configurations */ // LE Legacy Pairing, Just Works sm_set_io_capabilities(IO_CAPABILITY_DISPLAY_YES_NO); sm_set_authentication_requirements(0); // LE Legacy Pairing, Passkey entry initiator enter, responder (us) displays // sm_set_io_capabilities(IO_CAPABILITY_DISPLAY_ONLY); // sm_set_authentication_requirements(SM_AUTHREQ_MITM_PROTECTION); #ifdef ENABLE_LE_SECURE_CONNECTIONS // LE Secure Connetions, Just Works // sm_set_io_capabilities(IO_CAPABILITY_DISPLAY_YES_NO); // sm_set_authentication_requirements(SM_AUTHREQ_SECURE_CONNECTION); // LE Secure Connections, Numeric Comparison // sm_set_io_capabilities(IO_CAPABILITY_DISPLAY_YES_NO); // sm_set_authentication_requirements(SM_AUTHREQ_SECURE_CONNECTION|SM_AUTHREQ_MITM_PROTECTION); // LE Legacy Pairing, Passkey entry initiator enter, responder (us) displays // sm_set_io_capabilities(IO_CAPABILITY_DISPLAY_ONLY); // sm_set_authentication_requirements(SM_AUTHREQ_SECURE_CONNECTION|SM_AUTHREQ_MITM_PROTECTION); #endif // setup ATT server att_server_init(profile_data, NULL, NULL); att_server_register_packet_handler(packet_handler); // setup advertisements uint16_t adv_int_min = 0x0030; uint16_t adv_int_max = 0x0030; uint8_t adv_type = 0; bd_addr_t null_addr; memset(null_addr, 0, 6); gap_advertisements_set_params(adv_int_min, adv_int_max, adv_type, 0, null_addr, 0x07, 0x00); gap_advertisements_set_data(adv_data_len, (uint8_t*) adv_data); gap_advertisements_enable(1); }
static void hid_host_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(); // Disable stdout buffering setbuf(stdout, NULL); }
static void btstack_setup(void){ /// GET STARTED with BTstack /// btstack_memory_init(); btstack_run_loop_init(btstack_run_loop_embedded_get_instance()); // init HCI hci_init(hci_transport_h4_instance(btstack_uart_block_embedded_instance()), &config); hci_set_link_key_db(btstack_link_key_db_memory_instance()); hci_set_chipset(btstack_chipset_cc256x_instance()); // inform about BTstack state hci_event_callback_registration.callback = &packet_handler; hci_add_event_handler(&hci_event_callback_registration); }
int btstack_main(int choose) { printf("btstack_enable start choose:%d\n", choose); choose =2; hci_event_callback_registration.callback = &packet_handler; hci_add_event_handler(&hci_event_callback_registration); // enabled EIR hci_set_inquiry_mode(INQUIRY_MODE_RSSI_AND_EIR); // turn on! hci_power_control(HCI_POWER_ON); return 0; }
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(); // Initialize GATT client gatt_client_init(); // Optinoally, Setup security manager sm_init(); sm_set_io_capabilities(IO_CAPABILITY_NO_INPUT_NO_OUTPUT); }
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(); // turn on! hci_power_control(HCI_POWER_ON); return 0; }
int main(int argc, const char * argv[]){ /// GET STARTED with BTstack /// btstack_memory_init(); btstack_run_loop_init(btstack_run_loop_posix_get_instance()); // use logger: format HCI_DUMP_PACKETLOGGER, HCI_DUMP_BLUEZ or HCI_DUMP_STDOUT hci_dump_open("/tmp/hci_dump.pklg", HCI_DUMP_PACKETLOGGER); // pick serial port // config.device_name = "/dev/tty.usbserial-A900K2WS"; // DFROBOT // config.device_name = "/dev/tty.usbserial-A50285BI"; // BOOST-CC2564MODA New // config.device_name = "/dev/tty.usbserial-A9OVNX5P"; // RedBear IoT pHAT breakout board config.device_name = "/dev/tty.usbserial-A900K0VK"; // CSR8811 breakout board // init HCI const btstack_uart_block_t * uart_driver = btstack_uart_block_posix_instance(); const hci_transport_t * transport = hci_transport_h5_instance(uart_driver); const btstack_link_key_db_t * link_key_db = btstack_link_key_db_fs_instance(); hci_init(transport, (void*) &config); hci_set_link_key_db(link_key_db); // enable BCSP mode for CSR chipsets - auto detect might not work // hci_transport_h5_enable_bcsp_mode(); // set BD_ADDR for CSR without Flash/unique address // bd_addr_t own_address = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66}; // btstack_chipset_csr_set_bd_addr(own_address); // enable auto-sleep mode // hci_transport_h5_set_auto_sleep(300); // register for HCI events hci_event_callback_registration.callback = &packet_handler; hci_add_event_handler(&hci_event_callback_registration); // handle CTRL-c signal(SIGINT, sigint_handler); // setup app btstack_main(argc, argv); // go btstack_run_loop_execute(); return 0; }
int btstack_main(int argc, const char * argv[]){ gap_set_class_of_device(0x220404); gap_discoverable_control(1); /* Register for HCI events */ hci_event_callback_registration.callback = &packet_handler; hci_add_event_handler(&hci_event_callback_registration); l2cap_init(); l2cap_register_service(packet_handler, PSM_SDP, 100, LEVEL_0); // turn on! hci_power_control(HCI_POWER_ON); btstack_stdin_setup(stdin_process); return 0; }
void BTSTACK_Initialize ( void ) { printf("\n\nBTstack_Initialize()\n"); btstack_memory_init(); btstack_run_loop_init(btstack_run_loop_embedded_get_instance()); hci_dump_open(NULL, HCI_DUMP_STDOUT); const hci_transport_t * transport = hci_transport_h4_instance(); hci_init(transport, &config); hci_set_chipset(btstack_chipset_csr_instance()); // inform about BTstack state hci_event_callback_registration.callback = &packet_handler; hci_add_event_handler(&hci_event_callback_registration); btstack_main(0, NULL); }
int btstack_main(int argc, const char * argv[]){ UNUSED(argc); (void)argv; /* Register for HCI events */ hci_event_callback_registration.callback = &packet_handler; hci_add_event_handler(&hci_event_callback_registration); l2cap_init(); // Initialize AVDTP Sink avdtp_sink_init(&a2dp_sink_context); avdtp_sink_register_packet_handler(&packet_handler); avdtp_stream_endpoint_t * local_stream_endpoint = avdtp_sink_create_stream_endpoint(AVDTP_SINK, AVDTP_AUDIO); if (!local_stream_endpoint) { printf("AVDTP Sink: not enough memory to create local_stream_endpoint\n"); return 1; } local_seid = avdtp_local_seid(local_stream_endpoint); avdtp_sink_register_media_transport_category(local_seid); avdtp_sink_register_media_codec_category(local_seid, AVDTP_AUDIO, AVDTP_CODEC_SBC, media_sbc_codec_capabilities, sizeof(media_sbc_codec_capabilities)); avdtp_sink_register_media_handler(&handle_l2cap_media_data_packet); // Initialize SDP sdp_init(); memset(sdp_avdtp_sink_service_buffer, 0, sizeof(sdp_avdtp_sink_service_buffer)); a2dp_sink_create_sdp_record(sdp_avdtp_sink_service_buffer, 0x10001, 1, NULL, NULL); sdp_register_service(sdp_avdtp_sink_service_buffer); // printf("BTstack AVDTP Sink, supported features 0x%04x\n", ); gap_set_local_name("BTstack AVDTP Sink PTS 00:00:00:00:00:00"); gap_discoverable_control(1); gap_set_class_of_device(0x200408); #ifdef HAVE_BTSTACK_STDIN // parse human readable Bluetooth address sscanf_bd_addr(device_addr_string, device_addr); btstack_stdin_setup(stdin_process); #endif // turn on! hci_power_control(HCI_POWER_ON); return 0; }
/* 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(); // init RFCOMM rfcomm_init(); // reserved channel, mtu limited by l2cap, 1 credit rfcomm_register_service_with_initial_credits(&packet_handler, rfcomm_channel_nr, 0xffff, 1); // init SDP, create record for SPP and register with SDP sdp_init(); memset(spp_service_buffer, 0, sizeof(spp_service_buffer)); spp_create_sdp_record(spp_service_buffer, 0x10001, 1, "SPP Counter"); sdp_register_service(spp_service_buffer); printf("SDP service buffer size: %u\n\r", (uint16_t) de_get_len(spp_service_buffer)); }
int btstack_main(int argc, const char * argv[]){ #ifdef HAVE_BTSTACK_STDIN int arg = 1; cmdline_addr_found = 0; while (arg < argc) { if(!strcmp(argv[arg], "-a") || !strcmp(argv[arg], "--address")){ arg++; cmdline_addr_found = sscanf_bd_addr(argv[arg], cmdline_addr); arg++; if (!cmdline_addr_found) exit(1); continue; } usage(argv[0]); return 0; } #else (void)argc; (void)argv; #endif hci_event_callback_registration.callback = &hci_event_handler; hci_add_event_handler(&hci_event_callback_registration); l2cap_init(); gatt_client_init(); sm_init(); sm_set_io_capabilities(IO_CAPABILITY_NO_INPUT_NO_OUTPUT); // use different connection parameters: conn interval min/max (* 1.25 ms), slave latency, supervision timeout, CE len min/max (* 0.6125 ms) // gap_set_connection_parameters(0x06, 0x06, 4, 1000, 0x01, 0x06 * 2); // turn on! hci_power_control(HCI_POWER_ON); return 0; }
void att_server_init(uint8_t const * db, att_read_callback_t read_callback, att_write_callback_t write_callback){ // store callbacks att_server_client_read_callback = read_callback; att_server_client_write_callback = write_callback; // register for HCI Events hci_event_callback_registration.callback = &att_event_packet_handler; hci_add_event_handler(&hci_event_callback_registration); // register for SM events sm_event_callback_registration.callback = &att_event_packet_handler; sm_add_event_handler(&sm_event_callback_registration); // and L2CAP ATT Server PDUs att_dispatch_register_server(att_packet_handler); att_set_db(db); att_set_read_callback(att_server_read_callback); att_set_write_callback(att_server_write_callback); }
int btstack_main(int argc, const char * argv[]){ UNUSED(argc); (void)argv; /* Register for HCI events */ hci_event_callback_registration.callback = &packet_handler; hci_add_event_handler(&hci_event_callback_registration); l2cap_init(); // Initialize AVDTP Sink avdtp_source_init(&a2dp_source_context); avdtp_source_register_packet_handler(&packet_handler); sc.local_stream_endpoint = a2dp_source_create_stream_endpoint(AVDTP_AUDIO, AVDTP_CODEC_SBC, (uint8_t *) media_sbc_codec_capabilities, sizeof(media_sbc_codec_capabilities), (uint8_t*) media_sbc_codec_configuration, sizeof(media_sbc_codec_configuration)); media_tracker.local_seid = avdtp_local_seid(sc.local_stream_endpoint); media_tracker.remote_seid = 1; // Initialize SDP sdp_init(); memset(sdp_avdtp_source_service_buffer, 0, sizeof(sdp_avdtp_source_service_buffer)); a2dp_source_create_sdp_record(sdp_avdtp_source_service_buffer, 0x10002, 1, NULL, NULL); sdp_register_service(sdp_avdtp_source_service_buffer); gap_set_local_name("BTstack AVDTP Source PTS 00:00:00:00:00:00"); gap_discoverable_control(1); gap_set_class_of_device(0x200408); sscanf_bd_addr(device_addr_string, device_addr); #ifdef HAVE_BTSTACK_STDIN // parse human readable Bluetooth address sscanf_bd_addr(device_addr_string, device_addr); btstack_stdin_setup(stdin_process); #endif // turn on! hci_power_control(HCI_POWER_ON); return 0; }
int main(int argc, const char * argv[]){ /// GET STARTED with BTstack /// btstack_memory_init(); btstack_run_loop_init(btstack_run_loop_posix_get_instance()); // use logger: format HCI_DUMP_PACKETLOGGER, HCI_DUMP_BLUEZ or HCI_DUMP_STDOUT hci_dump_open("/tmp/hci_dump.pklg", HCI_DUMP_PACKETLOGGER); // pick serial port config.device_name = "/dev/tty.usbserial-A900K0VK"; // init HCI const btstack_uart_block_t * uart_driver = btstack_uart_block_posix_instance(); const hci_transport_t * transport = hci_transport_h4_instance(uart_driver); const btstack_link_key_db_t * link_key_db = btstack_link_key_db_fs_instance(); hci_init(transport, (void*) &config); hci_set_link_key_db(link_key_db); // inform about BTstack state hci_event_callback_registration.callback = &packet_handler; hci_add_event_handler(&hci_event_callback_registration); // setup dynamic chipset driver setup hci_set_local_version_information_callback(&local_version_information_callback); // handle CTRL-c signal(SIGINT, sigint_handler); // setup app btstack_main(argc, argv); // go btstack_run_loop_execute(); return 0; }
int btstack_main(int argc, const char * argv[]){ // register for HCI events hci_event_callback_registration.callback = &packet_handler; hci_add_event_handler(&hci_event_callback_registration); // init L2CAP l2cap_init(); // init RFCOMM rfcomm_init(); rfcomm_register_service(packet_handler, rfcomm_channel_nr, 100); // reserved channel, mtu=100 // init SDP, create record for SPP and register with SDP sdp_init(); memset(spp_service_buffer, 0, sizeof(spp_service_buffer)); spp_create_sdp_record( (uint8_t*) spp_service_buffer, 1, "SPP Counter"); printf("SDP service buffer size: %u\n\r", (uint16_t) (de_get_len((uint8_t*) spp_service_buffer))); sdp_register_service(service_record_item); // set one-shot timer btstack_timer_source_t heartbeat; heartbeat.process = &heartbeat_handler; btstack_run_loop_set_timer(&heartbeat, HEARTBEAT_PERIOD_MS); btstack_run_loop_add_timer(&heartbeat); // set local name gap_set_local_name("BlueMSP-Demo"); // make discoverable gap_discoverable_control(1); printf("Run...\n\r"); // turn on! hci_power_control(HCI_POWER_ON); return 0; }
static void gap_le_advertisements_setup(void){ hci_event_callback_registration.callback = &packet_handler; hci_add_event_handler(&hci_event_callback_registration); }
void ancs_client_init(void){ hci_event_callback_registration.callback = &handle_hci_event; hci_add_event_handler(&hci_event_callback_registration); }