code_device/hgdriver/hgdev/hg_scanner_306.cpp

1666 lines
74 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "hg_scanner_306.h"
#include "../wrapper/hg_log.h"
#if defined(WIN32) || defined(_WIN64)
#include "scanner_manager.h"
#endif
static std::string jsontext1("{\"global\":{\"device_type\":\"G300\",\"option_count\":70},\"restore\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"none\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u6062\\u590d\\u9ed8\\u8ba4\\u8bbe\\u7f6e\",\"desc\":\"\\u6062\\u590d\\u9ed8\\u8ba4\\u8bbe\\u7f6e\",\"type\":\"button\",\"cur\":\"button\",\"default\":\"button\",\"size\":0},\"help\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"none\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u5e2e\\u52a9\",\"desc\":\"\\u663e\\u793a\\u8f6f\\u4ef6\\u5e2e\\u52a9\\u6587\\u6863\",\"type\":\"button\",\"cur\":\"true\",\"default\":\"true\",\"size\":4},\"grp-1\":{\"cat\":\"base\",\"title\":\"\\u57fa\\u672c\\u8bbe\\u7f6e\",\"type\":\"group\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"field\":\"Common\",\"pos\":0,\"visible\":true,\"unit\":\"None\"},\"is-multiout\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\",\"desc\":\"\\u540c\\u65f6\\u8f93\\u51fa\\u591a\\u79cd\\u989c\\u8272\\u6a21\\u5f0f\\u7684\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"multiout-type\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\\u7c7b\\u578b\",\"desc\":\"\\u9009\\u62e9\\u591a\\u6d41\\u8f93\\u51fa\\u7684\\u7c7b\\u578b\",\"type\":\"string\",\"cur\":\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"default\":\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"size\":32,\"range\":[\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"\\u5f69\\u8272+\\u7070\\u5ea6\",\"\\u5f69\\u8272+\\u9ed1\\u767d\",\"\\u7070\\u5ea6+\\u9ed1\\u767d\"],\"depend_or\":[\"is-multiout==true\"]},\"mode\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u989c\\u8272\\u6a21\\u5f0f\",\"desc\":\"\\u9009\\u62e9\\u8272\\u5f69\\u6a21\\u5f0f\",\"type\":\"string\",\"cur\":\"24\\u4f4d\\u5f69\\u8272\",\"default\":\"24\\u4f4d\\u5f69\\u8272\",\"size\":32,\"range\":[\"24\\u4f4d\\u5f69\\u8272\",\"256\\u7ea7\\u7070\\u5ea6\",\"\\u9ed1\\u767d\",\"\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"],\"depend_or\":[\"is-multiout==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\":80,\"default\":80,\"size\":4,\"range\":{\"min\":1,\"max\":255,\"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,\"depend_or\":[\"page!=\\u5bf9\\u6298\"]},\"blank-sensitivity\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\" \\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\u7075\\u654f\\u5ea6\",\"desc\":\"\\u6570\\u503c\\u8d8a\\u5927\\uff0c\\u5219\\u8d8a\\u5bb9\\u6613\\u8df3\\u8fc7\",\"type\":\"int\",\"cur\":30,\"default\":30,\"size\":4,\"range\":{\"min\":1,\"max\":100,\"step\":1},\"depend_or\":[\"page==\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\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,");
static std::string jsontext3("\"unit\":\"None\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u5de6\\u4fa7\",\"desc\":\"\\u7a7f\\u5b54\\u5728\\u7eb8\\u5f20\\u4e0a\\u7684\\u5de6\\u4fa7\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"search-hole-range-l\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\" \\u5de6\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000,\"step\":0.050000},\"depend_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\",\"direction!=\\u81ea\\u52a8\\u6587\\u672c\\u65b9\\u5411\\u8bc6\\u522b\\u00b0\"]},\"is-lens-dirty\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"feeder\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u955c\\u5934\\u810f\\u6c61\\u68c0\\u6d4b\",\"desc\":\"\\u68c0\\u6d4b\\u955c\\u5934\\u662f\\u5426\\u810f\\u6c61\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4},\"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},\"double-feed\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"feeder\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u53cc\\u5f20\\u56fe\\u7247\\u5904\\u7406\",\"desc\":\"\\u68c0\\u6d4b\\u5230\\u53cc\\u5f20\\u8fdb\\u7eb8\\u540e\\u7684\\u5904\\u7406\\u65b9\\u5f0f\",\"type\":\"string\",\"cur\":\"\\u4e22\\u5f03\\u56fe\\u50cf\\u5e76\\u505c\\u6b62\\u626b\\u63cf\",\"default\":\"\\u4e22\\u5f03\\u56fe\\u50cf\\u5e76\\u505c\\u6b62\\u626b\\u63cf\",\"size\":40,\"range\":[\"\\u4e22\\u5f03\\u56fe\\u50cf\\u5e76\\u505c\\u6b62\\u626b\\u63cf\",\"\\u4e0a\\u4f20\\u56fe\\u50cf\\u5e76\\u6821\\u9a8c\"],\"depend_or\":[\"is-ultrosonic==true\"]},\"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\"]},\"period\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"PWM\\u5360\\u7a7a\\u6bd4\",\"desc\":\"\",\"type\":\"int\",\"cur\":30,\"default\":30,\"size\":4,\"range\":{\"min\":1,\"max\":100,\"step\":1}}}");
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)
, frame_length_(0)
, frame_width_(0)
, frame_hegiht_(0)
{
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "hg_scanner_306(%s) constructing ...\n", hg_log::format_ptr(this).c_str());
dsp_config.value = 0;
dsp_config.params_7010.enableLed = 1; //默认值
dsp_config.params_7010.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_))
init_settings((jsontext1 + jsontext2 + jsontext3).c_str());
status_ = SCANNER_ERR_OK;
//set_firmware_upgrade("C:\\Users\\modehua\\Desktop\\updata.zip");
}
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<std::mutex> 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)
{
ret = get_img_data_7010();
sw.reset();
if (ret != SCANNER_ERR_OK)
{
status_ = ret;
break;
}
}
this_thread::sleep_for(chrono::milliseconds(10));
if (SCANNER_ERR_DEVICE_NOT_FOUND == ret)
{
break;
}
}
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<std::mutex> 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::do_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<std::mutex> 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::do_stop(void)
{
int ret = SCANNER_ERR_OK;
USBCB usbcb = { setting3288dsp::STOP, 0, 0};
{
std::lock_guard<std::mutex> 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 ret;
}
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<std::mutex> lock(io_lock_);
ret = writeusb(usbcb);
}
if (ret != SCANNER_ERR_OK)
{
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "pop_image = %s\n", hg_scanner_err_name(ret));
}
return ret;
}
int hg_scanner_306::get_scanner_status(USBCB &usb)
{
std::lock_guard<std::mutex> 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 ;
}
int hg_scanner_306::get_img_data_7010()
{
int ret = SCANNER_ERR_OK;
USBCB usb{ setting3288dsp::GET_IMAGE, 0, 0 };
{
setting3288dsp::HG_JpegCompressInfo info;
StopWatch sw;
{
std::lock_guard<std::mutex> lock(io_lock_);
ret = writeusb(usb);
io_->set_timeout(1000);
sw.reset();
int len = sizeof(info);
ret = io_->read_bulk(&info, &len);
if (info.first_frame)
{
frame_length_ = info.DataLength;
frame_width_ = info.width;
frame_hegiht_ = info.height;
first_frame_total_ = info.index_frame;
jpgdata_.clear();
jpgdata_.resize(frame_width_ * frame_hegiht_ * first_frame_total_);
index_ = 0;
}
if (info.last_frame)
{
std::vector<unsigned char> data_;
data_.resize(frame_length_);
ret = io_->read_bulk(&data_[0], &frame_length_);
}
else
{
ret = io_->read_bulk(&jpgdata_[index_], &frame_length_);
index_ += frame_length_;
last_frame_total_ = info.index_frame;
}
}
if (info.last_frame)
{
if (info.error_code)
{
std::vector<unsigned char>().swap(jpgdata_); //回收空间 clear只能清空元素
return 0;
}
int frame_ind = first_frame_total_ - last_frame_total_;
if (frame_ind < 0)
{
frame_ind = 0;
}
mat_width = frame_width_;
mat_height = (frame_hegiht_ * first_frame_total_) - (frame_hegiht_ * frame_ind);
std::shared_ptr<tiny_buffer> 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);
ret = save_usb_data(image_data_);
index_ = 0;
std::vector<unsigned char>().swap(jpgdata_); //回收空间 clear只能清空元素
}
float v = sw.elapsed_ms();
return ret;
}
}
int hg_scanner_306::writedown_device_configuration(bool type,setting_hardware::HGSCANCONF_7010 *d)
{
if (!type)
return SCANNER_ERR_OK;
int ret = SCANNER_ERR_OK,
len = 0;
SIZE size;
setting_hardware::HGSCANCONF_7010 p = dsp_config;
if (!d)
{
p.params_7010.lutmode = keep_watermark_;
d = &p;
}
if (is_multiout)
{
d->params_7010.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_7010.isColor = 1;
}
if (paper_size_ == TwSS::USStatement || paper_size_ == TwSS::MaxSize)
{
//d->params_7010.pageSize = setting3288dsp::G400_MAXSIZE;
}
if (paper_size_ == TwSS::None || paper_size_ == TwSS::USStatement || paper_size_ == TwSS::MaxSize || paper_size_ == TwSS::Trigeminy)
{
d->params_7010.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_7010.dpi = 1;
}
if (image_prc_param_.bits.remove_morr && firmware_sup_morr_)
{
d->params_7010.moire = true;
}
else
d->params_7010.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_7010.enableSizeDetect = false;
}
size = papersize.GetPaperSize(TwSS::A4, 200, img_conf_.paperAlign);
USBCB usbcb = { setting3288dsp::CONFIGURED_DATA, d->value, 0};
len = sizeof(USBCB);
{
std::lock_guard<std::mutex> 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_7010.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_7010.pageSize != papermap[ind].dev_value)
{
int old = dsp_config.params_7010.pageSize;
dsp_config.params_7010.pageSize = papermap[ind].dev_value;
ret = writedown_device_configuration();
if (ret)
{
dsp_config.params_7010.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_7010.enableSizeDetect ^ check)
{
dsp_config.params_7010.enableSizeDetect = check;
ret = writedown_device_configuration();
if (ret)
{
dsp_config.params_7010.enableSizeDetect = !check;
check = dsp_config.params_7010.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_7010.dpi = dpi == 600 ? 3 : (dpi < 599 && dpi>=300) ? 2 : 1;
else if (firmware_sup_dpi_300)
dsp_config.params_7010.dpi = (dpi >= 300) ? 2 : 1;
else
dsp_config.params_7010.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_7010.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_7010.doubleFeeded ^ check)
{
dsp_config.params_7010.doubleFeeded = check;
ret = writedown_device_configuration();
if (ret)
{
dsp_config.params_7010.doubleFeeded = !check;
check = dsp_config.params_7010.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_7010 d = dsp_config;
size = papersize.GetPaperSize(TwSS::A4,200,align);
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_7010.enableSizeDetect;
ic.hardwarecaps.en_skrewdetect = 0;
ic.hardwarecaps.en_doublefeed = dsp_config.params_7010.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_7010 *d)
{
if (!d)
d = &dsp_config;
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_7010.doubleFeeded:%d\r\n",d->params_7010.doubleFeeded);
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_7010.dpi:%d\r\n",d->params_7010.dpi);
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_7010.dc:%d\r\n",d->params_7010.dc);
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_7010.enableLed:%d\r\n",d->params_7010.enableLed);
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_7010.isColor:%d\r\n",d->params_7010.isColor);
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_7010.isCorrect:%d\r\n",d->params_7010.isCorrect);
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_7010.pageSize:%d\r\n",d->params_7010.pageSize);
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_7010.reversed1:%d\r\n",d->params_7010.reversed1);
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_7010.reversed2:%d\r\n",d->params_7010.reversed2);
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_7010.enableSizeDetect:%d\r\n",d->params_7010.enableSizeDetect);
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_7010.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<std::mutex> 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<unsigned char> 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<std::mutex> 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;
cv::Mat mat = cv::imdecode(imagedata, rmc);//color BGR
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;
}
}
}
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<std::mutex> 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<std::mutex> 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<std::mutex> 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<std::mutex> 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<std::mutex> 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<std::mutex> 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<std::mutex> 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<std::mutex> 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_7010.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_set_period(int val)
{
dsp_config.params_7010.dc = val;
return SCANNER_ERR_OK;
}
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<std::mutex> 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;
}
//#enum scanner_err
//#{
//# SCANNER_ERR_OK = 0, //设备正常状态
//# SCANNER_ERR_SLEEP, 1 //设备处于休眠当中
//# SCANNER_ERR_UPDATE_OK, 2 //设备更新:成功
//# SCANNER_ERR_UPDATE_UPDATAING, 3 //设备更新:进行中
//# SCANNER_ERR_UPDATE_CHECK_VAL_ERROR, 4 //设备更新:校验检测错误
//# SCANNER_ERR_UPDATE_CHECK_FILE_LOST, 5 //设备更新:文件丢失
//# SCANNER_ERR_UPDATE_UNZIP_FAIL, 6 //设备更新:解压失败
//#};
int hg_scanner_306::set_firmware_upgrade(std::string str)
{
std::lock_guard<std::mutex> 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);
io_->write_bulk(&update, &len);
int indx = 0;
while (total > 0)
{
memset(sendbuf, 0, block);
block = 1024 * 1024;
if (total < block)
{
block = total;
}
filename.read(sendbuf + indx, block);
io_->write_bulk(sendbuf + indx,&block);
//ret = io_->read_bulk(&update, &len);
if (ret != SCANNER_ERR_OK)
{
return ret;
}
total -= block;
indx += block;
this_thread::sleep_for(std::chrono::milliseconds(10));
}
ret = io_->read_bulk(&update, &len);
if (update.u32_Count == 10)
{
return SCANNER_ERR_DEVICE_UPGRADE_FAIL;
}
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,sizeof(USBCB)};
len = sizeof(result);
sw.reset();
while (sw.elapsed_s() < 120)
{
//this_thread::sleep_for(std::chrono::milliseconds(500));
ret = io_->write_bulk(&result, &len);
if (ret != SCANNER_ERR_OK)
{
VLOG_MINI_1(LOG_LEVEL_WARNING, "updata result write_bulk:%s\n", hg_scanner_err_name(ret));
//return ret;
}
ret = io_->read_bulk(&result, &len);
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 != 3 && ret != SCANNER_ERR_TIMEOUT)
{
VLOG_MINI_1(LOG_LEVEL_WARNING, "updata result:%d\n", result.u32_Data);
if (result.u32_Data == 2)
{
return SCANNER_ERR_DEVICE_UPGRADE_SUCCESSFUL;
}
return SCANNER_ERR_DEVICE_UPGRADE_FAIL;
}
else
{
printf("升级中\r\n");
sw.reset();
}
sw.reset();
}
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<std::mutex> 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<std::mutex> 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<std::mutex> 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<std::mutex> 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<std::mutex> 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<std::mutex> 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<std::mutex> 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<std::mutex> 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;
}