code_device/hgdriver/hgdev/scanner_manager.h

124 lines
5.2 KiB
C++
Raw 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 "../../sdk/hginclude/huagaoxxx_warraper_ex.h"
#include "usb_manager.h"
#include <string>
#include <vector>
#include <algorithm>
#include <mutex>
////////////////////////////////////////////////////////////////////////////////////////
// 设备需要支持的特性 (2022-02-24)
//
// 1、每台设备应该有唯一的序列号并可读取用以精确定位连接到计算机上的每一台设备
// 方便多台设备连接到计算机上时,插拔后实现机器状态(配置参数)的自动恢复
//
// 2、设备启动后应该由设备上的驱动进行默认参数的设置以支持按键扫描功能由设备主动发起的扫描
//
// 3、设备的所有配置参数都应该可读以满足用户对设备实时状态的监控
//
// 4、设备要支持“reset”命令以使设备在发生软硬件错误时尽可能通过软件方式重置到正常状态
//
// 5、可以考虑在每一段数据的前面添加数据头信息以表明这段数据的属性状态数据、图片数据……
// 为支持异步IO特性奠定基础
//
// 6、设备的基本通信设备类型……信息访问需要保持健壮不能因为上位机的通信异常导致信息错乱
//
////////////////////////////////////////////////////////////////////////////////////////
//#ifdef OEM_HANWANG
//#define hg_scanner hw_scanner
//#define hg_scanner_mgr hw_scanner_mgr
//#elif defined(OEM_LISICHENG)
//#define hg_scanner lsc_scanner
//#define hg_scanner_mgr lsc_scanner_mgr
//#elif defined(OEM_CANGTIAN)
//#define hg_scanner cts_scanner
//#define hg_scanner_mgr cts_scanner_mgr
//#endif
class hg_scanner;
class hg_scanner_mgr
{
typedef struct _online_scanner
{
libusb_device* dev; // the unique usb device
int ind; // index in supporting scanners queue
hg_scanner* scanner;
std::string display_name;
bool operator==(const libusb_device* d)
{
return d == dev;
}
bool operator==(const int& index)
{
return ind == index;
}
bool operator==(const char* name)
{
return display_name == name;
}
}OLSCANNER;
std::vector<OLSCANNER> online_devices_;
std::mutex mutex_dev_;
unsigned int same_ind_;
static sane_callback event_callback_;
static bool async_io_enabled_;
static std::string pe_path_;
static std::string pe_name_;
static bool read_over_with_eof_;
static int ver_major_;
static int ver_minor_;
static int ver_build_;
static int ver_patch_;
static hg_scanner_mgr* inst_;
static void usb_event_handle(usb_event ev, libusb_device* device, int vid, int pid, int usb_ver_h, int usb_ver_l, bool* retry, void* user); // usb_ver_h.usb_ver_l
void on_hgscanner_pnp(usb_event ev, libusb_device* device, int vid, int pid, int usb_ver_h, int usb_ver_l, bool* retry); // usb_ver_h.usb_ver_l
void get_online_devices(std::vector<OLSCANNER>& devs);
void set_appendix_info_for_about(SANE_About* about, char*& ptr, int& count, const char* key, const char* info, const char* url);
scanner_err get_about_info(scanner_handle h, void* data, unsigned* len);
protected:
hg_scanner_mgr();
~hg_scanner_mgr();
public:
static int ui_default_callback(scanner_handle, int, void*, unsigned int*, void*);
static hg_scanner_mgr* instance(sane_callback cb = NULL);
static void clear(void);
static void set_version(int hh, int hl, int lh, int ll);
static void set_exe_name(const char* path, const char* name);
static std::string get_pe_name(std::string* path = nullptr);
static hg_scanner* create_scanner_empty(const char* name, usb_io* io, scanner_handle* h);
static hg_scanner* create_scanner_g100(const char* name, usb_io* io, scanner_handle* h);
static hg_scanner* create_scanner_g239(const char* name, usb_io* io, scanner_handle* h);
static hg_scanner* create_scanner_g300(const char* name, usb_io* io, scanner_handle* h);
static hg_scanner* create_scanner_g302(const char* name, usb_io* io, scanner_handle* h);
static hg_scanner* create_scanner_g400(const char* name, usb_io* io, scanner_handle* h);
static hg_scanner* create_scanner_g402(const char* name, usb_io* io, scanner_handle* h);
static hg_scanner* create_scanner_g439(const char* name, usb_io* io, scanner_handle* h);
public:
scanner_err hg_scanner_enum(ScannerInfo* scanner_list, long* count, bool local_only);
scanner_err hg_scanner_open(scanner_handle* h, const char* name, bool shared, const char* user, const char* pwd, const char* check, char* rsc);
scanner_err hg_scanner_close(scanner_handle h, bool force);
scanner_err hg_scanner_get_parameter(scanner_handle h, const char* name, char* data, long* len);
scanner_err hg_scanner_set_parameter(scanner_handle h, const char* name, void* data, long len);
scanner_err hg_scanner_start(scanner_handle h, void* async_event, int num);
scanner_err hg_scanner_stop(scanner_handle h);
scanner_err hg_scanner_get_img_info(scanner_handle h, SANE_Parameters* bmi, long len);
scanner_err hg_scanner_read_img_data(scanner_handle h, unsigned char* data, long* len);
scanner_err hg_scanner_get_status(scanner_handle h, int setstutas);
scanner_err hg_scanner_reset(scanner_handle h);
scanner_err hg_scanner_control(scanner_handle h, unsigned long code, void* data, unsigned* len);
};