@@ -493,7 +493,12 @@ void bta_gattc_open_fail(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data)
493493void bta_gattc_open (tBTA_GATTC_CLCB * p_clcb , tBTA_GATTC_DATA * p_data )
494494{
495495 tBTA_GATTC_DATA gattc_data ;
496+ BOOLEAN found_app = FALSE;
496497
498+ tGATT_TCB * p_tcb = gatt_find_tcb_by_addr (p_data -> api_conn .remote_bda , BT_TRANSPORT_LE );
499+ if (p_tcb && p_clcb && p_data ) {
500+ found_app = gatt_find_specific_app_in_hold_link (p_tcb , p_clcb -> p_rcb -> client_if );
501+ }
497502 /* open/hold a connection */
498503 if (!GATT_Connect (p_clcb -> p_rcb -> client_if , p_data -> api_conn .remote_bda ,
499504 TRUE, p_data -> api_conn .transport )) {
@@ -507,7 +512,7 @@ void bta_gattc_open(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data)
507512 & p_clcb -> bta_conn_id ,
508513 p_data -> api_conn .transport )) {
509514 gattc_data .int_conn .hdr .layer_specific = p_clcb -> bta_conn_id ;
510-
515+ gattc_data . int_conn . already_connect = found_app ;
511516 bta_gattc_sm_execute (p_clcb , BTA_GATTC_INT_CONN_EVT , & gattc_data );
512517 }
513518 /* else wait for the callback event */
@@ -672,14 +677,14 @@ void bta_gattc_conn(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data)
672677 if (bta_gattc_cache_load (p_clcb )) {
673678 p_clcb -> p_srcb -> state = BTA_GATTC_SERV_IDLE ;
674679 bta_gattc_reset_discover_st (p_clcb -> p_srcb , BTA_GATT_OK );
675- } else { /* cache is building */
680+ } else { /* cache is building */
676681 p_clcb -> p_srcb -> state = BTA_GATTC_SERV_DISC ;
677682 /* cache load failure, start discovery */
678683 bta_gattc_start_discover (p_clcb , NULL );
684+ }
685+ } else { /* cache is building */
686+ p_clcb -> state = BTA_GATTC_DISCOVER_ST ;
679687 }
680- } else { /* cache is building */
681- p_clcb -> state = BTA_GATTC_DISCOVER_ST ;
682- }
683688 } else {
684689 /* a pending service handle change indication */
685690 if (p_clcb -> p_srcb -> srvc_hdl_chg ) {
@@ -694,9 +699,14 @@ void bta_gattc_conn(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data)
694699 if (p_clcb -> transport == BTA_TRANSPORT_BR_EDR ) {
695700 bta_sys_conn_open (BTA_ID_GATTC , BTA_ALL_APP_ID , p_clcb -> bda );
696701 }
697-
702+ tBTA_GATT_STATUS status = BTA_GATT_OK ;
703+ if (p_data && p_data -> int_conn .already_connect ) {
704+ //clear already_connect
705+ p_data -> int_conn .already_connect = FALSE;
706+ status = BTA_GATT_ALREADY_OPEN ;
707+ }
698708 bta_gattc_send_open_cback (p_clcb -> p_rcb ,
699- BTA_GATT_OK ,
709+ status ,
700710 p_clcb -> bda ,
701711 p_clcb -> bta_conn_id ,
702712 p_clcb -> transport ,
0 commit comments