diff --git a/components/bt/Kconfig b/components/bt/Kconfig index 4813c7a04..3bce8040f 100644 --- a/components/bt/Kconfig +++ b/components/bt/Kconfig @@ -4,34 +4,34 @@ menuconfig BT_ENABLED Select this option to enable Bluetooth stack and show the submenu with Bluetooth configuration choices. config BTC_TASK_STACK_SIZE - int "Bluetooth event (callback to application) task stack size" + int "Bluetooth event (callback to application) task stack size" depends on BT_ENABLED - default 3072 - help - This select btc task stack size + default 3072 + help + This select btc task stack size config BLUEDROID_MEM_DEBUG - bool "Bluedroid memory debug" + bool "Bluedroid memory debug" depends on BT_ENABLED - default n - help - Bluedroid memory debug + default n + help + Bluedroid memory debug config CLASSIC_BT_ENABLED - bool "Classic Bluetooth" + bool "Classic Bluetooth" depends on BT_ENABLED - default n - help - BT_DRAM_RELEASE should be set TRUE if Classic Bluetooth is enabled + default n + help + BT_DRAM_RELEASE should be set TRUE if Classic Bluetooth is enabled config BT_DRAM_RELEASE - bool "Release DRAM from Classic BT controller" + bool "Release DRAM from Classic BT controller" depends on BT_ENABLED - default n - help - This option should only be used when BLE only. - Open this option will release about 30K DRAM from Classic BT. - The released DRAM will be used as system heap memory. + default n + help + This option should only be used when BLE only. + Open this option will release about 30K DRAM from Classic BT. + The released DRAM will be used as system heap memory. # Memory reserved at start of DRAM for Bluetooth stack config BT_RESERVE_DRAM diff --git a/components/bt/bluedroid/osi/config.c b/components/bt/bluedroid/osi/config.c index ed83e695f..7c876b843 100644 --- a/components/bt/bluedroid/osi/config.c +++ b/components/bt/bluedroid/osi/config.c @@ -22,15 +22,14 @@ #include #include #include -// #include #include "allocator.h" #include "config.h" #include "list.h" #include "bt_trace.h" -#define CONFIG_FILE_MAX_SIZE (512) -#define CONFIG_KEY "cfg_key1" +#define CONFIG_FILE_MAX_SIZE (1024) +#define CONFIG_KEY "bt_cfg_key" typedef struct { char *key; char *value; diff --git a/examples/bluetooth/a2dp_sink/README.rst b/examples/bluetooth/a2dp_sink/README.rst index 734791bbd..a1f08c24f 100755 --- a/examples/bluetooth/a2dp_sink/README.rst +++ b/examples/bluetooth/a2dp_sink/README.rst @@ -1,5 +1,14 @@ -ESP-IDF A2DP-SINK -======================= +ESP-IDF A2DP-SINK demo +====================== Demo of A2DP audio sink role +This is the demo for user to use ESP_APIs to create a GATT Server. + +Options choose step: + 1. make menuconfig. + 2. enter menuconfig "Component config", choose "Bluetooth" + 3. enter menu Bluetooth, choose "Classic Bluetooth" and do not choose "Release DRAM from Classic BT controller" + 4. choose your options. + +After the program started, other bluetooth devices such as smart phones can discover this device named "ESP_SPEAKER", and after connection is established, audio data can be transmitted and there will occur a count of audio data packets printed. diff --git a/examples/bluetooth/a2dp_sink/components/bluedroid_demos/app_core/bt_app_main.c b/examples/bluetooth/a2dp_sink/components/bt_app/app_core/bt_app_main.c similarity index 96% rename from examples/bluetooth/a2dp_sink/components/bluedroid_demos/app_core/bt_app_main.c rename to examples/bluetooth/a2dp_sink/components/bt_app/app_core/bt_app_main.c index 1d79d2f2b..21cfa922f 100644 --- a/examples/bluetooth/a2dp_sink/components/bluedroid_demos/app_core/bt_app_main.c +++ b/examples/bluetooth/a2dp_sink/components/bt_app/app_core/bt_app_main.c @@ -22,14 +22,14 @@ static xTaskHandle bt_app_task_handle = NULL; bool bt_app_transfer_context (bt_app_cb_t p_cback, uint16_t event, void *p_params, int param_len, bt_app_copy_cb_t p_copy_cback) { bt_app_msg_t msg; - + memset(&msg, 0, sizeof(bt_app_msg_t)); BT_APP_TRACE_EVENT("btapp_transfer_context evt 0x%x, len %d\n", event, param_len); msg.sig = BT_APP_SIG_CONTEXT_SWITCH; msg.event = event; msg.cb = p_cback; - + if (param_len == 0) { return bt_app_post_msg(&msg); } else if (p_params && param_len > 0) { @@ -73,7 +73,7 @@ static void bt_app_task_handler(void *arg) bt_app_msg_t msg; for (;;) { if (pdTRUE == xQueueReceive(bt_app_task_queue, &msg, (portTickType)portMAX_DELAY)) { - BT_APP_TRACE_EVENT("btapp handle evt, sig 0x%x, 0x%x\n", msg.sig, msg.event); + BT_APP_TRACE_EVENT("btapp handle evt, sig 0x%x, 0x%x\n", msg.sig, msg.event); switch (msg.sig) { case BT_APP_SIG_CONTEXT_SWITCH: bt_app_context_switched(&msg); @@ -82,7 +82,7 @@ static void bt_app_task_handler(void *arg) BT_APP_TRACE_WARNING("unhandled BT_APP event (%d)\n", msg.sig); break; } // switch (msg.sig) - + if (msg.param) { free(msg.param); } diff --git a/examples/bluetooth/a2dp_sink/components/bluedroid_demos/app_project/SampleAV.c b/examples/bluetooth/a2dp_sink/components/bt_app/app_project/SampleAV.c similarity index 79% rename from examples/bluetooth/a2dp_sink/components/bluedroid_demos/app_project/SampleAV.c rename to examples/bluetooth/a2dp_sink/components/bt_app/app_project/SampleAV.c index 55f37def4..2bdd3166b 100644 --- a/examples/bluetooth/a2dp_sink/components/bluedroid_demos/app_project/SampleAV.c +++ b/examples/bluetooth/a2dp_sink/components/bt_app/app_project/SampleAV.c @@ -2,13 +2,10 @@ #include #include #include - #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "freertos/timers.h" - #include "esp_system.h" - #include "bt_app_common.h" #include "esp_bt_main.h" #include "esp_bt_device.h" @@ -16,47 +13,49 @@ #include "esp_a2dp_api.h" #include "esp_avrc_api.h" -static uint32_t m_pkt_cnt = 0; + typedef enum { BT_APP_EVT_STACK_ON = 0xa0, BT_APP_EVT_MAX } bt_app_evt_t; - typedef union { esp_a2d_cb_param_t a2d; esp_avrc_ct_cb_event_t rc; } bt_app_evt_arg; + +static uint32_t m_pkt_cnt = 0; static esp_a2d_audio_state_t m_audio_state = ESP_A2D_AUDIO_STATE_STOPPED; static void bt_app_handle_evt(uint16_t event, void *p_param); - static void bt_app_handle_rc_evt(uint16_t event, void *p_param); +static void bt_app_a2d_cb(esp_a2d_cb_event_t event, esp_a2d_cb_param_t *param); +static void bt_app_a2d_data_cb(const uint8_t *data, uint32_t len); +static void bt_app_rc_ct_cb(esp_avrc_ct_cb_event_t event, esp_avrc_ct_cb_param_t *param); +static void bt_app_handle_evt(uint16_t event, void *p_param); static void bt_app_a2d_cb(esp_a2d_cb_event_t event, esp_a2d_cb_param_t *param) { switch (event) { case ESP_A2D_CONNECTION_STATE_EVT: case ESP_A2D_AUDIO_STATE_EVT: - case ESP_A2D_AUDIO_CFG_EVT: - { - bt_app_transfer_context(bt_app_handle_evt, event, param, sizeof(bt_app_evt_arg), NULL); + case ESP_A2D_AUDIO_CFG_EVT: { + bt_app_transfer_context(bt_app_handle_evt, event, param, sizeof(bt_app_evt_arg), NULL); break; } default: - BT_APP_TRACE_ERROR("===a2dp invalid cb event: %d\n", event); + BT_APP_TRACE_ERROR("===a2dp invalid cb event: %d===\n", event); break; } } static void bt_app_a2d_data_cb(const uint8_t *data, uint32_t len) { - if (++m_pkt_cnt % 50 == 0) { + if (++m_pkt_cnt % 100 == 0) { BT_APP_TRACE_ERROR("audio data pkt cnt %u\n", m_pkt_cnt); } - // EspAudioPlayerStreamWrite((uint8_t *)data, len, 10); } static void bt_app_rc_ct_cb(esp_avrc_ct_cb_event_t event, esp_avrc_ct_cb_param_t *param) @@ -68,20 +67,20 @@ static void bt_app_rc_ct_cb(esp_avrc_ct_cb_event_t event, esp_avrc_ct_cb_param_t break; } default: - BT_APP_TRACE_ERROR("===a2dp invalid cb event: %d\n", event); + BT_APP_TRACE_ERROR("===a2dp invalid cb event: %d===\n", event); break; } } static void bt_app_handle_evt(uint16_t event, void *p_param) { - BT_APP_TRACE_DEBUG("bt_app_handle_evt 0x%x\n", event); + BT_APP_TRACE_DEBUG("===bt_app_handle_evt 0x%x===\n", event); esp_a2d_cb_param_t *a2d = NULL; switch (event) { case BT_APP_EVT_STACK_ON: { char *dev_name = "ESP_SPEAKER"; - esp_bt_dev_set_device_name(dev_name); + esp_bt_dev_set_device_name(dev_name); esp_a2d_register_callback(&bt_app_a2d_cb); esp_a2d_register_data_callback(bt_app_a2d_data_cb); @@ -90,7 +89,7 @@ static void bt_app_handle_evt(uint16_t event, void *p_param) esp_avrc_ct_init(); esp_avrc_ct_register_callback(bt_app_rc_ct_cb); - + esp_bt_gap_set_scan_mode(ESP_BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE); break; } @@ -107,21 +106,18 @@ static void bt_app_handle_evt(uint16_t event, void *p_param) } case ESP_A2D_AUDIO_CFG_EVT: { a2d = (esp_a2d_cb_param_t *)(p_param); - BT_APP_TRACE_EVENT("===a2dp audio_cfg_cb type %d ===\n", a2d->audio_cfg.mcc.type); + BT_APP_TRACE_EVENT("===a2dp audio_cfg_cb type %d===\n", a2d->audio_cfg.mcc.type); + // for now only SBC stream is supported if (a2d->audio_cfg.mcc.type == ESP_A2D_MCT_SBC) { - // temporarily hardcoded the PCM configuaration BT_APP_TRACE_EVENT("configure audio player\n"); - // EspAudioPlayerStreamCfg(StreamSampleRate_44k, 2, StreamBitLen_16BIT); - // EspAudio_SetupStream("stream.pcm", InputSrcType_Stream); - // EspAudio_SetVolume(99); } break; } default: - BT_APP_TRACE_ERROR("===application invalid event: %d\n", event); + BT_APP_TRACE_ERROR("===application invalid event: %d===\n", event); break; } - + } void bt_app_handle_rc_evt(uint16_t event, void *p_param) @@ -140,7 +136,7 @@ void bt_app_handle_rc_evt(uint16_t event, void *p_param) break; } default: - BT_APP_TRACE_ERROR("===application invalid event: %d\n", event); + BT_APP_TRACE_ERROR("===application invalid event: %d===\n", event); break; } } diff --git a/examples/bluetooth/a2dp_sink/components/bluedroid_demos/component.mk b/examples/bluetooth/a2dp_sink/components/bt_app/component.mk similarity index 100% rename from examples/bluetooth/a2dp_sink/components/bluedroid_demos/component.mk rename to examples/bluetooth/a2dp_sink/components/bt_app/component.mk diff --git a/examples/bluetooth/a2dp_sink/components/bluedroid_demos/include/bt_app_common.h b/examples/bluetooth/a2dp_sink/components/bt_app/include/bt_app_common.h similarity index 94% rename from examples/bluetooth/a2dp_sink/components/bluedroid_demos/include/bt_app_common.h rename to examples/bluetooth/a2dp_sink/components/bt_app/include/bt_app_common.h index 75c23f312..df302d529 100644 --- a/examples/bluetooth/a2dp_sink/components/bluedroid_demos/include/bt_app_common.h +++ b/examples/bluetooth/a2dp_sink/components/bt_app/include/bt_app_common.h @@ -19,7 +19,7 @@ extern int bt_app_trace_level; #define BT_APP_TRACE_ERROR(fmt, args...) {if (bt_app_trace_level >= BT_APP_TRACE_LEVEL_ERROR) BT_APP_PRINTF(fmt, ## args);} #define BT_APP_TRACE_WARNING(fmt, args...) {if (bt_app_trace_level >= BT_APP_TRACE_LEVEL_WARNING) BT_APP_PRINTF(fmt, ## args);} -#define BT_APP_TRACE_API(fmt, args...) {if (bt_app_trace_level >= BT_APP_TRACE_LEVEL_API) BT_APP_PRINTF(fmt, ## args);} +#define BT_APP_TRACE_API(fmt, args...) {if (bt_app_trace_level >= BT_APP_TRACE_LEVEL_API) BT_APP_PRINTF(fmt, ## args);} #define BT_APP_TRACE_EVENT(fmt, args...) {if (bt_app_trace_level >= BT_APP_TRACE_LEVEL_EVENT) BT_APP_PRINTF(fmt, ## args);} #define BT_APP_TRACE_DEBUG(fmt, args...) {if (bt_app_trace_level >= BT_APP_TRACE_LEVEL_DEBUG) BT_APP_PRINTF(fmt, ## args);} diff --git a/examples/bluetooth/a2dp_sink/main/demo_main.c b/examples/bluetooth/a2dp_sink/main/demo_main.c index 6cc1f0cb1..8a90e6b5a 100755 --- a/examples/bluetooth/a2dp_sink/main/demo_main.c +++ b/examples/bluetooth/a2dp_sink/main/demo_main.c @@ -8,7 +8,6 @@ #include "nvs_flash.h" #include "esp_system.h" -// #include "EspAudio.h" extern void bte_main_boot_entry(void *); extern void bt_app_task_start_up(void); @@ -17,9 +16,6 @@ extern void bt_app_core_start(void); void app_main() { nvs_flash_init(); - // system_init(); - // printf("Free memory: %d bytes\n", system_get_free_heap_size()); - // EspAudio_Init(); esp_bt_controller_init(); if (esp_bt_controller_enable(ESP_BT_MODE_BTDM) != ESP_OK) { diff --git a/examples/bluetooth/a2dp_sink/main/include/psramApi.h b/examples/bluetooth/a2dp_sink/main/include/psramApi.h deleted file mode 100644 index 2b9ef0e3f..000000000 --- a/examples/bluetooth/a2dp_sink/main/include/psramApi.h +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2010-2016 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at - -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" -#include "freertos/queue.h" -#include "string.h" -#include "stdlib.h" - -void psram_cache_enable(void); - -void psram_cache_memcpy(uint8_t *dst, uint8_t *src, uint16_t len); \ No newline at end of file diff --git a/examples/bluetooth/a2dp_sink/sdkconfig.defaults b/examples/bluetooth/a2dp_sink/sdkconfig.defaults new file mode 100644 index 000000000..ffdbe6ecd --- /dev/null +++ b/examples/bluetooth/a2dp_sink/sdkconfig.defaults @@ -0,0 +1,6 @@ +# Override some defaults so BT stack is enabled and +# Classic BT is enabled and BT_DRAM_RELEASE is disabled +CONFIG_BT_ENABLED=y +CONFIG_CLASSIC_BT_ENABLED=y +# CONFIG_BT_DRAM_RELEASE is not set +