/* * Copyright (c) 2023 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "ble/le_device_db_tlv.h" #include "classic/btstack_link_key_db_tlv.h" #include "btstack_tlv.h" #include "btstack_tlv_flash_bank.h" #include "btstack_memory.h" #include "hci.h" #if WANT_HCI_DUMP #include "hci_dump.h" #ifdef ENABLE_SEGGER_RTT #include "hci_dump_segger_rtt_stdout.h" #else #include "hci_dump_embedded_stdout.h" #endif #endif #include "pico/btstack_hci_transport_cyw43.h" #include "pico/btstack_run_loop_async_context.h" #include "pico/btstack_flash_bank.h" #include "pico/btstack_cyw43.h" static void setup_tlv(void) { static btstack_tlv_flash_bank_t btstack_tlv_flash_bank_context; const hal_flash_bank_t *hal_flash_bank_impl = pico_flash_bank_instance(); const btstack_tlv_t *btstack_tlv_impl = btstack_tlv_flash_bank_init_instance( &btstack_tlv_flash_bank_context, hal_flash_bank_impl, NULL); // setup global TLV btstack_tlv_set_instance(btstack_tlv_impl, &btstack_tlv_flash_bank_context); #ifdef ENABLE_CLASSIC 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); hci_set_link_key_db(btstack_link_key_db); #endif #ifdef ENABLE_BLE // configure LE Device DB for TLV le_device_db_tlv_configure(btstack_tlv_impl, &btstack_tlv_flash_bank_context); #endif } bool btstack_cyw43_init(async_context_t *context) { // Initialise bluetooth btstack_memory_init(); btstack_run_loop_init(btstack_run_loop_async_context_get_instance(context)); #if WANT_HCI_DUMP #ifdef ENABLE_SEGGER_RTT hci_dump_init(hci_dump_segger_rtt_stdout_get_instance()); #else hci_dump_init(hci_dump_embedded_stdout_get_instance()); #endif #endif hci_init(hci_transport_cyw43_instance(), NULL); // setup TLV storage setup_tlv(); return true; } void btstack_cyw43_deinit(__unused async_context_t *context) { hci_power_control(HCI_POWER_OFF); hci_close(); btstack_run_loop_deinit(); btstack_memory_deinit(); }