Merge branch 'bugfix/btdm_fix_connect_fail_when_remote_addr_is_random' into 'master'

Component/bt: modify open API params

See merge request idf/esp-idf!2116
This commit is contained in:
Jiang Jiang Jian 2018-03-30 17:00:19 +08:00
commit e6d6deebc7
31 changed files with 67 additions and 45 deletions

View File

@ -67,7 +67,7 @@ esp_err_t esp_ble_gattc_app_unregister(esp_gatt_if_t gattc_if)
return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gattc_args_t), NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gattc_args_t), NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
} }
esp_err_t esp_ble_gattc_open(esp_gatt_if_t gattc_if, esp_bd_addr_t remote_bda, bool is_direct) esp_err_t esp_ble_gattc_open(esp_gatt_if_t gattc_if, esp_bd_addr_t remote_bda, esp_ble_addr_type_t remote_addr_type, bool is_direct)
{ {
btc_msg_t msg; btc_msg_t msg;
btc_ble_gattc_args_t arg; btc_ble_gattc_args_t arg;
@ -79,6 +79,7 @@ esp_err_t esp_ble_gattc_open(esp_gatt_if_t gattc_if, esp_bd_addr_t remote_bda, b
msg.act = BTC_GATTC_ACT_OPEN; msg.act = BTC_GATTC_ACT_OPEN;
arg.open.gattc_if = gattc_if; arg.open.gattc_if = gattc_if;
memcpy(arg.open.remote_bda, remote_bda, ESP_BD_ADDR_LEN); memcpy(arg.open.remote_bda, remote_bda, ESP_BD_ADDR_LEN);
arg.open.remote_addr_type = remote_addr_type;
arg.open.is_direct = is_direct; arg.open.is_direct = is_direct;
return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gattc_args_t), NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL); return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gattc_args_t), NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);

View File

@ -283,6 +283,7 @@ esp_err_t esp_ble_gattc_app_unregister(esp_gatt_if_t gattc_if);
* *
* @param[in] gattc_if: Gatt client access interface. * @param[in] gattc_if: Gatt client access interface.
* @param[in] remote_bda: remote device bluetooth device address. * @param[in] remote_bda: remote device bluetooth device address.
* @param[in] remote_addr_type: remote device bluetooth device the address type.
* @param[in] is_direct: direct connection or background auto connection * @param[in] is_direct: direct connection or background auto connection
* *
* @return * @return
@ -290,7 +291,7 @@ esp_err_t esp_ble_gattc_app_unregister(esp_gatt_if_t gattc_if);
* - other: failed * - other: failed
* *
*/ */
esp_err_t esp_ble_gattc_open(esp_gatt_if_t gattc_if, esp_bd_addr_t remote_bda, bool is_direct); esp_err_t esp_ble_gattc_open(esp_gatt_if_t gattc_if, esp_bd_addr_t remote_bda, esp_ble_addr_type_t remote_addr_type, bool is_direct);
/** /**

View File

@ -5635,7 +5635,8 @@ void btm_dm_start_gatt_discovery (BD_ADDR bd_addr)
bta_sys_stop_timer(&bta_dm_search_cb.gatt_close_timer); bta_sys_stop_timer(&bta_dm_search_cb.gatt_close_timer);
btm_dm_start_disc_gatt_services(bta_dm_search_cb.conn_id); btm_dm_start_disc_gatt_services(bta_dm_search_cb.conn_id);
} else { } else {
BTA_GATTC_Open(bta_dm_search_cb.client_if, bd_addr, TRUE, BTA_GATT_TRANSPORT_LE); //TODO need to add addr_type in future
BTA_GATTC_Open(bta_dm_search_cb.client_if, bd_addr, BLE_ADDR_UNKNOWN_TYPE, TRUE, BTA_GATT_TRANSPORT_LE);
} }
} }
#endif /* #if (GATTC_INCLUDED == TRUE) */ #endif /* #if (GATTC_INCLUDED == TRUE) */

View File

