@@ -231,7 +231,7 @@ static void hidd_l2cif_connect_cfm(uint16_t cid, uint16_t result)
231231 tHID_CONN * p_hcon = & hd_cb .device .conn ;
232232 HIDD_TRACE_EVENT ("%s: cid=%04x result=%d, conn_state=%d" , __func__ , cid , result , p_hcon -> conn_state );
233233 if (p_hcon -> ctrl_cid != cid && p_hcon -> intr_cid != cid ) {
234- HIDD_TRACE_WARNING ("%s: unknown cid" , __func__ );
234+ HIDD_TRACE_WARNING ("%s: unknown cid=%04x " , __func__ , cid );
235235 return ;
236236 }
237237 if (!(p_hcon -> conn_flags & HID_CONN_FLAGS_IS_ORIG ) ||
@@ -243,10 +243,12 @@ static void hidd_l2cif_connect_cfm(uint16_t cid, uint16_t result)
243243 }
244244 if (result != L2CAP_CONN_OK ) {
245245 HIDD_TRACE_WARNING ("%s: connection failed, now disconnect" , __func__ );
246- if (cid == p_hcon -> ctrl_cid )
246+ if (cid == p_hcon -> ctrl_cid ) {
247247 p_hcon -> ctrl_cid = 0 ;
248- else
248+ } else {
249249 p_hcon -> intr_cid = 0 ;
250+ }
251+
250252 hidd_conn_disconnect ();
251253 hd_cb .callback (hd_cb .device .addr , HID_DHOST_EVT_CLOSE , HID_L2CAP_CONN_FAIL | (uint32_t )result , NULL );
252254 return ;
@@ -278,7 +280,7 @@ static void hidd_l2cif_config_ind(uint16_t cid, tL2CAP_CFG_INFO *p_cfg)
278280 HIDD_TRACE_EVENT ("%s: cid=%04x" , __func__ , cid );
279281 p_hcon = & hd_cb .device .conn ;
280282 if (p_hcon -> ctrl_cid != cid && p_hcon -> intr_cid != cid ) {
281- HIDD_TRACE_WARNING ("%s: unknown cid" , __func__ );
283+ HIDD_TRACE_WARNING ("%s: unknown cid=%04x " , __func__ , cid );
282284 return ;
283285 }
284286 if ((!p_cfg -> mtu_present ) || (p_cfg -> mtu > HID_DEV_MTU_SIZE ))
@@ -297,7 +299,8 @@ static void hidd_l2cif_config_ind(uint16_t cid, tL2CAP_CFG_INFO *p_cfg)
297299 // update flags
298300 if (cid == p_hcon -> ctrl_cid ) {
299301 p_hcon -> conn_flags |= HID_CONN_FLAGS_HIS_CTRL_CFG_DONE ;
300- if ((p_hcon -> conn_flags & HID_CONN_FLAGS_IS_ORIG ) && (p_hcon -> conn_flags & HID_CONN_FLAGS_MY_CTRL_CFG_DONE )) {
302+ if ((p_hcon -> conn_flags & HID_CONN_FLAGS_IS_ORIG ) && (p_hcon -> conn_flags & HID_CONN_FLAGS_MY_CTRL_CFG_DONE ) &&
303+ (p_hcon -> conn_state != HID_CONN_STATE_CONNECTING_INTR )) {
301304 p_hcon -> disc_reason = HID_L2CAP_CONN_FAIL ;
302305 if ((p_hcon -> intr_cid = L2CA_ConnectReq (HID_PSM_INTERRUPT , hd_cb .device .addr )) == 0 ) {
303306 p_hcon -> conn_state = HID_CONN_STATE_UNUSED ;
@@ -330,7 +333,7 @@ static void hidd_l2cif_config_cfm(uint16_t cid, tL2CAP_CFG_INFO *p_cfg)
330333 HIDD_TRACE_EVENT ("%s: cid=%04x pcfg->result=%d" , __func__ , cid , p_cfg -> result );
331334 p_hcon = & hd_cb .device .conn ;
332335 if (p_hcon -> ctrl_cid != cid && p_hcon -> intr_cid != cid ) {
333- HIDD_TRACE_WARNING ("%s: unknown cid" , __func__ );
336+ HIDD_TRACE_WARNING ("%s: unknown cid=%04x " , __func__ , cid );
334337 return ;
335338 }
336339 if (p_hcon -> intr_cid == cid && p_cfg -> result == L2CAP_CFG_UNACCEPTABLE_PARAMS && p_cfg -> qos_present ) {
@@ -357,7 +360,8 @@ static void hidd_l2cif_config_cfm(uint16_t cid, tL2CAP_CFG_INFO *p_cfg)
357360 // update flags
358361 if (cid == p_hcon -> ctrl_cid ) {
359362 p_hcon -> conn_flags |= HID_CONN_FLAGS_MY_CTRL_CFG_DONE ;
360- if ((p_hcon -> conn_flags & HID_CONN_FLAGS_IS_ORIG ) && (p_hcon -> conn_flags & HID_CONN_FLAGS_HIS_CTRL_CFG_DONE )) {
363+ if ((p_hcon -> conn_flags & HID_CONN_FLAGS_IS_ORIG ) && (p_hcon -> conn_flags & HID_CONN_FLAGS_HIS_CTRL_CFG_DONE ) &&
364+ (p_hcon -> conn_state != HID_CONN_STATE_CONNECTING_INTR )) {
361365 p_hcon -> disc_reason = HID_L2CAP_CONN_FAIL ;
362366 if ((p_hcon -> intr_cid = L2CA_ConnectReq (HID_PSM_INTERRUPT , hd_cb .device .addr )) == 0 ) {
363367 p_hcon -> conn_state = HID_CONN_STATE_UNUSED ;
@@ -389,11 +393,14 @@ static void hidd_l2cif_disconnect_ind(uint16_t cid, bool ack_needed)
389393 HIDD_TRACE_EVENT ("%s: cid=%04x ack_needed=%d" , __func__ , cid , ack_needed );
390394 p_hcon = & hd_cb .device .conn ;
391395 if (p_hcon -> conn_state == HID_CONN_STATE_UNUSED || (p_hcon -> ctrl_cid != cid && p_hcon -> intr_cid != cid )) {
392- HIDD_TRACE_WARNING ("%s: unknown cid" , __func__ );
396+ HIDD_TRACE_WARNING ("%s: unknown cid=%04x " , __func__ , cid );
393397 return ;
394398 }
395- if (ack_needed )
399+
400+ if (ack_needed ) {
396401 L2CA_DisconnectRsp (cid );
402+ }
403+
397404 if (cid == p_hcon -> ctrl_cid ) {
398405 p_hcon -> ctrl_cid = 0 ;
399406 p_hcon -> conn_state = HID_CONN_STATE_DISCONNECTING_CTRL ;
@@ -417,7 +424,7 @@ static void hidd_l2cif_disconnect_ind(uint16_t cid, bool ack_needed)
417424 *
418425 * Function hidd_l2cif_disconnect_cfm
419426 *
420- * Description Handles L2CAP disconection response
427+ * Description Handles L2CAP disconnection response
421428 *
422429 * Returns void
423430 *
@@ -428,7 +435,7 @@ static void hidd_l2cif_disconnect_cfm(uint16_t cid, uint16_t result)
428435 HIDD_TRACE_EVENT ("%s: cid=%04x result=%d" , __func__ , cid , result );
429436 p_hcon = & hd_cb .device .conn ;
430437 if (p_hcon -> conn_state == HID_CONN_STATE_UNUSED || (p_hcon -> ctrl_cid != cid && p_hcon -> intr_cid != cid )) {
431- HIDD_TRACE_WARNING ("%s: unknown cid" , __func__ );
438+ HIDD_TRACE_WARNING ("%s: unknown cid=%04x " , __func__ , cid );
432439 return ;
433440 }
434441 if (cid == p_hcon -> ctrl_cid ) {
@@ -465,7 +472,7 @@ static void hidd_l2cif_cong_ind(uint16_t cid, bool congested)
465472 HIDD_TRACE_EVENT ("%s: cid=%04x congested=%d" , __func__ , cid , congested );
466473 p_hcon = & hd_cb .device .conn ;
467474 if (p_hcon -> conn_state == HID_CONN_STATE_UNUSED || (p_hcon -> ctrl_cid != cid && p_hcon -> intr_cid != cid )) {
468- HIDD_TRACE_WARNING ("%s: unknown cid" , __func__ );
475+ HIDD_TRACE_WARNING ("%s: unknown cid=%04x " , __func__ , cid );
469476 return ;
470477 }
471478 if (congested ) {
@@ -492,7 +499,7 @@ static void hidd_l2cif_data_ind(uint16_t cid, BT_HDR *p_msg)
492499 HIDD_TRACE_EVENT ("%s: cid=%04x" , __func__ , cid );
493500 p_hcon = & hd_cb .device .conn ;
494501 if (p_hcon -> conn_state == HID_CONN_STATE_UNUSED || (p_hcon -> ctrl_cid != cid && p_hcon -> intr_cid != cid )) {
495- HIDD_TRACE_WARNING ("%s: unknown cid" , __func__ );
502+ HIDD_TRACE_WARNING ("%s: unknown cid=%04x " , __func__ , cid );
496503 osi_free (p_msg );
497504 return ;
498505 }
@@ -645,7 +652,7 @@ tHID_STATUS hidd_conn_initiate(void)
645652 p_dev -> conn .ctrl_cid = 0 ;
646653 p_dev -> conn .intr_cid = 0 ;
647654 p_dev -> conn .disc_reason = HID_L2CAP_CONN_FAIL ;
648- p_dev -> conn .conn_flags = HID_CONN_FLAGS_IS_ORIG ;
655+ p_dev -> conn .conn_flags | = HID_CONN_FLAGS_IS_ORIG ;
649656 BTM_SetOutService (p_dev -> addr , BTM_SEC_SERVICE_HIDD_SEC_CTRL , HIDD_SEC_CHN );
650657 /* Check if L2CAP started the connection process */
651658 if ((p_dev -> conn .ctrl_cid = L2CA_ConnectReq (HID_PSM_CONTROL , p_dev -> addr )) == 0 ) {
0 commit comments