summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSen-Der Huang <sdhuang@broadcom.com>2012-08-16 11:28:05 -0700
committerMatthew Xie <mattx@google.com>2012-08-21 15:27:25 -0700
commit3f8f988891d7914f48439c57fd3f452ff5b40e47 (patch)
tree10084d1a93ff1f040289ef380e4de9fbfc22f9e8
parentf19a017a6f0beb4e79fc50a21d6d10172431bd9c (diff)
downloadexternal_bluetooth_bluedroid-3f8f988891d7914f48439c57fd3f452ff5b40e47.zip
external_bluetooth_bluedroid-3f8f988891d7914f48439c57fd3f452ff5b40e47.tar.gz
external_bluetooth_bluedroid-3f8f988891d7914f48439c57fd3f452ff5b40e47.tar.bz2
fixed the second reconnect issue
The problem was due to incorrect loading of the MDL configuratoion The issues is fixed after loading the MDL configiration in the right order Change-Id: Id33f680e089e71a10f9dd00163f931daa277b021
-rwxr-xr-x[-rw-r--r--]btif/src/btif_hl.c87
1 files changed, 48 insertions, 39 deletions
diff --git a/btif/src/btif_hl.c b/btif/src/btif_hl.c
index 5c3ed84..954a985 100644..100755
--- a/btif/src/btif_hl.c
+++ b/btif/src/btif_hl.c
@@ -232,7 +232,8 @@ BOOLEAN btif_hl_if_channel_setup_pending(int channel_id, UINT8 *p_app_idx, UINT8
if (found)
break;
}
- BTIF_TRACE_DEBUG5("%s found=%d channel_id=0x%08x", __FUNCTION__, found, channel_id, *p_app_idx, *p_mcl_idx);
+ BTIF_TRACE_DEBUG5("%s found=%d channel_id=0x%08x",
+ __FUNCTION__, found, channel_id, *p_app_idx, *p_mcl_idx);
return found;
}
@@ -280,12 +281,13 @@ void btif_hl_tmr_hdlr(TIMER_LIST_ENT *tle)
if (p_mcb->cch_timer_active)
{
- BTIF_TRACE_DEBUG5("%app_idx=%d, mcl_idx=%d timer_active=%d cch_time.in_use=%d mcl-connected=%d",
- i, j, p_mcb->cch_timer_active, p_mcb->cch_timer.in_use, p_mcb->is_connected);
+ BTIF_TRACE_DEBUG3("%app_idx=%d, mcl_idx=%d mcl-connected=%d",
+ i, j, p_mcb->is_connected);
p_mcb->cch_timer_active = FALSE;
if (p_mcb->is_connected)
{
- BTIF_TRACE_DEBUG3("CCH idle timeout Close CCH app_idx=%d mcl_idx=%d mcl_handle=%d",i ,j, p_mcb->mcl_handle);
+ BTIF_TRACE_DEBUG3("Idle timeout Close CCH app_idx=%d mcl_idx=%d mcl_handle=%d",
+ i ,j, p_mcb->mcl_handle);
BTA_HlCchClose(p_mcb->mcl_handle);
}
else
@@ -329,7 +331,8 @@ void btif_hl_start_cch_timer(UINT8 app_idx, UINT8 mcl_idx)
{
btif_hl_mcl_cb_t *p_mcb = BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx);
BTIF_TRACE_DEBUG5("%s app_idx=%d, mcl_idx=%d timer_active=%d timer_in_use=%d",
- __FUNCTION__,app_idx, mcl_idx, p_mcb->cch_timer_active, p_mcb->cch_timer.in_use);
+ __FUNCTION__,app_idx, mcl_idx,
+ p_mcb->cch_timer_active, p_mcb->cch_timer.in_use);
p_mcb->cch_timer_active = TRUE;
if (!p_mcb->cch_timer.in_use)
@@ -643,6 +646,8 @@ BOOLEAN btif_hl_is_reconnect_possible(UINT8 app_idx, UINT8 mcl_idx, int mdep_cf
BOOLEAN stream_mode_avail=FALSE;
UINT16 data_type = p_acb->sup_feature.mdep[mdep_cfg_idx].mdep_cfg.data_cfg[0].data_type;
tBTA_HL_MDEP_ID peer_mdep_id = p_dch_open_api->peer_mdep_id;
+ UINT8 mdl_idx;
+
BTIF_TRACE_DEBUG4("%s app_idx=%d mcl_idx=%d mdep_cfg_idx=%d",
__FUNCTION__, app_idx, mcl_idx, mdep_cfg_idx );
@@ -679,9 +684,12 @@ BOOLEAN btif_hl_is_reconnect_possible(UINT8 app_idx, UINT8 mcl_idx, int mdep_cf
if (p_mdl->base.active &&
p_mdl->extra.data_type ==data_type &&
(p_mdl->extra.peer_mdep_id != BTA_HL_INVALID_MDEP_ID && p_mdl->extra.peer_mdep_id == peer_mdep_id) &&
- memcpy(p_mdl->base.peer_bd_addr, p_mcb->bd_addr,sizeof(BD_ADDR) ))
+ memcpy(p_mdl->base.peer_bd_addr, p_mcb->bd_addr,sizeof(BD_ADDR) ) &&
+ p_mdl->base.mdl_id &&
+ !btif_hl_find_mdl_idx(app_idx, mcl_idx,p_mdl->base.mdl_id, &mdl_idx))
{
- BTIF_TRACE_DEBUG2("i=%d active=%d match step1", i, p_mdl->base.active );
+ BTIF_TRACE_DEBUG3("i=%d Matched active=%d mdl_id =%d",
+ i, p_mdl->base.active, p_mdl->base.mdl_id);
if (!use_mdl_dch_mode)
{
if (p_mdl->base.dch_mode == dch_mode)
@@ -1637,7 +1645,7 @@ static int btif_hl_get_next_channel_id(UINT8 app_id){
int channel_id;
btif_hl_cb.next_channel_id++;
channel_id = (app_id << 16) + next_channel_id;
- BTIF_TRACE_DEBUG4("%s channel_id=0x%08x, app_id=0x%02x0000 next_channel_id=0x%04x", __FUNCTION__,
+ BTIF_TRACE_DEBUG4("%s channel_id=0x%08x, app_id=0x%02x next_channel_id=0x%04x", __FUNCTION__,
channel_id, app_id, next_channel_id);
return channel_id;
}
@@ -1725,17 +1733,13 @@ BOOLEAN btif_hl_save_mdl_cfg(UINT8 app_id, UINT8 item_idx,
if (!btif_hl_find_peer_mdep_id(p_acb->app_id, p_mcb->bd_addr,
p_acb->sup_feature.mdep[p_mcb->pcb.mdep_cfg_idx].mdep_cfg.mdep_role,
- p_acb->sup_feature.mdep[p_mcb->pcb.mdep_cfg_idx].mdep_cfg.data_cfg[0].data_type, &p_mdl->extra.peer_mdep_id))
+ p_acb->sup_feature.mdep[p_mcb->pcb.mdep_cfg_idx].mdep_cfg.data_cfg[0].data_type,
+ &p_mdl->extra.peer_mdep_id))
{
p_mdl->extra.peer_mdep_id = BTA_HL_INVALID_MDEP_ID;
}
- BTIF_TRACE_DEBUG6("channel_id=0x%08x mdep_cfg_idx=%d, data_type=0x%04x mdep_role=%d local_mdep_id=%d peer_mdep_id=%d",
- *p_channel_id,
- p_mdl->extra.mdep_cfg_idx,
- p_mdl->extra.data_type,
- p_mdl->base.local_mdep_role,
- p_mdl->base.local_mdep_id,
- p_mdl->extra.peer_mdep_id);
+ BTIF_TRACE_DEBUG4("%s app_idx=%d item_idx=%d mld_id=0x%x",
+ __FUNCTION__, app_idx, item_idx, p_mdl->base.mdl_id);
evt_param.update_mdl.app_idx = app_idx;
len = sizeof(btif_hl_update_mdl_t);
BTIF_TRACE_DEBUG1("send BTIF_HL_UPDATE_MDL event app_idx=%d ",app_idx);
@@ -2921,7 +2925,8 @@ static BOOLEAN btif_hl_proc_dch_open_cfm(tBTA_HL *p_data)
if (btif_hl_create_socket(app_idx, mcl_idx, mdl_idx))
{
status = TRUE;
- BTIF_TRACE_DEBUG4("app_idx=%d mcl_idx=%d mdl_idx=%d p_dcb->channel_id=0x%08x", app_idx, mcl_idx, mdl_idx, p_dcb->channel_id);
+ BTIF_TRACE_DEBUG4("app_idx=%d mcl_idx=%d mdl_idx=%d p_dcb->channel_id=0x%08x",
+ app_idx, mcl_idx, mdl_idx, p_dcb->channel_id);
btif_hl_clean_pcb(p_pcb);
}
else
@@ -2994,7 +2999,8 @@ static BOOLEAN btif_hl_proc_dch_reconnect_cfm(tBTA_HL *p_data)
if (btif_hl_create_socket(app_idx, mcl_idx, mdl_idx))
{
status = TRUE;
- BTIF_TRACE_DEBUG4("app_idx=%d mcl_idx=%d mdl_idx=%d p_dcb->channel_id=0x%08x", app_idx, mcl_idx, mdl_idx, p_dcb->channel_id);
+ BTIF_TRACE_DEBUG4("app_idx=%d mcl_idx=%d mdl_idx=%d p_dcb->channel_id=0x%08x",
+ app_idx, mcl_idx, mdl_idx, p_dcb->channel_id);
btif_hl_clean_pcb(p_pcb);
}
else
@@ -3293,7 +3299,8 @@ static BOOLEAN btif_hl_proc_app_data(UINT8 app_idx){
}
else if (p_acb->sup_feature.advertize_source_sdp != p_nv->sup_feature.advertize_source_sdp)
{
- BTIF_TRACE_DEBUG1("advertize_source_sdp mismatch advertize_source_sdp=0x%x", p_nv->sup_feature.advertize_source_sdp);
+ BTIF_TRACE_DEBUG1("advertize_source_sdp mismatch advertize_source_sdp=0x%x",
+ p_nv->sup_feature.advertize_source_sdp);
}
else if (p_acb->sup_feature.num_of_mdeps != p_nv->sup_feature.num_of_mdeps)
{
@@ -3301,6 +3308,7 @@ static BOOLEAN btif_hl_proc_app_data(UINT8 app_idx){
}
else
{
+ //TODO remove debug after testing completed
BTIF_TRACE_DEBUG1("Step1 match for app_idx=%d now check mdep cfg", app_idx);
is_match = TRUE;
num_mdeps = p_acb->sup_feature.num_of_mdeps;
@@ -3310,8 +3318,10 @@ static BOOLEAN btif_hl_proc_app_data(UINT8 app_idx){
p_cfg = &p_acb->sup_feature.mdep[i].mdep_cfg;
p_nv_cfg = &p_nv->sup_feature.mdep[i].mdep_cfg;
- BTIF_TRACE_DEBUG2("mdep-role=%d data_type=%d ", p_cfg->mdep_role,p_cfg->data_cfg[0].data_type );
- BTIF_TRACE_DEBUG2("from NV mdep-role=%d data_type=%d ",p_nv_cfg->mdep_role,p_nv_cfg->data_cfg[0].data_type );
+ BTIF_TRACE_DEBUG2("mdep-role=%d data_type=%d ",
+ p_cfg->mdep_role,p_cfg->data_cfg[0].data_type );
+ BTIF_TRACE_DEBUG2("from NV mdep-role=%d data_type=%d ",
+ p_nv_cfg->mdep_role,p_nv_cfg->data_cfg[0].data_type );
if (p_cfg->mdep_role != p_nv_cfg->mdep_role ||
p_cfg->data_cfg[0].data_type != p_nv_cfg->data_cfg[0].data_type )
{
@@ -3336,36 +3346,28 @@ static BOOLEAN btif_hl_proc_app_data(UINT8 app_idx){
if (is_match)
{
- if ((bt_status = btif_storage_read_hl_mdl_data(p_data->app_nv_idx, (char *) &p_acb->mdl_cfg, sizeof(btif_hl_nv_mdl_data_t)))
+ if ((bt_status = btif_storage_read_hl_mdl_data(p_data->app_nv_idx,
+ (char *) &p_acb->mdl_cfg[0], sizeof(btif_hl_nv_mdl_data_t)))
== BT_STATUS_SUCCESS)
{
p_data->app_idx = app_idx;
p_acb->is_new_app = FALSE;
p_acb->app_nv_idx = p_data->app_nv_idx;
- BTIF_TRACE_DEBUG2("btif_storage_read_hl_mdl_data OK app_idx=%d app_nv_idx=%d",app_idx, p_data->app_nv_idx );
+ BTIF_TRACE_DEBUG2("btif_storage_read_hl_mdl_data OK app_idx=%d app_nv_idx=%d",
+ app_idx, p_data->app_nv_idx );
for (i=0; i<BTA_HL_NUM_MDL_CFGS; i++)
{
+ //TODO remove debug after testing completed
if (p_acb->mdl_cfg[i].base.active)
{
- BTIF_TRACE_DEBUG6("i=%d mdl_id=0x%x dch_mode=%d local_mdep_role=%d local_mdep_id=%d peer_mdep_id=%d",
+ BTIF_TRACE_DEBUG5("i=%d mdl_id=0x%x dch_mode=%d local_mdep_id=%d peer_mdep_id=%d",
i,
p_acb->mdl_cfg[i].base.mdl_id,
p_acb->mdl_cfg[i].base.dch_mode,
- p_acb->mdl_cfg[i].base.local_mdep_role,
p_acb->mdl_cfg[i].base.local_mdep_id,
p_acb->mdl_cfg[i].extra.peer_mdep_id );
- BTIF_TRACE_DEBUG3("data type=0x%08x mdep_cfg_idx=%d channel_id=0x%08x ",
- p_acb->mdl_cfg[i].extra.data_type,
- p_acb->mdl_cfg[i].extra.mdep_cfg_idx,
- p_acb->mdl_cfg_channel_id[i]);
- BTIF_TRACE_DEBUG6("BD ADDR 0x%02x-%02x-%02x-%02x-%02x-%02x",
- p_acb->mdl_cfg[i].base.peer_bd_addr[0],
- p_acb->mdl_cfg[i].base.peer_bd_addr[1],
- p_acb->mdl_cfg[i].base.peer_bd_addr[2],
- p_acb->mdl_cfg[i].base.peer_bd_addr[3],
- p_acb->mdl_cfg[i].base.peer_bd_addr[4],
- p_acb->mdl_cfg[i].base.peer_bd_addr[5]);
+
}
}
@@ -3527,8 +3529,10 @@ static void btif_hl_proc_cb_evt(UINT16 event, char* p_param){
if (send_chan_cb)
{
btif_hl_copy_bda(&bd_addr, p_data->chan_cb.bd_addr);
- BTIF_TRACE_DEBUG5("call channel state callback channel_id=0x%08x mdep_cfg_idx=%d,cb_state=%d state=%d fd=%d",p_data->chan_cb.channel_id,
- p_data->chan_cb.mdep_cfg_index, p_data->chan_cb.cb_state, state, p_data->chan_cb.fd);
+ BTIF_TRACE_DEBUG4("state callbk: ch_id=0x%08x cb_state=%d state=%d fd=%d",
+ p_data->chan_cb.channel_id,
+ p_data->chan_cb.cb_state,
+ state, p_data->chan_cb.fd);
btif_hl_display_bt_bda(&bd_addr);
BTIF_HL_CALL_CBACK(bt_hl_callbacks, channel_state_cb, p_data->chan_cb.app_id,
&bd_addr, p_data->chan_cb.mdep_cfg_index,
@@ -5225,12 +5229,17 @@ BOOLEAN btif_hl_load_mdl_config (UINT8 app_id, UINT8 buffer_size,
UINT8 app_idx;
BOOLEAN result = FALSE;
btif_hl_app_cb_t *p_acb;
+ tBTA_HL_MDL_CFG *p;
+ int i;
BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
if (btif_hl_find_app_idx(app_id, &app_idx))
{
p_acb = BTIF_HL_GET_APP_CB_PTR(app_idx);
- memcpy(p_mdl_buf, &p_acb->mdl_cfg[0], (sizeof(tBTA_HL_MDL_CFG)*buffer_size));
+ for (i=0, p=p_mdl_buf; i<buffer_size; i++, p++)
+ {
+ memcpy(p, &p_acb->mdl_cfg[i].base, sizeof(tBTA_HL_MDL_CFG));
+ }
result = TRUE;
}