@ -500,7 +500,7 @@ void bta_gattc_open(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data)
found_app = gatt_find_specific_app_in_hold_link(p_tcb, p_clcb->p_rcb->client_if); found_app = gatt_find_specific_app_in_hold_link(p_tcb, p_clcb->p_rcb->client_if);
} }
/* open/hold a connection */ /* open/hold a connection */
if (!GATT_Connect(p_clcb->p_rcb->client_if, p_data->api_conn.remote_bda, if (!GATT_Connect(p_clcb->p_rcb->client_if, p_data->api_conn.remote_bda, p_data->api_conn.remote_addr_type,
TRUE, p_data->api_conn.transport)) { TRUE, p_data->api_conn.transport)) {
APPL_TRACE_ERROR("Connection open failure"); APPL_TRACE_ERROR("Connection open failure");
@ -536,7 +536,7 @@ void bta_gattc_init_bk_conn(tBTA_GATTC_API_OPEN *p_data, tBTA_GATTC_RCB *p_clreg
if (bta_gattc_mark_bg_conn(p_data->client_if, p_data->remote_bda, TRUE, FALSE)) { if (bta_gattc_mark_bg_conn(p_data->client_if, p_data->remote_bda, TRUE, FALSE)) {
/* always call open to hold a connection */ /* always call open to hold a connection */
if (!GATT_Connect(p_data->client_if, p_data->remote_bda, FALSE, p_data->transport)) { if (!GATT_Connect(p_data->client_if, p_data->remote_bda, p_data->remote_addr_type, FALSE, p_data->transport)) {
uint8_t *bda = (uint8_t *)p_data->remote_bda; uint8_t *bda = (uint8_t *)p_data->remote_bda;
status = BTA_GATT_ERROR; status = BTA_GATT_ERROR;
APPL_TRACE_ERROR("%s unable to connect to remote bd_addr:%02x:%02x:%02x:%02x:%02x:%02x", APPL_TRACE_ERROR("%s unable to connect to remote bd_addr:%02x:%02x:%02x:%02x:%02x:%02x",

View File

@ -135,13 +135,14 @@ void BTA_GATTC_AppDeregister(tBTA_GATTC_IF client_if)
** **
** Parameters client_if: server interface. ** Parameters client_if: server interface.
** remote_bda: remote device BD address. ** remote_bda: remote device BD address.
** remote_addr_type: remote device BD address type.
** is_direct: direct connection or background auto connection ** is_direct: direct connection or background auto connection
** transport: Transport to be used for GATT connection (BREDR/LE) ** transport: Transport to be used for GATT connection (BREDR/LE)
** **
** Returns void ** Returns void
** **
*******************************************************************************/ *******************************************************************************/
void BTA_GATTC_Open(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, void BTA_GATTC_Open(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, tBTA_ADDR_TYPE remote_addr_type,
BOOLEAN is_direct, tBTA_GATT_TRANSPORT transport) BOOLEAN is_direct, tBTA_GATT_TRANSPORT transport)
{ {
tBTA_GATTC_API_OPEN *p_buf; tBTA_GATTC_API_OPEN *p_buf;
@ -152,6 +153,7 @@ void BTA_GATTC_Open(tBTA_GATTC_IF client_if, BD_ADDR remote_bda,
p_buf->client_if = client_if; p_buf->client_if = client_if;
p_buf->is_direct = is_direct; p_buf->is_direct = is_direct;
p_buf->transport = transport; p_buf->transport = transport;
p_buf->remote_addr_type = remote_addr_type;
memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN); memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN);

View File

@ -729,7 +729,7 @@ void bta_gatts_open (tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA *p_msg)
if ((p_rcb = bta_gatts_find_app_rcb_by_app_if(p_msg->api_open.server_if)) != NULL) { if ((p_rcb = bta_gatts_find_app_rcb_by_app_if(p_msg->api_open.server_if)) != NULL) {
/* should always get the connection ID */ /* should always get the connection ID */
if (GATT_Connect(p_rcb->gatt_if, p_msg->api_open.remote_bda, if (GATT_Connect(p_rcb->gatt_if, p_msg->api_open.remote_bda, BLE_ADDR_UNKNOWN_TYPE,
p_msg->api_open.is_direct, p_msg->api_open.transport)) { p_msg->api_open.is_direct, p_msg->api_open.transport)) {
status = BTA_GATT_OK; status = BTA_GATT_OK;

View File

@ -334,7 +334,7 @@ void bta_hh_le_open_conn(tBTA_HH_DEV_CB *p_cb, BD_ADDR remote_bda)
bta_hh_cb.le_cb_index[BTA_HH_GET_LE_CB_IDX(p_cb->hid_handle)] = p_cb->index; bta_hh_cb.le_cb_index[BTA_HH_GET_LE_CB_IDX(p_cb->hid_handle)] = p_cb->index;
p_cb->in_use = TRUE; p_cb->in_use = TRUE;
BTA_GATTC_Open(bta_hh_cb.gatt_if, remote_bda, TRUE, BTA_GATT_TRANSPORT_LE); BTA_GATTC_Open(bta_hh_cb.gatt_if, remote_bda, BLE_ADDR_UNKNOWN_TYPE, TRUE, BTA_GATT_TRANSPORT_LE);
} }
/******************************************************************************* /*******************************************************************************
@ -2600,7 +2600,7 @@ static void bta_hh_le_add_dev_bg_conn(tBTA_HH_DEV_CB *p_cb, BOOLEAN check_bond)
if (/*p_cb->dscp_info.flag & BTA_HH_LE_NORMAL_CONN &&*/ if (/*p_cb->dscp_info.flag & BTA_HH_LE_NORMAL_CONN &&*/
!p_cb->in_bg_conn && to_add) { !p_cb->in_bg_conn && to_add) {
/* add device into BG connection to accept remote initiated connection */ /* add device into BG connection to accept remote initiated connection */
BTA_GATTC_Open(bta_hh_cb.gatt_if, p_cb->addr, FALSE, BTA_GATT_TRANSPORT_LE); BTA_GATTC_Open(bta_hh_cb.gatt_if, p_cb->addr, BLE_ADDR_UNKNOWN_TYPE, FALSE, BTA_GATT_TRANSPORT_LE);
p_cb->in_bg_conn = TRUE; p_cb->in_bg_conn = TRUE;
BTA_DmBleSetBgConnType(BTA_DM_BLE_CONN_AUTO, NULL); BTA_DmBleSetBgConnType(BTA_DM_BLE_CONN_AUTO, NULL);

View File

@ -188,6 +188,8 @@ typedef UINT8 tBTA_GATTC_EVT;
typedef tGATT_IF tBTA_GATTC_IF; typedef tGATT_IF tBTA_GATTC_IF;
typedef UINT8 tBTA_ADDR_TYPE;
typedef struct { typedef struct {
UINT16 unit; /* as UUIUD defined by SIG */ UINT16 unit; /* as UUIUD defined by SIG */
UINT16 descr; /* as UUID as defined by SIG */ UINT16 descr; /* as UUID as defined by SIG */
@ -740,12 +742,13 @@ extern void BTA_GATTC_AppDeregister (tBTA_GATTC_IF client_if);
** **
** Parameters client_if: server interface. ** Parameters client_if: server interface.
** remote_bda: remote device BD address. ** remote_bda: remote device BD address.
** remote_addr_type: remote device BD address type.
** is_direct: direct connection or background auto connection ** is_direct: direct connection or background auto connection
** **
** Returns void ** Returns void
** **
*******************************************************************************/ *******************************************************************************/
extern void BTA_GATTC_Open(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, extern void BTA_GATTC_Open(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, tBTA_ADDR_TYPE remote_addr_type,
BOOLEAN is_direct, tBTA_GATT_TRANSPORT transport); BOOLEAN is_direct, tBTA_GATT_TRANSPORT transport);
/******************************************************************************* /*******************************************************************************

View File

@ -116,6 +116,7 @@ typedef tBTA_GATTC_INT_START_IF tBTA_GATTC_INT_DEREG;
typedef struct { typedef struct {
BT_HDR hdr; BT_HDR hdr;
BD_ADDR remote_bda; BD_ADDR remote_bda;
tBTA_ADDR_TYPE remote_addr_type;
tBTA_GATTC_IF client_if; tBTA_GATTC_IF client_if;
BOOLEAN is_direct; BOOLEAN is_direct;
tBTA_TRANSPORT transport; tBTA_TRANSPORT transport;

View File

@ -2648,7 +2648,7 @@ void bta_jv_l2cap_connect_le(tBTA_JV_MSG *p_data)
id = t->id; id = t->id;
t->init_called = FALSE; t->init_called = FALSE;
if (L2CA_ConnectFixedChnl(t->chan, t->remote_addr)) { if (L2CA_ConnectFixedChnl(t->chan, t->remote_addr, BLE_ADDR_UNKNOWN_TYPE)) {
evt.l2c_cl_init.status = BTA_JV_SUCCESS; evt.l2c_cl_init.status = BTA_JV_SUCCESS;
evt.l2c_cl_init.handle = id; evt.l2c_cl_init.handle = id;

View File

@ -196,7 +196,7 @@ static void btc_gattc_app_unregister(btc_ble_gattc_args_t *arg)
static void btc_gattc_open(btc_ble_gattc_args_t *arg) static void btc_gattc_open(btc_ble_gattc_args_t *arg)
{ {
tBTA_GATT_TRANSPORT transport = BTA_GATT_TRANSPORT_LE; tBTA_GATT_TRANSPORT transport = BTA_GATT_TRANSPORT_LE;
BTA_GATTC_Open(arg->open.gattc_if, arg->open.remote_bda, arg->open.is_direct, transport); BTA_GATTC_Open(arg->open.gattc_if, arg->open.remote_bda, arg->open.remote_addr_type, arg->open.is_direct, transport);
} }
static void btc_gattc_close(btc_ble_gattc_args_t *arg) static void btc_gattc_close(btc_ble_gattc_args_t *arg)

View File

@ -54,6 +54,7 @@ typedef union {
struct open_arg { struct open_arg {
esp_gatt_if_t gattc_if; esp_gatt_if_t gattc_if;
esp_bd_addr_t remote_bda; esp_bd_addr_t remote_bda;
esp_ble_addr_type_t remote_addr_type;
bool is_direct; bool is_direct;
} open; } open;
//BTC_GATTC_ACT_CLOSE, //BTC_GATTC_ACT_CLOSE,

View File

@ -605,6 +605,7 @@ void BTM_ReadDevInfo (BD_ADDR remote_bda, tBT_DEVICE_TYPE *p_dev_type, tBLE_ADDR
{ {
tBTM_SEC_DEV_REC *p_dev_rec = btm_find_dev (remote_bda); tBTM_SEC_DEV_REC *p_dev_rec = btm_find_dev (remote_bda);
tBTM_INQ_INFO *p_inq_info = BTM_InqDbRead(remote_bda); tBTM_INQ_INFO *p_inq_info = BTM_InqDbRead(remote_bda);
tBLE_ADDR_TYPE temp_addr_type = (*p_addr_type);
*p_addr_type = BLE_ADDR_PUBLIC; *p_addr_type = BLE_ADDR_PUBLIC;
@ -614,10 +615,14 @@ void BTM_ReadDevInfo (BD_ADDR remote_bda, tBT_DEVICE_TYPE *p_dev_type, tBLE_ADDR
if (p_inq_info != NULL) { if (p_inq_info != NULL) {
*p_dev_type = p_inq_info->results.device_type ; *p_dev_type = p_inq_info->results.device_type ;
*p_addr_type = p_inq_info->results.ble_addr_type; *p_addr_type = p_inq_info->results.ble_addr_type;
} else {
if(temp_addr_type <= BLE_ADDR_TYPE_MAX) {
*p_addr_type = temp_addr_type;
} else { } else {
/* unknown device, assume BR/EDR */ /* unknown device, assume BR/EDR */
BTM_TRACE_DEBUG ("btm_find_dev_type - unknown device, BR/EDR assumed"); BTM_TRACE_DEBUG ("btm_find_dev_type - unknown device, BR/EDR assumed");
} }
}
} else { /* there is a security device record exisitng */ } else { /* there is a security device record exisitng */
/* new inquiry result, overwrite device type in security device record */ /* new inquiry result, overwrite device type in security device record */
if (p_inq_info) { if (p_inq_info) {

View File

@ -571,7 +571,7 @@ void btm_ble_initiate_select_conn(BD_ADDR bda)
BTM_TRACE_EVENT ("btm_ble_initiate_select_conn"); BTM_TRACE_EVENT ("btm_ble_initiate_select_conn");
/* use direct connection procedure to initiate connection */ /* use direct connection procedure to initiate connection */
if (!L2CA_ConnectFixedChnl(L2CAP_ATT_CID, bda)) { if (!L2CA_ConnectFixedChnl(L2CAP_ATT_CID, bda, BLE_ADDR_UNKNOWN_TYPE)) {
BTM_TRACE_ERROR("btm_ble_initiate_select_conn failed"); BTM_TRACE_ERROR("btm_ble_initiate_select_conn failed");
} }
} }

View File

@ -694,7 +694,7 @@ BOOLEAN gap_ble_accept_cl_operation(BD_ADDR peer_bda, UINT16 uuid, tGAP_BLE_CMPL
} }
/* hold the link here */ /* hold the link here */
if (!GATT_Connect(gap_cb.gatt_if, p_clcb->bda, TRUE, BT_TRANSPORT_LE)) { if (!GATT_Connect(gap_cb.gatt_if, p_clcb->bda, BLE_ADDR_UNKNOWN_TYPE, TRUE, BT_TRANSPORT_LE)) {
return started; return started;
} }

View File

@ -1337,12 +1337,13 @@ void GATT_StartIf (tGATT_IF gatt_if)
** **
** Parameters gatt_if: applicaiton interface ** Parameters gatt_if: applicaiton interface
** bd_addr: peer device address. ** bd_addr: peer device address.
** bd_addr_type: peer device address type.
** is_direct: is a direct conenection or a background auto connection ** is_direct: is a direct conenection or a background auto connection
** **
** Returns TRUE if connection started; FALSE if connection start failure. ** Returns TRUE if connection started; FALSE if connection start failure.
** **
*******************************************************************************/ *******************************************************************************/
BOOLEAN GATT_Connect (tGATT_IF gatt_if, BD_ADDR bd_addr, BOOLEAN is_direct, tBT_TRANSPORT transport) BOOLEAN GATT_Connect (tGATT_IF gatt_if, BD_ADDR bd_addr, tBLE_ADDR_TYPE bd_addr_type, BOOLEAN is_direct, tBT_TRANSPORT transport)
{ {
tGATT_REG *p_reg; tGATT_REG *p_reg;
BOOLEAN status = FALSE; BOOLEAN status = FALSE;
@ -1356,7 +1357,7 @@ BOOLEAN GATT_Connect (tGATT_IF gatt_if, BD_ADDR bd_addr, BOOLEAN is_direct, tBT_
} }
if (is_direct) { if (is_direct) {
status = gatt_act_connect (p_reg, bd_addr, transport); status = gatt_act_connect (p_reg, bd_addr, bd_addr_type, transport);
} else { } else {
if (transport == BT_TRANSPORT_LE) { if (transport == BT_TRANSPORT_LE) {
status = gatt_update_auto_connect_dev(gatt_if, TRUE, bd_addr, TRUE); status = gatt_update_auto_connect_dev(gatt_if, TRUE, bd_addr, TRUE);

View File

@ -494,7 +494,7 @@ void GATT_ConfigServiceChangeCCC (BD_ADDR remote_bda, BOOLEAN enable, tBT_TRANSP
p_clcb->connected = TRUE; p_clcb->connected = TRUE;
} }
/* hold the link here */ /* hold the link here */
GATT_Connect(gatt_cb.gatt_if, remote_bda, TRUE, transport); GATT_Connect(gatt_cb.gatt_if, remote_bda, BLE_ADDR_UNKNOWN_TYPE, TRUE, transport);
p_clcb->ccc_stage = GATT_SVC_CHANGED_CONNECTING; p_clcb->ccc_stage = GATT_SVC_CHANGED_CONNECTING;
if (!p_clcb->connected) { if (!p_clcb->connected) {

View File

@ -204,11 +204,11 @@ void gatt_free(void)
** Description This function is called to initiate a connection to a peer device. ** Description This function is called to initiate a connection to a peer device.
** **
** Parameter rem_bda: remote device address to connect to. ** Parameter rem_bda: remote device address to connect to.
** ** bd_addr_type: emote device address type.
** Returns TRUE if connection is started, otherwise return FALSE. ** Returns TRUE if connection is started, otherwise return FALSE.
** **
*******************************************************************************/ *******************************************************************************/
BOOLEAN gatt_connect (BD_ADDR rem_bda, tGATT_TCB *p_tcb, tBT_TRANSPORT transport) BOOLEAN gatt_connect (BD_ADDR rem_bda, tBLE_ADDR_TYPE bd_addr_type, tGATT_TCB *p_tcb, tBT_TRANSPORT transport)
{ {
BOOLEAN gatt_ret = FALSE; BOOLEAN gatt_ret = FALSE;
@ -218,7 +218,7 @@ BOOLEAN gatt_connect (BD_ADDR rem_bda, tGATT_TCB *p_tcb, tBT_TRANSPORT transport
if (transport == BT_TRANSPORT_LE) { if (transport == BT_TRANSPORT_LE) {
p_tcb->att_lcid = L2CAP_ATT_CID; p_tcb->att_lcid = L2CAP_ATT_CID;
gatt_ret = L2CA_ConnectFixedChnl (L2CAP_ATT_CID, rem_bda); gatt_ret = L2CA_ConnectFixedChnl (L2CAP_ATT_CID, rem_bda, bd_addr_type);
#if (CLASSIC_BT_INCLUDED == TRUE) #if (CLASSIC_BT_INCLUDED == TRUE)
} else { } else {
if ((p_tcb->att_lcid = L2CA_ConnectReq(BT_PSM_ATT, rem_bda)) != 0) { if ((p_tcb->att_lcid = L2CA_ConnectReq(BT_PSM_ATT, rem_bda)) != 0) {
@ -363,7 +363,7 @@ void gatt_update_app_use_link_flag (tGATT_IF gatt_if, tGATT_TCB *p_tcb, BOOLEAN
** Returns void. ** Returns void.
** **
*******************************************************************************/ *******************************************************************************/
BOOLEAN gatt_act_connect (tGATT_REG *p_reg, BD_ADDR bd_addr, tBT_TRANSPORT transport) BOOLEAN gatt_act_connect (tGATT_REG *p_reg, BD_ADDR bd_addr, tBLE_ADDR_TYPE bd_addr_type, tBT_TRANSPORT transport)
{ {
BOOLEAN ret = FALSE; BOOLEAN ret = FALSE;
tGATT_TCB *p_tcb; tGATT_TCB *p_tcb;
@ -376,7 +376,7 @@ BOOLEAN gatt_act_connect (tGATT_REG *p_reg, BD_ADDR bd_addr, tBT_TRANSPORT trans
/* before link down, another app try to open a GATT connection */ /* before link down, another app try to open a GATT connection */
if (st == GATT_CH_OPEN && gatt_num_apps_hold_link(p_tcb) == 0 && if (st == GATT_CH_OPEN && gatt_num_apps_hold_link(p_tcb) == 0 &&
transport == BT_TRANSPORT_LE ) { transport == BT_TRANSPORT_LE ) {
if (!gatt_connect(bd_addr, p_tcb, transport)) { if (!gatt_connect(bd_addr, bd_addr_type, p_tcb, transport)) {
ret = FALSE; ret = FALSE;
} }
} else if (st == GATT_CH_CLOSING) { } else if (st == GATT_CH_CLOSING) {
@ -385,7 +385,7 @@ BOOLEAN gatt_act_connect (tGATT_REG *p_reg, BD_ADDR bd_addr, tBT_TRANSPORT trans
} }
} else { } else {
if ((p_tcb = gatt_allocate_tcb_by_bdaddr(bd_addr, transport)) != NULL) { if ((p_tcb = gatt_allocate_tcb_by_bdaddr(bd_addr, transport)) != NULL) {
if (!gatt_connect(bd_addr, p_tcb, transport)) { if (!gatt_connect(bd_addr, bd_addr_type, p_tcb, transport)) {
GATT_TRACE_ERROR("gatt_connect failed"); GATT_TRACE_ERROR("gatt_connect failed");
fixed_queue_free(p_tcb->pending_enc_clcb, NULL); fixed_queue_free(p_tcb->pending_enc_clcb, NULL);
fixed_queue_free(p_tcb->pending_ind_q, NULL); fixed_queue_free(p_tcb->pending_ind_q, NULL);

View File

@ -572,8 +572,8 @@ extern void gatt_free(void);
/* from gatt_main.c */ /* from gatt_main.c */
extern BOOLEAN gatt_disconnect (tGATT_TCB *p_tcb); extern BOOLEAN gatt_disconnect (tGATT_TCB *p_tcb);
extern BOOLEAN gatt_act_connect (tGATT_REG *p_reg, BD_ADDR bd_addr, tBT_TRANSPORT transport); extern BOOLEAN gatt_act_connect (tGATT_REG *p_reg, BD_ADDR bd_addr, tBLE_ADDR_TYPE bd_addr_type, tBT_TRANSPORT transport);
extern BOOLEAN gatt_connect (BD_ADDR rem_bda, tGATT_TCB *p_tcb, tBT_TRANSPORT transport); extern BOOLEAN gatt_connect (BD_ADDR rem_bda, tBLE_ADDR_TYPE bd_addr_type, tGATT_TCB *p_tcb, tBT_TRANSPORT transport);
extern void gatt_data_process (tGATT_TCB *p_tcb, BT_HDR *p_buf); extern void gatt_data_process (tGATT_TCB *p_tcb, BT_HDR *p_buf);
extern void gatt_update_app_use_link_flag ( tGATT_IF gatt_if, tGATT_TCB *p_tcb, BOOLEAN is_add, BOOLEAN check_acl_link); extern void gatt_update_app_use_link_flag ( tGATT_IF gatt_if, tGATT_TCB *p_tcb, BOOLEAN is_add, BOOLEAN check_acl_link);

View File

@ -499,6 +499,8 @@ typedef struct {
#define BLE_ADDR_RANDOM 0x01 #define BLE_ADDR_RANDOM 0x01
#define BLE_ADDR_PUBLIC_ID 0x02 #define BLE_ADDR_PUBLIC_ID 0x02
#define BLE_ADDR_RANDOM_ID 0x03 #define BLE_ADDR_RANDOM_ID 0x03
#define BLE_ADDR_TYPE_MAX BLE_ADDR_RANDOM_ID
#define BLE_ADDR_UNKNOWN_TYPE 0XFF
typedef UINT8 tBLE_ADDR_TYPE; typedef UINT8 tBLE_ADDR_TYPE;
#define BLE_ADDR_TYPE_MASK (BLE_ADDR_RANDOM | BLE_ADDR_PUBLIC) #define BLE_ADDR_TYPE_MASK (BLE_ADDR_RANDOM | BLE_ADDR_PUBLIC)

View File

@ -1097,13 +1097,14 @@ extern void GATT_StartIf (tGATT_IF gatt_if);
** **
** Parameters gatt_if: applicaiton interface ** Parameters gatt_if: applicaiton interface
** bd_addr: peer device address. ** bd_addr: peer device address.
** bd_addr_type: peer device address type.
** is_direct: is a direct conenection or a background auto connection ** is_direct: is a direct conenection or a background auto connection
** transport : Physical transport for GATT connection (BR/EDR or LE) ** transport : Physical transport for GATT connection (BR/EDR or LE)
** **
** Returns TRUE if connection started; FALSE if connection start failure. ** Returns TRUE if connection started; FALSE if connection start failure.
** **
*******************************************************************************/ *******************************************************************************/
extern BOOLEAN GATT_Connect (tGATT_IF gatt_if, BD_ADDR bd_addr, extern BOOLEAN GATT_Connect (tGATT_IF gatt_if, BD_ADDR bd_addr, tBLE_ADDR_TYPE bd_addr_type,
BOOLEAN is_direct, tBT_TRANSPORT transport); BOOLEAN is_direct, tBT_TRANSPORT transport);

View File

@ -1079,11 +1079,12 @@ extern BOOLEAN L2CA_RegisterFixedChannel (UINT16 fixed_cid, tL2CAP_FIXED_CHNL_R
** **
** Parameters: Fixed CID ** Parameters: Fixed CID
** BD Address of remote ** BD Address of remote
** BD Address type
** **
** Return value: TRUE if connection started ** Return value: TRUE if connection started
** **
*******************************************************************************/ *******************************************************************************/
extern BOOLEAN L2CA_ConnectFixedChnl (UINT16 fixed_cid, BD_ADDR bd_addr); extern BOOLEAN L2CA_ConnectFixedChnl (UINT16 fixed_cid, BD_ADDR bd_addr, tBLE_ADDR_TYPE bd_addr_type);
/******************************************************************************* /*******************************************************************************
** **

View File

@ -422,6 +422,7 @@ typedef struct t_l2c_linkcb {
tBT_TRANSPORT transport; tBT_TRANSPORT transport;
#if (BLE_INCLUDED == TRUE) #if (BLE_INCLUDED == TRUE)
tBLE_ADDR_TYPE open_addr_type; /* be set by open API */
tBLE_ADDR_TYPE ble_addr_type; tBLE_ADDR_TYPE ble_addr_type;
UINT16 tx_data_len; /* tx data length used in data length extension */ UINT16 tx_data_len; /* tx data length used in data length extension */
fixed_queue_t *le_sec_pending_q; /* LE coc channels waiting for security check completion */ fixed_queue_t *le_sec_pending_q; /* LE coc channels waiting for security check completion */

View File

@ -1631,11 +1631,12 @@ BOOLEAN L2CA_RegisterFixedChannel (UINT16 fixed_cid, tL2CAP_FIXED_CHNL_REG *p_f
** **
** Parameters: Fixed CID ** Parameters: Fixed CID
** BD Address of remote ** BD Address of remote
** BD Address type
** **
** Return value: TRUE if connection started ** Return value: TRUE if connection started
** **
*******************************************************************************/ *******************************************************************************/
BOOLEAN L2CA_ConnectFixedChnl (UINT16 fixed_cid, BD_ADDR rem_bda) BOOLEAN L2CA_ConnectFixedChnl (UINT16 fixed_cid, BD_ADDR rem_bda, tBLE_ADDR_TYPE bd_addr_type)
{ {
tL2C_LCB *p_lcb; tL2C_LCB *p_lcb;
tBT_TRANSPORT transport = BT_TRANSPORT_BR_EDR; tBT_TRANSPORT transport = BT_TRANSPORT_BR_EDR;
@ -1723,7 +1724,9 @@ BOOLEAN L2CA_ConnectFixedChnl (UINT16 fixed_cid, BD_ADDR rem_bda)
l2cu_release_lcb (p_lcb); l2cu_release_lcb (p_lcb);
return FALSE; return FALSE;
} }
#if (BLE_INCLUDED == TRUE)
p_lcb->open_addr_type = bd_addr_type;
#endif
if (!l2cu_create_conn(p_lcb, transport)) { if (!l2cu_create_conn(p_lcb, transport)) {
L2CAP_TRACE_WARNING ("%s() - create_conn failed", __func__); L2CAP_TRACE_WARNING ("%s() - create_conn failed", __func__);
l2cu_release_lcb (p_lcb); l2cu_release_lcb (p_lcb);

View File

@ -2202,9 +2202,7 @@ BOOLEAN l2cu_create_conn (tL2C_LCB *p_lcb, tBT_TRANSPORT transport)
#if (BLE_INCLUDED == TRUE) #if (BLE_INCLUDED == TRUE)
tBT_DEVICE_TYPE dev_type; tBT_DEVICE_TYPE dev_type;
tBLE_ADDR_TYPE addr_type; tBLE_ADDR_TYPE addr_type = p_lcb->open_addr_type;
BTM_ReadDevInfo(p_lcb->remote_bd_addr, &dev_type, &addr_type); BTM_ReadDevInfo(p_lcb->remote_bd_addr, &dev_type, &addr_type);
if (transport == BT_TRANSPORT_LE) { if (transport == BT_TRANSPORT_LE) {

View File

@ -155,7 +155,7 @@ tSMP_STATUS SMP_Pair (BD_ADDR bd_addr)
memcpy (p_cb->pairing_bda, bd_addr, BD_ADDR_LEN); memcpy (p_cb->pairing_bda, bd_addr, BD_ADDR_LEN);
if (!L2CA_ConnectFixedChnl (L2CAP_SMP_CID, bd_addr)) { if (!L2CA_ConnectFixedChnl (L2CAP_SMP_CID, bd_addr, BLE_ADDR_UNKNOWN_TYPE)) {
SMP_TRACE_ERROR("%s: L2C connect fixed channel failed.\n", __FUNCTION__); SMP_TRACE_ERROR("%s: L2C connect fixed channel failed.\n", __FUNCTION__);
smp_sm_event(p_cb, SMP_AUTH_CMPL_EVT, &status); smp_sm_event(p_cb, SMP_AUTH_CMPL_EVT, &status);
return status; return status;
@ -198,7 +198,7 @@ tSMP_STATUS SMP_BR_PairWith (BD_ADDR bd_addr)
memcpy (p_cb->pairing_bda, bd_addr, BD_ADDR_LEN); memcpy (p_cb->pairing_bda, bd_addr, BD_ADDR_LEN);
if (!L2CA_ConnectFixedChnl (L2CAP_SMP_BR_CID, bd_addr)) { if (!L2CA_ConnectFixedChnl (L2CAP_SMP_BR_CID, bd_addr, BLE_ADDR_UNKNOWN_TYPE)) {
SMP_TRACE_ERROR("%s: L2C connect fixed channel failed.", __FUNCTION__); SMP_TRACE_ERROR("%s: L2C connect fixed channel failed.", __FUNCTION__);
smp_br_state_machine_event(p_cb, SMP_BR_AUTH_CMPL_EVT, &status); smp_br_state_machine_event(p_cb, SMP_BR_AUTH_CMPL_EVT, &status);
return status; return status;

View File

@ -235,7 +235,7 @@ static void esp_gap_cb(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *par
ESP_LOGI(GATTC_TAG, "Scan stop successed"); ESP_LOGI(GATTC_TAG, "Scan stop successed");
if (is_connect == false) { if (is_connect == false) {
ESP_LOGI(GATTC_TAG, "Connect to the remote device."); ESP_LOGI(GATTC_TAG, "Connect to the remote device.");
esp_ble_gattc_open(gl_profile_tab[PROFILE_APP_ID].gattc_if, scan_rst.scan_rst.bda, true); esp_ble_gattc_open(gl_profile_tab[PROFILE_APP_ID].gattc_if, scan_rst.scan_rst.bda, scan_rst.scan_rst.ble_addr_type, true);
} }
break; break;
case ESP_GAP_BLE_SCAN_RESULT_EVT: { case ESP_GAP_BLE_SCAN_RESULT_EVT: {

View File

@ -338,7 +338,7 @@ static void esp_gap_cb(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *par
connect = true; connect = true;
ESP_LOGI(GATTC_TAG, "connect to the remote device."); ESP_LOGI(GATTC_TAG, "connect to the remote device.");
esp_ble_gap_stop_scanning(); esp_ble_gap_stop_scanning();
esp_ble_gattc_open(gl_profile_tab[PROFILE_A_APP_ID].gattc_if, scan_result->scan_rst.bda, true); esp_ble_gattc_open(gl_profile_tab[PROFILE_A_APP_ID].gattc_if, scan_result->scan_rst.bda, scan_result->scan_rst.ble_addr_type, true);
} }
} }
} }

View File

@ -370,7 +370,7 @@ We are interested in the `ESP_GAP_SEARCH_INQ_RES_EVT` event, which is called eve
connect = true; connect = true;
ESP_LOGI(GATTC_TAG, "connect to the remote device."); ESP_LOGI(GATTC_TAG, "connect to the remote device.");
esp_ble_gap_stop_scanning(); esp_ble_gap_stop_scanning();
esp_ble_gattc_open(gl_profile_tab[PROFILE_A_APP_ID].gattc_if, scan_result->scan_rst.bda, true); esp_ble_gattc_open(gl_profile_tab[PROFILE_A_APP_ID].gattc_if, scan_result->scan_rst.bda, scan_result->scan_rst.ble_addr_type, true);
} }
} }
} }

View File

@ -397,7 +397,7 @@ static void esp_gap_cb(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *par
connect = true; connect = true;
ESP_LOGI(GATTC_TAG, "connect to the remote device."); ESP_LOGI(GATTC_TAG, "connect to the remote device.");
esp_ble_gap_stop_scanning(); esp_ble_gap_stop_scanning();
esp_ble_gattc_open(gl_profile_tab[PROFILE_A_APP_ID].gattc_if, scan_result->scan_rst.bda, true); esp_ble_gattc_open(gl_profile_tab[PROFILE_A_APP_ID].gattc_if, scan_result->scan_rst.bda, scan_result->scan_rst.ble_addr_type, true);
} }
} }
} }

View File

@ -792,7 +792,7 @@ static void esp_gap_cb(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *par
conn_device_a = true; conn_device_a = true;
ESP_LOGI(GATTC_TAG, "Searched device %s", remote_device_name[0]); ESP_LOGI(GATTC_TAG, "Searched device %s", remote_device_name[0]);
esp_ble_gap_stop_scanning(); esp_ble_gap_stop_scanning();
esp_ble_gattc_open(gl_profile_tab[PROFILE_A_APP_ID].gattc_if, scan_result->scan_rst.bda, true); esp_ble_gattc_open(gl_profile_tab[PROFILE_A_APP_ID].gattc_if, scan_result->scan_rst.bda, scan_result->scan_rst.ble_addr_type, true);
Isconnecting = true; Isconnecting = true;
} }
break; break;
@ -802,7 +802,7 @@ static void esp_gap_cb(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *par
conn_device_b = true; conn_device_b = true;
ESP_LOGI(GATTC_TAG, "Searched device %s", remote_device_name[1]); ESP_LOGI(GATTC_TAG, "Searched device %s", remote_device_name[1]);
esp_ble_gap_stop_scanning(); esp_ble_gap_stop_scanning();
esp_ble_gattc_open(gl_profile_tab[PROFILE_B_APP_ID].gattc_if, scan_result->scan_rst.bda, true); esp_ble_gattc_open(gl_profile_tab[PROFILE_B_APP_ID].gattc_if, scan_result->scan_rst.bda, scan_result->scan_rst.ble_addr_type, true);
Isconnecting = true; Isconnecting = true;
} }
@ -812,7 +812,7 @@ static void esp_gap_cb(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *par
conn_device_c = true; conn_device_c = true;
ESP_LOGI(GATTC_TAG, "Searched device %s", remote_device_name[2]); ESP_LOGI(GATTC_TAG, "Searched device %s", remote_device_name[2]);
esp_ble_gap_stop_scanning(); esp_ble_gap_stop_scanning();
esp_ble_gattc_open(gl_profile_tab[PROFILE_C_APP_ID].gattc_if, scan_result->scan_rst.bda, true); esp_ble_gattc_open(gl_profile_tab[PROFILE_C_APP_ID].gattc_if, scan_result->scan_rst.bda, scan_result->scan_rst.ble_addr_type, true);
Isconnecting = true; Isconnecting = true;
} }
break; break;