uint8_t report_req_pending;
guint report_req_timer;
uint32_t report_rsp_id;
+ bool virtual_cable_unplug;
#ifdef TIZEN_BT_HID_DEVICE_ENABLE
char *role;
#endif
g_free(idev);
}
+static void virtual_cable_unplug(struct input_device *idev)
+{
+ device_remove_bonding(idev->device,
+ btd_device_get_bdaddr_type(idev->device));
+
+ idev->virtual_cable_unplug = false;
+}
+
static bool hidp_send_message(GIOChannel *chan, uint8_t hdr,
const uint8_t *data, size_t size)
{
static bool hidp_send_ctrl_message(struct input_device *idev, uint8_t hdr,
const uint8_t *data, size_t size)
{
+ if (hdr == (HIDP_TRANS_HID_CONTROL | HIDP_CTRL_VIRTUAL_CABLE_UNPLUG))
+ idev->virtual_cable_unplug = true;
+
return hidp_send_message(idev->ctrl_io, hdr, data, size);
}
#else
input_device_enter_reconnect_mode(idev);
#endif
+
+ if (!idev->ctrl_io && idev->virtual_cable_unplug)
+ virtual_cable_unplug(idev);
+
return FALSE;
}
DBG("");
if (param == HIDP_CTRL_VIRTUAL_CABLE_UNPLUG)
- connection_disconnect(idev, 0);
+ connection_disconnect(idev, (1 << HIDP_VIRTUAL_CABLE_UNPLUG));
}
static void hidp_recv_ctrl_data(struct input_device *idev, uint8_t param,
if (idev->intr_io && !(cond & G_IO_NVAL))
g_io_channel_shutdown(idev->intr_io, TRUE, NULL);
+ if (!idev->intr_io && idev->virtual_cable_unplug)
+ virtual_cable_unplug(idev);
+
return FALSE;
}
if (idev->role != NULL)
btd_service_disconnecting_complete(idev->service, 0);
#endif
+
+ if (flags & (1 << HIDP_VIRTUAL_CABLE_UNPLUG))
+ idev->virtual_cable_unplug = true;
+
if (idev->uhid)
return 0;
else