code_device/hgdriver/hgdev/scanner_manager.h

143 lines
5.7 KiB
C
Raw Normal View History

#pragma once
2022-05-03 03:56:07 +00:00
#include "../../sdk/hginclude/huagaoxxx_warraper_ex.h"
#include "usb_manager.h"
#include <string>
#include <vector>
#include <algorithm>
#include <mutex>
////////////////////////////////////////////////////////////////////////////////////////
// <20><EFBFBD><E8B1B8>Ҫ֧<D2AA>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD> (2022-02-24)
2022-05-03 03:56:07 +00:00
//
// 1<><31>ÿ̨<C3BF>豸Ӧ<E8B1B8><D3A6><EFBFBD><EFBFBD>Ψһ<CEA8><D2BB><EFBFBD><EFBFBD><EFBFBD>кţ<D0BA><C5A3><EFBFBD><EFBFBD>ɶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>Ծ<EFBFBD>ȷ<EFBFBD><C8B7>λ<EFBFBD><CEBB><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>ÿһ̨<D2BB><EFBFBD><E8B1B8>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD><E8B1B8><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>ʵ<EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ָ<EFBFBD>
2022-05-03 03:56:07 +00:00
//
// 2<><32><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD>֧<EFBFBD>ְ<EFBFBD><D6B0><EFBFBD>ɨ<EFBFBD><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD>
2022-05-03 03:56:07 +00:00
//
// 3<><33><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ÿɶ<C3BF><C9B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>豸ʵʱ״̬<D7B4>ļ<EFBFBD><C4BC><EFBFBD>
2022-05-03 03:56:07 +00:00
//
// 4<><34><EFBFBD>豸Ҫ֧<D2AA>֡<EFBFBD>reset<65><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3AC>ʹ<EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>״̬
2022-05-03 03:56:07 +00:00
//
// 5<><35><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF><EFBFBD><EFBFBD><EFBFBD>ÿһ<C3BF><D2BB><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>Ϣ<EFBFBD><CFA2><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>ԣ<EFBFBD>״̬<D7B4><CCAC><EFBFBD>ݡ<EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD>ݡ<EFBFBD><DDA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Ϊ֧<CEAA><D6A7><EFBFBD>첽IO<49><4F><EFBFBD>Ե춨<D4B5><ECB6A8><EFBFBD><EFBFBD>
2022-05-03 03:56:07 +00:00
//
// 6<><36><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD>ͨ<EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><E8B1B8><EFBFBD>͡<EFBFBD><CDA1><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ֽ<EFBFBD>׳<EFBFBD><D7B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
2022-05-03 03:56:07 +00:00
//
////////////////////////////////////////////////////////////////////////////////////////
2022-11-15 06:29:06 +00:00
//#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
2022-05-03 03:56:07 +00:00
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_;
std::string user_;
std::string pwd_;
2022-05-03 03:56:07 +00:00
static sane_callback event_callback_;
static bool async_io_enabled_;
static std::string last_open_msg_;
static std::string pe_path_;
static std::string pe_name_;
static bool read_over_with_eof_;
2022-05-03 03:56:07 +00:00
static int ver_major_;
static int ver_minor_;
static int ver_build_;
static int ver_patch_;
static uint32_t unique_img_id_;
static std::mutex mutex_img_id;
2022-05-03 03:56:07 +00:00
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);
2022-05-03 03:56:07 +00:00
string cf_name;
2023-06-15 03:56:19 +00:00
string url_en;
string url_link_en;
2022-05-03 03:56:07 +00:00
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);
enum
{
UNIQUE_ID_IMG = 0,
};
static uint32_t unique_id(int type = UNIQUE_ID_IMG);
2022-05-03 03:56:07 +00:00
2022-07-13 10:22:31 +00:00
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);
2022-07-13 10:22:31 +00:00
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);
2023-10-21 01:03:26 +00:00
static hg_scanner* create_scanner_g306(const char* name, usb_io* io, scanner_handle* h);
2022-07-13 10:22:31 +00:00
2022-05-03 03:56:07 +00:00
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, SANE_Int* id);
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);
void on_language_changed(void);
const char* last_open_message(void);
2022-05-03 03:56:07 +00:00
};