}
bt_status_t stat;
- btc_av_args_t arg;
btc_msg_t msg;
msg.sig = BTC_SIG_API_CALL;
msg.pid = BTC_PID_A2DP;
- msg.act = BTC_AV_DISCONNECT_REQ_EVT;
+ msg.act = BTC_AV_SINK_API_DISCONNECT_EVT;
- memset(&arg, 0, sizeof(btc_av_args_t));
-
- // CHECK_BTAV_INIT(); // todo: move this function
- memcpy(&(arg.disconnect), remote_bda, sizeof(bt_bdaddr_t));
/* Switch to BTC context */
- stat = btc_transfer_context(&msg, &arg, sizeof(btc_av_args_t), NULL);
+ stat = btc_transfer_context(&msg, NULL, 0, NULL);
return (stat == BT_STATUS_SUCCESS) ? ESP_OK : ESP_FAIL;
}
[BTC_PID_GATTS] = {btc_gatts_call_handler, btc_gatts_cb_handler },
[BTC_PID_GATTC] = {btc_gattc_call_handler, btc_gattc_cb_handler },
[BTC_PID_GAP_BLE] = {btc_gap_ble_call_handler, btc_gap_ble_cb_handler },
- [BTC_PID_GAP_BT] = {btc_gap_bt_call_handler, btc_gap_bt_cb_handler },
+ [BTC_PID_GAP_BT] = {btc_gap_bt_call_handler, NULL },
[BTC_PID_SDP] = {NULL, NULL},
[BTC_PID_BLE_HID] = {NULL, NULL},
[BTC_PID_BT_HID] = {NULL, NULL},
[BTC_PID_BLUFI] = {btc_blufi_call_handler, btc_blufi_cb_handler },
[BTC_PID_DM_SEC] = {NULL, btc_dm_sec_cb_handler },
[BTC_PID_PRF_QUE] = {btc_profile_queue_handler, NULL },
- [BTC_PID_A2DP] = {btc_a2dp_evt_handler, btc_a2dp_evt_handler },
- [BTC_PID_AVRC] = {btc_avrc_evt_handler, NULL }
+ [BTC_PID_A2DP] = {btc_a2dp_call_handler, btc_a2dp_cb_handler },
+ [BTC_PID_AVRC] = {btc_avrc_call_handler, NULL }
};
/*****************************************************************************
static TIMER_LIST_ENT tle_av_open_on_rc;
/* both interface and media task needs to be ready to alloc incoming request */
-#define CHECK_BTAV_INIT() if (btc_av_cb.sm_handle == NULL)\
-{\
- LOG_WARN("%s: BTAV not initialized\n", __FUNCTION__);\
- return ESP_ERR_INVALID_STATE;\
-}\
-else\
-{\
- LOG_INFO("%s\n", __FUNCTION__);\
-}
+#define CHECK_BTAV_INIT() do \
+{ \
+ assert (btc_av_cb.sm_handle != NULL); \
+} while (0)
+
/* Helper macro to avoid code duplication in the state machine handlers */
#define CHECK_RC_EVENT(e, d) \
msg.sig = BTC_SIG_API_CB;
msg.pid = BTC_PID_A2DP;
msg.act = (uint8_t) event;
- stat = btc_transfer_context(&msg, (btc_av_args_t *)p_data, sizeof(tBTA_AV), btc_av_event_deep_copy);
+ stat = btc_transfer_context(&msg, p_data, sizeof(tBTA_AV), btc_av_event_deep_copy);
if (stat) {
LOG_ERROR("%s transfer failed\n", __func__);
**
*******************************************************************************/
-bt_status_t btc_av_init()
+bt_status_t btc_av_init(void)
{
if (btc_av_cb.sm_handle == NULL) {
if (!btc_a2dp_start_media_task()) {
*******************************************************************************/
bt_status_t btc_a2d_sink_init(void)
{
- LOG_INFO("%s()\n", __func__);
+ LOG_DEBUG("%s()\n", __func__);
- bt_status_t status = btc_av_init();
-
- return status;
+ return btc_av_init();
}
/*******************************************************************************
bt_status_t btc_a2d_sink_connect(bt_bdaddr_t* remote_bda)
{
- LOG_INFO("%s\n", __FUNCTION__);
+ LOG_DEBUG("%s\n", __FUNCTION__);
CHECK_BTAV_INIT();
return btc_queue_connect(UUID_SERVCLASS_AUDIO_SINK, remote_bda, connect_int);
btc_av_cb.flags &= ~BTC_AV_FLAG_REMOTE_SUSPEND;
}
-void btc_a2dp_evt_handler(btc_msg_t *msg)
+void btc_a2dp_call_handler(btc_msg_t *msg)
{
- if (msg->act < BTC_AV_MAX_SM_EVT) {
+ btc_av_args_t *arg = (btc_av_args_t *)(msg->arg);
+ switch (msg->act) {
+ case BTC_AV_SINK_CONFIG_REQ_EVT: {
btc_sm_dispatch(btc_av_cb.sm_handle, msg->act, (void *)(msg->arg));
- } else {
- btc_av_args_t *arg = (btc_av_args_t *)(msg->arg);
- switch (msg->act) {
- case BTC_AV_SINK_API_INIT_EVT: {
- btc_a2d_sink_init();
- // todo: callback to application
- break;
- }
- case BTC_AV_SINK_API_DEINIT_EVT: {
- btc_a2d_sink_deinit();
- // todo: callback to application
- break;
- }
- case BTC_AV_SINK_API_CONNECT_EVT: {
- btc_a2d_sink_connect(&arg->connect);
- // todo: callback to application
- break;
- }
- default:
- LOG_WARN("%s : unhandled event: %d\n", __FUNCTION__, msg->act);
- }
+ break;
+ }
+ case BTC_AV_SINK_API_INIT_EVT: {
+ btc_a2d_sink_init();
+ // todo: callback to application
+ break;
+ }
+ case BTC_AV_SINK_API_DEINIT_EVT: {
+ btc_a2d_sink_deinit();
+ // todo: callback to application
+ break;
+ }
+ case BTC_AV_SINK_API_CONNECT_EVT: {
+ btc_a2d_sink_connect(&arg->connect);
+ // todo: callback to application
+ break;
}
+ case BTC_AV_SINK_API_DISCONNECT_EVT: {
+ CHECK_BTAV_INIT();
+ btc_sm_dispatch(btc_av_cb.sm_handle, BTC_AV_DISCONNECT_REQ_EVT, NULL);
+ break;
+ }
+ default:
+ LOG_WARN("%s : unhandled event: %d\n", __FUNCTION__, msg->act);
+ }
+}
+void btc_a2dp_cb_handler(btc_msg_t *msg)
+{
+ btc_sm_dispatch(btc_av_cb.sm_handle, msg->act, (void *)(msg->arg));
btc_av_event_free_data(msg->act, msg->arg);
}
BTC_AV_STOP_STREAM_REQ_EVT,
BTC_AV_SUSPEND_STREAM_REQ_EVT,
BTC_AV_SINK_CONFIG_REQ_EVT,
- BTC_AV_MAX_SM_EVT
} btc_av_sm_event_t;
typedef enum {
- BTC_AV_SINK_API_INIT_EVT = BTC_AV_MAX_SM_EVT + 1,
+ BTC_AV_SINK_API_INIT_EVT = 0,
BTC_AV_SINK_API_DEINIT_EVT,
BTC_AV_SINK_API_CONNECT_EVT,
+ BTC_AV_SINK_API_DISCONNECT_EVT
} btc_av_act_t;
/* btc_av_args_t */
typedef union {
- // BTC_AV_SINK_CONFIG_REQ_EVT
+ // BTC_AV_SINK_CONFIG_REQ_EVT -- internal event
esp_a2d_mcc_t mcc;
- // BTC_AV_DISCONNECT_REQ_EVT
- bt_bdaddr_t disconnect;
// BTC_AV_SINK_API_CONNECT_EVT
bt_bdaddr_t connect;
- // Event set--tBTA_AV_EVT
- tBTA_AV data;
} btc_av_args_t;
/*******************************************************************************
** BTC AV API
********************************************************************************/
-void btc_a2dp_evt_handler(btc_msg_t *msg);
+void btc_a2dp_call_handler(btc_msg_t *msg);
+
+void btc_a2dp_cb_handler(btc_msg_t *msg);
/*******************************************************************************
**