mirror of http://192.168.1.51:8099/lmh188/twain3.0
83 lines
1.8 KiB
C++
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"
|
|
|
|
|
|
#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);
|
|
};
|