From 583b64dac23a76e44eca2f5ff07e37b35a99416c Mon Sep 17 00:00:00 2001 From: 13038267101 Date: Mon, 6 Mar 2023 11:37:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=B8=85=E9=99=A4=E5=8E=86?= =?UTF-8?q?=E5=8F=B2=E5=BC=A0=E6=95=B0=EF=BC=8C=E5=B9=B3=E5=9C=BA=E6=A0=A1?= =?UTF-8?q?=E6=AD=A3=E9=A2=9C=E8=89=B2dpi=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/hgdev/hg_scanner.cpp | 18 +- hgdriver/hgdev/hg_scanner.h | 7 +- hgdriver/hgdev/hg_scanner_200.cpp | 10 +- hgdriver/hgdev/hg_scanner_200.h | 7 +- hgdriver/hgdev/hg_scanner_239.cpp | 16 +- hgdriver/hgdev/hg_scanner_239.h | 7 +- hgdriver/hgdev/hg_scanner_300.cpp | 13 +- hgdriver/hgdev/hg_scanner_300.h | 8 +- hgdriver/hgdev/hg_scanner_302.cpp | 9 +- hgdriver/hgdev/hg_scanner_302.h | 15 +- hgdriver/hgdev/hg_scanner_400.cpp | 955 --------------------- hgdriver/hgdev/hg_scanner_400.h | 112 --- hgdriver/hgdev/hg_scanner_402.cpp | 1278 ---------------------------- hgdriver/hgdev/hg_scanner_402.h | 130 --- hgdriver/hgdev/scanner_manager.cpp | 5 +- 15 files changed, 78 insertions(+), 2512 deletions(-) delete mode 100644 hgdriver/hgdev/hg_scanner_400.cpp delete mode 100644 hgdriver/hgdev/hg_scanner_400.h delete mode 100644 hgdriver/hgdev/hg_scanner_402.cpp delete mode 100644 hgdriver/hgdev/hg_scanner_402.h diff --git a/hgdriver/hgdev/hg_scanner.cpp b/hgdriver/hgdev/hg_scanner.cpp index 2475bac..b44f16d 100644 --- a/hgdriver/hgdev/hg_scanner.cpp +++ b/hgdriver/hgdev/hg_scanner.cpp @@ -3279,14 +3279,12 @@ int hg_scanner::device_io_control(unsigned long code, void* data, unsigned* len) } else if (code == IO_CTRL_CODE_SET_CLEAR_ROLLER_COUNT) { - - int val = 0, ret = get_roller_num(val); - - if (len) - *len = val; - return set_clear_roller_num(); } + else if (code == IO_CTRL_CODE_SET_CLEAR_HISTORY_COUNT) + { + return set_clear_history_num(); + } else if (code == IO_CTRL_CODE_GET_FINAL_IMAGE_FORMAT) { SANE_FinalImgFormat* fmt = (SANE_FinalImgFormat*)data; @@ -3626,7 +3624,7 @@ int hg_scanner::device_io_control(unsigned long code, void* data, unsigned* len) else if (code == IO_CTRL_CODE_SET_AUTO_FALT) { is_auto_falt = true; - return set_auto_flat(); + return set_auto_flat(*((int*)data)); } else if (code == IO_CTRL_CODE_SET_COLOR) { @@ -3691,6 +3689,10 @@ int hg_scanner::set_clear_roller_num(void) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } +int hg_scanner::set_clear_history_num(void) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} int hg_scanner::get_history_scan_count(int &num) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; @@ -3765,7 +3767,7 @@ int hg_scanner::get_devs_distortion_check_val(int& data) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } -int hg_scanner::set_auto_flat(void) +int hg_scanner::set_auto_flat(int data) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } diff --git a/hgdriver/hgdev/hg_scanner.h b/hgdriver/hgdev/hg_scanner.h index b7c4988..5aa855a 100644 --- a/hgdriver/hgdev/hg_scanner.h +++ b/hgdriver/hgdev/hg_scanner.h @@ -481,6 +481,7 @@ public: virtual int set_auto_color_type(void); //设置自动匹配颜色模式 (基类实现) virtual int set_clear_roller_num(void) = 0; //清除滚轴计数 + virtual int set_clear_history_num(void) = 0; //清除历史张数 virtual int get_device_code(void); //获取设备编码 不支持 @@ -509,9 +510,11 @@ public: virtual int set_distortion_image(bool type); //设置畸变校正图 /*/ 基类处理 virtual int get_distortion_check_val(int &val); //获取畸变校正指 /*/ 基类处理 virtual int set_distortion_check_val(int data) = 0; //设置畸变矫正值 int to float; - virtual int get_devs_distortion_check_val(int& data); //获取设备畸变值 float to int; + virtual int get_devs_distortion_check_val(int& data); //获取设备畸变值 float to int; - virtual int set_auto_flat(void) = 0; //设置自动平场校正 + virtual int set_auto_flat(int data) = 0; //设置自动平场校正 + // data:0(ALL) 1(200dpi、gray) 2(200dpi、color) 3(300dpi、gray) 4(300dpi、color) 5(600dpi、gray) 6(600dpi、color) + }; #ifdef UOS diff --git a/hgdriver/hgdev/hg_scanner_200.cpp b/hgdriver/hgdev/hg_scanner_200.cpp index af9835d..fe3c62f 100644 --- a/hgdriver/hgdev/hg_scanner_200.cpp +++ b/hgdriver/hgdev/hg_scanner_200.cpp @@ -789,7 +789,11 @@ int hg_scanner_200::set_leaflet_scan(void) int hg_scanner_200::set_clear_roller_num(void) { - return 0; + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_200::set_clear_history_num(void) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_200::get_device_code(void) { @@ -929,9 +933,9 @@ int hg_scanner_200::set_distortion_check_val(int data) return SCANNER_ERR_DEVICE_NOT_SUPPORT; } -int hg_scanner_200::set_auto_flat(void) +int hg_scanner_200::set_auto_flat(int data) { - USBCB usbcb = { setting3288dsp::START_FLAT,0,0 }; + USBCB usbcb = { setting3288dsp::START_FLAT,data,0 }; int len = sizeof(usbcb); int ret = writeusb(usbcb); diff --git a/hgdriver/hgdev/hg_scanner_200.h b/hgdriver/hgdev/hg_scanner_200.h index f676771..c6715fb 100644 --- a/hgdriver/hgdev/hg_scanner_200.h +++ b/hgdriver/hgdev/hg_scanner_200.h @@ -79,6 +79,7 @@ public: virtual int set_clear_roller_num(void) override; //清除滚轴计数 + virtual int set_clear_history_num(void) override; //清除历史张数 virtual int get_device_code(void); //获取设备编码 不支持 @@ -102,6 +103,8 @@ public: virtual int set_dev_islock_file(int data) override; //设置设备文件 /*/ data:0 未上锁,1 上锁*/ virtual int set_speed_mode(int data) override; //设置速度模式 /*/ 不支持 virtual int get_speed_mode(int &data) override; //设置速度模式 /*/ 不支持 - virtual int set_distortion_check_val(int data) override; //设置畸变矫正 - virtual int set_auto_flat(void); //设置自动平场校正 + virtual int set_distortion_check_val(int data) override; //设置畸变矫正 + virtual int set_auto_flat(int data); //设置自动平场校正 + // data:0(ALL) 1(200dpi、gray) 2(200dpi、color) 3(300dpi、gray) 4(300dpi、color) 5(600dpi、gray) 6(600dpi、color) + }; diff --git a/hgdriver/hgdev/hg_scanner_239.cpp b/hgdriver/hgdev/hg_scanner_239.cpp index 5d97fd9..b0a51b5 100644 --- a/hgdriver/hgdev/hg_scanner_239.cpp +++ b/hgdriver/hgdev/hg_scanner_239.cpp @@ -293,10 +293,9 @@ int hg_scanner_239::get_dpi_color_check_val(int &data) int ret = read_register(ratio, &data); return ret; } -int hg_scanner_239::set_auto_flat(void) +int hg_scanner_239::set_auto_flat(int data) { - int color = 0, - ret = SCANNER_ERR_OK; + int ret = SCANNER_ERR_OK; auto fw = get_firmware_version(); if (fw.empty()) { @@ -304,7 +303,7 @@ int hg_scanner_239::set_auto_flat(void) } if ((fw[5] == 'A' && atoi(fw.substr(6, 4).c_str()) <= 9999)) { - color = 0 == 1 ? 1 : 0; //暂时没有用。 + data = 0 == 1 ? 1 : 0; //暂时没有用。 } if (!wait_usb_.is_waiting()) { @@ -312,7 +311,7 @@ int hg_scanner_239::set_auto_flat(void) } else { - ret = write_register(setting3399::SC_AUTOCORRECT, color); + ret = write_register(setting3399::SC_AUTOCORRECT, data); if (ret != SCANNER_ERR_OK) { return ret; @@ -1478,6 +1477,13 @@ int hg_scanner_239::set_clear_roller_num(void) return ret; } +int hg_scanner_239::set_clear_history_num(void) +{ + int val = 0, + ret = read_register(setting3399::SR_CLR_SCANN_NUM, &val); + + return ret; +} ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// int hg_scanner_239::set_leaflet_scan(void) { diff --git a/hgdriver/hgdev/hg_scanner_239.h b/hgdriver/hgdev/hg_scanner_239.h index 7b15000..aaa1737 100644 --- a/hgdriver/hgdev/hg_scanner_239.h +++ b/hgdriver/hgdev/hg_scanner_239.h @@ -97,6 +97,7 @@ public: virtual int set_leaflet_scan(void) override; //单张扫描 virtual int set_clear_roller_num(void) override; //清除滚轴计数 + virtual int set_clear_history_num(void) override; //清除历史张数 virtual int get_device_code(void); //获取设备编码 不支持 @@ -105,7 +106,7 @@ public: virtual int get_scan_is_sleep(SANE_Bool& type) override; //获取设备是否休眠当中 /*/ type : 0休眠 1唤醒状态*/ virtual int get_sleep_time(int& data) override; //获取功耗模式(休眠) /*/ data > 0*/ virtual int set_sleep_time(int data) override; //设置功耗模式(休眠) /*/ data > 0*/ - virtual int get_history_scan_count(int& data) override; //获取历史扫描张数 /*/ data > 0*/ + virtual int get_history_scan_count(int& data) override; //获取历史扫描张数 /*/ data > 0*/ virtual int get_roller_num(int& data) override; //获取滚轮张数 /*/ data > 0*/ virtual int set_notify_sleep(void) override; //唤醒设备 virtual int get_device_log(string& log) override; //获取设备日志 /*/ log :储存路径*/ @@ -124,6 +125,8 @@ public: virtual int get_speed_mode(int& data)override; //获取速度模式 /*/ data:100,110,120 virtual int set_distortion_check_val(int data) override; //设置畸变矫正值 virtual int get_dpi_color_check_val(int &data); //获取畸变矫正 - virtual int set_auto_flat(void); //设置自动平场校正 + virtual int set_auto_flat(int data); //设置自动平场校正 + // data:0(ALL) 1(200dpi、gray) 2(200dpi、color) 3(300dpi、gray) 4(300dpi、color) 5(600dpi、gray) 6(600dpi、color) + }; diff --git a/hgdriver/hgdev/hg_scanner_300.cpp b/hgdriver/hgdev/hg_scanner_300.cpp index 39f7596..56e376e 100644 --- a/hgdriver/hgdev/hg_scanner_300.cpp +++ b/hgdriver/hgdev/hg_scanner_300.cpp @@ -769,6 +769,11 @@ int hg_scanner_300::set_clear_roller_num(void) USBCB usbcb = { setting3288dsp::CLR_ROLLER_NUM,0,4 }; return writeusb(usbcb); } +int hg_scanner_300::set_clear_history_num(void) +{ + USBCB usbcb = { setting3288dsp::CLR_SCAN_NUM,0,4 }; + return writeusb(usbcb); +} int hg_scanner_300::get_device_code(void) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; @@ -998,9 +1003,13 @@ int hg_scanner_300::get_devs_distortion_check_val(int& data) VLOG_MINI_3(LOG_LEVEL_WARNING, "get_distortion_check_val dpi is:%d,protocol_dpi = %d get_distortion_check_val(%f)\n", resolution_, protocol_dpi, f); return ret; } -int hg_scanner_300::set_auto_flat(void) +int hg_scanner_300::set_auto_flat(int data) { - USBCB usbcb = { setting3288dsp::START_FLAT,0,0 }; + if (data < 0 && data >6) + { + data = 0; + } + USBCB usbcb = { setting3288dsp::START_FLAT,data,0 }; int len = sizeof(usbcb); int ret = writeusb(usbcb); diff --git a/hgdriver/hgdev/hg_scanner_300.h b/hgdriver/hgdev/hg_scanner_300.h index 1182587..cdbdd71 100644 --- a/hgdriver/hgdev/hg_scanner_300.h +++ b/hgdriver/hgdev/hg_scanner_300.h @@ -71,8 +71,8 @@ public: virtual std::string get_serial_num(void)override; virtual std::string get_ip(void)override; - virtual int set_serial_num(string str) override; //设置序列号 - virtual int set_vid_pid(int data) override; //设置vidpid + virtual int set_serial_num(string str) override; //设置序列号 + virtual int set_vid_pid(int data) override; //设置vidpid virtual int get_vid_pid(int& data)override; //获取vidpid /////////////////成功返回:SCANNER_ERR_OK ///////////// @@ -81,6 +81,7 @@ public: virtual int set_clear_roller_num(void) override; //清除滚轴计数 + virtual int set_clear_history_num(void) override; //清除历史张数 virtual int get_device_code(void); //获取设备编码 不支持 @@ -106,6 +107,7 @@ public: virtual int get_speed_mode(int& data)override; //获取速度模式 /*/ data:40,50,60,70 virtual int set_distortion_check_val(int data) override; //设置畸变矫正 virtual int get_devs_distortion_check_val(int& data)override;//获取设备畸变值 float to int; - virtual int set_auto_flat(void)override; //设置自动平场校正 + virtual int set_auto_flat(int data)override; //设置自动平场校正 + // data:0(ALL) 1(200dpi、gray) 2(200dpi、color) 3(300dpi、gray) 4(300dpi、color) 5(600dpi、gray) 6(600dpi、color) }; diff --git a/hgdriver/hgdev/hg_scanner_302.cpp b/hgdriver/hgdev/hg_scanner_302.cpp index e5a620b..40b1210 100644 --- a/hgdriver/hgdev/hg_scanner_302.cpp +++ b/hgdriver/hgdev/hg_scanner_302.cpp @@ -1149,6 +1149,13 @@ int hg_scanner_302::set_clear_roller_num(void) return ret; } +int hg_scanner_302::set_clear_history_num(void) +{ + int val = 0, + ret = read_register(setting3399::SR_CLR_SCANN_NUM, &val); + + return ret; +} int hg_scanner_302::set_serial_num(string str) { int len = str.size(), @@ -1304,7 +1311,7 @@ int hg_scanner_302::set_distortion_check_val(int data) return write_register(retio, *(int*)&save_dpi_color_check_val); } -int hg_scanner_302::set_auto_flat(void) +int hg_scanner_302::set_auto_flat(int data) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } diff --git a/hgdriver/hgdev/hg_scanner_302.h b/hgdriver/hgdev/hg_scanner_302.h index 10003ca..112014e 100644 --- a/hgdriver/hgdev/hg_scanner_302.h +++ b/hgdriver/hgdev/hg_scanner_302.h @@ -102,19 +102,20 @@ public: virtual int set_leaflet_scan(void) override; //单张扫描 virtual int set_clear_roller_num(void) override; //清除滚轴计数 + virtual int set_clear_history_num(void) override; //清除历史张数 - virtual int get_device_code(void); //获取设备编码 不支持 + virtual int get_device_code(void); //获取设备编码 不支持 - virtual int get_scanner_paperon(SANE_Bool& type) override; //获取设备有无纸张 /*/ type : 0无纸 1有纸 */ + virtual int get_scanner_paperon(SANE_Bool& type) override; //获取设备有无纸张 /*/ type : 0无纸 1有纸 */ virtual int get_scan_is_sleep(SANE_Bool& type) override; //获取设备是否休眠当中 /*/ type : 0休眠 1唤醒状态*/ virtual int get_sleep_time(int& data) override; //获取功耗模式(休眠) /*/ data > 0*/ virtual int set_sleep_time(int data) override; //设置功耗模式(休眠) /*/ data > 0*/ - virtual int get_history_scan_count(int& data) override; //获取历史扫描张数 /*/ data > 0*/ + virtual int get_history_scan_count(int& data) override; //获取历史扫描张数 /*/ data > 0*/ virtual int get_roller_num(int& data) override; //获取滚轮张数 /*/ data > 0*/ virtual int set_notify_sleep(void) override; //唤醒设备 virtual int get_device_log(string& log) override; //获取设备日志 /*/ log :储存路径*/ - virtual int set_devreboot(int data) override; //设置设备重启 + virtual int set_devreboot(int data) override; //设置设备重启 virtual int set_devshtudown() override; //设置设备关机 virtual int set_scan_islock(SANE_Bool type) override; //设置设备是否锁定 /*/ type:0解锁,1锁定*/ virtual int get_scan_islock(SANE_Bool& type) override; //获取设备是否锁定 /*/ type:0解锁,1锁定*/ @@ -125,6 +126,8 @@ public: virtual int set_dev_islock_file(int data) override; //设置设备文件 /*/ data:0 未上锁,1 上锁*/ virtual int set_speed_mode(int data) override; //设置速度模式 /*/ data:40,50,60,70 virtual int get_speed_mode(int& data)override; //获取速度模式 /*/ data:40,50,60,70 - virtual int set_distortion_check_val(int data) override; //设置畸变矫正 - virtual int set_auto_flat(void) override; //设置自动平场校正 + virtual int set_distortion_check_val(int data) override; //设置畸变矫正 + virtual int set_auto_flat(int data) override; //设置自动平场校正 + // data:0(ALL) 1(200dpi、gray) 2(200dpi、color) 3(300dpi、gray) 4(300dpi、color) 5(600dpi、gray) 6(600dpi、color) + }; diff --git a/hgdriver/hgdev/hg_scanner_400.cpp b/hgdriver/hgdev/hg_scanner_400.cpp deleted file mode 100644 index 39d47c1..0000000 --- a/hgdriver/hgdev/hg_scanner_400.cpp +++ /dev/null @@ -1,955 +0,0 @@ -#include "hg_scanner_400.h" -#include "../wrapper/hg_log.h" - -#if defined(WIN32) || defined(_WIN64) -#include "scanner_manager.h" -#endif - -//G400 - static std::string jsontext1("{\"global\":{\"device_type\":\"G400\",\"option_count\":62},\"restore\":{\"category\":\"base\",\"title\":\"\\u6062\\u590d\\u9ed8\\u8ba4\\u8bbe\\u7f6e\",\"desc\":\"\\u6062\\u590d\\u9ed8\\u8ba4\\u8bbe\\u7f6e\",\"type\":\"button\",\"cur\":\"button\",\"default\":\"button\",\"size\":0},\"help\":{\"category\":\"advanced\",\"title\":\"\\u5e2e\\u52a9\",\"desc\":\"\\u663e\\u793a\\u8f6f\\u4ef6\\u5e2e\\u52a9\\u6587\\u6863\",\"type\":\"button\",\"cur\":\"true\",\"default\":\"true\",\"size\":4},\"grp-1\":{\"category\":\"base\",\"title\":\"\\u57fa\\u672c\\u8bbe\\u7f6e\",\"type\":\"group\"},\"is-multiout\":{\"category\":\"base\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\",\"desc\":\"\\u540c\\u65f6\\u8f93\\u51fa\\u591a\\u79cd\\u989c\\u8272\\u6a21\\u5f0f\\u7684\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"multiout-type\":{\"category\":\"base\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\\u7c7b\\u578b\",\"desc\":\"\\u9009\\u62e9\\u591a\\u6d41\\u8f93\\u51fa\\u7684\\u7c7b\\u578b\",\"type\":\"string\",\"cur\":\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"default\":\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"size\":32,\"range\":[\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"\\u5f69\\u8272+\\u7070\\u5ea6\",\"\\u5f69\\u8272+\\u9ed1\\u767d\",\"\\u7070\\u5ea6+\\u9ed1\\u767d\"],\"depend_or\":[\"is-multiout==true\"]},\"mode\":{\"category\":\"base\",\"title\":\"\\u989c\\u8272\\u6a21\\u5f0f\",\"desc\":\"\\u9009\\u62e9\\u8272\\u5f69\\u6a21\\u5f0f\",\"type\":\"string\",\"cur\":\"24\\u4f4d\\u5f69\\u8272\",\"default\":\"24\\u4f4d\\u5f69\\u8272\",\"size\":32,\"range\":[\"24\\u4f4d\\u5f69\\u8272\",\"256\\u7ea7\\u7070\\u5ea6\",\"\\u9ed1\\u767d\",\"\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"],\"depend_or\":[\"is-multiout==false\"]},\"binary-threshold\":{\"category\":\"base\",\"title\":\"\\u9ed1\\u767d\\u56fe\\u50cf\\u9608\\u503c\",\"desc\":\"\\u9ad8\\u4e8e\\u8be5\\u9608\\u503c\\u4e3a1\\uff08\\u767d\\uff09\\uff0c\\u4f4e\\u4e8e\\u8be5\\u9608\\u503c\\u4e3a0\\uff08\\u9ed1\\uff09\",\"type\":\"int\",\"cur\":127,\"default\":127,\"size\":4,\"range\":{\"min\":0,\"max\":255},\"depend_or\":[\"is-multiout==true\",\"mode==\\u9ed1\\u767d\"]},\"reverse-bw\":{\"category\":\"base\",\"title\":\"\\u9ed1\\u767d\\u56fe\\u50cf\\u53cd\\u8272\\u8f93\\u51fa\",\"desc\":\"\\u8f93\\u51fa\\u7684\\u9ed1\\u767d\\u56fe\\u50cf\\u4ee5\\u201c1\\u201d\\u4ee3\\u8868\\u9ed1\\u8272\\uff0c\\u201c0\\u201d\\u4ee3\\u8868\\u767d\\u8272\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"is-multiout==true\",\"mode==\\u9ed1\\u767d\"]},\"filter\":{\"category\":\"base\",\"title\":\"\\u7070\\u5ea6\\u6216\\u9ed1\\u767d\\u56fe\\u50cf - \\u9664\\u8272\\u4e0e\\u589e\\u5f3a\",\"desc\":\"\\u6d88\\u9664\\u6216\\u589e\\u5f3a\\u6307\\u5b9a\\u8272\\u5f69\",\"type\":\"string\",\"cur\":\"\\u4e0d\\u9664\\u8272\",\"default\":\"\\u4e0d\\u9664\\u8272\",\"size\":24,\"range\":[\"\\u4e0d\\u9664\\u8272\",\"\\u9664\\u7ea2\\u8272\",\"\\u9664\\u7eff\\u8272\",\"\\u9664\\u84dd\\u8272\",\"\\u7ea2\\u8272\\u589e\\u5f3a\",\"\\u7eff\\u8272\\u589e\\u5f3a\",\"\\u84dd\\u8272\\u589e\\u5f3a\"],\"depend_and\":[\"is-multiout!=true\",\"mode!=24\\u4f4d\\u5f69\\u8272\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-multiout-red\":{\"category\":\"base\",\"title\":\"24\\u4f4d\\u5f69\\u8272\\u56fe\\u50cf - \\u591a\\u6d41\\u8f93\\u51fa\\u9664\\u7ea2\",\"desc\":\"\\u540c\\u65f6\\u8f93\\u51fa\\u5f69\\u8272\\u56fe\\u50cf\\u548c\\u7070\\u5ea6\\u9664\\u7ea2\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-multiout!=true\",\"mode!=256\\u7ea7\\u7070\\u5ea6\",\"!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-answer-sheet-red\":{\"category\":\"base\",\"title\":\"24\\u4f4d\\u5f69\\u8272\\u56fe\\u50cf - \\u7b54\\u9898\\u5361\\u9664\\u7ea2\",\"desc\":\"\\u8f93\\u51fa\\u9664\\u7ea2\\u5f69\\u8272\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-multiout!=true\",\"mode!=256\\u7ea7\\u7070\\u5ea6\",\"!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-erase-bkg\":{\"category\":\"base\",\"title\":\"\\u80cc\\u666f\\u79fb\\u9664\",\"desc\":\"\\u79fb\\u9664\\u6587\\u7a3f\\u80cc\\u666f\\u5e95\\u8272\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-multiout!=true\",\"mode!=256\\u7ea7\\u7070\\u5ea6\",\"!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"bkg-color-range\":{\"category\":\"base\",\"title\":\" \\u80cc\\u666f\\u8272\\u5f69\\u6d6e\\u52a8\\u8303\\u56f4\",\"desc\":\"\\u4e0e\\u80cc\\u666f\\u5e95\\u8272\\u504f\\u5dee\\u5728\\u8be5\\u503c\\u8303\\u56f4\\u5185\\u7684\\u989c\\u8272\\uff0c\\u90fd\\u5c06\\u88ab\\u79fb\\u9664\",\"type\":\"int\",\"cur\":20,\"default\":20,\"size\":4,\"range\":{\"min\":1,\"max\":128},\"depend_or\":[\"is-erase-bkg==true\"]},\"sharpen\":{\"category\":\"base\",\"title\":\"\\u9510\\u5316\\u4e0e\\u6a21\\u7cca\",\"desc\":\"\\u9009\\u62e9\\u9510\\u5316\\u6548\\u679c\\u6216\\u6a21\\u7cca\\u6548\\u679c\",\"type\":\"string\",\"cur\":\"\\u65e0\",\"default\":\"\\u65e0\",\"size\":24,\"range\":[\"\\u65e0\",\"\\u9510\\u5316\",\"\\u8fdb\\u4e00\\u6b65\\u9510\\u5316\",\"\\u6a21\\u7cca\",\"\\u8fdb\\u4e00\\u6b65\\u6a21\\u7cca\"],\"depend_and\":[\"is-multiout!=true\",\"mode!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-morr\":{\"category\":\"base\",\"title\":\"\\u53bb\\u9664\\u6469\\u5c14\\u7eb9\",\"desc\":\"\\u53bb\\u9664\\u56fe\\u50cf\\u4e2d\\u7684\\u6469\\u5c14\\u7eb9\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-multiout!=true\",\"mode!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-grid\":{\"category\":\"base\",\"title\":\"\\u9664\\u7f51\\u7eb9\",\"desc\":\"\\u53bb\\u9664\\u56fe\\u50cf\\u4e2d\\u7684\\u7f51\\u7eb9\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-multiout!=true\",\"mode!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-err-extension\":{\"category\":\"base\",\"title\":\"\\u9519\\u8bef\\u6269\\u6563\",\"desc\":\"\\u4ee5\\u70b9\\u9635\\u5f62\\u5f0f\\u6784\\u5efa\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"mode==\\u9ed1\\u767d\"]},\"is-noise-optimize\":{\"category\":\"base\",\"title\":\"\\u9ed1\\u767d\\u56fe\\u50cf\\u566a\\u70b9\\u4f18\\u5316\",\"desc\":\"\\u53bb\\u9664\\u56fe\\u50cf\\u4e2d\\u7684\\u5b64\\u7acb\\u9ed1\\u70b9\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"mode==\\u9ed1\\u767d\"]},\"noise-size\":{\"category\":\"base\",\"title\":\" \\u566a\\u70b9\\u4f18\\u5316\\u5c3a\\u5bf8\",\"desc\":\"\\u8bbe\\u7f6e\\u9700\\u8981\\u53bb\\u9664\\u7684\\u9ed1\\u8272\\u5b64\\u7acb\\u70b9\\u7684\\u8fde\\u901a\\u4e2a\\u6570\",\"type\":\"int\",\"cur\":30,\"default\":30,\"size\":4,\"range\":{\"min\":10,\"max\":50},\"depend_or\":[\"is-noise-optimize==true\"]},\"paper\":{\"category\":\"base\",\"title\":\"\\u7eb8\\u5f20\\u5c3a\\u5bf8\",\"desc\":\"\\u8bbe\\u7f6e\\u51fa\\u56fe\\u5927\\u5c0f\",\"type\":\"string\",\"cur\":\"\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"default\":\"\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"size\":48,\"range\":[\"A3\",\"A4\",\"A4\\u6a2a\\u5411\",\"A5\",\"A5\\u6a2a\\u5411\",\"A6\",\"A6\\u6a2a\\u5411\",\"B4\",\"B5\",\"B5\\u6a2a\\u5411\",\"B6\",\"B6\\u6a2a\\u5411\",\"Letter\",\"Letter\\u6a2a\\u5411\",\"Double Letter\",\"LEGAL\",\"\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"\\u4e09\\u8054\\u8bd5\\u5377\"]},\"is-custom-area\":{\"category\":\"base\",\"title\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"paper!=\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"!=\\u4e09\\u8054\\u8bd5\\u5377\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\"]},\"tl-x\":{\"category\":\"base\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u5de6\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\\u5de6\\u4e0a\\u89d2x\\u5750\\u6807\",\"type\":\"float\",\"cur\":0.000000,\"default\":0.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":210.000000},\"depend_and\":[\"is-custom-area==true\"]},\"br-x\":{\"category\":\"base\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u53f3\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\\u53f3\\u4e0b\\u89d2x\\u5750\\u6807\",\"type\":\"float\",\"cur\":210.000000,\"default\":210.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":210.000000},\"depend_and\":[\"is-custom-area==true\"]},\"tl-y\":{\"category\":\"base\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u4e0a\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e4"); - static std::string jsontext2("9\\u626b\\u63cf\\u533a\\u57df\\u5de6\\u4e0a\\u89d2y\\u5750\\u6807\",\"type\":\"float\",\"cur\":0.000000,\"default\":0.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":297.000000},\"depend_and\":[\"is-custom-area==true\"]},\"br-y\":{\"category\":\"base\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u4e0b\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\\u53f3\\u4e0b\\u89d2y\\u5750\\u6807\",\"type\":\"float\",\"cur\":297.000000,\"default\":297.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":297.000000},\"depend_and\":[\"is-custom-area==true\"]},\"page\":{\"category\":\"base\",\"title\":\"\\u626b\\u63cf\\u9875\\u9762\",\"desc\":\"\\u8bbe\\u7f6e\\u9875\\u9762\\u626b\\u63cf\\u65b9\\u5f0f\",\"type\":\"string\",\"cur\":\"\\u53cc\\u9762\",\"default\":\"\\u53cc\\u9762\",\"size\":50,\"range\":[\"\\u5355\\u9762\",\"\\u53cc\\u9762\",\"\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u901a\\u7528\\uff09\",\"\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u53d1\\u7968\\u7eb8\\uff09\",\"\\u5bf9\\u6298\"]},\"blank-sensitivity\":{\"category\":\"base\",\"title\":\" \\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\u7075\\u654f\\u5ea6\",\"desc\":\"\\u6570\\u503c\\u8d8a\\u5927\\uff0c\\u5219\\u8d8a\\u5bb9\\u6613\\u8df3\\u8fc7\",\"type\":\"int\",\"cur\":50,\"default\":50,\"size\":4,\"range\":{\"min\":1,\"max\":100},\"depend_or\":[\"page==\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u53d1\\u7968\\u7eb8\\uff09\",\"==\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u901a\\u7528\\uff09\"]},\"fold-type\":{\"category\":\"base\",\"title\":\"\\u5bf9\\u6298\\u6a21\\u5f0f\",\"desc\":\"\",\"type\":\"string\",\"cur\":\"\\u4e0a\\u4e0b\\u5bf9\\u6298\",\"default\":\"\\u4e0a\\u4e0b\\u5bf9\\u6298\",\"size\":200,\"range\":[\"\\u5de6\\u53f3\\u5bf9\\u6298\",\"\\u4e0a\\u4e0b\\u5bf9\\u6298\",\"\\u81ea\\u52a8\\u5bf9\\u6298\"],\"depend_or\":[\"page==\\u5bf9\\u6298\"]},\"resolution\":{\"category\":\"base\",\"title\":\"\\u5206\\u8fa8\\u7387\",\"desc\":\"\\u8bbe\\u7f6e\\u626b\\u63cf\\u56fe\\u50cf\\u7684\\u5206\\u8fa8\\u7387\",\"type\":\"int\",\"cur\":200,\"default\":200,\"size\":4,\"range\":{\"min\":1,\"max\":600}},\"is-exchange\":{\"category\":\"base\",\"title\":\"\\u4ea4\\u6362\\u6b63\\u53cd\\u9762\",\"desc\":\"\\u4ea4\\u6362\\u6bcf\\u5f20\\u6587\\u7a3f\\u7684\\u6b63\\u53cd\\u9762\\u51fa\\u56fe\\u987a\\u5e8f\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"page!=\\u5355\\u9762\"]},\"grp-2\":{\"category\":\"base\",\"title\":\"\\u4eae\\u5ea6\",\"type\":\"group\"},\"is-custom-gamma\":{\"category\":\"base\",\"title\":\"\\u542f\\u7528\\u8272\\u8c03\\u66f2\\u7ebf\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u56fe\\u50cf\\u8272\\u8c03\\u6548\\u679c\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"brightness\":{\"category\":\"base\",\"title\":\"\\u4eae\\u5ea6\\u503c\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u50cf\\u4eae\\u5ea6\",\"type\":\"int\",\"cur\":128,\"default\":128,\"size\":4,\"range\":{\"min\":1,\"max\":255}},\"contrast\":{\"category\":\"base\",\"title\":\"\\u5bf9\\u6bd4\\u5ea6\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u50cf\\u5bf9\\u6bd4\\u5ea6\",\"type\":\"int\",\"cur\":4,\"default\":4,\"size\":4,\"range\":{\"min\":1,\"max\":7}},\"gamma\":{\"category\":\"base\",\"title\":\"\\u4f3d\\u9a6c\\u503c\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u50cf\\u4f3d\\u739b\\u503c\",\"type\":\"float\",\"cur\":1.000000,\"default\":1.000000,\"size\":4,\"range\":{\"min\":0.010000,\"max\":5.000000}},\"grp-3\":{\"category\":\"base\",\"title\":\"\\u56fe\\u50cf\\u5904\\u7406\",\"type\":\"group\"},\"is-anti-skew\":{\"category\":\"base\",\"title\":\"\\u81ea\\u52a8\\u7ea0\\u504f\",\"desc\":\"\\u81ea\\u52a8\\u7ea0\\u6b63\\u6b6a\\u659c\\u9001\\u5165\\u7684\\u6587\\u7a3f\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4,\"depend_or\":[\"page!=\\u5bf9\\u6298\"]},\"is-split\":{\"category\":\"base\",\"title\":\"\\u56fe\\u50cf\\u62c6\\u5206\",\"desc\":\"\\u81ea\\u52a8\\u62c6\\u5206\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"page!=\\u5bf9\\u6298\"]},\"is-erase-black-frame\":{\"category\":\"base\",\"title\":\"\\u6d88\\u9664\\u9ed1\\u6846\",\"desc\":\"\\u6d88\\u9664\\u6587\\u7a3f\\u8303\\u56f4\\u5916\\u7684\\u9ed1\\u8272\\u80cc\\u666f\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4},\"bkg-fill-mode\":{\"category\":\"advanced\",\"title\":\"\\u80cc\\u666f\\u586b\\u5145\\u65b9\\u5f0f\",\"desc\":\"\\u9009\\u62e9\\u80cc\\u666f\\u586b\\u5145\\u65b9\\u5f0f\",\"type\":\"string\",\"cur\":\"\\u51f8\\u591a\\u8fb9\\u5f62\",\"default\":\"\\u51f8\\u591a\\u8fb9\\u5f62\",\"size\":40,\"range\":[\"\\u51f8\\u591a\\u8fb9\\u5f62\",\"\\u51f9\\u591a\\u8fb9\\u5f62\"],\"depend_or\":[\"is-erase-black-frame==true\"]},\"is-fill-color\":{\"category\":\"base\",\"title\":\"\\u8272\\u5f69\\u586b\\u5145\",\"desc\":\"\\u542f\\u7528\\u540e\\u9ed1\\u6846\\u90e8\\u5206\\u5c06\\u586b\\u5145\\u4e3a\\u6587\\u7a3f\\u5e95\\u8272\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-erase-black-frame==true\"]},\"threshold\":{\"category\":\"advanced\",\"title\":\"\\u9608\\u503c\",\"desc\":\"\\u6587\\u7a3f\\u5e95\\u8272\\u4e0e\\u9ed1\\u8272\\u80cc\\u666f\\u7070\\u5ea6\\u503c\\u7684\\u5dee\\u503c\\u5927\\u4e8e\\u8be5\\u503c\\uff0c\\u624d\\u4f1a\\u88ab\\u8bc6\\u522b\\u4e3a\\u6587\\u7a3f\",\"type\":\"int\",\"cur\":40,\"default\":40,\"size\":4,\"range\":{\"min\":30,\"max\":50},\"depend_or\":[\"is-erase-black-frame==true\",\"paper==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"is-anti-skew==true\"]},\"anti-noise-level\":{\"category\":\"advanced\",\"title\":\"\\u80cc\\u666f\\u6297\\u566a\\u7b49\\u7ea7\",\"desc\":\"\\u80fd\\u591f\\u5bb9\\u5fcd\\u7684\\u80cc\\u666f\\u6742\\u8272\\u6761\\u7eb9\\u7684\\u5bbd\\u5ea6\",\"type\":\"int\",\"cur\":8,\"default\":8,\"size\":4,\"range\":{\"min\":1,\"max\":20},\"depend_or\":[\"is-erase-black-frame==true\",\"paper==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"is-anti-skew==true\"]},\"margin\":{\"category\":\"advanced\",\"title\":\"\\u8fb9\\u7f18\\u7f29\\u8fdb\",\"desc\":\"\\u5bfb\\u627e\\u6587\\u7a3f\\u8fb9\\u7f18\\u65f6\\u5bf9\\u8fb9\\u7f18\\u7684\\u4fb5\\u5165\\u7a0b\\u5ea6\",\"type\":\"int\",\"cur\":5,\"default\":5,\"size\":4,\"range\":{\"min\":5,\"max\":30},\"depend_or\":[\"is-erase-black-frame==true\",\"paper==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"is-anti-skew==true\"]},\"is-dark-sample\":{\"category\":\"base\",\"title\":\"\\u6df1\\u8272\\u6837\\u5f20\",\"desc\":\"\\u542f\\u7528\\u8be5\\u6a21\\u5f0f\\u9632\\u6b62\\u6df1\\u8272\\u5e95\\u8272\\u7684\\u6587\\u7a3f\\u56fe\\u50cf\\u88ab\\u8bef\\u5904\\u7406\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"page!=\\u5bf9\\u6298\",\"is-erase-black-frame!=true\",\"paper!=\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"is-anti-skew!=true\"]},\"is-anti-permeate\":{\"category\":\"base\",\"title\":\"\\u9632\\u6b62\\u6e17\\u900f\",\"desc\":\"\\u9632\\u6b62\\u80cc\\u9762\\u56fe\\u6848\\u6e17\\u900f\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"permeate-level\":{\"category\":\"base\",\"title\":\" \\u9632\\u6b62\\u6e17\\u900f\\u7b49\\u7ea7\",\"desc\":\"\\u9009\\u62e9\\u9632\\u6b62\\u6e17\\u900f\\u7684\\u7b49\\u7ea7\",\"type\":\"string\",\"cur\":\"\\u8f83\\u5f31\",\"default\":\"\\u8f83\\u5f31\",\"size\":16,\"range\":[\"\\u5f31\",\"\\u8f83\\u5f31\",\"\\u4e00\\u822c\",\"\\u8f83\\u5f3a\",\"\\u5f3a\"],\"depend_or\":[\"is-anti-permeate==true\"]},\"is-rid-hole-l\":{\"category\":\"base\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u5de6\\u4fa7\",\"desc\":\"\\u7a7f\\u5b54\\u5728\\u7eb8\\u5f20\\u4e0a\\u7684\\u5de6\\u4fa7\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"search-hole-range-l\":{\"category\":\"base\",\"title\":\" \\u5de6\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000},\"depend_or\":[\"is-rid-hole-l==true\"]},\"is-rid-hole-r\":{\"category\":\"base\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u53f3\\u4fa7\",\"desc\":\"\\u7a7f\\u5b54\\u5728\\u7eb8\\u5f20\\u4e0a\\u7684\\u53f3\\u4fa7\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"search-hole-range-r\":{\"category\":\"base\",\"title\":\" \\u53f3\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000},\"depend_or\":[\"is-rid-hole-r==true\"]},\"is-rid-hole-t\":{\"category\":\"base\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u4e0a\\u4fa7\",\"desc\":\"\\u7a7f\\u5b54\\u5728\\u7eb8\\u5f20\\u7684\\u4e0a\\u90e8\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"search-hole-range-t\":{\"category\":\"base\",\"title\":\" \\u4e0a\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000},\"depend_or\":[\"is-rid-hole-t==true\"]},\"is-rid-hole-b\":{\"category\":\"base\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u4e0b\\u4fa7\",\"desc\":\"\\u7a7f\\u5b54\\u5728\\u7eb8\\u5f20\\u7684\\u4e0b\\u90e8\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"search-hole-range-b\":{\"category\":\"base\",\"title\":\" \\u4e0b\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000},\"depend_or\":[\"is-rid-hole-b==true\"]},\"grp-4\":{\"category\":\"base\",\"title\":\"\\u9001\\u7eb8\\u65b9\\u5f0f\\u8bbe\\u7f6e\",\"type\":\"group\"},\"scan-mode\":{\"category\":\"base\",\"title\":\"\\u626b\\u63cf\\u5f20\\u6570\",\"desc\":\"\\u9009\\u62e9\\u6307\\u5b9a\\u6570\\u91cf\\u626b\\u63cf\\u6216\\u8fde\\u7eed\\u626b\\u63cf\",\"type\":\"string\",\"cur\":\"\\u8fde\\u7eed\\u626b\\u63cf\",\"default\":\"\\u8fde\\u7eed\\u626b\\u63cf\",\"size\":32,\"range\":[\"\\u8fde\\u7eed\\u626b\\u63cf\",\"\\u626b\\u63cf\\u6307\\u5b9a\\u5f20\\u6570\"]},\"scan-count\":{\"category\":\"base\",\"title\":\" \\u626b\\u63cf\\u6570\\u91cf\",\"desc\":\"\\u626b\\u63cf\\u6307\\u5b9a\\u6570\\u91cf\",\"type\":\"int\",\"cur\":1,\"default\":1,\"size\":4,\"depend_or\":[\"scan-mode==\\u626b\\u63cf\\u6307\\u5b9a\\u5f20\\u6570\"]},\"direction\":{\"category\":\"base\",\"title\":\"\\u6587\\u7a3f\\u65b9\\u5411\",\"desc\":\"\\u8bbe\\u7f6e\\u56fe\\u50cf\\u7684\\u65b9\\u5411\",\"type\":\"string\",\"cur\":\"0\\u00b0\",\"default\":\"0\\u00b0\",\"size\":40,\"range\":[\"0\\u00b0\",\"90\\u00b0\",\"180\\u00b0\",\"-90\\u00b0\",\"\\u81ea\\u52a8\\u6587\\u672c\\u65b9\\u5411\\u8bc6\\u522b\\u00b0\"]},\"is-rotate-bkg-180\":{\"category\":\"base\",\"title\":\"\\u80cc\\u9762\\u65cb\\u8f6c180\\u00b0\",\"desc\":\"\\u80cc\\u9762\\u626b\\u63cf\\u7684\\u56fe\\u50cf\\u65cb\\u8f6c180\\u00b0\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"page!=\\u5355\\u9762\",\"!=\\u5bf9\\u6298\",\"direction!=\\u81ea\\u52a8\\u6587\\u672c\\u65b9\\u5411\\u8bc6\\u522b\\u00b0\"]},\"is-ultrosonic\":{\"category\":\"base\",\"title\":\"\\u8d85\\u58f0\\u6ce2\\u68c0\\u6d4b\",\"desc\":\"\\u68c0\\u6d4b\\u662f\\u5426\\u51fa\\u73b0\\u53cc\\u5f20\\u9001\\u5165\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4}}"); -//G300 -static std::string jsontext3("{\"global\":{\"device_type\":\"G300\",\"option_count\":63},\"restore\":{\"category\":\"base\",\"title\":\"\\u6062\\u590d\\u9ed8\\u8ba4\\u8bbe\\u7f6e\",\"desc\":\"\\u6062\\u590d\\u9ed8\\u8ba4\\u8bbe\\u7f6e\",\"type\":\"button\",\"cur\":\"button\",\"default\":\"button\",\"size\":0},\"help\":{\"category\":\"advanced\",\"title\":\"\\u5e2e\\u52a9\",\"desc\":\"\\u663e\\u793a\\u8f6f\\u4ef6\\u5e2e\\u52a9\\u6587\\u6863\",\"type\":\"button\",\"cur\":\"true\",\"default\":\"true\",\"size\":4},\"grp-1\":{\"category\":\"base\",\"title\":\"\\u57fa\\u672c\\u8bbe\\u7f6e\",\"type\":\"group\"},\"is-multiout\":{\"category\":\"base\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\",\"desc\":\"\\u540c\\u65f6\\u8f93\\u51fa\\u591a\\u79cd\\u989c\\u8272\\u6a21\\u5f0f\\u7684\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"multiout-type\":{\"category\":\"base\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\\u7c7b\\u578b\",\"desc\":\"\\u9009\\u62e9\\u591a\\u6d41\\u8f93\\u51fa\\u7684\\u7c7b\\u578b\",\"type\":\"string\",\"cur\":\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"default\":\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"size\":32,\"range\":[\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"\\u5f69\\u8272+\\u7070\\u5ea6\",\"\\u5f69\\u8272+\\u9ed1\\u767d\",\"\\u7070\\u5ea6+\\u9ed1\\u767d\"],\"depend_or\":[\"is-multiout==true\"]},\"mode\":{\"category\":\"base\",\"title\":\"\\u989c\\u8272\\u6a21\\u5f0f\",\"desc\":\"\\u9009\\u62e9\\u8272\\u5f69\\u6a21\\u5f0f\",\"type\":\"string\",\"cur\":\"24\\u4f4d\\u5f69\\u8272\",\"default\":\"24\\u4f4d\\u5f69\\u8272\",\"size\":32,\"range\":[\"24\\u4f4d\\u5f69\\u8272\",\"256\\u7ea7\\u7070\\u5ea6\",\"\\u9ed1\\u767d\",\"\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"],\"depend_or\":[\"is-multiout==false\"]},\"binary-threshold\":{\"category\":\"base\",\"title\":\"\\u9ed1\\u767d\\u56fe\\u50cf\\u9608\\u503c\",\"desc\":\"\\u9ad8\\u4e8e\\u8be5\\u9608\\u503c\\u4e3a1\\uff08\\u767d\\uff09\\uff0c\\u4f4e\\u4e8e\\u8be5\\u9608\\u503c\\u4e3a0\\uff08\\u9ed1\\uff09\",\"type\":\"int\",\"cur\":127,\"default\":127,\"size\":4,\"range\":{\"min\":0,\"max\":255},\"depend_or\":[\"is-multiout==true\",\"mode==\\u9ed1\\u767d\"]},\"reverse-bw\":{\"category\":\"base\",\"title\":\"\\u9ed1\\u767d\\u56fe\\u50cf\\u53cd\\u8272\\u8f93\\u51fa\",\"desc\":\"\\u8f93\\u51fa\\u7684\\u9ed1\\u767d\\u56fe\\u50cf\\u4ee5\\u201c1\\u201d\\u4ee3\\u8868\\u9ed1\\u8272\\uff0c\\u201c0\\u201d\\u4ee3\\u8868\\u767d\\u8272\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"is-multiout==true\",\"mode==\\u9ed1\\u767d\"]},\"filter\":{\"category\":\"base\",\"title\":\"\\u7070\\u5ea6\\u6216\\u9ed1\\u767d\\u56fe\\u50cf - \\u9664\\u8272\\u4e0e\\u589e\\u5f3a\",\"desc\":\"\\u6d88\\u9664\\u6216\\u589e\\u5f3a\\u6307\\u5b9a\\u8272\\u5f69\",\"type\":\"string\",\"cur\":\"\\u4e0d\\u9664\\u8272\",\"default\":\"\\u4e0d\\u9664\\u8272\",\"size\":24,\"range\":[\"\\u4e0d\\u9664\\u8272\",\"\\u9664\\u7ea2\\u8272\",\"\\u9664\\u7eff\\u8272\",\"\\u9664\\u84dd\\u8272\",\"\\u7ea2\\u8272\\u589e\\u5f3a\",\"\\u7eff\\u8272\\u589e\\u5f3a\",\"\\u84dd\\u8272\\u589e\\u5f3a\"],\"depend_and\":[\"is-multiout!=true\",\"mode!=24\\u4f4d\\u5f69\\u8272\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-multiout-red\":{\"category\":\"base\",\"title\":\"24\\u4f4d\\u5f69\\u8272\\u56fe\\u50cf - \\u591a\\u6d41\\u8f93\\u51fa\\u9664\\u7ea2\",\"desc\":\"\\u540c\\u65f6\\u8f93\\u51fa\\u5f69\\u8272\\u56fe\\u50cf\\u548c\\u7070\\u5ea6\\u9664\\u7ea2\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-multiout!=true\",\"mode!=256\\u7ea7\\u7070\\u5ea6\",\"!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-answer-sheet-red\":{\"category\":\"base\",\"title\":\"24\\u4f4d\\u5f69\\u8272\\u56fe\\u50cf - \\u7b54\\u9898\\u5361\\u9664\\u7ea2\",\"desc\":\"\\u8f93\\u51fa\\u9664\\u7ea2\\u5f69\\u8272\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-multiout!=true\",\"mode!=256\\u7ea7\\u7070\\u5ea6\",\"!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-erase-bkg\":{\"category\":\"base\",\"title\":\"\\u80cc\\u666f\\u79fb\\u9664\",\"desc\":\"\\u79fb\\u9664\\u6587\\u7a3f\\u80cc\\u666f\\u5e95\\u8272\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-multiout!=true\",\"mode!=256\\u7ea7\\u7070\\u5ea6\",\"!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"bkg-color-range\":{\"category\":\"base\",\"title\":\" \\u80cc\\u666f\\u8272\\u5f69\\u6d6e\\u52a8\\u8303\\u56f4\",\"desc\":\"\\u4e0e\\u80cc\\u666f\\u5e95\\u8272\\u504f\\u5dee\\u5728\\u8be5\\u503c\\u8303\\u56f4\\u5185\\u7684\\u989c\\u8272\\uff0c\\u90fd\\u5c06\\u88ab\\u79fb\\u9664\",\"type\":\"int\",\"cur\":20,\"default\":20,\"size\":4,\"range\":{\"min\":1,\"max\":128},\"depend_or\":[\"is-erase-bkg==true\"]},\"sharpen\":{\"category\":\"base\",\"title\":\"\\u9510\\u5316\\u4e0e\\u6a21\\u7cca\",\"desc\":\"\\u9009\\u62e9\\u9510\\u5316\\u6548\\u679c\\u6216\\u6a21\\u7cca\\u6548\\u679c\",\"type\":\"string\",\"cur\":\"\\u65e0\",\"default\":\"\\u65e0\",\"size\":24,\"range\":[\"\\u65e0\",\"\\u9510\\u5316\",\"\\u8fdb\\u4e00\\u6b65\\u9510\\u5316\",\"\\u6a21\\u7cca\",\"\\u8fdb\\u4e00\\u6b65\\u6a21\\u7cca\"],\"depend_and\":[\"is-multiout!=true\",\"mode!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-morr\":{\"category\":\"base\",\"title\":\"\\u53bb\\u9664\\u6469\\u5c14\\u7eb9\",\"desc\":\"\\u53bb\\u9664\\u56fe\\u50cf\\u4e2d\\u7684\\u6469\\u5c14\\u7eb9\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-multiout!=true\",\"mode!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-grid\":{\"category\":\"base\",\"title\":\"\\u9664\\u7f51\\u7eb9\",\"desc\":\"\\u53bb\\u9664\\u56fe\\u50cf\\u4e2d\\u7684\\u7f51\\u7eb9\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-multiout!=true\",\"mode!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-err-extension\":{\"category\":\"base\",\"title\":\"\\u9519\\u8bef\\u6269\\u6563\",\"desc\":\"\\u4ee5\\u70b9\\u9635\\u5f62\\u5f0f\\u6784\\u5efa\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"mode==\\u9ed1\\u767d\"]},\"is-noise-optimize\":{\"category\":\"base\",\"title\":\"\\u9ed1\\u767d\\u56fe\\u50cf\\u566a\\u70b9\\u4f18\\u5316\",\"desc\":\"\\u53bb\\u9664\\u56fe\\u50cf\\u4e2d\\u7684\\u5b64\\u7acb\\u9ed1\\u70b9\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"mode==\\u9ed1\\u767d\"]},\"noise-size\":{\"category\":\"base\",\"title\":\" \\u566a\\u70b9\\u4f18\\u5316\\u5c3a\\u5bf8\",\"desc\":\"\\u8bbe\\u7f6e\\u9700\\u8981\\u53bb\\u9664\\u7684\\u9ed1\\u8272\\u5b64\\u7acb\\u70b9\\u7684\\u8fde\\u901a\\u4e2a\\u6570\",\"type\":\"int\",\"cur\":30,\"default\":30,\"size\":4,\"range\":{\"min\":10,\"max\":50},\"depend_or\":[\"is-noise-optimize==true\"]},\"paper\":{\"category\":\"base\",\"title\":\"\\u7eb8\\u5f20\\u5c3a\\u5bf8\",\"desc\":\"\\u8bbe\\u7f6e\\u51fa\\u56fe\\u5927\\u5c0f\",\"type\":\"string\",\"cur\":\"\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"default\":\"\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"size\":40,\"range\":[\"A4\",\"A5\",\"A5\\u6a2a\\u5411\",\"A6\",\"A6\\u6a2a\\u5411\",\"B5\",\"B5\\u6a2a\\u5411\",\"B6\",\"B6\\u6a2a\\u5411\",\"\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\"]},\"is-custom-area\":{\"category\":\"base\",\"title\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"paper!=\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\"]},\"tl-x\":{\"category\":\"base\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u5de6\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\\u5de6\\u4e0a\\u89d2x\\u5750\\u6807\",\"type\":\"float\",\"cur\":0.000000,\"default\":0.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":210.000000},\"depend_and\":[\"is-custom-area==true\"]},\"br-x\":{\"category\":\"base\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u53f3\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\\u53f3\\u4e0b\\u89d2x\\u5750\\u6807\",\"type\":\"float\",\"cur\":210.000000,\"default\":210.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":210.000000},\"depend_and\":[\"is-custom-area==true\"]},\"tl-y\":{\"category\":\"base\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u4e0a\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\\u5de6\\u4e0a\\u89d2y\\u5750\\u6807\",\"type\":\"float\",\"cur\":0.000000,\"default\":0.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":297.000000},\"depend_and\":[\"is-custom-area==true\"]},\"br-y\":{\"category\":\"base\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u4e0b\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u5"); -static std::string jsontext4("7df\\u53f3\\u4e0b\\u89d2y\\u5750\\u6807\",\"type\":\"float\",\"cur\":297.000000,\"default\":297.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":297.000000},\"depend_and\":[\"is-custom-area==true\"]},\"page\":{\"category\":\"base\",\"title\":\"\\u626b\\u63cf\\u9875\\u9762\",\"desc\":\"\\u8bbe\\u7f6e\\u9875\\u9762\\u626b\\u63cf\\u65b9\\u5f0f\",\"type\":\"string\",\"cur\":\"\\u53cc\\u9762\",\"default\":\"\\u53cc\\u9762\",\"size\":50,\"range\":[\"\\u5355\\u9762\",\"\\u53cc\\u9762\",\"\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u901a\\u7528\\uff09\",\"\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u53d1\\u7968\\u7eb8\\uff09\",\"\\u5bf9\\u6298\"]},\"blank-sensitivity\":{\"category\":\"base\",\"title\":\" \\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\u7075\\u654f\\u5ea6\",\"desc\":\"\\u6570\\u503c\\u8d8a\\u5927\\uff0c\\u5219\\u8d8a\\u5bb9\\u6613\\u8df3\\u8fc7\",\"type\":\"int\",\"cur\":50,\"default\":50,\"size\":4,\"range\":{\"min\":1,\"max\":100},\"depend_or\":[\"page==\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u901a\\u7528\\uff09\",\"==\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u53d1\\u7968\\u7eb8\\uff09\"]},\"fold-type\":{\"category\":\"base\",\"title\":\"\\u5bf9\\u6298\\u6a21\\u5f0f\",\"desc\":\"\",\"type\":\"string\",\"cur\":\"\\u5de6\\u53f3\\u5bf9\\u6298\",\"default\":\"\\u5de6\\u53f3\\u5bf9\\u6298\",\"size\":50,\"range\":[\"\\u5de6\\u53f3\\u5bf9\\u6298\",\"\\u4e0a\\u4e0b\\u5bf9\\u6298\",\"\\u81ea\\u52a8\\u5bf9\\u6298\"],\"depend_or\":[\"page==\\u5bf9\\u6298\"]},\"resolution\":{\"category\":\"base\",\"title\":\"\\u5206\\u8fa8\\u7387\",\"desc\":\"\\u8bbe\\u7f6e\\u626b\\u63cf\\u56fe\\u50cf\\u7684\\u5206\\u8fa8\\u7387\",\"type\":\"int\",\"cur\":200,\"default\":200,\"size\":4,\"range\":{\"min\":1,\"max\":600}},\"is-exchange\":{\"category\":\"base\",\"title\":\"\\u4ea4\\u6362\\u6b63\\u53cd\\u9762\",\"desc\":\"\\u4ea4\\u6362\\u6bcf\\u5f20\\u6587\\u7a3f\\u7684\\u6b63\\u53cd\\u9762\\u51fa\\u56fe\\u987a\\u5e8f\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"page!=\\u5355\\u9762\"]},\"grp-2\":{\"category\":\"base\",\"title\":\"\\u4eae\\u5ea6\",\"type\":\"group\"},\"is-custom-gamma\":{\"category\":\"base\",\"title\":\"\\u542f\\u7528\\u8272\\u8c03\\u66f2\\u7ebf\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u56fe\\u50cf\\u8272\\u8c03\\u6548\\u679c\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"brightness\":{\"category\":\"base\",\"title\":\"\\u4eae\\u5ea6\\u503c\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u50cf\\u4eae\\u5ea6\",\"type\":\"int\",\"cur\":128,\"default\":128,\"size\":4,\"range\":{\"min\":1,\"max\":255},\"depend_and\":[\"is-custom-gamma==false\"]},\"contrast\":{\"category\":\"base\",\"title\":\"\\u5bf9\\u6bd4\\u5ea6\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u50cf\\u5bf9\\u6bd4\\u5ea6\",\"type\":\"int\",\"cur\":4,\"default\":4,\"size\":4,\"range\":{\"min\":1,\"max\":7},\"depend_and\":[\"is-custom-gamma==false\"]},\"gamma\":{\"category\":\"base\",\"title\":\"\\u4f3d\\u9a6c\\u503c\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u50cf\\u4f3d\\u739b\\u503c\",\"type\":\"float\",\"cur\":1.000000,\"default\":1.000000,\"size\":4,\"range\":{\"min\":0.010000,\"max\":5.000000},\"depend_and\":[\"is-custom-gamma==false\"]},\"grp-3\":{\"category\":\"base\",\"title\":\"\\u56fe\\u50cf\\u5904\\u7406\",\"type\":\"group\"},\"is-anti-skew\":{\"category\":\"base\",\"title\":\"\\u81ea\\u52a8\\u7ea0\\u504f\",\"desc\":\"\\u81ea\\u52a8\\u7ea0\\u6b63\\u6b6a\\u659c\\u9001\\u5165\\u7684\\u6587\\u7a3f\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4,\"depend_or\":[\"page!=\\u5bf9\\u6298\"]},\"is-split\":{\"category\":\"base\",\"title\":\"\\u56fe\\u50cf\\u62c6\\u5206\",\"desc\":\"\\u81ea\\u52a8\\u62c6\\u5206\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"page!=\\u5bf9\\u6298\"]},\"is-photo-mode\":{\"category\":\"base\",\"title\":\"\\u7167\\u7247\\u6a21\\u5f0f\",\"desc\":\"\\u542f\\u7528\\u8be5\\u6a21\\u5f0f\\u53ef\\u4fdd\\u7559\\u56fe\\u50cf\\u539f\\u59cb\\u7ec6\\u8282\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"is-erase-black-frame\":{\"category\":\"base\",\"title\":\"\\u6d88\\u9664\\u9ed1\\u6846\",\"desc\":\"\\u6d88\\u9664\\u6587\\u7a3f\\u8303\\u56f4\\u5916\\u7684\\u9ed1\\u8272\\u80cc\\u666f\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4},\"bkg-fill-mode\":{\"category\":\"advanced\",\"title\":\"\\u80cc\\u666f\\u586b\\u5145\\u65b9\\u5f0f\",\"desc\":\"\\u9009\\u62e9\\u80cc\\u666f\\u586b\\u5145\\u65b9\\u5f0f\",\"type\":\"string\",\"cur\":\"\\u51f8\\u591a\\u8fb9\\u5f62\",\"default\":\"\\u51f8\\u591a\\u8fb9\\u5f62\",\"size\":40,\"range\":[\"\\u51f8\\u591a\\u8fb9\\u5f62\",\"\\u51f9\\u591a\\u8fb9\\u5f62\"],\"depend_or\":[\"is-erase-black-frame==true\"]},\"is-fill-color\":{\"category\":\"base\",\"title\":\"\\u8272\\u5f69\\u586b\\u5145\",\"desc\":\"\\u542f\\u7528\\u540e\\u9ed1\\u6846\\u90e8\\u5206\\u5c06\\u586b\\u5145\\u4e3a\\u6587\\u7a3f\\u5e95\\u8272\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-erase-black-frame==true\"]},\"threshold\":{\"category\":\"advanced\",\"title\":\"\\u9608\\u503c\",\"desc\":\"\\u6587\\u7a3f\\u5e95\\u8272\\u4e0e\\u9ed1\\u8272\\u80cc\\u666f\\u7070\\u5ea6\\u503c\\u7684\\u5dee\\u503c\\u5927\\u4e8e\\u8be5\\u503c\\uff0c\\u624d\\u4f1a\\u88ab\\u8bc6\\u522b\\u4e3a\\u6587\\u7a3f\",\"type\":\"int\",\"cur\":40,\"default\":40,\"size\":4,\"range\":{\"min\":30,\"max\":50},\"depend_or\":[\"is-erase-black-frame==true\",\"paper==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"is-anti-skew==true\"]},\"anti-noise-level\":{\"category\":\"advanced\",\"title\":\"\\u80cc\\u666f\\u6297\\u566a\\u7b49\\u7ea7\",\"desc\":\"\\u80fd\\u591f\\u5bb9\\u5fcd\\u7684\\u80cc\\u666f\\u6742\\u8272\\u6761\\u7eb9\\u7684\\u5bbd\\u5ea6\",\"type\":\"int\",\"cur\":8,\"default\":8,\"size\":4,\"range\":{\"min\":1,\"max\":20},\"depend_or\":[\"is-erase-black-frame==true\",\"paper==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"is-anti-skew==true\"]},\"margin\":{\"category\":\"advanced\",\"title\":\"\\u8fb9\\u7f18\\u7f29\\u8fdb\",\"desc\":\"\\u5bfb\\u627e\\u6587\\u7a3f\\u8fb9\\u7f18\\u65f6\\u5bf9\\u8fb9\\u7f18\\u7684\\u4fb5\\u5165\\u7a0b\\u5ea6\",\"type\":\"int\",\"cur\":5,\"default\":5,\"size\":4,\"range\":{\"min\":5,\"max\":30},\"depend_or\":[\"is-erase-black-frame==true\",\"paper==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"is-anti-skew==true\"]},\"is-dark-sample\":{\"category\":\"base\",\"title\":\"\\u6df1\\u8272\\u6837\\u5f20\",\"desc\":\"\\u542f\\u7528\\u8be5\\u6a21\\u5f0f\\u9632\\u6b62\\u6df1\\u8272\\u5e95\\u8272\\u7684\\u6587\\u7a3f\\u56fe\\u50cf\\u88ab\\u8bef\\u5904\\u7406\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"page!=\\u5bf9\\u6298\",\"is-erase-black-frame!=true\",\"paper!=\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"is-anti-skew!=true\"]},\"is-anti-permeate\":{\"category\":\"base\",\"title\":\"\\u9632\\u6b62\\u6e17\\u900f\",\"desc\":\"\\u9632\\u6b62\\u80cc\\u9762\\u56fe\\u6848\\u6e17\\u900f\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"permeate-level\":{\"category\":\"base\",\"title\":\" \\u9632\\u6b62\\u6e17\\u900f\\u7b49\\u7ea7\",\"desc\":\"\\u9009\\u62e9\\u9632\\u6b62\\u6e17\\u900f\\u7684\\u7b49\\u7ea7\",\"type\":\"string\",\"cur\":\"\\u8f83\\u5f31\",\"default\":\"\\u8f83\\u5f31\",\"size\":16,\"range\":[\"\\u5f31\",\"\\u8f83\\u5f31\",\"\\u4e00\\u822c\",\"\\u8f83\\u5f3a\",\"\\u5f3a\"],\"depend_or\":[\"is-anti-permeate==true\"]},\"is-rid-hole-l\":{\"category\":\"base\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u5de6\\u4fa7\",\"desc\":\"\\u7a7f\\u5b54\\u5728\\u7eb8\\u5f20\\u4e0a\\u7684\\u5de6\\u4fa7\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"search-hole-range-l\":{\"category\":\"base\",\"title\":\" \\u5de6\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000},\"depend_or\":[\"is-rid-hole-l==true\"]},\"is-rid-hole-r\":{\"category\":\"base\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u53f3\\u4fa7\",\"desc\":\"\\u7a7f\\u5b54\\u5728\\u7eb8\\u5f20\\u4e0a\\u7684\\u53f3\\u4fa7\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"search-hole-range-r\":{\"category\":\"base\",\"title\":\" \\u53f3\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000},\"depend_or\":[\"is-rid-hole-r==true\"]},\"is-rid-hole-t\":{\"category\":\"base\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u4e0a\\u4fa7\",\"desc\":\"\\u7a7f\\u5b54\\u5728\\u7eb8\\u5f20\\u7684\\u4e0a\\u90e8\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"search-hole-range-t\":{\"category\":\"base\",\"title\":\" \\u4e0a\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000},\"depend_or\":[\"is-rid-hole-t==true\"]},\"is-rid-hole-b\":{\"category\":\"base\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u4e0b\\u4fa7\",\"desc\":\"\\u7a7f\\u5b54\\u5728\\u7eb8\\u5f20\\u7684\\u4e0b\\u90e8\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"search-hole-range-b\":{\"category\":\"base\",\"title\":\" \\u4e0b\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000},\"depend_or\":[\"is-rid-hole-b==true\"]},\"grp-4\":{\"category\":\"base\",\"title\":\"\\u9001\\u7eb8\\u65b9\\u5f0f\\u8bbe\\u7f6e\",\"type\":\"group\"},\"scan-mode\":{\"category\":\"base\",\"title\":\"\\u626b\\u63cf\\u5f20\\u6570\",\"desc\":\"\\u9009\\u62e9\\u6307\\u5b9a\\u6570\\u91cf\\u626b\\u63cf\\u6216\\u8fde\\u7eed\\u626b\\u63cf\",\"type\":\"string\",\"cur\":\"\\u8fde\\u7eed\\u626b\\u63cf\",\"default\":\"\\u8fde\\u7eed\\u626b\\u63cf\",\"size\":32,\"range\":[\"\\u8fde\\u7eed\\u626b\\u63cf\",\"\\u626b\\u63cf\\u6307\\u5b9a\\u5f20\\u6570\"]},\"scan-count\":{\"category\":\"base\",\"title\":\" \\u626b\\u63cf\\u6570\\u91cf\",\"desc\":\"\\u626b\\u63cf\\u6307\\u5b9a\\u6570\\u91cf\",\"type\":\"int\",\"cur\":1,\"default\":1,\"size\":4,\"depend_or\":[\"scan-mode==\\u626b\\u63cf\\u6307\\u5b9a\\u5f20\\u6570\"]},\"direction\":{\"category\":\"base\",\"title\":\"\\u6587\\u7a3f\\u65b9\\u5411\",\"desc\":\"\\u8bbe\\u7f6e\\u56fe\\u50cf\\u7684\\u65b9\\u5411\",\"type\":\"string\",\"cur\":\"0\\u00b0\",\"default\":\"0\\u00b0\",\"size\":40,\"range\":[\"0\\u00b0\",\"90\\u00b0\",\"180\\u00b0\",\"-90\\u00b0\",\"\\u81ea\\u52a8\\u6587\\u672c\\u65b9\\u5411\\u8bc6\\u522b\\u00b0\"]},\"is-rotate-bkg-180\":{\"category\":\"base\",\"title\":\"\\u80cc\\u9762\\u65cb\\u8f6c180\\u00b0\",\"desc\":\"\\u80cc\\u9762\\u626b\\u63cf\\u7684\\u56fe\\u50cf\\u65cb\\u8f6c180\\u00b0\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"page!=\\u5355\\u9762\",\"!=\\u5bf9\\u6298\",\"direction!=\\u81ea\\u52a8\\u6587\\u672c\\u65b9\\u5411\\u8bc6\\u522b\\u00b0\"]},\"is-ultrosonic\":{\"category\":\"base\",\"title\":\"\\u8d85\\u58f0\\u6ce2\\u68c0\\u6d4b\",\"desc\":\"\\u68c0\\u6d4b\\u662f\\u5426\\u51fa\\u73b0\\u53cc\\u5f20\\u9001\\u5165\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4}}"); - -namespace settingsdsp_400 -{ - scanner_err device_status_to_hg_err(int usbdata) - { - scanner_err code = SCANNER_ERR_NO_DATA; - switch (usbdata) - { - case setting3288dsp::HAVE_IMAGE: - code = SCANNER_ERR_OK; - break; - case setting3288dsp::STOP_SCAN: - code = SCANNER_ERR_DEVICE_STOPPED; - break; - case setting3288dsp::COUNT_MODE: - code = SCANNER_ERR_DEVICE_COUNT_MODE; - break; - case setting3288dsp::NO_FEED: - code = SCANNER_ERR_DEVICE_NO_PAPER; - break; - case setting3288dsp::OPEN_COVER: - code = SCANNER_ERR_DEVICE_COVER_OPENNED; - break; - case setting3288dsp::FEED_IN_ERROR: - code = SCANNER_ERR_DEVICE_FEEDING_PAPER; - break; - case setting3288dsp::PAPER_JAM: - code = SCANNER_ERR_DEVICE_PAPER_JAMMED; - break; - case setting3288dsp::DETECT_DOUBLE_FEED: - code = SCANNER_ERR_DEVICE_DOUBLE_FEEDING; - break; - case setting3288dsp::DETECT_STAPLE: - code = SCANNER_ERR_DEVICE_STAPLE_ON; - break; - case setting3288dsp::PAPER_SKEW: - code = SCANNER_ERR_DEVICE_PAPER_SKEW; - break; - case setting3288dsp::HARDWARE_ERROR: - code = SCANNER_ERR_DEVICE_NOT_SUPPORT; - break; - case setting3288dsp::PC_SCAN_BUSY_or_ERROR: - code = SCANNER_ERR_DEVICE_PC_BUSY; - break; - case setting3288dsp::SIZE_ERROR: - code = SCANNER_ERR_DEVICE_SIZE_CHECK; - break; - case setting3288dsp::AUTO_FLAT_FINISHED: - code = SCANNER_ERR_DEVICE_AUTO_FAIL_OVER; - break; - case setting3288dsp::AUTO_FLATTING: - code = SCANNER_ERR_DEVICE_AUTO_FAIL_INFO; - break; - default: - code = SCANNER_ERR_NO_DATA; - break; - } - - return code; - } -} -hg_scanner_400::hg_scanner_400(const char* dev_name, int pid, usb_io* io) : hg_scanner(G100Serial, dev_name, io, pid), papersize(pid) -{ - initdevice(); -#ifndef MAPPING_FUNCTION_IN_BASE - init_setting_map(setting_map_, ARRAY_SIZE(setting_map_));//优先初始化 -#endif - if (init_settings(pid_)) - if (pid_ == 0x400) - init_settings((jsontext1 + jsontext2).c_str()); - else - init_settings((jsontext3 + jsontext4).c_str()); -} -hg_scanner_400::~hg_scanner_400() -{} -int hg_scanner_400::on_scanner_closing(bool force) -{ - return SCANNER_ERR_OK; -} -void hg_scanner_400::thread_handle_usb_read(void) -{ - int ret = SCANNER_ERR_OK, - status = SCANNER_ERR_OK; - StopWatch sw; - SANE_Image_Statu statu = SANE_Image_Statu_OK; - - std::vector savestatus_; - while (run_) - { - USBCB usb={0}; - ret = get_scanner_status(usb); - //printf("usb.u32_Data = %d ret = %d\r\n",usb.u32_Data,ret); - ////如果设备出现卡纸 或者双张等设备信息问题,需要等到设备进行发送stop才能停止。 所以始终以 "停止" 消息为结束信号 - ////如果有图的情况下,并且卡纸或双张等,设备会先发送卡纸双张信息。所以接受到错误信息之后,仍需要把图像取出来。 - - if (ret == SCANNER_ERR_DEVICE_STOPPED) - { - if (!savestatus_.empty()) - status_ = savestatus_[0]; - else - status_ = SCANNER_ERR_OK; - - savestatus_.clear(); - break; - } - if (ret != SCANNER_ERR_OK && ret != SCANNER_ERR_DEVICE_STOPPED && ret != SCANNER_ERR_NO_DATA) - { - //statu = last_usb_image_statu(ret); - savestatus_.push_back(ret); - } - else if (ret != SCANNER_ERR_NO_DATA && ret != SCANNER_ERR_DEVICE_AUTO_FAIL_OVER && ret != SCANNER_ERR_DEVICE_AUTO_FAIL_INFO) - { - statu = SANE_Image_Statu_OK; - } - else if (ret == SCANNER_ERR_DEVICE_AUTO_FAIL_OVER) - { - is_auto_falt = false; - - status_ = ret; - std::string msg; - int count = usb.u32_Count; - msg.resize(count); - - ret = io_->read_bulk(&msg[0], &count); - if (ret == SCANNER_ERR_OK) - notify_ui_working_status(msg.c_str(), SANE_EVENT_STATUS, status_); - else - status_ = ret; - - break; - } - else if (ret == SCANNER_ERR_DEVICE_AUTO_FAIL_INFO) - { - sw.reset(); - status_ = ret; - - std::string msg; - int count = usb.u32_Count; - msg.resize(count); - ret = io_->read_bulk(&msg[0], &count); - if (ret == SCANNER_ERR_OK) - { - status_ = ret = SCANNER_ERR_DEVICE_AUTO_FAIL_INFO; - char buf[1024]; - strcpy(buf, msg.c_str()); - notify_ui_working_status(buf, SANE_EVENT_STATUS, status_); - } - else - { - status_ = ret; - break; - } - } - - if (sw.elapsed_s() > 30)//防止状态信息一直取不上来导致卡死 - { - status_ = !savestatus_.empty() ? savestatus_[0] : SCANNER_ERR_TIMEOUT; - savestatus_.clear(); - hg_log::log(LOG_LEVEL_WARNING, "get status timeout,get image out\n"); - break; - } - - if (ret == SCANNER_ERR_OK && usb.u32_Count > 0) - { - int totalNum = usb.u32_Count & 0x3fffffff; // 2022-08-04: 兼容Android,默认图片大小均在1GB以内 - if (totalNum) - { - std::shared_ptr imagedata(aquire_memory(totalNum)); - - if (!imagedata.get()) - { - status_ = SCANNER_ERR_INSUFFICIENT_MEMORY; - break; - } - - imagedata->set_image_statu(statu); - ret = get_img_data(imagedata); - // io_->set_timeout(200); - - if (ret == SCANNER_ERR_OK) - { - ret = pop_image(); - sw.reset(); - if (ret != SCANNER_ERR_OK) - { - status_ = ret; - break; - } - } - else - { - status_ = ret; - break; - } - } - } - this_thread::sleep_for(chrono::milliseconds(10)); - } -} -int hg_scanner_400::start(void) -{ - bool handled = false; - int ret = try_third_app_handle_start(handled), - count = -1, - val = 1; - - // for third-sane-app invoking, added on 2022-05-19 - if (handled) - return ret; - - user_cancel_ = false; - ret = writedown_device_configuration(true); - if (ret == SCANNER_ERR_OK) - writedown_image_configuration(); - else - { - status_ = ret; - return ret; - } - - ret = get_scan_is_sleep(val); - if (!val) - { - status_ = SCANNER_ERR_DEVICE_SLEEPING; - //notify_ui_working_status(STATU_DESC_SCANNER_ERR_DEVICE_SLEEPING, SANE_EVENT_ERROR, status_); - //notify_ui_working_status(STATU_DESC_SCANNER_ERR_DEVICE_NOTIFY_SLEEP, SANE_EVENT_ERROR, status_); - VLOG_MINI_1(LOG_LEVEL_WARNING, "device start status is(%s)\n", hg_log::lang_load(ID_STATU_DESC_SCANNER_ERR_DEVICE_SLEEPING)); - return status_; - } - ret = get_scanner_paperon(val); - if (!val) - { - status_ = SCANNER_ERR_DEVICE_NO_PAPER; - //notify_ui_working_status(STATU_DESC_SCANNER_ERR_DEVICE_NO_PAPER, SANE_EVENT_ERROR, status_); - VLOG_MINI_1(LOG_LEVEL_WARNING, "device start status is(%s)\n", hg_log::lang_load(ID_STATU_DESC_SCANNER_ERR_DEVICE_NO_PAPER)); - return status_; - } - - USBCB usb = { setting3288dsp::START_COMMAND, img_conf_.scannum, 0 }; - ret = writeusb(usb); - //io_->set_timeout(1000); - VLOG_MINI_1(LOG_LEVEL_WARNING, "device start is.(%s)\n", hg_scanner_err_name(ret)); - - if(ret == SCANNER_ERR_OK) - { - //status_ = SCANNER_ERR_DEVICE_BUSY; - wait_usb_.notify(); - std::this_thread::sleep_for(std::chrono::milliseconds(300)); - ret = try_third_app_after_start(ret); - } - else - status_ = ret; - VLOG_MINI_1(LOG_LEVEL_WARNING, "start result: %s\n", hg_scanner_err_name(ret)); - - return ret; -} -int hg_scanner_400::stop(void) -{ - int ret = SCANNER_ERR_OK; - - USBCB usbcb = { setting3288dsp::STOP, 0, 0 }; - ret = writeusb(usbcb); - - if (status_ == SCANNER_ERR_DEVICE_BUSY) - { - VLOG_MINI_1(LOG_LEVEL_WARNING, "stop !but device is busy ,so sleep 2s(%s)\n", hg_scanner_err_name(status_)); - std::this_thread::sleep_for(std::chrono::milliseconds(2000)); - } - user_cancel_ = true; - if (ret == SCANNER_ERR_OK) - { - status_ = SCANNER_ERR_DEVICE_STOPPED; - VLOG_MINI_1(LOG_LEVEL_WARNING, "stop device:(%s)\n", hg_scanner_err_name(status_)); - } - //notify_ui_working_status("取消扫描", SANE_EVENT_STATUS, status_); - //final_imgs_.clear(); - - return status_; -} -int hg_scanner_400::writeusb(USBCB &usb) -{ - std::lock_guard lock(io_lock_); - - int ret = SCANNER_ERR_OK; - int len = sizeof(usb); - - ret = io_->write_bulk(&usb,&len); - if (ret) - { - status_ = ret; - } - - return ret; -} -int hg_scanner_400::readusb(USBCB &usb) -{ - std::lock_guard lock(io_lock_); - - int ret = SCANNER_ERR_OK; - int len = sizeof(USBCB); - - ret = io_->read_bulk(&usb,&len); - if (ret) - { - status_ = ret; - } - - return ret; -} -int hg_scanner_400::pop_image() -{ - int ret = SCANNER_ERR_OK; - - USBCB usbcb = { setting3288dsp::POP_IMAGE, 0, 0}; - ret = writeusb(usbcb); - - return ret; -} -int hg_scanner_400::get_scanner_status(USBCB &usb) -{ - int ret = SCANNER_ERR_OK; - - usb = { setting3288dsp::GET_DSP_STATUS, 0, 0}; - - ret = writeusb(usb); - if (ret != SCANNER_ERR_OK) - return ret; - - //io_->set_timeout(500); - - ret = readusb(usb); - if (ret != SCANNER_ERR_OK) - { - status_ = ret; - return ret; - } - scanner_err code = settingsdsp_400::device_status_to_hg_err(usb.u32_Data); - return code ; -} -int hg_scanner_400::get_img_data(std::shared_ptr &imagedata) -{ - int total = imagedata->size(), - ret = SCANNER_ERR_OK, - index = 0, - block = total; - - USBCB usb{ setting3288dsp::GET_IMAGE, 0, total}; - ret = writeusb(usb); - if (ret != SCANNER_ERR_OK) - { - status_ = ret; - return ret; - } - //io_->set_timeout(500); - - while (total > 0) - { - block = 512 * 1024; - - if (total < block) - block = total; - - unsigned int size = block; - void* buf = imagedata->data(index, &size); - if (!buf) - { - VLOG_MINI_3(LOG_LEVEL_FATAL, "memory(0x%08x + %u) fatal when read USB image %d !!!\n", index, block, usb_img_index_); - ret = SCANNER_ERR_INSUFFICIENT_MEMORY; - break; - } - block = size; - ret = io_->read_bulk(buf, &block); - - if (ret != SCANNER_ERR_OK) - { - status_ = ret; - return ret; - } - index += block; - total -= block; - } - if (ret == SCANNER_ERR_OK) - { - ret = save_usb_data(imagedata); - } - status_ = ret; - - return ret; -} -int hg_scanner_400::writedown_device_configuration(bool type,setting_hardware::HGSCANCONF_3288 *d) -{ - if (!type) - return SCANNER_ERR_OK; - - int ret = SCANNER_ERR_OK, - len = 0; - SIZE size; - if (!d) - { - dsp_config.params_3288.lutmode = keep_watermark_; - d = &dsp_config; - } - if (is_multiout) - { - d->params_3288.isColor = image_prc_param_.bits.multi_out == MULTI_COLOR_AND_BW ? 0 : 1; - } - else if ((image_prc_param_.bits.color_mode == COLOR_MODE_256_GRAY - || image_prc_param_.bits.color_mode == COLOR_MODE_BLACK_WHITE) - && image_prc_param_.bits.rid_color != RID_COLOR_NONE) - { - d->params_3288.isColor = 1; - } - if (paper_size_ == TwSS::USStatement || paper_size_ == TwSS::MaxSize) - { - d->params_3288.pageSize = setting3288dsp::G400_MAXSIZE; - } - size = papersize.GetPaperSize(TwSS::A4, 200, img_conf_.paperAlign); - d->params_3288.dstHeight = (int)((size.cy + 200) / 100); //非安卓可不需要 - - USBCB usbcb = { setting3288dsp::CONFIGURED_DATA, d->value, 0 }; - len = sizeof(USBCB); - ret = io_->write_bulk(&usbcb, &len); - - VLOG_MINI_1(LOG_LEVEL_WARNING, "writedown_device_configuration is .(%s)\n", hg_scanner_err_name(ret)); - - return ret; -} -int hg_scanner_400::on_color_mode_changed(int& color_mode) -{ - dsp_config.params_3288.isColor = (color_mode == COLOR_MODE_BLACK_WHITE || color_mode == COLOR_MODE_256_GRAY) ? 0 : 1; - return SCANNER_ERR_OK; -} -int hg_scanner_400::on_paper_changed(int& paper) -{ - bool exact = true; - int ind = hgpaper_to_devspaper(paper_map_3288, ARRAY_SIZE(paper_map_3288),paper, &exact, &paper_size_), - ret = exact ? SCANNER_ERR_OK : SCANNER_ERR_NOT_EXACT; - - if (dsp_config.params_3288.pageSize != paper_map_3288[ind].dev_value) - { - int old = dsp_config.params_3288.pageSize; - - dsp_config.params_3288.pageSize = paper_map_3288[ind].dev_value; - //printf("dsp_config.params_3288.paper :%d\r\n",dsp_config.params_3288.pageSize); - ret = writedown_device_configuration(); - if (ret) - { - dsp_config.params_3288.pageSize = old; - for (int i = 0; i < ARRAY_SIZE(paper_map_3288); ++i) - { - if (paper_map_3288[i].dev_value == old) - { - paper = paper_map_3288[i].paper; - break; - } - } - } - else if (!exact) - ret = SCANNER_ERR_NOT_EXACT; - } - return ret; -} -int hg_scanner_400::on_paper_check_changed(bool& check) -{ - int ret = SCANNER_ERR_OK; - if(dsp_config.params_3288.enableSizeDetect ^ check) - { - dsp_config.params_3288.enableSizeDetect = check; - ret = writedown_device_configuration(); - if (ret) - { - dsp_config.params_3288.enableSizeDetect = !check; - check = dsp_config.params_3288.enableSizeDetect; - } - } - return ret; -} -int hg_scanner_400::on_resolution_changed(int& dpi) -{ - int ret = SCANNER_ERR_OK; - dsp_config.params_3288.dpi = 1; - ret = writedown_device_configuration(true); - return ret; -} -int hg_scanner_400::on_ultrasonic_check_changed(bool& check) -{ - int ret = SCANNER_ERR_OK; - - if (dsp_config.params_3288.doubleFeeded ^ check) - { - dsp_config.params_3288.doubleFeeded = check; - ret = writedown_device_configuration(); - if (ret) - { - dsp_config.params_3288.doubleFeeded = !check; - check = dsp_config.params_3288.doubleFeeded; - } - } - - return ret; -} -int hg_scanner_400::agreement(TwSS tw,int align) -{ - int ret = SCANNER_ERR_OK; - SIZE size; - setting_hardware::HGSCANCONF_3288 d; - d = dsp_config; - size = papersize.GetPaperSize(img_conf_.papertype,200,img_conf_.paperAlign); - dsp_config.params_3288.dstHeight = (int)((size.cy + 200)/100); - if (img_conf_.is_autocrop) - { - dsp_config.params_3288.pageSize = setting3288dsp::G400_AUTO; - } - //if (image_prc_param_.bits.rid_color != RID_COLOR_NONE && img_conf_.pixtype != 2) - //{ - // d.params_3288.isColor = 1; - //} - // - ret = writedown_device_configuration(true,&d); - //io_->set_timeout(200); - - return ret; -} -int hg_scanner_400::initdevice() -{ - dsp_config.value = 0; - dsp_config.params_3288.enableLed = 1; - dsp_config.params_3288.isCorrect = 1; - dsp_config.params_3288.reversed1 = 0; - dsp_config.params_3288.reversed2 = 0; - dsp_config.params_3288.enableSizeDetect =0; - //writedown_device_configuration(true); - printf_devconfig(); - - return SCANNER_ERR_OK; -} -void hg_scanner_400::writedown_image_configuration(void) -{ - SCANCONF ic; - int len = sizeof(ic); - - bzero(&ic, len); - - ic.contrast = contrast_; - ic.brightness = bright_; - - if (image_prc_param_.bits.text_direction != TEXT_DIRECTION_AUTO) - ic.imageRotateDegree = image_prc_param_.bits.text_direction; - else - ic.imageRotateDegree = 0; - - if (test_1_paper_) - { - LOG_INFO(LOG_LEVEL_DEBUG_INFO, "scanning mode: testing ONE paper ...\n"); - ic.scannum = 1; - } - else - ic.scannum = scan_count_; - ic.en_sizecheck = dsp_config.params_3288.enableSizeDetect; - ic.hardwarecaps.en_skrewdetect = 0; - ic.hardwarecaps.en_doublefeed = dsp_config.params_3288.doubleFeeded; - ic.hardwarecaps.en_stapledetect = 0; - ic.hardwarecaps.skrewdetectlevel = 0; - // ic.hardwarecaps.is_autopaper = dsp_config_.params_dsp.is_autopaper; - ic.hardwarecaps.capturepixtype = 0; //暂无参数 获取图像类型 - ic.hardwarecaps.lowpowermode = LowPowerMode::Min_None; //暂无参数 设置休眠时间 两个参数3399未使用 - image_configuration(ic); - int ret = agreement((TwSS)img_conf_.papertype, img_conf_.paperAlign); -} -void hg_scanner_400::printf_devconfig(setting_hardware::HGSCANCONF_3288 *d) -{ - if (!d) - d = &dsp_config; - - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\r\ndsp_config.params_3288.doubleFeeded:%d\r\n",d->params_3288.doubleFeeded); - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.dpi:%d\r\n",d->params_3288.dpi); - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.dstHeight:%d\r\n",d->params_3288.dstHeight); - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.enableLed:%d\r\n",d->params_3288.enableLed); - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.enableStable:%d\r\n",d->params_3288.enableStable); - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.isColor:%d\r\n",d->params_3288.isColor); - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.isCorrect:%d\r\n",d->params_3288.isCorrect); - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.pageSize:%d\r\n",d->params_3288.pageSize); - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.reversed1:%d\r\n",d->params_3288.reversed1); - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.reversed2:%d\r\n",d->params_3288.reversed2); - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.enableSizeDetect:%d\r\n",d->params_3288.enableSizeDetect); - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.value:%d\r\n",d->value); -} -std::string hg_scanner_400::get_firmware_version() -{ - char buf[20] = { 0 }; - int ret = SCANNER_ERR_OK, - len = 10; //协议定义长度为10 100 200 =10 - USBCB cmd = { setting3288dsp::GET_FW_VERSION, len, 0,}; - - ret = writeusb(cmd); - if(ret == SCANNER_ERR_OK) - ret = io_->read_bulk(buf, &len); - - return buf; -} - std::string hg_scanner_400::get_serial_num() - { - char buf[20] = { 0 }; - int ret = SCANNER_ERR_OK, - len = 14; - USBCB cmd = { setting3288dsp::GET_SERIAL, len, 0,}; - - ret = writeusb(cmd); - if (ret == SCANNER_ERR_OK) - { - std::lock_guard lock(io_lock_); - ret = io_->read_bulk(buf, &len); - } - VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "get serial num = %s, serial num = %s\n", hg_scanner_err_name(ret), buf); - - return buf; - } - std::string hg_scanner_400::get_ip(void) - { - return ""; - } - int hg_scanner_400::set_serial_num(string str) - { - std::lock_guard lock(io_lock_); - - USBCB usbcb = { setting3288dsp::SEND_SERIAL,0,14 }; - int len = sizeof(usbcb), - ret = SCANNER_ERR_OK; - ret = io_->write_bulk(&usbcb, &len); - if (ret == SCANNER_ERR_OK) - { - len = str.size(); - - ret = io_->write_bulk(&str, &len); - } - return ret; - - } - int hg_scanner_400::set_vid_pid(int data) - { - USBCB usbcb = { setting3288dsp::SET_USB_INFOR_VIDPID,0,0 }; - int len = sizeof(usbcb); - return io_->write_bulk(&usbcb, &len); - } - int hg_scanner_400::get_vid_pid(int& data) - { - USBCB usbcb = { setting3288dsp::GET_USB_INFOR_VIDPID,0,0 }; - int ret = SCANNER_ERR_OK, - len = sizeof(usbcb); - - io_->read_bulk(&usbcb, &len); - if (ret == SCANNER_ERR_OK) - { - data = usbcb.u32_Data; - } - return ret; - } -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -int hg_scanner_400::set_leaflet_scan(void) -{ - int ret = SCANNER_ERR_OK; - test_1_paper_ = true; - - ret = start(); - return ret; -} - -int hg_scanner_400::set_clear_roller_num(void) -{ - USBCB usbcb = { setting3288dsp::CLR_ROLLER_NUM,0,4 }; - return writeusb(usbcb); -} - -int hg_scanner_400::get_device_code(void) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_400::get_sleep_time(int &getsleepime) -{ - int ret = SCANNER_ERR_OK, - len = 0; - - USBCB usbcb = { setting3288dsp::GET_SLEEP_TIME, 0, 0}; - ret = writeusb(usbcb); - if (ret != SCANNER_ERR_OK) - { - return ret; - } - len = sizeof(usbcb); - ret = io_->read_bulk(&usbcb,&len); - if (ret == SCANNER_ERR_OK) - { - getsleepime = usbcb.u32_Data; - } - return ret; -} -int hg_scanner_400::set_sleep_time(int setsleepime) -{ - USBCB usbcb = { setting3288dsp::SET_SLEEP_TIME,setsleepime, 0}; - return writeusb(usbcb); -} - -int hg_scanner_400::get_scanner_paperon(SANE_Bool& type) -{ - int ret = SCANNER_ERR_OK, - len = 0; - - USBCB usbcb = { setting3288dsp::GET_PAPERFEEDER_STATUS, 0, 0 }; - len = sizeof(USBCB); - ret = writeusb(usbcb); - - if (ret == SCANNER_ERR_OK) - { - std::lock_guard lock(io_lock_); - ret = io_->read_bulk(&usbcb, &len); - type = usbcb.u32_Data == 0 ? false : true; - } - //if (usbcb.u32_Data == 0) - // ret = SCANNER_ERR_DEVICE_NO_PAPER; - //else - // ret = SCANNER_ERR_OK; - return ret; -} - -int hg_scanner_400::get_scan_is_sleep(SANE_Bool& type) -{ - int ret = SCANNER_ERR_OK, - len = 0; - - USBCB usbcb = { setting3288dsp::ACTIVE_SCANNER, 0, 0 }; - len = sizeof(USBCB); - ret = writeusb(usbcb); - - - if (ret == SCANNER_ERR_OK) - { - std::lock_guard lock(io_lock_); - ret = io_->read_bulk(&usbcb, &len); - } - if (ret == SCANNER_ERR_OK) - { - if (usbcb.u32_Data == 0x10) - type = true; - //return SCANNER_ERR_OK; - else if (usbcb.u32_Data == 0x100) - type = false; - //return SCANNER_ERR_DEVICE_SLEEPING; - } - return ret; -} -////////////////////////////////start///////////////////////////// -///此款设备无此功能暂时预留 -int hg_scanner_400::on_staple_check_changed(bool& check) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_400::on_skew_check_changed(bool& check) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_400::on_skew_check_level_changed(int& check) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_400::on_set_feedmode(int feedmode) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_400::on_pic_type(bool& pic) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_400::on_pick_paper(bool autostrength) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_400::on_pick_paper_threshold(double threshold) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_400::on_is_auto_paper(bool isautopaper) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_400::on_cis_get_image(bool isautopaper) -{ - is_cis_image = isautopaper; - dsp_config.params_3288.isCorrect = isautopaper == true ? false : true; //false设置获取cis原图,true校正之后的图 - return writedown_device_configuration(); -} -int hg_scanner_400::on_get_feedmode(int &feedmode) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -/////////////////////////////////////over/////////////////////////// -int hg_scanner_400::get_device_log(string &log) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_400::set_devreboot(int data) -{ - USBCB usbcb = { setting3288dsp::REBOOT,data ,0 }; - return writeusb(usbcb); -} -int hg_scanner_400::set_devshtudown() -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_400::set_scan_islock(SANE_Bool type) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_400::get_scan_islock(SANE_Bool& type) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_400::set_scan_lock_check_val(string str) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_400::set_firmware_upgrade(std::string str) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_400::set_clean_paper_road() -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_400::get_dev_islock_file(int& data) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_400::set_dev_islock_file(int data) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_400::set_speed_mode(int data) -{ - int ret = SCANNER_ERR_OK, - len = 0; - - USBCB usbcb = { setting3288dsp::SET_SPEED_MODE,data,len }; - len = sizeof(usbcb); - ret = io_->write_bulk(&usbcb, &len); - return ret; -} -int hg_scanner_400::get_speed_mode(int& data) -{ - int ret = SCANNER_ERR_OK, - len = 0; - - USBCB usbcb = { setting3288dsp::GET_SPEED_MODE,0,0 }; - len = sizeof(usbcb); - ret = io_->write_bulk(&usbcb, &len); - if (ret != SCANNER_ERR_OK) - { - return ret; - } - ret = io_->read_bulk(&usbcb, &len); - if (ret == SCANNER_ERR_OK) - { - data = usbcb.u32_Data; - } - return ret; -} -int hg_scanner_400::set_distortion_check_val(int data) -{ - int ret = SCANNER_ERR_OK, - len = 0; - USBCB usbcb = { setting3288dsp::SET_JUST_COF_H ,data,resolution_ }; - len = sizeof(usbcb); - io_->write_bulk(&usbcb, &len); - - //USBCB cmd = { setting3288dsp::GET_JUST_COF_H ,0,resolution_ }; - //len = sizeof(cmd); - //io_->write_bulk(&cmd, &len); - //io_->read_bulk(&cmd, &len); - //int ratio = cmd.u32_Data; - return ret; -} - -int hg_scanner_400::set_auto_flat(void) -{ - USBCB usbcb = { setting3288dsp::START_FLAT,0,0 }; - int len = sizeof(usbcb); - int ret = writeusb(usbcb); - - if (ret == SCANNER_ERR_OK && wait_usb_.is_waiting()) - { - //status_ = SCANNER_ERR_DEVICE_BUSY; - wait_usb_.notify(); - std::this_thread::sleep_for(std::chrono::milliseconds(300)); - ret = try_third_app_after_start(ret); - } - else - status_ = ret; - VLOG_MINI_1(LOG_LEVEL_WARNING, "set_auto_flat ret: %s\n", hg_scanner_err_name(ret)); - return ret; -} - -int hg_scanner_400::set_notify_sleep() -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_400::get_history_scan_count(int& num) -{ - int ret = SCANNER_ERR_OK, - len = 0; - USBCB usbcb = { setting3288dsp::GET_SCANN_NUM,0, 0 }; - len = sizeof(usbcb); - ret = io_->write_bulk(&usbcb, &len); - if (ret != SCANNER_ERR_OK) - { - return ret; - } - ret = io_->read_bulk(&usbcb, &len); - if (ret != SCANNER_ERR_OK) - { - return ret; - } - num = usbcb.u32_Data; - return ret; -} -int hg_scanner_400::get_roller_num(int& val) -{ - int ret = SCANNER_ERR_OK, - len = 0; - USBCB usbcb = { setting3288dsp::GET_ROLLER_NUM,0, 0 }; - len = sizeof(usbcb); - ret = io_->write_bulk(&usbcb, &len); - if (ret != SCANNER_ERR_OK) - { - return ret; - } - ret = io_->read_bulk(&usbcb, &len); - if (ret != SCANNER_ERR_OK) - { - return ret; - } - val = usbcb.u32_Data; - return ret; -} \ No newline at end of file diff --git a/hgdriver/hgdev/hg_scanner_400.h b/hgdriver/hgdev/hg_scanner_400.h deleted file mode 100644 index f41edc5..0000000 --- a/hgdriver/hgdev/hg_scanner_400.h +++ /dev/null @@ -1,112 +0,0 @@ -#pragma once - -// hg_scanner is the base class of kinds of scanners -// -// created on 2022-01-30 -// -#include -#include -#include -#include - -#include "hg_scanner.h" -#include "../wrapper/hg_log.h" -#include "PaperSize.h" - - -//#ifdef OEM_HANWANG -//#define hg_scanner_400 hw_scanner_400 -//#elif defined(OEM_LISICHENG) -//#define hg_scanner_400 lsc_scanner_400 -//#endif - -class hg_scanner_400 : public hg_scanner -{ -protected: - virtual int on_scanner_closing(bool force) override; - virtual void thread_handle_usb_read(void) override; -protected: - virtual int on_color_mode_changed(int& color_mode) override; //颜色切换 - virtual int on_paper_changed(int& paper) override; //纸张大小设置 - virtual int on_paper_check_changed(bool& check) override; //尺寸检测 - virtual int on_resolution_changed(int& dpi) override; //分辨率设置 - virtual int on_ultrasonic_check_changed(bool& check) override; //设置超声波检测 - virtual int on_staple_check_changed(bool& check) override; //设置订书针检测 - virtual int on_skew_check_changed(bool& check) override; //设置歪斜检测 - virtual int on_skew_check_level_changed(int& check) override; //设置歪斜检测强度 - virtual int on_get_feedmode(int& feedmode) override; //获取分纸强度 - virtual int on_set_feedmode(int feedmode) override; //设置分纸强度 - virtual int on_pic_type(bool& pic)override; //照片模式或者文本模式 - virtual int on_pick_paper(bool autostrength)override; //自动分纸强度 - virtual int on_pick_paper_threshold(double threshold)override; - virtual int on_is_auto_paper(bool isautopaper)override; //待纸扫描 - virtual int on_cis_get_image(bool isautopaper) override; //cis 原图获取 - - -public: - hg_scanner_400(const char* dev_name,int vid, usb_io* io); - ~hg_scanner_400(); - -public: - virtual int start(void)override; - virtual int stop(void)override; - -private: - int agreement(TwSS tw,int align); - int initdevice(); - int writeusb(USBCB &usb); - int readusb(USBCB &usb); - int pop_image(void); - int get_scanner_status(USBCB &usb); - int get_img_data(std::shared_ptr &imagedata); - int writedown_device_configuration(bool type =false,setting_hardware::HGSCANCONF_3288 *d = NULL); - void writedown_image_configuration(void); - void printf_devconfig(setting_hardware::HGSCANCONF_3288 *d = NULL); - -private: - setting_hardware::HGSCANCONF_3288 dsp_config; - Device::PaperSize papersize; - -public: - //////////////固定的硬件信息设置或获取////////////// - virtual std::string get_firmware_version(void)override; - virtual std::string get_serial_num(void)override; - virtual std::string get_ip(void)override; - - virtual int set_serial_num(string str) override; //设置序列号 - virtual int set_vid_pid(int data) override; //设置vidpid - virtual int get_vid_pid(int& data)override; //获取vidpid - - - /////////////////成功返回:SCANNER_ERR_OK ///////////// - /////////////////失败返回:IO错误码 ///////////// - virtual int set_leaflet_scan(void) override; //单张扫描 - - - virtual int set_clear_roller_num(void) override; //清除滚轴计数 - - virtual int get_device_code(void); //获取设备编码 不支持 - - virtual int get_scanner_paperon(SANE_Bool& type) override; //获取设备有无纸张 /*/ type : 0无纸 1有纸 */ - - virtual int get_scan_is_sleep(SANE_Bool& type) override; //获取设备是否休眠当中 /*/ type : 0休眠 1唤醒状态*/ - virtual int get_sleep_time(int& data) override; //获取功耗模式(休眠) /*/ data > 0*/ - virtual int set_sleep_time(int data) override; //设置功耗模式(休眠) /*/ data > 0*/ - virtual int get_history_scan_count(int& data) override; //获取历史扫描张数 /*/ data > 0*/ - virtual int get_roller_num(int& data) override; //获取滚轮张数 /*/ data > 0*/ - virtual int set_notify_sleep(void) override; //唤醒设备 - virtual int get_device_log(string& log) override; //获取设备日志 /*/ log :储存路径*/ - virtual int set_devreboot(int data) override; //设置设备重启 - virtual int set_devshtudown() override; //设置设备关机 - virtual int set_scan_islock(SANE_Bool type) override; //设置设备是否锁定 /*/ type:0解锁,1锁定*/ - virtual int get_scan_islock(SANE_Bool& type) override; //获取设备是否锁定 /*/ type:0解锁,1锁定*/ - virtual int set_scan_lock_check_val(string str) override; //获取设备是否锁定 /*/ str:校验码*/ - virtual int set_firmware_upgrade(std::string str) override; //固件升级 /*/ str:文件名路径*/ - virtual int set_clean_paper_road() override; //清理纸道 - virtual int get_dev_islock_file(int& data) override; //获取设备文件 /*/ data:0 未上锁,1 上锁。-1 未发现黑名单列表 -2列表没有信息*/ - virtual int set_dev_islock_file(int data) override; //设置设备文件 /*/ data:0 未上锁,1 上锁* - virtual int set_speed_mode(int data) override; //设置速度模式 /*/ data:40,50,60,70,80 - virtual int get_speed_mode(int &data) override; //设置速度模式 /*/ data:40,50,60,70,80 - virtual int set_distortion_check_val(int data) override; //设置畸变矫正 - virtual int set_auto_flat(void); //设置自动平场校正 -}; diff --git a/hgdriver/hgdev/hg_scanner_402.cpp b/hgdriver/hgdev/hg_scanner_402.cpp deleted file mode 100644 index b5610b3..0000000 --- a/hgdriver/hgdev/hg_scanner_402.cpp +++ /dev/null @@ -1,1278 +0,0 @@ -#include "hg_scanner_402.h" -#include "../wrapper/hg_log.h" -#include "filetools.h" - -#if defined(WIN32) || defined(_WIN64) -#include "scanner_manager.h" -#endif -#include - - -static std::string jsontext1("{\"global\":{\"device_type\":\"G402\",\"option_count\":62},\"restore\":{\"category\":\"base\",\"title\":\"\\u6062\\u590d\\u9ed8\\u8ba4\\u8bbe\\u7f6e\",\"desc\":\"\\u6062\\u590d\\u9ed8\\u8ba4\\u8bbe\\u7f6e\",\"type\":\"button\",\"cur\":\"button\",\"default\":\"button\",\"size\":0},\"help\":{\"category\":\"advanced\",\"title\":\"\\u5e2e\\u52a9\",\"desc\":\"\\u663e\\u793a\\u8f6f\\u4ef6\\u5e2e\\u52a9\\u6587\\u6863\",\"type\":\"button\",\"cur\":\"true\",\"default\":\"true\",\"size\":4},\"grp-1\":{\"category\":\"base\",\"title\":\"\\u57fa\\u672c\\u8bbe\\u7f6e\",\"type\":\"group\"},\"is-multiout\":{\"category\":\"base\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\",\"desc\":\"\\u540c\\u65f6\\u8f93\\u51fa\\u591a\\u79cd\\u989c\\u8272\\u6a21\\u5f0f\\u7684\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"multiout-type\":{\"category\":\"base\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\\u7c7b\\u578b\",\"desc\":\"\\u9009\\u62e9\\u591a\\u6d41\\u8f93\\u51fa\\u7684\\u7c7b\\u578b\",\"type\":\"string\",\"cur\":\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"default\":\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"size\":32,\"range\":[\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"\\u5f69\\u8272+\\u7070\\u5ea6\",\"\\u5f69\\u8272+\\u9ed1\\u767d\",\"\\u7070\\u5ea6+\\u9ed1\\u767d\"],\"depend_or\":[\"is-multiout==true\"]},\"mode\":{\"category\":\"base\",\"title\":\"\\u989c\\u8272\\u6a21\\u5f0f\",\"desc\":\"\\u9009\\u62e9\\u8272\\u5f69\\u6a21\\u5f0f\",\"type\":\"string\",\"cur\":\"24\\u4f4d\\u5f69\\u8272\",\"default\":\"24\\u4f4d\\u5f69\\u8272\",\"size\":32,\"range\":[\"24\\u4f4d\\u5f69\\u8272\",\"256\\u7ea7\\u7070\\u5ea6\",\"\\u9ed1\\u767d\",\"\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"],\"depend_or\":[\"is-multiout==false\"]},\"binary-threshold\":{\"category\":\"base\",\"title\":\"\\u9ed1\\u767d\\u56fe\\u50cf\\u9608\\u503c\",\"desc\":\"\\u9ad8\\u4e8e\\u8be5\\u9608\\u503c\\u4e3a1\\uff08\\u767d\\uff09\\uff0c\\u4f4e\\u4e8e\\u8be5\\u9608\\u503c\\u4e3a0\\uff08\\u9ed1\\uff09\",\"type\":\"int\",\"cur\":127,\"default\":127,\"size\":4,\"range\":{\"min\":0,\"max\":255},\"depend_or\":[\"is-multiout==true\",\"mode==\\u9ed1\\u767d\"]},\"reverse-bw\":{\"category\":\"base\",\"title\":\"\\u9ed1\\u767d\\u56fe\\u50cf\\u53cd\\u8272\\u8f93\\u51fa\",\"desc\":\"\\u8f93\\u51fa\\u7684\\u9ed1\\u767d\\u56fe\\u50cf\\u4ee5\\u201c1\\u201d\\u4ee3\\u8868\\u9ed1\\u8272\\uff0c\\u201c0\\u201d\\u4ee3\\u8868\\u767d\\u8272\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"is-multiout==true\",\"mode==\\u9ed1\\u767d\"]},\"filter\":{\"category\":\"base\",\"title\":\"\\u7070\\u5ea6\\u6216\\u9ed1\\u767d\\u56fe\\u50cf - \\u9664\\u8272\\u4e0e\\u589e\\u5f3a\",\"desc\":\"\\u6d88\\u9664\\u6216\\u589e\\u5f3a\\u6307\\u5b9a\\u8272\\u5f69\",\"type\":\"string\",\"cur\":\"\\u4e0d\\u9664\\u8272\",\"default\":\"\\u4e0d\\u9664\\u8272\",\"size\":24,\"range\":[\"\\u4e0d\\u9664\\u8272\",\"\\u9664\\u7ea2\\u8272\",\"\\u9664\\u7eff\\u8272\",\"\\u9664\\u84dd\\u8272\",\"\\u7ea2\\u8272\\u589e\\u5f3a\",\"\\u7eff\\u8272\\u589e\\u5f3a\",\"\\u84dd\\u8272\\u589e\\u5f3a\"],\"depend_and\":[\"is-multiout!=true\",\"mode!=24\\u4f4d\\u5f69\\u8272\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-multiout-red\":{\"category\":\"base\",\"title\":\"24\\u4f4d\\u5f69\\u8272\\u56fe\\u50cf - \\u591a\\u6d41\\u8f93\\u51fa\\u9664\\u7ea2\",\"desc\":\"\\u540c\\u65f6\\u8f93\\u51fa\\u5f69\\u8272\\u56fe\\u50cf\\u548c\\u7070\\u5ea6\\u9664\\u7ea2\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-multiout!=true\",\"mode!=256\\u7ea7\\u7070\\u5ea6\",\"!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-answer-sheet-red\":{\"category\":\"base\",\"title\":\"24\\u4f4d\\u5f69\\u8272\\u56fe\\u50cf - \\u7b54\\u9898\\u5361\\u9664\\u7ea2\",\"desc\":\"\\u8f93\\u51fa\\u9664\\u7ea2\\u5f69\\u8272\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-multiout!=true\",\"mode!=256\\u7ea7\\u7070\\u5ea6\",\"!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-erase-bkg\":{\"category\":\"base\",\"title\":\"\\u80cc\\u666f\\u79fb\\u9664\",\"desc\":\"\\u79fb\\u9664\\u6587\\u7a3f\\u80cc\\u666f\\u5e95\\u8272\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-multiout!=true\",\"mode!=256\\u7ea7\\u7070\\u5ea6\",\"!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"bkg-color-range\":{\"category\":\"base\",\"title\":\" \\u80cc\\u666f\\u8272\\u5f69\\u6d6e\\u52a8\\u8303\\u56f4\",\"desc\":\"\\u4e0e\\u80cc\\u666f\\u5e95\\u8272\\u504f\\u5dee\\u5728\\u8be5\\u503c\\u8303\\u56f4\\u5185\\u7684\\u989c\\u8272\\uff0c\\u90fd\\u5c06\\u88ab\\u79fb\\u9664\",\"type\":\"int\",\"cur\":20,\"default\":20,\"size\":4,\"range\":{\"min\":1,\"max\":128},\"depend_or\":[\"is-erase-bkg==true\"]},\"sharpen\":{\"category\":\"base\",\"title\":\"\\u9510\\u5316\\u4e0e\\u6a21\\u7cca\",\"desc\":\"\\u9009\\u62e9\\u9510\\u5316\\u6548\\u679c\\u6216\\u6a21\\u7cca\\u6548\\u679c\",\"type\":\"string\",\"cur\":\"\\u65e0\",\"default\":\"\\u65e0\",\"size\":24,\"range\":[\"\\u65e0\",\"\\u9510\\u5316\",\"\\u8fdb\\u4e00\\u6b65\\u9510\\u5316\",\"\\u6a21\\u7cca\",\"\\u8fdb\\u4e00\\u6b65\\u6a21\\u7cca\"],\"depend_and\":[\"is-multiout!=true\",\"mode!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-morr\":{\"category\":\"base\",\"title\":\"\\u53bb\\u9664\\u6469\\u5c14\\u7eb9\",\"desc\":\"\\u53bb\\u9664\\u56fe\\u50cf\\u4e2d\\u7684\\u6469\\u5c14\\u7eb9\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-multiout!=true\",\"mode!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-grid\":{\"category\":\"base\",\"title\":\"\\u9664\\u7f51\\u7eb9\",\"desc\":\"\\u53bb\\u9664\\u56fe\\u50cf\\u4e2d\\u7684\\u7f51\\u7eb9\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-multiout!=true\",\"mode!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-err-extension\":{\"category\":\"base\",\"title\":\"\\u9519\\u8bef\\u6269\\u6563\",\"desc\":\"\\u4ee5\\u70b9\\u9635\\u5f62\\u5f0f\\u6784\\u5efa\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"mode==\\u9ed1\\u767d\"]},\"is-noise-optimize\":{\"category\":\"base\",\"title\":\"\\u9ed1\\u767d\\u56fe\\u50cf\\u566a\\u70b9\\u4f18\\u5316\",\"desc\":\"\\u53bb\\u9664\\u56fe\\u50cf\\u4e2d\\u7684\\u5b64\\u7acb\\u9ed1\\u70b9\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"mode==\\u9ed1\\u767d\"]},\"noise-size\":{\"category\":\"base\",\"title\":\" \\u566a\\u70b9\\u4f18\\u5316\\u5c3a\\u5bf8\",\"desc\":\"\\u8bbe\\u7f6e\\u9700\\u8981\\u53bb\\u9664\\u7684\\u9ed1\\u8272\\u5b64\\u7acb\\u70b9\\u7684\\u8fde\\u901a\\u4e2a\\u6570\",\"type\":\"int\",\"cur\":30,\"default\":30,\"size\":4,\"range\":{\"min\":10,\"max\":50},\"depend_or\":[\"is-noise-optimize==true\"]},\"paper\":{\"category\":\"base\",\"title\":\"\\u7eb8\\u5f20\\u5c3a\\u5bf8\",\"desc\":\"\\u8bbe\\u7f6e\\u51fa\\u56fe\\u5927\\u5c0f\",\"type\":\"string\",\"cur\":\"\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"default\":\"\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"size\":48,\"range\":[\"A3\",\"A4\",\"A4\\u6a2a\\u5411\",\"A5\",\"A5\\u6a2a\\u5411\",\"A6\",\"A6\\u6a2a\\u5411\",\"B4\",\"B5\",\"B5\\u6a2a\\u5411\",\"B6\",\"B6\\u6a2a\\u5411\",\"Letter\",\"Letter\\u6a2a\\u5411\",\"Double Letter\",\"LEGAL\",\"\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\"]},\"is-custom-area\":{\"category\":\"base\",\"title\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"paper!=\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"!=\\u4e09\\u8054\\u8bd5\\u5377\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\"]},\"tl-x\":{\"category\":\"base\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u5de6\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\\u5de6\\u4e0a\\u89d2x\\u5750\\u6807\",\"type\":\"float\",\"cur\":0.000000,\"default\":0.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":210.000000},\"depend_and\":[\"is-custom-area==true\"]},\"br-x\":{\"category\":\"base\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u53f3\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\\u53f3\\u4e0b\\u89d2x\\u5750\\u6807\",\"type\":\"float\",\"cur\":210.000000,\"default\":210.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":210.000000},\"depend_and\":[\"is-custom-area==true\"]},\"tl-y\":{\"category\":\"base\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u4e0a\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e4"); -static std::string jsontext2("9\\u626b\\u63cf\\u533a\\u57df\\u5de6\\u4e0a\\u89d2y\\u5750\\u6807\",\"type\":\"float\",\"cur\":0.000000,\"default\":0.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":297.000000},\"depend_and\":[\"is-custom-area==true\"]},\"br-y\":{\"category\":\"base\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u4e0b\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\\u53f3\\u4e0b\\u89d2y\\u5750\\u6807\",\"type\":\"float\",\"cur\":297.000000,\"default\":297.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":297.000000},\"depend_and\":[\"is-custom-area==true\"]},\"page\":{\"category\":\"base\",\"title\":\"\\u626b\\u63cf\\u9875\\u9762\",\"desc\":\"\\u8bbe\\u7f6e\\u9875\\u9762\\u626b\\u63cf\\u65b9\\u5f0f\",\"type\":\"string\",\"cur\":\"\\u53cc\\u9762\",\"default\":\"\\u53cc\\u9762\",\"size\":40,\"range\":[\"\\u5355\\u9762\",\"\\u53cc\\u9762\",\"\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u901a\\u7528\\uff09\",\"\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u53d1\\u7968\\u7eb8\\uff09\",\"\\u5bf9\\u6298\"]},\"blank-sensitivity\":{\"category\":\"base\",\"title\":\" \\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\u7075\\u654f\\u5ea6\",\"desc\":\"\\u6570\\u503c\\u8d8a\\u5927\\uff0c\\u5219\\u8d8a\\u5bb9\\u6613\\u8df3\\u8fc7\",\"type\":\"int\",\"cur\":50,\"default\":50,\"size\":4,\"range\":{\"min\":1,\"max\":100},\"depend_or\":[\"page==\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u53d1\\u7968\\u7eb8\\uff09\",\"==\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u901a\\u7528\\uff09\"]},\"fold-type\":{\"category\":\"base\",\"title\":\"\\u5bf9\\u6298\\u6a21\\u5f0f\",\"desc\":\"\",\"type\":\"string\",\"cur\":\"\\u5de6\\u53f3\\u5bf9\\u6298\",\"default\":\"\\u5de6\\u53f3\\u5bf9\\u6298\",\"size\":200,\"range\":[\"\\u5de6\\u53f3\\u5bf9\\u6298\",\"\\u4e0a\\u4e0b\\u5bf9\\u6298\",\"\\u81ea\\u52a8\\u5bf9\\u6298\"],\"depend_or\":[\"page==\\u5bf9\\u6298\"]},\"resolution\":{\"category\":\"base\",\"title\":\"\\u5206\\u8fa8\\u7387\",\"desc\":\"\\u8bbe\\u7f6e\\u626b\\u63cf\\u56fe\\u50cf\\u7684\\u5206\\u8fa8\\u7387\",\"type\":\"int\",\"cur\":200,\"default\":200,\"size\":4,\"range\":{\"min\":1,\"max\":600}},\"is-exchange\":{\"category\":\"base\",\"title\":\"\\u4ea4\\u6362\\u6b63\\u53cd\\u9762\",\"desc\":\"\\u4ea4\\u6362\\u6bcf\\u5f20\\u6587\\u7a3f\\u7684\\u6b63\\u53cd\\u9762\\u51fa\\u56fe\\u987a\\u5e8f\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"page!=\\u5355\\u9762\"]},\"grp-2\":{\"category\":\"base\",\"title\":\"\\u4eae\\u5ea6\",\"type\":\"group\"},\"is-custom-gamma\":{\"category\":\"base\",\"title\":\"\\u542f\\u7528\\u8272\\u8c03\\u66f2\\u7ebf\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u56fe\\u50cf\\u8272\\u8c03\\u6548\\u679c\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"brightness\":{\"category\":\"base\",\"title\":\"\\u4eae\\u5ea6\\u503c\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u50cf\\u4eae\\u5ea6\",\"type\":\"int\",\"cur\":128,\"default\":128,\"size\":4,\"range\":{\"min\":1,\"max\":255}},\"contrast\":{\"category\":\"base\",\"title\":\"\\u5bf9\\u6bd4\\u5ea6\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u50cf\\u5bf9\\u6bd4\\u5ea6\",\"type\":\"int\",\"cur\":4,\"default\":4,\"size\":4,\"range\":{\"min\":1,\"max\":7}},\"gamma\":{\"category\":\"base\",\"title\":\"\\u4f3d\\u9a6c\\u503c\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u50cf\\u4f3d\\u739b\\u503c\",\"type\":\"float\",\"cur\":1.000000,\"default\":1.000000,\"size\":4,\"range\":{\"min\":0.010000,\"max\":5.000000}},\"grp-3\":{\"category\":\"base\",\"title\":\"\\u56fe\\u50cf\\u5904\\u7406\",\"type\":\"group\"},\"is-anti-skew\":{\"category\":\"base\",\"title\":\"\\u81ea\\u52a8\\u7ea0\\u504f\",\"desc\":\"\\u81ea\\u52a8\\u7ea0\\u6b63\\u6b6a\\u659c\\u9001\\u5165\\u7684\\u6587\\u7a3f\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4,\"depend_or\":[\"page!=\\u5bf9\\u6298\"]},\"is-split\":{\"category\":\"base\",\"title\":\"\\u56fe\\u50cf\\u62c6\\u5206\",\"desc\":\"\\u81ea\\u52a8\\u62c6\\u5206\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"page!=\\u5bf9\\u6298\"]},\"is-erase-black-frame\":{\"category\":\"base\",\"title\":\"\\u6d88\\u9664\\u9ed1\\u6846\",\"desc\":\"\\u6d88\\u9664\\u6587\\u7a3f\\u8303\\u56f4\\u5916\\u7684\\u9ed1\\u8272\\u80cc\\u666f\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4},\"bkg-fill-mode\":{\"category\":\"advanced\",\"title\":\"\\u80cc\\u666f\\u586b\\u5145\\u65b9\\u5f0f\",\"desc\":\"\\u9009\\u62e9\\u80cc\\u666f\\u586b\\u5145\\u65b9\\u5f0f\",\"type\":\"string\",\"cur\":\"\\u51f8\\u591a\\u8fb9\\u5f62\",\"default\":\"\\u51f8\\u591a\\u8fb9\\u5f62\",\"size\":40,\"range\":[\"\\u51f8\\u591a\\u8fb9\\u5f62\",\"\\u51f9\\u591a\\u8fb9\\u5f62\"],\"depend_or\":[\"is-erase-black-frame==true\"]},\"is-fill-color\":{\"category\":\"base\",\"title\":\"\\u8272\\u5f69\\u586b\\u5145\",\"desc\":\"\\u542f\\u7528\\u540e\\u9ed1\\u6846\\u90e8\\u5206\\u5c06\\u586b\\u5145\\u4e3a\\u6587\\u7a3f\\u5e95\\u8272\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-erase-black-frame==true\"]},\"threshold\":{\"category\":\"advanced\",\"title\":\"\\u9608\\u503c\",\"desc\":\"\\u6587\\u7a3f\\u5e95\\u8272\\u4e0e\\u9ed1\\u8272\\u80cc\\u666f\\u7070\\u5ea6\\u503c\\u7684\\u5dee\\u503c\\u5927\\u4e8e\\u8be5\\u503c\\uff0c\\u624d\\u4f1a\\u88ab\\u8bc6\\u522b\\u4e3a\\u6587\\u7a3f\",\"type\":\"int\",\"cur\":40,\"default\":40,\"size\":4,\"range\":{\"min\":30,\"max\":50},\"depend_or\":[\"is-erase-black-frame==true\",\"paper==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"is-anti-skew==true\"]},\"anti-noise-level\":{\"category\":\"advanced\",\"title\":\"\\u80cc\\u666f\\u6297\\u566a\\u7b49\\u7ea7\",\"desc\":\"\\u80fd\\u591f\\u5bb9\\u5fcd\\u7684\\u80cc\\u666f\\u6742\\u8272\\u6761\\u7eb9\\u7684\\u5bbd\\u5ea6\",\"type\":\"int\",\"cur\":8,\"default\":8,\"size\":4,\"range\":{\"min\":1,\"max\":20},\"depend_or\":[\"is-erase-black-frame==true\",\"paper==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"is-anti-skew==true\"]},\"margin\":{\"category\":\"advanced\",\"title\":\"\\u8fb9\\u7f18\\u7f29\\u8fdb\",\"desc\":\"\\u5bfb\\u627e\\u6587\\u7a3f\\u8fb9\\u7f18\\u65f6\\u5bf9\\u8fb9\\u7f18\\u7684\\u4fb5\\u5165\\u7a0b\\u5ea6\",\"type\":\"int\",\"cur\":5,\"default\":5,\"size\":4,\"range\":{\"min\":5,\"max\":30},\"depend_or\":[\"is-erase-black-frame==true\",\"paper==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"is-anti-skew==true\"]},\"is-dark-sample\":{\"category\":\"base\",\"title\":\"\\u6df1\\u8272\\u6837\\u5f20\",\"desc\":\"\\u542f\\u7528\\u8be5\\u6a21\\u5f0f\\u9632\\u6b62\\u6df1\\u8272\\u5e95\\u8272\\u7684\\u6587\\u7a3f\\u56fe\\u50cf\\u88ab\\u8bef\\u5904\\u7406\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"page!=\\u5bf9\\u6298\",\"is-erase-black-frame!=true\",\"paper!=\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"is-anti-skew!=true\"]},\"is-anti-permeate\":{\"category\":\"base\",\"title\":\"\\u9632\\u6b62\\u6e17\\u900f\",\"desc\":\"\\u9632\\u6b62\\u80cc\\u9762\\u56fe\\u6848\\u6e17\\u900f\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"permeate-level\":{\"category\":\"base\",\"title\":\" \\u9632\\u6b62\\u6e17\\u900f\\u7b49\\u7ea7\",\"desc\":\"\\u9009\\u62e9\\u9632\\u6b62\\u6e17\\u900f\\u7684\\u7b49\\u7ea7\",\"type\":\"string\",\"cur\":\"\\u8f83\\u5f31\",\"default\":\"\\u8f83\\u5f31\",\"size\":16,\"range\":[\"\\u5f31\",\"\\u8f83\\u5f31\",\"\\u4e00\\u822c\",\"\\u8f83\\u5f3a\",\"\\u5f3a\"],\"depend_or\":[\"is-anti-permeate==true\"]},\"is-rid-hole-l\":{\"category\":\"base\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u5de6\\u4fa7\",\"desc\":\"\\u7a7f\\u5b54\\u5728\\u7eb8\\u5f20\\u4e0a\\u7684\\u5de6\\u4fa7\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"search-hole-range-l\":{\"category\":\"base\",\"title\":\" \\u5de6\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000},\"depend_or\":[\"is-rid-hole-l==true\"]},\"is-rid-hole-r\":{\"category\":\"base\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u53f3\\u4fa7\",\"desc\":\"\\u7a7f\\u5b54\\u5728\\u7eb8\\u5f20\\u4e0a\\u7684\\u53f3\\u4fa7\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"search-hole-range-r\":{\"category\":\"base\",\"title\":\" \\u53f3\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000},\"depend_or\":[\"is-rid-hole-r==true\"]},\"is-rid-hole-t\":{\"category\":\"base\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u4e0a\\u4fa7\",\"desc\":\"\\u7a7f\\u5b54\\u5728\\u7eb8\\u5f20\\u7684\\u4e0a\\u90e8\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"search-hole-range-t\":{\"category\":\"base\",\"title\":\" \\u4e0a\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000},\"depend_or\":[\"is-rid-hole-t==true\"]},\"is-rid-hole-b\":{\"category\":\"base\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u4e0b\\u4fa7\",\"desc\":\"\\u7a7f\\u5b54\\u5728\\u7eb8\\u5f20\\u7684\\u4e0b\\u90e8\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"search-hole-range-b\":{\"category\":\"base\",\"title\":\" \\u4e0b\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000},\"depend_or\":[\"is-rid-hole-b==true\"]},\"grp-4\":{\"category\":\"base\",\"title\":\"\\u9001\\u7eb8\\u65b9\\u5f0f\\u8bbe\\u7f6e\",\"type\":\"group\"},\"scan-mode\":{\"category\":\"base\",\"title\":\"\\u626b\\u63cf\\u5f20\\u6570\",\"desc\":\"\\u9009\\u62e9\\u6307\\u5b9a\\u6570\\u91cf\\u626b\\u63cf\\u6216\\u8fde\\u7eed\\u626b\\u63cf\",\"type\":\"string\",\"cur\":\"\\u8fde\\u7eed\\u626b\\u63cf\",\"default\":\"\\u8fde\\u7eed\\u626b\\u63cf\",\"size\":32,\"range\":[\"\\u8fde\\u7eed\\u626b\\u63cf\",\"\\u626b\\u63cf\\u6307\\u5b9a\\u5f20\\u6570\"]},\"scan-count\":{\"category\":\"base\",\"title\":\" \\u626b\\u63cf\\u6570\\u91cf\",\"desc\":\"\\u626b\\u63cf\\u6307\\u5b9a\\u6570\\u91cf\",\"type\":\"int\",\"cur\":1,\"default\":1,\"size\":4,\"depend_or\":[\"scan-mode==\\u626b\\u63cf\\u6307\\u5b9a\\u5f20\\u6570\"]},\"direction\":{\"category\":\"base\",\"title\":\"\\u6587\\u7a3f\\u65b9\\u5411\",\"desc\":\"\\u8bbe\\u7f6e\\u56fe\\u50cf\\u7684\\u65b9\\u5411\",\"type\":\"string\",\"cur\":\"0\\u00b0\",\"default\":\"0\\u00b0\",\"size\":40,\"range\":[\"0\\u00b0\",\"90\\u00b0\",\"180\\u00b0\",\"-90\\u00b0\",\"\\u81ea\\u52a8\\u6587\\u672c\\u65b9\\u5411\\u8bc6\\u522b\\u00b0\"]},\"is-rotate-bkg-180\":{\"category\":\"base\",\"title\":\"\\u80cc\\u9762\\u65cb\\u8f6c180\\u00b0\",\"desc\":\"\\u80cc\\u9762\\u626b\\u63cf\\u7684\\u56fe\\u50cf\\u65cb\\u8f6c180\\u00b0\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"page!=\\u5355\\u9762\",\"!=\\u5bf9\\u6298\",\"direction!=\\u81ea\\u52a8\\u6587\\u672c\\u65b9\\u5411\\u8bc6\\u522b\\u00b0\"]},\"is-ultrosonic\":{\"category\":\"base\",\"title\":\"\\u8d85\\u58f0\\u6ce2\\u68c0\\u6d4b\",\"desc\":\"\\u68c0\\u6d4b\\u662f\\u5426\\u51fa\\u73b0\\u53cc\\u5f20\\u9001\\u5165\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4}}"); - - - -namespace settings402 -{ - // device status to scanner_err - scanner_err device_status_to_hg_err(setting3399::HGEIntInfo* ds) - { - scanner_err code = SCANNER_ERR_OK; - - if (ds->From == setting3399::HGType::FPGA) - code = SCANNER_ERR_OK; - else if (ds->From == setting3399::HGType::MtBoard) - { - switch (ds->Code) - { - case 0x00002: - code = SCANNER_ERR_DEVICE_NO_PAPER; - break; - case 0x00004: - code = SCANNER_ERR_DEVICE_COVER_OPENNED; - break; - case 0x00008: - code = SCANNER_ERR_DEVICE_FEEDING_PAPER; - break; - case 0x00010: - code = SCANNER_ERR_DEVICE_PAPER_JAMMED; - break; - case 0x00020: - code = SCANNER_ERR_DEVICE_DOUBLE_FEEDING; - break; - case 0x00040: - code = SCANNER_ERR_DEVICE_STAPLE_ON; - break; - case 0x00080: - code = SCANNER_ERR_DEVICE_PAPER_SKEW; - break; - case 0x10000: - case 0x80000: - code = SCANNER_ERR_TIMEOUT; - break; - case 0x20000: - code = SCANNER_ERR_DEVICE_SIZE_CHECK; - break; - default: - break; - } - } - else if (ds->From == setting3399::HGType::IMG) - { - if (ds->Code == 1) - code = SCANNER_ERR_DEVICE_DOGEAR; - else if (ds->Code == 2) - code = SCANNER_ERR_DEVICE_SIZE_CHECK; - } - else if (ds->From == setting3399::HGType::V4L2) - { - if (ds->Code == 0) - code = SCANNER_ERR_DEVICE_SCANN_ERROR; - else if (ds->Code == 1) - code = SCANNER_ERR_DEVICE_NO_IMAGE; - } - else if (ds->From == setting3399::HGType::STOPSCAN) - code = SCANNER_ERR_DEVICE_STOPPED; - - return code; - } - - // resolution - static struct - { - float resolution; - int dev_value; - }resolution_map[] = - { - {100.0f, 1}, - {150.0f, 1}, - {200.0f, 1}, - {240.0f, 1}, - {300.0f, 0}, - {600.0f, 1} //临时版本发1 原来发2 - }; - bool is_equal(float l, float r) - { - return fabs(l - r) < .000001f; - } - int match_best_resolution(int resolution, bool* exact) - { - int rsl = resolution, - ind = 0; - bool good = true, *r = exact ? exact : &good; - - if (rsl <= resolution_map[0].resolution) - { - ind = 0; - } - else if (rsl >= resolution_map[ARRAY_SIZE(resolution_map) - 1].resolution) - { - ind = ARRAY_SIZE(resolution_map) - 1; - } - else - { - for (int i = 1; i < ARRAY_SIZE(resolution_map); ++i) - { - if (is_equal(rsl, resolution_map[i].resolution)) - { - ind = i; - break; - } - if (rsl < resolution_map[i].resolution) - { - float dif_l = rsl - resolution_map[i - 1].resolution, - dif_r = resolution_map[i].resolution - rsl; - - if (dif_l > dif_r) - ind = i; - else - ind = i - 1; - break; - } - } - } - - *r = is_equal(rsl, resolution_map[ind].resolution); - - return ind; - } -} - -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// class ... -hg_scanner_402::hg_scanner_402(const char* dev_name, int pid, usb_io* io) : hg_scanner(G20039Serial, dev_name, io, pid) - , rewrite_conf_(false), reset_(false) -{ - //pid_ = pid; - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "hg_scanner_402(%s) constructing ...\n", hg_log::format_ptr(this).c_str()); - dev_conf_.value = 0; -#ifndef MAPPING_FUNCTION_IN_BASE - init_setting_map(setting_map_, ARRAY_SIZE(setting_map_)); -#endif - if(init_settings(0x402)) - init_settings((jsontext1 + jsontext2).c_str()); - writedown_device_configuration(); // initialize the hardware settings - init_version(); -} -hg_scanner_402::~hg_scanner_402() -{ - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "hg_scanner_402(%s) destroyed.\n", hg_log::format_ptr(this).c_str()); -} -int hg_scanner_402::read_register(int addr, int* val) -{ - std::lock_guard lock(io_lock_); - - std::this_thread::sleep_for(std::chrono::milliseconds(50)); - int l = sizeof(*val), - ret = io_->control_io(0x0c0, USB_REQ_GET_DEV_REGS, addr, 0, val, &l); - - if (ret) - status_ = ret; - - return ret; -} -int hg_scanner_402::write_register(int addr, int val) -{ - std::lock_guard lock(io_lock_); - - std::this_thread::sleep_for(std::chrono::milliseconds(50)); - int l = sizeof(val), - ret = io_->control_io(0x040, USB_REQ_SET_DEV_REGS, addr, 0, &val, &l); - - if (ret) - status_ = ret; - - return ret; -} -int hg_scanner_402::write_command(int cmd) -{ - return write_register(0, cmd); -} -std::string hg_scanner_402::control_fetch(int addr, int val, int size) -{ - int l = sizeof(val), - ret = 0; - std::string data(""); - - ret = write_register(addr, val); - if (ret == SCANNER_ERR_OK) - { - std::lock_guard lock(io_lock_); - - l = size + 1; - data.resize(size + 2); - bzero(&data[0], size + 2); - ret = io_->read_bulk(&data[0], &l); - if (ret == SCANNER_ERR_OK) - { - VLOG_MINI_3(LOG_LEVEL_DEBUG_INFO, "control_fetch(%d, %d) - read_bulk %d bytes\n", addr, val, l); - } - else - { - VLOG_MINI_3(LOG_LEVEL_DEBUG_INFO, "control_fetch(%d, %d) - read_bulk = %s\n", addr, val, hg_scanner_err_name(ret)); - data.clear(); - } - } - else - VLOG_MINI_3(LOG_LEVEL_DEBUG_INFO, "control_fetch(%d, %d) = %s\n", addr, val, hg_scanner_err_name(ret)); - - return data; -} -std::string hg_scanner_402::get_fpga(void) -{ - int val = 0, - ret = read_register(setting3399::SR_GET_MBVERSION_LENGHT, &val); - std::string fpga(""); - - if (ret == SCANNER_ERR_OK) - { - fpga.resize(val + 2); - bzero(&fpga[0], val + 2); - - return control_fetch(setting3399::SR_GET_MBVERSION, 0, val); - } - - return fpga; -} -int hg_scanner_402::clr_roller_num(void) -{ - int val = 0, - ret = read_register(setting3399::SR_CLR_ROLLER_NUM, &val); - - if (ret == SCANNER_ERR_OK) - return val; - else - { - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "clr_roller_num = %s\n", hg_scanner_err_name(ret)); - return -1; - } -} -int hg_scanner_402::get_sleep_time(void) -{ - int val = 0, - ret = read_register(setting3399::SR_GET_SLEEPTIME, &val); - - if (ret == SCANNER_ERR_OK) - return val; - else - { - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "get_sleep_time = %s\n", hg_scanner_err_name(ret)); - return -1; - } -} -int hg_scanner_402::get_scan_mode(void) -{ - int val = 0, - ret = read_register(setting3399::SR_OS, &val); - - if (ret) - { - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "get scan mode error: %s\n", hg_scanner_err_name(ret)); - status_ = ret; - - return -1; - } - else - return val; -} -int hg_scanner_402::get_status(void) -{ - int val = 0, - ret = read_register(setting3399::SR_STATUS, &val); - - if (ret) - { - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "get status error: %s\n", hg_scanner_err_name(ret)); - status_ = ret; - - return -1; - } - else - return val; -} -bool hg_scanner_402::is_dev_tx(void) -{ - int val = 0, - ret = read_register(setting3399::SR_STATUS, &val); - - if (ret) - { - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "is_dev_tx() error: %s\n", hg_scanner_err_name(ret)); - status_ = ret; - - return false; - } - else - return val; -} -bool hg_scanner_402::is_dev_image_process_done(void) -{ - int val = 0, - ret = read_register(setting3399::SR_GET_IMAGEPROCESSDONE, &val); - - if (ret) - { - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "is_dev_image_process_done() error: %s\n", hg_scanner_err_name(ret)); - status_ = ret; - - return true; - } - else - return val; -} -bool hg_scanner_402::is_dev_image_keep_last_paper(void) -{ - - int val = 0, - ret = read_register(setting3399::SR_GET_KEEP_LAST_PAPER, &val); - - if (ret) - { - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "is_dev_image_keep_last_paper() error: %s\n", hg_scanner_err_name(ret)); - status_ = ret; - - return true; - } - else - return val; -} -int hg_scanner_402::get_scanned_count(void) -{ - int val = 0, - ret = read_register(setting3399::SR_GET_SCANN_NUM, &val); - - if (ret == SCANNER_ERR_OK) - return val; - else - { - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "get_scanned_count = %s\n", hg_scanner_err_name(ret)); - return -1; - } -} -int hg_scanner_402::get_image_count(void) -{ - int val = 0, - ret = read_register(setting3399::SR_IM_COUNT, &val); - - VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "get_image_count() = %d, error: %s\n", val, hg_scanner_err_name(ret)); - - if (ret == SCANNER_ERR_OK) - return val; - else - return -1; -} -int hg_scanner_402::get_front_data_size(void) -{ - int val = 0, - ret = read_register(setting3399::SR_IM_FRONT_SIZE, &val); - - if (ret == SCANNER_ERR_OK) - return val; - else - { - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "get_front_data_size = %s\n", hg_scanner_err_name(ret)); - return -1; - } -} -void hg_scanner_402::init_version(void) -{ - std::string fv(get_firmware_version()), - sn(get_serial_num()); - if (fv.empty() || sn.empty()) - return; - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "Firmware version: %s\n", fv.c_str()); - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "Serial number: %s\n", sn.c_str()); - //VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, " HG3399 IP: %s\n", get_ip().c_str()); - - if (fv.length() >= 10 && (fv[5] > 'A' || atoi(fv.substr(6, 4).c_str()) >= 1209)) - { - is_kernelsnap_211209_ = atoi(get_fpga().c_str()) >= 35211210; - } - else - is_kernelsnap_211209_ = false; -} -int hg_scanner_402::get_device_sleep_stautus(void) -{ - int ret =read_register(setting3399::SR_GET_SLEEP_STAUTUS,0); - return ret; -} -int hg_scanner_402::get_device_paperon_stautus(void) -{ - int ret =read_register(setting3399::SR_GET_PAPERON,0); - return ret; -} -int hg_scanner_402::writedown_device_configuration(bool type, setting_hardware::HGSCANCONF_3399* dev_conf) -{ - int ret = SCANNER_ERR_OK; - if (!type) - return ret; - if (!dev_conf) - { - dev_conf_.params_3399.is_textcorrect = !keep_watermark_; - dev_conf = &dev_conf_; - } - if (is_multiout) - { - dev_conf->params_3399.color = image_prc_param_.bits.multi_out == MULTI_COLOR_AND_BW ? 0 : 1; - } - else if ((image_prc_param_.bits.color_mode == COLOR_MODE_256_GRAY - || image_prc_param_.bits.color_mode == COLOR_MODE_BLACK_WHITE) - && image_prc_param_.bits.rid_color != RID_COLOR_NONE) - { - dev_conf->params_3399.color = 1; - } - if (image_prc_param_.bits.paper == PAPER_AUTO_MATCH - || image_prc_param_.bits.paper == PAPER_MAX_SIZE - || image_prc_param_.bits.paper == PAPER_MAX_SIZE_CLIP - || image_prc_param_.bits.paper == PAPER_TRIGEMINY - || image_prc_param_.bits.paper == PAPER_16K - || image_prc_param_.bits.paper == PAPER_8K - || image_prc_param_.bits.paper == PAPER_16K_LATERAL - ) - { - dev_conf->params_3399.enable_sizecheck = false; - } - ret = write_register(setting3399::SR_CONFIG_SCAN_PARAM, dev_conf->value); - - VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "Writedown scanner configuration(0x%x) = %s\n", dev_conf->value, hg_scanner_err_name(ret)); - return ret; -} -int hg_scanner_402::writedown_image_configuration(void) -{ - int ret = SCANNER_ERR_OK; - SCANCONF ic; - int len = sizeof(ic); - - bzero(&ic, len); - - ic.en_sizecheck = dev_conf_.params_3399.enable_sizecheck; - ic.hardwarecaps.en_skrewdetect = dev_conf_.params_3399.screw_detect_enable; - ic.hardwarecaps.en_doublefeed = dev_conf_.params_3399.ultrasonic_enable; - ic.hardwarecaps.en_stapledetect = dev_conf_.params_3399.staple_enbale; - ic.hardwarecaps.skrewdetectlevel = dev_conf_.params_3399.screw_detect_level; - if (image_prc_param_.bits.text_direction != TEXT_DIRECTION_AUTO) - ic.imageRotateDegree = (float)image_prc_param_.bits.text_direction; - else - ic.imageRotateDegree = 0; - if (test_1_paper_) - { - LOG_INFO(LOG_LEVEL_DEBUG_INFO, "scanning mode: testing ONE paper ...\n"); - ic.scannum = /*ic.is_duplex ? 2 :*/ 1; - } - else - { - if (scan_count_ == -1) - ic.scannum = -1; - else - ic.scannum = (ic.is_duplex ? scan_count_ * 2 : scan_count_); - } - ic.contrast = (contrast_ - 4) * 333.0; - ic.brightness = (bright_ - 128) * (2000.0 / 254.0); - image_configuration(ic); - - { - std::lock_guard lock(io_lock_); - - ret = io_->write_bulk(&ic, &len); - - this_thread::sleep_for(chrono::milliseconds(500)); - io_->set_timeout(2000);//必要延时 - } - return ret; -} -int hg_scanner_402::pop_first_image(void) -{ - int ret = write_register(setting3399::SR_IM_POP, 1); - - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "popup first image = %s\n", hg_scanner_err_name(ret)); - - return ret; -} -int hg_scanner_402::read_one_image_from_usb(SANE_Image_Statu statu) -{ - int r = 0, - total = get_front_data_size(), - off = 0, - ret = SCANNER_ERR_OK; - - VLOG_MINI_1(LOG_LEVEL_ALL, "New image size: %u\n", total); - if (!waiting_for_memory_enough(total)) - { - status_ = SCANNER_ERR_INSUFFICIENT_MEMORY; - - return status_; - } - //if (user_cancel_) - //return SCANNER_ERR_USER_CANCELED; - - if (total == -1) - ret = status_; - else - { - std::shared_ptr buf(aquire_memory(total)); - if (!buf.get()) - return SCANNER_ERR_INSUFFICIENT_MEMORY; - - // write reading command - buf->set_image_statu(statu); - ret = write_register(setting3399::SR_IM_TX, 1); - - if (ret == SCANNER_ERR_OK) - { - std::this_thread::sleep_for(std::chrono::milliseconds(10)); - r = total; - { - std::lock_guard lock(io_lock_); - void* buff = buf->data(off, (unsigned int*)&r); - - ret = SCANNER_ERR_INSUFFICIENT_MEMORY; - while (buff) - { - ret = io_->read_bulk(buff, &r); - if (ret != SCANNER_ERR_OK) - break; - - off += r; - if (off >= total) - break; - - r = total - off; - buff = buf->data(off, (unsigned int*)&r); - } - } - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "Read image from USB = %s\n", hg_scanner_err_name(ret)); - if (ret == SCANNER_ERR_OK) - { - //{ - // char f[128] = { 0 }; - // sprintf(f, "/tmp/usb_%02d.jpg", usb_img_index_); - // buf->to_file(f); - //} - ret = save_usb_data(buf); - if (ret == SCANNER_ERR_OK) - { - pop_first_image(); - } - else - { - VLOG_MINI_1(LOG_LEVEL_FATAL, "save usb data failed: %s\n", hg_scanner_err_name(ret)); - } - } - else - { - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "Read image data from USB err: %s\n", hg_scanner_err_name(ret)); - } - } - else - { - VLOG_MINI_1(LOG_LEVEL_FATAL, "write command SR_IM_TX failed: %s\n", hg_scanner_err_name(ret)); - } - } - - return ret; -} -void hg_scanner_402::discard_all_images(void) -{ - char buf[32]; - setting3399::HGEIntInfo* info = (setting3399::HGEIntInfo*)buf; - int size = sizeof(buf), - oto = 0, - pre_img = 0, - pre_int = 0, - ret = SCANNER_ERR_OK; - - { - std::lock_guard lock(io_lock_); - oto = io_->get_timeout(); - io_->set_timeout(100); - ret = io_->read_interrupt(buf, &size); - } - while (ret == SCANNER_ERR_OK) - { - pre_int++; - if (info->From == setting3399::IMG) - { - while (get_image_count() > 0) - { - pop_first_image(); - pre_img++; - } - } - - size = sizeof(buf); - { - std::lock_guard lock(io_lock_); - ret = io_->read_interrupt(buf, &size); - } - } - { - std::lock_guard lock(io_lock_); - io_->set_timeout(oto); - } - if (pre_int) - VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "prev-connection has left %d interrupt packet(s) && %d image(s).\n", pre_int, pre_img); -} -int hg_scanner_402::on_color_mode_changed(int& color_mode) -{ - int ret = SCANNER_ERR_OK; - - if ((((color_mode == COLOR_MODE_24_BITS || color_mode == COLOR_MODE_AUTO_MATCH) && !dev_conf_.params_3399.color) || - ((color_mode != COLOR_MODE_24_BITS && color_mode != COLOR_MODE_AUTO_MATCH) && dev_conf_.params_3399.color)) && color_mode != -1) - { - dev_conf_.params_3399.color ^= 1; - ret = writedown_device_configuration(); - if (ret) - dev_conf_.params_3399.color ^= 1; - } - if (color_mode == COLOR_MODE_AUTO_MATCH) - { - dev_conf_.params_3399.color = 1; - } - - return ret; -} -int hg_scanner_402::on_paper_changed(int& paper) -{ - bool exact = true; - int ind = hgpaper_to_devspaper(paper_map_3399, ARRAY_SIZE(paper_map_3399), paper, &exact, &paper_size_), - ret = exact ? SCANNER_ERR_OK : SCANNER_ERR_NOT_EXACT; - - if (dev_conf_.params_3399.paper != paper_map_3399[ind].dev_value) - { - int old = dev_conf_.params_3399.paper; - - dev_conf_.params_3399.paper = paper_map_3399[ind].dev_value; - ret = writedown_device_configuration(); - if (ret) - { - dev_conf_.params_3399.paper = old; - for (int i = 0; i < ARRAY_SIZE(paper_map_3399); ++i) - { - if (paper_map_3399[i].dev_value == old) - { - paper = paper_map_3399[i].paper; - break; - } - } - } - else if (!exact) - ret = SCANNER_ERR_NOT_EXACT; - } - - return ret; -} -int hg_scanner_402::on_paper_check_changed(bool& check) -{ - int ret = SCANNER_ERR_OK; - - if (dev_conf_.params_3399.enable_sizecheck ^ check) - { - dev_conf_.params_3399.enable_sizecheck = check; - ret = writedown_device_configuration(); - - if (ret) - { - dev_conf_.params_3399.enable_sizecheck = !check; - check = dev_conf_.params_3399.enable_sizecheck; - } - } - if (image_prc_param_.bits.paper == PAPER_AUTO_MATCH - ||image_prc_param_.bits.paper == PAPER_MAX_SIZE - ||image_prc_param_.bits.paper == PAPER_MAX_SIZE_CLIP - ||image_prc_param_.bits.paper == PAPER_TRIGEMINY - ||image_prc_param_.bits.paper == PAPER_16K - ||image_prc_param_.bits.paper == PAPER_8K - ||image_prc_param_.bits.paper == PAPER_16K_LATERAL - ) - { - setting_hardware::HGSCANCONF_3399 *d = &dev_conf_; - d->params_3399.enable_sizecheck = false; - ret = writedown_device_configuration(d); - } - - - return ret; -} -int hg_scanner_402::on_resolution_changed(int& dpi) -{ - dev_conf_.params_3399.dpi = 1; //dpi 华凌cis和敦南cis 默认发1无需改变 - int ret = writedown_device_configuration(); - return ret; -} -int hg_scanner_402::on_ultrasonic_check_changed(bool& check) -{ - int ret = SCANNER_ERR_OK; - - if (dev_conf_.params_3399.ultrasonic_enable ^ check) - { - dev_conf_.params_3399.ultrasonic_enable = check; - ret = writedown_device_configuration(); - if (ret) - { - dev_conf_.params_3399.ultrasonic_enable = !check; - check = dev_conf_.params_3399.ultrasonic_enable; - } - } - return ret; -} -int hg_scanner_402::on_staple_check_changed(bool& check) -{ - int ret = SCANNER_ERR_OK; - - if (dev_conf_.params_3399.staple_enbale ^ check) - { - dev_conf_.params_3399.staple_enbale = check; - ret = writedown_device_configuration(); - if (ret) - { - dev_conf_.params_3399.staple_enbale = !check; - check = dev_conf_.params_3399.staple_enbale; - } - } - return ret; -} -int hg_scanner_402::on_skew_check_changed(bool& check) -{ - int ret = SCANNER_ERR_OK; - - if (dev_conf_.params_3399.screw_detect_enable ^ check) - { - dev_conf_.params_3399.screw_detect_enable = check; - ret = writedown_device_configuration(); - if (ret) - { - dev_conf_.params_3399.screw_detect_enable = !check; - check = dev_conf_.params_3399.screw_detect_enable; - } - } - return ret; -} -int hg_scanner_402::on_skew_check_level_changed(int& check) -{ - int ret = SCANNER_ERR_OK, - val = check, - old = dev_conf_.params_3399.screw_detect_level; - setting_hardware::HGSCANCONF_3399 cf; - - cf.params_3399.screw_detect_level = -1; - - if (val < 0) - { - val = 0; - ret = SCANNER_ERR_NOT_EXACT; - } - else if (val > cf.params_3399.screw_detect_level) - { - val = cf.params_3399.screw_detect_level; - ret = SCANNER_ERR_NOT_EXACT; - } - if (val != dev_conf_.params_3399.screw_detect_level) - { - dev_conf_.params_3399.screw_detect_level = val; - ret = writedown_device_configuration(); - if (ret) - check = dev_conf_.params_3399.screw_detect_level = old; - } - if (ret == SCANNER_ERR_OK && val != check) - { - check = val; - ret = SCANNER_ERR_NOT_EXACT; - } - return ret; -} -int hg_scanner_402:: on_get_feedmode(int &feedmode)//获取分纸强度 -{ - int ret = SCANNER_ERR_OK, - val = 0; - - ret = read_register(setting3399::SR_GET_FEEDMODE,&feedmode); - return ret; -} -int hg_scanner_402:: on_set_feedmode(int feedmode)//设置分纸强度 -{ - int ret = SCANNER_ERR_OK, - val = 0; - - ret = write_register(setting3399::SR_SET_FEEDMODE,feedmode); - - return ret; -} -int hg_scanner_402::on_pic_type(bool& pic) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_402::on_pick_paper(bool autostrength) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_402::on_pick_paper_threshold(double threshold) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_402::on_is_auto_paper(bool isautopaper) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_402::on_cis_get_image(bool isautopaper) -{ - is_cis_image = isautopaper; - dev_conf_.params_3399.pc_correct = isautopaper; - return writedown_device_configuration(); -} -void hg_scanner_402::on_device_reconnected(void) -{ - int ret = writedown_device_configuration(); - init_version(); - - rewrite_conf_ = ret != SCANNER_ERR_OK; - if (reset_) - { - reset_ = false; - start(); - } -} -int hg_scanner_402::on_scanner_closing(bool force) -{ - return SCANNER_ERR_OK; -} -void hg_scanner_402::thread_handle_usb_read(void) -{ - char buf[32] = { 0 }; - setting3399::HGEIntInfo* info = (setting3399::HGEIntInfo*)buf; - int size = sizeof(buf), - ret = SCANNER_ERR_OK, - to_cnt = 0, - count = 0; - bool go = true; - - //status_ = SCANNER_ERR_DEVICE_BUSY; - while (run_ && go) - { - size = sizeof(buf); - memset(buf, 0, size); - { - std::lock_guard lock(io_lock_); - - ret = io_->read_interrupt(buf, &size); - // io_->set_timeout(1000); - } - VLOG_MINI_5(LOG_LEVEL_DEBUG_INFO, "read-INT = %s: From(%d), Code(%d), Index(%d), size = %d\n", hg_scanner_err_name(ret), - info->From, info->Code, info->Img_Index, size); - if (ret != SCANNER_ERR_OK) - { - if (ret == SCANNER_ERR_TIMEOUT) - { - if (to_cnt++ < 30) - { - std::this_thread::sleep_for(std::chrono::milliseconds(500)); - continue; - } - } - status_ = ret; - break; - } - - to_cnt = 0; - if (size == sizeof(buf)) - { - ret = settings402::device_status_to_hg_err(info); - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "status from interrupt point is '%s'\n", hg_scanner_err_name(status_)); - - if (ret != SCANNER_ERR_OK && ret != SCANNER_ERR_TIMEOUT && ret != SCANNER_ERR_DEVICE_STOPPED) - { - //if (!is_dev_image_process_done()) - { - int st = ret, count = 0, statu = last_usb_image_statu(st); - //while (!is_dev_image_process_done()) - std::this_thread::sleep_for(std::chrono::milliseconds(1000)); - - while ((count = get_image_count()) > 0) - { - int s = SANE_Image_Statu_OK; - if (count <= 2) - { - if (image_prc_param_.bits.page == PAGE_SINGLE) - s = count == 1 ? statu : s; - else - s = statu; - } - ret = read_one_image_from_usb((SANE_Image_Statu)s); - count++; - if (ret != SCANNER_ERR_OK - && ret != SCANNER_ERR_CREATE_FILE_FAILED - && ret != SCANNER_ERR_WRITE_FILE_FAILED) - break; - } - status_ = st; - } - - VLOG_MINI_1(LOG_LEVEL_WARNING, "\346\211\253\346\217\217\345\244\261\350\264\245, read interrupt\350\277\224\345\233\236\347\212\266\346\200\201\344\270\272\357\274\232%s\n", hg_scanner_err_description(status_)); - break; - } - - switch (info->From) - { - case setting3399::IMG: - if (get_image_count() > 0) - { - read_one_image_from_usb(); - } - else - { - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "receive IMG event but no image count(%d)!", get_image_count()); - } - break; - case setting3399::V4L2: - VLOG_MINI_1(LOG_LEVEL_FATAL, "V4L2 error: %d\n", info->Code); - { - bool cancel = user_cancel_; - stop(); - user_cancel_ = cancel; - go = false; - } - break; - case setting3399::STOPSCAN: - go = false; - LOG_INFO(LOG_LEVEL_ALL, "Received STOPSCAN event ...\n"); - std::this_thread::sleep_for(std::chrono::milliseconds(500)); - while (get_image_count() > 0) // lost IMG message, check image count to receive rest images (BUG-228)... - { - ret = read_one_image_from_usb(); - if (ret != SCANNER_ERR_OK) - { - status_ = ret; - break; - } - } - break; - default: - break; - } - if (!go) - break; - } - else - VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "read %d bytes, sizeof(buf) = %d\n", size, sizeof(buf)); - - this_thread::sleep_for(chrono::milliseconds(10)); - } - VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "USB thread exit with code: %s, status = %s\n", hg_scanner_err_name(ret), hg_scanner_err_name(status_)); -} -int hg_scanner_402::start(void) -{ - bool handled = false; - int ret = try_third_app_handle_start(handled), - val = 0; - - // for third-sane-app invoking, added on 2022-05-19 - if (handled) - return ret; - - split3399_ = 0; - user_cancel_ = false; - cb_mem_ = true; - VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "scanner status: 0x%x\n", get_status()); - //notify_ui_working_status(STATU_DESC_PREPARE_START); - - reset(); - - read_register(setting3399::SR_GET_PAPERON, &val); - if (!val) - { - VLOG_MINI_1(LOG_LEVEL_WARNING, "start failed: %s\n", hg_scanner_err_name(SCANNER_ERR_DEVICE_NO_PAPER)); - return SCANNER_ERR_DEVICE_NO_PAPER; - } - //notify_ui_working_status(STATU_DESC_REWRITE_CONFIGURATION); - ret = writedown_device_configuration(true); - if (ret == SCANNER_ERR_OK) - writedown_image_configuration(); - else - { - status_ = ret; - return ret; - } - val = 0; - ret = read_register(/*SR_GET_ANDROID_STATE*/0x1001, &val); - - while (val) - { - if (val == 1) - ret = status_ = SCANNER_ERR_DEVICE_COVER_OPENNED; - else if (val == 2) - ret = status_ = SCANNER_ERR_DEVICE_PAPER_JAMMED; - else if (val == 3) - ret = status_ = SCANNER_ERR_DEVICE_NO_PAPER; - else - { - VLOG_MINI_2(LOG_LEVEL_WARNING, "consider as success on SR_GET_ANDROID_STATE(%d) result: %s\n", val, hg_scanner_err_name(ret)); - break; - } - - VLOG_MINI_2(LOG_LEVEL_WARNING, "failed on SR_GET_ANDROID_STATE(%d) result: %s\n", val, hg_scanner_err_name(ret)); - return ret; - } - - int count = scan_count_; - if (test_1_paper_) - count = 1; - - write_register(0x1000, count); - ret = write_command(setting3399::SC_START); - VLOG_MINI_1(LOG_LEVEL_WARNING, "start result: %s\n", hg_scanner_err_name(ret)); - -// io_->set_timeout(1000); - if (ret == SCANNER_ERR_OK) - { - //status_ = SCANNER_ERR_DEVICE_BUSY; - wait_usb_.notify(); - this_thread::sleep_for(chrono::milliseconds(100)); - ret = try_third_app_after_start(ret); - } - else - { - status_ = ret; - VLOG_MINI_3(LOG_LEVEL_WARNING, "(%s)[Thread %s]Send start command = %s\n", hg_log::current_time().c_str(), hg_log::format_current_thread_id().c_str(), hg_scanner_err_name(ret)); - } - - return ret; -} -int hg_scanner_402::stop(void) -{ - int ret = SCANNER_ERR_OK; - - user_cancel_ = true; - ret = write_command(setting3399::SC_STOP); -// io_->set_timeout(500); - //final_imgs_.clear(); - - return status_; -} -int hg_scanner_402::reset(void) -{ - final_imgs_.clear(); - discard_all_images(); - - return status_; -} -int hg_scanner_402::device_io_control(unsigned long code, void* data, unsigned* len) -{ - int ret = SCANNER_ERR_OUT_OF_RANGE; - - if (HG_CONTROL_CODE_OPTION_ENABLE == code) - { - OPTEN* opten = (OPTEN*)data; - - ret = SCANNER_ERR_OK; - if (opten->name == SANE_STD_OPT_NAME_ANTI_SKEW && !opten->enabled) // for BUG-20 modified by Gongbing on 2022-03-12 - { - bool enable = true; - setting_automatic_skew(&enable); - } - } - else if (IO_CTRL_CODE_TEST_SINGLE == code) - { - test_1_paper_ = true; - ret = start(); - } - else - ret = hg_scanner::device_io_control(code, data, len); - - return ret; -} -std::string hg_scanner_402::get_firmware_version(void) -{ - return control_fetch(setting3399::SR_GET_FWVERSION, 0, 512); -} -std::string hg_scanner_402::get_serial_num(void) -{ - return control_fetch(setting3399::SR_GET_SERIALNUM, 0, 512); -} -std::string hg_scanner_402::get_ip(void) -{ - return control_fetch(setting3399::SR_GET_IPADDR, 0, 512); -} - -int hg_scanner_402::set_clear_roller_num(void) -{ - int val = 0, - ret = read_register(setting3399::SR_CLR_ROLLER_NUM, &val); - - return ret; -} -int hg_scanner_402::set_serial_num(string str) -{ - int len = str.size(), - ret = write_register(setting3399::SR_SET_SERIALNUM, len); - if (ret == SCANNER_ERR_OK) - { - ret = io_->write_bulk(&str[0], &len); - } - return ret; -} -int hg_scanner_402::set_vid_pid(int data) -{ - return write_register(setting3399::SR_SET_USBVIDPID, data); -} -int hg_scanner_402::get_vid_pid(int& data) -{ - return read_register(setting3399::SR_GET_USBVIDPID, &data); -} -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -int hg_scanner_402::set_leaflet_scan(void) -{ - int ret = SCANNER_ERR_OK; - test_1_paper_ = true; - - ret = start(); - return ret; -} - -int hg_scanner_402::get_device_code(void) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_402::get_sleep_time(int& data) -{ - int val = 0; - int ret = read_register(setting3399::SR_GET_SLEEPTIME, &val); - - if (ret == SCANNER_ERR_OK) - { - save_sleeptime_type_ = true; - data = val; - } - - VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "get_sleep_time = %d with %s\n", data, hg_scanner_err_name(ret)); - return ret; -} -int hg_scanner_402::set_sleep_time(int setsleepime) -{ - int ret = write_register(setting3399::SR_SET_SLEEPTIME, setsleepime); - - VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "set sleep time to %d = %s\n", setsleepime, hg_scanner_err_name(ret)); - - return ret; -} - -int hg_scanner_402::get_scanner_paperon(SANE_Bool& type) -{ - int val = 0, - ret = read_register(setting3399::SR_GET_PAPERON, &val); - - if (ret == SCANNER_ERR_OK) - { - type = val == 0 ? false : true;; - } - return ret; -} - -int hg_scanner_402::get_scan_is_sleep(SANE_Bool& type) -{ - int ret = 0, val; - ret = read_register(setting3399::SR_GET_SLEEP_STAUTUS, &val); //0休眠 1唤醒状态 - if (ret == SCANNER_ERR_OK) - { - type = val == 1 ? true : false; - } - return ret; -} -int hg_scanner_402::get_device_log(string& log) -{ - int ret = SCANNER_ERR_OK; - - int len = log.size(); - ret = write_register(setting3399::SR_SET_JSON_PATH, len); - if (ret == SCANNER_ERR_OK) - ret = io_->write_bulk(&log[0], &len); - - VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "log path:%s ret:%s\n", log.c_str(), hg_scanner_err_name(ret)); - return ret; -} -int hg_scanner_402::set_devreboot(int data) -{ - int val = 0, - ret = write_register(setting3399::SR_REBOOT, val); - - if (ret != SCANNER_ERR_OK) - return ret; -} -int hg_scanner_402::set_devshtudown() -{ - int val = 0, - ret = write_register(setting3399::SR_POWEROFF, val); - - if (ret != SCANNER_ERR_OK) - return ret; -} -int hg_scanner_402::set_scan_islock(SANE_Bool type) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_402::get_scan_islock(SANE_Bool& type) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_402::set_scan_lock_check_val(string str) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_402::set_firmware_upgrade(std::string str) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_402::set_clean_paper_road() -{ - int ret = 0, len = 0; - ret = write_register(setting3399::SR_CLEAN_PAPER_ROAD, len); - return ret; -} -int hg_scanner_402::get_dev_islock_file(int& data) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_402::set_dev_islock_file(int data) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_402::set_speed_mode(int data) -{ - return write_register(setting3399::SR_SET_SPEEDMODE, data); -} -int hg_scanner_402::get_speed_mode(int& data) -{ - return read_register(setting3399::SR_SET_SPEEDMODE, &data); -} -int hg_scanner_402::set_distortion_check_val(int data) -{ - setting3399::Scanner_Reg_Defs retio = setting3399::SR_SET_H_200_RATIO; - if (resolution_ <= 200) - retio = setting3399::SR_SET_H_200_RATIO; - else if (resolution_ > 200 && resolution_ <= 300) - retio = setting3399::SR_SET_H_300_RATIO; - else if (resolution_ > 300 && resolution_ <= 600) - retio = setting3399::SR_SET_H_600_RATIO; - - return write_register(retio, data); -} -int hg_scanner_402::set_auto_flat(void) -{ - return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} -int hg_scanner_402::set_notify_sleep() -{ - int val = 0, - ret = write_register(setting3399::SR_NOTIFY_SLEEP, val); - - return ret; -} -int hg_scanner_402::get_roller_num(int& num) -{ - int ret = read_register(setting3399::SR_GET_ROLLER_NUM, &num); - return ret; -} -int hg_scanner_402::get_history_scan_count(int& val) -{ - int ret = read_register(setting3399::SR_GET_SCANN_NUM, &val); - return ret; -} \ No newline at end of file diff --git a/hgdriver/hgdev/hg_scanner_402.h b/hgdriver/hgdev/hg_scanner_402.h deleted file mode 100644 index e0d575d..0000000 --- a/hgdriver/hgdev/hg_scanner_402.h +++ /dev/null @@ -1,130 +0,0 @@ -#pragma once - -// hg_scanner is the base class of kinds of scanners -// -// created on 2022-01-30 -// -#include -#include -#include -#include -#include - -#include "hg_scanner.h" - -//#ifdef OEM_HANWANG -//#define hg_scanner_402 hw_scanner_402 -//#elif defined(OEM_LISICHENG) -//#define hg_scanner_402 lsc_scanner_402 -//#endif - -class hg_scanner_402 : public hg_scanner -{ - //BlockingQueue>> final_imgs_; // JPG ... -// image_data final_imgs_; // JPG .. - - setting_hardware::HGSCANCONF_3399 dev_conf_; - bool rewrite_conf_; - bool reset_; - - int read_register(int addr, int* val); - int write_register(int addr, int val); - int write_command(int cmd); - std::string control_fetch(int addr, int val, int size); - - std::string get_fpga(void); - int clr_roller_num(void); - int get_sleep_time(void); - int get_scan_mode(void); - int get_status(void); - bool is_dev_tx(void); - bool is_dev_image_process_done(void); - bool is_dev_image_keep_last_paper(void); - int get_scanned_count(void); - int get_image_count(void); - int get_front_data_size(void); - void init_version(void); - int get_device_sleep_stautus(void); - int get_device_paperon_stautus(void); - - int writedown_device_configuration(bool type = false, setting_hardware::HGSCANCONF_3399* dev_conf = NULL); - int writedown_image_configuration(void); - int pop_first_image(void); - - int read_one_image_from_usb(SANE_Image_Statu statu = SANE_Image_Statu_OK); - void discard_all_images(void); -protected: - virtual void on_device_reconnected(void) override; - virtual int on_scanner_closing(bool force) override; - virtual void thread_handle_usb_read(void) override; -protected: - virtual int on_color_mode_changed(int& color_mode) override; //颜色切换 - virtual int on_paper_changed(int& paper) override; //纸张大小设置 - virtual int on_paper_check_changed(bool& check) override; //尺寸检测 - virtual int on_resolution_changed(int& dpi) override; //分辨率设置 - virtual int on_ultrasonic_check_changed(bool& check) override; //设置超声波检测 - virtual int on_staple_check_changed(bool& check) override; //设置订书针检测 - virtual int on_skew_check_changed(bool& check) override; //设置歪斜检测 - virtual int on_skew_check_level_changed(int& check) override; //设置歪斜检测强度 - virtual int on_get_feedmode(int& feedmode) override; //获取分纸强度 - virtual int on_set_feedmode(int feedmode) override; //设置分纸强度 - virtual int on_pic_type(bool& pic)override; //照片模式或者文本模式 - virtual int on_pick_paper(bool autostrength)override; //自动分纸强度 - virtual int on_pick_paper_threshold(double threshold)override; - virtual int on_is_auto_paper(bool isautopaper)override; //待纸扫描 - virtual int on_cis_get_image(bool isautopaper) override; //cis 原图获取 - - -public: - hg_scanner_402(const char* dev_name, int pid,usb_io* io); - ~hg_scanner_402(); - -public: - virtual int start(void) override; - //virtual int get_image_info(IMG_PARAM* ii) override; - //virtual int read_image_data(unsigned char* buf, int* len) override; - virtual int stop(void) override; - virtual int reset(void) override; - virtual int device_io_control(unsigned long code, void* data, unsigned* len) override; - -public: - //////////////固定的硬件信息设置或获取////////////// - virtual std::string get_firmware_version(void)override; - virtual std::string get_serial_num(void)override; - virtual std::string get_ip(void)override; - - virtual int set_serial_num(string str) override; //设置序列号 - virtual int set_vid_pid(int data) override; //设置vidpid - virtual int get_vid_pid(int& data)override; //获取vidpid - - /////////////////成功返回:SCANNER_ERR_OK ///////////// - /////////////////失败返回:IO错误码 ///////////// - virtual int set_leaflet_scan(void) override; //单张扫描 - - virtual int set_clear_roller_num(void) override; //清除滚轴计数 - - virtual int get_device_code(void); //获取设备编码 不支持 - - virtual int get_scanner_paperon(SANE_Bool& type) override; //获取设备有无纸张 /*/ type : 0无纸 1有纸 */ - - virtual int get_scan_is_sleep(SANE_Bool& type) override; //获取设备是否休眠当中 /*/ type : 0休眠 1唤醒状态*/ - virtual int get_sleep_time(int& data) override; //获取功耗模式(休眠) /*/ data > 0*/ - virtual int set_sleep_time(int data) override; //设置功耗模式(休眠) /*/ data > 0*/ - virtual int get_history_scan_count(int& data) override; //获取历史扫描张数 /*/ data > 0*/ - virtual int get_roller_num(int& data) override; //获取滚轮张数 /*/ data > 0*/ - virtual int set_notify_sleep(void) override; //唤醒设备 - virtual int get_device_log(string& log) override; //获取设备日志 /*/ log :储存路径*/ - virtual int set_devreboot(int data) override; //设置设备重启 - virtual int set_devshtudown() override; //设置设备关机 - virtual int set_scan_islock(SANE_Bool type) override; //设置设备是否锁定 /*/ type:0解锁,1锁定*/ - virtual int get_scan_islock(SANE_Bool& type) override; //获取设备是否锁定 /*/ type:0解锁,1锁定*/ - virtual int set_scan_lock_check_val(string str) override; //获取设备是否锁定 /*/ str:校验码*/ - virtual int set_firmware_upgrade(std::string str) override; //固件升级 /*/ str:文件名路径*/ - virtual int set_clean_paper_road() override; //清理纸道 - virtual int get_dev_islock_file(int& data) override; //获取设备文件 /*/ data:0 未上锁,1 上锁。-1 未发现黑名单列表 -2列表没有信息*/ - virtual int set_dev_islock_file(int data) override; //设置设备文件 /*/ data:0 未上锁,1 上锁*/ - virtual int set_speed_mode(int data) override; //设置速度模式 /*/ data:40,50,60,70,80 - virtual int get_speed_mode(int &data) override; //设置速度模式 /*/ data:40,50,60,70,80 - virtual int set_distortion_check_val(int data) override; //设置畸变矫正 - virtual int set_auto_flat(void) override; //设置自动平场校正 -}; diff --git a/hgdriver/hgdev/scanner_manager.cpp b/hgdriver/hgdev/scanner_manager.cpp index 680e15d..0aea6b7 100644 --- a/hgdriver/hgdev/scanner_manager.cpp +++ b/hgdriver/hgdev/scanner_manager.cpp @@ -14,9 +14,8 @@ #include "hg_scanner_200.h" #include "hg_scanner_239.h" #include "hg_scanner_300.h" -#include "hg_scanner_400.h" #include "hg_scanner_302.h" -#include "hg_scanner_402.h" + /// /// supporting devices : @@ -663,7 +662,7 @@ scanner_err hg_scanner_mgr::hg_scanner_open(scanner_handle* h, const char* name, g_supporting_devices[it->ind].pid == 0x7000 || g_supporting_devices[it->ind].pid == 0x8520) { - hg_scanner_400* s400 = new hg_scanner_400(it->display_name.c_str(), 0x400, io); + hg_scanner_300* s400 = new hg_scanner_300(it->display_name.c_str(), 0x400, io); scanner = dynamic_cast(s400); *h = (scanner_handle)s400; }