SANE属性name及fixed-id定义,单独放sane_name.h文件中统一管理

This commit is contained in:
gb 2024-01-31 09:41:22 +08:00
parent 6ee98a3369
commit aae6249d68
12 changed files with 404 additions and 410 deletions

View File

@ -173,29 +173,29 @@ void scanner_hw::init(void)
CLEAN_ARRAY(gain_); CLEAN_ARRAY(gain_);
CLEAN_ARRAY(off_); CLEAN_ARRAY(off_);
opt_handler_[SANE_FULL_NAME(WAIT_TO_SCAN)] = a; opt_handler_[SANE_OPT_NAME(WAIT_TO_SCAN)] = a;
opt_handler_[SANE_FULL_NAME(WAIT_SCAN_EXIT)] = e; opt_handler_[SANE_OPT_NAME(WAIT_SCAN_EXIT)] = e;
opt_handler_[SANE_FULL_NAME(CIS_MODE)] = m; opt_handler_[SANE_OPT_NAME(CIS_MODE)] = m;
opt_handler_[SANE_FULL_NAME(CIS_DPI)] = r; opt_handler_[SANE_OPT_NAME(CIS_DPI)] = r;
opt_handler_[SANE_FULL_NAME(Y_DPI)] = y; opt_handler_[SANE_OPT_NAME(Y_DPI)] = y;
opt_handler_[SANE_FULL_NAME(CIS_BAUD)] = b; opt_handler_[SANE_OPT_NAME(CIS_BAUD)] = b;
opt_handler_[SANE_FULL_NAME(CIS_DELAY)] = d; opt_handler_[SANE_OPT_NAME(CIS_DELAY)] = d;
opt_handler_[SANE_FULL_NAME(CIS_FRAME_H)] = f; opt_handler_[SANE_OPT_NAME(CIS_FRAME_H)] = f;
opt_handler_[SANE_FULL_NAME(CIS_SAMPLE)] = s; opt_handler_[SANE_OPT_NAME(CIS_SAMPLE)] = s;
opt_handler_[SANE_FULL_NAME(CIS_SP)] = sp; opt_handler_[SANE_OPT_NAME(CIS_SP)] = sp;
opt_handler_[SANE_FULL_NAME(PHASE_FRONT)] = pha; opt_handler_[SANE_OPT_NAME(PHASE_FRONT)] = pha;
opt_handler_[SANE_FULL_NAME(PHASE_BACK)] = phb; opt_handler_[SANE_OPT_NAME(PHASE_BACK)] = phb;
opt_handler_[SANE_FULL_NAME(CIS_LED)] = led; opt_handler_[SANE_OPT_NAME(CIS_LED)] = led;
opt_handler_[SANE_FULL_NAME(CIS_STRETCH_H)] = stretch_h; opt_handler_[SANE_OPT_NAME(CIS_STRETCH_H)] = stretch_h;
opt_handler_[SANE_FULL_NAME(CIS_STRETCH_V)] = stretch_v; opt_handler_[SANE_OPT_NAME(CIS_STRETCH_V)] = stretch_v;
opt_handler_[SANE_FULL_NAME(CIS_EXPO_FB)] = efb; opt_handler_[SANE_OPT_NAME(CIS_EXPO_FB)] = efb;
opt_handler_[SANE_FULL_NAME(CIS_EXPO_FG)] = efg; opt_handler_[SANE_OPT_NAME(CIS_EXPO_FG)] = efg;
opt_handler_[SANE_FULL_NAME(CIS_EXPO_FR)] = efr; opt_handler_[SANE_OPT_NAME(CIS_EXPO_FR)] = efr;
opt_handler_[SANE_FULL_NAME(CIS_EXPO_BB)] = ebb; opt_handler_[SANE_OPT_NAME(CIS_EXPO_BB)] = ebb;
opt_handler_[SANE_FULL_NAME(CIS_EXPO_BG)] = ebg; opt_handler_[SANE_OPT_NAME(CIS_EXPO_BG)] = ebg;
opt_handler_[SANE_FULL_NAME(CIS_EXPO_BR)] = ebr; opt_handler_[SANE_OPT_NAME(CIS_EXPO_BR)] = ebr;
auto p = [this](void* value) -> void auto p = [this](void* value) -> void
@ -207,8 +207,8 @@ void scanner_hw::init(void)
lateral_ = *(bool*)value; lateral_ = *(bool*)value;
}; };
opt_handler_[SANE_FULL_NAME(PAPER)] = p; opt_handler_[SANE_OPT_NAME(PAPER)] = p;
opt_handler_[SANE_FULL_NAME(LATERAL)] = l; opt_handler_[SANE_OPT_NAME(LATERAL)] = l;
auto staple = [this](void* value) -> void auto staple = [this](void* value) -> void
{ {
@ -283,18 +283,18 @@ void scanner_hw::init(void)
}; };
opt_handler_[SANE_FULL_NAME(IS_CHECK_STAPLE)] = staple; opt_handler_[SANE_OPT_NAME(IS_CHECK_STAPLE)] = staple;
opt_handler_[SANE_FULL_NAME(IS_CHECK_ASKEW)] = screw; opt_handler_[SANE_OPT_NAME(IS_CHECK_ASKEW)] = screw;
opt_handler_[SANE_FULL_NAME(ASKEW_RANGE)] = screwl; opt_handler_[SANE_OPT_NAME(ASKEW_RANGE)] = screwl;
opt_handler_[SANE_FULL_NAME(DOUBLE_CHECK)] = dbchk; opt_handler_[SANE_OPT_NAME(DOUBLE_CHECK)] = dbchk;
opt_handler_[SANE_FULL_NAME(MOTOR_SPEED)] = motsp; opt_handler_[SANE_OPT_NAME(MOTOR_SPEED)] = motsp;
opt_handler_[SANE_FULL_NAME(DEVICE_MODEL)] = fm; opt_handler_[SANE_OPT_NAME(DEVICE_MODEL)] = fm;
opt_handler_[SANE_FULL_NAME(SCAN_MODE)] = cntm; opt_handler_[SANE_OPT_NAME(SCAN_MODE)] = cntm;
opt_handler_[SANE_FULL_NAME(SCAN_COUNT)] = cnt; opt_handler_[SANE_OPT_NAME(SCAN_COUNT)] = cnt;
opt_handler_[SANE_FULL_NAME(IS_AUTO_FEED_STRENGTH)] = afs; opt_handler_[SANE_OPT_NAME(IS_AUTO_FEED_STRENGTH)] = afs;
opt_handler_[SANE_FULL_NAME(FEED_STRENGTH_VALUE)] = ff; opt_handler_[SANE_OPT_NAME(FEED_STRENGTH_VALUE)] = ff;
opt_handler_[SANE_FULL_NAME(FEED_STRENGTH)] = fs; opt_handler_[SANE_OPT_NAME(FEED_STRENGTH)] = fs;
opt_handler_[SANE_FULL_NAME(TIME_TO_SLEEP)] = slp; opt_handler_[SANE_OPT_NAME(TIME_TO_SLEEP)] = slp;
} }
void scanner_hw::init_version(std::string& text) void scanner_hw::init_version(std::string& text)
{ {
@ -303,7 +303,7 @@ void scanner_hw::init_version(std::string& text)
if(jsn->attach_text(&text[0])) if(jsn->attach_text(&text[0]))
{ {
gb_json *child = nullptr; gb_json *child = nullptr;
jsn->get_value(SANE_FULL_NAME(MOTOR_VER), child); jsn->get_value(SANE_OPT_NAME(MOTOR_VER), child);
if(child) if(child)
{ {
unsigned int val = 0; unsigned int val = 0;
@ -320,7 +320,7 @@ void scanner_hw::init_version(std::string& text)
child->release(); child->release();
} }
jsn->get_value(SANE_FULL_NAME(FPGA_VER), child); jsn->get_value(SANE_OPT_NAME(FPGA_VER), child);
if(child) if(child)
{ {
unsigned int val = 0; unsigned int val = 0;
@ -336,7 +336,7 @@ void scanner_hw::init_version(std::string& text)
child->release(); child->release();
} }
jsn->get_value(SANE_FULL_NAME(CIS_LENGTH), child); jsn->get_value(SANE_OPT_NAME(CIS_LENGTH), child);
if(child) if(child)
{ {
child->get_value("default", cis_length_); child->get_value("default", cis_length_);
@ -542,7 +542,7 @@ char* scanner_hw::get_value(const char* name, void* value, size_t* size, int* er
if(err) if(err)
*err = SCANNER_ERR_OK; *err = SCANNER_ERR_OK;
if(strcmp(name, SANE_FULL_NAME(PAPER_ON)) == 0) if(strcmp(name, SANE_OPT_NAME(PAPER_ON)) == 0)
{ {
ret = (char*)malloc(sizeof(int)); ret = (char*)malloc(sizeof(int));
*(int*)ret = 0; *(int*)ret = 0;
@ -550,7 +550,7 @@ char* scanner_hw::get_value(const char* name, void* value, size_t* size, int* er
if(size) if(size)
*size = sizeof(bool); *size = sizeof(bool);
} }
else if(strcmp(name, SANE_FULL_NAME(PAPER_W)) == 0) else if(strcmp(name, SANE_OPT_NAME(PAPER_W)) == 0)
{ {
SIZE sz = paper::size(paper_.c_str()); SIZE sz = paper::size(paper_.c_str());
double mm = lateral_ && lateral_en_ ? sz.cy : sz.cx; double mm = lateral_ && lateral_en_ ? sz.cy : sz.cx;
@ -560,7 +560,7 @@ char* scanner_hw::get_value(const char* name, void* value, size_t* size, int* er
if(size) if(size)
*size = sizeof(double); *size = sizeof(double);
} }
else if(strcmp(name, SANE_FULL_NAME(PAPER_H)) == 0) else if(strcmp(name, SANE_OPT_NAME(PAPER_H)) == 0)
{ {
SIZE sz = paper::size(paper_.c_str()); SIZE sz = paper::size(paper_.c_str());
double mm = lateral_ && lateral_en_ ? sz.cx : sz.cy; double mm = lateral_ && lateral_en_ ? sz.cx : sz.cy;
@ -570,14 +570,14 @@ char* scanner_hw::get_value(const char* name, void* value, size_t* size, int* er
if(size) if(size)
*size = sizeof(double); *size = sizeof(double);
} }
else if(strcmp(name, SANE_FULL_NAME(CIS_MODE)) == 0) else if(strcmp(name, SANE_OPT_NAME(CIS_MODE)) == 0)
{ {
ret = (char*)malloc(mode_.length() + 1); ret = (char*)malloc(mode_.length() + 1);
strcpy(ret, mode_.c_str()); strcpy(ret, mode_.c_str());
if(size) if(size)
*size = mode_.length(); *size = mode_.length();
} }
else if(strcmp(name, SANE_FULL_NAME(CIS_DPI)) == 0) else if(strcmp(name, SANE_OPT_NAME(CIS_DPI)) == 0)
{ {
ret = (char*)malloc(sizeof(int)); ret = (char*)malloc(sizeof(int));
*(int*)ret = dpi_; *(int*)ret = dpi_;
@ -600,24 +600,24 @@ int scanner_hw::set_value(const char* name, void* val)
{ {
opt_handler_[name](val); opt_handler_[name](val);
} }
else if(strstr(name, SANE_FULL_NAME(CIS_GAIN_FRONT)) == name) else if(strstr(name, SANE_OPT_NAME(CIS_GAIN_FRONT)) == name)
{ {
name += strlen(SANE_FULL_NAME(CIS_GAIN_FRONT)) + 1; name += strlen(SANE_OPT_NAME(CIS_GAIN_FRONT)) + 1;
set_gain_value(true, true, atoi(name), *(int*)val); set_gain_value(true, true, atoi(name), *(int*)val);
} }
else if(strstr(name, SANE_FULL_NAME(CIS_GAIN_BACK)) == name) else if(strstr(name, SANE_OPT_NAME(CIS_GAIN_BACK)) == name)
{ {
name += strlen(SANE_FULL_NAME(CIS_GAIN_BACK)) + 1; name += strlen(SANE_OPT_NAME(CIS_GAIN_BACK)) + 1;
set_gain_value(false, true, atoi(name), *(int*)val); set_gain_value(false, true, atoi(name), *(int*)val);
} }
else if(strstr(name, SANE_FULL_NAME(CIS_OFFSET_FRONT)) == name) else if(strstr(name, SANE_OPT_NAME(CIS_OFFSET_FRONT)) == name)
{ {
name += strlen(SANE_FULL_NAME(CIS_OFFSET_FRONT)) + 1; name += strlen(SANE_OPT_NAME(CIS_OFFSET_FRONT)) + 1;
set_gain_value(true, false, atoi(name), *(int*)val); set_gain_value(true, false, atoi(name), *(int*)val);
} }
else if(strstr(name, SANE_FULL_NAME(CIS_OFFSET_BACK)) == name) else if(strstr(name, SANE_OPT_NAME(CIS_OFFSET_BACK)) == name)
{ {
name += strlen(SANE_FULL_NAME(CIS_OFFSET_BACK)) + 1; name += strlen(SANE_OPT_NAME(CIS_OFFSET_BACK)) + 1;
set_gain_value(false, false, atoi(name), *(int*)val); set_gain_value(false, false, atoi(name), *(int*)val);
} }
else else
@ -629,7 +629,7 @@ int scanner_hw::set_value(const char* name, void* val)
} }
void scanner_hw::enable(const char* name, bool able) void scanner_hw::enable(const char* name, bool able)
{ {
if(strcmp(name, SANE_FULL_NAME(LATERAL)) == 0) if(strcmp(name, SANE_OPT_NAME(LATERAL)) == 0)
lateral_en_ = able; lateral_en_ = able;
} }

View File

@ -110,14 +110,14 @@ void auto_crop::init(void)
lateral_ = *(bool*)val; lateral_ = *(bool*)val;
}; };
opt_handler_[SANE_FULL_NAME(ANTI_SKEW)] = deskew; opt_handler_[SANE_OPT_NAME(ANTI_SKEW)] = deskew;
opt_handler_[SANE_FULL_NAME(ERASE_BLACK_FRAME)] = bg; opt_handler_[SANE_OPT_NAME(ERASE_BLACK_FRAME)] = bg;
opt_handler_[SANE_FULL_NAME(FILL_BKG_MODE)] = bgm; opt_handler_[SANE_OPT_NAME(FILL_BKG_MODE)] = bgm;
opt_handler_[SANE_FULL_NAME(THRESHOLD)] = thr; opt_handler_[SANE_OPT_NAME(THRESHOLD)] = thr;
opt_handler_[SANE_FULL_NAME(ANTI_NOISE_LEVEL)] = noise; opt_handler_[SANE_OPT_NAME(ANTI_NOISE_LEVEL)] = noise;
opt_handler_[SANE_FULL_NAME(MARGIN)] = margin; opt_handler_[SANE_OPT_NAME(MARGIN)] = margin;
opt_handler_[SANE_FULL_NAME(PAPER)] = paper; opt_handler_[SANE_OPT_NAME(PAPER)] = paper;
opt_handler_[SANE_FULL_NAME(LATERAL)] = lat; opt_handler_[SANE_OPT_NAME(LATERAL)] = lat;
} }
int auto_crop::work(PROCIMGINFO& in, PROCIMGINFO& out) int auto_crop::work(PROCIMGINFO& in, PROCIMGINFO& out)
{ {

View File

@ -34,9 +34,9 @@ int color_correct::set_value(const char* name/*nullptr for all options*/, void*
{ {
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
if(strcmp(name, SANE_FULL_NAME(COLOR_CORRECT)) == 0) if(strcmp(name, SANE_OPT_NAME(COLOR_CORRECT)) == 0)
enabled_ = correct_ = *(bool*)val; enabled_ = correct_ = *(bool*)val;
else if(strcmp(name, SANE_FULL_NAME(LUT_FILE)) == 0) else if(strcmp(name, SANE_OPT_NAME(LUT_FILE)) == 0)
{ {
if(lut_path_ != (char*)val) if(lut_path_ != (char*)val)
{ {
@ -44,7 +44,7 @@ int color_correct::set_value(const char* name/*nullptr for all options*/, void*
hg::initLut(lut_path_.c_str(), clr_); hg::initLut(lut_path_.c_str(), clr_);
} }
} }
else if(strcmp(name, SANE_FULL_NAME(CIS_MODE)) == 0) else if(strcmp(name, SANE_OPT_NAME(CIS_MODE)) == 0)
{ {
bool pre = clr_; bool pre = clr_;

View File

@ -22,7 +22,7 @@ int rebuild::set_value(const char* name/*nullptr for all options*/, void* val/*n
{ {
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
if(strcmp(name, SANE_FULL_NAME(CIS_REBUILD)) == 0) if(strcmp(name, SANE_OPT_NAME(CIS_REBUILD)) == 0)
rebuild_ = *(bool*)val; rebuild_ = *(bool*)val;
else else
ret = SCANNER_ERR_DEVICE_NOT_SUPPORT; ret = SCANNER_ERR_DEVICE_NOT_SUPPORT;

View File

@ -28,7 +28,7 @@ int stretch::set_value(const char* name/*nullptr for all options*/, void* val/*n
{ {
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
if(strcmp(name, SANE_FULL_NAME(RESOLUTION)) == 0) if(strcmp(name, SANE_OPT_NAME(RESOLUTION)) == 0)
dpi_ = *(int*)val; dpi_ = *(int*)val;
else else
ret = SCANNER_ERR_DEVICE_NOT_SUPPORT; ret = SCANNER_ERR_DEVICE_NOT_SUPPORT;

View File

@ -237,11 +237,11 @@ int imgproc_mgr::set_value(const char* name, void* val)
{ {
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
if(strcmp(name, SANE_FULL_NAME(DUMP_IMG)) == 0) if(strcmp(name, SANE_OPT_NAME(DUMP_IMG)) == 0)
dump_img_ = *(bool*)val; dump_img_ = *(bool*)val;
else if(strcmp(name, SANE_FULL_NAME(CIS_REBUILD)) == 0) else if(strcmp(name, SANE_OPT_NAME(CIS_REBUILD)) == 0)
do_rebuild_ = *(bool*)val; do_rebuild_ = *(bool*)val;
else if(strcmp(name, SANE_FULL_NAME(CIS_STRETCH)) == 0) else if(strcmp(name, SANE_OPT_NAME(CIS_STRETCH)) == 0)
{ {
if(*(bool*)val) if(*(bool*)val)
{ {

View File

@ -168,7 +168,7 @@ async_scanner::async_scanner() : usb_(nullptr), cfg_mgr_(nullptr), scan_id_(0)
user_ = new user_priv(); user_ = new user_priv();
cfg_mgr_->add(const_opts_); cfg_mgr_->add(const_opts_);
cis_->set_value(SANE_FULL_NAME(DEVICE_MODEL), &cfg_mgr_->get_option_value(SANE_FULL_NAME(DEVICE_MODEL), SANE_ACTION_GET_VALUE)[0]); cis_->set_value(SANE_OPT_NAME(DEVICE_MODEL), &cfg_mgr_->get_option_value(SANE_OPT_NAME(DEVICE_MODEL), SANE_ACTION_GET_VALUE)[0]);
cfg_mgr_->add(cis_); cfg_mgr_->add(cis_);
cfg_mgr_->add(user_); cfg_mgr_->add(user_);
img_prcr_ = new imgproc_mgr(sender, cfg_mgr_); img_prcr_ = new imgproc_mgr(sender, cfg_mgr_);

View File

@ -6,6 +6,8 @@
#define OS_WIN 0 #define OS_WIN 0
#endif #endif
#include <math.h> // for fabs
#define SIZE_KB(n) ((n) * 1024) #define SIZE_KB(n) ((n) * 1024)
#define SIZE_MB(n) SIZE_KB((n) * 1024) #define SIZE_MB(n) SIZE_KB((n) * 1024)
#define SIZE_GB(n) SIZE_MB((n) * 1024) #define SIZE_GB(n) SIZE_MB((n) * 1024)
@ -15,6 +17,7 @@
#define SEC_2_US(s) MSEC_2_US(SEC_2_MS(s)) #define SEC_2_US(s) MSEC_2_US(SEC_2_MS(s))
#define MM_PER_INCH 25.4f #define MM_PER_INCH 25.4f
#define IS_DOUBLE_EQUAL(a, b) fabs((a) - (b)) < .000001
#define ALIGN_TO(v, align) (((v) + (align) - 1) / (align) * (align)) #define ALIGN_TO(v, align) (((v) + (align) - 1) / (align) * (align))
#define ALIGN_INT(v) ALIGN_TO(v, sizeof(int)) #define ALIGN_INT(v) ALIGN_TO(v, sizeof(int))

View File

@ -18,18 +18,8 @@
#define sane_ex_h #define sane_ex_h
#define SIZE_KB(n) ((n) * 1024)
#define SIZE_MB(n) SIZE_KB(n * 1024)
#define SIZE_GB(n) SIZE_MB(n * 1024)
#define SEC_2_MS(s) ((s) * 1000)
#define MSEC_2_US(ms) ((ms) * 1000)
#define SEC_2_US(s) MSEC_2_US(SEC_2_MS(s))
#define ALIGN_TO(v, align) (((v) + (align) - 1) / (align) * (align))
#define ALIGN_INT(v) ALIGN_TO(v, sizeof(int))
#include <base/plat_types.h> #include <base/plat_types.h>
#include "sane_name.h"
#ifndef EXPORT_SANE_API #ifndef EXPORT_SANE_API
#ifdef OEM_HANWANG #ifdef OEM_HANWANG
@ -73,17 +63,6 @@
#endif #endif
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define SANE_OPT_NAME(name) SANE_STD_OPT_NAME_##name
#define SANE_OPT_FIXED_ID(id) SANE_OPT_ID_##id
#define IS_SANE_OPT(v, sd) strcmp(v, SANE_OPT_NAME(sd)) == 0
#define MAX_OPT_NAME_LEN 64
#define JSON_SANE_TYPE_BOOL "bool"
#define JSON_SANE_TYPE_INT "int"
#define JSON_SANE_TYPE_FIXED "float"
#define JSON_SANE_TYPE_STRING "string"
#define JSON_SANE_TYPE_GROUP "group"
#define JSON_SANE_TYPE_BUTTON "button"
// 用户权限 // 用户权限
enum enum
{ {
@ -102,309 +81,11 @@ enum opt_visible_level // "visible" field
OPT_VISIBLE_NOT_SUPPORT, // device does not support this option OPT_VISIBLE_NOT_SUPPORT, // device does not support this option
}; };
// sane-standard-option-name defined by third-app
#define SANE_FULL_NAME(n) SANE_STD_OPT_NAME_##n
//
// PART I: 参数类型与华高一致可直接通过改name字段为标准值实现
#define SANE_STD_OPT_NAME_RESTORE "restore" // OPTION_TITLE_HFMRSZ
#define SANE_STD_OPT_NAME_HELP "help" // OPTION_TITLE_BZ
#define SANE_STD_OPT_NAME_IS_MULTI_OUT "is-multiout" // OPTION_TITLE_DLSC
#define SANE_STD_OPT_NAME_MULTI_OUT_TYPE "multiout-type" // OPTION_TITLE_DLSCLX
#define SANE_STD_OPT_NAME_COLOR_MODE "mode" // OPTION_TITLE_YSMS
#define SANE_STD_OPT_NAME_BINARY_THRESHOLD "binary-threshold" // OPTION_TITLE_HBTXYZ
#define SANE_STD_OPT_NAME_REVERSE_01 "reverse-bw" // OPTION_TITLE_HBTXFSSC
#define SANE_STD_OPT_NAME_FILTER "filter" // OPTION_TITLE_HDHHBTX_CSYZQ
#define SANE_STD_OPT_NAME_RID_MULTIOUT_RED "is-rid-multiout-red" // OPTION_TITLE_24WCSTX_DLSCCH
#define SANE_STD_OPT_NAME_RID_ANSWER_SHEET_RED "is-rid-answer-sheet-red" // OPTION_TITLE_24WCSTX_DTKCH
#define SANE_STD_OPT_NAME_ERASE_BACKGROUND "is-erase-bkg" // OPTION_TITLE_BJYC
#define SANE_STD_OPT_NAME_BKG_COLOR_RANGE "bkg-color-range" // OPTION_TITLE_BJSCFDFW
#define SANE_STD_OPT_NAME_SHARPEN "sharpen" // OPTION_TITLE_RHYMH
#define SANE_STD_OPT_NAME_RID_MORR "is-rid-morr" // OPTION_TITLE_QCMW
#define SANE_STD_OPT_NAME_RID_GRID "is-rid-grid" // OPTION_TITLE_CWW
#define SANE_STD_OPT_NAME_ERROR_EXTENSION "is-err-extension" // OPTION_TITLE_CWKS
#define SANE_STD_OPT_NAME_NOISE_OPTIMIZE "is-noise-optimize" // OPTION_TITLE_HBTXZDYH
#define SANE_STD_OPT_NAME_NOISE_SIZE "noise-size" // OPTION_TITLE_ZDYHCC
#define SANE_STD_OPT_NAME_PAPER "paper" // OPTION_TITLE_ZZCC
#define SANE_STD_OPT_NAME_PAPER_W "paper-w" // 纸张宽度
#define SANE_STD_OPT_NAME_PAPER_H "paper-h" // 纸张高度
#define SANE_STD_OPT_NAME_LATERAL "lateral" // 纸张横向标志
#define SANE_STD_OPT_NAME_CUSTOM_AREA "is-custom-area" // OPTION_TITLE_ZDYSMQY
#define SANE_STD_OPT_NAME_CUSTOM_AREA_LEFT "tl-x" // OPTION_TITLE_SMQYZCmm
#define SANE_STD_OPT_NAME_CUSTOM_AREA_RIGHT "br-x" // OPTION_TITLE_SMQYYCmm
#define SANE_STD_OPT_NAME_CUSTOM_AREA_TOP "tl-y" // OPTION_TITLE_SMQYSCmm
#define SANE_STD_OPT_NAME_CUSTOM_AREA_BOTTOM "br-y" // OPTION_TITLE_SMQYXCmm
#define SANE_STD_OPT_NAME_SIZE_CHECK "is-size-check" // OPTION_TITLE_CCJC
#define SANE_STD_OPT_NAME_PAGE "page" // OPTION_TITLE_SMYM
#define SANE_STD_OPT_NAME_DISCARD_BLANK_SENS "blank-sensitivity" // OPTION_TITLE_TGKBYLMD
#define SANE_STD_OPT_NAME_RESOLUTION "resolution" // OPTION_TITLE_FBL
#define SANE_STD_OPT_NAME_TIME_TO_SLEEP "time-to-sleep" // OPTION_TITLE_XMSJ
#define SANE_STD_OPT_NAME_IMAGE_QUALITY "image-quality" // OPTION_TITLE_HZ
#define SANE_STD_OPT_NAME_EXCHANGE "is-exchange" // OPTION_TITLE_JHZFM
#define SANE_STD_OPT_NAME_SPLIT "is-split" // OPTION_TITLE_TXCF
#define SANE_STD_OPT_NAME_ANTI_SKEW "is-anti-skew" // OPTION_TITLE_ZDJP
#define SANE_STD_OPT_NAME_IS_CUSTOM_GAMMA "is-custom-gamma" // OPTION_TITLE_QYSDQX
#define SANE_STD_OPT_NAME_GAMMA "gamma" // OPTION_TITLE_JMZ
#define SANE_STD_OPT_NAME_CUSTOM_GAMMA "custom-gamma" // OPTION_TITLE_CUSTOM_JMZ; data - SANE_Gamma*
#define SANE_STD_OPT_NAME_GRAY_GAMMA "gray-gamma-table"
#define SANE_STD_OPT_NAME_COLOR_GAMMA "color-gamma-table"
#define SANE_STD_OPT_NAME_RED_GAMMA "red-gamma-table"
#define SANE_STD_OPT_NAME_GREEN_GAMMA "green-gamma-table"
#define SANE_STD_OPT_NAME_BLUE_GAMMA "blue-gamma-table"
#define SANE_STD_OPT_NAME_BRIGHTNESS "brightness" // OPTION_TITLE_LDZ
#define SANE_STD_OPT_NAME_CONTRAST "contrast" // OPTION_TITLE_DBD
#define SANE_STD_OPT_NAME_IS_PHOTO_MODE "is-photo-mode" // OPTION_TITLE_ZPMS
#define SANE_STD_OPT_NAME_ERASE_BLACK_FRAME "is-erase-black-frame" // OPTION_TITLE_XCHK
#define SANE_STD_OPT_NAME_DARK_SAMPLE "is-dark-sample" // OPTION_TITLE_SSYZ
#define SANE_STD_OPT_NAME_THRESHOLD "threshold" // OPTION_TITLE_YZ
#define SANE_STD_OPT_NAME_ANTI_NOISE_LEVEL "anti-noise-level" // OPTION_TITLE_BJKZDJ
#define SANE_STD_OPT_NAME_MARGIN "margin" // OPTION_TITLE_BYSJ
#define SANE_STD_OPT_NAME_FILL_BKG_MODE "bkg-fill-mode" // OPTION_TITLE_BJTCFS
#define SANE_STD_OPT_NAME_IS_ANTI_PERMEATE "is-anti-permeate" // OPTION_TITLE_FZST
#define SANE_STD_OPT_NAME_ANTI_PERMEATE_LEVEL "permeate-level" // OPTION_TITLE_FZSTDJ
#define SANE_STD_OPT_NAME_RID_HOLE "is-rid-hole" // OPTION_TITLE_CKYC
#define SANE_STD_OPT_NAME_HOLE_THRESHOLD "hole-threshold" //
#define SANE_STD_OPT_NAME_SEARCH_HOLE_RANGE "search-hole-range" // OPTION_TITLE_CKSSFWZFMBL
#define SANE_STD_OPT_NAME_RID_HOLE_L "is-rid-hole-l" // OPTION_TITLE_CKYCZC
#define SANE_STD_OPT_NAME_SEARCH_HOLE_RANGE_L "search-hole-range-l" // OPTION_TITLE_ZCCKSSFWZFMBL
#define SANE_STD_OPT_NAME_RID_HOLE_R "is-rid-hole-r" // OPTION_TITLE_CKYCYC
#define SANE_STD_OPT_NAME_SEARCH_HOLE_RANGE_R "search-hole-range-r" // OPTION_TITLE_YCCKSSFWZFMBL
#define SANE_STD_OPT_NAME_RID_HOLE_T "is-rid-hole-t" // OPTION_TITLE_CKYCSC
#define SANE_STD_OPT_NAME_SEARCH_HOLE_RANGE_T "search-hole-range-t" // OPTION_TITLE_SCCKSSFWZFMBL
#define SANE_STD_OPT_NAME_RID_HOLE_B "is-rid-hole-b" // OPTION_TITLE_CKYCXC
#define SANE_STD_OPT_NAME_SEARCH_HOLE_RANGE_B "search-hole-range-b" // OPTION_TITLE_XCCKSSFWZFMBL
#define SANE_STD_OPT_NAME_IS_FILL_COLOR "is-fill-color" // OPTION_TITLE_SCTC
#define SANE_STD_OPT_NAME_IS_ULTROSONIC_CHECK "is-ultrosonic" // OPTION_TITLE_CSBJC
#define SANE_STD_OPT_NAME_DOUBLE_CHECK "double-chk"
#define SANE_STD_OPT_NAME_DOUBLE_FEED_HANDLE "double-feed" // OPTION_TITLE_SZTPCL
#define SANE_STD_OPT_NAME_IS_CHECK_STAPLE "is-staple" // OPTION_TITLE_ZDJC
#define SANE_STD_OPT_NAME_SCAN_MODE "scan-mode" // OPTION_TITLE_SMZS
#define SANE_STD_OPT_NAME_SCAN_COUNT "scan-count" // OPTION_TITLE_SMSL
#define SANE_STD_OPT_NAME_TEXT_DIRECTION "direction" // OPTION_TITLE_WGFX
#define SANE_STD_OPT_NAME_IS_ROTATE_BKG_180 "is-rotate-bkg-180" // OPTION_TITLE_BMXZ180
#define SANE_STD_OPT_NAME_IS_CHECK_DOG_EAR "is-check-dog-ear" // OPTION_TITLE_ZJJC
#define SANE_STD_OPT_NAME_DOG_EAR_SIZE "dog-ear-size" // OPTION_TITLE_ZJDX
#define SANE_STD_OPT_NAME_IS_CHECK_ASKEW "is-check-askew" // OPTION_TITLE_WXJC
#define SANE_STD_OPT_NAME_ASKEW_RANGE "askew-range" // OPTION_TITLE_WXRRD
#define SANE_STD_OPT_NAME_FEED_STRENGTH "feed-strength" // OPTION_TITLE_FZQD
#define SANE_STD_OPT_NAME_IS_AUTO_FEED_STRENGTH "is-auto-strength" // OPTION_TITLE_ZDFZQD
#define SANE_STD_OPT_NAME_FEED_STRENGTH_VALUE "feed-strength-value" // OPTION_TITLE_JZSBL
#define SANE_STD_OPT_NAME_WAIT_TO_SCAN "is-wait-scan" // OPTION_TITLE_DZSM
#define SANE_STD_OPT_NAME_FOLD_TYPE "fold-type" // OPTION_TITLE_DZMS
#define SANE_STD_OPT_NAME_COLOR_CORRECTION "color-correction" // OPTION_TITLE_SPJZ
#define SANE_STD_OPT_NAME_WAIT_SCAN_EXIT "wait-scan-exit" // OPTION_TITLE_DZSMTCSJ
#define SANE_STD_OPT_NAME_DISCARDBLANK "discardblank" // OPTION_TITLE_TGKBY
#define SANE_STD_OPT_NAME_DEVICE_NAME "dev-name" // 设备名称
#define SANE_STD_OPT_NAME_DEVICE_VID "dev-vid" // 设备VID
#define SANE_STD_OPT_NAME_DEVICE_PID "dev-pid" // 设备PID
#define SANE_STD_OPT_NAME_DEVICE_MODEL "dev-model" // 设备系列
#define SANE_STD_OPT_NAME_DEV_NAME SANE_STD_OPT_NAME_DEVICE_NAME
#define SANE_STD_OPT_NAME_VID SANE_STD_OPT_NAME_DEVICE_VID
#define SANE_STD_OPT_NAME_PID SANE_STD_OPT_NAME_DEVICE_PID
#define SANE_STD_OPT_NAME_DEV_FAMILY SANE_STD_OPT_NAME_DEVICE_MODEL
#define SANE_STD_OPT_NAME_DEVICE_TYPE "dev-type" // 设备型号
#define SANE_STD_OPT_NAME_DEVICE_SERIAL_NO "dev-sn" // 设备序列号
#define SANE_STD_OPT_NAME_FIRMWARE_VERSION "fmw-ver" // 固件版本
#define SANE_STD_OPT_NAME_DEVICE_IP_ADDR "ip-addr" // 设备IP地址
#define SANE_STD_OPT_NAME_DEVICE_MAC_ADDR "mac-addr" // 设备MAC地址
#define SANE_STD_OPT_NAME_ROLLER_COUNT "roll-cnt" // 滚轴张数
#define SANE_STD_OPT_NAME_TOTAL_COUNT "total-cnt" // 历史总张数
#define SANE_STD_OPT_NAME_HISTORY_COUNT SANE_STD_OPT_NAME_TOTAL_COUNT
#define SANE_STD_OPT_NAME_GET_DEVS_L0G "devs-log" // 获取设备日志
#define SANE_STD_OPT_NAME_DRIVER_VERSION "drv-ver" // 设备VID
#define SANE_STD_OPT_NAME_MANUFACTURER "company" // 公司名称
#define SANE_STD_OPT_NAME_COPYRIGHT "copyright" // 版权
#define SANE_STD_OPT_NAME_CO_URL "co-url" // 公司网址
#define SANE_STD_OPT_NAME_CO_TEL "co-tel" // 公司电话
#define SANE_STD_OPT_NAME_CO_ADDR "co-addr" // 公司地址
#define SANE_STD_OPT_NAME_CO_GPS "co-gps" // 公司地图定位
#define SANE_STD_OPT_NAME_USER_NAME "user-name" // 登录账号
#define SANE_STD_OPT_NAME_USER_PASSWORD "user-pwd" // 登录密码
#define SANE_STD_OPT_NAME_LOGIN "login" // 登录
#define SANE_STD_OPT_NAME_LOGOUT "logout" // 登出
#define SANE_STD_OPT_NAME_DRIVER_LOG "drv-log" // 驱动日志
#define SANE_STD_OPT_NAME_DEVICE_LOG SANE_STD_OPT_NAME_GET_DEVS_L0G
#define SANE_STD_OPT_NAME_ROLLER_LIFE "roller-life" // 滚轴最大寿命(过纸张数)
#define SANE_STD_OPT_NAME_LANGUAGE "language" // 语言
#define SANE_STD_OPT_NAME_MOTOR_VER "motor-ver" // 电机固件版本, data = char*
#define SANE_STD_OPT_NAME_FPGA_VER "fpga-ver" // CIS控制器FPGA版本, data = char*
#define SANE_STD_OPT_NAME_TRANSFORM_IMAGE_FORMAT "trans-img-fmt" // 图像格式转换, data - SANE_ImageFormatConvert*, dst.data 调用SANE_STD_OPT_NAME_FREE_BUFFER释放
#define SANE_STD_OPT_NAME_FREE_BUFFER "free-buf" // 释放由驱动返回的内存, data - (void**)&buf
#define SANE_STD_OPT_NAME_PAPER_ON "paper-on" // check whether paper is on
#define SANE_STD_OPT_NAME_INITIAL_BOOT_TIME "initial-boot-time" // 设备的初始开机时间
#define SANE_STD_OPT_NAME_DUMP_IMG "dump-img" // 是否输出算法各阶段中间图像
#define SANE_STD_OPT_NAME_DUMP_IMG_PATH "dump-path" // 中间图像输出路径
#define SANE_STD_OPT_NAME_CIS_LENGTH "cis-len" // CIS 长度(采集图像的最大宽度)
#define SANE_STD_OPT_NAME_CIS_REBUILD "rebuild" // 复原从CIS出来的数据流为原始图像
// PART II: 参数类型与华高不一致需要通过“hgsane”组件在中间转换
#define SANE_STD_OPT_NAME_PAGE_W "page-width" // OPTION_TITLE_ZZCC
#define SANE_STD_OPT_NAME_PAGE_H "page-height" // OPTION_TITLE_ZZCC
#define SANE_STD_OPT_NAME_DUPLEX "duplex" // OPTION_TITLE_SMYM
// END for sane-standard-option-name defined by third-app
//
// PART III: inner option on device
#define SANE_STD_OPT_NAME_CIS_MODE "cis-mode"
#define SANE_STD_OPT_NAME_CIS_DPI "cis-dpi"
#define SANE_STD_OPT_NAME_Y_DPI "y-dpi"
#define SANE_STD_OPT_NAME_CIS_BAUD "baud"
#define SANE_STD_OPT_NAME_CIS_DELAY "act-after"
#define SANE_STD_OPT_NAME_CIS_FRAME_H "frame-h"
#define SANE_STD_OPT_NAME_CIS_SAMPLE "sample"
#define SANE_STD_OPT_NAME_CIS_SP "cis-sp"
#define SANE_STD_OPT_NAME_CIS_LED "cis-led"
#define SANE_STD_OPT_NAME_CIS_REBUILD "cis-rebuild"
#define SANE_STD_OPT_NAME_CIS_STRETCH "stretch"
#define SANE_STD_OPT_NAME_CIS_EXPO_FB "expo-fb"
#define SANE_STD_OPT_NAME_CIS_EXPO_FG "expo-fg"
#define SANE_STD_OPT_NAME_CIS_EXPO_FR "expo-fr"
#define SANE_STD_OPT_NAME_CIS_EXPO_BB "expo-bb"
#define SANE_STD_OPT_NAME_CIS_EXPO_BG "expo-bg"
#define SANE_STD_OPT_NAME_CIS_EXPO_BR "expo-br"
#define SANE_STD_OPT_NAME_CIS_GAIN_FRONT "gain-f"
#define SANE_STD_OPT_NAME_CIS_GAIN_BACK "gain-b"
#define SANE_STD_OPT_NAME_CIS_OFFSET_FRONT "off-f"
#define SANE_STD_OPT_NAME_CIS_OFFSET_BACK "off-b"
#define SANE_STD_OPT_NAME_CIS_STRETCH_H "stretch-h"
#define SANE_STD_OPT_NAME_CIS_STRETCH_V "stretch-v"
#define SANE_STD_OPT_NAME_MOTOR_SPEED "motor-speed"
#define SANE_STD_OPT_NAME_COLOR_CORRECT "clr-correct"
#define SANE_STD_OPT_NAME_LUT_FILE "lut-file"
#define SANE_STD_OPT_NAME_PHASE_FRONT "phase-f"
#define SANE_STD_OPT_NAME_PHASE_BACK "phase-b"
//
// 借鉴TWAIN协议固定ID的做法定义SANE属性的固定ID - 这里与TWAIN中的ID保持一致以方便TWAIN的调用
enum sane_option_id
{
SANE_OPT_ID_BASE = 0x8800,
SANE_OPT_ID_IS_MULTI_OUT = 0x8801,
SANE_OPT_ID_MULTI_OUT_TYPE = 0x8802,
SANE_OPT_ID_COLOR_MODE = 0x8803,
SANE_OPT_ID_FILTER = 0x8804,
SANE_OPT_ID_RID_MULTIOUT_RED = 0x8805,
SANE_OPT_ID_RID_ANSWER_SHEET_RED = 0x8806,
SANE_OPT_ID_ERASE_BACKGROUND = 0x8807,
SANE_OPT_ID_BKG_COLOR_RANGE = 0x8808,
SANE_OPT_ID_SHARPEN = 0x8809,
SANE_OPT_ID_RID_MORR = 0x880A,
SANE_OPT_ID_RID_GRID = 0x880B,
SANE_OPT_ID_ERROR_EXTENSION = 0x880C,
SANE_OPT_ID_NOISE_OPTIMIZE = 0x880D,
SANE_OPT_ID_NOISE_SIZE = 0x880E,
SANE_OPT_ID_PAPER = 0x880F,
SANE_OPT_ID_CUSTOM_AREA = 0x8810,
SANE_OPT_ID_CUSTOM_AREA_LEFT = 0x8811,
SANE_OPT_ID_CUSTOM_AREA_RIGHT = 0x8812,
SANE_OPT_ID_CUSTOM_AREA_TOP = 0x8813,
SANE_OPT_ID_CUSTOM_AREA_BOTTOM = 0x8814,
SANE_OPT_ID_SIZE_CHECK = 0x8815,
SANE_OPT_ID_PAGE = 0x8816,
SANE_OPT_ID_DISCARD_BLANK_SENS = 0x8817,
SANE_OPT_ID_RESOLUTION = 0x8818,
SANE_OPT_ID_IMAGE_QUALITY = 0x8819,
SANE_OPT_ID_EXCHANGE = 0x881A,
SANE_OPT_ID_SPLIT = 0x881B,
SANE_OPT_ID_ANTI_SKEW = 0x881C,
SANE_OPT_ID_IS_CUSTOM_GAMMA = 0x881D,
SANE_OPT_ID_BRIGHTNESS = 0x881E,
SANE_OPT_ID_CONTRAST = 0x881F,
SANE_OPT_ID_GAMMA = 0x8820,
SANE_OPT_ID_ERASE_BLACK_FRAME = 0x8821,
SANE_OPT_ID_DARK_SAMPLE = 0x8822,
SANE_OPT_ID_THRESHOLD = 0x8823,
SANE_OPT_ID_ANTI_NOISE_LEVEL = 0x8824,
SANE_OPT_ID_MARGIN = 0x8825,
SANE_OPT_ID_FILL_BKG_MODE = 0x8826,
SANE_OPT_ID_IS_ANTI_PERMEATE = 0x8827,
SANE_OPT_ID_ANTI_PERMEATE_LEVEL = 0x8828,
SANE_OPT_ID_RID_HOLE = 0x8829,
SANE_OPT_ID_SEARCH_HOLE_RANGE = 0x882A,
SANE_OPT_ID_IS_FILL_COLOR = 0x882B,
SANE_OPT_ID_IS_ULTROSONIC_CHECK = 0x882C,
SANE_OPT_ID_IS_CHECK_STAPLE = 0x882D,
SANE_OPT_ID_SCAN_MODE = 0x882E,
SANE_OPT_ID_SCAN_COUNT = 0x882F,
SANE_OPT_ID_TEXT_DIRECTION = 0x8830,
SANE_OPT_ID_IS_ROTATE_BKG_180 = 0x8831,
SANE_OPT_ID_IS_CHECK_DOG_EAR = 0x8832,
SANE_OPT_ID_DOG_EAR_SIZE = 0x8833,
SANE_OPT_ID_IS_CHECK_ASKEW = 0x8834,
SANE_OPT_ID_ASKEW_RANGE = 0x8835,
SANE_OPT_ID_BINARY_THRESHOLD = 0x8836,
SANE_OPT_ID_IS_PHOTO_MODE = 0x8837,
SANE_OPT_ID_DOUBLE_FEED_HANDLE = 0x8838,
SANE_OPT_ID_WAIT_TO_SCAN = 0x8839,
SANE_OPT_ID_FEED_STRENGTH = 0x883A,
SANE_OPT_ID_TIME_TO_SLEEP = 0x883B,
SANE_OPT_ID_IS_AUTO_FEED_STRENGTH = 0x883C,
SANE_OPT_ID_FEED_STRENGTH_VALUE = 0x883D,
SANE_OPT_ID_REVERSE_01 = 0x883E,
SANE_OPT_ID_RID_HOLE_L = 0x883F,
SANE_OPT_ID_SEARCH_HOLE_RANGE_L = 0x8840,
SANE_OPT_ID_RID_HOLE_R = 0x8841,
SANE_OPT_ID_SEARCH_HOLE_RANGE_R = 0x8842,
SANE_OPT_ID_RID_HOLE_T = 0x8843,
SANE_OPT_ID_SEARCH_HOLE_RANGE_T = 0x8844,
SANE_OPT_ID_RID_HOLE_B = 0x8845,
SANE_OPT_ID_SEARCH_HOLE_RANGE_B = 0x8846,
SANE_OPT_ID_FOLD_TYPE = 0x8847,
SANE_OPT_ID_COLOR_CORRECTION = 0x8848,
SANE_OPT_ID_HISTORY_COUNT = 0x8849,
SANE_OPT_ID_DRIVER_VERSION = 0x884A,
SANE_OPT_ID_MANUFACTURER = 0x884B,
SANE_OPT_ID_COPYRIGHT = 0x884C,
SANE_OPT_ID_CO_URL = 0x884D,
SANE_OPT_ID_CO_TEL = 0x884E,
SANE_OPT_ID_CO_ADDR = 0x884F,
SANE_OPT_ID_CO_GPS = 0x8850,
SANE_OPT_ID_HELP = 0x8851,
SANE_OPT_ID_VID = 0x8852,
SANE_OPT_ID_PID = 0x8853,
SANE_OPT_ID_DEV_NAME = 0x8854,
SANE_OPT_ID_DEV_FAMILY = 0x8855,
SANE_OPT_ID_DEVICE_SERIAL_NO = 0x8856,
SANE_OPT_ID_FIRMWARE_VERSION = 0x8857,
SANE_OPT_ID_DEVICE_IP_ADDR = 0x8858,
SANE_OPT_ID_DEVICE_MAC_ADDR = 0x8859,
SANE_OPT_ID_CUSTOM_GAMMA = 0x885A, // data: SANE_Gamma*
SANE_OPT_ID_ROLLER_LIFE = 0x885B, // data: uint32_t*
SANE_OPT_ID_LANGUAGE = 0x885C, // data: char*
SANE_OPT_ID_MOTOR_VER = 0x885D, // 电机固件版本, data - char*
SANE_OPT_ID_TRANSFORM_IMAGE_FORMAT = 0x885E,// 图像格式转换, data - SANE_ImageFormatConvert*, dst.data 调用SANE_STD_OPT_NAME_FREE_BUFFER释放
SANE_OPT_ID_FREE_BUFFER = 0x885F, // 释放由驱动返回的内存, data - (void**)&buf
SANE_OPT_ID_PAPER_ON = 0x8860, // 是否有纸张, data - SANE_Bool*
SANE_OPT_ID_GRAY_GAMMA = 0x8861, // gray-gamma-table
SANE_OPT_ID_COLOR_GAMMA = 0x8862, // color-gamma-table
SANE_OPT_ID_RED_GAMMA = 0x8863, // red-gamma-table
SANE_OPT_ID_GREEN_GAMMA = 0x8864, // green-gamma-table
SANE_OPT_ID_BLUE_GAMMA = 0x8865, // blue-gamma-table
SANE_OPT_ID_INITIAL_BOOT_TIME = 0x8866,
SANE_OPT_ID_DISCARDBLANK = 0x8867,
SANE_OPT_ID_WAIT_SCAN_EXIT = 0x8868,
SANE_OPT_ID_RESTORE = 0x8869,
SANE_OPT_ID_PAPER_W = 0x886A, // 纸张宽度单位为mm
SANE_OPT_ID_PAPER_H = 0x886B, // 纸张高度单位为mm
SANE_OPT_ID_LATERAL = 0x886C, // 纸张横向标志bool
SANE_OPT_ID_LOGIN = 0x9900,
SANE_OPT_ID_LOGOUT = 0x9901,
SANE_OPT_ID_ROLLER_COUNT = 0x9902,
SANE_OPT_ID_DRIVER_LOG = 0x9903,
SANE_OPT_ID_DEVICE_LOG = 0x9904,
SANE_OPT_ID_USER_NAME = 0x9905,
SANE_OPT_ID_USER_PASSWORD = 0x9906,
};
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 属性相关
#include "sane.h" #include "sane.h"
#include <math.h>
#define MAX_STRING_LEN 256 #define MAX_STRING_LEN 256
#define IS_DOUBLE_EQUAL(a, b) fabs((a) - (b)) < .000001
#define IS_PTR_NUMBER(ptr) (((unsigned long long)(ptr)) < 0x10000)
#define CAPABILITY_ORDINARY (SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT) #define CAPABILITY_ORDINARY (SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT)
#define CAPABILITY_READONLY SANE_CAP_SOFT_DETECT #define CAPABILITY_READONLY SANE_CAP_SOFT_DETECT
@ -440,6 +121,9 @@ enum sane_option_id
cap |= can_read ? SANE_CAP_SOFT_DETECT | CAPABILITY_ORDINARY : CAPABILITY_ORDINARY;\ cap |= can_read ? SANE_CAP_SOFT_DETECT | CAPABILITY_ORDINARY : CAPABILITY_ORDINARY;\
} }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 接口
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
@ -920,17 +604,4 @@ extern "C" {
} }
#endif #endif
//#include <string>
//
//template<typename ... Args>
//std::string format_string(int level, const char* fmt, Args ... args)
//{
// size_t size = snprintf(nullptr, 0, fmt, args ...) + 2;
// std::string str(size);
//
// snprintf(&str[0], size, fmt, args ...);
//
// return std::move(str);
//}
#endif /* sane_ex_h */ #endif /* sane_ex_h */

320
sdk/sane/sane_name.h Normal file
View File

@ -0,0 +1,320 @@
// sane option names && fixed-id definitions
//
// Date: 2024-01-31
#pragma once
#define SANE_OPT_NAME(name) SANE_STD_OPT_NAME_##name
#define SANE_OPT_FIXED_ID(id) SANE_OPT_ID_##id
#define MAX_OPT_NAME_LEN 64
#define JSON_SANE_TYPE_BOOL "bool"
#define JSON_SANE_TYPE_INT "int"
#define JSON_SANE_TYPE_FIXED "float"
#define JSON_SANE_TYPE_STRING "string"
#define JSON_SANE_TYPE_GROUP "group"
#define JSON_SANE_TYPE_BUTTON "button"
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Names ...
//
// PART I: 参数类型与华高一致可直接通过改name字段为标准值实现
#define SANE_STD_OPT_NAME_RESTORE "restore" // OPTION_TITLE_HFMRSZ
#define SANE_STD_OPT_NAME_HELP "help" // OPTION_TITLE_BZ
#define SANE_STD_OPT_NAME_IS_MULTI_OUT "is-multiout" // OPTION_TITLE_DLSC
#define SANE_STD_OPT_NAME_MULTI_OUT_TYPE "multiout-type" // OPTION_TITLE_DLSCLX
#define SANE_STD_OPT_NAME_COLOR_MODE "mode" // OPTION_TITLE_YSMS
#define SANE_STD_OPT_NAME_BINARY_THRESHOLD "binary-threshold" // OPTION_TITLE_HBTXYZ
#define SANE_STD_OPT_NAME_REVERSE_01 "reverse-bw" // OPTION_TITLE_HBTXFSSC
#define SANE_STD_OPT_NAME_FILTER "filter" // OPTION_TITLE_HDHHBTX_CSYZQ
#define SANE_STD_OPT_NAME_RID_MULTIOUT_RED "is-rid-multiout-red" // OPTION_TITLE_24WCSTX_DLSCCH
#define SANE_STD_OPT_NAME_RID_ANSWER_SHEET_RED "is-rid-answer-sheet-red" // OPTION_TITLE_24WCSTX_DTKCH
#define SANE_STD_OPT_NAME_ERASE_BACKGROUND "is-erase-bkg" // OPTION_TITLE_BJYC
#define SANE_STD_OPT_NAME_BKG_COLOR_RANGE "bkg-color-range" // OPTION_TITLE_BJSCFDFW
#define SANE_STD_OPT_NAME_SHARPEN "sharpen" // OPTION_TITLE_RHYMH
#define SANE_STD_OPT_NAME_RID_MORR "is-rid-morr" // OPTION_TITLE_QCMW
#define SANE_STD_OPT_NAME_RID_GRID "is-rid-grid" // OPTION_TITLE_CWW
#define SANE_STD_OPT_NAME_ERROR_EXTENSION "is-err-extension" // OPTION_TITLE_CWKS
#define SANE_STD_OPT_NAME_NOISE_OPTIMIZE "is-noise-optimize" // OPTION_TITLE_HBTXZDYH
#define SANE_STD_OPT_NAME_NOISE_SIZE "noise-size" // OPTION_TITLE_ZDYHCC
#define SANE_STD_OPT_NAME_PAPER "paper" // OPTION_TITLE_ZZCC
#define SANE_STD_OPT_NAME_PAPER_W "paper-w" // 纸张宽度
#define SANE_STD_OPT_NAME_PAPER_H "paper-h" // 纸张高度
#define SANE_STD_OPT_NAME_LATERAL "lateral" // 纸张横向标志
#define SANE_STD_OPT_NAME_CUSTOM_AREA "is-custom-area" // OPTION_TITLE_ZDYSMQY
#define SANE_STD_OPT_NAME_CUSTOM_AREA_LEFT "tl-x" // OPTION_TITLE_SMQYZCmm
#define SANE_STD_OPT_NAME_CUSTOM_AREA_RIGHT "br-x" // OPTION_TITLE_SMQYYCmm
#define SANE_STD_OPT_NAME_CUSTOM_AREA_TOP "tl-y" // OPTION_TITLE_SMQYSCmm
#define SANE_STD_OPT_NAME_CUSTOM_AREA_BOTTOM "br-y" // OPTION_TITLE_SMQYXCmm
#define SANE_STD_OPT_NAME_SIZE_CHECK "is-size-check" // OPTION_TITLE_CCJC
#define SANE_STD_OPT_NAME_PAGE "page" // OPTION_TITLE_SMYM
#define SANE_STD_OPT_NAME_DISCARD_BLANK_SENS "blank-sensitivity" // OPTION_TITLE_TGKBYLMD
#define SANE_STD_OPT_NAME_RESOLUTION "resolution" // OPTION_TITLE_FBL
#define SANE_STD_OPT_NAME_TIME_TO_SLEEP "time-to-sleep" // OPTION_TITLE_XMSJ
#define SANE_STD_OPT_NAME_IMAGE_QUALITY "image-quality" // OPTION_TITLE_HZ
#define SANE_STD_OPT_NAME_EXCHANGE "is-exchange" // OPTION_TITLE_JHZFM
#define SANE_STD_OPT_NAME_SPLIT "is-split" // OPTION_TITLE_TXCF
#define SANE_STD_OPT_NAME_ANTI_SKEW "is-anti-skew" // OPTION_TITLE_ZDJP
#define SANE_STD_OPT_NAME_IS_CUSTOM_GAMMA "is-custom-gamma" // OPTION_TITLE_QYSDQX
#define SANE_STD_OPT_NAME_GAMMA "gamma" // OPTION_TITLE_JMZ
#define SANE_STD_OPT_NAME_CUSTOM_GAMMA "custom-gamma" // OPTION_TITLE_CUSTOM_JMZ; data - SANE_Gamma*
#define SANE_STD_OPT_NAME_GRAY_GAMMA "gray-gamma-table"
#define SANE_STD_OPT_NAME_COLOR_GAMMA "color-gamma-table"
#define SANE_STD_OPT_NAME_RED_GAMMA "red-gamma-table"
#define SANE_STD_OPT_NAME_GREEN_GAMMA "green-gamma-table"
#define SANE_STD_OPT_NAME_BLUE_GAMMA "blue-gamma-table"
#define SANE_STD_OPT_NAME_BRIGHTNESS "brightness" // OPTION_TITLE_LDZ
#define SANE_STD_OPT_NAME_CONTRAST "contrast" // OPTION_TITLE_DBD
#define SANE_STD_OPT_NAME_IS_PHOTO_MODE "is-photo-mode" // OPTION_TITLE_ZPMS
#define SANE_STD_OPT_NAME_ERASE_BLACK_FRAME "is-erase-black-frame" // OPTION_TITLE_XCHK
#define SANE_STD_OPT_NAME_DARK_SAMPLE "is-dark-sample" // OPTION_TITLE_SSYZ
#define SANE_STD_OPT_NAME_THRESHOLD "threshold" // OPTION_TITLE_YZ
#define SANE_STD_OPT_NAME_ANTI_NOISE_LEVEL "anti-noise-level" // OPTION_TITLE_BJKZDJ
#define SANE_STD_OPT_NAME_MARGIN "margin" // OPTION_TITLE_BYSJ
#define SANE_STD_OPT_NAME_FILL_BKG_MODE "bkg-fill-mode" // OPTION_TITLE_BJTCFS
#define SANE_STD_OPT_NAME_IS_ANTI_PERMEATE "is-anti-permeate" // OPTION_TITLE_FZST
#define SANE_STD_OPT_NAME_ANTI_PERMEATE_LEVEL "permeate-level" // OPTION_TITLE_FZSTDJ
#define SANE_STD_OPT_NAME_RID_HOLE "is-rid-hole" // OPTION_TITLE_CKYC
#define SANE_STD_OPT_NAME_HOLE_THRESHOLD "hole-threshold" //
#define SANE_STD_OPT_NAME_SEARCH_HOLE_RANGE "search-hole-range" // OPTION_TITLE_CKSSFWZFMBL
#define SANE_STD_OPT_NAME_RID_HOLE_L "is-rid-hole-l" // OPTION_TITLE_CKYCZC
#define SANE_STD_OPT_NAME_SEARCH_HOLE_RANGE_L "search-hole-range-l" // OPTION_TITLE_ZCCKSSFWZFMBL
#define SANE_STD_OPT_NAME_RID_HOLE_R "is-rid-hole-r" // OPTION_TITLE_CKYCYC
#define SANE_STD_OPT_NAME_SEARCH_HOLE_RANGE_R "search-hole-range-r" // OPTION_TITLE_YCCKSSFWZFMBL
#define SANE_STD_OPT_NAME_RID_HOLE_T "is-rid-hole-t" // OPTION_TITLE_CKYCSC
#define SANE_STD_OPT_NAME_SEARCH_HOLE_RANGE_T "search-hole-range-t" // OPTION_TITLE_SCCKSSFWZFMBL
#define SANE_STD_OPT_NAME_RID_HOLE_B "is-rid-hole-b" // OPTION_TITLE_CKYCXC
#define SANE_STD_OPT_NAME_SEARCH_HOLE_RANGE_B "search-hole-range-b" // OPTION_TITLE_XCCKSSFWZFMBL
#define SANE_STD_OPT_NAME_IS_FILL_COLOR "is-fill-color" // OPTION_TITLE_SCTC
#define SANE_STD_OPT_NAME_IS_ULTROSONIC_CHECK "is-ultrosonic" // OPTION_TITLE_CSBJC
#define SANE_STD_OPT_NAME_DOUBLE_CHECK "double-chk"
#define SANE_STD_OPT_NAME_DOUBLE_FEED_HANDLE "double-feed" // OPTION_TITLE_SZTPCL
#define SANE_STD_OPT_NAME_IS_CHECK_STAPLE "is-staple" // OPTION_TITLE_ZDJC
#define SANE_STD_OPT_NAME_SCAN_MODE "scan-mode" // OPTION_TITLE_SMZS
#define SANE_STD_OPT_NAME_SCAN_COUNT "scan-count" // OPTION_TITLE_SMSL
#define SANE_STD_OPT_NAME_TEXT_DIRECTION "direction" // OPTION_TITLE_WGFX
#define SANE_STD_OPT_NAME_IS_ROTATE_BKG_180 "is-rotate-bkg-180" // OPTION_TITLE_BMXZ180
#define SANE_STD_OPT_NAME_IS_CHECK_DOG_EAR "is-check-dog-ear" // OPTION_TITLE_ZJJC
#define SANE_STD_OPT_NAME_DOG_EAR_SIZE "dog-ear-size" // OPTION_TITLE_ZJDX
#define SANE_STD_OPT_NAME_IS_CHECK_ASKEW "is-check-askew" // OPTION_TITLE_WXJC
#define SANE_STD_OPT_NAME_ASKEW_RANGE "askew-range" // OPTION_TITLE_WXRRD
#define SANE_STD_OPT_NAME_FEED_STRENGTH "feed-strength" // OPTION_TITLE_FZQD
#define SANE_STD_OPT_NAME_IS_AUTO_FEED_STRENGTH "is-auto-strength" // OPTION_TITLE_ZDFZQD
#define SANE_STD_OPT_NAME_FEED_STRENGTH_VALUE "feed-strength-value" // OPTION_TITLE_JZSBL
#define SANE_STD_OPT_NAME_WAIT_TO_SCAN "is-wait-scan" // OPTION_TITLE_DZSM
#define SANE_STD_OPT_NAME_FOLD_TYPE "fold-type" // OPTION_TITLE_DZMS
#define SANE_STD_OPT_NAME_COLOR_CORRECTION "color-correction" // OPTION_TITLE_SPJZ
#define SANE_STD_OPT_NAME_WAIT_SCAN_EXIT "wait-scan-exit" // OPTION_TITLE_DZSMTCSJ
#define SANE_STD_OPT_NAME_DISCARDBLANK "discardblank" // OPTION_TITLE_TGKBY
#define SANE_STD_OPT_NAME_DEVICE_NAME "dev-name" // 设备名称
#define SANE_STD_OPT_NAME_DEVICE_VID "dev-vid" // 设备VID
#define SANE_STD_OPT_NAME_DEVICE_PID "dev-pid" // 设备PID
#define SANE_STD_OPT_NAME_DEVICE_MODEL "dev-model" // 设备系列
#define SANE_STD_OPT_NAME_DEV_NAME SANE_STD_OPT_NAME_DEVICE_NAME
#define SANE_STD_OPT_NAME_VID SANE_STD_OPT_NAME_DEVICE_VID
#define SANE_STD_OPT_NAME_PID SANE_STD_OPT_NAME_DEVICE_PID
#define SANE_STD_OPT_NAME_DEV_FAMILY SANE_STD_OPT_NAME_DEVICE_MODEL
#define SANE_STD_OPT_NAME_DEVICE_TYPE "dev-type" // 设备型号
#define SANE_STD_OPT_NAME_DEVICE_SERIAL_NO "dev-sn" // 设备序列号
#define SANE_STD_OPT_NAME_FIRMWARE_VERSION "fmw-ver" // 固件版本
#define SANE_STD_OPT_NAME_DEVICE_IP_ADDR "ip-addr" // 设备IP地址
#define SANE_STD_OPT_NAME_DEVICE_MAC_ADDR "mac-addr" // 设备MAC地址
#define SANE_STD_OPT_NAME_ROLLER_COUNT "roll-cnt" // 滚轴张数
#define SANE_STD_OPT_NAME_TOTAL_COUNT "total-cnt" // 历史总张数
#define SANE_STD_OPT_NAME_HISTORY_COUNT SANE_STD_OPT_NAME_TOTAL_COUNT
#define SANE_STD_OPT_NAME_GET_DEVS_L0G "devs-log" // 获取设备日志
#define SANE_STD_OPT_NAME_DRIVER_VERSION "drv-ver" // 设备VID
#define SANE_STD_OPT_NAME_MANUFACTURER "company" // 公司名称
#define SANE_STD_OPT_NAME_COPYRIGHT "copyright" // 版权
#define SANE_STD_OPT_NAME_CO_URL "co-url" // 公司网址
#define SANE_STD_OPT_NAME_CO_TEL "co-tel" // 公司电话
#define SANE_STD_OPT_NAME_CO_ADDR "co-addr" // 公司地址
#define SANE_STD_OPT_NAME_CO_GPS "co-gps" // 公司地图定位
#define SANE_STD_OPT_NAME_USER_NAME "user-name" // 登录账号
#define SANE_STD_OPT_NAME_USER_PASSWORD "user-pwd" // 登录密码
#define SANE_STD_OPT_NAME_LOGIN "login" // 登录
#define SANE_STD_OPT_NAME_LOGOUT "logout" // 登出
#define SANE_STD_OPT_NAME_DRIVER_LOG "drv-log" // 驱动日志
#define SANE_STD_OPT_NAME_DEVICE_LOG SANE_STD_OPT_NAME_GET_DEVS_L0G
#define SANE_STD_OPT_NAME_ROLLER_LIFE "roller-life" // 滚轴最大寿命(过纸张数)
#define SANE_STD_OPT_NAME_LANGUAGE "language" // 语言
#define SANE_STD_OPT_NAME_MOTOR_VER "motor-ver" // 电机固件版本, data = char*
#define SANE_STD_OPT_NAME_FPGA_VER "fpga-ver" // CIS控制器FPGA版本, data = char*
#define SANE_STD_OPT_NAME_TRANSFORM_IMAGE_FORMAT "trans-img-fmt" // 图像格式转换, data - SANE_ImageFormatConvert*, dst.data 调用SANE_STD_OPT_NAME_FREE_BUFFER释放
#define SANE_STD_OPT_NAME_FREE_BUFFER "free-buf" // 释放由驱动返回的内存, data - (void**)&buf
#define SANE_STD_OPT_NAME_PAPER_ON "paper-on" // check whether paper is on
#define SANE_STD_OPT_NAME_INITIAL_BOOT_TIME "initial-boot-time" // 设备的初始开机时间
#define SANE_STD_OPT_NAME_DUMP_IMG "dump-img" // 是否输出算法各阶段中间图像
#define SANE_STD_OPT_NAME_DUMP_IMG_PATH "dump-path" // 中间图像输出路径
#define SANE_STD_OPT_NAME_CIS_LENGTH "cis-len" // CIS 长度(采集图像的最大宽度)
#define SANE_STD_OPT_NAME_CIS_REBUILD "rebuild" // 复原从CIS出来的数据流为原始图像
// PART II: 参数类型与华高不一致需要通过“hgsane”组件在中间转换
#define SANE_STD_OPT_NAME_PAGE_W "page-width" // OPTION_TITLE_ZZCC
#define SANE_STD_OPT_NAME_PAGE_H "page-height" // OPTION_TITLE_ZZCC
#define SANE_STD_OPT_NAME_DUPLEX "duplex" // OPTION_TITLE_SMYM
// END for sane-standard-option-name defined by third-app
//
// PART III: inner option on device
#define SANE_STD_OPT_NAME_CIS_MODE "cis-mode"
#define SANE_STD_OPT_NAME_CIS_DPI "cis-dpi"
#define SANE_STD_OPT_NAME_Y_DPI "y-dpi"
#define SANE_STD_OPT_NAME_CIS_BAUD "baud"
#define SANE_STD_OPT_NAME_CIS_DELAY "act-after"
#define SANE_STD_OPT_NAME_CIS_FRAME_H "frame-h"
#define SANE_STD_OPT_NAME_CIS_SAMPLE "sample"
#define SANE_STD_OPT_NAME_CIS_SP "cis-sp"
#define SANE_STD_OPT_NAME_CIS_LED "cis-led"
#define SANE_STD_OPT_NAME_CIS_REBUILD "cis-rebuild"
#define SANE_STD_OPT_NAME_CIS_STRETCH "stretch"
#define SANE_STD_OPT_NAME_CIS_EXPO_FB "expo-fb"
#define SANE_STD_OPT_NAME_CIS_EXPO_FG "expo-fg"
#define SANE_STD_OPT_NAME_CIS_EXPO_FR "expo-fr"
#define SANE_STD_OPT_NAME_CIS_EXPO_BB "expo-bb"
#define SANE_STD_OPT_NAME_CIS_EXPO_BG "expo-bg"
#define SANE_STD_OPT_NAME_CIS_EXPO_BR "expo-br"
#define SANE_STD_OPT_NAME_CIS_GAIN_FRONT "gain-f"
#define SANE_STD_OPT_NAME_CIS_GAIN_BACK "gain-b"
#define SANE_STD_OPT_NAME_CIS_OFFSET_FRONT "off-f"
#define SANE_STD_OPT_NAME_CIS_OFFSET_BACK "off-b"
#define SANE_STD_OPT_NAME_CIS_STRETCH_H "stretch-h"
#define SANE_STD_OPT_NAME_CIS_STRETCH_V "stretch-v"
#define SANE_STD_OPT_NAME_MOTOR_SPEED "motor-speed"
#define SANE_STD_OPT_NAME_COLOR_CORRECT "clr-correct"
#define SANE_STD_OPT_NAME_LUT_FILE "lut-file"
#define SANE_STD_OPT_NAME_PHASE_FRONT "phase-f"
#define SANE_STD_OPT_NAME_PHASE_BACK "phase-b"
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// fixed-ids ...
//
// 借鉴TWAIN协议固定ID的做法定义SANE属性的固定ID - 这里与TWAIN中的ID保持一致以方便TWAIN的调用
enum sane_option_id
{
SANE_OPT_ID_BASE = 0x8800,
SANE_OPT_ID_IS_MULTI_OUT = 0x8801,
SANE_OPT_ID_MULTI_OUT_TYPE = 0x8802,
SANE_OPT_ID_COLOR_MODE = 0x8803,
SANE_OPT_ID_FILTER = 0x8804,
SANE_OPT_ID_RID_MULTIOUT_RED = 0x8805,
SANE_OPT_ID_RID_ANSWER_SHEET_RED = 0x8806,
SANE_OPT_ID_ERASE_BACKGROUND = 0x8807,
SANE_OPT_ID_BKG_COLOR_RANGE = 0x8808,
SANE_OPT_ID_SHARPEN = 0x8809,
SANE_OPT_ID_RID_MORR = 0x880A,
SANE_OPT_ID_RID_GRID = 0x880B,
SANE_OPT_ID_ERROR_EXTENSION = 0x880C,
SANE_OPT_ID_NOISE_OPTIMIZE = 0x880D,
SANE_OPT_ID_NOISE_SIZE = 0x880E,
SANE_OPT_ID_PAPER = 0x880F,
SANE_OPT_ID_CUSTOM_AREA = 0x8810,
SANE_OPT_ID_CUSTOM_AREA_LEFT = 0x8811,
SANE_OPT_ID_CUSTOM_AREA_RIGHT = 0x8812,
SANE_OPT_ID_CUSTOM_AREA_TOP = 0x8813,
SANE_OPT_ID_CUSTOM_AREA_BOTTOM = 0x8814,
SANE_OPT_ID_SIZE_CHECK = 0x8815,
SANE_OPT_ID_PAGE = 0x8816,
SANE_OPT_ID_DISCARD_BLANK_SENS = 0x8817,
SANE_OPT_ID_RESOLUTION = 0x8818,
SANE_OPT_ID_IMAGE_QUALITY = 0x8819,
SANE_OPT_ID_EXCHANGE = 0x881A,
SANE_OPT_ID_SPLIT = 0x881B,
SANE_OPT_ID_ANTI_SKEW = 0x881C,
SANE_OPT_ID_IS_CUSTOM_GAMMA = 0x881D,
SANE_OPT_ID_BRIGHTNESS = 0x881E,
SANE_OPT_ID_CONTRAST = 0x881F,
SANE_OPT_ID_GAMMA = 0x8820,
SANE_OPT_ID_ERASE_BLACK_FRAME = 0x8821,
SANE_OPT_ID_DARK_SAMPLE = 0x8822,
SANE_OPT_ID_THRESHOLD = 0x8823,
SANE_OPT_ID_ANTI_NOISE_LEVEL = 0x8824,
SANE_OPT_ID_MARGIN = 0x8825,
SANE_OPT_ID_FILL_BKG_MODE = 0x8826,
SANE_OPT_ID_IS_ANTI_PERMEATE = 0x8827,
SANE_OPT_ID_ANTI_PERMEATE_LEVEL = 0x8828,
SANE_OPT_ID_RID_HOLE = 0x8829,
SANE_OPT_ID_SEARCH_HOLE_RANGE = 0x882A,
SANE_OPT_ID_IS_FILL_COLOR = 0x882B,
SANE_OPT_ID_IS_ULTROSONIC_CHECK = 0x882C,
SANE_OPT_ID_IS_CHECK_STAPLE = 0x882D,
SANE_OPT_ID_SCAN_MODE = 0x882E,
SANE_OPT_ID_SCAN_COUNT = 0x882F,
SANE_OPT_ID_TEXT_DIRECTION = 0x8830,
SANE_OPT_ID_IS_ROTATE_BKG_180 = 0x8831,
SANE_OPT_ID_IS_CHECK_DOG_EAR = 0x8832,
SANE_OPT_ID_DOG_EAR_SIZE = 0x8833,
SANE_OPT_ID_IS_CHECK_ASKEW = 0x8834,
SANE_OPT_ID_ASKEW_RANGE = 0x8835,
SANE_OPT_ID_BINARY_THRESHOLD = 0x8836,
SANE_OPT_ID_IS_PHOTO_MODE = 0x8837,
SANE_OPT_ID_DOUBLE_FEED_HANDLE = 0x8838,
SANE_OPT_ID_WAIT_TO_SCAN = 0x8839,
SANE_OPT_ID_FEED_STRENGTH = 0x883A,
SANE_OPT_ID_TIME_TO_SLEEP = 0x883B,
SANE_OPT_ID_IS_AUTO_FEED_STRENGTH = 0x883C,
SANE_OPT_ID_FEED_STRENGTH_VALUE = 0x883D,
SANE_OPT_ID_REVERSE_01 = 0x883E,
SANE_OPT_ID_RID_HOLE_L = 0x883F,
SANE_OPT_ID_SEARCH_HOLE_RANGE_L = 0x8840,
SANE_OPT_ID_RID_HOLE_R = 0x8841,
SANE_OPT_ID_SEARCH_HOLE_RANGE_R = 0x8842,
SANE_OPT_ID_RID_HOLE_T = 0x8843,
SANE_OPT_ID_SEARCH_HOLE_RANGE_T = 0x8844,
SANE_OPT_ID_RID_HOLE_B = 0x8845,
SANE_OPT_ID_SEARCH_HOLE_RANGE_B = 0x8846,
SANE_OPT_ID_FOLD_TYPE = 0x8847,
SANE_OPT_ID_COLOR_CORRECTION = 0x8848,
SANE_OPT_ID_HISTORY_COUNT = 0x8849,
SANE_OPT_ID_DRIVER_VERSION = 0x884A,
SANE_OPT_ID_MANUFACTURER = 0x884B,
SANE_OPT_ID_COPYRIGHT = 0x884C,
SANE_OPT_ID_CO_URL = 0x884D,
SANE_OPT_ID_CO_TEL = 0x884E,
SANE_OPT_ID_CO_ADDR = 0x884F,
SANE_OPT_ID_CO_GPS = 0x8850,
SANE_OPT_ID_HELP = 0x8851,
SANE_OPT_ID_VID = 0x8852,
SANE_OPT_ID_PID = 0x8853,
SANE_OPT_ID_DEV_NAME = 0x8854,
SANE_OPT_ID_DEV_FAMILY = 0x8855,
SANE_OPT_ID_DEVICE_SERIAL_NO = 0x8856,
SANE_OPT_ID_FIRMWARE_VERSION = 0x8857,
SANE_OPT_ID_DEVICE_IP_ADDR = 0x8858,
SANE_OPT_ID_DEVICE_MAC_ADDR = 0x8859,
SANE_OPT_ID_CUSTOM_GAMMA = 0x885A, // data: SANE_Gamma*
SANE_OPT_ID_ROLLER_LIFE = 0x885B, // data: uint32_t*
SANE_OPT_ID_LANGUAGE = 0x885C, // data: char*
SANE_OPT_ID_MOTOR_VER = 0x885D, // 电机固件版本, data - char*
SANE_OPT_ID_TRANSFORM_IMAGE_FORMAT = 0x885E,// 图像格式转换, data - SANE_ImageFormatConvert*, dst.data 调用SANE_STD_OPT_NAME_FREE_BUFFER释放
SANE_OPT_ID_FREE_BUFFER = 0x885F, // 释放由驱动返回的内存, data - (void**)&buf
SANE_OPT_ID_PAPER_ON = 0x8860, // 是否有纸张, data - SANE_Bool*
SANE_OPT_ID_GRAY_GAMMA = 0x8861, // gray-gamma-table
SANE_OPT_ID_COLOR_GAMMA = 0x8862, // color-gamma-table
SANE_OPT_ID_RED_GAMMA = 0x8863, // red-gamma-table
SANE_OPT_ID_GREEN_GAMMA = 0x8864, // green-gamma-table
SANE_OPT_ID_BLUE_GAMMA = 0x8865, // blue-gamma-table
SANE_OPT_ID_INITIAL_BOOT_TIME = 0x8866,
SANE_OPT_ID_DISCARDBLANK = 0x8867,
SANE_OPT_ID_WAIT_SCAN_EXIT = 0x8868,
SANE_OPT_ID_RESTORE = 0x8869,
SANE_OPT_ID_PAPER_W = 0x886A, // 纸张宽度单位为mm
SANE_OPT_ID_PAPER_H = 0x886B, // 纸张高度单位为mm
SANE_OPT_ID_LATERAL = 0x886C, // 纸张横向标志bool
SANE_OPT_ID_LOGIN = 0x9900,
SANE_OPT_ID_LOGOUT = 0x9901,
SANE_OPT_ID_ROLLER_COUNT = 0x9902,
SANE_OPT_ID_DRIVER_LOG = 0x9903,
SANE_OPT_ID_DEVICE_LOG = 0x9904,
SANE_OPT_ID_USER_NAME = 0x9905,
SANE_OPT_ID_USER_PASSWORD = 0x9906,
};

View File

@ -100,23 +100,23 @@ int user_priv::set_value(const char* name, void* val)
{ {
int ret = SCANNER_ERR_OK; int ret = SCANNER_ERR_OK;
if(strcmp(name, SANE_FULL_NAME(USER_NAME)) == 0) if(strcmp(name, SANE_OPT_NAME(USER_NAME)) == 0)
{ {
name_ = (char*)val; name_ = (char*)val;
priv_ = USER_PRIVILEGE_COMMON; priv_ = USER_PRIVILEGE_COMMON;
} }
else if(strcmp(name, SANE_FULL_NAME(USER_PASSWORD)) == 0) else if(strcmp(name, SANE_OPT_NAME(USER_PASSWORD)) == 0)
{ {
pwd_ = (char*)val; pwd_ = (char*)val;
priv_ = USER_PRIVILEGE_COMMON; priv_ = USER_PRIVILEGE_COMMON;
} }
else if(strcmp(name, SANE_FULL_NAME(DEVICE_SERIAL_NO)) == 0) else if(strcmp(name, SANE_OPT_NAME(DEVICE_SERIAL_NO)) == 0)
{ {
dev_sn_ = (char*)val; dev_sn_ = (char*)val;
utils::to_log(LOG_LEVEL_DEBUG, "set user device SN: %s\n", dev_sn_.c_str()); utils::to_log(LOG_LEVEL_DEBUG, "set user device SN: %s\n", dev_sn_.c_str());
priv_ = USER_PRIVILEGE_COMMON; priv_ = USER_PRIVILEGE_COMMON;
} }
else if(strcmp(name, SANE_FULL_NAME(LOGIN)) == 0) else if(strcmp(name, SANE_OPT_NAME(LOGIN)) == 0)
{ {
// login ... // login ...
if(login_times_.count(name) == 0) if(login_times_.count(name) == 0)
@ -140,7 +140,7 @@ int user_priv::set_value(const char* name, void* val)
} }
} }
} }
else if(strcmp(name, SANE_FULL_NAME(LOGOUT)) == 0) else if(strcmp(name, SANE_OPT_NAME(LOGOUT)) == 0)
{ {
name_ = pwd_ = ""; name_ = pwd_ = "";
reset_privilege(); reset_privilege();

View File

@ -60,8 +60,8 @@ add_packagedirs("sdk")
add_defines("BUILD_AS_DEVICE") add_defines("BUILD_AS_DEVICE")
add_defines("VER_MAIN=2") add_defines("VER_MAIN=2")
add_defines("VER_FAMILY=200") add_defines("VER_FAMILY=200")
add_defines("VER_DATE=20240130") add_defines("VER_DATE=20240131")
add_defines("VER_BUILD=20") add_defines("VER_BUILD=1")
target("conf") target("conf")
set_kind("phony") set_kind("phony")