bt_status_t btif_hh_virtual_unplug(const RawAddress* bd_addr) {
BTIF_TRACE_DEBUG("%s", __func__);
btif_hh_device_t* p_dev;
- char bd_str[18];
- snprintf(bd_str, sizeof(bd_str), "%02X:%02X:%02X:%02X:%02X:%02X",
- bd_addr->address[0], bd_addr->address[1], bd_addr->address[2],
- bd_addr->address[3], bd_addr->address[4], bd_addr->address[5]);
p_dev = btif_hh_find_dev_by_bda(*bd_addr);
if ((p_dev != NULL) && (p_dev->dev_status == BTHH_CONN_STATE_CONNECTED) &&
(p_dev->attr_mask & HID_VIRTUAL_CABLE)) {
BTA_HhSendCtrl(p_dev->dev_handle, BTA_HH_CTRL_VIRTUAL_CABLE_UNPLUG);
return BT_STATUS_SUCCESS;
} else {
- BTIF_TRACE_ERROR("%s: Error, device %s not opened.", __func__, bd_str);
+ BTIF_TRACE_ERROR("%s: Error, device %s not opened, status = %d", __func__,
+ bd_addr->ToString().c_str(), btif_hh_cb.status);
+ if ((btif_hh_cb.pending_conn_address == *bd_addr) &&
+ (btif_hh_cb.status == BTIF_HH_DEV_CONNECTING)) {
+ btif_hh_cb.status = (BTIF_HH_STATUS)BTIF_HH_DEV_DISCONNECTED;
+ btif_hh_cb.pending_conn_address = RawAddress::kEmpty;
+ }
return BT_STATUS_FAIL;
}
}
pagescan mode, we will do 2 retries to connect before giving up */
tBTA_SEC sec_mask = BTUI_HH_SECURITY;
btif_hh_cb.status = BTIF_HH_DEV_CONNECTING;
+ btif_hh_cb.pending_conn_address = *bd_addr;
BTA_HhOpen(*bd_addr, BTA_HH_PROTO_RPT_MODE, sec_mask);
// TODO(jpawlowski); make cback accept const and remove tmp!
case BTA_HH_OPEN_EVT:
BTIF_TRACE_WARNING("%s: BTA_HH_OPN_EVT: handle=%d, status =%d", __func__,
p_data->conn.handle, p_data->conn.status);
+ btif_hh_cb.pending_conn_address = RawAddress::kEmpty;
if (p_data->conn.status == BTA_HH_OK) {
p_dev = btif_hh_find_connected_dev_by_handle(p_data->conn.handle);
if (p_dev == NULL) {
CHECK_BTHH_INIT();
BTIF_TRACE_EVENT("BTHH: %s", __func__);
btif_hh_device_t* p_dev;
- char bd_str[18];
- snprintf(bd_str, sizeof(bd_str), "%02X:%02X:%02X:%02X:%02X:%02X",
- bd_addr->address[0], bd_addr->address[1], bd_addr->address[2],
- bd_addr->address[3], bd_addr->address[4], bd_addr->address[5]);
if (btif_hh_cb.status == BTIF_HH_DISABLED) {
BTIF_TRACE_ERROR("%s: Error, HH status = %d", __func__, btif_hh_cb.status);
return BT_STATUS_FAIL;
}
p_dev = btif_hh_find_dev_by_bda(*bd_addr);
if (!p_dev) {
- BTIF_TRACE_ERROR("%s: Error, device %s not opened.", __func__, bd_str);
+ BTIF_TRACE_ERROR("%s: Error, device %s not opened.", __func__,
+ bd_addr->ToString().c_str());
return BT_STATUS_FAIL;
}
btif_transfer_context(btif_hh_handle_evt, BTIF_HH_VUP_REQ_EVT, (char*)bd_addr,