Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 70bcd2cc authored by Nitin Srivastava's avatar Nitin Srivastava Committed by Zhihai Xu
Browse files

Add support for Multi-HFP devices

1. Add multi headset support in stack.
2. Each HS will be associated with unique CB in BTIF
and also corresponding SCB in BTA.
3. Upstream event callbacks will be sent to
specific HS based on BD_ADDR.
4. Similiarly all commands to BTIF will be for
specific HS.

Change-Id: I0dc6b1b54f16244b802d818ae60944877a41d020
parent dd01873f
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -406,7 +406,7 @@ void bta_ag_rfc_fail(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data)
*******************************************************************************/
void bta_ag_rfc_close(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data)
{
    tBTA_AG_HDR    close;
    tBTA_AG_CLOSE    close;
    tBTA_SERVICE_MASK services;
    int i, num_active_conn = 0;
    UNUSED(p_data);
@@ -436,13 +436,14 @@ void bta_ag_rfc_close(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data)
    bta_sys_stop_timer(&p_scb->cn_timer);
#endif

    close.handle = bta_ag_scb_to_idx(p_scb);
    close.app_id = p_scb->app_id;
    close.hdr.handle = bta_ag_scb_to_idx(p_scb);
    close.hdr.app_id = p_scb->app_id;
    bdcpy(close.bd_addr, p_scb->peer_addr);

    bta_sys_conn_close(BTA_ID_AG, p_scb->app_id, p_scb->peer_addr);

    /* call close call-out */
    bta_ag_co_data_close(close.handle);
    bta_ag_co_data_close(close.hdr.handle);

    /* call close cback */
    (*bta_ag_cb.p_cback)(BTA_AG_CLOSE_EVT, (tBTA_AG *) &close);
@@ -819,6 +820,7 @@ void bta_ag_svc_conn_open(tBTA_AG_SCB *p_scb, tBTA_AG_DATA *p_data)
        evt.hdr.handle = bta_ag_scb_to_idx(p_scb);
        evt.hdr.app_id = p_scb->app_id;
        evt.peer_feat = p_scb->peer_features;
        bdcpy(evt.bd_addr, p_scb->peer_addr);
#if (BTM_WBS_INCLUDED == TRUE )
        evt.peer_codec  = p_scb->peer_codecs;
#endif
+1 −0
Original line number Diff line number Diff line
@@ -867,6 +867,7 @@ void bta_ag_at_hfp_cback(tBTA_AG_SCB *p_scb, UINT16 cmd, UINT8 arg_type,
    val.hdr.handle = bta_ag_scb_to_idx(p_scb);
    val.hdr.app_id = p_scb->app_id;
    val.num = int_arg;
    bdcpy(val.bd_addr, p_scb->peer_addr);
    BCM_STRNCPY_S(val.str, sizeof(val.str), p_arg, BTA_AG_AT_MAX_LEN);
    val.str[BTA_AG_AT_MAX_LEN] = 0;

+6 −1
Original line number Diff line number Diff line
@@ -753,6 +753,7 @@ static void bta_ag_api_register(tBTA_AG_DATA *p_data)
    /* allocate an scb */
    if ((p_scb = bta_ag_scb_alloc()) != NULL)
    {
        APPL_TRACE_DEBUG1("bta_ag_api_register: p_scb 0x%08x ", p_scb);
        bta_ag_sm_execute(p_scb, p_data->hdr.event, p_data);
    }
    else
@@ -781,6 +782,7 @@ static void bta_ag_api_result(tBTA_AG_DATA *p_data)
    {
        if ((p_scb = bta_ag_scb_by_idx(p_data->hdr.layer_specific)) != NULL)
        {
            APPL_TRACE_DEBUG1("bta_ag_api_result: p_scb 0x%08x ", p_scb);
            bta_ag_sm_execute(p_scb, BTA_AG_API_RESULT_EVT, p_data);
        }
    }
@@ -788,8 +790,9 @@ static void bta_ag_api_result(tBTA_AG_DATA *p_data)
    {
        for (i = 0, p_scb = &bta_ag_cb.scb[0]; i < BTA_AG_NUM_SCB; i++, p_scb++)
        {
            if (p_scb->in_use)
            if (p_scb->in_use && p_scb->svc_conn)
            {
                APPL_TRACE_DEBUG1("bta_ag_api_result p_scb 0x%08x ", p_scb);
                bta_ag_sm_execute(p_scb, BTA_AG_API_RESULT_EVT, p_data);
            }
        }
@@ -879,6 +882,7 @@ BOOLEAN bta_ag_hdl_event(BT_HDR *p_msg)
{
    tBTA_AG_SCB *p_scb;

    APPL_TRACE_DEBUG1("bta_ag_hdl_event: Event 0x%04x ", p_msg->event);
    switch (p_msg->event)
    {
        /* handle enable event */
@@ -905,6 +909,7 @@ BOOLEAN bta_ag_hdl_event(BT_HDR *p_msg)
        default:
            if ((p_scb = bta_ag_scb_by_idx(p_msg->layer_specific)) != NULL)
            {
                APPL_TRACE_DEBUG1("bta_ag_hdl_event: p_scb 0x%08x ", p_scb);
                bta_ag_sm_execute(p_scb, p_msg->event, (tBTA_AG_DATA *) p_msg);
            }
            break;
+10 −0
Original line number Diff line number Diff line
@@ -275,11 +275,19 @@ typedef struct
    tBTA_AG_STATUS      status;
} tBTA_AG_OPEN;

/* data associated with BTA_AG_CLOSE_EVT */
typedef struct
{
    tBTA_AG_HDR         hdr;
    BD_ADDR             bd_addr;
} tBTA_AG_CLOSE;

/* data associated with BTA_AG_CONN_EVT */
typedef struct
{
    tBTA_AG_HDR         hdr;
    tBTA_AG_PEER_FEAT   peer_feat;
    BD_ADDR             bd_addr;
    tBTA_AG_PEER_CODEC  peer_codec;
} tBTA_AG_CONN;

@@ -287,6 +295,7 @@ typedef struct
typedef struct
{
    tBTA_AG_HDR         hdr;
    BD_ADDR             bd_addr;
    char                str[BTA_AG_AT_MAX_LEN+1];
    UINT16              num;
    UINT8               idx;    /* call number used by CLCC and CHLD */
@@ -298,6 +307,7 @@ typedef union
    tBTA_AG_HDR         hdr;
    tBTA_AG_REGISTER    reg;
    tBTA_AG_OPEN        open;
    tBTA_AG_CLOSE       close;
    tBTA_AG_CONN        conn;
    tBTA_AG_VAL         val;
} tBTA_AG;
+350 −131

File changed.

Preview size limit exceeded, changes collapsed.

Loading