uv-twain/huagao/Device/UsbScanEx.h

83 lines
1.8 KiB
C++

#pragma once
#ifdef WIN32
#include <Windows.h>
#include <usbscan.h>
#endif // WINDOWS
#include <memory>
#include <list>
#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<std::shared_ptr<IUsb>> find_all();
static std::list<std::shared_ptr<IUsb>> find_vid_pid(int vid, int pid);
private:
static std::list<usb_scan_dev_info> find_all_usb();
UsbScan_List();
UsbScan_List(uint16_t vendor_id, uint16_t product_id);
};