twain3/device/GScanO200.h

141 lines
4.0 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include "GScan.h"
#include <memory>
#include <thread>
#include "common.h"
#include "Global.h"
typedef struct tag_USBCB {
unsigned int u32_CMD;
unsigned int u32_Data;
unsigned int u32_Count;
}USBCB, * PUSBCB;
/*u32_CMD COMMAND*/
enum tagUsbKeyWords
{
/*无命令*/
NO_COMMAND = 0,
/*获取dsp 状态*/
GET_DSP_STATUS = 1,
/*取图*/
GET_IMAGE = 2,
/*销毁DSP中驻存的图*/
POP_IMAGE = 3,
/*开始扫描命令*/
START_COMMAND = 4,
/*停止扫描命令*/
STOP = 5,
/*获取扫描仪扫描模式*/
GET_SCAN_MODE = 6,
/*获取固件版本号*/
GET_FW_VERSION = 7,
/*返回PC端的状态*/
SEND_STATUS_PC = 8,
/*下发扫描配置参数*/
CONFIGURED_DATA = 9,
/*下发固件信息*/
SEND_FW = 10,
/*获取扫描参数*/
GET_CONFIG_DATA = 11,
/*获取扫描历史总张数*/
GET_SCANN_NUM = 12,
/*获取有无纸的状态*/
GET_PAPERFEEDER_STATUS = 13,
/*DSP初始化*/
INIT_HARDWARE_SYS = 14,
/*获取有无纸的状态*/
GET_PAPER_STATUS = 0x0d,
/*下发元器件配置参数灰度LED R曝光时间*/
SEND_COMPONENTS_GR = 15,
/*下发元器件配置参数LED G/B曝光时间*/
SEND_COMPONENTS_GB = 16,
/*下发扫描模式*/
SEND_SCAN_MODE = 17,
/*开始进行平场矫正*/
START_FLAT = 18,
/*停止平场矫正*/
STOP_FLAT = 19,
/*下发200dpi彩色平场矫正参数*/
SEND_200_COLOR_FLAT_DATA = 20,
/*下发300dpi彩色平场矫正参数*/
SEND_300_COLOR_FLAT_DATA = 21,
/*获取200dpi彩色平场矫正参数*/
GET_200_COLOR_FLAT_DATA = 22,
/*获取300dpi彩色平场矫正参数*/
GET_300_COLOR_FLAT_DATA = 23,
/*下发200dpi灰度平场校正参数*/
SEND_200_GRAY_FLAT_DATA = 24,
/*下发300dpi灰度平场校正参数*/
SEND_300_GRAY_FLAT_DATA = 25,
/*获取200DPI灰度平场校正参数*/
GET_200_GRAY_FLAT_DATA = 26,
/*获取300DPI灰度平场校正参数*/
GET_300_GRAY_FLAT_DATA = 27,
/*下发序列号命令*/
SEND_SERIAL = 28,
/*获取序列号命令*/
GET_SERIAL = 29,
/*获取辊轴张数*/
GET_ROLLER_NUM = 30,
/*清空辊轴张数*/
CLR_ROLLER_NUM = 31,
/*下发扫描张数*/
START_COMMAND_COUNT = 38,
/*设置休眠时间*/
SET_SLEEP_TIME = 39,
/*获取休眠时间*/
GET_SLEEP_TIME = 40,
/*清空硬件缓存*/
CLR_HARDWARE_CACHE = 41
};
class GScanO200 : public IGScan
{
public:
GScanO200();
virtual ~GScanO200();
virtual void open(int vid = 0x064b, int pid = 0x7823) override;
virtual int open(int vid = 0x3072) override;
virtual bool close() override;
virtual bool is_open() override;
virtual void setusbreport_callback(usbreport_callback callback,void* usrdata) override;
virtual int get_image_front_info(ImageInfo* info) override;//add 2020.03.11
virtual int aquire_image(cv::Mat &mat,int& bppinfo) override;//add 2020.03.11
virtual bool IsConnected() override;
virtual std::string GetFWVersion(int mode) override;
virtual std::string GetSerialNum(int mode) override;
virtual bool is_scan() override;
virtual bool Get_Scanner_PaperOn() override;
virtual void config_params(GScanCap& params,int mode) override;
virtual void Scanner_StartScan(UINT32 count,int mode) override;
virtual void Stop_scan() override;
virtual void ResetScanner() override;
virtual bool Get_IsImageQueueEmpty() override;
virtual void clear_hwerror() override;
virtual void reset() override;
virtual void setdecodepixtype(int twpixtype) override;
virtual UINT32 get_ErrorCode() override;
virtual void Set_ErrorCode(UINT32 value) override;
virtual int get_scanned_num() override;
virtual int get_roller_num() override;
virtual void clr_roller_num() override;
virtual int get_sleep_time() override;
virtual void set_sleep_time(int time) override;
virtual bool clr_hardware_cache() override;
private:
static void on_usbcallback(bool isleft, void* usrdata);
void onusbcallback(bool isleft);
void usbmain();
USBCB Get_Scanner_Status();
std::shared_ptr<std::vector<char>> Get_Img_Data(int buffersize);
void Pop_Image();
std::shared_ptr<IUsb> m_usb;
volatile int mode = 0;
std::unique_ptr<std::thread> m_threadUsb;
usbreport_callback m_usbreport;
void* m_usrdata;
};