code_device/hgdriver/hgdev/hg_scanner_302.cpp

1405 lines
91 KiB
C++
Raw Blame History

#include "hg_scanner_302.h"
#include "../wrapper/hg_log.h"
#include "filetools.h"
#if defined(WIN32) || defined(_WIN64)
#include "scanner_manager.h"
#endif
//302
static std::string jsontext1("{\"global\":{\"device_type\":\"G302\",\"option_count\":62},\"restore\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"advanced\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"title\":\"\\u57fa\\u672c\\u8bbe\\u7f6e\",\"type\":\"group\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"field\":\"Common\",\"pos\":0,\"visible\":true,\"unit\":\"None\"},\"is-multiout\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":[\"is-multiout==true\",\"mode==\\u9ed1\\u767d\"]},\"reverse-bw\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":[\"is-multiout==true\",\"mode==\\u9ed1\\u767d\"]},\"filter\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"visible\":true,\"field\":\"Com");
static std::string jsontext2("mon\",\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":[\"is-multiout!=true\",\"mode!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-grid\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":[\"is-multiout!=true\",\"mode!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-err-extension\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\",\"B5\\u6a2a\\u5411\",\"B6\",\"B6\\u6a2a\\u5411\",\"\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\"]},\"is-custom-area\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\"]},\"blank-sensitivity\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":50,\"default\":50,\"size\":4,\"range\":{\"min\":1,\"max\":100,\"step\":1},\"depend_or\":[\"page==\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u901a\\u7528\\uff09\",\"==\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u53d1\\u7968\\u7eb8\\uff09\"]},\"fold-type\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":24,\"range\":[\"\\u5de6\\u53f3\\u5bf9\\u6298\",\"\\u4e0a\\u4e0b\\u5bf9\\u6298\",\"\\u81ea\\u52a8\\u5bf9\\u6298\"],\"depend_or\":[\"page==\\u5bf9\\u6298\"]},\"resolution\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":1,\"max\":600,\"step\":1}},\"is-exchange\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"title\":\"\\u4eae\\u5ea6\",\"type\":\"group\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"field\":\"Common\",\"pos\":0,\"visible\":true,\"unit\":\"None\"},\"is-custom-gamma\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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_and\":[\"is-custom-gamma==false\"]},\"contrast\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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_and\":[\"is-custom-gamma==false\"]},\"gamma\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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");
static std::string jsontext3("\":1.000000,\"size\":4,\"range\":{\"min\":0.010000,\"max\":5.000000,\"step\":0.499000},\"depend_and\":[\"is-custom-gamma==false\"]},\"grp-3\":{\"category\":\"base\",\"title\":\"\\u56fe\\u50cf\\u5904\\u7406\",\"type\":\"group\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"field\":\"Common\",\"pos\":0,\"visible\":true,\"unit\":\"None\"},\"is-anti-skew\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"advanced\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"advanced\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"advanced\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"advanced\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":5,\"max\":30,\"step\":1},\"depend_or\":[\"is-erase-black-frame==true\",\"paper==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"is-anti-skew==true\"]},\"is-dark-sample\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"title\":\"\\u9001\\u7eb8\\u65b9\\u5f0f\\u8bbe\\u7f6e\",\"type\":\"group\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"field\":\"Common\",\"pos\":0,\"visible\":true,\"unit\":\"None\"},\"scan-mode\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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}}");
//402
static std::string jsontext4("{\"global\":{\"device_type\":\"G402\",\"option_count\":62},\"restore\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"advanced\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"title\":\"\\u57fa\\u672c\\u8bbe\\u7f6e\",\"type\":\"group\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"field\":\"Common\",\"pos\":0,\"visible\":true,\"unit\":\"None\"},\"is-multiout\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":[\"is-multiout==true\",\"mode==\\u9ed1\\u767d\"]},\"reverse-bw\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":[\"is-multiout==true\",\"mode==\\u9ed1\\u767d\"]},\"filter\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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-re");
static std::string jsontext5("d\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":[\"is-multiout!=true\",\"mode!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-grid\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":[\"is-multiout!=true\",\"mode!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-err-extension\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\"]},\"is-custom-area\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u626b\\u63cf\\u9875\\u9762\",\"desc\":\"\\u8bbe\\u7f6e\\u9875\\u9762\\u626b\\u63cf\\u65b9\\u5f0f\",\"type\":\"string\",\"cur\":\"\\u53cc\\u9762\",\"default\":\"\\u53cc\\u9762\",\"size\":40,\"range\":[\"\\u5355\\u9762\",\"\\u53cc\\u9762\",\"\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u901a\\u7528\\uff09\",\"\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u53d1\\u7968\\u7eb8\\uff09\",\"\\u5bf9\\u6298\"]},\"blank-sensitivity\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":50,\"default\":50,\"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\"]},\"fold-type\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":200,\"range\":[\"\\u5de6\\u53f3\\u5bf9\\u6298\",\"\\u4e0a\\u4e0b\\u5bf9\\u6298\",\"\\u81ea\\u52a8\\u5bf9\\u6298\"],\"depend_or\":[\"page==\\u5bf9\\u6298\"]},\"resolution\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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}},\"is-exchange\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"title\":\"\\u4eae\\u5ea6\",\"type\":\"group\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"field\":\"Common\",\"pos\":0,\"visible\":true,\"unit\":\"None\"},\"is-custom-gamma\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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}},\"contrast\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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}},\"gamma\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u4f3d\\u9a6c\\u503c\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u50cf\\u4f3d\\u739b\\u503c\",\"");
static std::string jsontext6("type\":\"float\",\"cur\":1.000000,\"default\":1.000000,\"size\":4,\"range\":{\"min\":0.010000,\"max\":5.000000,\"step\":0.499000}},\"grp-3\":{\"category\":\"base\",\"title\":\"\\u56fe\\u50cf\\u5904\\u7406\",\"type\":\"group\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"field\":\"Common\",\"pos\":0,\"visible\":true,\"unit\":\"None\"},\"is-anti-skew\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"advanced\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"advanced\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"advanced\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"advanced\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":5,\"max\":30,\"step\":1},\"depend_or\":[\"is-erase-black-frame==true\",\"paper==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"is-anti-skew==true\"]},\"is-dark-sample\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"title\":\"\\u9001\\u7eb8\\u65b9\\u5f0f\\u8bbe\\u7f6e\",\"type\":\"group\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"field\":\"Common\",\"pos\":0,\"visible\":true,\"unit\":\"None\"},\"scan-mode\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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\":{\"category\":\"base\",\"readonly\":false,\"affect-img\":false,\"hwonly\":false,\"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 settings302
{
// device status to scanner_err
scanner_err device_status_to_hg_err(setting3399::HGEIntInfo* ds)
{
scanner_err code = SCANNER_ERR_OK;
if (ds->From == setting3399::HGType::FPGA)
code = SCANNER_ERR_OK;
else if (ds->From == setting3399::HGType::MtBoard)
{
switch (ds->Code)
{
case 0x00002:
code = SCANNER_ERR_DEVICE_NO_PAPER;
break;
case 0x00004:
code = SCANNER_ERR_DEVICE_COVER_OPENNED;
break;
case 0x00008:
code = SCANNER_ERR_DEVICE_FEEDING_PAPER;
break;
case 0x00010:
code = SCANNER_ERR_DEVICE_PAPER_JAMMED;
break;
case 0x00020:
code = SCANNER_ERR_DEVICE_DOUBLE_FEEDING;
break;
case 0x00040:
code = SCANNER_ERR_DEVICE_STAPLE_ON;
break;
case 0x00080:
code = SCANNER_ERR_DEVICE_PAPER_SKEW;
break;
case 0x10000:
case 0x80000:
code = SCANNER_ERR_TIMEOUT;
break;
case 0x20000:
code = SCANNER_ERR_DEVICE_SIZE_CHECK;
break;
default:
break;
}
}
else if (ds->From == setting3399::HGType::IMG)
{
if (ds->Code == 1)
code = SCANNER_ERR_DEVICE_DOGEAR;
else if (ds->Code == 2)
code = SCANNER_ERR_DEVICE_SIZE_CHECK;
}
else if (ds->From == setting3399::HGType::V4L2)
{
if (ds->Code == 0)
code = SCANNER_ERR_DEVICE_SCANN_ERROR;
else if (ds->Code == 1)
code = SCANNER_ERR_DEVICE_NO_IMAGE;
}
else if (ds->From == setting3399::HGType::STOPSCAN)
code = SCANNER_ERR_DEVICE_STOPPED;
return code;
}
// resolution
static struct
{
float resolution;
int dev_value;
}resolution_map[] =
{
{100.0f, 1},
{150.0f, 1},
{200.0f, 1},
{240.0f, 1},
{300.0f, 0},
{600.0f, 1} //临时版本<E78988><E69CAC>? 原来<E58E9F><E69DA5>?
};
bool is_equal(float l, float r)
{
return fabs(l - r) < .000001f;
}
int match_best_resolution(int resolution, bool* exact)
{
int rsl = resolution,
ind = 0;
bool good = true, *r = exact ? exact : &good;
if (rsl <= resolution_map[0].resolution)
{
ind = 0;
}
else if (rsl >= resolution_map[ARRAY_SIZE(resolution_map) - 1].resolution)
{
ind = ARRAY_SIZE(resolution_map) - 1;
}
else
{
for (int i = 1; i < ARRAY_SIZE(resolution_map); ++i)
{
if (is_equal(rsl, resolution_map[i].resolution))
{
ind = i;
break;
}
if (rsl < resolution_map[i].resolution)
{
float dif_l = rsl - resolution_map[i - 1].resolution,
dif_r = resolution_map[i].resolution - rsl;
if (dif_l > dif_r)
ind = i;
else
ind = i - 1;
break;
}
}
}
*r = is_equal(rsl, resolution_map[ind].resolution);
return ind;
}
// paper
//int match_best_paper(int& paper, bool* exact, TwSS* type)
//{
// int ind = 0;
// bool good = true, * r = exact ? exact : &good;
// for (int i = 0; i < ARRAY_SIZE(paper_map_3399); ++i)
// {
// if (paper == paper_map_3399[i].paper)
// {
// ind = i;
// break;
// }
// }
// if (paper == paper_map_3399[ind].paper)
// *r = true;
// else
// *r = false;
// VLOG_MINI_3(LOG_LEVEL_DEBUG_INFO, "Paper '%s' index = %d, device value = %d\n", paper_string(paper).c_str(), ind, paper_map_3399[ind].dev_value);
// paper = paper_map_3399[ind].paper;
// if (type)
// *type = paper_map_3399[ind].type;
// return ind;
//}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// class ...
hg_scanner_302::hg_scanner_302(const char* dev_name, int pid, usb_io* io) : hg_scanner(G20039Serial, dev_name, io, pid)
, rewrite_conf_(false), reset_(false)
{
//pid_ = pid;
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "hg_scanner_302(%s) constructing ...\n", hg_log::format_ptr(this).c_str());
dev_conf_.value = 0;
#ifndef MAPPING_FUNCTION_IN_BASE
init_setting_map(setting_map_, ARRAY_SIZE(setting_map_));
#endif
if (init_settings(pid_))
{
if (pid_ == 0x302)
init_settings((jsontext1 + jsontext2 + jsontext3).c_str());
else
init_settings((jsontext4 + jsontext5 + jsontext6).c_str());
}
//writedown_device_configuration(); // initialize the hardware settings
init_version();
}
hg_scanner_302::~hg_scanner_302()
{
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "hg_scanner_302(%s) destroyed.\n", hg_log::format_ptr(this).c_str());
}
int hg_scanner_302::read_register(int addr, int* val)
{
std::this_thread::sleep_for(std::chrono::milliseconds(50));
int l = sizeof(*val),
ret = io_->control_io(0x0c0, USB_REQ_GET_DEV_REGS, addr, 0, val, &l);
if (ret)
status_ = ret;
return ret;
}
int hg_scanner_302::write_register(int addr, int val)
{
std::this_thread::sleep_for(std::chrono::milliseconds(50));
int l = sizeof(val),
ret = io_->control_io(0x040, USB_REQ_SET_DEV_REGS, addr, 0, &val, &l);
if (ret)
status_ = ret;
return ret;
}
int hg_scanner_302::write_command(int cmd)
{
return write_register(0, cmd);
}
std::string hg_scanner_302::control_fetch(int addr, int val, int size)
{
int l = sizeof(val),
ret = 0;
std::string data("");
ret = write_register(addr, val);
if (ret == SCANNER_ERR_OK)
{
l = size + 1;
data.resize(size + 2);
bzero(&data[0], size + 2);
ret = io_->read_bulk(&data[0], &l);
if (ret == SCANNER_ERR_OK)
{
VLOG_MINI_3(LOG_LEVEL_DEBUG_INFO, "control_fetch(%d, %d) - read_bulk %d bytes\n", addr, val, l);
}
else
{
VLOG_MINI_3(LOG_LEVEL_DEBUG_INFO, "control_fetch(%d, %d) - read_bulk = %s\n", addr, val, hg_scanner_err_name(ret));
data.clear();
}
}
else
VLOG_MINI_3(LOG_LEVEL_DEBUG_INFO, "control_fetch(%d, %d) = %s\n", addr, val, hg_scanner_err_name(ret));
return data;
}
std::string hg_scanner_302::get_fpga(void)
{
std::lock_guard<std::mutex> lock(io_lock_);
int val = 0,
ret = read_register(setting3399::SR_GET_MBVERSION_LENGHT, &val);
std::string fpga("");
if (ret == SCANNER_ERR_OK)
{
fpga.resize(val + 2);
bzero(&fpga[0], val + 2);
return control_fetch(setting3399::SR_GET_MBVERSION, 0, val);
}
return fpga;
}
int hg_scanner_302::clr_roller_num(void)
{
std::lock_guard<std::mutex> lock(io_lock_);
int val = 0,
ret = read_register(setting3399::SR_CLR_ROLLER_NUM, &val);
if (ret == SCANNER_ERR_OK)
return val;
else
{
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "clr_roller_num = %s\n", hg_scanner_err_name(ret));
return -1;
}
}
int hg_scanner_302::get_sleep_time(void)
{
std::lock_guard<std::mutex> lock(io_lock_);
int val = 0,
ret = read_register(setting3399::SR_GET_SLEEPTIME, &val);
if (ret == SCANNER_ERR_OK)
return val;
else
{
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "get_sleep_time = %s\n", hg_scanner_err_name(ret));
return -1;
}
}
int hg_scanner_302::get_scan_mode(void)
{
std::lock_guard<std::mutex> lock(io_lock_);
int val = 0,
ret = read_register(setting3399::SR_OS, &val);
if (ret)
{
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "get scan mode error: %s\n", hg_scanner_err_name(ret));
status_ = ret;
return -1;
}
else
return val;
}
int hg_scanner_302::get_status(void)
{
std::lock_guard<std::mutex> lock(io_lock_);
int val = 0,
ret = read_register(setting3399::SR_STATUS, &val);
if (ret)
{
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "get status error: %s\n", hg_scanner_err_name(ret));
status_ = ret;
return -1;
}
else
return val;
}
bool hg_scanner_302::is_dev_tx(void)
{
std::lock_guard<std::mutex> lock(io_lock_);
int val = 0,
ret = read_register(setting3399::SR_STATUS, &val);
if (ret)
{
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "is_dev_tx() error: %s\n", hg_scanner_err_name(ret));
status_ = ret;
return false;
}
else
return val;
}
bool hg_scanner_302::is_dev_image_process_done(void)
{
std::lock_guard<std::mutex> lock(io_lock_);
int val = 0,
ret = read_register(setting3399::SR_GET_IMAGEPROCESSDONE, &val);
if (ret)
{
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "is_dev_image_process_done() error: %s\n", hg_scanner_err_name(ret));
status_ = ret;
return true;
}
else
return val;
}
bool hg_scanner_302::is_dev_image_keep_last_paper(void)
{
std::lock_guard<std::mutex> lock(io_lock_);
int val = 0,
ret = read_register(setting3399::SR_GET_KEEP_LAST_PAPER, &val);
if (ret)
{
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "is_dev_image_keep_last_paper() error: %s\n", hg_scanner_err_name(ret));
status_ = ret;
return true;
}
else
return val;
}
int hg_scanner_302::get_scanned_count(void)
{
std::lock_guard<std::mutex> lock(io_lock_);
int val = 0,
ret = read_register(setting3399::SR_GET_SCANN_NUM, &val);
if (ret == SCANNER_ERR_OK)
return val;
else
{
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "get_scanned_count = %s\n", hg_scanner_err_name(ret));
return -1;
}
}
int hg_scanner_302::get_image_count(void)
{
std::lock_guard<std::mutex> lock(io_lock_);
int val = 0,
ret = read_register(setting3399::SR_IM_COUNT, &val);
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "get_image_count() = %d, error: %s\n", val, hg_scanner_err_name(ret));
if (ret == SCANNER_ERR_OK)
return val;
else
return -1;
}
int hg_scanner_302::get_front_data_size(void)
{
std::lock_guard<std::mutex> lock(io_lock_);
int val = 0,
ret = read_register(setting3399::SR_IM_FRONT_SIZE, &val);
if (ret == SCANNER_ERR_OK)
return val;
else
{
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "get_front_data_size = %s\n", hg_scanner_err_name(ret));
return -1;
}
}
void hg_scanner_302::init_version(void)
{
std::string fv(get_firmware_version()),
sn(get_serial_num());
if (fv.empty() || sn.empty())
return;
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "Firmware version: %s\n", fv.c_str());
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "Serial number: %s\n", sn.c_str());
//VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, " HG3399 IP: %s\n", get_ip().c_str());
if (fv.length() >= 10 && (fv[5] > 'A' || atoi(fv.substr(6, 4).c_str()) >= 1209))
{
is_kernelsnap_239_211209_ = atoi(get_fpga().c_str()) >= 35211210;
}
else
is_kernelsnap_239_211209_ = false;
}
int hg_scanner_302::get_device_sleep_stautus(void)
{
std::lock_guard<std::mutex> lock(io_lock_);
int ret =read_register(setting3399::SR_GET_SLEEP_STAUTUS,0);
return ret;
}
int hg_scanner_302::get_device_paperon_stautus(void)
{
std::lock_guard<std::mutex> lock(io_lock_);
int ret =read_register(setting3399::SR_GET_PAPERON,0);
return ret;
}
int hg_scanner_302::writedown_device_configuration(bool type,setting_hardware::HGSCANCONF_3399 *dev_conf)
{
int ret = SCANNER_ERR_OK;
if (!type)
return ret;
if (!dev_conf)
{
dev_conf_.params_3399.is_textcorrect = !keep_watermark_;
dev_conf = &dev_conf_;
}
if (is_multiout)
{
dev_conf->params_3399.color = image_prc_param_.bits.multi_out == MULTI_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)
{
dev_conf->params_3399.color = 1;
}
if (image_prc_param_.bits.paper == PAPER_AUTO_MATCH
|| image_prc_param_.bits.paper == PAPER_MAX_SIZE
|| image_prc_param_.bits.paper == PAPER_MAX_SIZE_CLIP
|| image_prc_param_.bits.paper == PAPER_TRIGEMINY
|| image_prc_param_.bits.paper == PAPER_16K
|| image_prc_param_.bits.paper == PAPER_8K
|| image_prc_param_.bits.paper == PAPER_16K_LATERAL
)
{
dev_conf->params_3399.enable_sizecheck = false;
}
{
std::lock_guard<std::mutex> lock(io_lock_);
ret = write_register(setting3399::SR_CONFIG_SCAN_PARAM, dev_conf->value);
}
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "Writedown scanner configuration(0x%x) = %s\n", dev_conf->value, hg_scanner_err_name(ret));
return ret;
}
int hg_scanner_302::writedown_image_configuration(void)
{
int ret = SCANNER_ERR_OK;
SCANCONF ic;
int len = sizeof(ic);
bzero(&ic, len);
if (image_prc_param_.bits.text_direction != TEXT_DIRECTION_AUTO)
ic.imageRotateDegree = (float)image_prc_param_.bits.text_direction;
else
ic.imageRotateDegree = 0;
ic.en_sizecheck = dev_conf_.params_3399.enable_sizecheck;
ic.hardwarecaps.en_skrewdetect = dev_conf_.params_3399.screw_detect_enable;
ic.hardwarecaps.en_doublefeed = dev_conf_.params_3399.ultrasonic_enable;
ic.hardwarecaps.en_stapledetect = dev_conf_.params_3399.staple_enbale;
ic.hardwarecaps.skrewdetectlevel = dev_conf_.params_3399.screw_detect_level;
if (test_1_paper_)
{
LOG_INFO(LOG_LEVEL_DEBUG_INFO, "scanning mode: testing ONE paper ...\n");
ic.scannum = /*ic.is_duplex ? 2 :*/ 1;
}
else
{
if (scan_count_ == -1)
ic.scannum = -1;
else
ic.scannum = (ic.is_duplex ? scan_count_ * 2 : scan_count_);
}
ic.contrast = contrast_;//(contrast_ - 4) * 333.0;
ic.brightness = bright_;// (bright_ - 128)* (2000.0 / 254.0);
image_configuration(ic);
{
//std::lock_guard<std::mutex> lock(io_lock_);
//ret = io_->write_bulk(&ic, &len);
//this_thread::sleep_for(chrono::milliseconds(500));
//io_->set_timeout(2000);//必要延时
}
return ret;
}
int hg_scanner_302::pop_first_image(void)
{
std::lock_guard<std::mutex> lock(io_lock_);
int ret = write_register(setting3399::SR_IM_POP, 1);
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "popup first image = %s\n", hg_scanner_err_name(ret));
return ret;
}
int hg_scanner_302::read_one_image_from_usb(SANE_Image_Statu statu)
{
int r = 0,
total = get_front_data_size(),
off = 0,
ret = SCANNER_ERR_OK;
bool popimg = false;
VLOG_MINI_1(LOG_LEVEL_ALL, "New image size: %u\n", total);
if (!waiting_for_memory_enough(total))
{
status_ = SCANNER_ERR_INSUFFICIENT_MEMORY;
return status_;
}
//if (user_cancel_)
//return SCANNER_ERR_USER_CANCELED;
if (total == -1)
ret = status_;
else
{
std::lock_guard<std::mutex> lock(io_lock_);
std::shared_ptr<tiny_buffer> buf(aquire_memory(total));
if (!buf.get())
return SCANNER_ERR_INSUFFICIENT_MEMORY;
// write reading command
buf->set_image_statu(statu);
ret = write_register(setting3399::SR_IM_TX, 1);
if (ret == SCANNER_ERR_OK)
{
std::this_thread::sleep_for(std::chrono::milliseconds(10));
r = total;
{
void* buff = buf->data(off, (unsigned int*)&r);
ret = SCANNER_ERR_INSUFFICIENT_MEMORY;
while (buff)
{
ret = io_->read_bulk(buff, &r);
if (ret != SCANNER_ERR_OK)
break;
off += r;
if (off >= total)
break;
r = total - off;
buff = buf->data(off, (unsigned int*)&r);
}
}
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "Read image from USB = %s\n", hg_scanner_err_name(ret));
if (ret == SCANNER_ERR_OK)
{
//{
// char f[128] = { 0 };
// sprintf(f, "/tmp/usb_%02d.jpg", usb_img_index_);
// buf->to_file(f);
//}
ret = save_usb_data(buf);
if (ret == SCANNER_ERR_OK)
{
popimg = true;
}
else
{
VLOG_MINI_1(LOG_LEVEL_FATAL, "save usb data failed: %s\n", hg_scanner_err_name(ret));
}
}
else
{
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "Read image data from USB err: %s\n", hg_scanner_err_name(ret));
}
}
else
{
VLOG_MINI_1(LOG_LEVEL_FATAL, "write command SR_IM_TX failed: %s\n", hg_scanner_err_name(ret));
}
}
if(popimg)
pop_first_image();
return ret;
}
int hg_scanner_302::discard_all_images(void)
{
char buf[32];
setting3399::HGEIntInfo* info = (setting3399::HGEIntInfo*)buf;
int size = sizeof(buf),
oto = 0,
pre_img = 0,
pre_int = 0,
ret = SCANNER_ERR_OK;
{
std::lock_guard<std::mutex> lock(io_lock_);
oto = io_->get_timeout();
io_->set_timeout(100);
ret = io_->read_interrupt(buf, &size);
}
while (ret == SCANNER_ERR_OK && size)
{
pre_int++;
if (info->From == setting3399::IMG)
{
while (get_image_count() > 0)
{
pop_first_image();
pre_img++;
}
}
size = sizeof(buf);
{
std::lock_guard<std::mutex> lock(io_lock_);
ret = io_->read_interrupt(buf, &size);
}
}
{
std::lock_guard<std::mutex> lock(io_lock_);
io_->set_timeout(oto);
}
if (pre_int)
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "prev-connection has left %d interrupt packet(s) && %d image(s).\n", pre_int, pre_img);
return 0;
}
int hg_scanner_302::get_roller_life(void)
{
return pid_ == 302 ? 150000 : 200000;
}
int hg_scanner_302::on_color_mode_changed(int& color_mode)
{
dev_conf_.params_3399.color = (color_mode == COLOR_MODE_BLACK_WHITE || color_mode == COLOR_MODE_256_GRAY) ? 0 : 1;
return SCANNER_ERR_OK;
/*int ret = SCANNER_ERR_OK;
if ((((color_mode == COLOR_MODE_24_BITS || color_mode == COLOR_MODE_AUTO_MATCH) && !dev_conf_.params_3399.color) ||
((color_mode != COLOR_MODE_24_BITS && color_mode != COLOR_MODE_AUTO_MATCH) && dev_conf_.params_3399.color)) && color_mode != -1)
{
dev_conf_.params_3399.color ^= 1;
ret = writedown_device_configuration();
if (ret)
dev_conf_.params_3399.color ^= 1;
}
if (color_mode == COLOR_MODE_AUTO_MATCH)
{
dev_conf_.params_3399.color = 1;
}
return ret;*/
}
int hg_scanner_302::on_paper_changed(int& paper)
{
bool exact = true;
int ind = hgpaper_to_devspaper(paper_map_3399, ARRAY_SIZE(paper_map_3399), paper, &exact, &paper_size_),
ret = exact ? SCANNER_ERR_OK : SCANNER_ERR_NOT_EXACT;
if (dev_conf_.params_3399.paper != paper_map_3399[ind].dev_value)
{
int old = dev_conf_.params_3399.paper;
dev_conf_.params_3399.paper = paper_map_3399[ind].dev_value;
ret = writedown_device_configuration();
if (ret)
{
dev_conf_.params_3399.paper = old;
for (int i = 0; i < ARRAY_SIZE(paper_map_3399); ++i)
{
if (paper_map_3399[i].dev_value == old)
{
paper = paper_map_3399[i].paper;
break;
}
}
}
else if (!exact)
ret = SCANNER_ERR_NOT_EXACT;
}
return ret;
}
int hg_scanner_302::on_paper_check_changed(bool& check)
{
int ret = SCANNER_ERR_OK;
if (dev_conf_.params_3399.enable_sizecheck ^ check)
{
dev_conf_.params_3399.enable_sizecheck = check;
ret = writedown_device_configuration();
if (ret)
{
dev_conf_.params_3399.enable_sizecheck = !check;
check = dev_conf_.params_3399.enable_sizecheck;
}
}
if (image_prc_param_.bits.paper == PAPER_AUTO_MATCH
||image_prc_param_.bits.paper == PAPER_MAX_SIZE
||image_prc_param_.bits.paper == PAPER_MAX_SIZE_CLIP
||image_prc_param_.bits.paper == PAPER_TRIGEMINY
||image_prc_param_.bits.paper == PAPER_16K
||image_prc_param_.bits.paper == PAPER_8K
||image_prc_param_.bits.paper == PAPER_16K_LATERAL
)
{
setting_hardware::HGSCANCONF_3399 *d = &dev_conf_;
d->params_3399.enable_sizecheck = false;
ret = writedown_device_configuration(d);
}
return ret;
}
int hg_scanner_302::on_resolution_changed(int& dpi)
{
dev_conf_.params_3399.dpi = 1; //dpi 华凌cis和敦南cis 默认<E9BB98><E8AEA4>?无需改变
int ret = writedown_device_configuration();
return ret;
}
int hg_scanner_302::on_ultrasonic_check_changed(bool& check)
{
int ret = SCANNER_ERR_OK;
if (dev_conf_.params_3399.ultrasonic_enable ^ check)
{
dev_conf_.params_3399.ultrasonic_enable = check;
ret = writedown_device_configuration();
if (ret)
{
dev_conf_.params_3399.ultrasonic_enable = !check;
check = dev_conf_.params_3399.ultrasonic_enable;
}
}
return ret;
}
int hg_scanner_302::on_staple_check_changed(bool& check)
{
int ret = SCANNER_ERR_OK;
if (dev_conf_.params_3399.staple_enbale ^ check)
{
dev_conf_.params_3399.staple_enbale = check;
ret = writedown_device_configuration();
if (ret)
{
dev_conf_.params_3399.staple_enbale = !check;
check = dev_conf_.params_3399.staple_enbale;
}
}
return ret;
}
int hg_scanner_302::on_skew_check_changed(bool& check)
{
int ret = SCANNER_ERR_OK;
if (dev_conf_.params_3399.screw_detect_enable ^ check)
{
dev_conf_.params_3399.screw_detect_enable = check;
ret = writedown_device_configuration();
if (ret)
{
dev_conf_.params_3399.screw_detect_enable = !check;
check = dev_conf_.params_3399.screw_detect_enable;
}
}
return ret;
}
int hg_scanner_302::on_skew_check_level_changed(int& check)
{
int ret = SCANNER_ERR_OK,
val = check,
old = dev_conf_.params_3399.screw_detect_level;
setting_hardware::HGSCANCONF_3399 cf;
cf.params_3399.screw_detect_level = -1;
if (val < 0)
{
val = 0;
ret = SCANNER_ERR_NOT_EXACT;
}
else if (val > cf.params_3399.screw_detect_level)
{
val = cf.params_3399.screw_detect_level;
ret = SCANNER_ERR_NOT_EXACT;
}
if (val != dev_conf_.params_3399.screw_detect_level)
{
dev_conf_.params_3399.screw_detect_level = val;
ret = writedown_device_configuration();
if (ret)
check = dev_conf_.params_3399.screw_detect_level = old;
}
if (ret == SCANNER_ERR_OK && val != check)
{
check = val;
ret = SCANNER_ERR_NOT_EXACT;
}
return ret;
}
int hg_scanner_302::on_get_feedmode(int &feedmode)//获取分纸强度
{
int ret = SCANNER_ERR_OK,
val = 0;
ret = read_register(setting3399::SR_GET_FEEDMODE,&feedmode);
return ret;
}
int hg_scanner_302::on_set_feedmode(int feedmode)//设置分纸强度
{
int ret = SCANNER_ERR_OK,
val = 0;
ret = write_register(setting3399::SR_SET_FEEDMODE,feedmode);
return ret;
}
int hg_scanner_302::on_pic_type(bool& pic)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner_302::on_pick_paper(bool autostrength)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner_302::on_pick_paper_threshold(double threshold)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner_302::on_is_auto_paper(bool isautopaper)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner_302::on_cis_get_image(bool isautopaper)
{
is_cis_image = isautopaper;
dev_conf_.params_3399.pc_correct = isautopaper;
return writedown_device_configuration();
}
void hg_scanner_302::on_device_reconnected(void)
{
int ret = writedown_device_configuration();
init_version();
rewrite_conf_ = ret != SCANNER_ERR_OK;
if (reset_)
{
reset_ = false;
start();
}
}
int hg_scanner_302::on_scanner_closing(bool force)
{
return SCANNER_ERR_OK;
}
void hg_scanner_302::thread_handle_usb_read(void)
{
char buf[32] = { 0 };
setting3399::HGEIntInfo* info = (setting3399::HGEIntInfo*)buf;
int size = sizeof(buf),
ret = SCANNER_ERR_OK,
to_cnt = 0,
count = 0;
bool go = true;
while (run_ && go)
{
size = sizeof(buf);
memset(buf, 0, size);
{
std::lock_guard<std::mutex> lock(io_lock_);
ret = io_->read_interrupt(buf, &size);
}
if (ret != SCANNER_ERR_OK && ret != SCANNER_ERR_TIMEOUT)
{
VLOG_MINI_5(LOG_LEVEL_DEBUG_INFO, "read-INT = %s: From(%d), Code(%d), Index(%d), size = %d\n", hg_scanner_err_name(ret),
info->From, info->Code, info->Img_Index, size);
}
if (ret != SCANNER_ERR_OK)
{
if (ret == SCANNER_ERR_TIMEOUT)
{
if (to_cnt++ < 30)
{
std::this_thread::sleep_for(std::chrono::milliseconds(500));
//int statu = get_status();
//if ((statu & 0x03) == 0)
//{
// VLOG_MINI_1(LOG_LEVEL_FATAL, "USB thread over with status: 0x%x\n", statu);
// status_ = SCANNER_ERR_OK;
// break;
//}
continue;
}
}
status_ = ret;
break;
}
to_cnt = 0;
if (size == sizeof(buf))
{
ret = settings302::device_status_to_hg_err(info);
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "status from interrupt point is '%s'\n", hg_scanner_err_name(status_));
if (ret != SCANNER_ERR_OK && ret != SCANNER_ERR_TIMEOUT && ret != SCANNER_ERR_DEVICE_STOPPED)
{
//if (!is_dev_image_process_done())
{
int st = ret, count = 0, statu = last_usb_image_statu(st);
//while (!is_dev_image_process_done())
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
while ((count = get_image_count()) > 0)
{
int s = SANE_Image_Statu_OK;
if (count <= 2)
{
if (image_prc_param_.bits.page == PAGE_SINGLE)
s = count == 1 ? statu : s;
else
s = statu;
}
ret = read_one_image_from_usb((SANE_Image_Statu)s);
count++;
if (ret != SCANNER_ERR_OK
&& ret != SCANNER_ERR_CREATE_FILE_FAILED
&& ret != SCANNER_ERR_WRITE_FILE_FAILED)
break;
}
status_ = st;
}
VLOG_MINI_1(LOG_LEVEL_WARNING, "\346\211\253\346\217\217\345\244\261\350\264\245, read interrupt\350\277\224\345\233\236\347\212\266\346\200\201\344\270\272\357\274\232%s\n", hg_scanner_err_description(status_));
break;
}
switch (info->From)
{
case setting3399::IMG:
if (get_image_count() > 0)
{
read_one_image_from_usb();
}
else
{
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "receive IMG event but no image count(%d)!", get_image_count());
}
break;
case setting3399::V4L2:
VLOG_MINI_1(LOG_LEVEL_FATAL, "V4L2 error: %d\n", info->Code);
{
bool cancel = user_cancel_;
stop();
user_cancel_ = cancel;
go = false;
}
break;
case setting3399::STOPSCAN:
go = false;
LOG_INFO(LOG_LEVEL_ALL, "Received STOPSCAN event ...\n");
std::this_thread::sleep_for(std::chrono::milliseconds(500));
while (get_image_count() > 0) // lost IMG message, check image count to receive rest images (BUG-228)...
{
ret = read_one_image_from_usb();
if (ret != SCANNER_ERR_OK)
{
status_ = ret;
break;
}
}
break;
default:
break;
}
if (!go)
break;
}
else
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "read %d bytes, sizeof(buf) = %d\n", size, sizeof(buf));
this_thread::sleep_for(chrono::milliseconds(10));
}
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "USB thread exit with code: %s, status = %s\n", hg_scanner_err_name(ret), hg_scanner_err_name(status_));
}
int hg_scanner_302::start(void)
{
bool handled = false;
int ret = try_third_app_handle_start(handled),
val = 0;
// for third-sane-app invoking, added on 2022-05-19
if (handled)
return ret;
user_cancel_ = false;
split3399_ = 0;
cb_mem_ = true;
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "scanner status: 0x%x\n", get_status());
//notify_ui_working_status(STATU_DESC_PREPARE_START);
reset();
//read_register(setting3399::SR_GET_PAPERON, &val);
//if (!val)
//{
// VLOG_MINI_1(LOG_LEVEL_WARNING, "start failed: %s\n", hg_scanner_err_name(SCANNER_ERR_DEVICE_NO_PAPER));
// return SCANNER_ERR_DEVICE_NO_PAPER;
//}
//notify_ui_working_status(STATU_DESC_REWRITE_CONFIGURATION);
ret = writedown_device_configuration(true);
if (ret == SCANNER_ERR_OK)
writedown_image_configuration();
else
{
status_ = ret;
return ret;
}
val = 0;
{
std::lock_guard<std::mutex> lock(io_lock_);
ret = read_register(/*SR_GET_ANDROID_STATE*/0x1001, &val);
}
while (val)
{
if (val == 1)
ret = status_ = SCANNER_ERR_DEVICE_COVER_OPENNED;
else if (val == 2)
ret = status_ = SCANNER_ERR_DEVICE_PAPER_JAMMED;
else if (val == 3)
ret = status_ = SCANNER_ERR_DEVICE_NO_PAPER;
else if (val == 5)
ret = status_ = SCANNER_ERR_DEVICE_ISLOCK;
else
{
ret = status_ = SCANNER_ERR_DEVICE_UNKNOWN_STATUS;
VLOG_MINI_2(LOG_LEVEL_WARNING, "The device is abnormal(%d) and can not be scanned : %s\n", val, hg_scanner_err_name(ret));
//break;
}
VLOG_MINI_2(LOG_LEVEL_WARNING, "failed on SR_GET_ANDROID_STATE(%d) result: %s\n", val, hg_scanner_err_name(ret));
return ret;
}
int count = scan_count_;
if (test_1_paper_)
count = 1;
{
std::lock_guard<std::mutex> lock(io_lock_);
write_register(0x1000, count);
ret = write_command(setting3399::SC_START);
}
VLOG_MINI_1(LOG_LEVEL_WARNING, "start result: %s\n", hg_scanner_err_name(ret));
if (ret == SCANNER_ERR_OK)
{
wait_usb_.notify();
this_thread::sleep_for(chrono::milliseconds(100));
ret = try_third_app_after_start(ret);
}
else
{
status_ = ret;
VLOG_MINI_3(LOG_LEVEL_WARNING, "(%s)[Thread %s]Send start command = %s\n", hg_log::current_time().c_str(), hg_log::format_current_thread_id().c_str(), hg_scanner_err_name(ret));
}
return ret;
}
int hg_scanner_302::stop(void)
{
std::lock_guard<std::mutex> lock(io_lock_);
int ret = SCANNER_ERR_OK;
user_cancel_ = true;
ret = write_command(setting3399::SC_STOP);
// io_->set_timeout(500);
//final_imgs_.clear();
return status_;
}
int hg_scanner_302::reset(void)
{
final_imgs_.clear();
discard_all_images();
return status_;
}
int hg_scanner_302::device_io_control(unsigned long code, void* data, unsigned* len)
{
int ret = SCANNER_ERR_OUT_OF_RANGE;
if (HG_CONTROL_CODE_OPTION_ENABLE == code)
{
OPTEN* opten = (OPTEN*)data;
ret = SCANNER_ERR_OK;
if (opten->name == SANE_STD_OPT_NAME_ANTI_SKEW && !opten->enabled) // for BUG-20 modified by Gongbing on 2022-03-12
{
bool enable = true;
long l = sizeof(enable);
setting_automatic_skew(&enable, &l);
}
}
else if (IO_CTRL_CODE_TEST_SINGLE == code)
{
test_1_paper_ = true;
ret = start();
}
else
ret = hg_scanner::device_io_control(code, data, len);
return ret;
}
std::string hg_scanner_302::get_firmware_version(void)
{
std::lock_guard<std::mutex> lock(io_lock_);
return control_fetch(setting3399::SR_GET_FWVERSION, 0, 512);
}
std::string hg_scanner_302::get_serial_num(void)
{
std::lock_guard<std::mutex> lock(io_lock_);
return control_fetch(setting3399::SR_GET_SERIALNUM, 0, 512);
}
std::string hg_scanner_302::get_ip(void)
{
std::lock_guard<std::mutex> lock(io_lock_);
return control_fetch(setting3399::SR_GET_IPADDR, 0, 512);
}
int hg_scanner_302::set_clear_roller_num(void)
{
//std::lock_guard<std::mutex> lock(io_lock_);
//int val = 0,
// ret = read_register(setting3399::SR_CLR_ROLLER_NUM, &val);
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner_302::set_clear_history_num(void)
{
std::lock_guard<std::mutex> lock(io_lock_);
int val = 0,
ret = read_register(setting3399::SR_CLR_SCANN_NUM, &val);
return ret;
}
int hg_scanner_302::set_serial_num(string str)
{
std::lock_guard<std::mutex> lock(io_lock_);
int len = str.size(),
ret = write_register(setting3399::SR_SET_SERIALNUM, len);
if (ret == SCANNER_ERR_OK)
{
ret = io_->write_bulk(&str[0], &len);
}
return ret;
}
int hg_scanner_302::set_vid_pid(int data)
{
std::lock_guard<std::mutex> lock(io_lock_);
return write_register(setting3399::SR_SET_USBVIDPID, data);
}
int hg_scanner_302::get_vid_pid(int& data)
{
std::lock_guard<std::mutex> lock(io_lock_);
return read_register(setting3399::SR_GET_USBVIDPID, &data);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int hg_scanner_302::set_leaflet_scan(void)
{
int ret = SCANNER_ERR_OK;
test_1_paper_ = true;
ret = start();
return ret;
}
int hg_scanner_302::get_device_code(void)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner_302::get_sleep_time(int& data)
{
std::lock_guard<std::mutex> lock(io_lock_);
int val = 0;
int ret = read_register(setting3399::SR_GET_SLEEPTIME, &val);
if (ret == SCANNER_ERR_OK)
{
save_sleeptime_type_ = true;
data = val;
}
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "get_sleep_time = %d with %s\n", data, hg_scanner_err_name(ret));
return ret;
}
int hg_scanner_302::set_sleep_time(int setsleepime)
{
std::lock_guard<std::mutex> lock(io_lock_);
int ret = write_register(setting3399::SR_SET_SLEEPTIME, setsleepime);
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "set sleep time to %d = %s\n", setsleepime, hg_scanner_err_name(ret));
return ret;
}
int hg_scanner_302::get_scanner_paperon(SANE_Bool& type)
{
std::lock_guard<std::mutex> lock(io_lock_);
int val = 0,
ret = read_register(setting3399::SR_GET_PAPERON, &val);
if (ret == SCANNER_ERR_OK)
{
type = val == 0 ? false : true;;
}
return ret;
}
int hg_scanner_302::get_scan_is_sleep(SANE_Bool& type)
{
std::lock_guard<std::mutex> lock(io_lock_);
int ret = 0, val;
ret = read_register(setting3399::SR_GET_SLEEP_STAUTUS, &val); //0休眠 1唤醒状<E98692><E78AB6>?
if (ret == SCANNER_ERR_OK)
{
type = val == 1 ? true : false;
}
return ret;
}
int hg_scanner_302::get_device_log(string &log)
{
std::lock_guard<std::mutex> lock(io_lock_);
int ret = SCANNER_ERR_OK;
int len = log.size();
ret = write_register(setting3399::SR_SET_JSON_PATH, len);
if (ret == SCANNER_ERR_OK)
ret = io_->write_bulk(&log[0],&len);
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "log path:%s ret:%s\n", log.c_str(),hg_scanner_err_name(ret));
return ret;
}
int hg_scanner_302::set_devreboot(int data)
{
std::lock_guard<std::mutex> lock(io_lock_);
int val = 0,
ret = write_register(setting3399::SR_REBOOT, val);
if (ret != SCANNER_ERR_OK)
return ret;
}
int hg_scanner_302::set_devshtudown()
{
std::lock_guard<std::mutex> lock(io_lock_);
int val = 0,
ret = write_register(setting3399::SR_POWEROFF, val);
if (ret != SCANNER_ERR_OK)
return ret;
}
int hg_scanner_302::set_scan_islock(SANE_Bool type)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner_302::get_scan_islock(SANE_Bool& type)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner_302::set_scan_lock_check_val(string str)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner_302::set_firmware_upgrade(std::string str)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner_302::set_clean_paper_road()
{
std::lock_guard<std::mutex> lock(io_lock_);
int ret = 0, len = 0;
ret = write_register(setting3399::SR_CLEAN_PAPER_ROAD, len);
return ret;
}
int hg_scanner_302::get_dev_islock_file(int& data)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner_302::set_dev_islock_file(int data)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner_302::set_speed_mode(int data)
{
return write_register(setting3399::SR_SET_SPEEDMODE, data);
}
int hg_scanner_302::get_speed_mode(int& data)
{
return read_register(setting3399::SR_SET_SPEEDMODE, &data);
}
int hg_scanner_302::set_devs_distortion_check_val(float data)
{
std::lock_guard<std::mutex> lock(io_lock_);
setting3399::Scanner_Reg_Defs retio = setting3399::SR_SET_V_200_RATIO;
if (resolution_ <= 200)
retio = setting3399::SR_SET_V_200_RATIO;
else if (resolution_ > 200 && resolution_ <= 300)
retio = setting3399::SR_SET_V_200_RATIO;
else if (resolution_ > 300 && resolution_ <= 600)
retio = setting3399::SR_SET_V_200_RATIO;
return write_register(retio, *(int*)&save_dpi_color_check_val);
}
int hg_scanner_302::get_devs_distortion_check_val(float& data)
{
std::lock_guard<std::mutex> lock(io_lock_);
int val = 0;
setting3399::Scanner_Reg_Defs ratio = setting3399::SR_SET_V_200_RATIO;
if (resolution_ <= 200)
ratio = setting3399::SR_SET_V_200_RATIO;
else if (resolution_ > 200 && resolution_ <= 300)
ratio = setting3399::SR_SET_V_200_RATIO;
else if (resolution_ > 300 && resolution_ <= 600)
ratio = setting3399::SR_SET_V_200_RATIO;
int ret = read_register(ratio, &val);
data = *(float*)&val;
return ret;
}
int hg_scanner_302::set_auto_flat(int data)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner_302::set_notify_sleep()
{
std::lock_guard<std::mutex> lock(io_lock_);
int val = 0,
ret = write_register(setting3399::SR_NOTIFY_SLEEP, val);
return ret;
}
int hg_scanner_302::get_roller_num(int& num)
{
std::lock_guard<std::mutex> lock(io_lock_);
int ret = read_register(setting3399::SR_GET_ROLLER_NUM, &num);
return ret;
}
int hg_scanner_302::get_history_scan_count(int& val)
{
std::lock_guard<std::mutex> lock(io_lock_);
int ret = read_register(setting3399::SR_GET_SCANN_NUM, &val);
return ret;
}