component/bt: play of audio stream functionally works
This commit is contained in:
parent
cd6d6c6280
commit
d833293581
15 changed files with 140 additions and 1979 deletions
|
@ -230,7 +230,7 @@ const tBTM_APPL_INFO bta_security =
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MAX_DISC_RAW_DATA_BUF (4096)
|
#define MAX_DISC_RAW_DATA_BUF (1024)
|
||||||
UINT8 g_disc_raw_data_buf[MAX_DISC_RAW_DATA_BUF];
|
UINT8 g_disc_raw_data_buf[MAX_DISC_RAW_DATA_BUF];
|
||||||
|
|
||||||
extern DEV_CLASS local_device_default_class;
|
extern DEV_CLASS local_device_default_class;
|
||||||
|
|
|
@ -78,12 +78,12 @@ typedef UINT16 tBTA_GATTC_INT_EVT;
|
||||||
|
|
||||||
/* max client application GATTC can support */
|
/* max client application GATTC can support */
|
||||||
#ifndef BTA_GATTC_CL_MAX
|
#ifndef BTA_GATTC_CL_MAX
|
||||||
#define BTA_GATTC_CL_MAX 8 // 32
|
#define BTA_GATTC_CL_MAX 2 // 32
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* max known devices GATTC can support */
|
/* max known devices GATTC can support */
|
||||||
#ifndef BTA_GATTC_KNOWN_SR_MAX
|
#ifndef BTA_GATTC_KNOWN_SR_MAX
|
||||||
#define BTA_GATTC_KNOWN_SR_MAX 5 // 10
|
#define BTA_GATTC_KNOWN_SR_MAX 2 // 10
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define BTA_GATTC_CONN_MAX GATT_MAX_PHY_CHANNEL
|
#define BTA_GATTC_CONN_MAX GATT_MAX_PHY_CHANNEL
|
||||||
|
|
|
@ -59,8 +59,8 @@ static pthread_mutex_t bta_alarm_lock;
|
||||||
|
|
||||||
/* trace level */
|
/* trace level */
|
||||||
/* TODO Bluedroid - Hard-coded trace levels - Needs to be configurable */
|
/* TODO Bluedroid - Hard-coded trace levels - Needs to be configurable */
|
||||||
UINT8 appl_trace_level = BT_TRACE_LEVEL_WARNING; //APPL_INITIAL_TRACE_LEVEL;
|
UINT8 appl_trace_level = APPL_INITIAL_TRACE_LEVEL;
|
||||||
UINT8 btif_trace_level = BT_TRACE_LEVEL_WARNING;
|
UINT8 btif_trace_level = BT_TRACE_LEVEL_NONE;
|
||||||
|
|
||||||
// Communication queue between btu_task and bta.
|
// Communication queue between btu_task and bta.
|
||||||
extern fixed_queue_t *btu_bta_msg_queue;
|
extern fixed_queue_t *btu_bta_msg_queue;
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
#define UNUSED(x) (void)(x)
|
#define UNUSED(x) (void)(x)
|
||||||
|
|
||||||
#ifndef SIZE_MAX
|
#ifndef SIZE_MAX
|
||||||
#define SIZE_MAX 254
|
#define SIZE_MAX 128
|
||||||
#endif
|
#endif
|
||||||
/*Timer Related Defination*/
|
/*Timer Related Defination*/
|
||||||
|
|
||||||
|
|
|
@ -403,7 +403,7 @@
|
||||||
|
|
||||||
/* Includes SCO if TRUE */
|
/* Includes SCO if TRUE */
|
||||||
#ifndef BTM_SCO_INCLUDED
|
#ifndef BTM_SCO_INCLUDED
|
||||||
#define BTM_SCO_INCLUDED TRUE /* TRUE includes SCO code */
|
#define BTM_SCO_INCLUDED FALSE /* TRUE includes SCO code */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Includes SCO if TRUE */
|
/* Includes SCO if TRUE */
|
||||||
|
@ -480,7 +480,7 @@
|
||||||
|
|
||||||
/* The number of SCO links. */
|
/* The number of SCO links. */
|
||||||
#ifndef BTM_MAX_SCO_LINKS
|
#ifndef BTM_MAX_SCO_LINKS
|
||||||
#define BTM_MAX_SCO_LINKS 3
|
#define BTM_MAX_SCO_LINKS 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The preferred type of SCO links (2-eSCO, 0-SCO). */
|
/* The preferred type of SCO links (2-eSCO, 0-SCO). */
|
||||||
|
@ -490,7 +490,7 @@
|
||||||
|
|
||||||
/* The number of security records for peer devices. 100 AS Default*/
|
/* The number of security records for peer devices. 100 AS Default*/
|
||||||
#ifndef BTM_SEC_MAX_DEVICE_RECORDS
|
#ifndef BTM_SEC_MAX_DEVICE_RECORDS
|
||||||
#define BTM_SEC_MAX_DEVICE_RECORDS 8 // 100
|
#define BTM_SEC_MAX_DEVICE_RECORDS 4 // 100
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The number of security records for services. 32 AS Default*/
|
/* The number of security records for services. 32 AS Default*/
|
||||||
|
@ -636,12 +636,12 @@
|
||||||
|
|
||||||
/* The maximum number of simultaneous channels that L2CAP can support. Up to 16*/
|
/* The maximum number of simultaneous channels that L2CAP can support. Up to 16*/
|
||||||
#ifndef MAX_L2CAP_CHANNELS
|
#ifndef MAX_L2CAP_CHANNELS
|
||||||
#define MAX_L2CAP_CHANNELS 8
|
#define MAX_L2CAP_CHANNELS 4
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The maximum number of simultaneous applications that can register with L2CAP. */
|
/* The maximum number of simultaneous applications that can register with L2CAP. */
|
||||||
#ifndef MAX_L2CAP_CLIENTS
|
#ifndef MAX_L2CAP_CLIENTS
|
||||||
#define MAX_L2CAP_CLIENTS 8
|
#define MAX_L2CAP_CLIENTS 4
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The number of seconds of link inactivity before a link is disconnected. */
|
/* The number of seconds of link inactivity before a link is disconnected. */
|
||||||
|
@ -878,15 +878,15 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GATT_MAX_SR_PROFILES
|
#ifndef GATT_MAX_SR_PROFILES
|
||||||
#define GATT_MAX_SR_PROFILES 8 /* max is 32 */
|
#define GATT_MAX_SR_PROFILES 2 /* max is 32 */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GATT_MAX_APPS
|
#ifndef GATT_MAX_APPS
|
||||||
#define GATT_MAX_APPS 8 /* MAX is 32 note: 2 apps used internally GATT and GAP */
|
#define GATT_MAX_APPS 2 /* MAX is 32 note: 2 apps used internally GATT and GAP */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GATT_MAX_PHY_CHANNEL
|
#ifndef GATT_MAX_PHY_CHANNEL
|
||||||
#define GATT_MAX_PHY_CHANNEL 7
|
#define GATT_MAX_PHY_CHANNEL 2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Used for conformance testing ONLY */
|
/* Used for conformance testing ONLY */
|
||||||
|
@ -897,7 +897,7 @@
|
||||||
/* number of background connection device allowence, ideally to be the same as WL size
|
/* number of background connection device allowence, ideally to be the same as WL size
|
||||||
*/
|
*/
|
||||||
#ifndef GATT_MAX_BG_CONN_DEV
|
#ifndef GATT_MAX_BG_CONN_DEV
|
||||||
#define GATT_MAX_BG_CONN_DEV 8 /*MAX is 32*/
|
#define GATT_MAX_BG_CONN_DEV 2 /*MAX is 32*/
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
@ -1006,11 +1006,11 @@
|
||||||
|
|
||||||
/* The maximum number of attributes in each record. */
|
/* The maximum number of attributes in each record. */
|
||||||
#ifndef SDP_MAX_REC_ATTR
|
#ifndef SDP_MAX_REC_ATTR
|
||||||
#define SDP_MAX_REC_ATTR 25
|
#define SDP_MAX_REC_ATTR 8
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef SDP_MAX_PAD_LEN
|
#ifndef SDP_MAX_PAD_LEN
|
||||||
#define SDP_MAX_PAD_LEN 600
|
#define SDP_MAX_PAD_LEN 300
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The maximum length, in bytes, of an attribute. */
|
/* The maximum length, in bytes, of an attribute. */
|
||||||
|
|
|
@ -187,7 +187,7 @@ inline void trc_dump_buffer(uint8_t *prefix, uint8_t *data, uint16_t len)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef BTM_INITIAL_TRACE_LEVEL
|
#ifndef BTM_INITIAL_TRACE_LEVEL
|
||||||
#define BTM_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_WARNING
|
#define BTM_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_NONE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef L2CAP_INITIAL_TRACE_LEVEL
|
#ifndef L2CAP_INITIAL_TRACE_LEVEL
|
||||||
|
@ -239,7 +239,7 @@ inline void trc_dump_buffer(uint8_t *prefix, uint8_t *data, uint16_t len)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef APPL_INITIAL_TRACE_LEVEL
|
#ifndef APPL_INITIAL_TRACE_LEVEL
|
||||||
#define APPL_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_WARNING
|
#define APPL_INITIAL_TRACE_LEVEL BT_TRACE_LEVEL_NONE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef BT_TRACE_APPL
|
#ifndef BT_TRACE_APPL
|
||||||
|
@ -262,7 +262,7 @@ inline void trc_dump_buffer(uint8_t *prefix, uint8_t *data, uint16_t len)
|
||||||
#define LOG_LEVEL_DEBUG 4
|
#define LOG_LEVEL_DEBUG 4
|
||||||
#define LOG_LEVEL_VERBOSE 5
|
#define LOG_LEVEL_VERBOSE 5
|
||||||
#ifndef LOG_LEVEL
|
#ifndef LOG_LEVEL
|
||||||
#define LOG_LEVEL LOG_LEVEL_ERROR
|
#define LOG_LEVEL 0
|
||||||
#endif
|
#endif
|
||||||
#define LOG_ERROR(fmt, args...) do {if (LOG_LEVEL >= LOG_LEVEL_ERROR) ets_printf(fmt,## args);} while(0)
|
#define LOG_ERROR(fmt, args...) do {if (LOG_LEVEL >= LOG_LEVEL_ERROR) ets_printf(fmt,## args);} while(0)
|
||||||
#define LOG_WARN(fmt, args...) do {if (LOG_LEVEL >= LOG_LEVEL_WARN) ets_printf(fmt,## args);} while(0)
|
#define LOG_WARN(fmt, args...) do {if (LOG_LEVEL >= LOG_LEVEL_WARN) ets_printf(fmt,## args);} while(0)
|
||||||
|
|
|
@ -182,7 +182,7 @@ typedef struct
|
||||||
TIMER_LIST_ENT raddr_timer_ent;
|
TIMER_LIST_ENT raddr_timer_ent;
|
||||||
} tBTM_LE_RANDOM_CB;
|
} tBTM_LE_RANDOM_CB;
|
||||||
|
|
||||||
#define BTM_BLE_MAX_BG_CONN_DEV_NUM 10
|
#define BTM_BLE_MAX_BG_CONN_DEV_NUM 2
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
|
|
@ -135,11 +135,11 @@ typedef UINT16 tGATT_DISCONN_REASON;
|
||||||
#define GATT_INVALID_CONN_ID 0xFFFF
|
#define GATT_INVALID_CONN_ID 0xFFFF
|
||||||
|
|
||||||
#ifndef GATT_CL_MAX_LCB
|
#ifndef GATT_CL_MAX_LCB
|
||||||
#define GATT_CL_MAX_LCB 12 // 22
|
#define GATT_CL_MAX_LCB 2 // 22
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GATT_MAX_SCCB
|
#ifndef GATT_MAX_SCCB
|
||||||
#define GATT_MAX_SCCB 10
|
#define GATT_MAX_SCCB 2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -192,7 +192,7 @@ void l2c_rcv_acl_data (BT_HDR *p_msg)
|
||||||
/* only process fixed channel data as channel open indication when link is not in disconnecting mode */
|
/* only process fixed channel data as channel open indication when link is not in disconnecting mode */
|
||||||
l2cble_notify_le_connection(p_lcb->remote_bd_addr);
|
l2cble_notify_le_connection(p_lcb->remote_bd_addr);
|
||||||
#endif
|
#endif
|
||||||
L2CAP_TRACE_WARNING ("L2CAP - rcv_cid CID: 0x%04x\n", rcv_cid);
|
L2CAP_TRACE_DEBUG ("L2CAP - rcv_cid CID: 0x%04x\n", rcv_cid);
|
||||||
/* Find the CCB for this CID */
|
/* Find the CCB for this CID */
|
||||||
if (rcv_cid >= L2CAP_BASE_APPL_CID)
|
if (rcv_cid >= L2CAP_BASE_APPL_CID)
|
||||||
{
|
{
|
||||||
|
|
|
@ -134,7 +134,7 @@ void bt_app_task_start_up(void)
|
||||||
//ke_event_callback_set(KE_EVENT_BT_APP_TASK, &bt_app_task_handler);
|
//ke_event_callback_set(KE_EVENT_BT_APP_TASK, &bt_app_task_handler);
|
||||||
|
|
||||||
xBtAppQueue = xQueueCreate(3, sizeof(void *));
|
xBtAppQueue = xQueueCreate(3, sizeof(void *));
|
||||||
xTaskCreate(bt_app_task_handler, "BtaApp1T", 8192, NULL, configMAX_PRIORITIES - 3, xBtAppTaskHandle);
|
xTaskCreate(bt_app_task_handler, "BtaApp1T", 2048, NULL, configMAX_PRIORITIES - 3, xBtAppTaskHandle);
|
||||||
|
|
||||||
fixed_queue_register_dequeue(bt_app_msg_queue, bta_app_msg_ready);
|
fixed_queue_register_dequeue(bt_app_msg_queue, bta_app_msg_ready);
|
||||||
|
|
||||||
|
|
|
@ -91,7 +91,7 @@ static void bt_app_stack_evt(UINT16 event, char *p_param)
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case BT_APP_EVT_STACK_ON: {
|
case BT_APP_EVT_STACK_ON: {
|
||||||
char *dev_name = "SDP_SERVER_CLIENT";
|
char *dev_name = "SDP_SERVER_CLIENT";
|
||||||
BTM_SetTraceLevel(BT_TRACE_LEVEL_DEBUG);
|
BTM_SetTraceLevel(BT_TRACE_LEVEL_WARNING);
|
||||||
btav_set_device_class();
|
btav_set_device_class();
|
||||||
BTA_DmSetDeviceName(dev_name);
|
BTA_DmSetDeviceName(dev_name);
|
||||||
esp_bt_gap_set_scan_mode(BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE);
|
esp_bt_gap_set_scan_mode(BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE);
|
||||||
|
|
135
examples/09_a2dp/components/bluedroid_demos/btif/btif_media_task.c
Executable file → Normal file
135
examples/09_a2dp/components/bluedroid_demos/btif/btif_media_task.c
Executable file → Normal file
|
@ -761,6 +761,7 @@ static void btif_media_task_handler(void *arg)
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if (pdTRUE == xQueueReceive(xBtifMediaQueue, &e, (portTickType)portMAX_DELAY)) {
|
if (pdTRUE == xQueueReceive(xBtifMediaQueue, &e, (portTickType)portMAX_DELAY)) {
|
||||||
|
// LOG_ERROR("med evt %d\n", e->sig);
|
||||||
switch (e->sig) {
|
switch (e->sig) {
|
||||||
case SIG_MEDIA_TASK_AVK_ALARM_TO:
|
case SIG_MEDIA_TASK_AVK_ALARM_TO:
|
||||||
btif_media_task_avk_handle_timer(NULL);
|
btif_media_task_avk_handle_timer(NULL);
|
||||||
|
@ -777,7 +778,7 @@ static void btif_media_task_handler(void *arg)
|
||||||
btif_media_thread_cleanup(NULL);
|
btif_media_thread_cleanup(NULL);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
APPL_TRACE_ERROR("media task unhandled evt: 0x%x\n\n", e->sig);
|
APPL_TRACE_ERROR("media task unhandled evt: 0x%x\n", e->sig);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
osi_free(e);
|
osi_free(e);
|
||||||
|
@ -803,13 +804,13 @@ bool btif_a2dp_start_media_task(void)
|
||||||
if (xBtifMediaQueue == 0) {
|
if (xBtifMediaQueue == 0) {
|
||||||
goto error_exit;
|
goto error_exit;
|
||||||
}
|
}
|
||||||
xTaskCreate(btif_media_task_handler, "BtifMediaT\n", 8192, NULL, configMAX_PRIORITIES - 1, &xBtifMediaTaskHandle);
|
xTaskCreate(btif_media_task_handler, "BtifMediaT\n", 2048+1024, NULL, configMAX_PRIORITIES - 1, &xBtifMediaTaskHandle);
|
||||||
if (xBtifMediaTaskHandle == NULL)
|
if (xBtifMediaTaskHandle == NULL)
|
||||||
goto error_exit;
|
goto error_exit;
|
||||||
fixed_queue_register_dequeue(btif_media_cmd_msg_queue, btif_media_thread_handle_cmd);
|
fixed_queue_register_dequeue(btif_media_cmd_msg_queue, btif_media_thread_handle_cmd);
|
||||||
btif_media_task_post(SIG_MEDIA_TASK_INIT);
|
btif_media_task_post(SIG_MEDIA_TASK_INIT);
|
||||||
|
|
||||||
APPL_TRACE_EVENT("## A2DP MEDIA THREAD STARTED ##");
|
APPL_TRACE_EVENT("## A2DP MEDIA THREAD STARTED ##\n");
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -832,7 +833,7 @@ bool btif_a2dp_start_media_task(void)
|
||||||
|
|
||||||
void btif_a2dp_stop_media_task(void)
|
void btif_a2dp_stop_media_task(void)
|
||||||
{
|
{
|
||||||
APPL_TRACE_EVENT("## A2DP STOP MEDIA THREAD ##");
|
APPL_TRACE_EVENT("## A2DP STOP MEDIA THREAD ##\n");
|
||||||
|
|
||||||
// Stop timer
|
// Stop timer
|
||||||
osi_alarm_free(btif_media_cb.media_alarm);
|
osi_alarm_free(btif_media_cb.media_alarm);
|
||||||
|
@ -841,6 +842,7 @@ void btif_a2dp_stop_media_task(void)
|
||||||
|
|
||||||
// Exit thread
|
// Exit thread
|
||||||
btif_media_task_post(SIG_MEDIA_TASK_CLEAN_UP);
|
btif_media_task_post(SIG_MEDIA_TASK_CLEAN_UP);
|
||||||
|
// TODO: wait until CLEAN up is done, then do task delete
|
||||||
vTaskDelete(xBtifMediaTaskHandle);
|
vTaskDelete(xBtifMediaTaskHandle);
|
||||||
xBtifMediaTaskHandle = NULL;
|
xBtifMediaTaskHandle = NULL;
|
||||||
vQueueDelete(xBtifMediaQueue);
|
vQueueDelete(xBtifMediaQueue);
|
||||||
|
@ -881,7 +883,7 @@ void btif_a2dp_setup_codec(void)
|
||||||
tBTIF_AV_MEDIA_FEEDINGS media_feeding;
|
tBTIF_AV_MEDIA_FEEDINGS media_feeding;
|
||||||
tBTIF_STATUS status;
|
tBTIF_STATUS status;
|
||||||
|
|
||||||
APPL_TRACE_EVENT("## A2DP SETUP CODEC ##");
|
APPL_TRACE_EVENT("## A2DP SETUP CODEC ##\n");
|
||||||
|
|
||||||
GKI_disable();
|
GKI_disable();
|
||||||
|
|
||||||
|
@ -921,7 +923,7 @@ void btif_a2dp_setup_codec(void)
|
||||||
|
|
||||||
void btif_a2dp_on_idle(void)
|
void btif_a2dp_on_idle(void)
|
||||||
{
|
{
|
||||||
APPL_TRACE_EVENT("## ON A2DP IDLE ##");
|
APPL_TRACE_EVENT("## ON A2DP IDLE ##\n");
|
||||||
if (btif_media_cb.peer_sep == AVDT_TSEP_SNK)
|
if (btif_media_cb.peer_sep == AVDT_TSEP_SNK)
|
||||||
{
|
{
|
||||||
/* Make sure media task is stopped */
|
/* Make sure media task is stopped */
|
||||||
|
@ -953,7 +955,7 @@ void btif_a2dp_on_idle(void)
|
||||||
|
|
||||||
void btif_a2dp_on_open(void)
|
void btif_a2dp_on_open(void)
|
||||||
{
|
{
|
||||||
APPL_TRACE_EVENT("## ON A2DP OPEN ##");
|
APPL_TRACE_EVENT("## ON A2DP OPEN ##\n");
|
||||||
|
|
||||||
/* always use callback to notify socket events */
|
/* always use callback to notify socket events */
|
||||||
UIPC_Open(UIPC_CH_ID_AV_AUDIO, btif_a2dp_data_cb);
|
UIPC_Open(UIPC_CH_ID_AV_AUDIO, btif_a2dp_data_cb);
|
||||||
|
@ -980,6 +982,7 @@ BOOLEAN btif_media_task_clear_track(void)
|
||||||
p_buf->event = BTIF_MEDIA_AUDIO_SINK_CLEAR_TRACK;
|
p_buf->event = BTIF_MEDIA_AUDIO_SINK_CLEAR_TRACK;
|
||||||
|
|
||||||
fixed_queue_enqueue(btif_media_cmd_msg_queue, p_buf);
|
fixed_queue_enqueue(btif_media_cmd_msg_queue, p_buf);
|
||||||
|
btif_media_task_post(SIG_MEDIA_TASK_CMD_READY);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -995,22 +998,25 @@ BOOLEAN btif_media_task_clear_track(void)
|
||||||
|
|
||||||
void btif_reset_decoder(UINT8 *p_av)
|
void btif_reset_decoder(UINT8 *p_av)
|
||||||
{
|
{
|
||||||
APPL_TRACE_EVENT("btif_reset_decoder");
|
APPL_TRACE_EVENT("btif_reset_decoder\n");
|
||||||
APPL_TRACE_DEBUG("btif_reset_decoder p_codec_info[%x:%x:%x:%x:%x:%x]\n",
|
APPL_TRACE_DEBUG("btif_reset_decoder p_codec_info[%x:%x:%x:%x:%x:%x]\n",
|
||||||
p_av[1], p_av[2], p_av[3],
|
p_av[1], p_av[2], p_av[3],
|
||||||
p_av[4], p_av[5], p_av[6]);
|
p_av[4], p_av[5], p_av[6]);
|
||||||
|
|
||||||
tBTIF_MEDIA_SINK_CFG_UPDATE *p_buf;
|
tBTIF_MEDIA_SINK_CFG_UPDATE *p_buf;
|
||||||
|
LOG_ERROR("btif_reset_decoder 1\n");
|
||||||
if (NULL == (p_buf = GKI_getbuf(sizeof(tBTIF_MEDIA_SINK_CFG_UPDATE))))
|
if (NULL == (p_buf = GKI_getbuf(sizeof(tBTIF_MEDIA_SINK_CFG_UPDATE))))
|
||||||
{
|
{
|
||||||
APPL_TRACE_EVENT("btif_reset_decoder No Buffer ");
|
APPL_TRACE_ERROR("btif_reset_decoder No Buffer ");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOG_ERROR("btif_reset_decoder 2\n");
|
||||||
memcpy(p_buf->codec_info,p_av, AVDT_CODEC_SIZE);
|
memcpy(p_buf->codec_info,p_av, AVDT_CODEC_SIZE);
|
||||||
p_buf->hdr.event = BTIF_MEDIA_AUDIO_SINK_CFG_UPDATE;
|
p_buf->hdr.event = BTIF_MEDIA_AUDIO_SINK_CFG_UPDATE;
|
||||||
|
|
||||||
fixed_queue_enqueue(btif_media_cmd_msg_queue, p_buf);
|
fixed_queue_enqueue(btif_media_cmd_msg_queue, p_buf);
|
||||||
|
btif_media_task_post(SIG_MEDIA_TASK_CMD_READY);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
@ -1027,7 +1033,7 @@ BOOLEAN btif_a2dp_on_started(tBTA_AV_START *p_av, BOOLEAN pending_start)
|
||||||
{
|
{
|
||||||
BOOLEAN ack = FALSE;
|
BOOLEAN ack = FALSE;
|
||||||
|
|
||||||
APPL_TRACE_EVENT("## ON A2DP STARTED ##");
|
APPL_TRACE_EVENT("## ON A2DP STARTED ##\n");
|
||||||
|
|
||||||
if (p_av == NULL)
|
if (p_av == NULL)
|
||||||
{
|
{
|
||||||
|
@ -1078,7 +1084,7 @@ BOOLEAN btif_a2dp_on_started(tBTA_AV_START *p_av, BOOLEAN pending_start)
|
||||||
|
|
||||||
void btif_a2dp_ack_fail(void)
|
void btif_a2dp_ack_fail(void)
|
||||||
{
|
{
|
||||||
APPL_TRACE_EVENT("## A2DP_CTRL_ACK_FAILURE ##");
|
APPL_TRACE_EVENT("## A2DP_CTRL_ACK_FAILURE ##\n");
|
||||||
a2dp_cmd_acknowledge(A2DP_CTRL_ACK_FAILURE);
|
a2dp_cmd_acknowledge(A2DP_CTRL_ACK_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1094,7 +1100,7 @@ void btif_a2dp_ack_fail(void)
|
||||||
|
|
||||||
void btif_a2dp_on_stopped(tBTA_AV_SUSPEND *p_av)
|
void btif_a2dp_on_stopped(tBTA_AV_SUSPEND *p_av)
|
||||||
{
|
{
|
||||||
APPL_TRACE_EVENT("## ON A2DP STOPPED ##");
|
APPL_TRACE_EVENT("## ON A2DP STOPPED ##\n");
|
||||||
if (btif_media_cb.peer_sep == AVDT_TSEP_SRC) /* Handling for A2DP SINK cases*/
|
if (btif_media_cb.peer_sep == AVDT_TSEP_SRC) /* Handling for A2DP SINK cases*/
|
||||||
{
|
{
|
||||||
btif_media_cb.rx_flush = TRUE;
|
btif_media_cb.rx_flush = TRUE;
|
||||||
|
@ -1140,7 +1146,7 @@ void btif_a2dp_on_stopped(tBTA_AV_SUSPEND *p_av)
|
||||||
|
|
||||||
void btif_a2dp_on_suspended(tBTA_AV_SUSPEND *p_av)
|
void btif_a2dp_on_suspended(tBTA_AV_SUSPEND *p_av)
|
||||||
{
|
{
|
||||||
APPL_TRACE_EVENT("## ON A2DP SUSPENDED ##");
|
APPL_TRACE_EVENT("## ON A2DP SUSPENDED ##\n");
|
||||||
if (btif_media_cb.peer_sep == AVDT_TSEP_SRC)
|
if (btif_media_cb.peer_sep == AVDT_TSEP_SRC)
|
||||||
{
|
{
|
||||||
btif_media_cb.rx_flush = TRUE;
|
btif_media_cb.rx_flush = TRUE;
|
||||||
|
@ -1200,8 +1206,13 @@ static void btif_media_task_avk_handle_timer(UNUSED_ATTR void *context)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
num_frames_to_process = btif_media_cb.frames_to_process;
|
// temporary hack
|
||||||
|
num_frames_to_process = 7;
|
||||||
|
// num_frames_to_process = btif_media_cb.frames_to_process;
|
||||||
|
|
||||||
|
|
||||||
APPL_TRACE_DEBUG(" Process Frames + ");
|
APPL_TRACE_DEBUG(" Process Frames + ");
|
||||||
|
// LOG_ERROR("Process_Frames %d+\n", btif_media_cb.frames_to_process);
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
@ -1209,9 +1220,10 @@ static void btif_media_task_avk_handle_timer(UNUSED_ATTR void *context)
|
||||||
if (p_msg == NULL)
|
if (p_msg == NULL)
|
||||||
return;
|
return;
|
||||||
num_sbc_frames = p_msg->num_frames_to_be_processed; /* num of frames in Que Packets */
|
num_sbc_frames = p_msg->num_frames_to_be_processed; /* num of frames in Que Packets */
|
||||||
APPL_TRACE_DEBUG(" Frames left in topmost packet %d\n", num_sbc_frames);
|
// APPL_TRACE_DEBUG(" Frames left in topmost packet %d\n", num_sbc_frames);
|
||||||
APPL_TRACE_DEBUG(" Remaining frames to process in tick %d\n", num_frames_to_process);
|
// APPL_TRACE_DEBUG(" Remaining frames to process in tick %d\n", num_frames_to_process);
|
||||||
APPL_TRACE_DEBUG(" Num of Packets in Que %d\n", btif_media_cb.RxSbcQ._count);
|
// APPL_TRACE_DEBUG(" Num of Packets in Que %d\n", btif_media_cb.RxSbcQ._count);
|
||||||
|
// LOG_ERROR(" Frames %d %d %d\n", num_sbc_frames, num_frames_to_process, btif_media_cb.RxSbcQ._count);
|
||||||
|
|
||||||
if ( num_sbc_frames > num_frames_to_process) /* Que Packet has more frames*/
|
if ( num_sbc_frames > num_frames_to_process) /* Que Packet has more frames*/
|
||||||
{
|
{
|
||||||
|
@ -1272,6 +1284,7 @@ static void btif_media_task_aa_handle_uipc_rx_rdy(void)
|
||||||
|
|
||||||
static void btif_media_thread_init(UNUSED_ATTR void *context) {
|
static void btif_media_thread_init(UNUSED_ATTR void *context) {
|
||||||
memset(&btif_media_cb, 0, sizeof(btif_media_cb));
|
memset(&btif_media_cb, 0, sizeof(btif_media_cb));
|
||||||
|
LOG_ERROR("med thread init\n");
|
||||||
UIPC_Init(NULL);
|
UIPC_Init(NULL);
|
||||||
|
|
||||||
#if (BTA_AV_INCLUDED == TRUE)
|
#if (BTA_AV_INCLUDED == TRUE)
|
||||||
|
@ -1302,6 +1315,7 @@ static void btif_media_thread_cleanup(UNUSED_ATTR void *context) {
|
||||||
** Returns TRUE is success
|
** Returns TRUE is success
|
||||||
**
|
**
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
// TODO: unused function
|
||||||
BOOLEAN btif_media_task_send_cmd_evt(UINT16 Evt)
|
BOOLEAN btif_media_task_send_cmd_evt(UINT16 Evt)
|
||||||
{
|
{
|
||||||
BT_HDR *p_buf;
|
BT_HDR *p_buf;
|
||||||
|
@ -1367,6 +1381,7 @@ static void btif_media_thread_handle_cmd(fixed_queue_t *queue)
|
||||||
break;
|
break;
|
||||||
case BTIF_MEDIA_AUDIO_SINK_CFG_UPDATE:
|
case BTIF_MEDIA_AUDIO_SINK_CFG_UPDATE:
|
||||||
#if (BTA_AV_SINK_INCLUDED == TRUE)
|
#if (BTA_AV_SINK_INCLUDED == TRUE)
|
||||||
|
LOG_ERROR("SINK_CFG_UPDATE: xx\n");
|
||||||
btif_media_task_aa_handle_decoder_reset(p_msg);
|
btif_media_task_aa_handle_decoder_reset(p_msg);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
@ -1409,18 +1424,21 @@ static void btif_media_task_handle_inc_media(tBT_SBC_HDR*p_msg)
|
||||||
UINT32 sbc_frame_len = p_msg->len - 1;
|
UINT32 sbc_frame_len = p_msg->len - 1;
|
||||||
availPcmBytes = 2*sizeof(pcmData);
|
availPcmBytes = 2*sizeof(pcmData);
|
||||||
|
|
||||||
|
// LOG_ERROR("inc med\n");
|
||||||
if ((btif_media_cb.peer_sep == AVDT_TSEP_SNK) || (btif_media_cb.rx_flush))
|
if ((btif_media_cb.peer_sep == AVDT_TSEP_SNK) || (btif_media_cb.rx_flush))
|
||||||
{
|
{
|
||||||
APPL_TRACE_DEBUG(" State Changed happened in this tick ");
|
APPL_TRACE_DEBUG(" State Changed happened in this tick ");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
// temporary hack
|
||||||
// ignore data if no one is listening
|
// ignore data if no one is listening
|
||||||
if (!btif_media_cb.data_channel_open)
|
if (!btif_media_cb.data_channel_open)
|
||||||
return;
|
return;
|
||||||
|
#endif
|
||||||
APPL_TRACE_DEBUG("Number of sbc frames %d, frame_len %d\n", num_sbc_frames, sbc_frame_len);
|
APPL_TRACE_DEBUG("Number of sbc frames %d, frame_len %d\n", num_sbc_frames, sbc_frame_len);
|
||||||
|
// LOG_ERROR("Number of sbc frames %d, frame_len %d\n", num_sbc_frames, sbc_frame_len);
|
||||||
for(count = 0; count < num_sbc_frames && sbc_frame_len != 0; count ++)
|
for(count = 0; count < num_sbc_frames && sbc_frame_len != 0; count ++)
|
||||||
{
|
{
|
||||||
pcmBytes = availPcmBytes;
|
pcmBytes = availPcmBytes;
|
||||||
|
@ -1429,7 +1447,7 @@ static void btif_media_task_handle_inc_media(tBT_SBC_HDR*p_msg)
|
||||||
(OI_INT16 *)pcmDataPointer,
|
(OI_INT16 *)pcmDataPointer,
|
||||||
(OI_UINT32 *)&pcmBytes);
|
(OI_UINT32 *)&pcmBytes);
|
||||||
if (!OI_SUCCESS(status)) {
|
if (!OI_SUCCESS(status)) {
|
||||||
APPL_TRACE_ERROR("Decoding failure: %d\n\n", status);
|
APPL_TRACE_ERROR("Decoding failure: %d\n", status);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
availPcmBytes -= pcmBytes;
|
availPcmBytes -= pcmBytes;
|
||||||
|
@ -1437,6 +1455,7 @@ static void btif_media_task_handle_inc_media(tBT_SBC_HDR*p_msg)
|
||||||
p_msg->offset += (p_msg->len - 1) - sbc_frame_len;
|
p_msg->offset += (p_msg->len - 1) - sbc_frame_len;
|
||||||
p_msg->len = sbc_frame_len + 1;
|
p_msg->len = sbc_frame_len + 1;
|
||||||
}
|
}
|
||||||
|
// LOG_ERROR("pre-send: %d\n", availPcmBytes);
|
||||||
|
|
||||||
UIPC_Send(UIPC_CH_ID_AV_AUDIO, 0, (UINT8 *)pcmData, (2*sizeof(pcmData) - availPcmBytes));
|
UIPC_Send(UIPC_CH_ID_AV_AUDIO, 0, (UINT8 *)pcmData, (2*sizeof(pcmData) - availPcmBytes));
|
||||||
}
|
}
|
||||||
|
@ -1464,6 +1483,7 @@ BOOLEAN btif_media_task_enc_init_req(tBTIF_MEDIA_INIT_AUDIO *p_msg)
|
||||||
p_buf->hdr.event = BTIF_MEDIA_SBC_ENC_INIT;
|
p_buf->hdr.event = BTIF_MEDIA_SBC_ENC_INIT;
|
||||||
|
|
||||||
fixed_queue_enqueue(btif_media_cmd_msg_queue, p_buf);
|
fixed_queue_enqueue(btif_media_cmd_msg_queue, p_buf);
|
||||||
|
btif_media_task_post(SIG_MEDIA_TASK_CMD_READY);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1488,6 +1508,7 @@ BOOLEAN btif_media_task_enc_update_req(tBTIF_MEDIA_UPDATE_AUDIO *p_msg)
|
||||||
p_buf->hdr.event = BTIF_MEDIA_SBC_ENC_UPDATE;
|
p_buf->hdr.event = BTIF_MEDIA_SBC_ENC_UPDATE;
|
||||||
|
|
||||||
fixed_queue_enqueue(btif_media_cmd_msg_queue, p_buf);
|
fixed_queue_enqueue(btif_media_cmd_msg_queue, p_buf);
|
||||||
|
btif_media_task_post(SIG_MEDIA_TASK_CMD_READY);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1512,6 +1533,7 @@ BOOLEAN btif_media_task_audio_feeding_init_req(tBTIF_MEDIA_INIT_AUDIO_FEEDING *p
|
||||||
p_buf->hdr.event = BTIF_MEDIA_AUDIO_FEEDING_INIT;
|
p_buf->hdr.event = BTIF_MEDIA_AUDIO_FEEDING_INIT;
|
||||||
|
|
||||||
fixed_queue_enqueue(btif_media_cmd_msg_queue, p_buf);
|
fixed_queue_enqueue(btif_media_cmd_msg_queue, p_buf);
|
||||||
|
btif_media_task_post(SIG_MEDIA_TASK_CMD_READY);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1536,6 +1558,7 @@ BOOLEAN btif_media_task_start_aa_req(void)
|
||||||
p_buf->event = BTIF_MEDIA_START_AA_TX;
|
p_buf->event = BTIF_MEDIA_START_AA_TX;
|
||||||
|
|
||||||
fixed_queue_enqueue(btif_media_cmd_msg_queue, p_buf);
|
fixed_queue_enqueue(btif_media_cmd_msg_queue, p_buf);
|
||||||
|
btif_media_task_post(SIG_MEDIA_TASK_CMD_READY);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1568,8 +1591,10 @@ BOOLEAN btif_media_task_stop_aa_req(void)
|
||||||
* the "cleanup() -> btif_a2dp_stop_media_task()" processing during
|
* the "cleanup() -> btif_a2dp_stop_media_task()" processing during
|
||||||
* the shutdown of the Bluetooth stack.
|
* the shutdown of the Bluetooth stack.
|
||||||
*/
|
*/
|
||||||
if (btif_media_cmd_msg_queue != NULL)
|
if (btif_media_cmd_msg_queue != NULL) {
|
||||||
fixed_queue_enqueue(btif_media_cmd_msg_queue, p_buf);
|
fixed_queue_enqueue(btif_media_cmd_msg_queue, p_buf);
|
||||||
|
btif_media_task_post(SIG_MEDIA_TASK_CMD_READY);
|
||||||
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -1597,6 +1622,7 @@ BOOLEAN btif_media_task_aa_rx_flush_req(void)
|
||||||
p_buf->event = BTIF_MEDIA_FLUSH_AA_RX;
|
p_buf->event = BTIF_MEDIA_FLUSH_AA_RX;
|
||||||
|
|
||||||
fixed_queue_enqueue(btif_media_cmd_msg_queue, p_buf);
|
fixed_queue_enqueue(btif_media_cmd_msg_queue, p_buf);
|
||||||
|
btif_media_task_post(SIG_MEDIA_TASK_CMD_READY);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1628,8 +1654,10 @@ BOOLEAN btif_media_task_aa_tx_flush_req(void)
|
||||||
* the "cleanup() -> btif_a2dp_stop_media_task()" processing during
|
* the "cleanup() -> btif_a2dp_stop_media_task()" processing during
|
||||||
* the shutdown of the Bluetooth stack.
|
* the shutdown of the Bluetooth stack.
|
||||||
*/
|
*/
|
||||||
if (btif_media_cmd_msg_queue != NULL)
|
if (btif_media_cmd_msg_queue != NULL) {
|
||||||
fixed_queue_enqueue(btif_media_cmd_msg_queue, p_buf);
|
fixed_queue_enqueue(btif_media_cmd_msg_queue, p_buf);
|
||||||
|
btif_media_task_post(SIG_MEDIA_TASK_CMD_READY);
|
||||||
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -1729,7 +1757,6 @@ static void btif_media_task_enc_init(BT_HDR *p_msg)
|
||||||
** Returns void
|
** Returns void
|
||||||
**
|
**
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
static void btif_media_task_enc_update(BT_HDR *p_msg)
|
static void btif_media_task_enc_update(BT_HDR *p_msg)
|
||||||
{
|
{
|
||||||
tBTIF_MEDIA_UPDATE_AUDIO * pUpdateAudio = (tBTIF_MEDIA_UPDATE_AUDIO *) p_msg;
|
tBTIF_MEDIA_UPDATE_AUDIO * pUpdateAudio = (tBTIF_MEDIA_UPDATE_AUDIO *) p_msg;
|
||||||
|
@ -1941,7 +1968,6 @@ static void btif_media_task_pcm2sbc_init(tBTIF_MEDIA_INIT_AUDIO_FEEDING * p_feed
|
||||||
btif_media_cb.encoder.s16NumOfSubBands, btif_media_cb.encoder.s16NumOfBlocks,
|
btif_media_cb.encoder.s16NumOfSubBands, btif_media_cb.encoder.s16NumOfBlocks,
|
||||||
btif_media_cb.encoder.s16AllocationMethod, btif_media_cb.encoder.u16BitRate,
|
btif_media_cb.encoder.s16AllocationMethod, btif_media_cb.encoder.u16BitRate,
|
||||||
btif_media_cb.encoder.s16SamplingFreq);
|
btif_media_cb.encoder.s16SamplingFreq);
|
||||||
|
|
||||||
SBC_Encoder_Init(&(btif_media_cb.encoder));
|
SBC_Encoder_Init(&(btif_media_cb.encoder));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1950,7 +1976,6 @@ static void btif_media_task_pcm2sbc_init(tBTIF_MEDIA_INIT_AUDIO_FEEDING * p_feed
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
**
|
**
|
||||||
** Function btif_media_task_audio_feeding_init
|
** Function btif_media_task_audio_feeding_init
|
||||||
|
@ -2026,6 +2051,7 @@ static void btif_decode_alarm_cb(UNUSED_ATTR void *context) {
|
||||||
#if 0
|
#if 0
|
||||||
thread_post(worker_thread, btif_media_task_avk_handle_timer, NULL);
|
thread_post(worker_thread, btif_media_task_avk_handle_timer, NULL);
|
||||||
#else
|
#else
|
||||||
|
// LOG_ERROR("decoder alarm\n");
|
||||||
btif_media_task_post(SIG_MEDIA_TASK_AVK_ALARM_TO);
|
btif_media_task_post(SIG_MEDIA_TASK_AVK_ALARM_TO);
|
||||||
// TODO: btif_media_task_avk_handle_timer
|
// TODO: btif_media_task_avk_handle_timer
|
||||||
#endif
|
#endif
|
||||||
|
@ -2045,7 +2071,7 @@ static void btif_media_task_aa_handle_start_decoding(void) {
|
||||||
APPL_TRACE_ERROR("%s unable to allocate decode alarm.\n", __func__);
|
APPL_TRACE_ERROR("%s unable to allocate decode alarm.\n", __func__);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
LOG_ERROR("Decoder_alarm set\n");
|
||||||
osi_alarm_set(btif_media_cb.decode_alarm, BTIF_SINK_MEDIA_TIME_TICK);
|
osi_alarm_set(btif_media_cb.decode_alarm, BTIF_SINK_MEDIA_TIME_TICK);
|
||||||
// alarm_set_periodic(btif_media_cb.decode_alarm, BTIF_SINK_MEDIA_TIME_TICK, btif_decode_alarm_cb, NULL);
|
// alarm_set_periodic(btif_media_cb.decode_alarm, BTIF_SINK_MEDIA_TIME_TICK, btif_decode_alarm_cb, NULL);
|
||||||
}
|
}
|
||||||
|
@ -2076,7 +2102,7 @@ static void btif_media_task_aa_handle_decoder_reset(BT_HDR *p_msg)
|
||||||
UINT32 num_blocks = 16;
|
UINT32 num_blocks = 16;
|
||||||
UINT32 num_subbands = 8;
|
UINT32 num_subbands = 8;
|
||||||
|
|
||||||
APPL_TRACE_DEBUG("btif_media_task_aa_handle_decoder_reset p_codec_info[%x:%x:%x:%x:%x:%x]\n",
|
LOG_ERROR("btif_media_task_aa_handle_decoder_reset p_codec_info[%x:%x:%x:%x:%x:%x]\n",
|
||||||
p_buf->codec_info[1], p_buf->codec_info[2], p_buf->codec_info[3],
|
p_buf->codec_info[1], p_buf->codec_info[2], p_buf->codec_info[3],
|
||||||
p_buf->codec_info[4], p_buf->codec_info[5], p_buf->codec_info[6]);
|
p_buf->codec_info[4], p_buf->codec_info[5], p_buf->codec_info[6]);
|
||||||
|
|
||||||
|
@ -2091,7 +2117,7 @@ static void btif_media_task_aa_handle_decoder_reset(BT_HDR *p_msg)
|
||||||
btif_media_cb.channel_count = btif_a2dp_get_track_channel_count(sbc_cie.ch_mode);
|
btif_media_cb.channel_count = btif_a2dp_get_track_channel_count(sbc_cie.ch_mode);
|
||||||
|
|
||||||
btif_media_cb.rx_flush = FALSE;
|
btif_media_cb.rx_flush = FALSE;
|
||||||
APPL_TRACE_DEBUG("Reset to sink role");
|
LOG_ERROR("Reset to sink role");
|
||||||
status = OI_CODEC_SBC_DecoderReset(&context, contextData, sizeof(contextData), 2, 2, FALSE);
|
status = OI_CODEC_SBC_DecoderReset(&context, contextData, sizeof(contextData), 2, 2, FALSE);
|
||||||
if (!OI_SUCCESS(status)) {
|
if (!OI_SUCCESS(status)) {
|
||||||
APPL_TRACE_ERROR("OI_CODEC_SBC_DecoderReset failed with error code %d\n", status);
|
APPL_TRACE_ERROR("OI_CODEC_SBC_DecoderReset failed with error code %d\n", status);
|
||||||
|
@ -2102,100 +2128,100 @@ static void btif_media_task_aa_handle_decoder_reset(BT_HDR *p_msg)
|
||||||
switch(sbc_cie.samp_freq)
|
switch(sbc_cie.samp_freq)
|
||||||
{
|
{
|
||||||
case A2D_SBC_IE_SAMP_FREQ_16:
|
case A2D_SBC_IE_SAMP_FREQ_16:
|
||||||
APPL_TRACE_DEBUG("\tsamp_freq:%d (16000)\n", sbc_cie.samp_freq);
|
LOG_ERROR("\tsamp_freq:%d (16000)\n", sbc_cie.samp_freq);
|
||||||
freq_multiple = 16*20;
|
freq_multiple = 16*20;
|
||||||
break;
|
break;
|
||||||
case A2D_SBC_IE_SAMP_FREQ_32:
|
case A2D_SBC_IE_SAMP_FREQ_32:
|
||||||
APPL_TRACE_DEBUG("\tsamp_freq:%d (32000)\n", sbc_cie.samp_freq);
|
LOG_ERROR("\tsamp_freq:%d (32000)\n", sbc_cie.samp_freq);
|
||||||
freq_multiple = 32*20;
|
freq_multiple = 32*20;
|
||||||
break;
|
break;
|
||||||
case A2D_SBC_IE_SAMP_FREQ_44:
|
case A2D_SBC_IE_SAMP_FREQ_44:
|
||||||
APPL_TRACE_DEBUG("\tsamp_freq:%d (44100)\n", sbc_cie.samp_freq);
|
LOG_ERROR("\tsamp_freq:%d (44100)\n", sbc_cie.samp_freq);
|
||||||
freq_multiple = 441*2;
|
freq_multiple = 441*2;
|
||||||
break;
|
break;
|
||||||
case A2D_SBC_IE_SAMP_FREQ_48:
|
case A2D_SBC_IE_SAMP_FREQ_48:
|
||||||
APPL_TRACE_DEBUG("\tsamp_freq:%d (48000)\n", sbc_cie.samp_freq);
|
LOG_ERROR("\tsamp_freq:%d (48000)\n", sbc_cie.samp_freq);
|
||||||
freq_multiple = 48*20;
|
freq_multiple = 48*20;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
APPL_TRACE_DEBUG(" Unknown Frequency ");
|
LOG_ERROR(" Unknown Frequency ");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(sbc_cie.ch_mode)
|
switch(sbc_cie.ch_mode)
|
||||||
{
|
{
|
||||||
case A2D_SBC_IE_CH_MD_MONO:
|
case A2D_SBC_IE_CH_MD_MONO:
|
||||||
APPL_TRACE_DEBUG("\tch_mode:%d (Mono)\n", sbc_cie.ch_mode);
|
LOG_ERROR("\tch_mode:%d (Mono)\n", sbc_cie.ch_mode);
|
||||||
break;
|
break;
|
||||||
case A2D_SBC_IE_CH_MD_DUAL:
|
case A2D_SBC_IE_CH_MD_DUAL:
|
||||||
APPL_TRACE_DEBUG("\tch_mode:%d (DUAL)\n", sbc_cie.ch_mode);
|
LOG_ERROR("\tch_mode:%d (DUAL)\n", sbc_cie.ch_mode);
|
||||||
break;
|
break;
|
||||||
case A2D_SBC_IE_CH_MD_STEREO:
|
case A2D_SBC_IE_CH_MD_STEREO:
|
||||||
APPL_TRACE_DEBUG("\tch_mode:%d (STEREO)\n", sbc_cie.ch_mode);
|
LOG_ERROR("\tch_mode:%d (STEREO)\n", sbc_cie.ch_mode);
|
||||||
break;
|
break;
|
||||||
case A2D_SBC_IE_CH_MD_JOINT:
|
case A2D_SBC_IE_CH_MD_JOINT:
|
||||||
APPL_TRACE_DEBUG("\tch_mode:%d (JOINT)\n", sbc_cie.ch_mode);
|
LOG_ERROR("\tch_mode:%d (JOINT)\n", sbc_cie.ch_mode);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
APPL_TRACE_DEBUG(" Unknown Mode ");
|
LOG_ERROR(" Unknown Mode ");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(sbc_cie.block_len)
|
switch(sbc_cie.block_len)
|
||||||
{
|
{
|
||||||
case A2D_SBC_IE_BLOCKS_4:
|
case A2D_SBC_IE_BLOCKS_4:
|
||||||
APPL_TRACE_DEBUG("\tblock_len:%d (4)\n", sbc_cie.block_len);
|
LOG_ERROR("\tblock_len:%d (4)\n", sbc_cie.block_len);
|
||||||
num_blocks = 4;
|
num_blocks = 4;
|
||||||
break;
|
break;
|
||||||
case A2D_SBC_IE_BLOCKS_8:
|
case A2D_SBC_IE_BLOCKS_8:
|
||||||
APPL_TRACE_DEBUG("\tblock_len:%d (8)\n", sbc_cie.block_len);
|
LOG_ERROR("\tblock_len:%d (8)\n", sbc_cie.block_len);
|
||||||
num_blocks = 8;
|
num_blocks = 8;
|
||||||
break;
|
break;
|
||||||
case A2D_SBC_IE_BLOCKS_12:
|
case A2D_SBC_IE_BLOCKS_12:
|
||||||
APPL_TRACE_DEBUG("\tblock_len:%d (12)\n", sbc_cie.block_len);
|
LOG_ERROR("\tblock_len:%d (12)\n", sbc_cie.block_len);
|
||||||
num_blocks = 12;
|
num_blocks = 12;
|
||||||
break;
|
break;
|
||||||
case A2D_SBC_IE_BLOCKS_16:
|
case A2D_SBC_IE_BLOCKS_16:
|
||||||
APPL_TRACE_DEBUG("\tblock_len:%d (16)\n", sbc_cie.block_len);
|
LOG_ERROR("\tblock_len:%d (16)\n", sbc_cie.block_len);
|
||||||
num_blocks = 16;
|
num_blocks = 16;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
APPL_TRACE_DEBUG(" Unknown BlockLen ");
|
LOG_ERROR(" Unknown BlockLen ");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(sbc_cie.num_subbands)
|
switch(sbc_cie.num_subbands)
|
||||||
{
|
{
|
||||||
case A2D_SBC_IE_SUBBAND_4:
|
case A2D_SBC_IE_SUBBAND_4:
|
||||||
APPL_TRACE_DEBUG("\tnum_subbands:%d (4)\n", sbc_cie.num_subbands);
|
LOG_ERROR("\tnum_subbands:%d (4)\n", sbc_cie.num_subbands);
|
||||||
num_subbands = 4;
|
num_subbands = 4;
|
||||||
break;
|
break;
|
||||||
case A2D_SBC_IE_SUBBAND_8:
|
case A2D_SBC_IE_SUBBAND_8:
|
||||||
APPL_TRACE_DEBUG("\tnum_subbands:%d (8)\n", sbc_cie.num_subbands);
|
LOG_ERROR("\tnum_subbands:%d (8)\n", sbc_cie.num_subbands);
|
||||||
num_subbands = 8;
|
num_subbands = 8;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
APPL_TRACE_DEBUG(" Unknown SubBands ");
|
LOG_ERROR(" Unknown SubBands ");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(sbc_cie.alloc_mthd)
|
switch(sbc_cie.alloc_mthd)
|
||||||
{
|
{
|
||||||
case A2D_SBC_IE_ALLOC_MD_S:
|
case A2D_SBC_IE_ALLOC_MD_S:
|
||||||
APPL_TRACE_DEBUG("\talloc_mthd:%d (SNR)\n", sbc_cie.alloc_mthd);
|
LOG_ERROR("\talloc_mthd:%d (SNR)\n", sbc_cie.alloc_mthd);
|
||||||
break;
|
break;
|
||||||
case A2D_SBC_IE_ALLOC_MD_L:
|
case A2D_SBC_IE_ALLOC_MD_L:
|
||||||
APPL_TRACE_DEBUG("\talloc_mthd:%d (Loudness)\n", sbc_cie.alloc_mthd);
|
LOG_ERROR("\talloc_mthd:%d (Loudness)\n", sbc_cie.alloc_mthd);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
APPL_TRACE_DEBUG(" Unknown Allocation Method");
|
LOG_ERROR(" Unknown Allocation Method");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
APPL_TRACE_DEBUG("\tBit pool Min:%d Max:%d\n", sbc_cie.min_bitpool, sbc_cie.max_bitpool);
|
LOG_ERROR("\tBit pool Min:%d Max:%d\n", sbc_cie.min_bitpool, sbc_cie.max_bitpool);
|
||||||
|
|
||||||
btif_media_cb.frames_to_process = ((freq_multiple)/(num_blocks*num_subbands)) + 1;
|
btif_media_cb.frames_to_process = ((freq_multiple)/(num_blocks*num_subbands)) + 1;
|
||||||
APPL_TRACE_DEBUG(" Frames to be processed in 20 ms %d\n",btif_media_cb.frames_to_process);
|
LOG_ERROR(" Frames to be processed in 20 ms %d\n",btif_media_cb.frames_to_process);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -2393,6 +2419,7 @@ UINT8 btif_media_sink_enque_buf(BT_HDR *p_pkt)
|
||||||
}
|
}
|
||||||
|
|
||||||
BTIF_TRACE_VERBOSE("btif_media_sink_enque_buf + ");
|
BTIF_TRACE_VERBOSE("btif_media_sink_enque_buf + ");
|
||||||
|
// LOG_ERROR("sink enq\n");
|
||||||
/* allocate and Queue this buffer */
|
/* allocate and Queue this buffer */
|
||||||
if ((p_msg = (tBT_SBC_HDR *) GKI_getbuf(sizeof(tBT_SBC_HDR) +
|
if ((p_msg = (tBT_SBC_HDR *) GKI_getbuf(sizeof(tBT_SBC_HDR) +
|
||||||
p_pkt->offset+ p_pkt->len)) != NULL)
|
p_pkt->offset+ p_pkt->len)) != NULL)
|
||||||
|
@ -2400,10 +2427,12 @@ UINT8 btif_media_sink_enque_buf(BT_HDR *p_pkt)
|
||||||
memcpy(p_msg, p_pkt, (sizeof(BT_HDR) + p_pkt->offset + p_pkt->len));
|
memcpy(p_msg, p_pkt, (sizeof(BT_HDR) + p_pkt->offset + p_pkt->len));
|
||||||
p_msg->num_frames_to_be_processed = (*((UINT8*)(p_msg + 1) + p_msg->offset)) & 0x0f;
|
p_msg->num_frames_to_be_processed = (*((UINT8*)(p_msg + 1) + p_msg->offset)) & 0x0f;
|
||||||
BTIF_TRACE_VERBOSE("btif_media_sink_enque_buf + \n", p_msg->num_frames_to_be_processed);
|
BTIF_TRACE_VERBOSE("btif_media_sink_enque_buf + \n", p_msg->num_frames_to_be_processed);
|
||||||
|
// LOG_ERROR("sink enq %d\n", p_msg->num_frames_to_be_processed);
|
||||||
GKI_enqueue(&(btif_media_cb.RxSbcQ), p_msg);
|
GKI_enqueue(&(btif_media_cb.RxSbcQ), p_msg);
|
||||||
if(GKI_queue_length(&btif_media_cb.RxSbcQ) == MAX_A2DP_DELAYED_START_FRAME_COUNT)
|
if(GKI_queue_length(&btif_media_cb.RxSbcQ) == MAX_A2DP_DELAYED_START_FRAME_COUNT)
|
||||||
{
|
{
|
||||||
BTIF_TRACE_DEBUG(" Initiate Decoding ");
|
BTIF_TRACE_DEBUG(" Initiate Decoding ");
|
||||||
|
LOG_ERROR("Initiate Decoding\n");
|
||||||
btif_media_task_aa_handle_start_decoding();
|
btif_media_task_aa_handle_start_decoding();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2438,7 +2467,6 @@ BT_HDR *btif_media_aa_readbuf(void)
|
||||||
** Returns void
|
** Returns void
|
||||||
**
|
**
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
BOOLEAN btif_media_aa_read_feeding(tUIPC_CH_ID channel_id)
|
BOOLEAN btif_media_aa_read_feeding(tUIPC_CH_ID channel_id)
|
||||||
{
|
{
|
||||||
UINT16 event;
|
UINT16 event;
|
||||||
|
@ -2680,7 +2708,7 @@ static void btif_media_aa_prep_sbc_2_send(UINT8 nb_frame)
|
||||||
|
|
||||||
if (btif_media_cb.tx_flush)
|
if (btif_media_cb.tx_flush)
|
||||||
{
|
{
|
||||||
APPL_TRACE_DEBUG("### tx suspended, discarded frame ###");
|
APPL_TRACE_DEBUG("### tx suspended, discarded frame ###\n");
|
||||||
|
|
||||||
if (GKI_queue_length(&btif_media_cb.TxAaQ) > 0)
|
if (GKI_queue_length(&btif_media_cb.TxAaQ) > 0)
|
||||||
btif_media_flush_q(&(btif_media_cb.TxAaQ));
|
btif_media_flush_q(&(btif_media_cb.TxAaQ));
|
||||||
|
@ -2699,7 +2727,6 @@ static void btif_media_aa_prep_sbc_2_send(UINT8 nb_frame)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
**
|
**
|
||||||
** Function btif_media_aa_prep_2_send
|
** Function btif_media_aa_prep_2_send
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -24,11 +24,18 @@
|
||||||
*
|
*
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include "uipc.h"
|
#include "uipc.h"
|
||||||
#include "esp_system.h"
|
#include "esp_system.h"
|
||||||
#include "EspAudio.h"
|
#include "EspAudio.h"
|
||||||
#include "EspAudioCom.h"
|
#include "EspAudioCom.h"
|
||||||
#include "bt_trace.h"
|
#include "bt_trace.h"
|
||||||
|
|
||||||
|
#include "freertos/xtensa_api.h"
|
||||||
|
#include "freertos/FreeRTOSConfig.h"
|
||||||
|
#include "freertos/FreeRTOS.h"
|
||||||
|
#include "freertos/queue.h"
|
||||||
|
#include "freertos/task.h"
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
** Constants & Macros
|
** Constants & Macros
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
@ -51,8 +58,18 @@ const char* dump_uipc_event(tUIPC_EVENT event)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
void UIPC_Init(void *dummy)
|
void UIPC_Init(void *dummy)
|
||||||
{
|
{
|
||||||
LOG_ERROR("Free memory: %d bytes\n", system_get_free_heap_size());
|
LOG_ERROR("UIPC_Init: Free memory: %d bytes\n", system_get_free_heap_size());
|
||||||
EspAudio_Init();
|
// EspAudio_Init();
|
||||||
|
|
||||||
|
{
|
||||||
|
int volumn;
|
||||||
|
// TODO: review the stream param config parameter here
|
||||||
|
EspAudioPlayerStreamCfg(StreamSampleRate_44k, 2, StreamBitLen_16BIT);
|
||||||
|
EspAudio_SetupStream("stream.pcm", InputSrcType_Stream);
|
||||||
|
EspAudio_GetVolume(&volumn);
|
||||||
|
LOG_ERROR("UIPC: Vol: %d\n", volumn);
|
||||||
|
EspAudio_SetVolume(99);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,11 +84,17 @@ void UIPC_Init(void *dummy)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
BOOLEAN UIPC_Open(tUIPC_CH_ID ch_id, tUIPC_RCV_CBACK *p_cback)
|
BOOLEAN UIPC_Open(tUIPC_CH_ID ch_id, tUIPC_RCV_CBACK *p_cback)
|
||||||
{
|
{
|
||||||
if (ch_id == UIPC_CH_ID_AV_AUDIO) {
|
LOG_ERROR("UIPC_Open\n");
|
||||||
|
|
||||||
|
//if (ch_id == UIPC_CH_ID_AV_AUDIO) {
|
||||||
|
int volumn;
|
||||||
// TODO: review the stream param config parameter here
|
// TODO: review the stream param config parameter here
|
||||||
EspAudioPlayerStreamCfg(StreamSampleRate_44k, StreamChannel_Two, StreamBitLen_16BIT);
|
EspAudioPlayerStreamCfg(StreamSampleRate_44k, StreamChannel_Two, StreamBitLen_16BIT);
|
||||||
EspAudio_SetupStream("stream.pcm", InputSrcType_Stream);
|
EspAudio_SetupStream("stream.pcm", InputSrcType_Stream);
|
||||||
}
|
EspAudio_GetVolume(&volumn);
|
||||||
|
LOG_ERROR("UIPC_Open: Vol: %d\n", volumn);
|
||||||
|
EspAudio_SetVolume(99);
|
||||||
|
// }
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if (p_cback) {
|
if (p_cback) {
|
||||||
|
@ -122,6 +145,8 @@ BOOLEAN UIPC_SendBuf(tUIPC_CH_ID ch_id, BT_HDR *p_msg)
|
||||||
BOOLEAN UIPC_Send(tUIPC_CH_ID ch_id, UINT16 msg_evt, UINT8 *p_buf, UINT16 msglen)
|
BOOLEAN UIPC_Send(tUIPC_CH_ID ch_id, UINT16 msg_evt, UINT8 *p_buf, UINT16 msglen)
|
||||||
{
|
{
|
||||||
if (ch_id == UIPC_CH_ID_AV_AUDIO) {
|
if (ch_id == UIPC_CH_ID_AV_AUDIO) {
|
||||||
|
uint32_t t_now = system_get_time();
|
||||||
|
printf("t: %u, l %d\n", t_now, msglen);
|
||||||
EspAudioPlayerStreamWrite(p_buf, msglen);
|
EspAudioPlayerStreamWrite(p_buf, msglen);
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
#include "nvs_flash.h"
|
#include "nvs_flash.h"
|
||||||
#include "esp_system.h"
|
#include "esp_system.h"
|
||||||
|
#include "EspAudio.h"
|
||||||
|
|
||||||
extern void bte_main_boot_entry(void *);
|
extern void bte_main_boot_entry(void *);
|
||||||
extern void bt_app_task_start_up(void);
|
extern void bt_app_task_start_up(void);
|
||||||
|
@ -18,6 +19,7 @@ void app_main()
|
||||||
nvs_flash_init();
|
nvs_flash_init();
|
||||||
system_init();
|
system_init();
|
||||||
printf("Free memory: %d bytes\n", system_get_free_heap_size());
|
printf("Free memory: %d bytes\n", system_get_free_heap_size());
|
||||||
|
EspAudio_Init();
|
||||||
bt_controller_init();
|
bt_controller_init();
|
||||||
bt_app_task_start_up();
|
bt_app_task_start_up();
|
||||||
// bte_main_boot_entry(bt_app_core_start);
|
// bte_main_boot_entry(bt_app_core_start);
|
||||||
|
|
Loading…
Reference in a new issue