return;
}
- bdcpy(cback_data.conn.bda, bta_hd_cb.bd_addr);
- cback_data.conn.status = BTHD_CONN_STATE_DISCONNECTING;
-
- bta_hd_cb.p_cback(BTA_HD_CONN_STATE_EVT, &cback_data);
+ if (HID_DevGetDevice(&cback_data.conn.bda) == HID_SUCCESS) {
+ cback_data.conn.status = BTHD_CONN_STATE_DISCONNECTING;
+ bta_hd_cb.p_cback(BTA_HD_CONN_STATE_EVT, &cback_data);
+ }
}
/*******************************************************************************
/* BTA_HD_API_REGISTER_APP_EVT */ {BTA_HD_IGNORE, BTA_HD_IDLE_ST},
/* BTA_HD_API_UNREGISTER_APP_EVT */ {BTA_HD_UNREGISTER_ACT, BTA_HD_INIT_ST},
/* BTA_HD_API_CONNECT_EVT */ {BTA_HD_CONNECT_ACT, BTA_HD_IDLE_ST},
- /* BTA_HD_API_DISCONNECT_EVT */ {BTA_HD_IGNORE, BTA_HD_IDLE_ST},
+ /* BTA_HD_API_DISCONNECT_EVT */ {BTA_HD_DISCONNECT_ACT, BTA_HD_IDLE_ST},
/* BTA_HD_API_ADD_DEVICE_EVT */ {BTA_HD_ADD_DEVICE_ACT, BTA_HD_IDLE_ST},
/* BTA_HD_API_REMOVE_DEVICE_EVT */ {BTA_HD_REMOVE_DEVICE_ACT, BTA_HD_IDLE_ST},
/* BTA_HD_API_SEND_REPORT_EVT */ {BTA_HD_SEND_REPORT_ACT, BTA_HD_IDLE_ST},
/* BTA_HD_API_REPORT_ERROR_EVT */ {BTA_HD_IGNORE, BTA_HD_IDLE_ST},
/* BTA_HD_API_VC_UNPLUG_EVT */ {BTA_HD_IGNORE, BTA_HD_IDLE_ST},
/* BTA_HD_INT_OPEN_EVT */ {BTA_HD_OPEN_ACT, BTA_HD_CONN_ST},
- /* BTA_HD_INT_CLOSE_EVT */ {BTA_HD_IGNORE, BTA_HD_IDLE_ST},
+ /* BTA_HD_INT_CLOSE_EVT */ {BTA_HD_CLOSE_ACT, BTA_HD_IDLE_ST},
/* BTA_HD_INT_INTR_DATA_EVT */ {BTA_HD_IGNORE, BTA_HD_IDLE_ST},
/* BTA_HD_INT_GET_REPORT_EVT */ {BTA_HD_IGNORE, BTA_HD_IDLE_ST},
/* BTA_HD_INT_SET_REPORT_EVT */ {BTA_HD_IGNORE, BTA_HD_IDLE_ST},
}
if (hd_cb.device.state == HIDD_DEV_NO_CONN) {
+ /* If we are still trying to connect, just close the connection. */
+ if (hd_cb.device.conn.conn_state != HID_CONN_STATE_UNUSED) {
+ tHID_STATUS ret = hidd_conn_disconnect();
+ hd_cb.device.conn.conn_state = HID_CONN_STATE_UNUSED;
+ hd_cb.callback(hd_cb.device.addr, HID_DHOST_EVT_CLOSE,
+ HID_ERR_DISCONNECTING, NULL);
+ return ret;
+ }
return HID_ERR_NO_CONNECTION;
}
p_hcon->disc_reason = HID_L2CAP_CONN_FAIL;
if ((p_hcon->intr_cid =
L2CA_ConnectReq(HID_PSM_INTERRUPT, hd_cb.device.addr)) == 0) {
- p_hcon->conn_state = HID_CONN_STATE_UNUSED;
hidd_conn_disconnect();
+ p_hcon->conn_state = HID_CONN_STATE_UNUSED;
HIDD_TRACE_WARNING("%s: could not start L2CAP connection for INTR",
__func__);
p_hcon->disc_reason = HID_L2CAP_CONN_FAIL;
if ((p_hcon->intr_cid =
L2CA_ConnectReq(HID_PSM_INTERRUPT, hd_cb.device.addr)) == 0) {
- p_hcon->conn_state = HID_CONN_STATE_UNUSED;
hidd_conn_disconnect();
+ p_hcon->conn_state = HID_CONN_STATE_UNUSED;
HIDD_TRACE_WARNING("%s: could not start L2CAP connection for INTR",
__func__);