component/bt: clean up the A2DP sink example

This commit is contained in:
wangmengyang 2017-03-18 16:02:54 +08:00
parent 8ec94418de
commit 2a5d01a930
10 changed files with 62 additions and 79 deletions

View file

@ -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

View file

@ -22,15 +22,14 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// #include <sys/stat.h>
#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;

View file

@ -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.

View file

@ -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);
}

View file

@ -2,13 +2,10 @@
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#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;
}
}

View file

@ -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);}

View file

@ -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) {

View file

@ -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);

View file

@ -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