diff --git a/hgdriver/hgdev/hg_scanner_306.cpp b/hgdriver/hgdev/hg_scanner_306.cpp new file mode 100644 index 0000000..4f39725 --- /dev/null +++ b/hgdriver/hgdev/hg_scanner_306.cpp @@ -0,0 +1,1633 @@ +#include "hg_scanner_306.h" +#include "../wrapper/hg_log.h" + +#if defined(WIN32) || defined(_WIN64) +#include "scanner_manager.h" +#endif +//G300 +static std::string jsontext1("{\"global\":{\"device_type\":\"G300\",\"option_count\":67},\"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==false\"]},\"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\\u8272\",\"\\u7ea2\\u8272\\u589e\\u5f3a\",\"\\u7eff\\u8272\\u589e\\u5f3a\",\"\\u84dd\\u8272\\u589e\\u5f3a\"],\"depend_and\":[\"is-multiout!=true\",\"mode!=24\\u4f4d\\u5f69\\u8272\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-multiout-red\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"24\\u4f4d\\u5f69\\u8272\\u56fe\\u50cf - \\u591a\\u6d41\\u8f93\\u51fa\\u9664\\u7ea2\",\"desc\":\"\\u540c\\u65f6\\u8f93\\u51fa\\u5f69\\u8272\\u56fe\\u50cf\\u548c\\u7070\\u5ea6\\u9664\\u7ea2\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-multiout!=true\",\"mode!=256\\u7ea7\\u7070\\u5ea6\",\"!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-answer-sheet-red\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"24\\u4f4d\\u5f69\\u8272\\u56fe\\u50cf - \\u7b54\\u9898\\u5361\\u9664\\u7ea2\",\"desc\":\"\\u8f93\\u51fa\\u9664\\u7ea2\\u5f69\\u8272\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-multiout!=true\",\"mode!=256\\u7ea7\\u7070\\u5ea6\",\"!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-erase-bkg\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u80cc\\u666f\\u79fb\\u9664\",\"desc\":\"\\u79fb\\u9664\\u6587\\u7a3f\\u80cc\\u666f\\u5e95\\u8272\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-multiout!=true\",\"mode!=256\\u7ea7\\u7070\\u5ea6\",\"!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"bkg-color-range\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\" \\u80cc\\u666f\\u8272\\u5f69\\u6d6e\\u52a8\\u8303\\u56f4\",\"desc\":\"\\u4e0e\\u80cc\\u666f\\u5e95\\u8272\\u504f\\u5dee\\u5728\\u8be5\\u503c\\u8303\\u56f4\\u5185\\u7684\\u989c\\u8272\\uff0c\\u90fd\\u5c06\\u88ab\\u79fb\\u9664\",\"type\":\"int\",\"cur\":20,\"default\":20,\"size\":4,\"range\":{\"min\":1,\"max\":128,\"step\":1},\"depend_or\":[\"is-erase-bkg==true\"]},\"sharpen\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u9510\\u5316\\u4e0e\\u6a21\\u7cca\",\"desc\":\"\\u9009\\u62e9\\u9510\\u5316\\u6548\\u679c\\u6216\\u6a21\\u7cca\\u6548\\u679c\",\"type\":\"string\",\"cur\":\"\\u65e0\",\"default\":\"\\u65e0\",\"size\":24,\"range\":[\"\\u65e0\",\"\\u9510\\u5316\",\"\\u8fdb\\u4e00\\u6b65\\u9510\\u5316\",\"\\u6a21\\u7cca\",\"\\u8fdb\\u4e00\\u6b65\\u6a21\\u7cca\"],\"depend_and\":[\"is-multiout!=true\",\"mode!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-morr\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u53bb\\u9664\\u6469\\u5c14\\u7eb9\",\"desc\":\"\\u53bb\\u9664\\u56fe\\u50cf\\u4e2d\\u7684\\u6469\\u5c14\\u7eb9\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"resolution<500\",\"is-multiout!=true\",\"paper!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"mode!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-grid\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u9664\\u7f51\\u7eb9\",\"desc\":\"\\u53bb\\u9664\\u56fe\\u50cf\\u4e2d\\u7684\\u7f51\\u7eb9\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"resolution<500\",\"is-multiout!=true\",\"paper!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"mode!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-err-extension\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u9519\\u8bef\\u6269\\u6563\",\"desc\":\"\\u4ee5\\u70b9\\u9635\\u5f62\\u5f0f\\u6784\\u5efa\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"mode==\\u9ed1\\u767d\"]},\"is-noise-optimize\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u9ed1\\u767d\\u56fe\\u50cf\\u566a\\u70b9\\u4f18\\u5316\",\"desc\":\"\\u53bb\\u9664\\u56fe\\u50cf\\u4e2d\\u7684\\u5b64\\u7acb\\u9ed1\\u70b9\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"mode==\\u9ed1\\u767d\"]},\"noise-size\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\" \\u566a\\u70b9\\u4f18\\u5316\\u5c3a\\u5bf8\",\"desc\":\"\\u8bbe\\u7f6e\\u9700\\u8981\\u53bb\\u9664\\u7684\\u9ed1\\u8272\\u5b64\\u7acb\\u70b9\\u7684\\u8fde\\u901a\\u4e2a\\u6570\",\"type\":\"int\",\"cur\":10,\"default\":10,\"size\":4,\"range\":{\"min\":1,\"max\":50,\"step\":1},\"depend_or\":[\"is-noise-optimize==true\"]},\"paper\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u7eb8\\u5f20\\u5c3a\\u5bf8\",\"desc\":\"\\u8bbe\\u7f6e\\u51fa\\u56fe\\u5927\\u5c0f\",\"type\":\"string\",\"cur\":\"\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"default\":\"\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"size\":40,\"range\":[\"A4\",\"A5\",\"A5\\u6a2a\\u5411\",\"A6\",\"A6\\u6a2a\\u5411\",\"B5\",\"B6\",\"B6\\u6a2a\\u5411\",\"\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\"]},\"is-custom-area\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"paper!=\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\"]},\"tl-x\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u5de6\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\\u5de6\\u4e0a\\u89d2x\\u5750\\u6807\",\"type\":\"float\",\"cur\":0.000000,\"default\":0.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":210.000000,\"step\":21.000000},\"depend_and\":[\"is-custom-area==true\"]},\"br-x\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u53f3\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\\u53f3\\u4e0b\\u89d2x\\u5750\\u6807\",\"type\":\"float\",\"cur\":210.000000,\"default\":210.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":210.000000,\"step\":21.000000},\"depend_and\":[\"is-custom-area==true\"]},\"tl-y\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u4e0a\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\\u5de6\\u4e0a\\u89d2y\\u5750\\u6807\",\"type\":\"float\",\"cur\":0.000000,\"default\":0.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":297.000000,\"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\\u63c"); +static std::string jsontext2("f\\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_and\":[\"paper!=\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\"]},\"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\":50,\"range\":[\"\\u5355\\u9762\",\"\\u53cc\\u9762\",\"\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u901a\\u7528\\uff09\",\"\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u53d1\\u7968\\u7eb8\\uff09\",\"\\u5bf9\\u6298\"]},\"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\",\"discardblank==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\":200,\"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\",\"desc\":\"\\u4ea4\\u6362\\u6bcf\\u5f20\\u6587\\u7a3f\\u7684\\u6b63\\u53cd\\u9762\\u51fa\\u56fe\\u987a\\u5e8f\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"page!=\\u5355\\u9762\"]},\"grp-2\":{\"cat\":\"base\",\"title\":\"\\u4eae\\u5ea6\",\"type\":\"group\",\"readonly\":false,\"affect\":0,\"group\":\"light\",\"field\":\"Common\",\"pos\":0,\"visible\":true,\"unit\":\"None\"},\"is-custom-gamma\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"light\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u542f\\u7528\\u8272\\u8c03\\u66f2\\u7ebf\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u56fe\\u50cf\\u8272\\u8c03\\u6548\\u679c\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"brightness\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"light\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u4eae\\u5ea6\\u503c\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u50cf\\u4eae\\u5ea6\",\"type\":\"int\",\"cur\":128,\"default\":128,\"size\":4,\"range\":{\"min\":1,\"max\":255,\"step\":1},\"depend_or\":[\"is-custom-gamma==false\"]},\"contrast\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"light\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u5bf9\\u6bd4\\u5ea6\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u50cf\\u5bf9\\u6bd4\\u5ea6\",\"type\":\"int\",\"cur\":4,\"default\":4,\"size\":4,\"range\":{\"min\":1,\"max\":7,\"step\":1},\"depend_or\":[\"is-custom-gamma==false\"]},\"gamma\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"light\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u4f3d\\u9a6c\\u503c\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u50cf\\u4f3d\\u739b\\u503c\",\"type\":\"float\",\"cur\":1.000000,\"default\":1.000000,\"size\":4,\"range\":{\"min\":0.010000,\"max\":5.000000,\"step\":0.499000},\"depend_or\":[\"is-custom-gamma==false\"]},\"grp-3\":{\"cat\":\"base\",\"title\":\"\\u56fe\\u50cf\\u5904\\u7406\",\"type\":\"group\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"field\":\"Common\",\"pos\":0,\"visible\":true,\"unit\":\"None\"},\"color-correction\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u8272\\u504f\\u6821\\u6b63\",\"desc\":\"\\u8272\\u5f69\\u8fd8\\u539f\\u5ea6\\u77eb\\u6b63\\u529f\\u80fd\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"is-anti-skew\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u81ea\\u52a8\\u7ea0\\u504f\",\"desc\":\"\\u81ea\\u52a8\\u7ea0\\u6b63\\u6b6a\\u659c\\u9001\\u5165\\u7684\\u6587\\u7a3f\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4,\"depend_or\":[\"page!=\\u5bf9\\u6298\"]},\"is-split\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u56fe\\u50cf\\u62c6\\u5206\",\"desc\":\"\\u81ea\\u52a8\\u62c6\\u5206\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"page!=\\u5bf9\\u6298\"]},\"is-erase-black-frame\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u6d88\\u9664\\u9ed1\\u6846\",\"desc\":\"\\u6d88\\u9664\\u6587\\u7a3f\\u8303\\u56f4\\u5916\\u7684\\u9ed1\\u8272\\u80cc\\u666f\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4},\"bkg-fill-mode\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u80cc\\u666f\\u586b\\u5145\\u65b9\\u5f0f\",\"desc\":\"\\u9009\\u62e9\\u80cc\\u666f\\u586b\\u5145\\u65b9\\u5f0f\",\"type\":\"string\",\"cur\":\"\\u51f8\\u591a\\u8fb9\\u5f62\",\"default\":\"\\u51f8\\u591a\\u8fb9\\u5f62\",\"size\":40,\"range\":[\"\\u51f8\\u591a\\u8fb9\\u5f62\",\"\\u51f9\\u591a\\u8fb9\\u5f62\"],\"depend_or\":[\"is-erase-black-frame==true\"]},\"is-fill-color\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u8272\\u5f69\\u586b\\u5145\",\"desc\":\"\\u542f\\u7528\\u540e\\u9ed1\\u6846\\u90e8\\u5206\\u5c06\\u586b\\u5145\\u4e3a\\u6587\\u7a3f\\u5e95\\u8272\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-erase-black-frame==true\"]},\"threshold\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u9608\\u503c\",\"desc\":\"\\u6587\\u7a3f\\u5e95\\u8272\\u4e0e\\u9ed1\\u8272\\u80cc\\u666f\\u7070\\u5ea6\\u503c\\u7684\\u5dee\\u503c\\u5927\\u4e8e\\u8be5\\u503c\\uff0c\\u624d\\u4f1a\\u88ab\\u8bc6\\u522b\\u4e3a\\u6587\\u7a3f\",\"type\":\"int\",\"cur\":40,\"default\":40,\"size\":4,\"range\":{\"min\":30,\"max\":50,\"step\":1},\"depend_or\":[\"is-erase-black-frame==true\",\"paper==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"is-anti-skew==true\"]},\"anti-noise-level\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u80cc\\u666f\\u6297\\u566a\\u7b49\\u7ea7\",\"desc\":\"\\u80fd\\u591f\\u5bb9\\u5fcd\\u7684\\u80cc\\u666f\\u6742\\u8272\\u6761\\u7eb9\\u7684\\u5bbd\\u5ea6\",\"type\":\"int\",\"cur\":8,\"default\":8,\"size\":4,\"range\":{\"min\":1,\"max\":20,\"step\":1},\"depend_or\":[\"is-erase-black-frame==true\",\"paper==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"is-anti-skew==true\"]},\"margin\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u8fb9\\u7f18\\u7f29\\u8fdb\",\"desc\":\"\\u5bfb\\u627e\\u6587\\u7a3f\\u8fb9\\u7f18\\u65f6\\u5bf9\\u8fb9\\u7f18\\u7684\\u4fb5\\u5165\\u7a0b\\u5ea6\",\"type\":\"int\",\"cur\":5,\"default\":5,\"size\":4,\"range\":{\"min\":2,\"max\":30,\"step\":1},\"depend_or\":[\"is-erase-black-frame==true\",\"paper==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"is-anti-skew==true\"]},\"is-dark-sample\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u6df1\\u8272\\u6837\\u5f20\",\"desc\":\"\\u542f\\u7528\\u8be5\\u6a21\\u5f0f\\u9632\\u6b62\\u6df1\\u8272\\u5e95\\u8272\\u7684\\u6587\\u7a3f\\u56fe\\u50cf\\u88ab\\u8bef\\u5904\\u7406\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"page!=\\u5bf9\\u6298\",\"is-erase-black-frame!=true\",\"paper!=\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"is-anti-skew!=true\"]},\"is-anti-permeate\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"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\\u5"); +static std::string jsontext3("b54\\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_or\":[\"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_or\":[\"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_or\":[\"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\":{\"min\":0.000000,\"max\":0.500000,\"step\":0.050000},\"depend_or\":[\"is-rid-hole-b==true\"]},\"grp-4\":{\"cat\":\"base\",\"title\":\"\\u9001\\u7eb8\\u65b9\\u5f0f\\u8bbe\\u7f6e\",\"type\":\"group\",\"readonly\":false,\"affect\":0,\"group\":\"feeder\",\"field\":\"Common\",\"pos\":0,\"visible\":true,\"unit\":\"None\"},\"scan-mode\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"feeder\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u626b\\u63cf\\u5f20\\u6570\",\"desc\":\"\\u9009\\u62e9\\u6307\\u5b9a\\u6570\\u91cf\\u626b\\u63cf\\u6216\\u8fde\\u7eed\\u626b\\u63cf\",\"type\":\"string\",\"cur\":\"\\u8fde\\u7eed\\u626b\\u63cf\",\"default\":\"\\u8fde\\u7eed\\u626b\\u63cf\",\"size\":32,\"range\":[\"\\u8fde\\u7eed\\u626b\\u63cf\",\"\\u626b\\u63cf\\u6307\\u5b9a\\u5f20\\u6570\"]},\"scan-count\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"feeder\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\" \\u626b\\u63cf\\u6570\\u91cf\",\"desc\":\"\\u626b\\u63cf\\u6307\\u5b9a\\u6570\\u91cf\",\"type\":\"int\",\"cur\":-1,\"default\":-1,\"size\":4,\"depend_or\":[\"scan-mode==\\u626b\\u63cf\\u6307\\u5b9a\\u5f20\\u6570\"]},\"direction\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"feeder\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u6587\\u7a3f\\u65b9\\u5411\",\"desc\":\"\\u8bbe\\u7f6e\\u56fe\\u50cf\\u7684\\u65b9\\u5411\",\"type\":\"string\",\"cur\":\"0\\u00b0\",\"default\":\"0\\u00b0\",\"size\":40,\"range\":[\"0\\u00b0\",\"90\\u00b0\",\"180\\u00b0\",\"-90\\u00b0\",\"\\u81ea\\u52a8\\u6587\\u672c\\u65b9\\u5411\\u8bc6\\u522b\\u00b0\"]},\"is-rotate-bkg-180\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"feeder\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u80cc\\u9762\\u65cb\\u8f6c180\\u00b0\",\"desc\":\"\\u80cc\\u9762\\u626b\\u63cf\\u7684\\u56fe\\u50cf\\u65cb\\u8f6c180\\u00b0\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"page!=\\u5355\\u9762\",\"!=\\u5bf9\\u6298\",\"direction!=\\u81ea\\u52a8\\u6587\\u672c\\u65b9\\u5411\\u8bc6\\u522b\\u00b0\"]},\"is-ultrosonic\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"feeder\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u8d85\\u58f0\\u6ce2\\u68c0\\u6d4b\",\"desc\":\"\\u68c0\\u6d4b\\u662f\\u5426\\u51fa\\u73b0\\u53cc\\u5f20\\u9001\\u5165\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4},\"time-to-sleep\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"feeder\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u4f11\\u7720\\u65f6\\u95f4\",\"desc\":\"\\u8bbe\\u7f6e\\u626b\\u63cf\\u4eea\\u7684\\u4f11\\u7720\\u65f6\\u95f4\",\"type\":\"string\",\"cur\":\"\\u4e0d\\u4f11\\u7720\",\"default\":\"\\u4e0d\\u4f11\\u7720\",\"size\":24,\"range\":[\"\\u4e0d\\u4f11\\u7720\",\"\\u4e94\\u5206\\u949f\",\"\\u5341\\u5206\\u949f\",\"\\u534a\\u5c0f\\u65f6\",\"\\u4e00\\u5c0f\\u65f6\",\"\\u4e24\\u5c0f\\u65f6\",\"\\u56db\\u5c0f\\u65f6\"]}}"); + +//G400 +static std::string jsontext4("{\"global\":{\"device_type\":\"G400\",\"option_count\":64},\"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==false\"]},\"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\\u8272\",\"\\u7ea2\\u8272\\u589e\\u5f3a\",\"\\u7eff\\u8272\\u589e\\u5f3a\",\"\\u84dd\\u8272\\u589e\\u5f3a\"],\"depend_and\":[\"is-multiout!=true\",\"mode!=24\\u4f4d\\u5f69\\u8272\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-multiout-red\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"24\\u4f4d\\u5f69\\u8272\\u56fe\\u50cf - \\u591a\\u6d41\\u8f93\\u51fa\\u9664\\u7ea2\",\"desc\":\"\\u540c\\u65f6\\u8f93\\u51fa\\u5f69\\u8272\\u56fe\\u50cf\\u548c\\u7070\\u5ea6\\u9664\\u7ea2\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-multiout!=true\",\"mode!=256\\u7ea7\\u7070\\u5ea6\",\"!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-answer-sheet-red\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"24\\u4f4d\\u5f69\\u8272\\u56fe\\u50cf - \\u7b54\\u9898\\u5361\\u9664\\u7ea2\",\"desc\":\"\\u8f93\\u51fa\\u9664\\u7ea2\\u5f69\\u8272\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-multiout!=true\",\"mode!=256\\u7ea7\\u7070\\u5ea6\",\"!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-erase-bkg\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u80cc\\u666f\\u79fb\\u9664\",\"desc\":\"\\u79fb\\u9664\\u6587\\u7a3f\\u80cc\\u666f\\u5e95\\u8272\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-multiout!=true\",\"mode!=256\\u7ea7\\u7070\\u5ea6\",\"!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"bkg-color-range\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\" \\u80cc\\u666f\\u8272\\u5f69\\u6d6e\\u52a8\\u8303\\u56f4\",\"desc\":\"\\u4e0e\\u80cc\\u666f\\u5e95\\u8272\\u504f\\u5dee\\u5728\\u8be5\\u503c\\u8303\\u56f4\\u5185\\u7684\\u989c\\u8272\\uff0c\\u90fd\\u5c06\\u88ab\\u79fb\\u9664\",\"type\":\"int\",\"cur\":20,\"default\":20,\"size\":4,\"range\":{\"min\":1,\"max\":128,\"step\":1},\"depend_or\":[\"is-erase-bkg==true\"]},\"sharpen\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u9510\\u5316\\u4e0e\\u6a21\\u7cca\",\"desc\":\"\\u9009\\u62e9\\u9510\\u5316\\u6548\\u679c\\u6216\\u6a21\\u7cca\\u6548\\u679c\",\"type\":\"string\",\"cur\":\"\\u65e0\",\"default\":\"\\u65e0\",\"size\":24,\"range\":[\"\\u65e0\",\"\\u9510\\u5316\",\"\\u8fdb\\u4e00\\u6b65\\u9510\\u5316\",\"\\u6a21\\u7cca\",\"\\u8fdb\\u4e00\\u6b65\\u6a21\\u7cca\"],\"depend_and\":[\"is-multiout!=true\",\"mode!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-morr\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u53bb\\u9664\\u6469\\u5c14\\u7eb9\",\"desc\":\"\\u53bb\\u9664\\u56fe\\u50cf\\u4e2d\\u7684\\u6469\\u5c14\\u7eb9\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"resolution<500\",\"is-multiout!=true\",\"paper!=\\u4e09\\u8054\\u8bd5\\u5377\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"mode!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-grid\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u9664\\u7f51\\u7eb9\",\"desc\":\"\\u53bb\\u9664\\u56fe\\u50cf\\u4e2d\\u7684\\u7f51\\u7eb9\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"resolution<500\",\"is-multiout!=true\",\"paper!=\\u4e09\\u8054\\u8bd5\\u5377\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"mode!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-err-extension\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u9519\\u8bef\\u6269\\u6563\",\"desc\":\"\\u4ee5\\u70b9\\u9635\\u5f62\\u5f0f\\u6784\\u5efa\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"mode==\\u9ed1\\u767d\"]},\"is-noise-optimize\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u9ed1\\u767d\\u56fe\\u50cf\\u566a\\u70b9\\u4f18\\u5316\",\"desc\":\"\\u53bb\\u9664\\u56fe\\u50cf\\u4e2d\\u7684\\u5b64\\u7acb\\u9ed1\\u70b9\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"mode==\\u9ed1\\u767d\"]},\"noise-size\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\" \\u566a\\u70b9\\u4f18\\u5316\\u5c3a\\u5bf8\",\"desc\":\"\\u8bbe\\u7f6e\\u9700\\u8981\\u53bb\\u9664\\u7684\\u9ed1\\u8272\\u5b64\\u7acb\\u70b9\\u7684\\u8fde\\u901a\\u4e2a\\u6570\",\"type\":\"int\",\"cur\":10,\"default\":10,\"size\":4,\"range\":{\"min\":1,\"max\":50,\"step\":1},\"depend_or\":[\"is-noise-optimize==true\"]},\"paper\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u7eb8\\u5f20\\u5c3a\\u5bf8\",\"desc\":\"\\u8bbe\\u7f6e\\u51fa\\u56fe\\u5927\\u5c0f\",\"type\":\"string\",\"cur\":\"\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"default\":\"\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"size\":48,\"range\":[\"A3\",\"A4\",\"A4\\u6a2a\\u5411\",\"A5\",\"A5\\u6a2a\\u5411\",\"A6\",\"A6\\u6a2a\\u5411\",\"B4\",\"B5\",\"B5\\u6a2a\\u5411\",\"B6\",\"B6\\u6a2a\\u5411\",\"Letter\",\"Letter\\u6a2a\\u5411\",\"Double Letter\",\"LEGAL\",\"\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"\\u4e09\\u8054\\u8bd5\\u5377\"]},\"is-custom-area\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"paper!=\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"!=\\u4e09\\u8054\\u8bd5\\u5377\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\"]},\"tl-x\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u5de6\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\\u5de6\\u4e0a\\u89d2x\\u5750\\u6807\",\"type\":\"float\",\"cur\":0.000000,\"default\":0.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":210.000000,\"step\":21.000000},\"depend_and\":[\"is-custom-area==true\"]},\"br-x\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u53f3\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\\u53f3\\u4e0b\\u89d2x\\u5750\\u6807\",\"type\":\"float\",\"cur\":210.000000,\"default\":210.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":210.000000,\"step\":21.000000},\"depend_and\":[\"is-custom-area==true\"]},\"tl-y\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u4e0a\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\\u5de6\\u4e0a\\u89d2y\\u5750\\u6807\",\"type\":\"flo"); +static std::string jsontext5("at\",\"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\"]},\"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\":50,\"range\":[\"\\u5355\\u9762\",\"\\u53cc\\u9762\",\"\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u901a\\u7528\\uff09\",\"\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u53d1\\u7968\\u7eb8\\uff09\",\"\\u5bf9\\u6298\"]},\"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\",\"discardblank==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\":\"\\u4e0a\\u4e0b\\u5bf9\\u6298\",\"default\":\"\\u4e0a\\u4e0b\\u5bf9\\u6298\",\"size\":200,\"range\":[\"\\u5de6\\u53f3\\u5bf9\\u6298\",\"\\u4e0a\\u4e0b\\u5bf9\\u6298\",\"\\u81ea\\u52a8\\u5bf9\\u6298\"],\"depend_or\":[\"page==\\u5bf9\\u6298\"]},\"resolution\":{\"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\":\"\",\"type\":\"string\",\"cur\":\"\\u753b\\u8d28\\u4f18\\u5148\",\"default\":\"\\u753b\\u8d28\\u4f18\\u5148\",\"size\":200,\"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\",\"desc\":\"\\u4ea4\\u6362\\u6bcf\\u5f20\\u6587\\u7a3f\\u7684\\u6b63\\u53cd\\u9762\\u51fa\\u56fe\\u987a\\u5e8f\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"page!=\\u5355\\u9762\"]},\"grp-2\":{\"cat\":\"base\",\"title\":\"\\u4eae\\u5ea6\",\"type\":\"group\",\"readonly\":false,\"affect\":0,\"group\":\"light\",\"field\":\"Common\",\"pos\":0,\"visible\":true,\"unit\":\"None\"},\"is-custom-gamma\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"light\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u542f\\u7528\\u8272\\u8c03\\u66f2\\u7ebf\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u56fe\\u50cf\\u8272\\u8c03\\u6548\\u679c\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"brightness\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"light\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u4eae\\u5ea6\\u503c\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u50cf\\u4eae\\u5ea6\",\"type\":\"int\",\"cur\":128,\"default\":128,\"size\":4,\"range\":{\"min\":1,\"max\":255,\"step\":1},\"depend_or\":[\"is-custom-gamma==false\"]},\"contrast\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"light\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u5bf9\\u6bd4\\u5ea6\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u50cf\\u5bf9\\u6bd4\\u5ea6\",\"type\":\"int\",\"cur\":4,\"default\":4,\"size\":4,\"range\":{\"min\":1,\"max\":7,\"step\":1},\"depend_or\":[\"is-custom-gamma==false\"]},\"gamma\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"light\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u4f3d\\u9a6c\\u503c\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u50cf\\u4f3d\\u739b\\u503c\",\"type\":\"float\",\"cur\":1.000000,\"default\":1.000000,\"size\":4,\"range\":{\"min\":0.010000,\"max\":5.000000,\"step\":0.499000},\"depend_or\":[\"is-custom-gamma==false\"]},\"grp-3\":{\"cat\":\"base\",\"title\":\"\\u56fe\\u50cf\\u5904\\u7406\",\"type\":\"group\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"field\":\"Common\",\"pos\":0,\"visible\":true,\"unit\":\"None\"},\"is-anti-skew\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u81ea\\u52a8\\u7ea0\\u504f\",\"desc\":\"\\u81ea\\u52a8\\u7ea0\\u6b63\\u6b6a\\u659c\\u9001\\u5165\\u7684\\u6587\\u7a3f\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4,\"depend_or\":[\"page!=\\u5bf9\\u6298\"]},\"is-split\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u56fe\\u50cf\\u62c6\\u5206\",\"desc\":\"\\u81ea\\u52a8\\u62c6\\u5206\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"page!=\\u5bf9\\u6298\"]},\"is-erase-black-frame\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u6d88\\u9664\\u9ed1\\u6846\",\"desc\":\"\\u6d88\\u9664\\u6587\\u7a3f\\u8303\\u56f4\\u5916\\u7684\\u9ed1\\u8272\\u80cc\\u666f\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4},\"bkg-fill-mode\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u80cc\\u666f\\u586b\\u5145\\u65b9\\u5f0f\",\"desc\":\"\\u9009\\u62e9\\u80cc\\u666f\\u586b\\u5145\\u65b9\\u5f0f\",\"type\":\"string\",\"cur\":\"\\u51f8\\u591a\\u8fb9\\u5f62\",\"default\":\"\\u51f8\\u591a\\u8fb9\\u5f62\",\"size\":40,\"range\":[\"\\u51f8\\u591a\\u8fb9\\u5f62\",\"\\u51f9\\u591a\\u8fb9\\u5f62\"],\"depend_or\":[\"is-erase-black-frame==true\"]},\"is-fill-color\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u8272\\u5f69\\u586b\\u5145\",\"desc\":\"\\u542f\\u7528\\u540e\\u9ed1\\u6846\\u90e8\\u5206\\u5c06\\u586b\\u5145\\u4e3a\\u6587\\u7a3f\\u5e95\\u8272\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-erase-black-frame==true\"]},\"threshold\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u9608\\u503c\",\"desc\":\"\\u6587\\u7a3f\\u5e95\\u8272\\u4e0e\\u9ed1\\u8272\\u80cc\\u666f\\u7070\\u5ea6\\u503c\\u7684\\u5dee\\u503c\\u5927\\u4e8e\\u8be5\\u503c\\uff0c\\u624d\\u4f1a\\u88ab\\u8bc6\\u522b\\u4e3a\\u6587\\u7a3f\",\"type\":\"int\",\"cur\":40,\"default\":40,\"size\":4,\"range\":{\"min\":30,\"max\":50,\"step\":1},\"depend_or\":[\"is-erase-black-frame==true\",\"paper==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"is-anti-skew==true\"]},\"anti-noise-level\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u80cc\\u666f\\u6297\\u566a\\u7b49\\u7ea7\",\"desc\":\"\\u80fd\\u591f\\u5bb9\\u5fcd\\u7684\\u80cc\\u666f\\u6742\\u8272\\u6761\\u7eb9\\u7684\\u5bbd\\u5ea6\",\"type\":\"int\",\"cur\":8,\"default\":8,\"size\":4,\"range\":{\"min\":1,\"max\":20,\"step\":1},\"depend_or\":[\"is-erase-black-frame==true\",\"paper==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"is-anti-skew==true\"]},\"margin\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u8fb9\\u7f18\\u7f29\\u8fdb\",\"desc\":\"\\u5bfb\\u627e\\u6587\\u7a3f\\u8fb9\\u7f18\\u65f6\\u5bf9\\u8fb9\\u7f18\\u7684\\u4fb5\\u5165\\u7a0b\\u5ea6\",\"type\":\"int\",\"cur\":5,\"default\":5,\"size\":4,\"range\":{\"min\":2,\"max\":30,\"step\":1},\"depend_or\":[\"is-erase-black-frame==true\",\"paper==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"is-anti-skew==true\"]},\"is-dark-sample\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u6df1\\u8272\\u6837\\u5f20\",\"desc\":\"\\u542f\\u7528\\u8be5\\u6a21\\u5f0f\\u9632\\u6b62\\u6df1\\u8272\\u5e95\\u8272\\u7684\\u6587\\u7a3f\\u56fe\\u50cf\\u88ab\\u8bef\\u5904\\u7406\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"page!=\\u5bf9\\u6298\",\"is-erase-black-frame!=true\",\"paper!=\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"is-anti-skew!=true\"]},\"is-anti-permeate\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"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\":"); +static std::string jsontext6("0.500000,\"step\":0.050000},\"depend_or\":[\"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_or\":[\"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_or\":[\"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\":{\"min\":0.000000,\"max\":0.500000,\"step\":0.050000},\"depend_or\":[\"is-rid-hole-b==true\"]},\"grp-4\":{\"cat\":\"base\",\"title\":\"\\u9001\\u7eb8\\u65b9\\u5f0f\\u8bbe\\u7f6e\",\"type\":\"group\",\"readonly\":false,\"affect\":0,\"group\":\"feeder\",\"field\":\"Common\",\"pos\":0,\"visible\":true,\"unit\":\"None\"},\"scan-mode\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"feeder\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u626b\\u63cf\\u5f20\\u6570\",\"desc\":\"\\u9009\\u62e9\\u6307\\u5b9a\\u6570\\u91cf\\u626b\\u63cf\\u6216\\u8fde\\u7eed\\u626b\\u63cf\",\"type\":\"string\",\"cur\":\"\\u8fde\\u7eed\\u626b\\u63cf\",\"default\":\"\\u8fde\\u7eed\\u626b\\u63cf\",\"size\":32,\"range\":[\"\\u8fde\\u7eed\\u626b\\u63cf\",\"\\u626b\\u63cf\\u6307\\u5b9a\\u5f20\\u6570\"]},\"scan-count\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"feeder\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\" \\u626b\\u63cf\\u6570\\u91cf\",\"desc\":\"\\u626b\\u63cf\\u6307\\u5b9a\\u6570\\u91cf\",\"type\":\"int\",\"cur\":-1,\"default\":-1,\"size\":4,\"depend_or\":[\"scan-mode==\\u626b\\u63cf\\u6307\\u5b9a\\u5f20\\u6570\"]},\"direction\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"feeder\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u6587\\u7a3f\\u65b9\\u5411\",\"desc\":\"\\u8bbe\\u7f6e\\u56fe\\u50cf\\u7684\\u65b9\\u5411\",\"type\":\"string\",\"cur\":\"0\\u00b0\",\"default\":\"0\\u00b0\",\"size\":40,\"range\":[\"0\\u00b0\",\"90\\u00b0\",\"180\\u00b0\",\"-90\\u00b0\",\"\\u81ea\\u52a8\\u6587\\u672c\\u65b9\\u5411\\u8bc6\\u522b\\u00b0\"]},\"is-rotate-bkg-180\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"feeder\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u80cc\\u9762\\u65cb\\u8f6c180\\u00b0\",\"desc\":\"\\u80cc\\u9762\\u626b\\u63cf\\u7684\\u56fe\\u50cf\\u65cb\\u8f6c180\\u00b0\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"page!=\\u5355\\u9762\",\"!=\\u5bf9\\u6298\",\"direction!=\\u81ea\\u52a8\\u6587\\u672c\\u65b9\\u5411\\u8bc6\\u522b\\u00b0\"]},\"is-ultrosonic\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"feeder\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u8d85\\u58f0\\u6ce2\\u68c0\\u6d4b\",\"desc\":\"\\u68c0\\u6d4b\\u662f\\u5426\\u51fa\\u73b0\\u53cc\\u5f20\\u9001\\u5165\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4}}"); + +namespace settingsdsp_306 +{ + scanner_err device_status_to_hg_err(int usbdata) + { + scanner_err code = SCANNER_ERR_NO_DATA; + switch (usbdata) + { + case setting3288dsp::HAVE_IMAGE: + code = SCANNER_ERR_OK; + break; + case setting3288dsp::STOP_SCAN: + code = SCANNER_ERR_DEVICE_STOPPED; + break; + case setting3288dsp::COUNT_MODE: + code = SCANNER_ERR_DEVICE_COUNT_MODE; + break; + case setting3288dsp::NO_FEED: + code = SCANNER_ERR_DEVICE_NO_PAPER; + break; + case setting3288dsp::OPEN_COVER: + code = SCANNER_ERR_DEVICE_COVER_OPENNED; + break; + case setting3288dsp::FEED_IN_ERROR: + code = SCANNER_ERR_DEVICE_FEEDING_PAPER; + break; + case setting3288dsp::PAPER_JAM: + code = SCANNER_ERR_DEVICE_PAPER_JAMMED; + break; + case setting3288dsp::DETECT_DOUBLE_FEED: + code = SCANNER_ERR_DEVICE_DOUBLE_FEEDING; + break; + case setting3288dsp::DETECT_STAPLE: + code = SCANNER_ERR_DEVICE_STAPLE_ON; + break; + case setting3288dsp::PAPER_SKEW: + code = SCANNER_ERR_DEVICE_PAPER_SKEW; + break; + case setting3288dsp::HARDWARE_ERROR: + code = SCANNER_ERR_DEVICE_NOT_SUPPORT; + break; + case setting3288dsp::PC_SCAN_BUSY_or_ERROR: + code = SCANNER_ERR_DEVICE_PC_BUSY; + break; + case setting3288dsp::SIZE_ERROR: + code = SCANNER_ERR_DEVICE_SIZE_CHECK; + break; + case setting3288dsp::AUTO_FLAT_FINISHED: + code = SCANNER_ERR_DEVICE_AUTO_FAIL_OVER; + break; + case setting3288dsp::AUTO_FLATTING: + code = SCANNER_ERR_DEVICE_AUTO_FAIL_INFO; + break; + case setting3288dsp::HAVE_HOLE: + code = SCANNER_ERR_DEVICE_MAYBE_IS_HOLE; + break; + default: + code = SCANNER_ERR_NO_DATA; + break; + } + + return code; + } +} +hg_scanner_306::hg_scanner_306(const char* dev_name,int pid, usb_io* io) : + hg_scanner(G100Serial, dev_name, io,pid) + ,papersize(pid) + ,is_devs_sleep_(false) + ,index_ (0) + , first_frame_total(0) + , last_frame_total(0) +{ + dsp_config.value = 0; + dsp_config.params_3288.enableLed = 1; //默认值 + dsp_config.params_3288.isCorrect = 1; + + int ret = get_device_type(firmware_sup_device_7010); + if (firmware_sup_device_7010 && ret == SCANNER_ERR_OK) + { + set_kernelsnap_ver(); + get_correction_image(0, 1, 1); + get_correction_image(1, 1, 0); + get_correction_image(2, 2, 1); + get_correction_image(3, 2, 0); + get_correction_image(4, 3, 1); + get_correction_image(5, 3, 0); + firmware_sup_morr_ = true; + } + +#ifndef MAPPING_FUNCTION_IN_BASE + init_setting_map(setting_map_, ARRAY_SIZE(setting_map_));//优先初始化 +#endif + if (init_settings(pid_)) + { + if (pid_ == 0x306) + init_settings((jsontext1 + jsontext2 + jsontext3).c_str()); + else + init_settings((jsontext4 + jsontext5 + jsontext6).c_str()); + } +} +hg_scanner_306::~hg_scanner_306() +{} +int hg_scanner_306::on_scanner_closing(bool force) +{ + return SCANNER_ERR_OK; +} +void hg_scanner_306::thread_handle_usb_read(void) +{ + int ret = SCANNER_ERR_OK, + status = SCANNER_ERR_OK; + StopWatch sw; + sw.reset(); + SANE_Image_Statu statu = IMG_STATUS_OK; + int img_num = 0; + savestatus_.clear(); + while (run_) + { + USBCB usb={0}; + ret = get_scanner_status(usb); + if (ret && ret != SCANNER_ERR_NO_DATA) + { + VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "status from bulk point is '%s'\n", hg_scanner_err_description(ret)); + } + + //printf("usb.u32_Data = %d ret = %d\r\n",usb.u32_Data,ret); + //如果设备出现卡纸 或者双张等设备信息问题,需要等到设备进行发送stop才能停止。 所以始终以 "停止" 消息为结束信号 + //如果有图的情况下,并且卡纸或双张等,设备会先发送卡纸双张信息。所以接受到错误信息之后,仍需要把图像取出来。 + if (ret == SCANNER_ERR_DEVICE_STOPPED) + { + status_ = !savestatus_.empty() ? savestatus_[0] : SCANNER_ERR_OK;//以第一个消息为准 + savestatus_.clear(); + if (user_cancel_) + { + if (status_ && status_ != SCANNER_ERR_DEVICE_STOPPED) // thread_handle_image_process maybe call stop() when insufficient memory occurs . + ret = status_; + else + status_ = ret = SCANNER_ERR_USER_CANCELED; + VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "%s\n", hg_scanner_err_description(status_)); + } + VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "'STOPSCAN' message in usb thread:%s\n" , hg_scanner_err_description(status_)); + + break; + } + if (ret != SCANNER_ERR_OK && + ret != SCANNER_ERR_DEVICE_STOPPED && + ret != SCANNER_ERR_NO_DATA && + ret != SCANNER_ERR_DEVICE_AUTO_FAIL_INFO && + ret != SCANNER_ERR_DEVICE_AUTO_FAIL_OVER) + { + //statu = last_usb_image_statu(ret); + savestatus_.push_back(ret); + } + else if (ret != SCANNER_ERR_NO_DATA && + ret != SCANNER_ERR_DEVICE_AUTO_FAIL_OVER && + ret != SCANNER_ERR_DEVICE_AUTO_FAIL_INFO) + { + statu = IMG_STATUS_OK; + } + else if (ret == SCANNER_ERR_DEVICE_AUTO_FAIL_OVER) + { + is_auto_falt = false; + status_ = ret; + std::string msg; + int count = usb.u32_Count; + msg.resize(count); + + { + std::lock_guard lock(io_lock_); + ret = io_->read_bulk(&msg[0], &count); + } + if (ret == SCANNER_ERR_OK) + notify_ui_working_status(msg.c_str(), SANE_EVENT_STATUS, status_); + else + status_ = ret; + + break; + } + else if (ret == SCANNER_ERR_DEVICE_AUTO_FAIL_INFO) + { + sw.reset(); + status_ = ret; + + std::string msg; + int count = usb.u32_Count; + msg.resize(count); + ret = io_->read_bulk(&msg[0], &count); + if (ret == SCANNER_ERR_OK) + { + status_= ret = SCANNER_ERR_DEVICE_AUTO_FAIL_INFO; + char buf[1024]; + strcpy(buf, msg.c_str()); + notify_ui_working_status(buf, SANE_EVENT_STATUS, status_); + msg.clear(); + } + else + { + status_ = ret; + break; + } + } + else if (ret == SCANNER_ERR_IO) + { + status_ = ret; + VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "%s\n", hg_scanner_err_description(status_)); + break; + } + if (sw.elapsed_ms() > 30000 && img_conf_.resolution_dst != 600)//防止状态信息一直取不上来导致卡死 + { + if ((img_conf_.papertype == TwSS::MaxSize || img_conf_.papertype == TwSS::USStatement) && pid_ == 0x0300 && firmware_sup_dpi_600) + { + hg_log::log(LOG_LEVEL_WARNING, "while 30S\n"); + } + else + { + if (!savestatus_.empty())//以第一个消息为准 + { + status_ = savestatus_[0]; + } + savestatus_.clear(); + hg_log::log(LOG_LEVEL_WARNING, "Get Status TimeOut,get image out 30S\n"); + notify_ui_working_status(hg_log::lang_load(ID_STATU_DESC_SCANNER_ERR_DEVICE_GET_IMAGE_OUTTIME), SANE_EVENT_ERROR, status_); // 鍙栧浘閫氫俊瓒呮椂 + break; + } + } + if (sw.elapsed_s() > 130) + { + if (!savestatus_.empty())//以第一个消息为准 + { + status_ = savestatus_[0]; + } + savestatus_.clear(); + hg_log::log(LOG_LEVEL_WARNING, "MaxSize TimeOut,Get Image 130s\n"); + notify_ui_working_status(hg_log::lang_load(ID_STATU_DESC_SCANNER_ERR_DEVICE_GET_IMAGE_OUTTIME), SANE_EVENT_ERROR, status_); // 鍙栧浘閫氫俊瓒呮椂 + break; + } + if (ret == SCANNER_ERR_OK && usb.u32_Count > 0) + { + + if (firmware_sup_device_7010) + { + ret = get_img_data_7010(); + sw.reset(); + if (ret != SCANNER_ERR_OK) + { + status_ = ret; + break; + } + continue; + } + } + this_thread::sleep_for(chrono::milliseconds(10)); + } + VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "USB thread exit with code: %s, status = %s\n", hg_scanner_err_name(ret), hg_scanner_err_description(status_)); +} +int hg_scanner_306::discard_all_images(void) +{ + int block = 1024 * 512, len = block; + uint8_t* buf = new uint8_t[block]; + + if(buf) + { + std::lock_guard lock(io_lock_); + int cnt = 0, ret = SCANNER_ERR_OK; + + io_->set_timeout(1000); + while ((ret = io_->read_bulk(buf, &len)) == SCANNER_ERR_OK) + { + len = block; + this_thread::sleep_for(chrono::milliseconds(10)); + if (cnt++ > 10) + { + break; + } + } + delete[] buf; + } + + + //if (is_read_int) + //{ + // initdevice(); + //} + return SCANNER_ERR_OK; +} +int hg_scanner_306::get_roller_life(void) +{ + return pid_ == 300 ? 150000 : 200000; +} +int hg_scanner_306::start(void) +{ + bool handled = false; + int ret = try_third_app_handle_start(handled), //sane调用是每次都会调用一次start和stop + count = -1, + val = 1; + + user_cancel_ = false; + + // for third-sane-app invoking, added on 2022-05-19 + if (handled) + return ret; + + final_imgs_.clear(); + imgs_.Clear(); // move from scanning done + + //if (is_read_int) + //{ + // VLOG_MINI_1(LOG_LEVEL_WARNING, "device status is(%s)\n", STATU_DESC_SCANNER_ERR_DEVICE_DEVS_BOOTING); + // return SCANNER_ERR_DEVICE_DEVS_BOOTING; + //} + ret = get_scan_is_sleep(val); + if (!val && ret == SCANNER_ERR_OK) + { + status_ = SCANNER_ERR_DEVICE_SLEEPING; + + return status_; + } + ret = get_scanner_paperon(val); + if (!val && ret == SCANNER_ERR_OK) + { + status_ = SCANNER_ERR_DEVICE_NO_PAPER; + + return status_; + } + if (ret != SCANNER_ERR_OK) + { + return ret; + } + if (is_devs_sleep_)//设备在睡眠的状态当中获取固件是失败的,所以在这个地方进行标志位设置。(总感觉不保险) + { + is_devs_sleep_ = false; + set_kernelsnap_ver(); + int paper = image_prc_param_.bits.paper; + on_paper_changed(paper); + int dpi = resolution_; + on_resolution_changed(dpi); + } + ret = writedown_device_configuration(true); + if (ret == SCANNER_ERR_OK) + writedown_image_configuration(); + else + { + status_ = ret; + return ret; + } + printf_devconfig(); + USBCB usb = { setting3288dsp::START_COMMAND, img_conf_.scannum, 0}; + { + std::lock_guard lock(io_lock_); + ret = writeusb(usb); + } + + if(ret == SCANNER_ERR_OK) + { + wait_usb_.notify(); + std::this_thread::sleep_for(std::chrono::milliseconds(300)); + ret = try_third_app_after_start(ret); + } + else + status_ = ret; + VLOG_MINI_1(LOG_LEVEL_WARNING, "----------Main start scan status : %s----------\n", hg_scanner_err_description(ret)); + return ret; +} +int hg_scanner_306::stop(void) +{ + int ret = SCANNER_ERR_OK; + + USBCB usbcb = { setting3288dsp::STOP, 0, 0}; + { + std::lock_guard lock(io_lock_); + ret = writeusb(usbcb); + } + VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "Write stop command = %d\n", ret); + + if (status_ == SCANNER_ERR_DEVICE_BUSY) + { + LOG_INFO(LOG_LEVEL_DEBUG_INFO,"stop status is busy\r\n"); + std::this_thread::sleep_for(std::chrono::milliseconds(2000)); + } + user_cancel_ = true; + if (ret == SCANNER_ERR_OK) + { + status_ = SCANNER_ERR_DEVICE_STOPPED; + } + //final_imgs_.clear(); + + return status_; +} +int hg_scanner_306::writeusb(USBCB &usb) +{ + int ret = SCANNER_ERR_OK; + int len = sizeof(usb); + + ret = io_->write_bulk(&usb,&len); + if (ret) + { + status_ = ret; + } + + return ret; +} +int hg_scanner_306::readusb(USBCB &usb) +{ + int ret = SCANNER_ERR_OK; + int len = sizeof(USBCB); + + ret = io_->read_bulk(&usb,&len); + if (ret) + { + status_ = ret; + } + + return ret; +} +int hg_scanner_306::pop_image() +{ + int ret = SCANNER_ERR_OK; + + USBCB usbcb = { setting3288dsp::POP_IMAGE, 0, 0}; + { + std::lock_guard lock(io_lock_); + ret = writeusb(usbcb); + } + + return ret; +} +int hg_scanner_306::get_scanner_status(USBCB &usb) +{ + std::lock_guard lock(io_lock_); + int ret = SCANNER_ERR_OK; + + usb = { setting3288dsp::GET_DSP_STATUS, 0, 0}; + io_->set_timeout(2000); + ret = writeusb(usb); + if (ret != SCANNER_ERR_OK) + { + VLOG_MINI_1(LOG_LEVEL_WARNING, "get_scanner_status write usb: %s\n", hg_scanner_err_name(ret)); + return ret; + } + ret = readusb(usb); + + if (ret != SCANNER_ERR_OK) + { + VLOG_MINI_1(LOG_LEVEL_WARNING, "get_scanner_status read usb: %s\n", hg_scanner_err_name(ret)); + status_ = ret; + return ret; + } + scanner_err code = settingsdsp_306::device_status_to_hg_err(usb.u32_Data); + return code ; +} + +static int k = 0; +int hg_scanner_306::get_img_data_7010() +{ + int ret = SCANNER_ERR_OK; + + USBCB usb{ setting3288dsp::GET_IMAGE, 0, 0 }; + { + std::lock_guard lock(io_lock_); + ret = writeusb(usb); + + io_->set_timeout(800); + setting3288dsp::HG_JpegCompressInfo info; + StopWatch sw; + sw.reset(); + int len = sizeof(int) * 8; + ret = io_->read_bulk(&info, &len); + + int val = info.DataLength; + int width = info.width; + int hegiht = info.height; + + + //cv::Mat mat1 = cv::Mat(hegiht, width, CV_8UC1, jpgdata.data(), cv::Mat::AUTO_STEP); + //static int cnt = 0; + + if (info.first_frame) + { + first_frame_total = info.index_frame; + jpgdata_.clear(); + jpgdata_.resize(width * hegiht * first_frame_total); + + index_ = 0; + } + + ret = io_->read_bulk(&jpgdata_[index_], &val); + index_ += val; + + if (info.last_frame) + { + + //return 0; + last_frame_total = info.index_frame; + + int frame_ind = first_frame_total - last_frame_total; + + mat_width = width; + mat_height = (hegiht * first_frame_total) - (hegiht * frame_ind); + std::shared_ptr image_data_(aquire_memory(mat_width * mat_height)); + + unsigned int size1 = mat_height; + void* l = image_data_->data(0, &size1); + memcpy(l, jpgdata_.data(), mat_width * mat_height); + + //cv::Mat mat = cv::Mat(hegiht * first_frame_total, width, CV_8UC1, jpgdata_.data(), cv::Mat::AUTO_STEP); + //cv::imwrite("C://image//get_img_data_7010" + to_string(k) + ".jpg", mat); + k++; + ret = save_usb_data(image_data_); + index_ = 0; + + std::vector().swap(jpgdata_); //回收空间 clear只能清空元素 + + } + float v = sw.elapsed_ms(); + return ret; + } +} +int hg_scanner_306::writedown_device_configuration(bool type,setting_hardware::HGSCANCONF_3288 *d) +{ + if (!type) + return SCANNER_ERR_OK; + + int ret = SCANNER_ERR_OK, + len = 0; + SIZE size; + setting_hardware::HGSCANCONF_3288 p = dsp_config; + if (!d) + { + p.params_3288.lutmode = keep_watermark_; + d = &p; + } + if (is_multiout) + { + d->params_3288.isColor = image_prc_param_.bits.multi_out == MULTI_GRAY_AND_BW ? 0 : 1; + } + else if ((image_prc_param_.bits.color_mode == COLOR_MODE_256_GRAY + || image_prc_param_.bits.color_mode == COLOR_MODE_BLACK_WHITE) + && image_prc_param_.bits.rid_color != RID_COLOR_NONE) + { + d->params_3288.isColor = 1; + } + if (paper_size_ == TwSS::USStatement || paper_size_ == TwSS::MaxSize) + { + //d->params_3288.pageSize = setting3288dsp::G400_MAXSIZE; + } + if (paper_size_ == TwSS::None || paper_size_ == TwSS::USStatement || paper_size_ == TwSS::MaxSize || paper_size_ == TwSS::Trigeminy) + { + d->params_3288.enableSizeDetect = false; + } + + if ((is_quality_ == IMG_SPEED) && (resolution_ >= 300)) + { + VLOG_MINI_1(LOG_LEVEL_WARNING, "writedown_device_configuration is_quality_ is .(%d)\n", is_quality_) + d->params_3288.dpi = 1; + } + if (image_prc_param_.bits.remove_morr && firmware_sup_morr_) + { + d->params_3288.moire = true; + } + else + d->params_3288.moire = false; + + 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 + ) + { + d->params_3288.enableSizeDetect = false; + } + size = papersize.GetPaperSize(TwSS::A4, 200, img_conf_.paperAlign); + dsp_config.params_3288.dstHeight = (int)((size.cy + 200) / 100); + + USBCB usbcb = { setting3288dsp::CONFIGURED_DATA, d->value, 0}; + len = sizeof(USBCB); + { + std::lock_guard lock(io_lock_); + ret = io_->write_bulk(&usbcb, &len); + } + if (type) + { + printf_devconfig(d); + } + VLOG_MINI_1(LOG_LEVEL_WARNING, "writedown_device_configuration is .(%s)\n", hg_scanner_err_name(ret)); + + return ret; +} +int hg_scanner_306::on_color_mode_changed(int& color_mode) +{ + dsp_config.params_3288.isColor = (color_mode == COLOR_MODE_BLACK_WHITE || color_mode == COLOR_MODE_256_GRAY) ? 0 : 1; + return SCANNER_ERR_OK; +} +int hg_scanner_306::on_paper_changed(int& paper) +{ + bool exact = true; + Paper_Map* papermap = pid_ == 0x0300 && firmware_sup_dpi_600 ? paper_map_3288_600dpi : paper_map_3288; + int paperlen = pid_ == 0x0300 && firmware_sup_dpi_600 ? ARRAY_SIZE(paper_map_3288_600dpi) : ARRAY_SIZE(paper_map_3288); + + int ind = hgpaper_to_devspaper(papermap, paperlen, paper, &exact, &paper_size_), + ret = exact ? SCANNER_ERR_OK : SCANNER_ERR_NOT_EXACT; + + if (dsp_config.params_3288.pageSize != papermap[ind].dev_value) + { + int old = dsp_config.params_3288.pageSize; + + dsp_config.params_3288.pageSize = papermap[ind].dev_value; + ret = writedown_device_configuration(); + if (ret) + { + dsp_config.params_3288.pageSize = old; + for (int i = 0; i < paperlen; ++i) + { + if (papermap[i].dev_value == old) + { + paper = papermap[i].paper; + break; + } + } + } + else if (!exact) + ret = SCANNER_ERR_NOT_EXACT; + } + return ret; +} +int hg_scanner_306::on_paper_check_changed(bool& check) +{ + if (!firmware_sup_dpi_600 && check) + { + check = false; + return SCANNER_ERR_DEVICE_NOT_SUPPORT; + } + int ret = SCANNER_ERR_OK; + if(dsp_config.params_3288.enableSizeDetect ^ check) + { + dsp_config.params_3288.enableSizeDetect = check; + ret = writedown_device_configuration(); + if (ret) + { + dsp_config.params_3288.enableSizeDetect = !check; + check = dsp_config.params_3288.enableSizeDetect; + } + } + return ret; +} +int hg_scanner_306::on_resolution_changed(int& dpi) +{ + int ret = SCANNER_ERR_OK; + if (firmware_sup_dpi_600) + dsp_config.params_3288.dpi = dpi == 600 ? 3 : (dpi < 599 && dpi>=300) ? 2 : 1; + else if (firmware_sup_dpi_300) + dsp_config.params_3288.dpi = (dpi >= 300) ? 2 : 1; + else + dsp_config.params_3288.dpi = 1; + + VLOG_MINI_3(LOG_LEVEL_WARNING, "on_resolution_changed is dpi:%d .set device dpi(%d),firmware_sup_dpi_300 is :%d\n", dpi, dsp_config.params_3288.dpi, firmware_sup_dpi_300); + + ret = writedown_device_configuration(); + return ret; +} +int hg_scanner_306::on_ultrasonic_check_changed(bool& check) +{ + int ret = SCANNER_ERR_OK; + + if (dsp_config.params_3288.doubleFeeded ^ check) + { + dsp_config.params_3288.doubleFeeded = check; + ret = writedown_device_configuration(); + if (ret) + { + dsp_config.params_3288.doubleFeeded = !check; + check = dsp_config.params_3288.doubleFeeded; + } + } + return ret; +} +int hg_scanner_306::set_kernelsnap_ver() +{ + int ret = SCANNER_ERR_OK; + + string fw = get_firmware_version(); + if (!fw.empty()) + { + if (atoi(fw.substr(4, 6).c_str()) >= 221106 && atoi(fw.substr(4, 6).c_str()) < 230210) + firmware_sup_dpi_300 = true; + else if (atoi(fw.substr(4, 6).c_str()) >= 230210) + firmware_sup_dpi_600 = true; + else + { + firmware_sup_dpi_300 = false; + firmware_sup_dpi_600 = false; + } + firmware_sup_history_cnt = atoi(fw.substr(4, 6).c_str()) >= 220303 ? true : false; + } + else + { + ret = SCANNER_ERR_NO_DATA; + } + + VLOG_MINI_2(LOG_LEVEL_WARNING, "hg_scanner_306 firmware_sup_dpi_300 :%d ,firmware_sup_dpi_600:%d\n", firmware_sup_dpi_300, firmware_sup_dpi_600); + return SCANNER_ERR_OK; +} +int hg_scanner_306::agreement(TwSS tw,int align) +{ + int ret = SCANNER_ERR_OK; + SIZE size; + setting_hardware::HGSCANCONF_3288 d = dsp_config; + size = papersize.GetPaperSize(TwSS::A4,200,align); + dsp_config.params_3288.dstHeight = (int)((size.cy + 200)/100); + ret = writedown_device_configuration(true,&d); + return ret; +} +int hg_scanner_306::initdevice() +{ + io_->set_timeout(2000); + + int val = 0, + ret = SCANNER_ERR_OK; + int cnt = 0; + + ret = get_scan_is_sleep(val); + if (!val && ret == SCANNER_ERR_OK) + { + is_devs_sleep_ = status_ = SCANNER_ERR_DEVICE_SLEEPING; + } + if (status_ != SCANNER_ERR_DEVICE_SLEEPING) + { + string fw = get_firmware_version(); + if (!fw.empty()) + { + if (fw.substr(4, 6) == "230303") + { + string scanner_path = hg_log::get_module_full_path(LIBNAME); + scanner_path = scanner_path.substr(0, scanner_path.size() - strlen(LIBNAME)); + scanner_path += "update.zip"; + set_firmware_upgrade(scanner_path); + return SCANNER_ERR_OK; + } + } + } + if (status_ != SCANNER_ERR_DEVICE_SLEEPING) + { + set_kernelsnap_ver(); + is_devs_sleep_ = false; // 睡眠唤醒 客户提前点击设置这边固件版本号 还没有做判断的 + } + return SCANNER_ERR_OK; +} +void hg_scanner_306::writedown_image_configuration(void) +{ + SCANCONF ic; + int len = sizeof(ic); + + bzero(&ic, len); + + ic.contrast = contrast_; + ic.brightness = bright_; + if (image_prc_param_.bits.text_direction != TEXT_DIRECTION_AUTO) + ic.imageRotateDegree = image_prc_param_.bits.text_direction; + else + ic.imageRotateDegree = 0; + if (test_1_paper_) + { + LOG_INFO(LOG_LEVEL_DEBUG_INFO, "scanning mode: testing ONE paper ...\n"); + ic.scannum = 1; + } + else + ic.scannum = scan_count_; + ic.en_sizecheck = dsp_config.params_3288.enableSizeDetect; + ic.hardwarecaps.en_skrewdetect = 0; + ic.hardwarecaps.en_doublefeed = dsp_config.params_3288.doubleFeeded; + ic.hardwarecaps.en_stapledetect = 0; + ic.hardwarecaps.skrewdetectlevel = 0; + + // ic.hardwarecaps.is_autopaper = dsp_config_.params_dsp.is_autopaper; + ic.hardwarecaps.capturepixtype = 0; //暂无参数 获取图像类型 + ic.hardwarecaps.lowpowermode = LowPowerMode::Min_None; //暂无参数 设置休眠时间 两个参数3399未使用 + image_configuration(ic); +} +void hg_scanner_306::printf_devconfig(setting_hardware::HGSCANCONF_3288 *d) +{ + if (!d) + d = &dsp_config; + + VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.doubleFeeded:%d\r\n",d->params_3288.doubleFeeded); + VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.dpi:%d\r\n",d->params_3288.dpi); + VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.dstHeight:%d\r\n",d->params_3288.dstHeight); + VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.enableLed:%d\r\n",d->params_3288.enableLed); + VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.enableStable:%d\r\n",d->params_3288.enableStable); + VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.isColor:%d\r\n",d->params_3288.isColor); + VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.isCorrect:%d\r\n",d->params_3288.isCorrect); + VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.pageSize:%d\r\n",d->params_3288.pageSize); + VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.reversed1:%d\r\n",d->params_3288.reversed1); + VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.reversed2:%d\r\n",d->params_3288.reversed2); + VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.enableSizeDetect:%d\r\n",d->params_3288.enableSizeDetect); + VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.value:%d\r\n",d->value); +} + +int hg_scanner_306::get_device_type(bool &type) +{ + int ret = SCANNER_ERR_OK; + + USBCB cmd = { setting3288dsp::DEVICES_7010,0,0, }; + { + std::lock_guard lock(io_lock_); + ret = writeusb(cmd); + if (ret == SCANNER_ERR_OK) + ret = readusb(cmd); + + if (ret) + return ret; + type = cmd.u32_Data; + } + return ret; +} + +int hg_scanner_306::get_devs_distortion_check_val(float& data, int dpi, int dir) +{ + int ret = SCANNER_ERR_OK; + USBCB usbcb = { dir ? setting3288dsp::GET_JUST_COF_V : setting3288dsp::GET_JUST_COF_H ,0,dpi }; + int len = sizeof(usbcb); + { + ret = io_->write_bulk(&usbcb, &len); + if (ret != SCANNER_ERR_OK) + { + return ret; + } + + io_->set_timeout(3000); + ret = io_->read_bulk(&usbcb, &len); + } + if (ret != SCANNER_ERR_OK) + { + return ret; + } + + int val = usbcb.u32_Data; + data = *(float*)&val; +} + +int hg_scanner_306::get_correction_image(int inx , int dpi, int mode) +{ + for (auto it : correction_image_map_) + { + if (it.second.info.params.colormode == mode && it.second.info.params.dpi == dpi) + { + return -1;//预防重复添加 + } + } + int ret = SCANNER_ERR_OK; + setting3288dsp::FLAT_INFO_IMAGE image_info; + + image_info.info.params.dpi = dpi; + image_info.info.params.colormode = mode; + + cv::Mat white_mat; + cv::Mat black_mat;; + for (size_t i = 0; i < 2; i++) //黑白一起保存下来 + { + vector imagedata; + + image_info.info.params.is_whiteimage = i; + int val = image_info.info.value; + USBCB cmd = { setting3288dsp::GET_FLAT_DATA,val,0, }; + { + std::lock_guard lock(io_lock_); + ret = writeusb(cmd); + if (ret == SCANNER_ERR_OK) + ret = readusb(cmd); + + if (ret) + return ret; + + image_info.info.value = cmd.u32_Data; + + if (image_info.info.params.status != 100) + { + VLOG_MINI_1(LOG_LEVEL_WARNING, "get_correction_image status:%d\n", image_info.info.params.status); + return SCANNER_ERR_NO_DATA; + } + int len = image_info.info.params.datalen; + imagedata.resize(len); + + + if (ret == SCANNER_ERR_OK) + ret = io_->read_bulk(&imagedata[0], &len); + if (imagedata.empty()) + { + return SCANNER_ERR_NO_DATA; + } + cv::ImreadModes rmc = cv::IMREAD_GRAYSCALE;;// image_info.info.params.colormode ? cv::IMREAD_COLOR : cv::IMREAD_GRAYSCALE; + cv::Mat mat = cv::imdecode(imagedata, rmc);//color BGR + + //if (mat.channels() == 3) + //cv::cvtColor(mat, mat, CV_BGR2RGB); + + if (mat.empty()) + { + VLOG_MINI_1(LOG_LEVEL_WARNING, "get_correction_image image is NULL:%d\n", image_info.info.params.status); + return SCANNER_ERR_NO_DATA; //只要有一张图没有 直接退了 + } + float f = 0.0; + + get_devs_distortion_check_val(f, dpi, i); + + if (i) + { + image_info.vratio = f; + white_mat = mat; + } + + else + { + image_info.hratio = f; + black_mat = mat; + } + + } + } + //cv::imwrite("C://image//correction_image_white_mat" + to_string(inx) + ".bmp", white_mat); + //cv::imwrite("C://image//correction_image_black_mat" + to_string(inx) + ".bmp", black_mat); + + ret = hg_imgproc::correction_image(ImagePrc_pHandle_, image_info.flat_lut, black_mat, white_mat); + + correction_image_map_[inx] = image_info; + + return ret; +} +std::string hg_scanner_306::get_firmware_version() +{ + char buf[20] = { 0 }; + int ret = SCANNER_ERR_OK, + len = 10; //协议定义长度为10 100 200 =8 + USBCB cmd = { setting3288dsp::GET_FW_VERSION,len,0,}; + + { + std::lock_guard lock(io_lock_); + ret = writeusb(cmd); + if(ret == SCANNER_ERR_OK) + ret = io_->read_bulk(buf, &len); + } + string fw = buf; + VLOG_MINI_1(LOG_LEVEL_WARNING, "get_firmware_version:%s\n", !fw.empty() ? fw.c_str() : "not find devs firmware_version"); + + return buf; +} + std::string hg_scanner_306::get_serial_num() + { + string SerialNum = ""; + int ret = SCANNER_ERR_OK, + len = 14; + SerialNum.resize(len); + + USBCB cmd = { setting3288dsp::GET_SERIAL,len,0,}; + { + std::lock_guard lock(io_lock_); + ret = writeusb(cmd); + if(ret == SCANNER_ERR_OK) + ret = io_->read_bulk(&SerialNum[0], &len); + } + + VLOG_MINI_1(LOG_LEVEL_WARNING, "get_serial_num:%s\n", !SerialNum.empty() ? SerialNum.c_str() : "not find devs get_serial_num"); + return SerialNum; + } + std::string hg_scanner_306::get_ip(void) + { + return ""; + } +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +int hg_scanner_306::set_leaflet_scan(void) +{ + int ret = SCANNER_ERR_OK; + test_1_paper_ = true; + + ret = start(); + return ret; +} + +int hg_scanner_306::set_clear_roller_num(void) +{ + std::lock_guard lock(io_lock_); + USBCB usbcb = { setting3288dsp::CLR_ROLLER_NUM,0,4 }; + return writeusb(usbcb); +} +int hg_scanner_306::set_clear_history_num(void) +{ + if (!firmware_sup_history_cnt) + { + return SCANNER_ERR_DEVICE_NOT_SUPPORT; + } + std::lock_guard lock(io_lock_); + USBCB usbcb = { setting3288dsp::CLR_SCAN_NUM,0,4 }; + return writeusb(usbcb); +} +int hg_scanner_306::get_device_code(void) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_306::get_sleep_time(int &data) +{ + int ret = SCANNER_ERR_OK, + len = 0; + + USBCB usbcb = { setting3288dsp::GET_SLEEP_TIME, 0, 0 }; + { + std::lock_guard lock(io_lock_); + ret = writeusb(usbcb); + if (ret != SCANNER_ERR_OK) + { + return ret; + } + len = sizeof(usbcb); + ret = io_->read_bulk(&usbcb, &len); + } + if (ret == SCANNER_ERR_OK) + { + data = (SANE_Power)usbcb.u32_Data; + } + VLOG_MINI_1(LOG_LEVEL_WARNING, "get_sleep_time:%d\n", data); + return ret; +} +int hg_scanner_306::set_sleep_time(int data) +{ + std::lock_guard lock(io_lock_); + int ret = SCANNER_ERR_OK; + if (data == -1) + data = 0x7FFFFFFF; + USBCB usbcb = { setting3288dsp::SET_SLEEP_TIME,data, 0}; + ret = writeusb(usbcb); + return ret; +} + +int hg_scanner_306::get_scanner_paperon(SANE_Bool& type) +{ + int ret = SCANNER_ERR_OK, + len = 0; + + USBCB usbcb = { setting3288dsp::GET_PAPERFEEDER_STATUS, 0, 0}; + len = sizeof(USBCB); + + { + std::lock_guard lock(io_lock_); + ret = writeusb(usbcb); + if (ret == SCANNER_ERR_OK) + { + ret = io_->read_bulk(&usbcb, &len); + type = usbcb.u32_Data == 0 ? false : true; + } + } + //if (usbcb.u32_Data == 0) + // ret = SCANNER_ERR_DEVICE_NO_PAPER; + //else + // ret = SCANNER_ERR_OK; + VLOG_MINI_1(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)); + return ret; +} + +int hg_scanner_306::get_scan_is_sleep(SANE_Bool& type) +{ + int ret = SCANNER_ERR_OK, + len = 0; + + USBCB usbcb = { setting3288dsp::ACTIVE_SCANNER, 0, 0 }; + len = sizeof(USBCB); + { + std::lock_guard lock(io_lock_); + + ret = writeusb(usbcb); + if (ret == SCANNER_ERR_OK) + { + ret = io_->read_bulk(&usbcb, &len); + } + } + if (ret == SCANNER_ERR_OK) + { + if (usbcb.u32_Data == 0x10) + type = true; + //return SCANNER_ERR_OK; + else if (usbcb.u32_Data == 0x100) + type = false; + //return SCANNER_ERR_DEVICE_SLEEPING; + } + VLOG_MINI_1(LOG_LEVEL_WARNING, "get_scan_is_sleep is(%s)\n", !type ? hg_scanner_err_description(SCANNER_ERR_DEVICE_SLEEPING) : hg_scanner_err_description(SCANNER_ERR_OK)); + return ret; +} +///此款设备无此功能 +int hg_scanner_306::on_staple_check_changed(bool& check) +{ + return SCANNER_ERR_OK; +} +int hg_scanner_306::on_skew_check_changed(bool& check) +{ + return SCANNER_ERR_OK; +} +int hg_scanner_306::on_skew_check_level_changed(int& check) +{ + return SCANNER_ERR_OK; +} +int hg_scanner_306::on_set_feedmode(int feedmode) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_306::on_pic_type(bool& pic) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_306::on_pick_paper(bool autostrength) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_306::on_pick_paper_threshold(double threshold) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_306::on_is_auto_paper(bool isautopaper) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_306::on_cis_get_image(bool isautopaper) +{ + is_cis_image = isautopaper; + dsp_config.params_3288.isCorrect = isautopaper == true ? 0 : 1; + return writedown_device_configuration(); +} +int hg_scanner_306::on_process_double_paper(bool type) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_306::on_get_feedmode(int &feedmode) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_306::get_device_log(string &log) +{ + int ret = SCANNER_ERR_OK, + len = 0; + string save_path = hg_log::temporary_path() + PATH_SEPARATOR + "device.log"; + string str; + string str2; + USBCB usbcb = { setting3288dsp::GET_LOG_FILES_INFO, 0, 0 }; + len = sizeof(USBCB); + { + std::lock_guard lock(io_lock_); + + ret = writeusb(usbcb); + if (ret == SCANNER_ERR_OK) + { + ret = readusb(usbcb); + } + + int block = usbcb.u32_Count, + total = usbcb.u32_Count, + index = 0; + + if (total == 0) + { + return SCANNER_ERR_NO_DATA; + } + str.resize(total); + str2.resize(total); + //ret = io_->read_bulk(&str[index], &block);//Reading too much data at once can cause error(TIME_OUT), it requires segmented reading. 2023-10-9 + while (total) + { + block = 1024 * 1024; + if (total < block) + { + block = total; + } + ret = io_->read_bulk(&str[index], &block); + if (ret != SCANNER_ERR_OK) + return ret; + + index += block; + total -= block; + } + } + + if (ret != SCANNER_ERR_OK) + return ret; + + ofstream f; + f.open(save_path, ios::out | ios::trunc); + if (!f.is_open()) + return SCANNER_ERR_CREATE_FILE_FAILED; + + f << str << endl; + f.close(); + log = save_path; + + return SCANNER_ERR_OK; +} +int hg_scanner_306::set_devreboot(int data) +{ + USBCB usbcb = { setting3288dsp::REBOOT, data ,0 }; + return writeusb(usbcb); +} +int hg_scanner_306::set_devshtudown() +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_306::set_scan_islock(SANE_Bool type) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_306::get_scan_islock(SANE_Bool& type) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_306::set_scan_lock_check_val(string str) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_306::set_firmware_upgrade(std::string str) +{ + std::lock_guard lock(io_lock_); + + std::ifstream filename; + int ret = SCANNER_ERR_OK; + int block = 1024 * 1024; + char* sendbuf = new char[block]; + + filename.open(str, std::ios_base::in | std::ios_base::binary); + if (!filename.is_open()) + { + return SCANNER_ERR_NO_DATA; + } + + filename.seekg(0, std::ios::end); + size_t total = filename.tellg(); + + filename.seekg(0, std::ios::beg); + + USBCB pre = { setting3288dsp::PRE_UPGRADE,0,total }; + int len = sizeof(pre); + ret = io_->write_bulk(&pre, &len); //先告诉下面总字节数 + if (ret != SCANNER_ERR_OK) + { + return ret; + } + USBCB update = { setting3288dsp::START_UPGRADE,0,total }; + len = sizeof(update); + + while (total > 0) + { + memset(sendbuf, 0, block); + block = 1024 * 1024; + if (total < block) + { + block = total; + } + io_->write_bulk(&update, &len);//数据分段写,每次都要先告诉下面? + + filename.read(sendbuf, block); + + //size_t pos = filename.tellg(); + + io_->write_bulk(sendbuf,&block); + + ret = io_->read_bulk(&update, &len); + if (ret != SCANNER_ERR_OK) + { + return ret; + } + total -= block; + this_thread::sleep_for(std::chrono::milliseconds(10)); + } + if (sendbuf) + { + delete[]sendbuf; + } + USBCB updatefinished = { setting3288dsp::UPDATE_FINISHED,0,0 }; + len = sizeof(updatefinished); + ret = io_->write_bulk(&updatefinished, &len); + + StopWatch sw; + + USBCB result = { setting3288dsp::GET_UPDATE_RESULT,0,0 }; + len = sizeof(result); + while (sw.elapsed_s() < 60) + { + this_thread::sleep_for(std::chrono::milliseconds(1000)); + io_->set_timeout(3000); + ret = io_->write_bulk(&result, &len); + + ret = io_->read_bulk(&result, &len); + //this_thread::sleep_for(std::chrono::milliseconds(1000)); + + if (ret != SCANNER_ERR_OK) + { + VLOG_MINI_1(LOG_LEVEL_WARNING, "updata result read_bulk:%s\n", hg_scanner_err_name(ret)); + //return ret; + } + if (result.u32_Data == 2 || result.u32_Data == 3) + { + VLOG_MINI_1(LOG_LEVEL_WARNING, "updata result:%d\n", result.u32_Data); + break; + } + } + return ret; +} +int hg_scanner_306::set_clean_paper_road() +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_306::get_dev_islock_file(int& data) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_306::set_dev_islock_file(int data) +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_306::set_speed_mode(int data) +{ + int ret = SCANNER_ERR_OK, + len = 0; + + USBCB usbcb = { setting3288dsp::SET_SPEED_MODE,data,0 }; + len = sizeof(usbcb); + ret = io_->write_bulk(&usbcb, &len); + return 0; +} +int hg_scanner_306::get_speed_mode(int& data) +{ + int ret = SCANNER_ERR_OK, + len = 0; + + USBCB usbcb = { setting3288dsp::GET_SPEED_MODE,0,0 }; + len = sizeof(usbcb); + ret = io_->write_bulk(&usbcb, &len); + if (ret != SCANNER_ERR_OK) + { + return ret; + } + ret = io_->read_bulk(&usbcb, &len); + if (ret == SCANNER_ERR_OK) + { + data = usbcb.u32_Data; + } + return ret; +} +int hg_scanner_306::set_devs_distortion_check_val(float data) +{ + int val = *(int*)&data; //float to int send + int ret = SCANNER_ERR_OK, + len = 0; + + int protocol_dpi = resolution_ == 200 ? 1 : (resolution_ == 300 ? 2 : 3); + USBCB usbcb = { setting3288dsp::SET_JUST_COF_V ,val,protocol_dpi }; + len = sizeof(usbcb); + float f = *(float*)&(val); + VLOG_MINI_3(LOG_LEVEL_WARNING, "set_devs_distortion_check_val dpi is:%d,config dpi = %d,distortion_check_val(%f)\n", resolution_, protocol_dpi,f); + io_->set_timeout(5000); + { + std::lock_guard lock(io_lock_); + ret = io_->write_bulk(&usbcb, &len); + } + return ret; +} +int hg_scanner_306::get_devs_distortion_check_val(float& data) +{ + int ret = SCANNER_ERR_OK, + len = 0, + val = 0; + + int protocol_dpi = resolution_ == 200 ? 1 : (resolution_ == 300 ? 2 : 3); + USBCB usbcb = { setting3288dsp::GET_JUST_COF_V ,0,protocol_dpi }; + len = sizeof(usbcb); + { + std::lock_guard lock(io_lock_); + + ret = io_->write_bulk(&usbcb, &len); + if (ret != SCANNER_ERR_OK) + { + return ret; + } + + io_->set_timeout(3000); + ret = io_->read_bulk(&usbcb, &len); + } + if (ret != SCANNER_ERR_OK) + { + return ret; + } + + val = usbcb.u32_Data; + data = *(float *) &val; + + VLOG_MINI_3(LOG_LEVEL_WARNING, "get_distortion_check_val dpi is:%d,protocol_dpi = %d get_distortion_check_val(%f)\n", resolution_, protocol_dpi, data); + return ret; +} +int hg_scanner_306::set_auto_flat(int data) +{ + if (data < 0 && data >6) + { + data = 0; + } + USBCB usbcb = { setting3288dsp::START_FLAT,data,0 }; + int len = sizeof(usbcb); + int ret = SCANNER_ERR_OK; + + { + std::lock_guard lock(io_lock_); + ret = writeusb(usbcb); + } + + if (ret == SCANNER_ERR_OK && wait_usb_.is_waiting()) + { + //status_ = SCANNER_ERR_DEVICE_BUSY; + wait_usb_.notify(); + std::this_thread::sleep_for(std::chrono::milliseconds(300)); + ret = try_third_app_after_start(ret); + } + else + status_ = ret; + VLOG_MINI_1(LOG_LEVEL_WARNING, "set_auto_flat ret: %s\n", hg_scanner_err_name(ret)); + return ret; +} +int hg_scanner_306::set_updata0303(void) +{ + string fw = get_firmware_version(); + if (!fw.empty()) + { + if (fw.substr(4, 6) == "230303") + { + string scanner_path = hg_log::get_module_full_path(LIBNAME); + scanner_path = scanner_path.substr(0, scanner_path.size() - strlen(LIBNAME)); + scanner_path += "update.zip"; + set_firmware_upgrade(scanner_path); + } + } + return 0; +} +int hg_scanner_306::get_devs_cpu(string& cpu) +{ + std::string src_name = "/usr/local/huago/sysinfo.json"; + std::string dst_name = "./sys.log"; + + USBCB usbcb = { 0 }; + usbcb.u32_CMD = 0x301; + usbcb.u32_Count = src_name.length(); + int len = src_name.length(); + int size = sizeof(usbcb); + int ret = io_->write_bulk(&usbcb, &size); + ret = io_->write_bulk(&src_name[0], &len); + usbcb.u32_CMD = 0x300; + ret = io_->write_bulk(&usbcb, &size); + ret = io_->read_bulk(&usbcb, &size); + ofstream out(dst_name); + usbcb.u32_CMD = 0x302; + ret = io_->write_bulk(&usbcb, &size); + int touch = 0; + std::string buff; + int bufsize = usbcb.u32_Count < 512 * 1024 ? usbcb.u32_Count : 512 * 1024; + buff.resize(bufsize); + while (touch < usbcb.u32_Count) + { + ret = io_->read_bulk(&buff[0], &bufsize); + if (SCANNER_ERR_OK != ret) + return ret; + + out.write(&buff[0], bufsize); + touch += bufsize; + bufsize = bufsize > usbcb.u32_Count - touch ? usbcb.u32_Count - touch : bufsize; + } + out.close(); + + long long cpu_size = 0; + json js = json::parse(buff); + if (js.contains("MemTotal")) + { + cpu_size = js["MemTotal"]; + } + + float num = (float)cpu_size / 1024 / 1024 / 1024; + char buf[10] = { 0 }; + sprintf(buf, "%.2f", num); + strcat(buf, "GB"); + cpu = buf; + + return ret; +} +int hg_scanner_306::get_devs_disk(string& disk) +{ + std::string src_name = "/usr/local/huago/sysinfo.json"; + std::string dst_name = "./sys.log"; + + USBCB usbcb = { 0 }; + usbcb.u32_CMD = 0x301; + usbcb.u32_Count = src_name.length(); + int len = src_name.length(); + int size = sizeof(usbcb); + int ret = io_->write_bulk(&usbcb, &size); + ret = io_->write_bulk(&src_name[0], &len); + usbcb.u32_CMD = 0x300; + ret = io_->write_bulk(&usbcb, &size); + ret = io_->read_bulk(&usbcb, &size); + ofstream out(dst_name); + usbcb.u32_CMD = 0x302; + ret = io_->write_bulk(&usbcb, &size); + int touch = 0; + std::string buff; + int bufsize = usbcb.u32_Count < 512 * 1024 ? usbcb.u32_Count : 512 * 1024; + buff.resize(bufsize); + while (touch < usbcb.u32_Count) + { + ret = io_->read_bulk(&buff[0], &bufsize); + if (SCANNER_ERR_OK != ret) + return ret; + + out.write(&buff[0], bufsize); + touch += bufsize; + bufsize = bufsize > usbcb.u32_Count - touch ? usbcb.u32_Count - touch : bufsize; + } + out.close(); + + long disk_size = 0; + json js = json::parse(buff); + if (js.contains("DiskTotal")) + { + disk_size = js["DiskTotal"]; + } + + float num = (float)disk_size / 1024 / 1024; + char buf[10] = { 0 }; + sprintf(buf, "%.2f", num); + strcat(buf, "GB"); + disk = buf; + + return ret; +} +int hg_scanner_306::set_serial_num(string str) +{ + std::lock_guard lock(io_lock_); + + USBCB usbcb = { setting3288dsp::SEND_SERIAL,0,14 }; + int len = sizeof(usbcb), + ret = SCANNER_ERR_OK; + ret = io_->write_bulk(&usbcb, &len); + if (ret == SCANNER_ERR_OK) + { + len = str.size(); + + ret = io_->write_bulk(&str, &len); + } + return ret; +} +int hg_scanner_306::set_vid_pid(int data) +{ + std::lock_guard lock(io_lock_); + USBCB usbcb = { setting3288dsp::SET_USB_INFOR_VIDPID,data,0 }; + int len = sizeof(usbcb); + return io_->write_bulk(&usbcb, &len); +} +int hg_scanner_306::get_vid_pid(int& data) +{ + std::lock_guard lock(io_lock_); + USBCB usbcb = { setting3288dsp::GET_USB_INFOR_VIDPID,0,0 }; + int ret = SCANNER_ERR_OK, + len = sizeof(usbcb); + io_->write_bulk(&usbcb, &len); + io_->read_bulk(&usbcb, &len); + if (ret == SCANNER_ERR_OK) + { + data = usbcb.u32_Data; + } + return ret; +} +int hg_scanner_306::set_notify_sleep() +{ + return SCANNER_ERR_DEVICE_NOT_SUPPORT; +} +int hg_scanner_306::get_history_scan_count(int& num) +{ + int ret = SCANNER_ERR_OK, + len = 0; + USBCB usbcb = { setting3288dsp::GET_SCANN_NUM,0, 0 }; + len = sizeof(usbcb); + { + std::lock_guard lock(io_lock_); + + ret = io_->write_bulk(&usbcb, &len); + if (ret != SCANNER_ERR_OK) + { + return ret; + } + ret = io_->read_bulk(&usbcb, &len); + } + if (ret != SCANNER_ERR_OK) + { + return ret; + } + num = usbcb.u32_Data; + return ret; +} +int hg_scanner_306::get_roller_num(int& val) +{ + int ret = SCANNER_ERR_OK, + len = 0; + USBCB usbcb = { setting3288dsp::GET_ROLLER_NUM,0, 0 }; + len = sizeof(usbcb); + { + std::lock_guard lock(io_lock_); + + ret = io_->write_bulk(&usbcb, &len); + if (ret != SCANNER_ERR_OK) + { + return ret; + } + ret = io_->read_bulk(&usbcb, &len); + } + if (ret != SCANNER_ERR_OK) + { + return ret; + } + val = usbcb.u32_Data; + return ret; +} diff --git a/hgdriver/hgdev/hg_scanner_306.h b/hgdriver/hgdev/hg_scanner_306.h new file mode 100644 index 0000000..95660e6 --- /dev/null +++ b/hgdriver/hgdev/hg_scanner_306.h @@ -0,0 +1,137 @@ +#pragma once + +// hg_scanner is the base class of kinds of scanners +// +// created on 2022-01-30 +// +#include +#include +#include +#include + +#include "hg_scanner.h" +#include "../wrapper/hg_log.h" +#include "PaperSize.h" + +//#ifdef OEM_HANWANG +//#define hg_scanner_306 hw_scanner_300 +//#elif defined(OEM_LISICHENG) +//#define hg_scanner_306 lsc_scanner_300 +//#endif + + +class hg_scanner_306 : public hg_scanner +{ +protected: + virtual int on_scanner_closing(bool force) override; + virtual void thread_handle_usb_read(void) override; + virtual int discard_all_images(void) override; + virtual int get_roller_life(void) override; + +protected: + virtual int on_color_mode_changed(int& color_mode) override; //颜色切换 + virtual int on_paper_changed(int& paper) override; //纸张大小设置 + virtual int on_paper_check_changed(bool& check) override; //尺寸检测 + virtual int on_resolution_changed(int& dpi) override; //分辨率设置 + virtual int on_ultrasonic_check_changed(bool& check) override; //设置超声波检测 + virtual int on_staple_check_changed(bool& check) override; //设置订书针检测 + virtual int on_skew_check_changed(bool& check) override; //设置歪斜检测 + virtual int on_skew_check_level_changed(int& check) override; //设置歪斜检测强度 + virtual int on_get_feedmode(int& feedmode) override; //获取分纸强度 + virtual int on_set_feedmode(int feedmode) override; //设置分纸强度 + virtual int on_pic_type(bool& pic)override; //照片模式或者文本模式 + virtual int on_pick_paper(bool autostrength)override; //自动分纸强度 + virtual int on_pick_paper_threshold(double threshold)override; + virtual int on_is_auto_paper(bool isautopaper)override; //待纸扫描 + virtual int on_cis_get_image(bool isautopaper) override; //cis 原图获取 + virtual int on_process_double_paper(bool type) override; //双张图像校验 + +public: + hg_scanner_306(const char* dev_name,int pid, usb_io* io); + ~hg_scanner_306(); +public: + virtual int start(void)override; + virtual int stop(void)override; +private: + int set_kernelsnap_ver(); + int agreement(TwSS tw,int align); + int initdevice(); + int writeusb(USBCB &usb); + int readusb(USBCB &usb); + int pop_image(void); + int get_scanner_status(USBCB &usb); + int get_img_data_7010(); + int writedown_device_configuration(bool type =false,setting_hardware::HGSCANCONF_3288 *d = NULL); + void writedown_image_configuration(void); + void printf_devconfig(setting_hardware::HGSCANCONF_3288 *d = NULL); + int get_device_type(bool &type); + int get_devs_distortion_check_val(float& data, int dpi, int dir);//获取设备畸变值 DPI=1、2、3; dir = 0,1; + + setting3288dsp::HG_JpegCompressInfo frame_info_; + ///////////////////////7010专有协议,获取校正数据////////////////////// + //inx:序号// + //dpi:1--->200 2--->300 3--->600// + //mode:0 灰度 1彩色 + int get_correction_image(int inx ,int dpi,int mode); +private: + std::vector savestatus_; + setting_hardware::HGSCANCONF_3288 dsp_config; + Device::PaperSize papersize; + bool is_devs_sleep_; + + + int first_frame_total; //设置的帧数 + int last_frame_total; //实际采集的帧数 + + + std::vector jpgdata_; + int index_; + +public: + //////////////固定的硬件信息设置或获取////////////// + virtual std::string get_firmware_version(void)override; + virtual std::string get_serial_num(void)override; + virtual std::string get_ip(void)override; + + virtual int set_serial_num(string str) override; //设置序列号 + virtual int set_vid_pid(int data) override; //设置vidpid + virtual int get_vid_pid(int& data)override; //获取vidpid + + /////////////////成功返回:SCANNER_ERR_OK ///////////// + /////////////////失败返回:IO错误码 ///////////// + virtual int set_leaflet_scan(void) override; //单张扫描 + + + virtual int set_clear_roller_num(void) override; //清除滚轴计数 + virtual int set_clear_history_num(void) override; //清除历史张数 0303固件版本才支持 + + virtual int get_device_code(void); //获取设备编码 不支持 + + virtual int get_scanner_paperon(SANE_Bool& type) override; //获取设备有无纸张 /*/ type : 0无纸 1有纸 */ + + virtual int get_scan_is_sleep(SANE_Bool& type) override; //获取设备是否休眠当中 /*/ type : 0休眠 1唤醒状态*/ + virtual int get_sleep_time(int& data) override; //获取功耗模式(休眠) /*/ data > 0*/ + virtual int set_sleep_time(int data) override; //设置功耗模式(休眠) /*/ data > 0*/ + virtual int get_history_scan_count(int& data) override; //获取历史扫描张数 /*/ data > 0*/ + virtual int get_roller_num(int& data) override; //获取滚轮张数 /*/ data > 0*/ + virtual int set_notify_sleep(void) override; //唤醒设备 + virtual int get_device_log(string& log) override; //获取设备日志 /*/ log :储存路径*/ + virtual int set_devreboot(int data) override; //设置设备重启 + virtual int set_devshtudown() override; //设置设备关机 + virtual int set_scan_islock(SANE_Bool type) override; //设置设备是否锁定 /*/ type:0解锁,1锁定*/ + virtual int get_scan_islock(SANE_Bool& type) override; //获取设备是否锁定 /*/ type:0解锁,1锁定*/ + virtual int set_scan_lock_check_val(string str) override; //获取设备是否锁定 /*/ str:校验码*/ + virtual int set_firmware_upgrade(std::string str) override; //固件升级 /*/ str:文件名路径*/ + virtual int set_clean_paper_road() override; //清理纸道 + virtual int get_dev_islock_file(int& data) override; //获取设备文件 /*/ data:0 未上锁,1 上锁。-1 未发现黑名单列表 -2列表没有信息*/ + virtual int set_dev_islock_file(int data) override; //设置设备文件 /*/ data:0 未上锁,1 上锁* + virtual int set_speed_mode(int data) override; //设置速度模式 /*/ data:40,50,60,70 + virtual int get_speed_mode(int& data)override; //获取速度模式 /*/ data:40,50,60,70 + virtual int set_devs_distortion_check_val(float data) override; //设置畸变矫正 + virtual int get_devs_distortion_check_val(float& data)override;//获取设备畸变值 float to int; + virtual int set_auto_flat(int data)override; //设置自动平场校正 + // data:0(ALL) 1(200dpi、gray) 2(200dpi、color) 3(300dpi、gray) 4(300dpi、color) 5(600dpi、gray) 6(600dpi、color) + virtual int set_updata0303(void)override; + virtual int get_devs_cpu(string& cpu); //获取设备内存大小 + virtual int get_devs_disk(string& disk); //获取设备硬盘容量大小 +}; diff --git a/hgdriver/hgdev/scanner_manager.cpp b/hgdriver/hgdev/scanner_manager.cpp index bacb681..a554189 100644 --- a/hgdriver/hgdev/scanner_manager.cpp +++ b/hgdriver/hgdev/scanner_manager.cpp @@ -16,6 +16,7 @@ #include "hg_scanner_239.h" #include "hg_scanner_300.h" #include "hg_scanner_302.h" +#include "hg_scanner_306.h" /// @@ -121,10 +122,11 @@ g_supporting_devices[] = { , {0x3072, PID_AND_NAME(400, SCANNER_NAME_HG_G400), "G400", "", &hg_scanner_mgr::create_scanner_g400} , {0x3072, PID_AND_NAME(402, SCANNER_NAME_HG_G400), "G400", "", &hg_scanner_mgr::create_scanner_g402} , {0x3072, PID_AND_NAME(439, SCANNER_NAME_HG_G400), "G400", "", &hg_scanner_mgr::create_scanner_g439} + , {0x3072, PID_AND_NAME(306, SCANNER_NAME_HG_G300), "G300", "", &hg_scanner_mgr::create_scanner_g306} , {0x064B, PID_AND_NAME(7823,SCANNER_NAME_HG_G300), "G300", "", &hg_scanner_mgr::create_scanner_g300} , {0x064B, PID_AND_NAME(7823,SCANNER_NAME_HG_G200), "G200", "", &hg_scanner_mgr::create_scanner_g100} - , {0x064B, PID_AND_NAME(7823,SCANNER_NAME_HG_G400), "G400", "", &hg_scanner_mgr::create_scanner_g400} + , {0x064B, PID_AND_NAME(7823,SCANNER_NAME_HG_G300), "G400", "", &hg_scanner_mgr::create_scanner_g400} #endif }; bool islang = false; @@ -348,6 +350,15 @@ hg_scanner* hg_scanner_mgr::create_scanner_g439(const char* name, usb_io* io, sc return dynamic_cast(s); } +hg_scanner* hg_scanner_mgr::create_scanner_g306(const char* name, usb_io* io, scanner_handle* h) +{ + hg_scanner_306* s = new hg_scanner_306(name, 0x306, io); + + if (h) + *h = s; + + return dynamic_cast(s); +} void hg_scanner_mgr::usb_event_handle(usb_event ev, libusb_device* device, int vid, int pid, int usb_ver_h, int usb_ver_l, bool* retry, void* user) // usb_ver_h.usb_ver_l { hg_scanner_mgr* obj = (hg_scanner_mgr*)user; diff --git a/hgdriver/hgdev/scanner_manager.h b/hgdriver/hgdev/scanner_manager.h index f819455..4264daf 100644 --- a/hgdriver/hgdev/scanner_manager.h +++ b/hgdriver/hgdev/scanner_manager.h @@ -120,6 +120,7 @@ public: static hg_scanner* create_scanner_g400(const char* name, usb_io* io, scanner_handle* h); static hg_scanner* create_scanner_g402(const char* name, usb_io* io, scanner_handle* h); static hg_scanner* create_scanner_g439(const char* name, usb_io* io, scanner_handle* h); + static hg_scanner* create_scanner_g306(const char* name, usb_io* io, scanner_handle* h); public: scanner_err hg_scanner_enum(ScannerInfo* scanner_list, long* count, bool local_only);