#include "btc_a2dp_sink.h"
#include "btc_a2dp_source.h"
#include "esp_a2dp_api.h"
+#include "osi/alarm.h"
#if BTC_AV_INCLUDED
} btc_av_cb_t;
typedef struct {
- bt_bdaddr_t *target_bda;
+ bt_bdaddr_t target_bda;
uint16_t uuid;
} btc_av_connect_req_t;
** Static variables
******************************************************************************/
static btc_av_cb_t btc_av_cb = {0};
-static TIMER_LIST_ENT tle_av_open_on_rc;
+
+#if BTC_AV_SRC_INCLUDED
+static osi_alarm_t *tle_av_open_on_rc = NULL;
+#endif /* BTC_AV_SRC_INCLUDED */
/* both interface and media task needs to be ready to alloc incoming request */
#define CHECK_BTAV_INIT() do \
/****************************************************************************
** Local helper functions
*****************************************************************************/
+#if BTC_AV_SRC_INCLUDED
/*******************************************************************************
**
** Function btc_initiate_av_open_tmr_hdlr
** Returns void
**
*******************************************************************************/
-static void btc_initiate_av_open_tmr_hdlr(TIMER_LIST_ENT *tle)
+static void btc_initiate_av_open_tmr_hdlr(void *arg)
{
+ UNUSED(arg);
BD_ADDR peer_addr;
- UNUSED(tle);
btc_av_connect_req_t connect_req;
- UNUSED(tle);
/* is there at least one RC connection - There should be */
if (btc_rc_get_connected_peer(peer_addr)) {
LOG_DEBUG("%s Issuing connect to the remote RC peer", __FUNCTION__);
/* In case of AVRCP connection request, we will initiate SRC connection */
- connect_req.target_bda = (bt_bdaddr_t *)&peer_addr;
+ memcpy(connect_req.target_bda.address, peer_addr, sizeof(bt_bdaddr_t));
connect_req.uuid = UUID_SERVCLASS_AUDIO_SOURCE;
- btc_sm_dispatch(btc_av_cb.sm_handle, BTC_AV_CONNECT_REQ_EVT, (char *)&connect_req);
+ btc_dispatch_sm_event(BTC_AV_CONNECT_REQ_EVT, &connect_req, sizeof(btc_av_connect_req_t));
} else {
LOG_ERROR("%s No connected RC peers", __FUNCTION__);
}
}
+#endif /* BTC_AV_SRC_INCLUDED */
/*****************************************************************************
** Static functions
case BTA_AV_PENDING_EVT:
case BTC_AV_CONNECT_REQ_EVT: {
if (event == BTC_AV_CONNECT_REQ_EVT) {
- memcpy(&btc_av_cb.peer_bda, ((btc_av_connect_req_t *)p_data)->target_bda,
+ memcpy(&btc_av_cb.peer_bda, &((btc_av_connect_req_t *)p_data)->target_bda,
sizeof(bt_bdaddr_t));
BTA_AvOpen(btc_av_cb.peer_bda.address, btc_av_cb.bta_handle,
TRUE, BTA_SEC_AUTHENTICATE, ((btc_av_connect_req_t *)p_data)->uuid);
* TODO: We may need to do this only on an AVRCP Play. FixMe
*/
+#if BTC_AV_SRC_INCLUDED
LOG_DEBUG("BTA_AV_RC_OPEN_EVT received w/o AV");
- memset(&tle_av_open_on_rc, 0, sizeof(tle_av_open_on_rc));
- tle_av_open_on_rc.param = (UINT32)btc_initiate_av_open_tmr_hdlr;
- btu_start_timer(&tle_av_open_on_rc, BTU_TTYPE_USER_FUNC,
- BTC_TIMEOUT_AV_OPEN_ON_RC_SECS);
+ tle_av_open_on_rc = osi_alarm_new("AVconn", btc_initiate_av_open_tmr_hdlr, NULL, BTC_TIMEOUT_AV_OPEN_ON_RC_SECS * 1000);
+ osi_alarm_set(tle_av_open_on_rc, BTC_TIMEOUT_AV_OPEN_ON_RC_SECS * 1000);
+#endif /* BTC_AV_SRC_INCLUDED */
btc_rc_handler(event, p_data);
break;
break;
case BTA_AV_RC_CLOSE_EVT:
- if (tle_av_open_on_rc.in_use) {
- LOG_DEBUG("BTA_AV_RC_CLOSE_EVT: Stopping AV timer.");
- btu_stop_timer(&tle_av_open_on_rc);
+#if BTC_AV_SRC_INCLUDED
+ if (tle_av_open_on_rc) {
+ osi_alarm_free(tle_av_open_on_rc);
+ tle_av_open_on_rc = NULL;
}
+#endif /* BTC_AV_SRC_INCLUDED */
btc_rc_handler(event, p_data);
break;
break;
case BTC_AV_CONNECT_REQ_EVT:
- if (memcmp ((bt_bdaddr_t *)p_data, &(btc_av_cb.peer_bda),
+ if (memcmp (&((btc_av_connect_req_t *)p_data)->target_bda, &(btc_av_cb.peer_bda),
sizeof(btc_av_cb.peer_bda)) == 0) {
LOG_DEBUG("%s: Ignore BTC_AVCONNECT_REQ_EVT for same device\n", __func__);
} else {
static bt_status_t connect_int(bt_bdaddr_t *bd_addr, uint16_t uuid)
{
btc_av_connect_req_t connect_req;
- connect_req.target_bda = bd_addr;
+ memcpy(&connect_req.target_bda, bd_addr, sizeof(bt_bdaddr_t));
connect_req.uuid = uuid;
LOG_DEBUG("%s\n", __FUNCTION__);
if (service_id == BTA_A2DP_SOURCE_SERVICE_ID) {
#if BTC_AV_SRC_INCLUDED
btc_a2dp_source_shutdown();
+ if (tle_av_open_on_rc) {
+ osi_alarm_free(tle_av_open_on_rc);
+ tle_av_open_on_rc = NULL;
+ }
#endif /* BTC_AV_SRC_INCLUDED */
}
btc_a2dp_control_datapath_ctrl(arg->dp_evt);
break;
}
+ case BTC_AV_CONNECT_REQ_EVT:
+ btc_sm_dispatch(btc_av_cb.sm_handle, msg->act, (char *)msg->arg);
+ break;
// case BTC_AV_DISCONNECT_REQ_EVT:
case BTC_AV_START_STREAM_REQ_EVT:
case BTC_AV_STOP_STREAM_REQ_EVT: