1 /* 2 * Copyright (c) 2023 Raspberry Pi (Trading) Ltd. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #include "ble/le_device_db_tlv.h" 8 #include "classic/btstack_link_key_db_tlv.h" 9 #include "btstack_tlv.h" 10 #include "btstack_tlv_flash_bank.h" 11 #include "btstack_memory.h" 12 #include "hci.h" 13 14 #if WANT_HCI_DUMP 15 #include "hci_dump.h" 16 #ifdef ENABLE_SEGGER_RTT 17 #include "hci_dump_segger_rtt_stdout.h" 18 #else 19 #include "hci_dump_embedded_stdout.h" 20 #endif 21 #endif 22 23 #include "pico/btstack_hci_transport_cyw43.h" 24 #include "pico/btstack_run_loop_async_context.h" 25 #include "pico/btstack_flash_bank.h" 26 #include "pico/btstack_cyw43.h" 27 setup_tlv(void)28static void setup_tlv(void) { 29 static btstack_tlv_flash_bank_t btstack_tlv_flash_bank_context; 30 const hal_flash_bank_t *hal_flash_bank_impl = pico_flash_bank_instance(); 31 32 const btstack_tlv_t *btstack_tlv_impl = btstack_tlv_flash_bank_init_instance( 33 &btstack_tlv_flash_bank_context, 34 hal_flash_bank_impl, 35 NULL); 36 37 // setup global TLV 38 btstack_tlv_set_instance(btstack_tlv_impl, &btstack_tlv_flash_bank_context); 39 #ifdef ENABLE_CLASSIC 40 const btstack_link_key_db_t *btstack_link_key_db = btstack_link_key_db_tlv_get_instance(btstack_tlv_impl, &btstack_tlv_flash_bank_context); 41 hci_set_link_key_db(btstack_link_key_db); 42 #endif 43 #ifdef ENABLE_BLE 44 // configure LE Device DB for TLV 45 le_device_db_tlv_configure(btstack_tlv_impl, &btstack_tlv_flash_bank_context); 46 #endif 47 } 48 btstack_cyw43_init(async_context_t * context)49bool btstack_cyw43_init(async_context_t *context) { 50 // Initialise bluetooth 51 btstack_memory_init(); 52 btstack_run_loop_init(btstack_run_loop_async_context_get_instance(context)); 53 54 #if WANT_HCI_DUMP 55 #ifdef ENABLE_SEGGER_RTT 56 hci_dump_init(hci_dump_segger_rtt_stdout_get_instance()); 57 #else 58 hci_dump_init(hci_dump_embedded_stdout_get_instance()); 59 #endif 60 #endif 61 62 hci_init(hci_transport_cyw43_instance(), NULL); 63 64 // setup TLV storage 65 setup_tlv(); 66 return true; 67 } 68 btstack_cyw43_deinit(__unused async_context_t * context)69void btstack_cyw43_deinit(__unused async_context_t *context) { 70 hci_power_control(HCI_POWER_OFF); 71 hci_close(); 72 btstack_run_loop_deinit(); 73 btstack_memory_deinit(); 74 }