#ifndef HIDDEV_H #define HIDDEV_H #include #include /* USB热拔插支持: USB热拔插通过事件驱动,不用频繁查询USB的连接事件,减少CPU占用。 部分libusb库不支持热拔插,根据实际情况选择是否开启热拔插 */ #define USB_HOT_PLUG_SUPPORT 0 class HIDDev { public: HIDDev(); ~HIDDev(); bool openDevice(int vendor_id, int product_id); void closeDevice(); int read(unsigned char *data, int length); int write(const unsigned char *data, int length); void handleEvents(); bool isConnected(); private: #if USB_HOT_PLUG_SUPPORT // 热拔插回调函数 static int LIBUSB_CALL hotplug_callback(libusb_context *ctx, libusb_device *device, libusb_hotplug_event event, void *user_data); #endif void usbEventHandling(); libusb_device_handle *dev_handle; libusb_context *ctx; std::thread usbThread; // USB事件线程,处理USB的断开重连事件 bool stopThread = false; // 线程停止标志位,用于程序退出时,线程能正确退出 bool devArrived = false; // USB设备连接标志位,表示设备插入待连接 int vendorId; int productId; bool connected = false; bool reconnectFlag = false; bool tryReconnect(); }; #endif // HIDDEV_H