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

Commit c9317123 authored by Hansong Zhang's avatar Hansong Zhang
Browse files

SDP: Invoke complete callback when L2cap channel is closed

Some remote devices will reject the second SDP connection if the
previous one is not fully closed.  We should wait until we receive the
disconnection response from the remote before we invoke callback.

Bug: 197980126
Tag: #compatibility
Test: test with the remote car kit
Change-Id: Ic0b1ceea8a1bd17b220bdc52ea404edf9428d3d2
parent e847600e
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -46,12 +46,19 @@ static void avct_on_l2cap_error(uint16_t lcid, uint16_t result);

/* L2CAP callback function structure */
const tL2CAP_APPL_INFO avct_l2c_appl = {
    avct_l2c_connect_ind_cback,    avct_l2c_connect_cfm_cback,
    avct_l2c_config_ind_cback,     avct_l2c_config_cfm_cback,
    avct_l2c_disconnect_ind_cback, avct_l2c_data_ind_cback,
    avct_l2c_congestion_ind_cback, NULL,
    avct_on_l2cap_error,           NULL,
    NULL,                          NULL,
    avct_l2c_connect_ind_cback,
    avct_l2c_connect_cfm_cback,
    avct_l2c_config_ind_cback,
    avct_l2c_config_cfm_cback,
    avct_l2c_disconnect_ind_cback,
    NULL,
    avct_l2c_data_ind_cback,
    avct_l2c_congestion_ind_cback,
    NULL,
    avct_on_l2cap_error,
    NULL,
    NULL,
    NULL,
};

/*******************************************************************************
+13 −8
Original line number Diff line number Diff line
@@ -47,14 +47,19 @@ void avct_l2c_br_data_ind_cback(uint16_t lcid, BT_HDR* p_buf);
void avct_br_on_l2cap_error(uint16_t lcid, uint16_t result);

/* L2CAP callback function structure */
const tL2CAP_APPL_INFO avct_l2c_br_appl = {
    avct_l2c_br_connect_ind_cback,    avct_l2c_br_connect_cfm_cback,
    avct_l2c_br_config_ind_cback,     avct_l2c_br_config_cfm_cback,
    avct_l2c_br_disconnect_ind_cback, avct_l2c_br_data_ind_cback,
    avct_l2c_br_congestion_ind_cback, NULL,
    avct_br_on_l2cap_error,           NULL,
    NULL,                             NULL
};
const tL2CAP_APPL_INFO avct_l2c_br_appl = {avct_l2c_br_connect_ind_cback,
                                           avct_l2c_br_connect_cfm_cback,
                                           avct_l2c_br_config_ind_cback,
                                           avct_l2c_br_config_cfm_cback,
                                           avct_l2c_br_disconnect_ind_cback,
                                           NULL,
                                           avct_l2c_br_data_ind_cback,
                                           avct_l2c_br_congestion_ind_cback,
                                           NULL,
                                           avct_br_on_l2cap_error,
                                           NULL,
                                           NULL,
                                           NULL};

/*******************************************************************************
 *
+13 −8
Original line number Diff line number Diff line
@@ -48,14 +48,19 @@ void avdt_l2c_data_ind_cback(uint16_t lcid, BT_HDR* p_buf);
static void avdt_on_l2cap_error(uint16_t lcid, uint16_t result);

/* L2CAP callback function structure */
const tL2CAP_APPL_INFO avdt_l2c_appl = {
    avdt_l2c_connect_ind_cback,    avdt_l2c_connect_cfm_cback,
    avdt_l2c_config_ind_cback,     avdt_l2c_config_cfm_cback,
    avdt_l2c_disconnect_ind_cback, avdt_l2c_data_ind_cback,
    avdt_l2c_congestion_ind_cback, NULL,
    avdt_on_l2cap_error,           NULL,
    NULL,                          NULL
};
const tL2CAP_APPL_INFO avdt_l2c_appl = {avdt_l2c_connect_ind_cback,
                                        avdt_l2c_connect_cfm_cback,
                                        avdt_l2c_config_ind_cback,
                                        avdt_l2c_config_cfm_cback,
                                        avdt_l2c_disconnect_ind_cback,
                                        NULL,
                                        avdt_l2c_data_ind_cback,
                                        avdt_l2c_congestion_ind_cback,
                                        NULL,
                                        avdt_on_l2cap_error,
                                        NULL,
                                        NULL,
                                        NULL};

/*******************************************************************************
 *
+13 −14
Original line number Diff line number Diff line
@@ -68,20 +68,19 @@ static void gatt_send_conn_cback(tGATT_TCB* p_tcb);
static void gatt_l2cif_congest_cback(uint16_t cid, bool congested);
static void gatt_on_l2cap_error(uint16_t lcid, uint16_t result);

static const tL2CAP_APPL_INFO dyn_info = {
    gatt_l2cif_connect_ind_cback,
static const tL2CAP_APPL_INFO dyn_info = {gatt_l2cif_connect_ind_cback,
                                          gatt_l2cif_connect_cfm_cback,
                                          gatt_l2cif_config_ind_cback,
                                          gatt_l2cif_config_cfm_cback,
                                          gatt_l2cif_disconnect_ind_cback,
                                          NULL,
                                          gatt_l2cif_data_ind_cback,
                                          gatt_l2cif_congest_cback,
                                          NULL,
                                          gatt_on_l2cap_error,
                                          NULL,
                                          NULL,
    NULL
};
                                          NULL};

tGATT_CB gatt_cb;

+13 −8
Original line number Diff line number Diff line
@@ -44,14 +44,19 @@ static void hidd_l2cif_disconnect(uint16_t cid);
static void hidd_l2cif_data_ind(uint16_t cid, BT_HDR* p_msg);
static void hidd_l2cif_cong_ind(uint16_t cid, bool congested);
static void hidd_on_l2cap_error(uint16_t lcid, uint16_t result);
static const tL2CAP_APPL_INFO dev_reg_info = {
    hidd_l2cif_connect_ind,    hidd_l2cif_connect_cfm,
    hidd_l2cif_config_ind,     hidd_l2cif_config_cfm,
    hidd_l2cif_disconnect_ind, hidd_l2cif_data_ind,
    hidd_l2cif_cong_ind,       NULL,
    hidd_on_l2cap_error,       NULL,
    NULL,                      NULL
};
static const tL2CAP_APPL_INFO dev_reg_info = {hidd_l2cif_connect_ind,
                                              hidd_l2cif_connect_cfm,
                                              hidd_l2cif_config_ind,
                                              hidd_l2cif_config_cfm,
                                              hidd_l2cif_disconnect_ind,
                                              NULL,
                                              hidd_l2cif_data_ind,
                                              hidd_l2cif_cong_ind,
                                              NULL,
                                              hidd_on_l2cap_error,
                                              NULL,
                                              NULL,
                                              NULL};

/*******************************************************************************
 *
Loading