2023-06-14 02:14:14 +00:00
# include "hg_scanner_239.h"
2023-07-11 09:13:28 +00:00
# include "../../sdk/hginclude/utils.h"
# include <lang/app_language.h>
2022-05-03 03:56:07 +00:00
# include "filetools.h"
2023-09-09 10:09:20 +00:00
# include "../../sdk/json/gb_json.h"
2023-09-23 01:15:57 +00:00
# include <fstream>
2022-05-03 03:56:07 +00:00
2022-07-18 08:56:03 +00:00
# if defined(WIN32) || defined(_WIN64)
2022-05-03 03:56:07 +00:00
# include "scanner_manager.h"
# endif
2022-11-23 07:39:13 +00:00
//100 200 3399
2023-09-25 08:47:05 +00:00
/ / static std : : string jsontext1 ( " { \" global \" :{ \" device_type \" : \" G139-G239 \" , \" option_count \" :78}, \" restore \" :{ \" cat \" : \" base \" , \" readonly \" :false, \" affect \" :0, \" group \" : \" none \" , \" visible \" :true, \" field \" : \" Common \" , \" pos \" :0, \" unit \" : \" None \" , \" title \" : \" \\ u6062 \\ u590d \\ u9ed8 \\ u8ba4 \\ u8bbe \\ u7f6e \" , \" desc \" : \" \\ u6062 \\ u590d \\ u9ed8 \\ u8ba4 \\ u8bbe \\ u7f6e \" , \" type \" : \" button \" , \" cur \" : \" button \" , \" default \" : \" button \" , \" size \" :0}, \" help \" :{ \" cat \" : \" base \" , \" readonly \" :false, \" affect \" :0, \" group \" : \" none \" , \" visible \" :true, \" field \" : \" Common \" , \" pos \" :0, \" unit \" : \" None \" , \" title \" : \" \\ u5e2e \\ u52a9 \" , \" desc \" : \" \\ u663e \\ u793a \\ u8f6f \\ u4ef6 \\ u5e2e \\ u52a9 \\ u6587 \\ u6863 \" , \" type \" : \" button \" , \" cur \" : \" true \" , \" default \" : \" true \" , \" size \" :4}, \" grp-1 \" :{ \" cat \" : \" base \" , \" title \" : \" \\ u57fa \\ u672c \\ u8bbe \\ u7f6e \" , \" type \" : \" group \" , \" readonly \" :false, \" affect \" :0, \" group \" : \" base \" , \" field \" : \" Common \" , \" pos \" :0, \" visible \" :true, \" unit \" : \" None \" }, \" is-multiout \" :{ \" cat \" : \" base \" , \" readonly \" :false, \" affect \" :0, \" group \" : \" base \" , \" visible \" :true, \" field \" : \" Common \" , \" pos \" :0, \" unit \" : \" None \" , \" 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 \" :{ \" cat \" : \" base \" , \" readonly \" :false, \" affect \" :0, \" group \" : \" base \" , \" visible \" :true, \" field \" : \" Common \" , \" pos \" :0, \" unit \" : \" None \" , \" 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 \" :{ \" cat \" : \" base \" , \" readonly \" :false, \" affect \" :0, \" group \" : \" base \" , \" visible \" :true, \" field \" : \" Common \" , \" pos \" :0, \" unit \" : \" None \" , \" 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!=true \" ]}, \" binary-threshold \" :{ \" cat \" : \" base \" , \" readonly \" :false, \" affect \" :0, \" group \" : \" base \" , \" visible \" :true, \" field \" : \" Common \" , \" pos \" :0, \" unit \" : \" None \" , \" 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, \" step \" :1}, \" depend_or \" :[ \" multiout-type!= \\ u5f69 \\ u8272+ \\ u7070 \\ u5ea6 \" , \" mode== \\ u9ed1 \\ u767d \" ]}, \" reverse-bw \" :{ \" cat \" : \" base \" , \" readonly \" :false, \" affect \" :0, \" group \" : \" base \" , \" visible \" :true, \" field \" : \" Common \" , \" pos \" :0, \" unit \" : \" None \" , \" 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 \" :[ \" multiout-type!= \\ u5f69 \\ u8272+ \\ u7070 \\ u5ea6 \" , \" mode== \\ u9ed1 \\ u767d \" ]}, \" filter \" :{ \" cat \" : \" base \" , \" readonly \" :false, \" affect \" :0, \" group \" : \" base \" , \" visible \" :true, \" field \" : \" Common \" , \" pos \" :0, \" unit \" : \" None \" , \" 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 \\
//static std::string jsontext2("u57df\\u5de6\\u4e0a\\u89d2y\\u5750\\u6807\",\"type\":\"float\",\"cur\":0.000000,\"default\":0.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":297.000000,\"step\":29.700000},\"depend_and\":[\"is-custom-area==true\"]},\"br-y\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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,\"step\":29.700000},\"depend_and\":[\"is-custom-area==true\"]},\"is-size-check\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u5c3a\\u5bf8\\u68c0\\u6d4b\",\"desc\":\"\\u68c0\\u6d4b\\u7eb8\\u5f20\\u5b9e\\u9645\\u5c3a\\u5bf8\\u4e0e\\u8bbe\\u7f6e\\u662f\\u5426\\u5339\\u914d\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"paper==A3\",\"==A4\",\"==A4\\u6a2a\\u5411\",\"==A5\",\"==A5\\u6a2a\\u5411\",\"==A6\",\"==A6\\u6a2a\\u5411\",\"==B4\",\"==B5\",\"==B5\\u6a2a\\u5411\",\"==B6\",\"==B6\\u6a2a\\u5411\",\"==Double Letter\",\"==LEGAL\",\"==Letter\",\"==Letter\\u6a2a\\u5411\"]},\"page\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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\"]},\"discardblank\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"blank-sensitivity\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\" \\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\u7075\\u654f\\u5ea6\",\"desc\":\"\\u6570\\u503c\\u8d8a\\u5927\\uff0c\\u5219\\u8d8a\\u5bb9\\u6613\\u8df3\\u8fc7\",\"type\":\"int\",\"cur\":30,\"default\":30,\"size\":4,\"range\":{\"min\":1,\"max\":100,\"step\":1},\"depend_or\":[\"page==\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u53d1\\u7968\\u7eb8\\uff09\",\"==\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u901a\\u7528\\uff09\",\"==true\"]},\"fold-type\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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\":100,\"max\":600,\"step\":1}},\"image-quality\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u753b\\u8d28\",\"desc\":\"\\u9009\\u62e9\\u626b\\u63cf\\u4eea\\u7684\\u753b\\u8d28\\u6a21\\u5f0f\",\"type\":\"string\",\"cur\":\"\\u753b\\u8d28\\u4f18\\u5148\",\"default\":\"\\u753b\\u8d28\\u4f18\\u5148\",\"size\":24,\"range\":[\"\\u901f\\u5
//static std::string jsontext3("d\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u9632\\u6b62\\u6e17\\u900f\",\"desc\":\"\\u9632\\u6b62\\u80cc\\u9762\\u56fe\\u6848\\u6e17\\u900f\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"permeate-level\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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,\"step\":0.050000},\"depend_and\":[\"is-rid-hole-l==true\"]},\"is-rid-hole-r\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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,\"step\":0.050000},\"depend_and\":[\"is-rid-hole-r==true\"]},\"is-rid-hole-t\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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,\"step\":0.050000},\"depend_and\":[\"is-rid-hole-t==true\"]},\"is-rid-hole-b\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\" \\u4e0b\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"des
//
////G439
//static std::string jsontext4("{\"global\":{\"device_type\":\"G439\",\"option_count\":70},\"restore\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"none\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u6062\\u590d\\u9ed8\\u8ba4\\u8bbe\\u7f6e\",\"desc\":\"\\u6062\\u590d\\u9ed8\\u8ba4\\u8bbe\\u7f6e\",\"type\":\"button\",\"cur\":\"button\",\"default\":\"button\",\"size\":0},\"help\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"none\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u5e2e\\u52a9\",\"desc\":\"\\u663e\\u793a\\u8f6f\\u4ef6\\u5e2e\\u52a9\\u6587\\u6863\",\"type\":\"button\",\"cur\":\"true\",\"default\":\"true\",\"size\":4},\"grp-1\":{\"cat\":\"base\",\"title\":\"\\u57fa\\u672c\\u8bbe\\u7f6e\",\"type\":\"group\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"field\":\"Common\",\"pos\":0,\"visible\":true,\"unit\":\"None\"},\"is-multiout\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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!=true\"]},\"binary-threshold\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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,\"step\":1},\"depend_or\":[\"multiout-type!=\\u5f69\\u8272+\\u7070\\u5ea6\",\"mode==\\u9ed1\\u767d\"]},\"reverse-bw\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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\":[\"multiout-type!=\\u5f69\\u8272+\\u7070\\u5ea6\",\"mode==\\u9ed1\\u767d\"]},\"filter\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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
//static std::string jsontext5("df\\u5de6\\u4e0a\\u89d2y\\u5750\\u6807\",\"type\":\"float\",\"cur\":0.000000,\"default\":0.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":297.000000,\"step\":29.700000},\"depend_and\":[\"is-custom-area==true\"]},\"br-y\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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,\"step\":29.700000},\"depend_and\":[\"is-custom-area==true\"]},\"is-size-check\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u5c3a\\u5bf8\\u68c0\\u6d4b\",\"desc\":\"\\u68c0\\u6d4b\\u7eb8\\u5f20\\u5b9e\\u9645\\u5c3a\\u5bf8\\u4e0e\\u8bbe\\u7f6e\\u662f\\u5426\\u5339\\u914d\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"paper==A3\",\"==A4\",\"==A4\\u6a2a\\u5411\",\"==A5\",\"==A5\\u6a2a\\u5411\",\"==A6\",\"==A6\\u6a2a\\u5411\",\"==B4\",\"==B5\",\"==B5\\u6a2a\\u5411\",\"==B6\",\"==B6\\u6a2a\\u5411\",\"==Double Letter\",\"==LEGAL\",\"==Letter\",\"==Letter\\u6a2a\\u5411\"]},\"page\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\" \\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\u7075\\u654f\\u5ea6\",\"desc\":\"\\u6570\\u503c\\u8d8a\\u5927\\uff0c\\u5219\\u8d8a\\u5bb9\\u6613\\u8df3\\u8fc7\",\"type\":\"int\",\"cur\":30,\"default\":30,\"size\":4,\"range\":{\"min\":1,\"max\":100,\"step\":1},\"depend_or\":[\"page==\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u901a\\u7528\\uff09\",\"==\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u53d1\\u7968\\u7eb8\\uff09\"]},\"fold-type\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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\":100,\"max\":600,\"step\":1}},\"image-quality\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u753b\\u8d28\",\"desc\":\"\\u9009\\u62e9\\u626b\\u63cf\\u4eea\\u7684\\u753b\\u8d28\\u6a21\\u5f0f\",\"type\":\"string\",\"cur\":\"\\u753b\\u8d28\\u4f18\\u5148\",\"default\":\"\\u753b\\u8d28\\u4f18\\u5148\",\"size\":24,\"range\":[\"\\u901f\\u5ea6\\u4f18\\u5148\",\"\\u753b\\u8d28\\u4f18\\u5148\"],\"depend_or\":[\"resolution>=300\"]},\"is-exchange\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u4ea4\\u6362\\u6b63\\u53cd\\u9762\",
//static std::string jsontext6("t\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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\":[0.500000,0.050000,0.000000],\"depend_and\":[\"is-rid-hole-l==true\"]},\"is-rid-hole-r\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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\":[0.500000,0.050000,0.000000],\"depend_and\":[\"is-rid-hole-r==true\"]},\"is-rid-hole-t\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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\":[0.500000,0.050000,0.000000],\"depend_and\":[\"is-rid-hole-t==true\"]},\"is-rid-hole-b\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"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\":[0.500000,0.050000,0.000000],\"depend_and\":[\"is-rid-hole-b==true\"]},\"grp-4\":{\"cat\":\"base\",\"title\":\"\\u9001\\u7eb8\\u65b9\\u5f0f\\u8bbe\\u7f6e
2022-10-18 08:23:22 +00:00
2023-09-14 09:53:17 +00:00
static std : : string device_opt_json [ ] = {
2023-11-13 02:29:39 +00:00
" { \" restore \" :{ \" cat \" : \" base \" , \" group \" : \" \" , \" title \" : \" \\ u6062 \\ u590d \\ u9ed8 \\ u8ba4 \\ u8bbe \\ u7f6e \" , \" desc \" : \" \\ u6062 \\ u590d \\ u9ed8 \\ u8ba4 \\ u8bbe \\ u7f6e \" , \" type \" : \" button \" , \" fix-id \" :34921, \" auth \" :0, \" size \" :4}, \" help \" :{ \" cat \" : \" base \" , \" group \" : \" \" , \" title \" : \" \\ u5e2e \\ u52a9 \" , \" desc \" : \" \\ u663e \\ u793a \\ u8f6f \\ u4ef6 \\ u5e2e \\ u52a9 \\ u6587 \\ u6863 \" , \" type \" : \" button \" , \" fix-id \" :34897, \" auth \" :0, \" size \" :4}, \" is-multiout \" :{ \" cat \" : \" base \" , \" group \" : \" base \" , \" title \" : \" \\ u591a \\ u6d41 \\ u8f93 \\ u51fa \" , \" desc \" : \" \\ u540c \\ u65f6 \\ u8f93 \\ u51fa \\ u591a \\ u79cd \\ u989c \\ u8272 \\ u6a21 \\ u5f0f \\ u7684 \\ u56fe \\ u50cf \" , \" type \" : \" bool \" , \" fix-id \" :34817, \" auth \" :0, \" size \" :4, \" cur \" :false, \" default \" :false}, \" multiout-type \" :{ \" cat \" : \" base \" , \" group \" : \" base \" , \" title \" : \" \\ u591a \\ u6d41 \\ u8f93 \\ u51fa \\ u7c7b \\ u578b \" , \" desc \" : \" \\ u9009 \\ u62e9 \\ u591a \\ u6d41 \\ u8f93 \\ u51fa \\ u7684 \\ u7c7b \\ u578b \" , \" type \" : \" string \" , \" fix-id \" :34818, \" auth \" :0, \" enabled \" :false, \" size \" :66, \" cur \" : \" \\ u5f69 \\ u8272+ \\ u7070 \\ u5ea6+ \\ u9ed1 \\ u767d \" , \" default \" : \" \\ u5f69 \\ u8272+ \\ u7070 \\ u5ea6+ \\ u9ed1 \\ u767d \" , \" range \" :[ \" \\ u5f69 \\ u8272+ \\ u7070 \\ u5ea6+ \\ u9ed1 \\ u767d \" , \" \\ u5f69 \\ u8272+ \\ u7070 \\ u5ea6 \" , \" \\ u5f69 \\ u8272+ \\ u9ed1 \\ u767d \" , \" \\ u7070 \\ u5ea6+ \\ u9ed1 \\ u767d \" ], \" depend \" : \" is-multiout==true \" }, \" mode \" :{ \" cat \" : \" base \" , \" group \" : \" base \" , \" title \" : \" \\ u989c \\ u8272 \\ u6a21 \\ u5f0f \" , \" desc \" : \" \\ u9009 \\ u62e9 \\ u8272 \\ u5f69 \\ u6a21 \\ u5f0f \" , \" type \" : \" string \" , \" fix-id \" :34819, \" auth \" :0, \" size \" :24, \" cur \" : \" 24 \\ u4f4d \\ u5f69 \\ u8272 \" , \" default \" : \" 24 \\ u4f4d \\ u5f69 \\ u8272 \" , \" range \" :[ \" 24 \\ u4f4d \\ u5f69 \\ u8272 \" , \" 256 \\ u7ea7 \\ u7070 \\ u5ea6 \" , \" \\ u9ed1 \\ u767d \" , \" \\ u989c \\ u8272 \\ u81ea \\ u52a8 \\ u8bc6 \\ u522b \" ], \" depend \" : \" is-multiout!=true \" }, \" binary-threshold \" :{ \" cat \" : \" base \" , \" group \" : \" 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 \" , \" fix-id \" :34870, \" auth \" :0, \" size \" :4, \" cur \" :127, \" default \" :127, \" range \" :{ \" min \" :0, \" max \" :255, \" step \" :1}, \" depend \" : \" (multiout-type.enabled&&multiout-type!= \\ u5f69 \\ u8272+ \\ u7070 \\ u5ea6) || (mode.enabled && mode== \\ u9ed1 \\ u767d) \" }, \" reverse-bw \" :{ \" cat \" : \" base \" , \" group \" : \" 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 \" , \" fix-id \" :34878, \" auth \" :0, \" size \" :4, \" cur \" :false, \" default \" :false, \" depend \" : \" (multiout-type.enabled&&multiout-type!= \\ u5f69 \\ u8272+ \\ u7070 \\ u5ea6) || (mode.enabled && mode== \\ u9ed1 \\ u767d) \" }, \" filter \" :{ \" cat \" : \" base \" , \" group \" : \" 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 \" , \" fix-id \" :34820, \" auth \" :0, \" enabled \" :false, \" size \" :42, \" cur \" : \" \\ u4e0d \\ u9664 \\ u8272 \" , \" default \" : \" \\ u4e0d \\ u9664 \\ u8272 \" , \" 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 \" : \" mode.enabled && (mode==256 \\ u7ea7 \\ u7070 \\ u5ea6 || mode== \\ u9ed1 \\ u767d) \" }, \" is-rid-multiout-red \" :{ \" cat \" : \" base \" , \" group \" : \" 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 \" , \" fix-id \" :34821, \" auth \" :0, \" size \" :4, \" cur \" :false, \" default \" :false, \" depend \" : \" mode.enabled && mode==24 \\ u4f4d \\ u5f69 \\ u8272 \" }, \" is-rid-answer-sheet-red \" :{ \" cat \" : \" base \" , \" group \" : \" base \" , \" title \" : \" 24 \\ u4f4d \\ u5f69 \\ u8272 \\ u56fe \\ u50cf - \\ u7b54 \\ u9898 \\ u5361 \\ u9664 \\ u7ea2 \" , \" desc \" : \" \\ u8f93 \\ u51fa \\ u9664 \\ u7ea2 \\ u5f69 \\ u8272 \\ u56fe \\
" t \" , \" fix-id \" :34833, \" auth \" :0, \" unit \" : \" mm \" , \" size \" :8, \" cur \" :0.000000, \" default \" :0.000000, \" range \" :{ \" min \" :0.000000, \" max \" : \" br-x \" , \" step \" :0.010000}, \" depend \" : \" is-custom-area==true && is-custom-area.enabled \" }, \" br-x \" :{ \" cat \" : \" base \" , \" group \" : \" 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 \" , \" fix-id \" :34834, \" auth \" :0, \" unit \" : \" mm \" , \" size \" :8, \" cur \" :210.000000, \" default \" :210.000000, \" range \" :{ \" min \" : \" tl-x \" , \" max \" : \" paper-w \" , \" step \" :0.010000}, \" depend \" : \" is-custom-area==true && is-custom-area.enabled \" }, \" tl-y \" :{ \" cat \" : \" base \" , \" group \" : \" 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 \" , \" fix-id \" :34835, \" auth \" :0, \" unit \" : \" mm \" , \" size \" :8, \" cur \" :0.000000, \" default \" :0.000000, \" range \" :{ \" min \" :0.000000, \" max \" : \" br-y \" , \" step \" :0.010000}, \" depend \" : \" is-custom-area==true && is-custom-area.enabled \" }, \" br-y \" :{ \" cat \" : \" base \" , \" group \" : \" 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 \" , \" fix-id \" :34836, \" auth \" :0, \" unit \" : \" mm \" , \" size \" :8, \" cur \" :297.000000, \" default \" :297.000000, \" range \" :{ \" min \" : \" tl-y \" , \" max \" : \" paper-h \" , \" step \" :0.010000}, \" depend \" : \" is-custom-area==true && is-custom-area.enabled \" }, \" is-size-check \" :{ \" cat \" : \" base \" , \" group \" : \" base \" , \" title \" : \" \\ u5c3a \\ u5bf8 \\ u68c0 \\ u6d4b \" , \" desc \" : \" \\ u68c0 \\ u6d4b \\ u7eb8 \\ u5f20 \\ u5b9e \\ u9645 \\ u5c3a \\ u5bf8 \\ u4e0e \\ u8bbe \\ u7f6e \\ u662f \\ u5426 \\ u5339 \\ u914d \" , \" type \" : \" bool \" , \" fix-id \" :34837, \" auth \" :0, \" size \" :4, \" cur \" :false, \" default \" :false, \" depend \" : \" paper==A3||paper==A4||paper==A5||paper==A6||paper==B4||paper==B5||paper==B6||paper==Double Letter||paper==LEGAL||paper==Letter \" }, \" page \" :{ \" cat \" : \" base \" , \" group \" : \" base \" , \" title \" : \" \\ u626b \\ u63cf \\ u9875 \\ u9762 \" , \" desc \" : \" \\ u8bbe \\ u7f6e \\ u9875 \\ u9762 \\ u626b \\ u63cf \\ u65b9 \\ u5f0f \" , \" type \" : \" string \" , \" fix-id \" :34838, \" auth \" :0, \" size \" :12, \" cur \" : \" \\ u53cc \\ u9762 \" , \" default \" : \" \\ u53cc \\ u9762 \" , \" range \" :[ \" \\ u6b63 \\ u9762 \" , \" \\ u80cc \\ u9762 \" , \" \\ u53cc \\ u9762 \" , \" \\ u5bf9 \\ u6298 \" ]}, \" discardblank \" :{ \" cat \" : \" base \" , \" group \" : \" base \" , \" title \" : \" \\ u8df3 \\ u8fc7 \\ u7a7a \\ u767d \\ u9875 \" , \" desc \" : \" \" , \" type \" : \" bool \" , \" fix-id \" :34919, \" auth \" :0, \" size \" :4, \" cur \" :false, \" default \" :false}, \" blank-sensitivity \" :{ \" cat \" : \" base \" , \" group \" : \" base \" , \" title \" : \" \\ u8df3 \\ u8fc7 \\ u7a7a \\ u767d \\ u9875 \\ u7075 \\ u654f \\ u5ea6 \" , \" desc \" : \" \\ u6570 \\ u503c \\ u8d8a \\ u5927 \\ uff0c \\ u5219 \\ u8d8a \\ u5bb9 \\ u6613 \\ u8df3 \\ u8fc7 \" , \" type \" : \" int \" , \" fix-id \" :34839, \" auth \" :0, \" size \" :4, \" cur \" :30, \" default \" :30, \" range \" :{ \" min \" :1, \" max \" :100, \" step \" :1}, \" depend \" : \" discardblank==true \" }, \" fold-type \" :{ \" cat \" : \" base \" , \" group \" : \" base \" , \" title \" : \" \\ u5bf9 \\ u6298 \\ u6a21 \\ u5f0f \" , \" desc \" : \" \" , \" type \" : \" string \" , \" fix-id \" :34887, \" auth \" :0, \" size \" :16, \" cur \" : \" \\ u5de6 \\ u53f3 \\ u5bf9 \\ u6298 \" , \" default \" : \" \\ u5de6 \\ u53f3 \\ u5bf9 \\ u6298 \" , \" range \" :[ \" \\ u5de6 \\ u53f3 \\ u5bf9 \\ u6298 \" , \" \\ u4e0a \\ u4e0b \\ u5bf9 \\ u6298 \" , \" \\ u81ea \\ u52a8 \\ u5bf9 \\ u6298 \" ], \" depend \" : \" page== \\ u5bf9 \\ u6298 \" }, \" resolution \" :{ \" cat \" : \" base \" , \" group \" : \" base \" , \" title \" : \" \\ u5206 \\ u8fa8 \\ u7387 \" , \" desc \" : \" \\ u8bbe \\ u7f6e \\ u626b \\ u63cf \\ u56fe \\ u50cf \\ u7684 \\ u5206 \\ u8fa8 \\ u7387 \" , \" type \" : \" int \" , \" fix-id \" :34840, \" auth \" :0, \" size \" :4, \" cur \" :200, \" default \" :200, \" range \" :{ \" min \" :100, \" max \" :{ \" default \" :600, \" paper== \\ u6700 \\ u5927 \\ u626b \\ u63cf \\ u5c3a \\ u5bf8 \\ u81ea \\ u52a8 \\ u88c1 \\ u5207 || paper== \\ u6700 \\ u5927 \\ u626b \\ u63cf \\ u5c3a \\ u5bf8 || paper== \\ u4e09 \\ u8054 \\ u8bd5 \\ u5377 \" :500}, \" step \" :1}}, \" image-quality \" :{ \" cat \" : \" base \" , \" group \" : \" base \" , \" title \" : \" \\ u753b \\ u8d28 \" , \" desc \" : \" \\ u9009 \\ u62e9 \\ u626b \\ u63cf \\ u4eea \\ u7684 \\ u753b \\ u8d28 \\ u6a21 \\ u5f0f \" , \" type \" : \"
" 27 \\ u626b \\ u63cf \\ u5c3a \\ u5bf8&&paper!= \\ u6700 \\ u5927 \\ u626b \\ u63cf \\ u5c3a \\ u5bf8 \\ u81ea \\ u52a8 \\ u88c1 \\ u5207&&is-anti-skew!=true \" }, \" is-anti-permeate \" :{ \" cat \" : \" base \" , \" group \" : \" imgp \" , \" title \" : \" \\ u9632 \\ u6b62 \\ u6e17 \\ u900f \" , \" desc \" : \" \\ u9632 \\ u6b62 \\ u80cc \\ u9762 \\ u56fe \\ u6848 \\ u6e17 \\ u900f \" , \" type \" : \" bool \" , \" fix-id \" :34855, \" auth \" :0, \" size \" :4, \" cur \" :false, \" default \" :false}, \" permeate-level \" :{ \" cat \" : \" base \" , \" group \" : \" imgp \" , \" title \" : \" \\ u9632 \\ u6b62 \\ u6e17 \\ u900f \\ u7b49 \\ u7ea7 \" , \" desc \" : \" \\ u9009 \\ u62e9 \\ u9632 \\ u6b62 \\ u6e17 \\ u900f \\ u7684 \\ u7b49 \\ u7ea7 \" , \" type \" : \" string \" , \" fix-id \" :34856, \" auth \" :0, \" size \" :12, \" cur \" : \" \\ u8f83 \\ u5f31 \" , \" default \" : \" \\ u8f83 \\ u5f31 \" , \" range \" :[ \" \\ u5f31 \" , \" \\ u8f83 \\ u5f31 \" , \" \\ u4e00 \\ u822c \" , \" \\ u8f83 \\ u5f3a \" , \" \\ u5f3a \" ], \" depend \" : \" is-anti-permeate==true \" }, \" is-wait-scan \" :{ \" cat \" : \" base \" , \" group \" : \" feeder \" , \" title \" : \" \\ u5f85 \\ u7eb8 \\ u626b \\ u63cf \" , \" desc \" : \" \\ u542f \\ u7528 \\ u540e \\ uff0c \\ u6587 \\ u7a3f \\ u653e \\ u5165 \\ u626b \\ u63cf \\ u4eea \\ u65f6 \\ u5c06 \\ u81ea \\ u52a8 \\ u542f \\ u52a8 \\ u626b \\ u63cf \" , \" type \" : \" bool \" , \" fix-id \" :34873, \" auth \" :0, \" size \" :4, \" cur \" :false, \" default \" :false}, \" wait-scan-exit \" :{ \" cat \" : \" base \" , \" group \" : \" feeder \" , \" title \" : \" \\ u5f85 \\ u7eb8 \\ u626b \\ u63cf \\ u9000 \\ u51fa \\ u65f6 \\ u95f4 \" , \" desc \" : \" \\ u8bbe \\ u7f6e \\ u7ed3 \\ u675f \\ u5f85 \\ u7eb8 \\ u626b \\ u63cf \\ u7684 \\ u65f6 \\ u95f4 \" , \" type \" : \" string \" , \" fix-id \" :34920, \" auth \" :0, \" size \" :16, \" cur \" : \" 60s \" , \" default \" : \" 60s \" , \" range \" :[ \" 15s \" , \" 30s \" , \" 60s \" , \" 2min \" , \" 4min \" , \" 8min \" ], \" depend \" : \" is-wait-scan==true \" }, \" scan-mode \" :{ \" cat \" : \" base \" , \" group \" : \" feeder \" , \" title \" : \" \\ u626b \\ u63cf \\ u5f20 \\ u6570 \" , \" desc \" : \" \\ u9009 \\ u62e9 \\ u6307 \\ u5b9a \\ u6570 \\ u91cf \\ u626b \\ u63cf \\ u6216 \\ u8fde \\ u7eed \\ u626b \\ u63cf \" , \" type \" : \" string \" , \" fix-id \" :34862, \" auth \" :0, \" size \" :24, \" cur \" : \" \\ u8fde \\ u7eed \\ u626b \\ u63cf \" , \" default \" : \" \\ u8fde \\ u7eed \\ u626b \\ u63cf \" , \" range \" :[ \" \\ u8fde \\ u7eed \\ u626b \\ u63cf \" , \" \\ u626b \\ u63cf \\ u6307 \\ u5b9a \\ u5f20 \\ u6570 \" ], \" depend \" : \" is-wait-scan==false \" }, \" scan-count \" :{ \" cat \" : \" base \" , \" group \" : \" feeder \" , \" title \" : \" \\ u626b \\ u63cf \\ u6570 \\ u91cf \" , \" desc \" : \" \\ u626b \\ u63cf \\ u6307 \\ u5b9a \\ u6570 \\ u91cf \" , \" type \" : \" int \" , \" fix-id \" :34863, \" auth \" :0, \" size \" :4, \" cur \" :1, \" default \" :1, \" depend \" : \" scan-mode.enabled&&scan-mode== \\ u626b \\ u63cf \\ u6307 \\ u5b9a \\ u5f20 \\ u6570 \" }, \" direction \" :{ \" cat \" : \" base \" , \" group \" : \" feeder \" , \" title \" : \" \\ u6587 \\ u7a3f \\ u65b9 \\ u5411 \" , \" desc \" : \" \\ u8bbe \\ u7f6e \\ u56fe \\ u50cf \\ u7684 \\ u65b9 \\ u5411 \" , \" type \" : \" string \" , \" fix-id \" :34864, \" auth \" :0, \" size \" :32, \" cur \" : \" 0 \\ u00b0 \" , \" default \" : \" 0 \\ u00b0 \" , \" range \" :[ \" 0 \\ u00b0 \" , \" 90 \\ u00b0 \" , \" 180 \\ u00b0 \" , \" -90 \\ u00b0 \" , \" \\ u81ea \\ u52a8 \\ u6587 \\ u672c \\ u65b9 \\ u5411 \\ u8bc6 \\ u522b \\ u00b0 \" ]}, \" is-rotate-bkg-180 \" :{ \" cat \" : \" base \" , \" group \" : \" feeder \" , \" title \" : \" \\ u80cc \\ u9762 \\ u65cb \\ u8f6c180 \\ u00b0 \" , \" desc \" : \" \\ u80cc \\ u9762 \\ u626b \\ u63cf \\ u7684 \\ u56fe \\ u50cf \\ u65cb \\ u8f6c180 \\ u00b0 \" , \" type \" : \" bool \" , \" fix-id \" :34865, \" auth \" :0, \" size \" :4, \" cur \" :false, \" default \" :false, \" depend \" : \" page!= \\ u5bf9 \\ u6298&&direction!= \\ u81ea \\ u52a8 \\ u6587 \\ u672c \\ u65b9 \\ u5411 \\ u8bc6 \\ u522b \\ u00b0 \" }, \" is-ultrosonic \" :{ \" cat \" : \" base \" , \" group \" : \" feeder \" , \" title \" : \" \\ u8d85 \\ u58f0 \\ u6ce2 \\ u68c0 \\ u6d4b \" , \" desc \" : \" \\ u68c0 \\ u6d4b \\ u662f \\ u5426 \\ u51fa \\ u73b0 \\ u53cc \\ u5f20 \\ u9001 \\ u5165 \" , \" type \" : \" bool \" , \" fix-id \" :34860, \" auth \" :0, \" size \" :4, \" cur \" :true, \" default \" :true}, \" double-feed \" :{ \" cat \" : \" base \" , \" group \" : \" feeder \" , \" title \" : \" \\ u53cc \\ u5f20 \\ u56fe \\ u7247 \\ u5904 \\ u7406 \" , \" desc \" : \" \\ u68c0 \\ u6d4b \\ u5230 \\ u53cc \\ u5f20 \\ u8fdb \\ u7eb8 \\ u540e \\ u7684 \\ u5904 \\ u7406 \\ u65b9 \\ u5f0f \" , \" type \" : \" string \" , \" fix-id \" :34872, \" auth \" :0, \" size \" :32, \" cur \" : \" \\ u4e22 \\ u5f03 \\ u56fe \\ u50cf \\ u5e76 \\ u505c \\ u6b62 \\ u626b \\ u63cf \" , \" default \" : \" \\ u4e22 \\ u5f03 \\ u56fe \\ u50cf \\ u5e76 \\ u505c \\ u6b62 \\ u626b \\ u63cf \" , \" range \" :[ \" \\ u4e22 \\ u5f03 \\ u56fe \\ u50cf \\ u5e76 \\ u505c \\ u6b62 \\ u626b \\ u63cf \" , \" \\ u4e0a \\ u4f20 \\ u56fe \\ u50cf \\ u5e76 \\ u505c \\ u6b62 \\ u626b \\ u63cf \" ], \" depend \" : \" is-ultrosonic==true \" }, \" is-sta
" ix-id \" :34907, \" auth \" :0, \" readonly \" :true, \" size \" :4, \" auto \" :false, \" cur \" :0, \" default \" :0}, \" paper-on \" :{ \" cat \" : \" base \" , \" group \" : \" \\ u53ea \\ u8bfb \\ u5c5e \\ u6027 \" , \" title \" : \" \\ u6709 \\ u7eb8 \" , \" desc \" : \" \\ u8bbe \\ u5907 \\ u4e0a \\ u662f \\ u5426 \\ u6709 \\ u7eb8 \" , \" type \" : \" bool \" , \" fix-id \" :34912, \" auth \" :0, \" readonly \" :true, \" size \" :4, \" auto \" :false, \" ownread \" :true, \" cur \" :false, \" default \" :false}, \" roll-cnt \" :{ \" cat \" : \" base \" , \" group \" : \" \\ u7528 \\ u6237 \" , \" title \" : \" \\ u6eda \\ u8f74 \\ u8ba1 \\ u6570 \" , \" desc \" : \" \\ u5f53 \\ u524d \\ u6eda \\ u8f74 \\ u5df2 \\ u7ecf \\ u8fc7 \\ u7eb8 \\ u5f20 \\ u6570 \" , \" type \" : \" int \" , \" fix-id \" :39170, \" auth \" :0, \" readonly \" :true, \" size \" :4, \" auto \" :false, \" ownread \" :true, \" cur \" :0, \" default \" :0}, \" devs-log \" :{ \" cat \" : \" base \" , \" group \" : \" \\ u7528 \\ u6237 \" , \" title \" : \" \\ u8bbe \\ u5907 \\ u65e5 \\ u5fd7 \" , \" desc \" : \" \\ u8bbe \\ u5907 \\ u5de5 \\ u4f5c \\ u65e5 \\ u5fd7 \" , \" type \" : \" string \" , \" fix-id \" :39172, \" auth \" :0, \" visible \" :1, \" size \" :256, \" auto \" :false, \" ownread \" :true, \" cur \" : \" 0 \" , \" default \" : \" 0 \" }} "
2023-09-25 08:47:05 +00:00
} ;
2023-11-13 02:29:39 +00:00
// fix this JSON, plz.
2023-09-25 08:47:05 +00:00
static std : : string device_opt_json439 [ ] = {
" { \" restore \" :{ \" cat \" : \" base \" , \" group \" : \" \" , \" title \" : \" \\ u6062 \\ u590d \\ u9ed8 \\ u8ba4 \\ u8bbe \\ u7f6e \" , \" desc \" : \" \\ u6062 \\ u590d \\ u9ed8 \\ u8ba4 \\ u8bbe \\ u7f6e \" , \" type \" : \" button \" , \" fix-id \" :34921, \" size \" :4}, \" help \" :{ \" cat \" : \" base \" , \" group \" : \" \" , \" title \" : \" \\ u5e2e \\ u52a9 \" , \" desc \" : \" \\ u663e \\ u793a \\ u8f6f \\ u4ef6 \\ u5e2e \\ u52a9 \\ u6587 \\ u6863 \" , \" type \" : \" button \" , \" fix-id \" :34897, \" size \" :4}, \" is-multiout \" :{ \" cat \" : \" base \" , \" group \" : \" base \" , \" title \" : \" \\ u591a \\ u6d41 \\ u8f93 \\ u51fa \" , \" desc \" : \" \\ u540c \\ u65f6 \\ u8f93 \\ u51fa \\ u591a \\ u79cd \\ u989c \\ u8272 \\ u6a21 \\ u5f0f \\ u7684 \\ u56fe \\ u50cf \" , \" type \" : \" bool \" , \" fix-id \" :34817, \" size \" :4, \" cur \" :false, \" default \" :false}, \" multiout-type \" :{ \" cat \" : \" base \" , \" group \" : \" base \" , \" title \" : \" \\ u591a \\ u6d41 \\ u8f93 \\ u51fa \\ u7c7b \\ u578b \" , \" desc \" : \" \\ u9009 \\ u62e9 \\ u591a \\ u6d41 \\ u8f93 \\ u51fa \\ u7684 \\ u7c7b \\ u578b \" , \" type \" : \" string \" , \" fix-id \" :34818, \" enabled \" :false, \" size \" :66, \" cur \" : \" \\ u5f69 \\ u8272+ \\ u7070 \\ u5ea6+ \\ u9ed1 \\ u767d \" , \" default \" : \" \\ u5f69 \\ u8272+ \\ u7070 \\ u5ea6+ \\ u9ed1 \\ u767d \" , \" range \" :[ \" \\ u5f69 \\ u8272+ \\ u7070 \\ u5ea6+ \\ u9ed1 \\ u767d \" , \" \\ u5f69 \\ u8272+ \\ u7070 \\ u5ea6 \" , \" \\ u5f69 \\ u8272+ \\ u9ed1 \\ u767d \" , \" \\ u7070 \\ u5ea6+ \\ u9ed1 \\ u767d \" ], \" depend \" : \" is-multiout==true \" }, \" mode \" :{ \" cat \" : \" base \" , \" group \" : \" base \" , \" title \" : \" \\ u989c \\ u8272 \\ u6a21 \\ u5f0f \" , \" desc \" : \" \\ u9009 \\ u62e9 \\ u8272 \\ u5f69 \\ u6a21 \\ u5f0f \" , \" type \" : \" string \" , \" fix-id \" :34819, \" size \" :54, \" cur \" : \" 24 \\ u4f4d \\ u5f69 \\ u8272 \" , \" default \" : \" 24 \\ u4f4d \\ u5f69 \\ u8272 \" , \" range \" :[ \" 24 \\ u4f4d \\ u5f69 \\ u8272 \" , \" 256 \\ u7ea7 \\ u7070 \\ u5ea6 \" , \" \\ u9ed1 \\ u767d \" , \" \\ u989c \\ u8272 \\ u81ea \\ u52a8 \\ u8bc6 \\ u522b \" ], \" depend \" : \" is-multiout!=true \" }, \" binary-threshold \" :{ \" cat \" : \" base \" , \" group \" : \" 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 \" , \" fix-id \" :34870, \" size \" :4, \" cur \" :127, \" default \" :127, \" range \" :{ \" min \" :0, \" max \" :255, \" step \" :1}, \" depend \" : \" (multiout-type.enabled&&multiout-type!= \\ u5f69 \\ u8272+ \\ u7070 \\ u5ea6) || (mode.enabled && mode== \\ u9ed1 \\ u767d) \" }, \" reverse-bw \" :{ \" cat \" : \" base \" , \" group \" : \" 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 \" , \" fix-id \" :34878, \" size \" :4, \" cur \" :false, \" default \" :false, \" depend \" : \" (multiout-type.enabled&&multiout-type!= \\ u5f69 \\ u8272+ \\ u7070 \\ u5ea6) || (mode.enabled && mode== \\ u9ed1 \\ u767d) \" }, \" filter \" :{ \" cat \" : \" base \" , \" group \" : \" 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 \" , \" fix-id \" :34820, \" enabled \" :false, \" size \" :42, \" cur \" : \" \\ u4e0d \\ u9664 \\ u8272 \" , \" default \" : \" \\ u4e0d \\ u9664 \\ u8272 \" , \" 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 \" : \" mode.enabled && (mode==256 \\ u7ea7 \\ u7070 \\ u5ea6 || mode== \\ u9ed1 \\ u767d) \" }, \" is-rid-multiout-red \" :{ \" cat \" : \" base \" , \" group \" : \" 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 \" , \" fix-id \" :34821, \" size \" :4, \" cur \" :false, \" default \" :false, \" depend \" : \" mode.enabled && mode==24 \\ u4f4d \\ u5f69 \\ u8272 \" }, \" is-rid-answer-sheet-red \" :{ \" cat \" : \" base \" , \" group \" : \" base \" , \" title \" : \" 24 \\ u4f4d \\ u5f69 \\ u8272 \\ u56fe \\ u50cf - \\ u7b54 \\ u9898 \\ u5361 \\ u9664 \\ u7ea2 \" , \" desc \" : \" \\ u8f93 \\ u51fa \\ u9664 \\ u7ea2 \\ u5f69 \\ u8272 \\ u56fe \\ u50cf \" , \" type \" : \" bool \" , \" fix-id \" :34822, \" size \" :4, \" cur \" :false, \" default \" :false, \" depend \" : \"
" 3cf \\ u533a \\ u57df \\ u4e0b \\ u4fa7 \\ uff08mm \\ uff09 \" , \" desc \" : \" \\ u81ea \\ u5b9a \\ u4e49 \\ u626b \\ u63cf \\ u533a \\ u57df \\ u53f3 \\ u4e0b \\ u89d2y \\ u5750 \\ u6807 \" , \" type \" : \" float \" , \" fix-id \" :34836, \" unit \" : \" mm \" , \" size \" :8, \" cur \" :297.000000, \" default \" :297.000000, \" range \" :{ \" min \" :0.000000, \" max \" :297.000000, \" step \" :29.700000}, \" depend \" : \" is-custom-area==true \" }, \" is-size-check \" :{ \" cat \" : \" base \" , \" group \" : \" base \" , \" title \" : \" \\ u5c3a \\ u5bf8 \\ u68c0 \\ u6d4b \" , \" desc \" : \" \\ u68c0 \\ u6d4b \\ u7eb8 \\ u5f20 \\ u5b9e \\ u9645 \\ u5c3a \\ u5bf8 \\ u4e0e \\ u8bbe \\ u7f6e \\ u662f \\ u5426 \\ u5339 \\ u914d \" , \" type \" : \" bool \" , \" fix-id \" :34837, \" size \" :4, \" cur \" :false, \" default \" :false, \" depend \" : \" paper==A3||paper==A4||paper==A4 \\ u6a2a \\ u5411||paper==A5||paper==A5 \\ u6a2a \\ u5411||paper==A6||paper==A6 \\ u6a2a \\ u5411||paper==B4||paper==B5||paper==B5 \\ u6a2a \\ u5411||paper==B6||paper==B6 \\ u6a2a \\ u5411||paper==Double Letter||paper==LEGAL||paper==Letter||paper==Letter \\ u6a2a \\ u5411 \" }, \" page \" :{ \" cat \" : \" base \" , \" group \" : \" base \" , \" title \" : \" \\ u626b \\ u63cf \\ u9875 \\ u9762 \" , \" desc \" : \" \\ u8bbe \\ u7f6e \\ u9875 \\ u9762 \\ u626b \\ u63cf \\ u65b9 \\ u5f0f \" , \" type \" : \" string \" , \" fix-id \" :34838, \" size \" :78, \" cur \" : \" \\ u53cc \\ u9762 \" , \" default \" : \" \\ u53cc \\ u9762 \" , \" 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 \" ]}, \" discardblank \" :{ \" cat \" : \" base \" , \" group \" : \" base \" , \" title \" : \" \\ u8df3 \\ u8fc7 \\ u7a7a \\ u767d \\ u9875 \" , \" desc \" : \" \" , \" type \" : \" bool \" , \" fix-id \" :34919, \" size \" :4, \" cur \" :false, \" default \" :false}, \" blank-sensitivity \" :{ \" cat \" : \" base \" , \" group \" : \" base \" , \" title \" : \" \\ u8df3 \\ u8fc7 \\ u7a7a \\ u767d \\ u9875 \\ u7075 \\ u654f \\ u5ea6 \" , \" desc \" : \" \\ u6570 \\ u503c \\ u8d8a \\ u5927 \\ uff0c \\ u5219 \\ u8d8a \\ u5bb9 \\ u6613 \\ u8df3 \\ u8fc7 \" , \" type \" : \" int \" , \" fix-id \" :34839, \" size \" :4, \" cur \" :30, \" default \" :30, \" range \" :{ \" min \" :1, \" max \" :100, \" step \" :1}, \" depend \" : \" page== \\ u8df3 \\ u8fc7 \\ u7a7a \\ u767d \\ u9875 \\ uff08 \\ u53d1 \\ u7968 \\ u7eb8 \\ uff09||page== \\ u8df3 \\ u8fc7 \\ u7a7a \\ u767d \\ u9875 \\ uff08 \\ u901a \\ u7528 \\ uff09||discardblank==true \" }, \" fold-type \" :{ \" cat \" : \" base \" , \" group \" : \" base \" , \" title \" : \" \\ u5bf9 \\ u6298 \\ u6a21 \\ u5f0f \" , \" desc \" : \" \" , \" type \" : \" string \" , \" fix-id \" :34887, \" size \" :42, \" cur \" : \" \\ u5de6 \\ u53f3 \\ u5bf9 \\ u6298 \" , \" default \" : \" \\ u5de6 \\ u53f3 \\ u5bf9 \\ u6298 \" , \" range \" :[ \" \\ u5de6 \\ u53f3 \\ u5bf9 \\ u6298 \" , \" \\ u4e0a \\ u4e0b \\ u5bf9 \\ u6298 \" , \" \\ u81ea \\ u52a8 \\ u5bf9 \\ u6298 \" ], \" depend \" : \" page== \\ u5bf9 \\ u6298 \" }, \" resolution \" :{ \" cat \" : \" base \" , \" group \" : \" base \" , \" title \" : \" \\ u5206 \\ u8fa8 \\ u7387 \" , \" desc \" : \" \\ u8bbe \\ u7f6e \\ u626b \\ u63cf \\ u56fe \\ u50cf \\ u7684 \\ u5206 \\ u8fa8 \\ u7387 \" , \" type \" : \" int \" , \" fix-id \" :34840, \" size \" :4, \" cur \" :200, \" default \" :200, \" range \" :{ \" min \" :100, \" max \" :{ \" default \" :600, \" paper== \\ u6700 \\ u5927 \\ u626b \\ u63cf \\ u5c3a \\ u5bf8 \\ u81ea \\ u52a8 \\ u88c1 \\ u5207 || paper== \\ u6700 \\ u5927 \\ u626b \\ u63cf \\ u5c3a \\ u5bf8 || paper== \\ u4e09 \\ u8054 \\ u8bd5 \\ u5377 \" :500}, \" step \" :1}}, \" image-quality \" :{ \" cat \" : \" base \" , \" group \" : \" base \" , \" title \" : \" \\ u753b \\ u8d28 \" , \" desc \" : \" \\ u9009 \\ u62e9 \\ u626b \\ u63cf \\ u4eea \\ u7684 \\ u753b \\ u8d28 \\ u6a21 \\ u5f0f \" , \" type \" : \" string \" , \" fix-id \" :34841, \" size \" :42, \" cur \" : \" \\ u753b \\ u8d28 \\ u4f18 \\ u5148 \" , \" default \" : \" \\ u753b \\ u8d28 \\ u4f18 \\ u5148 \" , \" range \" :[ \" \\ u901f \\ u5ea6 \\ u4f18 \\ u5148 \" , \" \\ u753b \\ u8d28 \\ u4f18 \\ u5148 \" ], \" depend \" : \" resolution>=300 \" }, \" is-exchange \" :{ \" cat \" : \" base \" , \" group \" : \" base \" , \" title \" : \" \\ u4ea4 \\ u6362 \\ u6b63 \\ u53cd \\ u9762 \" , \" desc \" : \" \\ u4ea4 \\ u6362 \\ u6bcf \\ u5f20 \\ u6587 \\ u7a3f \\ u7684 \\ u6b63 \\ u53cd \\ u9762 \\ u51fa \\ u56fe \\ u987a \\ u5e8f \" , \" type \" : \" bool \" , \" fix-id \" :34842, \" size \" :4, \" cur \" :false, \" default \" :false, \" depend \" : \" page!= \\ u5355 \\ u9762 \" }, \" is-custom-gamma \" :{ \" cat \" : \" base \" , \" group \" : \" bright \" , \" title \" : \" \\ u542f \\ u7528 \\ u8272 \\ u8c03 \\ u66f2 \\ u7ebf \" , \" desc \" : \" \\ u81ea \\ u5b9a \\ u4e49 \\ u56fe \\ u50cf \\ u8272 \\ u8c03 \\ u6548 \\ u679c \" , \" type \" : \" bool \" , \" fix-id \" :34845, \" size \" :4, \" cur \" :false, \" default \" :false}, \" brightness \" :{ \" cat \" : \" base \" , \" group \" : \" bright \" ,
" 5b54 \\ u5728 \\ u7eb8 \\ u5f20 \\ u4e0a \\ u7684 \\ u5de6 \\ u4fa7 \" , \" type \" : \" bool \" , \" fix-id \" :34879, \" size \" :4, \" cur \" :false, \" default \" :false}, \" search-hole-range-l \" :{ \" cat \" : \" base \" , \" group \" : \" imgp \" , \" 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 \" , \" fix-id \" :34880, \" size \" :8, \" cur \" :0.100000, \" default \" :0.100000, \" range \" :{ \" min \" :0.000000, \" max \" :0.500000, \" step \" :0.050000}, \" depend \" : \" is-rid-hole-l==true \" }, \" is-rid-hole-r \" :{ \" cat \" : \" base \" , \" group \" : \" imgp \" , \" title \" : \" \\ u7a7f \\ u5b54 \\ u79fb \\ u9664 \\ u2014 \\ u53f3 \\ u4fa7 \" , \" desc \" : \" \\ u7a7f \\ u5b54 \\ u5728 \\ u7eb8 \\ u5f20 \\ u4e0a \\ u7684 \\ u53f3 \\ u4fa7 \" , \" type \" : \" bool \" , \" fix-id \" :34881, \" size \" :4, \" cur \" :false, \" default \" :false}, \" search-hole-range-r \" :{ \" cat \" : \" base \" , \" group \" : \" imgp \" , \" 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 \" , \" fix-id \" :34882, \" size \" :8, \" cur \" :0.100000, \" default \" :0.100000, \" range \" :{ \" min \" :0.000000, \" max \" :0.500000, \" step \" :0.050000}, \" depend \" : \" is-rid-hole-r==true \" }, \" is-rid-hole-t \" :{ \" cat \" : \" base \" , \" group \" : \" imgp \" , \" title \" : \" \\ u7a7f \\ u5b54 \\ u79fb \\ u9664 \\ u2014 \\ u4e0a \\ u4fa7 \" , \" desc \" : \" \\ u7a7f \\ u5b54 \\ u5728 \\ u7eb8 \\ u5f20 \\ u7684 \\ u4e0a \\ u90e8 \" , \" type \" : \" bool \" , \" fix-id \" :34883, \" size \" :4, \" cur \" :false, \" default \" :false}, \" search-hole-range-t \" :{ \" cat \" : \" base \" , \" group \" : \" imgp \" , \" 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 \" , \" fix-id \" :34884, \" size \" :8, \" cur \" :0.100000, \" default \" :0.100000, \" range \" :{ \" min \" :0.000000, \" max \" :0.500000, \" step \" :0.050000}, \" depend \" : \" is-rid-hole-t==true \" }, \" is-rid-hole-b \" :{ \" cat \" : \" base \" , \" group \" : \" imgp \" , \" title \" : \" \\ u7a7f \\ u5b54 \\ u79fb \\ u9664 \\ u2014 \\ u4e0b \\ u4fa7 \" , \" desc \" : \" \\ u7a7f \\ u5b54 \\ u5728 \\ u7eb8 \\ u5f20 \\ u7684 \\ u4e0b \\ u90e8 \" , \" type \" : \" bool \" , \" fix-id \" :34885, \" size \" :4, \" cur \" :false, \" default \" :false}, \" search-hole-range-b \" :{ \" cat \" : \" base \" , \" group \" : \" imgp \" , \" 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 \" , \" fix-id \" :34886, \" size \" :8, \" cur \" :0.100000, \" default \" :0.100000, \" range \" :{ \" min \" :0.000000, \" max \" :0.500000, \" step \" :0.050000}, \" depend \" : \" is-rid-hole-b==true \" }, \" is-wait-scan \" :{ \" cat \" : \" base \" , \" group \" : \" feeder \" , \" title \" : \" \\ u5f85 \\ u7eb8 \\ u626b \\ u63cf \" , \" desc \" : \" \\ u542f \\ u7528 \\ u540e \\ uff0c \\ u6587 \\ u7a3f \\ u653e \\ u5165 \\ u626b \\ u63cf \\ u4eea \\ u65f6 \\ u5c06 \\ u81ea \\ u52a8 \\ u542f \\ u52a8 \\ u626b \\ u63cf \" , \" type \" : \" bool \" , \" fix-id \" :34873, \" size \" :4, \" cur \" :false, \" default \" :false}, \" wait-scan-exit \" :{ \" cat \" : \" base \" , \" group \" : \" feeder \" , \" title \" : \" \\ u5f85 \\ u7eb8 \\ u626b \\ u63cf \\ u9000 \\ u51fa \\ u65f6 \\ u95f4 \" , \" desc \" : \" \\ u8bbe \\ u7f6e \\ u7ed3 \\ u675f \\ u5f85 \\ u7eb8 \\ u626b \\ u63cf \\ u7684 \\ u65f6 \\ u95f4 \" , \" type \" : \" string \" , \" fix-id \" :34920, \" size \" :42, \" cur \" : \" 60s \" , \" default \" : \" 60s \" , \" range \" :[ \" 15s \" , \" 30s \" , \" 60s \" , \" 2min \" , \" 4min \" , \" 8min \" ], \" depend \" : \" is-wait-scan==true \" }, \" scan-mode \" :{ \" cat \" : \" base \" , \" group \" : \" feeder \" , \" title \" : \" \\ u626b \\ u63cf \\ u5f20 \\ u6570 \" , \" desc \" : \" \\ u9009 \\ u62e9 \\ u6307 \\ u5b9a \\ u6570 \\ u91cf \\ u626b \\ u63cf \\ u6216 \\ u8fde \\ u7eed \\ u626b \\ u63cf \" , \" type \" : \" string \" , \" fix-id \" :34862, \" size \" :54, \" cur \" : \" \\ u8fde \\ u7eed \\ u626b \\ u63cf \" , \" default \" : \" \\ u8fde \\ u7eed \\ u626b \\ u63cf \" , \" range \" :[ \" \\ u8fde \\ u7eed \\ u626b \\ u63cf \" , \" \\ u626b \\ u63cf \\ u6307 \\ u5b9a \\ u5f20 \\ u6570 \" ], \" depend \" : \" is-wait-scan==false \" }, \" scan-count \" :{ \" cat \" : \" base \" , \" group \" : \" feeder \" , \" title \" : \" \\ u626b \\ u63cf \\ u6570 \\ u91cf \" , \" desc \" : \" \\ u626b \\ u63cf \\ u6307 \\ u5b9a \\ u6570 \\ u91cf
2023-09-14 09:53:17 +00:00
} ;
2022-05-03 03:56:07 +00:00
namespace settings
{
2022-10-18 08:23:22 +00:00
scanner_err device_status_to_hg_err ( setting3399 : : HGEIntInfo * ds )
2022-05-03 03:56:07 +00:00
{
2022-05-17 07:04:55 +00:00
scanner_err code = SCANNER_ERR_OK ;
2022-05-03 03:56:07 +00:00
2022-10-18 08:23:22 +00:00
if ( ds - > From = = setting3399 : : HGType : : FPGA )
2022-05-17 07:04:55 +00:00
code = SCANNER_ERR_OK ;
2022-10-18 08:23:22 +00:00
else if ( ds - > From = = setting3399 : : HGType : : MtBoard )
2022-05-03 03:56:07 +00:00
{
switch ( ds - > Code )
{
case 0x00002 :
2022-05-17 07:04:55 +00:00
code = SCANNER_ERR_DEVICE_NO_PAPER ;
2022-05-03 03:56:07 +00:00
break ;
case 0x00004 :
2022-05-17 07:04:55 +00:00
code = SCANNER_ERR_DEVICE_COVER_OPENNED ;
2022-05-03 03:56:07 +00:00
break ;
case 0x00008 :
2022-05-17 07:04:55 +00:00
code = SCANNER_ERR_DEVICE_FEEDING_PAPER ;
2022-05-03 03:56:07 +00:00
break ;
case 0x00010 :
2022-05-17 07:04:55 +00:00
code = SCANNER_ERR_DEVICE_PAPER_JAMMED ;
2022-05-03 03:56:07 +00:00
break ;
case 0x00020 :
2022-05-17 07:04:55 +00:00
code = SCANNER_ERR_DEVICE_DOUBLE_FEEDING ;
2022-05-03 03:56:07 +00:00
break ;
case 0x00040 :
2022-05-17 07:04:55 +00:00
code = SCANNER_ERR_DEVICE_STAPLE_ON ;
2022-05-03 03:56:07 +00:00
break ;
case 0x00080 :
2022-05-17 07:04:55 +00:00
code = SCANNER_ERR_DEVICE_PAPER_SKEW ;
2022-05-03 03:56:07 +00:00
break ;
case 0x10000 :
case 0x80000 :
2022-05-17 07:04:55 +00:00
code = SCANNER_ERR_TIMEOUT ;
2022-05-03 03:56:07 +00:00
break ;
case 0x20000 :
2022-05-17 07:04:55 +00:00
code = SCANNER_ERR_DEVICE_SIZE_CHECK ;
2022-05-03 03:56:07 +00:00
break ;
2022-12-05 07:33:56 +00:00
case 0x00100 :
code = SCANNER_ERR_DEVICE_ISLOCK ;
break ;
2022-05-03 03:56:07 +00:00
default :
break ;
}
}
2022-10-18 08:23:22 +00:00
else if ( ds - > From = = setting3399 : : HGType : : IMG )
2022-05-03 03:56:07 +00:00
{
if ( ds - > Code = = 1 )
2022-05-17 07:04:55 +00:00
code = SCANNER_ERR_DEVICE_DOGEAR ;
2022-05-03 03:56:07 +00:00
else if ( ds - > Code = = 2 )
2022-05-17 07:04:55 +00:00
code = SCANNER_ERR_DEVICE_SIZE_CHECK ;
2022-05-03 03:56:07 +00:00
}
2022-10-18 08:23:22 +00:00
else if ( ds - > From = = setting3399 : : HGType : : V4L2 )
2022-05-03 03:56:07 +00:00
{
if ( ds - > Code = = 0 )
2022-05-17 07:04:55 +00:00
code = SCANNER_ERR_DEVICE_SCANN_ERROR ;
2022-05-03 03:56:07 +00:00
else if ( ds - > Code = = 1 )
2022-05-17 07:04:55 +00:00
code = SCANNER_ERR_DEVICE_NO_IMAGE ;
2022-05-03 03:56:07 +00:00
}
2022-10-18 08:23:22 +00:00
else if ( ds - > From = = setting3399 : : HGType : : STOPSCAN )
2022-05-17 07:04:55 +00:00
code = SCANNER_ERR_DEVICE_STOPPED ;
2022-12-30 09:14:49 +00:00
else if ( ds - > From = = setting3399 : : HGType : : AutoCorrect )
{
if ( ds - > Code = = 4 )
code = SCANNER_ERR_DEVICE_AUTO_FAIL_OVER ;
else
code = SCANNER_ERR_DEVICE_AUTO_FAIL_INFO ;
}
2022-05-03 03:56:07 +00:00
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 } ,
2023-10-31 06:51:14 +00:00
{ 600.0f , 1 } //临时版本<E78988> <E69CAC> ? 原来<E58E9F> <E69DA5> ?
2022-05-03 03:56:07 +00:00
} ;
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 ...
2023-11-01 07:12:11 +00:00
hg_scanner_239 : : hg_scanner_239 ( const char * dev_name , const char * model , int pid , usb_io * io ) : hg_scanner ( G20039Serial , dev_name , model , io , pid )
2022-10-17 10:15:29 +00:00
, rewrite_conf_ ( false ) , reset_ ( false ) , is_start_status ( false )
2022-05-03 03:56:07 +00:00
{
2023-06-26 10:00:58 +00:00
init_version ( ) ;
2023-01-17 07:07:58 +00:00
//pid_ = pid;
2023-07-11 09:13:28 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " hg_scanner_239(%p) constructing ... \n " , this ) ;
2022-05-03 03:56:07 +00:00
dev_conf_ . value = 0 ;
2022-05-09 08:59:22 +00:00
# ifndef MAPPING_FUNCTION_IN_BASE
2022-05-03 03:56:07 +00:00
init_setting_map ( setting_map_ , ARRAY_SIZE ( setting_map_ ) ) ;
2022-05-09 08:59:22 +00:00
# endif
2022-11-26 03:22:39 +00:00
if ( init_settings ( pid_ ) )
{
2023-09-25 08:47:05 +00:00
std : : string text ( " " ) ;
2022-11-26 03:22:39 +00:00
if ( pid_ = = 0x239 )
2023-09-15 09:53:13 +00:00
{
//init_settings((jsontext1 + jsontext2 + jsontext3).c_str());
for ( auto & v : device_opt_json )
text + = v ;
}
2022-11-26 03:22:39 +00:00
else
2023-09-25 08:47:05 +00:00
{
// init_settings((jsontext4 + jsontext5 + jsontext6).c_str());
for ( auto & v : device_opt_json439 )
text + = v ;
}
init_settings ( text . c_str ( ) ) ;
2022-11-26 03:22:39 +00:00
}
2022-12-05 15:01:13 +00:00
hg_version_init_handle ( ) ;
2023-08-21 08:09:57 +00:00
string str ;
get_devs_time ( str ) ;
2023-06-02 03:58:25 +00:00
# ifdef OEM_HUAGAO
wait_devsislock_ . notify ( ) ;
# endif
//wait_read_int.notify();
2022-05-03 03:56:07 +00:00
}
hg_scanner_239 : : ~ hg_scanner_239 ( )
{
2023-07-11 09:13:28 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " hg_scanner_239(%p) destroyed. \n " , this ) ;
2022-05-03 03:56:07 +00:00
}
int hg_scanner_239 : : read_register ( int addr , int * val )
{
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_239 : : write_register ( int addr , int val )
{
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_239 : : write_command ( int cmd )
{
return write_register ( 0 , cmd ) ;
}
std : : string hg_scanner_239 : : control_fetch ( int addr , int val , int size )
{
int l = sizeof ( val ) ,
ret = 0 ;
std : : string data ( " " ) ;
2023-11-10 06:38:12 +00:00
char errbuf [ 40 ] = { 0 } ;
2022-05-03 03:56:07 +00:00
ret = write_register ( addr , val ) ;
2022-05-17 07:04:55 +00:00
if ( ret = = SCANNER_ERR_OK )
2022-05-03 03:56:07 +00:00
{
l = size + 1 ;
data . resize ( size + 2 ) ;
bzero ( & data [ 0 ] , size + 2 ) ;
ret = io_ - > read_bulk ( & data [ 0 ] , & l ) ;
2022-07-27 06:10:44 +00:00
if ( ret | | l = = 0 )
2022-05-03 03:56:07 +00:00
{
2023-11-10 06:38:12 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " control_fetch(%d, %d) - read_bulk %d byte(s) = %s \n " , addr , val , l , hg_scanner_err_name ( ret , errbuf ) ) ;
2022-05-03 03:56:07 +00:00
data . clear ( ) ;
}
}
else
2023-11-10 06:38:12 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " control_fetch(%d, %d) = %s \n " , addr , val , hg_scanner_err_name ( ret , errbuf ) ) ;
2022-05-03 03:56:07 +00:00
return data ;
}
std : : string hg_scanner_239 : : get_fpga ( void )
{
2023-05-25 01:09:52 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2022-05-03 03:56:07 +00:00
int val = 0 ,
2022-10-18 08:23:22 +00:00
ret = read_register ( setting3399 : : SR_GET_MBVERSION_LENGHT , & val ) ;
2022-05-03 03:56:07 +00:00
std : : string fpga ( " " ) ;
2022-05-17 07:04:55 +00:00
if ( ret = = SCANNER_ERR_OK )
2022-05-03 03:56:07 +00:00
{
fpga . resize ( val + 2 ) ;
bzero ( & fpga [ 0 ] , val + 2 ) ;
2022-10-18 08:23:22 +00:00
return control_fetch ( setting3399 : : SR_GET_MBVERSION , 0 , val ) ;
2022-05-03 03:56:07 +00:00
}
return fpga ;
}
2022-12-22 10:37:53 +00:00
int hg_scanner_239 : : get_scan_mode ( bool & type )
2022-05-03 03:56:07 +00:00
{
2023-05-25 01:09:52 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2022-05-03 03:56:07 +00:00
int val = 0 ,
2022-12-22 10:37:53 +00:00
ret = read_register ( setting3399 : : SR_OS , & val ) ; //val == 1计数模式
type = val = = 1 ? false : true ;
2023-06-15 08:27:20 +00:00
2023-07-11 09:13:28 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " get_scan_mode: %s \n " , type ? hg_scanner_err_description ( SCANNER_ERR_DEVICE_COUNT_MODE ) : hg_scanner_err_description ( SCANNER_ERR_OK ) ) ;
2023-06-15 08:27:20 +00:00
2022-11-24 08:57:31 +00:00
return ret ;
2022-05-03 03:56:07 +00:00
}
2022-12-28 01:56:54 +00:00
int hg_scanner_239 : : set_speed_mode ( int data )
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2022-12-28 01:56:54 +00:00
return write_register ( setting3399 : : SR_SET_SPEEDMODE , data ) ;
}
2022-12-29 10:05:59 +00:00
int hg_scanner_239 : : get_speed_mode ( int & data )
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2022-12-29 10:05:59 +00:00
return read_register ( setting3399 : : SR_GET_SPEEDMODE , & data ) ;
}
2023-03-17 14:27:06 +00:00
int hg_scanner_239 : : set_devs_distortion_check_val ( float data )
2022-12-28 01:56:54 +00:00
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2023-03-17 14:27:06 +00:00
int val = * ( int * ) & data ;
2023-06-28 10:31:03 +00:00
setting3399 : : Scanner_Reg_Defs ratio = setting3399 : : SR_SET_V_RATIO ; //华凌畸变设置
if ( firmware_sup_log_export_ ) //敦南畸变设置
{
if ( resolution_ < = 200 )
ratio = setting3399 : : SR_SET_V_200_RATIO ;
else if ( resolution_ > 200 & & resolution_ < = 300 )
ratio = setting3399 : : SR_SET_V_300_RATIO ;
else if ( resolution_ > 300 & & resolution_ < = 600 )
ratio = setting3399 : : SR_SET_V_600_RATIO ;
}
2022-12-28 01:56:54 +00:00
2023-03-17 14:27:06 +00:00
return write_register ( ratio , val ) ;
2022-12-28 01:56:54 +00:00
}
2023-03-17 14:27:06 +00:00
int hg_scanner_239 : : get_devs_distortion_check_val ( float & data )
2022-12-28 01:56:54 +00:00
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2023-03-17 14:27:06 +00:00
int val = 0 ;
2023-06-28 10:31:03 +00:00
setting3399 : : Scanner_Reg_Defs ratio = setting3399 : : SR_GET_V_RATIO ;
if ( firmware_sup_log_export_ )
{
if ( resolution_ < = 200 )
ratio = setting3399 : : SR_GET_V_200_RATIO ;
else if ( resolution_ > 200 & & resolution_ < = 300 )
ratio = setting3399 : : SR_GET_V_300_RATIO ;
else if ( resolution_ > 300 & & resolution_ < = 600 )
ratio = setting3399 : : SR_GET_V_600_RATIO ;
}
2023-03-17 14:27:06 +00:00
int ret = read_register ( ratio , & val ) ;
2023-06-28 10:31:03 +00:00
2023-03-17 14:27:06 +00:00
data = * ( float * ) & val ;
2022-12-28 01:56:54 +00:00
return ret ;
}
2023-03-06 03:37:37 +00:00
int hg_scanner_239 : : set_auto_flat ( int data )
2022-12-30 09:14:49 +00:00
{
2023-03-06 03:37:37 +00:00
int ret = SCANNER_ERR_OK ;
2022-12-30 09:14:49 +00:00
auto fw = get_firmware_version ( ) ;
2023-02-07 08:57:53 +00:00
if ( fw . empty ( ) )
{
return SCANNER_ERR_NO_DATA ;
}
2022-12-30 09:14:49 +00:00
if ( ( fw [ 5 ] = = ' A ' & & atoi ( fw . substr ( 6 , 4 ) . c_str ( ) ) < = 9999 ) )
{
2023-09-23 01:15:57 +00:00
data = data = = 1 ? 1 : 0 ; //暂时没有用<E69C89> ?
2022-12-30 09:14:49 +00:00
}
if ( ! wait_usb_ . is_waiting ( ) )
{
return SCANNER_ERR_DEVICE_BUSY ;
}
else
{
2023-05-24 07:07:13 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2023-03-06 03:37:37 +00:00
ret = write_register ( setting3399 : : SC_AUTOCORRECT , data ) ;
2022-12-30 09:14:49 +00:00
if ( ret ! = SCANNER_ERR_OK )
{
return ret ;
}
//status_ = SCANNER_ERR_DEVICE_BUSY;
wait_usb_ . notify ( ) ;
std : : this_thread : : sleep_for ( std : : chrono : : milliseconds ( 300 ) ) ;
ret = try_third_app_after_start ( ret ) ;
}
2023-11-10 06:38:12 +00:00
char errbuf [ 40 ] = { 0 } ;
utils : : to_log ( LOG_LEVEL_WARNING , " set_auto_flat ret: %s \n " , hg_scanner_err_name ( ret , errbuf ) ) ;
2022-12-30 09:14:49 +00:00
return ret ;
}
2023-06-16 10:01:28 +00:00
int hg_scanner_239 : : get_motor_board_ver ( string & ver )
{
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
int val = 0 ,
ret = read_register ( setting3399 : : SR_GET_MBVERSION_LENGHT , & val ) ;
ver = control_fetch ( setting3399 : : SR_GET_MBVERSION , 0 , val ) ;
return ret ;
}
2023-08-21 08:09:57 +00:00
int hg_scanner_239 : : set_devs_time ( string times )
{
string path = " /usr/local/huago/PC_TIMES.txt " ;
return write_control_device_files ( path , times ) ;
}
int hg_scanner_239 : : get_devs_time ( string & times )
{
string path = " /usr/local/huago/PC_TIMES.txt " ;
char buf [ 128 ] = { 0 } ;
int ret = read_control_device_files ( path , times ) ;
if ( ret = = SCANNER_ERR_NO_DATA )
{
strcpy ( buf , utils : : format_current_time ( ) . c_str ( ) ) ;
ret = write_control_device_files ( path , buf ) ;
if ( ret = = SCANNER_ERR_OK )
{
ret = read_control_device_files ( path , times ) ;
}
}
if ( ret ! = SCANNER_ERR_OK )
{
times = " " ;
}
return ret ;
}
2022-11-24 08:57:31 +00:00
int hg_scanner_239 : : get_status ( void )
2022-05-03 03:56:07 +00:00
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2022-05-03 03:56:07 +00:00
int val = 0 ,
2022-10-18 08:23:22 +00:00
ret = read_register ( setting3399 : : SR_STATUS , & val ) ;
2023-11-10 06:38:12 +00:00
char errbuf [ 40 ] = { 0 } ;
2022-05-03 03:56:07 +00:00
if ( ret )
{
2023-11-10 06:38:12 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " get status error: %s \n " , hg_scanner_err_name ( ret , errbuf ) ) ;
2022-05-03 03:56:07 +00:00
status_ = ret ;
return - 1 ;
}
else
return val ;
}
bool hg_scanner_239 : : is_dev_image_process_done ( void )
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2023-11-10 06:38:12 +00:00
char errbuf [ 40 ] = { 0 } ;
2023-05-24 06:46:34 +00:00
2022-05-03 03:56:07 +00:00
int val = 0 ,
2022-10-18 08:23:22 +00:00
ret = read_register ( setting3399 : : SR_GET_IMAGEPROCESSDONE , & val ) ;
2022-05-03 03:56:07 +00:00
if ( ret )
{
2023-11-10 06:38:12 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " is_dev_image_process_done() error: %s \n " , hg_scanner_err_name ( ret , errbuf ) ) ;
2022-05-03 03:56:07 +00:00
status_ = ret ;
return true ;
}
else
return val ;
}
bool hg_scanner_239 : : is_dev_image_keep_last_paper ( void )
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2022-05-03 03:56:07 +00:00
int val = 0 ,
2022-10-18 08:23:22 +00:00
ret = read_register ( setting3399 : : SR_GET_KEEP_LAST_PAPER , & val ) ;
2023-11-10 06:38:12 +00:00
char errbuf [ 40 ] = { 0 } ;
2022-05-03 03:56:07 +00:00
if ( ret )
{
2023-11-10 06:38:12 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " is_dev_image_keep_last_paper() error: %s \n " , hg_scanner_err_name ( ret , errbuf ) ) ;
2022-05-03 03:56:07 +00:00
status_ = ret ;
return true ;
}
else
return val ;
}
2022-11-24 08:57:31 +00:00
int hg_scanner_239 : : get_image_count ( void )
2022-05-03 03:56:07 +00:00
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2022-05-03 03:56:07 +00:00
int val = 0 ,
2022-10-18 08:23:22 +00:00
ret = read_register ( setting3399 : : SR_IM_COUNT , & val ) ;
2022-05-03 03:56:07 +00:00
2023-07-11 09:13:28 +00:00
//utils::to_log(LOG_LEVEL_DEBUG, "Gets The image queue in the 'DEVICE':[%d]\n", val);
2022-05-03 03:56:07 +00:00
2022-05-17 07:04:55 +00:00
if ( ret = = SCANNER_ERR_OK )
2022-05-03 03:56:07 +00:00
return val ;
else
return - 1 ;
}
2022-11-24 08:57:31 +00:00
int hg_scanner_239 : : get_front_data_size ( void )
2022-05-03 03:56:07 +00:00
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2022-05-03 03:56:07 +00:00
int val = 0 ,
2022-10-18 08:23:22 +00:00
ret = read_register ( setting3399 : : SR_IM_FRONT_SIZE , & val ) ;
2023-11-10 06:38:12 +00:00
char errbuf [ 40 ] = { 0 } ;
2022-05-03 03:56:07 +00:00
2022-05-17 07:04:55 +00:00
if ( ret = = SCANNER_ERR_OK )
2022-05-03 03:56:07 +00:00
return val ;
else
{
2023-11-10 06:38:12 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " get_front_data_size = %s \n " , hg_scanner_err_name ( ret , errbuf ) ) ;
2022-05-03 03:56:07 +00:00
return - 1 ;
}
}
void hg_scanner_239 : : init_version ( void )
{
2023-05-24 06:46:34 +00:00
2022-05-03 03:56:07 +00:00
std : : string fv ( get_firmware_version ( ) ) ,
sn ( get_serial_num ( ) ) ;
2023-02-07 08:57:53 +00:00
if ( fv . empty ( ) | | sn . empty ( ) )
2023-02-07 08:45:25 +00:00
return ;
2022-12-06 09:47:27 +00:00
string dev = fv . substr ( 0 , 2 ) ;
string ver = fv . substr ( 2 , 3 ) ;
string date = fv . substr ( 5 , 5 ) ;
2023-02-24 09:42:28 +00:00
string year = fv . substr ( 4 , 2 ) ;
2022-12-06 09:47:27 +00:00
string devType ;
2023-06-26 10:00:58 +00:00
string year_date = fv . substr ( 4 , 6 ) ;
2023-06-15 10:16:43 +00:00
2023-06-26 10:00:58 +00:00
if ( dev = = " G1 " | | dev = = " G2 " )
2023-03-01 07:07:47 +00:00
{
2023-08-21 08:09:57 +00:00
firmware_sup_wait_paper_ = year_date . compare ( " 3B0431 " ) > = 0 ? true : false ;
firmware_sup_log_export_ = year_date . compare ( " 3B0429 " ) > = 0 ? true : false ;
firmware_sup_pick_strength_ = year_date . compare ( " 3B0830 " ) > = 0 ? true : false ;
firmware_sup_wake_device_ = year_date . compare ( " 3B0830 " ) > = 0 ? true : false ;
firmware_sup_color_corr_ = year . compare ( " 3C " ) > = 0 ? true : false ;
firmware_sup_double_img = year . compare ( " 3C " ) > = 0 ? true : false ;
firmware_sup_devs_lock_ = year_date . compare ( " 3B0500 " ) > = 0 ? true : false ;
2023-06-26 10:00:58 +00:00
firmware_sup_dpi_300 = false ;
2023-08-21 08:09:57 +00:00
firmware_sup_dpi_600 = date . compare ( " A1227 " ) > = 0 ? true : false ;
firmware_sup_auto_speed_ = year . compare ( " 3C " ) > = 0 ? true : false ;
firmware_sup_morr_ = year_date . compare ( " 3C0518 " ) > = 0 ? true : false ;
firmware_sup_color_fill_ = year . compare ( " 3B03C830 " ) > = 0 ? true : false ;
2023-06-12 12:06:28 +00:00
}
else
{
2023-08-21 08:09:57 +00:00
firmware_sup_wait_paper_ = year_date . compare ( " 3B0629 " ) > = 0 ? true : false ;
2023-06-26 10:00:58 +00:00
firmware_sup_log_export_ = true ;
2023-10-31 06:51:14 +00:00
firmware_sup_pick_strength_ = false ; //不支<E4B88D> <E694AF> ?
2023-08-21 08:09:57 +00:00
firmware_sup_wake_device_ = year_date . compare ( " 3C0518 " ) > = 0 ? true : false ;
firmware_sup_color_corr_ = year . compare ( " 3C " ) > = 0 ? true : false ;
2023-10-31 06:51:14 +00:00
firmware_sup_double_img = false ; //不支<E4B88D> <E694AF> ?
2023-08-21 08:09:57 +00:00
firmware_sup_devs_lock_ = year . compare ( " 3C " ) > = 0 ? true : false ;
2023-06-26 10:00:58 +00:00
firmware_sup_dpi_300 = false ;
firmware_sup_dpi_600 = true ;
2023-08-21 08:09:57 +00:00
firmware_sup_auto_speed_ = year . compare ( " 3C " ) > = 0 ? true : false ;
firmware_sup_morr_ = year_date . compare ( " 3C0518 " ) > = 0 ? true : false ;
firmware_sup_color_fill_ = year . compare ( " 3C " ) > = 0 ? true : false ;
2023-06-26 10:00:58 +00:00
}
2023-07-11 09:13:28 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " Firmware_sup_wait_paper_:%s \r \n " , firmware_sup_wait_paper_ ? " enable " : " close " ) ;
utils : : to_log ( LOG_LEVEL_DEBUG , " Firmware_sup_log_export_:%s \r \n " , firmware_sup_log_export_ ? " enable " : " close " ) ;
utils : : to_log ( LOG_LEVEL_DEBUG , " Firmware_sup_pick_strength_:%s \r \n " , firmware_sup_pick_strength_ ? " enable " : " close " ) ;
utils : : to_log ( LOG_LEVEL_DEBUG , " Firmware_sup_color_corr_:%s \r \n " , firmware_sup_color_corr_ ? " enable " : " close " ) ;
utils : : to_log ( LOG_LEVEL_DEBUG , " Firmware_sup_double_img:%s \r \n " , firmware_sup_double_img ? " enable " : " close " ) ;
utils : : to_log ( LOG_LEVEL_DEBUG , " Firmware_sup_devs_lock_:%s \r \n " , firmware_sup_devs_lock_ ? " enable " : " close " ) ;
utils : : to_log ( LOG_LEVEL_DEBUG , " Firmware_sup_dpi_300:%s \r \n " , firmware_sup_dpi_300 ? " enable " : " close " ) ;
utils : : to_log ( LOG_LEVEL_DEBUG , " Firmware_sup_dpi_600:%s \r \n " , firmware_sup_dpi_600 ? " enable " : " close " ) ;
utils : : to_log ( LOG_LEVEL_DEBUG , " Firmware_sup_auto_speed_:%s \r \n " , firmware_sup_auto_speed_ ? " enable " : " close " ) ;
utils : : to_log ( LOG_LEVEL_DEBUG , " Firmware_sup_morr_:%s \r \n " , firmware_sup_morr_ ? " enable " : " close " ) ;
utils : : to_log ( LOG_LEVEL_DEBUG , " Firmware_sup_color_fill_:%s \r \n " , firmware_sup_color_fill_ ? " enable " : " close " ) ;
utils : : to_log ( LOG_LEVEL_DEBUG , " Firmware version: %s \n " , fv . c_str ( ) ) ;
2023-06-26 10:00:58 +00:00
//is_kernelsnap_239_220429_ = date >= "B0429" ? true : false;
//is_kernelsnap_239_220430_ = date >= "B0430" ? true : false;
//if (dev == "G1" || dev == "G2" )
//{
// is_kernelsnap_239_211209_ = date >= "A1209" ? (is_kernelsnap_239_211209_ = atoi(get_fpga().c_str()) >= 35211210) : false;//基本用不到了
// is_kernelsnap_239_220830_ = date >= "B0830" ? true: false;
// is_kernelsnap_239_221027_ = date >= "B1027" ? true : false;
// is_kernelsnap_239_3C_ = year >= "3C" ? true : false;
//
// is_kernelsnap_239_220500_ = date >= "B0500" ? true : false;
// is_kernelsnap_211227_ = date <= "A1227" ? true : false;
//}
//else
//{
// //is_kernelsnap_439_3C0606 = date >= "C0606" ? true : false;
// is_kernelsnap_239_3C_ = date >= "C0606" ? true : false;
//
//}
2023-06-12 12:06:28 +00:00
2022-11-02 10:06:49 +00:00
}
2022-11-24 08:57:31 +00:00
int hg_scanner_239 : : writedown_device_configuration ( bool type , setting_hardware : : HGSCANCONF_3399 * dev_conf )
2022-05-03 03:56:07 +00:00
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2022-05-17 07:04:55 +00:00
int ret = SCANNER_ERR_OK ;
2022-11-19 10:16:43 +00:00
if ( ! type )
return ret ;
2022-07-25 02:38:20 +00:00
if ( ! dev_conf )
2022-05-03 03:56:07 +00:00
dev_conf = & dev_conf_ ;
2022-11-19 10:16:43 +00:00
if ( is_multiout )
2022-10-11 08:22:32 +00:00
{
2022-11-22 07:31:21 +00:00
dev_conf - > params_3399 . color = image_prc_param_ . bits . multi_out = = MULTI_GRAY_AND_BW ? 0 : 1 ;
2022-10-11 08:22:32 +00:00
}
2022-11-19 10:16:43 +00:00
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 )
2022-10-28 03:01:01 +00:00
{
2022-11-19 10:16:43 +00:00
dev_conf - > params_3399 . color = 1 ;
2022-10-28 03:01:01 +00:00
}
2022-11-19 10:16:43 +00:00
2022-10-11 08:22:32 +00:00
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
)
{
2022-10-18 08:23:22 +00:00
dev_conf - > params_3399 . enable_sizecheck = false ;
2022-10-11 08:22:32 +00:00
}
2023-06-26 10:00:58 +00:00
if ( firmware_sup_auto_speed_ & & image_prc_param_ . bits . paper = = PAPER_AUTO_MATCH )
2023-03-03 01:52:39 +00:00
{
dev_conf - > params_3399 . is_fixedpaper = false ;
dev_conf - > params_3399 . en_autosize = true ;
}
2023-10-31 06:51:14 +00:00
if ( ! firmware_sup_auto_speed_ & & image_prc_param_ . bits . paper = = PAPER_AUTO_MATCH ) //3399 ,<2C> <> ?C之前的版<E79A84> <E78988> ?匹配原始尺寸设置 12
2023-04-03 03:48:49 +00:00
{
dev_conf - > params_3399 . paper = 12 ;
}
2022-10-18 08:23:22 +00:00
ret = write_register ( setting3399 : : SR_CONFIG_SCAN_PARAM , dev_conf - > value ) ;
2022-05-03 03:56:07 +00:00
2023-11-10 06:38:12 +00:00
char errbuf [ 40 ] = { 0 } ;
utils : : to_log ( LOG_LEVEL_DEBUG , " Writedown scanner configuration(0x%x) = %s \n " , dev_conf - > value , hg_scanner_err_name ( ret , errbuf ) ) ;
2022-05-03 03:56:07 +00:00
return ret ;
}
2022-11-24 08:57:31 +00:00
int hg_scanner_239 : : writedown_image_configuration ( void )
2022-05-03 03:56:07 +00:00
{
2023-05-24 06:46:34 +00:00
int ret = 0 ;
2022-05-17 07:04:55 +00:00
if ( ret ! = SCANNER_ERR_OK )
2022-05-03 03:56:07 +00:00
return ret ;
SCANCONF ic ;
2022-08-11 09:19:24 +00:00
int len = sizeof ( ic ) ;
2022-05-03 03:56:07 +00:00
bzero ( & ic , len ) ;
2022-11-23 11:00:17 +00:00
if ( image_prc_param_ . bits . text_direction ! = TEXT_DIRECTION_AUTO )
ic . imageRotateDegree = ( float ) image_prc_param_ . bits . text_direction ;
else
ic . imageRotateDegree = 0 ;
ic . imageRotateDegree * = 90.0f ;
2022-11-19 10:16:43 +00:00
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 ;
2022-05-03 03:56:07 +00:00
if ( test_1_paper_ )
{
2023-07-11 09:13:28 +00:00
utils : : log_info ( " scanning mode: testing ONE paper ... \n " , LOG_LEVEL_DEBUG ) ;
2022-05-03 03:56:07 +00:00
ic . scannum = ic . is_duplex ? 2 : 1 ;
}
else
{
2022-11-26 03:33:49 +00:00
if ( scan_count_ = = - 1 | | is_auto_paper_scan )
2022-08-22 06:32:02 +00:00
ic . scannum = - 1 ;
else
2023-02-08 09:24:07 +00:00
ic . scannum = ( ( image_prc_param_ . bits . page ! = PAGE_SINGLE ) ? scan_count_ * 2 : scan_count_ ) ;
2022-05-03 03:56:07 +00:00
}
2022-11-19 10:16:43 +00:00
ic . contrast = ( contrast_ - 4 ) * 333.0 ;
ic . brightness = ( bright_ - 128 ) * ( 2000.0 / 254.0 ) ;
image_configuration ( ic ) ;
2022-11-19 03:46:01 +00:00
{
2022-11-19 10:16:43 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2023-05-24 06:46:34 +00:00
ret = write_register ( setting3399 : : SR_CONFIF_IMGPROCPARAM , sizeof ( SCANCONF ) ) ;
2022-11-19 10:16:43 +00:00
ret = io_ - > write_bulk ( & ic , & len ) ;
2022-05-03 03:56:07 +00:00
2022-11-19 10:16:43 +00:00
this_thread : : sleep_for ( chrono : : milliseconds ( 500 ) ) ;
io_ - > set_timeout ( 2000 ) ; //必要延时
}
2022-05-03 03:56:07 +00:00
return ret ;
}
2022-11-24 08:57:31 +00:00
int hg_scanner_239 : : pop_first_image ( void )
2022-05-03 03:56:07 +00:00
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2023-11-10 06:38:12 +00:00
char errbuf [ 40 ] = { 0 } ;
2023-05-24 06:46:34 +00:00
2022-10-18 08:23:22 +00:00
int ret = write_register ( setting3399 : : SR_IM_POP , 1 ) ;
2023-05-05 09:00:37 +00:00
if ( ret )
{
2023-11-10 06:38:12 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " popup first image = %s \n " , hg_scanner_err_name ( ret , errbuf ) ) ;
2023-05-05 09:00:37 +00:00
}
2022-05-03 03:56:07 +00:00
return ret ;
}
2022-11-24 08:57:31 +00:00
int hg_scanner_239 : : read_one_image_from_usb ( SANE_Image_Statu statu )
2022-05-03 03:56:07 +00:00
{
int r = 0 ,
total = get_front_data_size ( ) ,
off = 0 ,
2022-05-17 07:04:55 +00:00
ret = SCANNER_ERR_OK ;
2023-05-24 06:46:34 +00:00
bool is_scanner_err_ok = false ;
2023-11-10 06:38:12 +00:00
char errbuf [ 40 ] = { 0 } ;
2023-04-14 08:31:12 +00:00
2022-05-03 03:56:07 +00:00
if ( ! waiting_for_memory_enough ( total ) )
{
2022-05-17 07:04:55 +00:00
status_ = SCANNER_ERR_INSUFFICIENT_MEMORY ;
2022-05-03 03:56:07 +00:00
return status_ ;
}
if ( total = = - 1 )
ret = status_ ;
else
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2022-06-01 03:04:10 +00:00
std : : shared_ptr < tiny_buffer > buf ( aquire_memory ( total ) ) ;
2022-05-23 06:10:18 +00:00
if ( ! buf . get ( ) )
return SCANNER_ERR_INSUFFICIENT_MEMORY ;
2022-05-03 03:56:07 +00:00
// write reading command
2023-05-24 06:46:34 +00:00
2022-10-18 08:23:22 +00:00
ret = write_register ( setting3399 : : SR_IM_TX , 1 ) ;
2023-05-24 06:46:34 +00:00
2022-07-23 05:42:34 +00:00
buf - > set_image_statu ( statu ) ;
2023-04-14 08:31:12 +00:00
2022-05-17 07:04:55 +00:00
if ( ret = = SCANNER_ERR_OK )
2022-05-03 03:56:07 +00:00
{
std : : this_thread : : sleep_for ( std : : chrono : : milliseconds ( 10 ) ) ;
r = total ;
{
2022-06-06 04:03:24 +00:00
unsigned int size = r ;
void * buff = buf - > data ( off , & size ) ;
2022-06-07 09:06:09 +00:00
int block = 0 ;
2022-06-06 04:03:24 +00:00
if ( ! buff )
2022-05-03 03:56:07 +00:00
{
2023-07-11 09:13:28 +00:00
utils : : to_log ( LOG_LEVEL_FATAL , " memory(0x%08x + %u) fatal when read USB image %d !!! \n " , off , r , usb_img_index_ ) ;
2022-06-06 04:03:24 +00:00
ret = SCANNER_ERR_INSUFFICIENT_MEMORY ;
}
else
{
r = size ;
2022-06-07 09:06:09 +00:00
while ( r > 0 )
2022-06-06 04:03:24 +00:00
{
2022-06-07 09:06:09 +00:00
block = 512 * 1024 ;
if ( r < block )
block = r ;
unsigned int size = block ;
void * buff = buf - > data ( off , & size ) ;
if ( ! buf )
2022-06-06 04:03:24 +00:00
{
2023-07-11 09:13:28 +00:00
//utils::to_log(LOG_LEVEL_FATAL, "memory(0x%08x + %u) fatal when read USB image %d !!!\n", index, block, usb_img_index_);
2022-06-06 04:03:24 +00:00
ret = SCANNER_ERR_INSUFFICIENT_MEMORY ;
break ;
}
2022-06-07 09:06:09 +00:00
block = size ;
2023-04-23 07:07:39 +00:00
ret = io_ - > read_bulk ( buff , & block ) ; //可能会出现TIME_OUT 然后只能退出去,下一次再来取
2023-04-14 08:31:12 +00:00
2023-04-23 07:07:39 +00:00
if ( ret ! = SCANNER_ERR_OK )
2023-04-14 08:31:12 +00:00
{
2023-11-10 06:38:12 +00:00
utils : : to_log ( LOG_LEVEL_FATAL , " read_one_image_from_usb read_data:%s!!! read data[%d/:%d] \n " , hg_scanner_err_name ( ret , errbuf ) , size , block ) ;
2022-06-07 09:06:09 +00:00
break ;
2023-03-14 09:02:38 +00:00
}
2023-04-23 07:07:39 +00:00
2022-06-07 09:06:09 +00:00
off + = block ;
r - = block ;
2022-06-06 04:03:24 +00:00
}
2022-05-03 03:56:07 +00:00
}
}
2023-04-14 08:31:12 +00:00
if ( r > 0 )
{
2023-07-11 09:13:28 +00:00
utils : : to_log ( LOG_LEVEL_FATAL , " read_one_image_from_usb 'total' is %d, 'left' total len is:%d!!! \n " , total , r ) ;
2023-04-14 08:31:12 +00:00
}
2022-05-17 07:04:55 +00:00
if ( ret = = SCANNER_ERR_OK )
2022-05-03 03:56:07 +00:00
{
ret = save_usb_data ( buf ) ;
2022-05-17 07:04:55 +00:00
if ( ret = = SCANNER_ERR_OK )
2022-05-03 03:56:07 +00:00
{
2023-05-24 06:46:34 +00:00
is_scanner_err_ok = true ;
2022-05-03 03:56:07 +00:00
}
}
else
{
2023-11-10 06:38:12 +00:00
utils : : to_log ( LOG_LEVEL_FATAL , " Read image data from USB err: %s \n " , hg_scanner_err_name ( ret , errbuf ) ) ;
2022-05-03 03:56:07 +00:00
}
}
}
2023-05-24 06:46:34 +00:00
if ( is_scanner_err_ok )
{
pop_first_image ( ) ;
}
2022-05-03 03:56:07 +00:00
return ret ;
}
2023-04-14 08:31:12 +00:00
int hg_scanner_239 : : discard_all_images ( void )
2022-05-03 03:56:07 +00:00
{
2023-04-14 08:31:12 +00:00
int block = 1024 * 512 ,
oto = 0 , pre_img = 0 ,
pre_int = 0 ,
ret = SCANNER_ERR_OK ;
string str ;
str . resize ( block ) ;
2022-05-03 03:56:07 +00:00
{
2023-04-23 07:07:39 +00:00
char buf [ 64 ] ;
int size = sizeof ( buf ) ;
ret = SCANNER_ERR_OK ;
setting3399 : : HGEIntInfo * info = ( setting3399 : : HGEIntInfo * ) buf ;
2022-05-03 03:56:07 +00:00
{
2023-05-20 03:13:33 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2023-04-23 07:07:39 +00:00
ret = io_ - > read_interrupt ( buf , & size ) ;
2022-05-03 03:56:07 +00:00
}
2023-05-24 07:58:34 +00:00
while ( ret = = SCANNER_ERR_OK & & size )
2023-04-23 07:07:39 +00:00
{
pre_int + + ;
if ( info - > From = = setting3399 : : IMG )
{
while ( get_image_count ( ) > 0 )
{
pop_first_image ( ) ;
pre_img + + ;
}
}
2022-05-03 03:56:07 +00:00
2023-04-23 07:07:39 +00:00
size = sizeof ( buf ) ;
{
2023-05-20 03:13:33 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2023-04-23 07:07:39 +00:00
ret = io_ - > read_interrupt ( buf , & size ) ;
}
}
}
std : : this_thread : : sleep_for ( std : : chrono : : milliseconds ( 1000 ) ) ;
2023-04-14 08:31:12 +00:00
2022-05-03 03:56:07 +00:00
if ( pre_int )
2023-07-11 09:13:28 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " prev-connection has left %d interrupt packet(s) && %d image(s). \n " , pre_int , pre_img ) ;
2023-04-14 08:31:12 +00:00
return 0 ;
2022-05-03 03:56:07 +00:00
}
2023-06-13 04:28:20 +00:00
int hg_scanner_239 : : get_roller_life ( void )
{
return 450000 ;
}
2022-05-03 03:56:07 +00:00
int hg_scanner_239 : : on_color_mode_changed ( int & color_mode )
{
2022-11-19 10:16:43 +00:00
dev_conf_ . params_3399 . color = ( color_mode = = COLOR_MODE_BLACK_WHITE | | color_mode = = COLOR_MODE_256_GRAY ) ? 0 : 1 ;
return SCANNER_ERR_OK ;
/*int ret = SCANNER_ERR_OK;
2022-05-03 03:56:07 +00:00
2022-10-18 08:23:22 +00:00
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 )
2022-05-03 03:56:07 +00:00
{
2022-10-18 08:23:22 +00:00
dev_conf_ . params_3399 . color ^ = 1 ;
2022-05-03 03:56:07 +00:00
ret = writedown_device_configuration ( ) ;
if ( ret )
2022-10-18 08:23:22 +00:00
dev_conf_ . params_3399 . color ^ = 1 ;
2022-05-03 03:56:07 +00:00
}
if ( color_mode = = COLOR_MODE_AUTO_MATCH )
{
2022-10-18 08:23:22 +00:00
dev_conf_ . params_3399 . color = 1 ;
2022-05-03 03:56:07 +00:00
}
2022-11-19 10:16:43 +00:00
return ret ; */
2022-05-03 03:56:07 +00:00
}
int hg_scanner_239 : : on_paper_changed ( int & paper )
{
bool exact = true ;
2022-10-18 08:23:22 +00:00
int ind = hgpaper_to_devspaper ( paper_map_3399 , ARRAY_SIZE ( paper_map_3399 ) , paper , & exact , & paper_size_ ) ,
2022-05-17 07:04:55 +00:00
ret = exact ? SCANNER_ERR_OK : SCANNER_ERR_NOT_EXACT ;
2022-05-03 03:56:07 +00:00
2022-10-18 08:23:22 +00:00
if ( dev_conf_ . params_3399 . paper ! = paper_map_3399 [ ind ] . dev_value )
2022-05-03 03:56:07 +00:00
{
2022-10-18 08:23:22 +00:00
int old = dev_conf_ . params_3399 . paper ;
2022-05-03 03:56:07 +00:00
2022-10-18 08:23:22 +00:00
dev_conf_ . params_3399 . paper = paper_map_3399 [ ind ] . dev_value ;
2022-05-03 03:56:07 +00:00
ret = writedown_device_configuration ( ) ;
if ( ret )
{
2022-10-18 08:23:22 +00:00
dev_conf_ . params_3399 . paper = old ;
for ( int i = 0 ; i < ARRAY_SIZE ( paper_map_3399 ) ; + + i )
2022-05-03 03:56:07 +00:00
{
2022-10-18 08:23:22 +00:00
if ( paper_map_3399 [ i ] . dev_value = = old )
2022-05-03 03:56:07 +00:00
{
2022-10-18 08:23:22 +00:00
paper = paper_map_3399 [ i ] . paper ;
2022-05-03 03:56:07 +00:00
break ;
}
}
}
else if ( ! exact )
2022-05-17 07:04:55 +00:00
ret = SCANNER_ERR_NOT_EXACT ;
2022-05-03 03:56:07 +00:00
}
return ret ;
}
int hg_scanner_239 : : on_paper_check_changed ( bool & check )
{
2022-05-17 07:04:55 +00:00
int ret = SCANNER_ERR_OK ;
2022-05-03 03:56:07 +00:00
2022-10-18 08:23:22 +00:00
if ( dev_conf_ . params_3399 . enable_sizecheck ^ check )
2022-05-03 03:56:07 +00:00
{
2022-10-18 08:23:22 +00:00
dev_conf_ . params_3399 . enable_sizecheck = check ;
size_check = check ;
2022-05-03 03:56:07 +00:00
ret = writedown_device_configuration ( ) ;
2022-06-08 10:33:49 +00:00
2022-05-03 03:56:07 +00:00
if ( ret )
{
2022-10-18 08:23:22 +00:00
dev_conf_ . params_3399 . enable_sizecheck = ! check ;
check = dev_conf_ . params_3399 . enable_sizecheck ;
2022-05-03 03:56:07 +00:00
}
}
return ret ;
}
int hg_scanner_239 : : on_resolution_changed ( int & dpi )
{
2023-06-26 10:00:58 +00:00
if ( ! firmware_sup_dpi_600 )
2023-03-15 03:03:36 +00:00
dev_conf_ . params_3399 . dpi = 1 ;
else
2023-06-26 10:00:58 +00:00
dev_conf_ . params_3399 . dpi = dpi > = 500 ? 3 : ( dpi < 500 & & dpi > 299 ) ? 2 : 1 ;
2023-03-15 03:03:36 +00:00
2023-10-31 06:51:14 +00:00
//dev_conf_.params_3399.dpi = 1; //dpi 华凌cis和敦南cis 默认<E9BB98> <E8AEA4> ?无需改变
2023-02-08 08:19:42 +00:00
int ret = writedown_device_configuration ( ) ;
return ret ;
2022-05-03 03:56:07 +00:00
}
int hg_scanner_239 : : on_ultrasonic_check_changed ( bool & check )
{
2022-05-17 07:04:55 +00:00
int ret = SCANNER_ERR_OK ;
2022-05-03 03:56:07 +00:00
2022-10-18 08:23:22 +00:00
if ( dev_conf_ . params_3399 . ultrasonic_enable ^ check )
2022-05-03 03:56:07 +00:00
{
2022-10-18 08:23:22 +00:00
dev_conf_ . params_3399 . ultrasonic_enable = check ;
2022-05-03 03:56:07 +00:00
ret = writedown_device_configuration ( ) ;
if ( ret )
{
2022-10-18 08:23:22 +00:00
dev_conf_ . params_3399 . ultrasonic_enable = ! check ;
check = dev_conf_ . params_3399 . ultrasonic_enable ;
2022-05-03 03:56:07 +00:00
}
}
return ret ;
}
int hg_scanner_239 : : on_staple_check_changed ( bool & check )
{
2022-05-17 07:04:55 +00:00
int ret = SCANNER_ERR_OK ;
2022-05-03 03:56:07 +00:00
2022-10-18 08:23:22 +00:00
if ( dev_conf_ . params_3399 . staple_enbale ^ check )
2022-05-03 03:56:07 +00:00
{
2022-10-18 08:23:22 +00:00
dev_conf_ . params_3399 . staple_enbale = check ;
2022-05-03 03:56:07 +00:00
ret = writedown_device_configuration ( ) ;
if ( ret )
{
2022-10-18 08:23:22 +00:00
dev_conf_ . params_3399 . staple_enbale = ! check ;
check = dev_conf_ . params_3399 . staple_enbale ;
2022-05-03 03:56:07 +00:00
}
}
return ret ;
}
int hg_scanner_239 : : on_skew_check_changed ( bool & check )
{
2022-05-17 07:04:55 +00:00
int ret = SCANNER_ERR_OK ;
2022-05-03 03:56:07 +00:00
2022-10-18 08:23:22 +00:00
if ( dev_conf_ . params_3399 . screw_detect_enable ^ check )
2022-05-03 03:56:07 +00:00
{
2022-10-18 08:23:22 +00:00
dev_conf_ . params_3399 . screw_detect_enable = check ;
2022-05-03 03:56:07 +00:00
ret = writedown_device_configuration ( ) ;
if ( ret )
{
2022-10-18 08:23:22 +00:00
dev_conf_ . params_3399 . screw_detect_enable = ! check ;
check = dev_conf_ . params_3399 . screw_detect_enable ;
2022-05-03 03:56:07 +00:00
}
}
return ret ;
}
int hg_scanner_239 : : on_skew_check_level_changed ( int & check )
{
2022-05-17 07:04:55 +00:00
int ret = SCANNER_ERR_OK ,
2023-10-31 06:51:14 +00:00
val = check - 1 , //上面设置的是1 - 5 , 接受范围值为0 - 4, 默<EFBC8C> <E9BB98> ?
2022-10-18 08:23:22 +00:00
old = dev_conf_ . params_3399 . screw_detect_level ;
setting_hardware : : HGSCANCONF_3399 cf ;
2022-05-03 03:56:07 +00:00
2023-03-16 10:49:24 +00:00
if ( val < 0 & & val > 5 )
{
check = 3 ;
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 ;
check + = 1 ;
}
}
/*cf.params_3399.screw_detect_level = -1;
2022-05-03 03:56:07 +00:00
if ( val < 0 )
{
val = 0 ;
2022-05-17 07:04:55 +00:00
ret = SCANNER_ERR_NOT_EXACT ;
2022-05-03 03:56:07 +00:00
}
2022-10-18 08:23:22 +00:00
else if ( val > cf . params_3399 . screw_detect_level )
2022-05-03 03:56:07 +00:00
{
2022-10-18 08:23:22 +00:00
val = cf . params_3399 . screw_detect_level ;
2022-05-17 07:04:55 +00:00
ret = SCANNER_ERR_NOT_EXACT ;
2022-05-03 03:56:07 +00:00
}
2022-10-18 08:23:22 +00:00
if ( val ! = dev_conf_ . params_3399 . screw_detect_level )
2022-05-03 03:56:07 +00:00
{
2022-10-18 08:23:22 +00:00
dev_conf_ . params_3399 . screw_detect_level = val ;
2022-05-03 03:56:07 +00:00
ret = writedown_device_configuration ( ) ;
if ( ret )
2022-10-18 08:23:22 +00:00
check = dev_conf_ . params_3399 . screw_detect_level = old ;
2022-05-03 03:56:07 +00:00
}
2022-05-17 07:04:55 +00:00
if ( ret = = SCANNER_ERR_OK & & val ! = check )
2022-05-03 03:56:07 +00:00
{
check = val ;
2022-05-17 07:04:55 +00:00
ret = SCANNER_ERR_NOT_EXACT ;
2023-03-16 10:49:24 +00:00
} */
2022-05-03 03:56:07 +00:00
return ret ;
}
2022-07-23 11:08:18 +00:00
int hg_scanner_239 : : on_get_feedmode ( int & feedmode ) //获取分纸强度
2022-07-23 10:01:44 +00:00
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2022-07-23 10:01:44 +00:00
int ret = SCANNER_ERR_OK ,
val = 0 ;
2022-10-18 08:23:22 +00:00
ret = read_register ( setting3399 : : SR_GET_FEEDMODE , & feedmode ) ;
2022-07-25 10:19:40 +00:00
if ( ret = = SCANNER_ERR_OK )
{
save_feedmode_type_ = true ;
}
2022-07-23 10:01:44 +00:00
return ret ;
}
2022-07-23 11:08:18 +00:00
int hg_scanner_239 : : on_set_feedmode ( int feedmode ) //设置分纸强度
2022-07-23 10:01:44 +00:00
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2022-07-23 10:01:44 +00:00
int ret = SCANNER_ERR_OK ,
val = 0 ;
2022-10-18 08:23:22 +00:00
ret = write_register ( setting3399 : : SR_SET_FEEDMODE , feedmode ) ;
2022-07-23 10:01:44 +00:00
return ret ;
}
2022-07-30 03:19:20 +00:00
int hg_scanner_239 : : on_pic_type ( bool & pic )
{
2022-10-18 08:23:22 +00:00
dev_conf_ . params_3399 . is_textcorrect = pic ;
2022-07-30 03:19:20 +00:00
int ret = writedown_device_configuration ( ) ;
return ret ;
}
2022-08-09 07:59:01 +00:00
int hg_scanner_239 : : on_pick_paper ( bool autostrength )
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2022-08-09 07:59:01 +00:00
int val = 0 ,
2022-10-18 08:23:22 +00:00
ret = write_register ( setting3399 : : SR_SET_AUTOMATICCONTROLFEEDMODE_ENABLE , autostrength ) ;
2022-08-09 07:59:01 +00:00
if ( ret ! = SCANNER_ERR_OK )
return ret ;
2022-10-18 08:23:22 +00:00
ret = read_register ( setting3399 : : SR_GET_AUTOMATICCONTROLFEEDMODE_ENABLE , & val ) ;
2022-08-09 07:59:01 +00:00
return ret ;
}
int hg_scanner_239 : : on_pick_paper_threshold ( double threshold )
{
2023-03-16 10:49:24 +00:00
float f = threshold ;
//threshold *= 10;
int val = * ( int * ) & f ;
int ret = write_register ( setting3399 : : SR_SET_AUTOMATICCONTROLFEEDMODE_THRESHOLD , val ) ;
2022-08-09 07:59:01 +00:00
if ( ret ! = SCANNER_ERR_OK )
return ret ;
2022-10-18 08:23:22 +00:00
ret = read_register ( setting3399 : : SR_GET_AUTOMATICCONTROLFEEDMODE_THRESHOLD , & val ) ;
2023-03-16 10:49:24 +00:00
float v = * ( float * ) & val ;
2022-08-09 07:59:01 +00:00
return ret ;
}
2022-08-11 09:19:24 +00:00
int hg_scanner_239 : : on_is_auto_paper ( bool isautopaper )
{
2022-10-28 10:42:22 +00:00
int val = 0 ,
ret = SCANNER_ERR_OK ;
dev_conf_ . params_3399 . is_autopaper = isautopaper ;
2022-08-11 09:19:24 +00:00
return ret ;
}
2022-12-28 01:56:54 +00:00
int hg_scanner_239 : : on_cis_get_image ( bool isautopaper )
{
is_cis_image = isautopaper ;
dev_conf_ . params_3399 . pc_correct = isautopaper ;
2023-06-26 10:00:58 +00:00
return SCANNER_ERR_OK ;
2022-12-28 01:56:54 +00:00
}
2022-05-03 03:56:07 +00:00
void hg_scanner_239 : : on_device_reconnected ( void )
{
int ret = writedown_device_configuration ( ) ;
init_version ( ) ;
2022-05-17 07:04:55 +00:00
rewrite_conf_ = ret ! = SCANNER_ERR_OK ;
2022-05-03 03:56:07 +00:00
if ( reset_ )
{
reset_ = false ;
start ( ) ;
}
}
int hg_scanner_239 : : on_scanner_closing ( bool force )
{
2022-05-17 07:04:55 +00:00
return SCANNER_ERR_OK ;
2022-05-03 03:56:07 +00:00
}
2023-01-05 10:18:38 +00:00
void hg_scanner_239 : : thread_correction ( void )
{
StopWatch sw ;
char buf [ 64 ] ;
setting3399 : : HGEIntInfo * info = ( setting3399 : : HGEIntInfo * ) buf ;
int size = sizeof ( buf ) ,
2023-11-10 06:38:12 +00:00
ret = SCANNER_ERR_OK ;
char errbuf [ 40 ] = { 0 } ;
2023-01-05 10:18:38 +00:00
while ( run_ )
{
size = sizeof ( buf ) ;
{
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
ret = io_ - > read_interrupt ( buf , & size ) ;
io_ - > set_timeout ( 1000 ) ;
printf ( " size:%d \r \n " , size ) ;
}
if ( ret = = SCANNER_ERR_TIMEOUT )
{
2023-06-16 09:29:55 +00:00
if ( sw . elapsed_s ( ) > 10 )
2023-01-05 10:18:38 +00:00
{
2023-08-21 08:09:57 +00:00
is_auto_falt = false ;
2023-06-16 09:29:55 +00:00
status_ = SCANNER_ERR_DEVICE_AUTO_FAIL_OVER ;
2023-11-10 08:45:27 +00:00
//notify_ui_working_status(from_default_language(STATU_DESC_SCANNER_ERR_DEVICE_FAIL_OUTTIME), SANE_EVENT_ERROR, ret); // 通信超时
2023-11-10 06:38:12 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " 设备校正超时 '%s' \n " , hg_scanner_err_name ( status_ , errbuf ) ) ;
2023-01-05 10:18:38 +00:00
break ;
}
std : : this_thread : : sleep_for ( std : : chrono : : milliseconds ( 500 ) ) ;
2023-03-17 14:27:06 +00:00
continue ;
2023-01-05 10:18:38 +00:00
}
if ( size = = sizeof ( buf ) )
{
if ( setting3399 : : AutoCorrect = = info - > From )
{
2023-06-16 09:29:55 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2023-01-05 10:18:38 +00:00
status_ = = SCANNER_ERR_DEVICE_AUTO_FAIL_INFO ;
sw . reset ( ) ;
std : : string sinfo ;
int len = info - > Img_Index ;
sinfo . resize ( len ) ;
io_ - > read_bulk ( & sinfo [ 0 ] , & len ) ;
2023-06-28 11:03:14 +00:00
char buf [ 2048 ] ;
2023-01-05 10:18:38 +00:00
strcpy ( buf , sinfo . c_str ( ) ) ;
notify_ui_working_status ( buf , SANE_EVENT_STATUS , status_ ) ;
printf ( " %s \r \n " , sinfo . c_str ( ) ) ;
if ( info - > Code = = 4 )
{
2023-08-21 08:09:57 +00:00
is_auto_falt = false ;
2023-01-05 10:18:38 +00:00
status_ = SCANNER_ERR_DEVICE_AUTO_FAIL_OVER ;
2023-03-20 01:19:34 +00:00
//notify_ui_working_status(buf, SANE_EVENT_STATUS, status_);
2023-03-17 14:27:06 +00:00
break ;
2023-01-05 10:18:38 +00:00
}
2023-03-17 14:27:06 +00:00
//break;
2023-01-05 10:18:38 +00:00
}
}
this_thread : : sleep_for ( chrono : : milliseconds ( 10 ) ) ;
}
}
2023-08-21 08:09:57 +00:00
int hg_scanner_239 : : read_control_device_files ( std : : string file_path , std : : string & file_str )
{
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
string path = file_path ;
if ( path . empty ( ) )
{
utils : : to_log ( LOG_LEVEL_DEBUG , " read_control_device_files is fail path is %s \n " , path . empty ( ) ? " NULL " : path . c_str ( ) ) ;
return SCANNER_ERR_NO_DATA ;
}
int ret = SCANNER_ERR_OK ,
len = path . size ( ) ,
lenstr = file_str . size ( ) ,
get_buffer_size = 0 ;
io_ - > set_timeout ( 3000 ) ;
ret = write_register ( setting3399 : : SR_SET_JSON_PATH , len ) ;
if ( ret = = SCANNER_ERR_OK )
{
ret = io_ - > write_bulk ( & path [ 0 ] , & len ) ;
}
if ( ret = = SCANNER_ERR_OK )
{
ret = read_register ( setting3399 : : SR_GET_JSON_SIZE , & get_buffer_size ) ;
}
if ( ret = = SCANNER_ERR_OK )
{
ret = write_register ( setting3399 : : SR_GET_JSON , get_buffer_size ) ;
}
if ( ret = = SCANNER_ERR_OK )
{
file_str . resize ( get_buffer_size ) ;
ret = io_ - > read_bulk ( & file_str [ 0 ] , & get_buffer_size ) ;
if ( file_str . empty ( ) )
{
utils : : to_log ( LOG_LEVEL_DEBUG , " read_control_device_files get buffer is NULL %d \n " , get_buffer_size ) ;
return SCANNER_ERR_NO_DATA ;
}
}
return ret ;
}
int hg_scanner_239 : : write_control_device_files ( std : : string file_path , std : : string file_str )
{
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
string path = file_path ;
string str = file_str ;
if ( path . empty ( ) | | str . empty ( ) )
{
utils : : to_log ( LOG_LEVEL_DEBUG , " write_control_device_files is fail path is %s str is %s \n " , path . empty ( ) ? " NULL " : path . c_str ( ) , str . empty ( ) ? " NULL " : str . c_str ( ) ) ;
return SCANNER_ERR_INVALID_PARAMETER ;
}
int ret = SCANNER_ERR_OK ;
int len = path . size ( ) ,
lenstr = str . size ( ) ;
io_ - > set_timeout ( 2000 ) ;
ret = write_register ( setting3399 : : SR_SET_JSON_PATH , len ) ;
if ( ret ! = SCANNER_ERR_OK )
{
utils : : to_log ( LOG_LEVEL_DEBUG , " write_control_device_files write_register [SR_SET_JSON_PATH] is fail \n " ) ;
return ret ;
}
ret = io_ - > write_bulk ( & path [ 0 ] , & len ) ;
if ( ret ! = SCANNER_ERR_OK )
{
utils : : to_log ( LOG_LEVEL_DEBUG , " write_control_device_files write_bulk path is fail \n " ) ;
return ret ;
}
ret = write_register ( setting3399 : : SR_SET_JSON , lenstr ) ;
if ( ret ! = SCANNER_ERR_OK )
{
utils : : to_log ( LOG_LEVEL_DEBUG , " write_control_device_files write_register [SR_SET_JSON] is fail \n " ) ;
return ret ;
}
ret = io_ - > write_bulk ( & str [ 0 ] , & lenstr ) ;
if ( ret ! = SCANNER_ERR_OK )
{
utils : : to_log ( LOG_LEVEL_DEBUG , " write_control_device_files write_bulk str is fail \n " ) ;
return ret ;
}
2023-11-10 06:38:12 +00:00
//VLOG_MINI_3(LOG_LEVEL_DEBUG_INFO, "log path:%s ret:%s buffersize: %d\n", logpath.c_str(), hg_scanner_err_name(ret, errbuf), buffersize);
2023-08-21 08:09:57 +00:00
//return ret;
return SCANNER_ERR_OK ;
}
2023-01-05 10:18:38 +00:00
void hg_scanner_239 : : thread_get_dves_image ( void )
2022-05-03 03:56:07 +00:00
{
2023-01-04 09:54:30 +00:00
char buf [ 64 ] ;
2022-10-18 08:23:22 +00:00
setting3399 : : HGEIntInfo * info = ( setting3399 : : HGEIntInfo * ) buf ;
2022-05-03 03:56:07 +00:00
int size = sizeof ( buf ) ,
2023-01-05 10:18:38 +00:00
ret = SCANNER_ERR_OK ,
count = 0 ;
2022-08-11 09:19:24 +00:00
int auoto_paper_indx = 0 ;
2023-11-10 06:38:12 +00:00
char errbuf [ 40 ] = { 0 } ;
2023-03-17 09:09:50 +00:00
2023-03-03 01:52:39 +00:00
svdevs_err_ . clear ( ) ;
2023-03-15 11:00:17 +00:00
StopWatch sw ;
2023-01-05 10:18:38 +00:00
while ( run_ ) //&& !user_cancel_
2022-05-03 03:56:07 +00:00
{
size = sizeof ( buf ) ;
{
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2023-10-31 06:51:14 +00:00
memset ( buf , 0 , size ) ;
2022-05-03 03:56:07 +00:00
ret = io_ - > read_interrupt ( buf , & size ) ;
2022-08-26 07:44:22 +00:00
io_ - > set_timeout ( 1000 ) ;
2022-05-03 03:56:07 +00:00
}
2023-01-16 08:03:14 +00:00
2022-05-17 07:04:55 +00:00
if ( ret = = SCANNER_ERR_TIMEOUT )
2022-05-03 03:56:07 +00:00
{
2023-03-17 09:09:50 +00:00
std : : this_thread : : sleep_for ( std : : chrono : : milliseconds ( 400 ) ) ;
2023-04-08 06:47:59 +00:00
if ( sw . elapsed_s ( ) > 60 & & ! is_auto_paper_scan )
2022-05-03 03:56:07 +00:00
{
status_ = ret ;
2023-04-14 08:31:12 +00:00
notify_ui_working_status ( from_default_language ( STATU_DESC_SCANNER_ERR_DEVICE_GET_IMAGE_OUTTIME ) , SANE_EVENT_ERROR , ret ) ; // 取图通信超时
2023-11-10 06:38:12 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " get image time out:%s \n " , hg_scanner_err_name ( status_ , errbuf ) ) ;
2022-05-03 03:56:07 +00:00
break ;
}
2023-03-17 09:09:50 +00:00
if ( is_auto_paper_scan & & sw . elapsed_s ( ) > = is_auto_paper_scan_exit_time & & is_auto_paper_scan_exit_time ! = 0 )
2023-03-15 11:00:17 +00:00
{
2023-10-31 06:51:14 +00:00
do_stop ( ) ;
2023-03-15 11:00:17 +00:00
notify_ui_working_status ( from_default_language ( STATU_DESC_SCANNER_ERR_DEVICE_EXIT_WAIT_SCAN ) , SANE_EVENT_ERROR , status_ ) ;
2023-07-11 09:13:28 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " auto paper scan exit :%s \n " , from_default_language ( STATU_DESC_SCANNER_ERR_DEVICE_EXIT_WAIT_SCAN ) ) ;
2023-03-15 11:00:17 +00:00
}
2023-03-17 09:09:50 +00:00
if ( ( get_status ( ) & 0x03 ) = = 0 )
{
status_ = SCANNER_ERR_OK ;
//break;
}
if ( user_cancel_ & & is_auto_paper_scan ) //其他直接跳过当此循坏
2022-08-26 07:44:22 +00:00
{
size = sizeof ( buf ) ;
memset ( buf , 0 , size ) ;
2022-10-18 08:23:22 +00:00
info - > From = setting3399 : : STOPSCAN ;
2023-07-11 09:13:28 +00:00
utils : : log_info ( " User cancelled (checked when read INT timeout), we faked a 'STOP' messag to enter exiting process ... \n " , LOG_LEVEL_DEBUG ) ;
2022-08-26 07:44:22 +00:00
}
else
continue ;
2023-03-17 09:09:50 +00:00
2022-05-03 03:56:07 +00:00
}
2022-05-17 07:04:55 +00:00
else if ( ret ! = SCANNER_ERR_OK )
2022-05-03 03:56:07 +00:00
{
status_ = ret ;
break ;
}
2023-03-15 11:00:17 +00:00
sw . reset ( ) ;
2023-03-17 09:09:50 +00:00
2022-05-03 03:56:07 +00:00
if ( size = = sizeof ( buf ) )
{
status_ = settings : : device_status_to_hg_err ( info ) ;
2023-05-05 09:00:37 +00:00
if ( status_ )
{
2023-07-11 09:13:28 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " status from interrupt point is '%s' \n " , hg_scanner_err_description ( status_ ) ) ;
2023-05-05 09:00:37 +00:00
}
2023-01-05 10:18:38 +00:00
if ( status_ ! = SCANNER_ERR_OK
& & status_ ! = SCANNER_ERR_TIMEOUT
2022-12-30 09:14:49 +00:00
& & status_ ! = SCANNER_ERR_DEVICE_STOPPED
& & status_ ! = SCANNER_ERR_DEVICE_AUTO_FAIL_OVER
& & status_ ! = SCANNER_ERR_DEVICE_AUTO_FAIL_INFO
)
2022-05-03 03:56:07 +00:00
{
2022-08-13 07:06:32 +00:00
if ( ! is_dev_image_process_done ( ) | | ( double_paper_handle_ & DOUBLE_PAPER_SAVE_IMG ) )
2022-05-03 03:56:07 +00:00
{
2022-07-23 05:42:34 +00:00
int st = status_ , count = 0 , statu = last_usb_image_statu ( st ) ;
2022-05-03 03:56:07 +00:00
while ( ! is_dev_image_process_done ( ) )
std : : this_thread : : sleep_for ( std : : chrono : : milliseconds ( 30 ) ) ;
2022-08-13 07:06:32 +00:00
StopWatch delay ;
2023-01-05 10:18:38 +00:00
if ( ( double_paper_handle_ & DOUBLE_PAPER_SAVE_IMG ) & & st = = SCANNER_ERR_DEVICE_DOUBLE_FEEDING )
2022-08-13 07:06:32 +00:00
{
int wait = 3000 + ( img_conf_ . resolution_dst / 200 * 10000 ) ;
while ( get_image_count ( ) = = 0 )
{
std : : this_thread : : sleep_for ( std : : chrono : : milliseconds ( 30 ) ) ;
if ( delay . elapsed_ms ( ) > wait )
break ;
}
}
2023-10-31 06:51:14 +00:00
////239 暂时先关闭双张存图弹窗提示, 待到固件更新再确认是否需要弹<E8A681> <E5BCB9> ?
2023-03-17 09:09:50 +00:00
//while ((count = get_image_count()) > 0)
//{
2023-10-31 06:51:14 +00:00
// int s = IMG_STATUS_OK;
2023-03-17 09:09:50 +00:00
// 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;
2023-03-16 10:49:24 +00:00
//break;
2022-05-03 03:56:07 +00:00
}
2023-03-03 01:52:39 +00:00
svdevs_err_ . push_back ( status_ ) ;
2023-05-24 06:46:34 +00:00
//break;
//这个时候退出的话消息就还没读完, 错误信息先保存下来, 只有获取到stop时才退出, 如果没获取完退出, 可能会导致第二次扫描直接返回扫描完成
2022-05-03 03:56:07 +00:00
}
2022-10-18 08:23:22 +00:00
if ( info - > From = = setting3399 : : IMG )
2022-05-03 03:56:07 +00:00
{
int s = get_status ( ) ;
2023-01-05 10:18:38 +00:00
// if (s > 0 && s < 4) // running ...
2022-05-03 03:56:07 +00:00
{
while ( get_image_count ( ) > 0 )
{
2023-03-17 09:09:50 +00:00
2022-05-03 03:56:07 +00:00
ret = read_one_image_from_usb ( ) ;
2023-03-17 09:09:50 +00:00
count + + ;
2022-05-17 07:04:55 +00:00
if ( ret ! = SCANNER_ERR_OK
& & ret ! = SCANNER_ERR_CREATE_FILE_FAILED
& & ret ! = SCANNER_ERR_WRITE_FILE_FAILED )
2022-05-03 03:56:07 +00:00
break ;
}
}
//else
2023-07-11 09:13:28 +00:00
// utils::to_log(LOG_LEVEL_DEBUG, "status(0x%x) is not accept in usb thread\n", status);
2022-05-03 03:56:07 +00:00
}
2023-03-17 09:09:50 +00:00
else if ( info - > From = = setting3399 : : STOPSCAN ) //固件版本:3B0326获取无纸时, 下面中断信息会先发无纸在停止扫描,然后在发无纸
{ //此时int端点还要信息没有读取完, 而且退出点击继续扫描, 下面设备还未结束扫描
2023-03-03 01:52:39 +00:00
if ( ! svdevs_err_ . empty ( ) )
{
status_ = svdevs_err_ . front ( ) ;
}
2023-07-11 09:13:28 +00:00
utils : : log_info ( " received 'STOPSCAN' message in usb thread, check remaining image and finish scanning ... \n " , LOG_LEVEL_DEBUG ) ;
2022-05-03 03:56:07 +00:00
// fetch all buffered images and exit ...
2022-06-10 09:44:15 +00:00
//while(!is_dev_image_process_done())
2023-10-31 06:51:14 +00:00
if ( img_conf_ . resolution_dst > 200 & & is_quality_ = = IMG_QUALITY ) //删除这段代码, 你可能需要考虑一下后<E4B88B> <E5908E> ?
2023-05-09 09:39:47 +00:00
std : : this_thread : : sleep_for ( std : : chrono : : milliseconds ( 5000 ) ) ;
else
std : : this_thread : : sleep_for ( std : : chrono : : milliseconds ( 2000 ) ) ;
2022-05-03 03:56:07 +00:00
2023-10-31 06:51:14 +00:00
int rest = 0 ;
2022-05-03 03:56:07 +00:00
while ( get_image_count ( ) > 0 )
{
ret = read_one_image_from_usb ( ) ;
2023-10-31 06:51:14 +00:00
rest + + ;
2022-05-17 07:04:55 +00:00
if ( ret ! = SCANNER_ERR_OK
& & ret ! = SCANNER_ERR_CREATE_FILE_FAILED
& & ret ! = SCANNER_ERR_WRITE_FILE_FAILED )
2022-05-03 03:56:07 +00:00
break ;
}
2023-10-31 06:51:14 +00:00
count + = rest ;
if ( rest )
{
utils : : to_log ( LOG_LEVEL_DEBUG , " STOPSCAN message is ahead of %d image(s)! \n " , rest ) ;
}
2023-03-15 11:00:17 +00:00
if ( user_cancel_ & & ! is_auto_paper_scan )
2022-08-26 07:44:22 +00:00
{
2023-02-15 07:06:36 +00:00
if ( status_ & & status_ ! = SCANNER_ERR_DEVICE_STOPPED ) // thread_handle_image_process maybe call stop() when insufficient memory occurs .
2022-10-22 06:46:54 +00:00
ret = status_ ;
else
status_ = ret = SCANNER_ERR_USER_CANCELED ;
2023-05-24 06:46:34 +00:00
2023-11-10 08:45:27 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " %s \n " , from_default_language ( STATU_DESC_SCANNER_ERR_DEVICE_GET_USER_CANCEL_SCAN , nullptr ) ) ;
2022-08-26 07:44:22 +00:00
auoto_paper_indx = 0 ;
break ;
}
2022-05-03 03:56:07 +00:00
if ( count = = 0 )
{
2023-05-05 09:00:37 +00:00
//std::lock_guard<std::mutex> lock(io_lock_);
2022-05-03 03:56:07 +00:00
2023-07-11 09:13:28 +00:00
//utils::log_info(LOG_LEVEL_DEBUG, "First message received from USB is 'STOPSCAN'\n");
2023-01-05 10:18:38 +00:00
// notify_ui_working_status(STATU_DESC_DEVICE_RESET);
// reset_ = true;
// ret = io_->reset();
// status_ = SCANNER_ERR_IO;
2022-05-03 03:56:07 +00:00
}
2022-05-17 07:04:55 +00:00
else if ( status_ = = SCANNER_ERR_TIMEOUT | | status_ = = SCANNER_ERR_IO | | status_ = = SCANNER_ERR_DEVICE_STOPPED )
status_ = SCANNER_ERR_OK ;
2022-05-03 03:56:07 +00:00
int s = get_status ( ) ;
2023-05-24 06:46:34 +00:00
2023-03-17 09:09:50 +00:00
if ( count = = 0 | | ( s & 3 ) = = 0 )
2022-05-03 03:56:07 +00:00
{
2023-07-11 09:13:28 +00:00
utils : : log_info ( " Really stopped ^_^ \n " , LOG_LEVEL_DEBUG ) ;
2023-01-05 10:18:38 +00:00
2023-11-10 08:45:27 +00:00
string str = from_default_language ( STATU_DESC_SCANNER_ERR_DEVICE_ROUND_SACN_OVER , nullptr ) ;
2023-01-16 08:03:14 +00:00
str + = " : " + to_string ( + + auoto_paper_indx ) ;
2023-05-24 06:46:34 +00:00
2023-03-17 09:09:50 +00:00
if ( ! user_cancel_ & & is_auto_paper_scan & & svdevs_err_ . empty ( ) )
2023-03-15 11:00:17 +00:00
notify_ui_working_status ( str . c_str ( ) , SANE_EVENT_ERROR , status_ ) ;
2022-08-11 09:19:24 +00:00
else
2022-08-24 09:27:45 +00:00
break ;
2022-05-03 03:56:07 +00:00
}
}
2022-10-18 08:23:22 +00:00
else if ( info - > From = = setting3399 : : V4L2 )
2022-05-03 03:56:07 +00:00
{
2023-07-11 09:13:28 +00:00
utils : : to_log ( LOG_LEVEL_WARNING , " V4L2 message received, code = %d, index = %d \n " , info - > Code , info - > Img_Index ) ;
2023-01-05 10:18:38 +00:00
// stop();
2022-05-03 03:56:07 +00:00
break ;
}
2022-12-30 09:14:49 +00:00
else if ( info - > From = = setting3399 : : AutoCorrect )
{
std : : string devs_info ;
int len = info - > Img_Index ;
devs_info . resize ( len ) ;
ret = io_ - > read_bulk ( & info [ 0 ] , & len ) ;
if ( ret = = SCANNER_ERR_OK )
{
notify_ui_working_status ( devs_info . c_str ( ) , SANE_EVENT_STATUS , status_ ) ;
}
if ( status_ = = SCANNER_ERR_DEVICE_AUTO_FAIL_OVER )
break ;
}
2022-05-03 03:56:07 +00:00
else
{
// error handling ...
2023-07-11 09:13:28 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " Read HGEIntInfo: From = %d, Code = %d, Img_Index = %d, status = %s \n " , info - > From , info - > Code , info - > Img_Index , hg_scanner_err_description ( status_ ) ) ;
2022-05-03 03:56:07 +00:00
}
}
this_thread : : sleep_for ( chrono : : milliseconds ( 10 ) ) ;
}
2023-05-24 06:46:34 +00:00
// stop 通过int端点返回 如果不反回则是固件问题,软件不做处理
2023-11-10 06:38:12 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " USB thread exit with code: %s, status = %s \n " , hg_scanner_err_name ( ret , errbuf ) , hg_scanner_err_description ( status_ ) ) ;
2022-05-03 03:56:07 +00:00
}
2023-01-05 10:18:38 +00:00
void hg_scanner_239 : : thread_handle_usb_read ( void )
{
if ( is_auto_falt )
thread_correction ( ) ;
else
thread_get_dves_image ( ) ;
}
2022-12-23 08:51:10 +00:00
2023-10-31 06:51:14 +00:00
int hg_scanner_239 : : do_start ( void )
2022-05-03 03:56:07 +00:00
{
2022-05-20 09:11:50 +00:00
bool handled = false ;
int ret = try_third_app_handle_start ( handled ) ,
2022-10-12 06:26:29 +00:00
val = 0 ;
2023-11-10 06:38:12 +00:00
char errbuf [ 40 ] = { 0 } ;
2022-05-20 06:46:25 +00:00
// for third-sane-app invoking, added on 2022-05-19
2022-05-20 09:11:50 +00:00
if ( handled )
return ret ;
2022-05-20 06:46:25 +00:00
2022-12-13 10:13:46 +00:00
2022-05-03 03:56:07 +00:00
user_cancel_ = false ;
2023-06-26 10:00:58 +00:00
2022-10-12 06:26:29 +00:00
split3399_ = 0 ;
2022-05-03 03:56:07 +00:00
cb_mem_ = true ;
2023-07-11 09:13:28 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " scanner status: 0x%x \n " , get_status ( ) ) ;
2022-05-03 03:56:07 +00:00
reset ( ) ;
2022-11-24 08:57:31 +00:00
2023-10-31 06:51:14 +00:00
//211220固件版本不支持返<E68C81> <E8BF94> ?
2022-12-22 10:37:53 +00:00
ret = get_scan_is_sleep ( val ) ;
2023-02-13 08:38:05 +00:00
if ( ! val & & ret = = SCANNER_ERR_OK )
2022-08-13 02:15:40 +00:00
{
2022-11-24 16:54:43 +00:00
status_ = SCANNER_ERR_DEVICE_SLEEPING ;
2023-11-10 08:45:27 +00:00
utils : : to_log ( LOG_LEVEL_WARNING , " device start status is(%s) \n " , from_default_language ( STATU_DESC_SCANNER_ERR_DEVICE_SLEEPING , nullptr ) ) ;
2023-06-26 10:00:58 +00:00
set_notify_sleep ( ) ;
2023-05-24 06:46:34 +00:00
2022-08-13 02:15:40 +00:00
return status_ ;
}
2023-02-13 08:38:05 +00:00
if ( ret ! = SCANNER_ERR_OK )
{
return ret ;
}
2022-12-22 10:37:53 +00:00
bool type = true ;
ret = get_scan_mode ( type ) ;
2023-02-13 08:38:05 +00:00
if ( ! type & & ret = = SCANNER_ERR_OK )
2022-05-03 03:56:07 +00:00
{
2022-11-24 16:54:43 +00:00
status_ = SCANNER_ERR_DEVICE_COUNT_MODE ;
return status_ ;
2022-11-24 08:57:31 +00:00
}
2022-08-26 07:44:22 +00:00
2022-10-11 08:22:32 +00:00
if ( ret = = SCANNER_ERR_OK )
2022-05-03 03:56:07 +00:00
{
2022-11-19 10:16:43 +00:00
ret = writedown_device_configuration ( true ) ;
2022-11-24 08:57:31 +00:00
}
2022-05-17 07:04:55 +00:00
if ( ret = = SCANNER_ERR_OK )
2022-05-03 03:56:07 +00:00
{
ret = writedown_image_configuration ( ) ;
}
if ( ret )
{
2023-11-10 06:38:12 +00:00
utils : : to_log ( LOG_LEVEL_WARNING , " Write down image process parameters fail is(%s), the result will be unpredictable. \n " , hg_scanner_err_name ( ret , errbuf ) ) ;
2022-05-03 03:56:07 +00:00
}
2022-05-17 07:04:55 +00:00
if ( ret ! = SCANNER_ERR_OK )
2022-05-03 03:56:07 +00:00
{
2023-11-10 06:38:12 +00:00
utils : : to_log ( LOG_LEVEL_WARNING , " start status01 is(%s), the result will be unpredictable. \n " , hg_scanner_err_name ( ret , errbuf ) ) ;
2022-05-03 03:56:07 +00:00
return ret ;
}
2023-01-04 05:53:04 +00:00
# ifdef OEM_HUAGAO
2022-12-13 10:13:46 +00:00
if ( is_checksum_strat_scan )
{
std : : string str ( " C34E58CD5F3F2FF703E1AA24892FBD69 " ) ;
set_scan_lock_check_val ( str ) ;
}
2023-01-04 05:53:04 +00:00
# endif
2022-10-18 08:23:22 +00:00
ret = write_command ( setting3399 : : SC_START ) ;
2022-05-03 03:56:07 +00:00
io_ - > set_timeout ( 1000 ) ;
2022-05-17 07:04:55 +00:00
if ( ret = = SCANNER_ERR_OK )
2022-05-03 03:56:07 +00:00
{
wait_usb_ . notify ( ) ;
this_thread : : sleep_for ( chrono : : milliseconds ( 100 ) ) ;
2022-06-01 09:16:09 +00:00
ret = try_third_app_after_start ( ret ) ;
2022-05-03 03:56:07 +00:00
}
else
{
status_ = ret ;
2023-11-10 06:38:12 +00:00
utils : : to_log ( LOG_LEVEL_WARNING , " (Thread 0x%x)Send start command = %s \n " , GetCurrentProcessId ( ) , hg_scanner_err_name ( ret , errbuf ) ) ;
2022-05-03 03:56:07 +00:00
}
2023-07-11 09:13:28 +00:00
utils : : to_log ( LOG_LEVEL_WARNING , " ----------Main start scan status : %s---------- \n " , hg_scanner_err_description ( ret ) ) ;
2022-05-03 03:56:07 +00:00
return ret ;
}
2023-10-31 06:51:14 +00:00
int hg_scanner_239 : : do_stop ( void )
2022-05-03 03:56:07 +00:00
{
2022-08-25 05:08:54 +00:00
int ret = SCANNER_ERR_OK ;
2022-08-26 07:44:22 +00:00
2022-10-18 08:23:22 +00:00
ret = write_command ( setting3399 : : SC_STOP ) ;
2022-08-26 07:44:22 +00:00
io_ - > set_timeout ( 500 ) ;
2023-10-31 06:51:14 +00:00
return ret ;
2022-05-03 03:56:07 +00:00
}
int hg_scanner_239 : : reset ( void )
{
2023-08-21 08:09:57 +00:00
imgs_ . Clear ( ) ; // move from scanning done
2022-06-01 03:04:10 +00:00
final_imgs_ . clear ( ) ;
2022-05-03 03:56:07 +00:00
discard_all_images ( ) ;
return status_ ;
}
int hg_scanner_239 : : device_io_control ( unsigned long code , void * data , unsigned * len )
{
2022-05-17 07:04:55 +00:00
int ret = SCANNER_ERR_OUT_OF_RANGE ;
2022-05-03 03:56:07 +00:00
2023-09-09 10:09:20 +00:00
if ( IO_CTRL_CODE_TEST_SINGLE = = code )
2022-05-03 03:56:07 +00:00
{
test_1_paper_ = true ;
ret = start ( ) ;
}
else
ret = hg_scanner : : device_io_control ( code , data , len ) ;
return ret ;
}
std : : string hg_scanner_239 : : get_firmware_version ( void )
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2022-10-18 08:23:22 +00:00
return control_fetch ( setting3399 : : SR_GET_FWVERSION , 0 , 20 ) ;
2022-05-03 03:56:07 +00:00
}
std : : string hg_scanner_239 : : get_serial_num ( void )
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2022-12-13 10:13:46 +00:00
int len = 0 ;
read_register ( setting3399 : : SR_GET_SERIAL_LEN , & len ) ; ///???
2023-06-07 08:41:16 +00:00
if ( len > 30 )
{
len = 30 ;
}
2022-12-13 10:13:46 +00:00
return control_fetch ( setting3399 : : SR_GET_SERIALNUM , 0 , len ) . substr ( 0 , len ) ;
2022-05-03 03:56:07 +00:00
}
std : : string hg_scanner_239 : : get_ip ( void )
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2023-06-07 08:41:16 +00:00
int len = 20 ;
//read_register(setting3399::SR_GET_SERIAL_LEN, &len);
2023-02-21 01:54:26 +00:00
return control_fetch ( setting3399 : : SR_GET_IPADDR , 0 , len ) ;
2022-05-03 03:56:07 +00:00
}
2023-02-03 02:30:57 +00:00
std : : string hg_scanner_239 : : get_device_model ( void )
{
string device_model = " /home/linaro/microtek_sn " ;
string str ;
int ret = SCANNER_ERR_OK ;
int buffersize = 0 ;
int len = device_model . size ( ) ;
2023-08-21 08:09:57 +00:00
read_control_device_files ( device_model , str ) ;
2023-02-03 02:30:57 +00:00
return str ;
}
2023-03-20 04:09:33 +00:00
int hg_scanner_239 : : set_device_model ( string str )
{
if ( str . empty ( ) )
{
return SCANNER_ERR_NO_DATA ;
}
2023-08-21 08:09:57 +00:00
string device_model = " /home/linaro/microtek_sn " ;
2023-03-20 04:09:33 +00:00
2023-08-21 08:09:57 +00:00
return write_control_device_files ( device_model , str ) ;
2023-03-20 04:09:33 +00:00
}
2023-01-03 03:12:26 +00:00
int hg_scanner_239 : : set_serial_num ( string str )
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2023-01-03 03:12:26 +00:00
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_239 : : set_vid_pid ( int data )
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2023-01-03 03:12:26 +00:00
return write_register ( setting3399 : : SR_SET_USBVIDPID , data ) ;
}
int hg_scanner_239 : : get_vid_pid ( int & data )
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2023-01-03 03:12:26 +00:00
return read_register ( setting3399 : : SR_GET_USBVIDPID , & data ) ;
}
2022-12-29 10:05:59 +00:00
int hg_scanner_239 : : get_history_scan_count ( int & val )
2022-05-03 03:56:07 +00:00
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2022-11-11 09:59:08 +00:00
int ret = read_register ( setting3399 : : SR_GET_SCANN_NUM , & val ) ;
return ret ;
2022-05-03 03:56:07 +00:00
}
2022-12-22 10:37:53 +00:00
int hg_scanner_239 : : set_clear_roller_num ( void )
2022-05-03 03:56:07 +00:00
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2022-05-03 03:56:07 +00:00
int val = 0 ,
2022-10-18 08:23:22 +00:00
ret = read_register ( setting3399 : : SR_CLR_ROLLER_NUM , & val ) ;
2022-05-03 03:56:07 +00:00
return ret ;
}
2023-03-06 03:37:37 +00:00
int hg_scanner_239 : : set_clear_history_num ( void )
{
2023-08-21 08:09:57 +00:00
int ret = SCANNER_ERR_OK ;
if ( pid_ = = 0x439 )
{
string json_path = " /usr/local/huago/scannerinfo.json " ;
string str ;
int buffersize = 0 ;
int len = json_path . size ( ) ;
ret = read_control_device_files ( json_path , str ) ;
std : : string str2 ;
2023-09-09 10:09:20 +00:00
gb_json * jsn = new gb_json ( ) ;
jsn - > attach_text ( & str [ 0 ] ) ;
if ( jsn - > get_value ( " TotalScanned " , len ) )
2023-08-21 08:09:57 +00:00
{
2023-09-09 10:09:20 +00:00
jsn - > set_value ( " TotalScanned " , 0 ) ;
str2 = jsn - > to_string ( ) ;
2023-08-21 08:09:57 +00:00
}
2023-09-09 10:09:20 +00:00
jsn - > release ( ) ;
2023-08-21 08:09:57 +00:00
if ( ret = = SCANNER_ERR_OK )
{
ret = write_control_device_files ( json_path , str2 ) ;
}
}
else
{
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
int val = 0 ;
2023-03-06 03:37:37 +00:00
ret = read_register ( setting3399 : : SR_CLR_SCANN_NUM , & val ) ;
2023-08-21 08:09:57 +00:00
}
2023-03-06 03:37:37 +00:00
return ret ;
}
2022-05-03 03:56:07 +00:00
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int hg_scanner_239 : : set_leaflet_scan ( void )
{
2023-06-15 09:54:37 +00:00
//std::lock_guard<std::mutex> lock(io_lock_);
2022-05-17 07:04:55 +00:00
int ret = SCANNER_ERR_OK ;
2022-05-03 03:56:07 +00:00
test_1_paper_ = true ;
ret = start ( ) ;
return ret ;
}
2022-12-22 10:37:53 +00:00
2022-05-03 03:56:07 +00:00
int hg_scanner_239 : : get_device_code ( void )
{
2022-05-17 07:04:55 +00:00
return SCANNER_ERR_DEVICE_NOT_SUPPORT ;
2022-05-03 03:56:07 +00:00
}
2022-12-22 10:37:53 +00:00
int hg_scanner_239 : : get_sleep_time ( int & data )
2022-05-03 03:56:07 +00:00
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2022-12-22 10:37:53 +00:00
int val = 0 ;
int ret = read_register ( setting3399 : : SR_GET_SLEEPTIME , & val ) ;
2023-11-10 06:38:12 +00:00
char errbuf [ 40 ] = { 0 } ;
2022-05-03 03:56:07 +00:00
2022-05-17 07:04:55 +00:00
if ( ret = = SCANNER_ERR_OK )
2022-05-03 03:56:07 +00:00
{
2022-07-25 10:19:40 +00:00
save_sleeptime_type_ = true ;
2022-12-22 10:37:53 +00:00
data = val ;
2022-05-03 03:56:07 +00:00
}
2022-12-22 10:37:53 +00:00
2023-11-10 06:38:12 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " get_sleep_time = %d with %s \n " , data , hg_scanner_err_name ( ret , errbuf ) ) ;
2022-07-25 10:19:40 +00:00
return ret ;
2022-05-03 03:56:07 +00:00
}
int hg_scanner_239 : : set_sleep_time ( int setsleepime )
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2023-11-10 06:38:12 +00:00
char errbuf [ 40 ] = { 0 } ;
2023-05-24 06:46:34 +00:00
2022-10-18 08:23:22 +00:00
int ret = write_register ( setting3399 : : SR_SET_SLEEPTIME , setsleepime ) ;
2022-05-03 03:56:07 +00:00
2023-11-10 06:38:12 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " set sleep time to %d = %s \n " , setsleepime , hg_scanner_err_name ( ret , errbuf ) ) ;
2022-05-03 08:44:13 +00:00
return ret ;
2022-05-03 03:56:07 +00:00
}
2022-12-22 10:37:53 +00:00
int hg_scanner_239 : : get_scanner_paperon ( SANE_Bool & type )
2022-05-03 03:56:07 +00:00
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2022-12-22 10:37:53 +00:00
int val = 0 ;
int ret = read_register ( setting3399 : : SR_GET_PAPERON , & val ) ; //0无纸 1有纸
if ( ret = = SCANNER_ERR_OK )
2022-05-03 03:56:07 +00:00
{
2022-12-22 10:37:53 +00:00
type = val = = 0 ? false : true ;
2022-05-03 03:56:07 +00:00
}
2023-07-11 09:13:28 +00:00
utils : : to_log ( LOG_LEVEL_WARNING , " get_scanner_paperon is(%s) \n " , ! type ? hg_scanner_err_description ( SCANNER_ERR_DEVICE_NO_PAPER ) : hg_scanner_err_description ( SCANNER_ERR_OK ) ) ;
2022-12-22 10:37:53 +00:00
2022-05-03 03:56:07 +00:00
return ret ;
}
2022-11-11 09:59:08 +00:00
2022-12-22 10:37:53 +00:00
int hg_scanner_239 : : get_scan_is_sleep ( SANE_Bool & type )
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2022-12-22 10:37:53 +00:00
int ret = 0 , val ;
2023-09-23 01:15:57 +00:00
ret = read_register ( setting3399 : : SR_GET_SLEEP_STAUTUS , & val ) ; //0休眠 1唤醒状<E98692> ?
2022-12-22 10:37:53 +00:00
if ( ret = = SCANNER_ERR_OK )
{
type = val = = 1 ? true : false ;
}
2023-07-11 09:13:28 +00:00
utils : : to_log ( LOG_LEVEL_WARNING , " get_scanner_paperon is(%s) \n " , ! type ? hg_scanner_err_description ( SCANNER_ERR_DEVICE_SLEEPING ) : hg_scanner_err_description ( SCANNER_ERR_OK ) ) ;
2023-06-15 08:27:20 +00:00
2022-12-22 10:37:53 +00:00
return ret ;
2022-05-03 03:56:07 +00:00
}
2022-12-22 10:37:53 +00:00
int hg_scanner_239 : : set_notify_sleep ( )
2022-07-23 10:01:44 +00:00
{
2023-06-26 10:00:58 +00:00
if ( ! firmware_sup_wake_device_ )
2022-10-28 08:37:02 +00:00
{
2023-06-26 10:00:58 +00:00
return SCANNER_ERR_DEVICE_NOT_SUPPORT ;
2022-10-28 08:37:02 +00:00
}
2023-06-26 10:00:58 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
int val = 0 ;
return write_register ( setting3399 : : SR_NOTIFY_SLEEP , val ) ;
2022-07-23 10:01:44 +00:00
}
2022-11-26 06:55:03 +00:00
int hg_scanner_239 : : get_roller_num ( int & num )
2022-07-23 10:01:44 +00:00
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2022-11-11 03:40:05 +00:00
int ret = read_register ( setting3399 : : SR_GET_ROLLER_NUM , & num ) ;
return ret ;
2022-07-23 10:01:44 +00:00
}
2022-07-26 07:14:29 +00:00
int hg_scanner_239 : : get_device_log ( string & logpath )
2022-07-23 10:01:44 +00:00
{
2023-11-10 06:38:12 +00:00
char errbuf [ 40 ] = { 0 } ;
2023-06-26 10:00:58 +00:00
if ( ! firmware_sup_log_export_ )
2023-06-14 07:06:02 +00:00
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT ;
}
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2023-07-11 09:13:28 +00:00
string save_path = utils : : temporary_path ( ) + PATH_SEPARATOR + " device.log " ;
2022-07-26 07:14:29 +00:00
string device_log_path = " /var/log/syslog " ;
string str ;
int ret = SCANNER_ERR_OK ;
int buffersize = 0 ;
int len = device_log_path . size ( ) ;
io_ - > set_timeout ( 3000 ) ;
2022-10-18 08:23:22 +00:00
ret = write_register ( setting3399 : : SR_SET_JSON_PATH , len ) ;
2022-07-26 07:14:29 +00:00
if ( ret ! = SCANNER_ERR_OK )
return ret ;
ret = io_ - > write_bulk ( & device_log_path [ 0 ] , & len ) ;
if ( ret ! = SCANNER_ERR_OK )
return ret ;
2022-10-18 08:23:22 +00:00
ret = read_register ( setting3399 : : SR_GET_JSON_SIZE , & buffersize ) ;
2022-07-26 07:14:29 +00:00
if ( ret ! = SCANNER_ERR_OK | | buffersize < = 0 )
return ret ;
2022-10-18 08:23:22 +00:00
ret = write_register ( setting3399 : : SR_GET_JSON , buffersize ) ;
2022-07-26 07:14:29 +00:00
if ( ret ! = SCANNER_ERR_OK | | buffersize < = 0 )
return ret ;
str . resize ( buffersize ) ;
2023-05-18 03:00:14 +00:00
int block = buffersize ,
total = buffersize ,
index = 0 ;
while ( total > 0 )
{
block = 512 * 1024 ;
if ( total < block )
{
block = total ;
}
ret = io_ - > read_bulk ( & str [ index ] , & block ) ;
if ( ret ! = SCANNER_ERR_OK )
return ret ;
index + = block ;
total - = block ;
}
2022-07-26 07:14:29 +00:00
if ( ret ! = SCANNER_ERR_OK )
return ret ;
2023-09-23 01:15:57 +00:00
std : : ofstream f ;
2023-05-18 06:39:08 +00:00
f . open ( save_path , ios : : out | ios : : trunc ) ;
2022-07-26 07:14:29 +00:00
if ( ! f . is_open ( ) )
return SCANNER_ERR_CREATE_FILE_FAILED ;
f < < str < < endl ;
f . close ( ) ;
logpath = save_path ;
2023-11-10 06:38:12 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " log path:%s ret:%s buffersize: %d \n " , logpath . c_str ( ) , hg_scanner_err_name ( ret , errbuf ) , buffersize ) ;
2022-07-23 10:01:44 +00:00
return ret ;
}
2022-12-28 01:56:54 +00:00
int hg_scanner_239 : : set_devreboot ( int data )
2022-10-13 07:11:58 +00:00
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2022-12-28 01:56:54 +00:00
return write_register ( setting3399 : : SR_REBOOT , data ) ;
2022-10-13 07:11:58 +00:00
}
int hg_scanner_239 : : set_devshtudown ( )
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2022-10-13 07:11:58 +00:00
int val = 0 ,
2022-10-18 08:23:22 +00:00
ret = write_register ( setting3399 : : SR_POWEROFF , val ) ;
2022-10-13 07:11:58 +00:00
if ( ret ! = SCANNER_ERR_OK )
return ret ;
2022-10-28 03:01:01 +00:00
}
int hg_scanner_239 : : set_scan_islock ( SANE_Bool set_islock )
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2023-06-26 10:00:58 +00:00
if ( ! firmware_sup_devs_lock_ )
2022-12-06 09:57:00 +00:00
{
2023-07-11 09:13:28 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " devs lock:%s \n " , hg_scanner_err_description ( SCANNER_ERR_DEVICE_NOT_SUPPORT ) ) ;
2022-12-06 09:47:27 +00:00
return SCANNER_ERR_DEVICE_NOT_SUPPORT ;
2022-12-06 09:57:00 +00:00
}
2022-10-28 03:01:01 +00:00
2022-11-03 10:15:51 +00:00
if ( set_islock ! = 0 & & set_islock ! = 1 )
2022-12-06 09:57:00 +00:00
{
2023-07-11 09:13:28 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " devs lock:%s \n " , hg_scanner_err_description ( SCANNER_ERR_INVALID_PARAMETER ) ) ;
2022-11-03 10:15:51 +00:00
return SCANNER_ERR_INVALID_PARAMETER ;
2022-12-06 09:57:00 +00:00
}
2022-10-28 03:01:01 +00:00
int val = 0 ,
ret = write_register ( setting3399 : : SR_SET_LOCK_STATES , set_islock ) ;
2023-07-11 09:13:28 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " Set scanner is lock:%d \r \n " , set_islock ) ;
2022-10-28 03:01:01 +00:00
return ret ;
}
2022-11-11 09:59:08 +00:00
int hg_scanner_239 : : get_scan_islock ( SANE_Bool & islock )
2022-10-28 03:01:01 +00:00
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2023-06-26 10:00:58 +00:00
if ( ! firmware_sup_devs_lock_ )
2022-12-06 09:57:00 +00:00
{
2023-07-11 09:13:28 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " devs lock:%s \n " , hg_scanner_err_description ( SCANNER_ERR_DEVICE_NOT_SUPPORT ) ) ;
2022-12-06 09:47:27 +00:00
return SCANNER_ERR_DEVICE_NOT_SUPPORT ;
2022-12-06 09:57:00 +00:00
}
2022-12-05 15:01:13 +00:00
2023-05-24 06:46:34 +00:00
int val = 0 ,
ret = read_register ( setting3399 : : SR_GET_LOCK_STATES , & val ) ;
2022-11-02 10:06:49 +00:00
2023-05-24 06:46:34 +00:00
if ( ret ! = SCANNER_ERR_OK )
return ret ;
2022-10-28 03:01:01 +00:00
2023-05-24 06:46:34 +00:00
islock = val ;
ret = islock ? SCANNER_ERR_DEVICE_ISLOCK : SCANNER_ERR_OK ;
2022-11-24 15:34:38 +00:00
2023-07-11 09:13:28 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " Get scanner is lock:%d \r \n " , ret ) ;
2023-05-24 06:46:34 +00:00
return ret ;
2022-10-28 03:01:01 +00:00
}
int hg_scanner_239 : : set_scan_lock_check_val ( string check_str )
{
2023-06-26 10:00:58 +00:00
if ( ! firmware_sup_devs_lock_ )
2022-12-06 09:57:00 +00:00
{
2023-07-11 09:13:28 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " devs lock:%s \n " , hg_scanner_err_description ( SCANNER_ERR_DEVICE_NOT_SUPPORT ) ) ;
2022-12-06 09:47:27 +00:00
return SCANNER_ERR_DEVICE_NOT_SUPPORT ;
2022-12-06 09:57:00 +00:00
}
2022-10-28 03:12:52 +00:00
# if defined(WIN32) || defined(_WIN64)
2022-12-13 10:13:46 +00:00
std : : string encoded ;
std : : string cipher ;
std : : string keys = check_str ;
//string sn = "G2396021071101";
string sn = get_serial_num ( ) ;
if ( sn . empty ( ) )
2022-10-28 03:01:01 +00:00
{
return SCANNER_ERR_INVALID_PARAMETER ;
}
2023-10-31 06:51:14 +00:00
int num = 32 - keys . size ( ) ; //保持32位下<E4BD8D> <E4B88B> ?
2022-11-02 10:06:49 +00:00
if ( num > 0 )
2022-10-28 03:01:01 +00:00
{
2022-12-13 10:13:46 +00:00
std : : string str ( num , ' 0 ' ) ;
keys + = str ;
2022-10-28 03:01:01 +00:00
}
2022-12-13 10:13:46 +00:00
else
keys = keys . substr ( 0 , 32 ) ;
2022-10-28 03:01:01 +00:00
2022-12-13 10:13:46 +00:00
unsigned char key [ CryptoPP : : AES : : DEFAULT_KEYLENGTH ] = { 0 } ;
for ( int i = 0 ; i < 16 ; i + + )
2022-11-02 10:06:49 +00:00
{
2022-12-13 10:13:46 +00:00
key [ i ] = _strtoi64 ( keys . substr ( i * 2 , 2 ) . c_str ( ) , nullptr , 16 ) ;
2022-11-02 10:06:49 +00:00
}
2022-12-13 10:13:46 +00:00
CryptoPP : : ECB_Mode < CryptoPP : : AES > : : Encryption encode ;
encode . SetKey ( key , 16 ) ;
CryptoPP : : StringSink * str_cip = new CryptoPP : : StringSink ( cipher ) ;
CryptoPP : : StreamTransformationFilter * ecb_filter = new CryptoPP : : StreamTransformationFilter ( encode , str_cip , CryptoPP : : BlockPaddingSchemeDef : : W3C_PADDING ) ;
CryptoPP : : StringSource * source_plain = new CryptoPP : : StringSource ( sn , true , ecb_filter ) ;
encoded . clear ( ) ;
2022-11-02 10:06:49 +00:00
CryptoPP : : StringSink * str_encode = new CryptoPP : : StringSink ( encoded ) ;
CryptoPP : : HexEncoder * hex_encode = new CryptoPP : : HexEncoder ( str_encode ) ;
2022-12-13 10:13:46 +00:00
CryptoPP : : StringSource * source_cipher = new CryptoPP : : StringSource ( cipher , true , hex_encode ) ;
2022-11-02 10:06:49 +00:00
2022-12-13 10:13:46 +00:00
int len = encoded . length ( ) ;
2023-05-24 06:46:34 +00:00
int ret = SCANNER_ERR_OK ;
2022-10-28 03:01:01 +00:00
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
ret = write_register ( setting3399 : : SR_DECODE_TOKEN , len ) ;
if ( ret = = SCANNER_ERR_OK )
{
ret = io_ - > write_bulk ( & encoded [ 0 ] , & len ) ;
}
2022-10-28 03:01:01 +00:00
}
2022-12-13 10:13:46 +00:00
SAFE_DELETE ( source_plain ) ;
//SAFE_DELETE(ecb_filter);
//SAFE_DELETE(strcip);
//SAFE_DELETE(source_cipher)
//SAFE_DELETE(hex_encode);
SAFE_DELETE ( str_encode ) ;
2022-10-28 03:01:01 +00:00
return ret ;
2022-10-28 03:12:52 +00:00
# endif
2022-11-03 10:09:32 +00:00
}
2022-12-22 10:37:53 +00:00
int hg_scanner_239 : : set_firmware_upgrade ( std : : string filename )
2022-11-03 10:09:32 +00:00
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2022-11-03 10:09:32 +00:00
std : : ifstream fwname ;
int ret = SCANNER_ERR_OK ;
fwname . open ( filename , std : : ios_base : : in | std : : ios_base : : binary ) ;
if ( ! fwname . is_open ( ) )
{
2022-11-04 06:32:17 +00:00
return SCANNER_ERR_OPEN_FILE_FAILED ;
2022-11-03 10:09:32 +00:00
}
fwname . seekg ( 0 , std : : ios : : end ) ;
2023-10-31 06:51:14 +00:00
int total = fwname . tellg ( ) ; //记录总长<E680BB> <E995BF> ?
2022-11-03 10:09:32 +00:00
fwname . seekg ( 0 , std : : ios : : beg ) ;
int pos = fwname . tellg ( ) ; //记录pos位置
ret = write_register ( setting3399 : : SR_UPDATA_START , total ) ;
if ( ret ! = SCANNER_ERR_OK )
{
return ret ;
}
int block = total ;
while ( total > 0 )
{
block = 512 * 1024 ;
if ( total < block )
block = total ;
std : : vector < char > data ;
data . resize ( block + 1 ) ;
fwname . read ( data . data ( ) , block ) ;
io_ - > write_bulk ( data . data ( ) , & block ) ;
if ( ret ! = SCANNER_ERR_OK )
return ret ;
pos + = block ;
total - = block ;
fwname . seekg ( pos ) ;
}
this_thread : : sleep_for ( std : : chrono : : milliseconds ( 200 ) ) ;
int val = 0 ;
2022-11-04 01:23:29 +00:00
ret = read_register ( setting3399 : : SR_UPDATA_STAUTUS , & val ) ;
2022-11-03 10:09:32 +00:00
if ( ret ! = SCANNER_ERR_OK )
return ret ;
else if ( ! val )
return SCANNER_ERR_DEVICE_UPGRADE_FAIL ;
int to_cnt = 0 ;
2023-10-31 06:51:14 +00:00
// 到这个位置已经能够升级成功了 后面对升级结果做下判<E4B88B> <E588A4> ?
2022-11-04 08:04:38 +00:00
auto now = std : : chrono : : steady_clock : : now ( ) ;
while ( std : : chrono : : duration < double > ( std : : chrono : : steady_clock : : now ( ) - now ) . count ( ) < 70 )
2022-11-03 10:09:32 +00:00
{
2022-11-04 08:04:38 +00:00
int ret = read_register ( setting3399 : : SR_UPDATA_MD5_RELUST , & val ) ;
2022-11-03 10:09:32 +00:00
if ( ret ! = SCANNER_ERR_OK )
{
return ret ;
}
if ( val = = 2 )
{
2022-11-04 08:04:38 +00:00
int ret = read_register ( setting3399 : : SR_UPDATA_REBOOT , & val ) ;
return ret ;
2022-11-03 10:09:32 +00:00
}
else if ( val = = 3 )
{
2022-11-04 08:04:38 +00:00
int ret = read_register ( setting3399 : : SR_UPDATA_RECOVERY , & val ) ;
return ret ;
2022-11-03 10:09:32 +00:00
}
2022-11-04 08:04:38 +00:00
else if ( val = = 6 )
2022-11-03 10:09:32 +00:00
{
2022-11-04 08:04:38 +00:00
return false ;
2022-11-03 10:09:32 +00:00
}
2022-11-04 08:04:38 +00:00
this_thread : : sleep_for ( std : : chrono : : milliseconds ( 20 ) ) ;
2022-11-03 10:09:32 +00:00
}
return ret ;
2022-11-11 03:40:05 +00:00
}
2022-12-22 10:37:53 +00:00
int hg_scanner_239 : : set_clean_paper_road ( )
2022-11-11 03:40:05 +00:00
{
2023-05-24 06:46:34 +00:00
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
2022-11-11 03:40:05 +00:00
int ret = 0 , len = 0 ;
ret = write_register ( setting3399 : : SR_CLEAN_PAPER_ROAD , len ) ;
return ret ;
2022-12-12 10:18:53 +00:00
}
int hg_scanner_239 : : get_dev_islock_file ( int & islockfile )
{
2023-06-26 10:00:58 +00:00
if ( ! firmware_sup_devs_lock_ )
2022-12-12 10:18:53 +00:00
{
2023-07-11 09:13:28 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " devs lock:%s \n " , hg_scanner_err_description ( SCANNER_ERR_DEVICE_NOT_SUPPORT ) ) ;
2022-12-12 10:18:53 +00:00
return SCANNER_ERR_DEVICE_NOT_SUPPORT ;
}
string device_log_path = " /var/log/black_list_file.txt " ;
string str ;
2023-08-21 08:09:57 +00:00
int buffersize ;
2022-12-12 10:18:53 +00:00
2023-08-21 08:09:57 +00:00
int ret = read_control_device_files ( device_log_path , str ) ;
2022-12-12 10:18:53 +00:00
if ( ret = = SCANNER_ERR_OK & & str . size ( ) > 0 )
islockfile = std : : stoi ( str ) ;
else
islockfile = - 1 ;
2023-08-21 08:09:57 +00:00
buffersize = str . length ( ) ;
2023-07-11 09:13:28 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " get list file is:%s ret:%s buffersize: %d \n " , device_log_path . c_str ( ) , hg_scanner_err_description ( ret ) , buffersize ) ;
2022-12-12 10:18:53 +00:00
return ret ;
}
int hg_scanner_239 : : set_dev_islock_file ( int islockfile )
{
2023-06-26 10:00:58 +00:00
if ( ! firmware_sup_devs_lock_ )
2022-12-12 10:18:53 +00:00
{
2023-07-11 09:13:28 +00:00
utils : : to_log ( LOG_LEVEL_DEBUG , " devs lock:%s \n " , hg_scanner_err_description ( SCANNER_ERR_DEVICE_NOT_SUPPORT ) ) ;
2022-12-12 10:18:53 +00:00
return SCANNER_ERR_DEVICE_NOT_SUPPORT ;
}
if ( islockfile ! = 0 & & islockfile ! = 1 )
{
2023-10-31 06:51:14 +00:00
return SCANNER_ERR_INVALID_PARAMETER ; //这个地方设置的参数必须保证正<E8AF81> <E6ADA3> ?
2022-12-12 10:18:53 +00:00
}
string device_log_path = " /var/log/black_list_file.txt " ;
string str = std : : to_string ( islockfile ) ;
2023-08-21 08:09:57 +00:00
return write_control_device_files ( device_log_path , str ) ;
2023-04-28 08:19:59 +00:00
}