#pragma once #ifdef WIN32 #include #include #endif // WINDOWS #include #include #include "IUsb.h" #include "PublicFunc.h" #pragma pack(1) struct tag_usb_pipe { HANDLE h_pipe; USBSCAN_PIPE_INFORMATION pipe_info; OVERLAPPED overlap; }; typedef struct tag_usb_pipe usb_pipe_t, * pusb_pipe_t; #pragma pack() typedef struct tag_usb_scan_dev_info { WORD vid; WORD pid; WORD index; }usb_scan_dev_info, * pusb_scan_dev_info; typedef struct tag_usb_scan_dev { USHORT _NumberOfDevs; tag_usb_scan_dev_info dev_infos[1024]; }usb_scan_dev, * pusb_scan_dev; class UsbScanEx : public IUsb { public: UsbScanEx(int index); virtual ~UsbScanEx(); // ͨ¹ý IUsb ¼Ì³Ð virtual bool open() override; virtual void set_usbhotplug_callback(usbhotplug_callback callback, void* userdata) override; virtual bool close() override; virtual void set_timeout(int timeout) override; virtual int read_bulk(void* data, int len) override; virtual int write_bulk(void* data, int len) override; virtual int control_msg(int rtype, int req, int value, int index, int len, void* data) override; virtual bool is_open() override; virtual bool is_connected() override; virtual int read_int(void* data, int len) override; private: int BULK_OUT; int BULK_IN; int INT_IN; int CTRL_IN_OUT; USBSCAN_PIPE_CONFIGURATION m_usbscan_config; usb_pipe_t m_usb_pipes[MAX_NUM_PIPES]; HANDLE m_h_dev; bool m_b_is_connected; int m_h_index; int timeout; OVERLAPPED ov[4]; usbhotplug_callback hotplug_call; void* usrdata; }; class UsbScan_List { public: ~UsbScan_List(); static std::list> find_all(); static std::list> find_vid_pid(int vid, int pid); static std::list find_all_usb(); private: UsbScan_List(); UsbScan_List(uint16_t vendor_id, uint16_t product_id); };