#include "hg_scanner_200.h" #include "../wrapper/hg_log.h" #if defined(WIN32) || defined(_WIN64) #include "scanner_manager.h" #endif static std::string jsontext1("{\"global\":{\"device_type\":\"G100-G200\",\"option_count\":66},\"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\":128,\"range\":[\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"\\u5f69\\u8272+\\u7070\\u5ea6\",\"\\u5f69\\u8272+\\u9ed1\\u767d\",\"\\u7070\\u5ea6+\\u9ed1\\u767d\"],\"depend_or\":[\"is-multiout==true\"]},\"mode\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u989c\\u8272\\u6a21\\u5f0f\",\"desc\":\"\\u9009\\u62e9\\u8272\\u5f69\\u6a21\\u5f0f\",\"type\":\"string\",\"cur\":\"24\\u4f4d\\u5f69\\u8272\",\"default\":\"24\\u4f4d\\u5f69\\u8272\",\"size\":32,\"range\":[\"24\\u4f4d\\u5f69\\u8272\",\"256\\u7ea7\\u7070\\u5ea6\",\"\\u9ed1\\u767d\",\"\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"],\"depend_or\":[\"is-multiout!=true\"]},\"binary-threshold\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u9ed1\\u767d\\u56fe\\u50cf\\u9608\\u503c\",\"desc\":\"\\u9ad8\\u4e8e\\u8be5\\u9608\\u503c\\u4e3a1\\uff08\\u767d\\uff09\\uff0c\\u4f4e\\u4e8e\\u8be5\\u9608\\u503c\\u4e3a0\\uff08\\u9ed1\\uff09\",\"type\":\"int\",\"cur\":127,\"default\":127,\"size\":4,\"range\":{\"min\":1,\"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!=\\u4e09\\u8054\\u8bd5\\u5377\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"mode!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-grid\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u9664\\u7f51\\u7eb9\",\"desc\":\"\\u53bb\\u9664\\u56fe\\u50cf\\u4e2d\\u7684\\u7f51\\u7eb9\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"resolution<500\",\"is-multiout!=true\",\"paper!=\\u4e09\\u8054\\u8bd5\\u5377\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"mode!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-err-extension\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u9519\\u8bef\\u6269\\u6563\",\"desc\":\"\\u4ee5\\u70b9\\u9635\\u5f62\\u5f0f\\u6784\\u5efa\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"mode==\\u9ed1\\u767d\"]},\"is-noise-optimize\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u9ed1\\u767d\\u56fe\\u50cf\\u566a\\u70b9\\u4f18\\u5316\",\"desc\":\"\\u53bb\\u9664\\u56fe\\u50cf\\u4e2d\\u7684\\u5b64\\u7acb\\u9ed1\\u70b9\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"mode==\\u9ed1\\u767d\"]},\"noise-size\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\" \\u566a\\u70b9\\u4f18\\u5316\\u5c3a\\u5bf8\",\"desc\":\"\\u8bbe\\u7f6e\\u9700\\u8981\\u53bb\\u9664\\u7684\\u9ed1\\u8272\\u5b64\\u7acb\\u70b9\\u7684\\u8fde\\u901a\\u4e2a\\u6570\",\"type\":\"int\",\"cur\":10,\"default\":10,\"size\":4,\"range\":{\"min\":1,\"max\":50,\"step\":1},\"depend_or\":[\"is-noise-optimize==true\"]},\"paper\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u7eb8\\u5f20\\u5c3a\\u5bf8\",\"desc\":\"\\u8bbe\\u7f6e\\u51fa\\u56fe\\u5927\\u5c0f\",\"type\":\"string\",\"cur\":\"\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"default\":\"\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"size\":48,\"range\":[\"A3\",\"8\\u5f00\",\"A4\",\"A4\\u6a2a\\u5411\",\"16\\u5f00\",\"16\\u5f00\\u6a2a\\u5411\",\"A5\",\"A5\\u6a2a\\u5411\",\"A6\",\"A6\\u6a2a\\u5411\",\"B4\",\"B5\",\"B5\\u6a2a\\u5411\",\"B6\",\"B6\\u6a2a\\u5411\",\"Letter\",\"Letter\\u6a2a\\u5411\",\"Double Letter\",\"LEGAL\",\"\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"\\u4e09\\u8054\\u8bd5\\u5377\"]},\"is-custom-area\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"paper!=\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"!=\\u4e09\\u8054\\u8bd5\\u5377\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\"]},\"tl-x\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u5de6\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\\u5de6\\u4e0a\\u89d2x\\u5750\\u6807\",\"type\":\"float\",\"cur\":0.000000,\"default\":0.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":210.000000,\"step\":21.000000},\"depend_and\":[\"is-custom-area==true\"]},\"br-x\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u53f3\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\\u53f3\\u4e0b\\u89d2x\\u5750\\u6807\",\"type\":\"float\",\"cur\":210.000000,\"default\":210.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":210.000000,\"step\":21.000000},\"depend_and\":[\"is-custom-area==true\"]},\"tl-y\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u4e0a\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a"); static std::string jsontext2("\\u57df\\u5de6\\u4e0a\\u89d2y\\u5750\\u6807\",\"type\":\"float\",\"cur\":0.000000,\"default\":0.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":297.000000,\"step\":29.700000},\"depend_and\":[\"is-custom-area==true\"]},\"br-y\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u4e0b\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\\u53f3\\u4e0b\\u89d2y\\u5750\\u6807\",\"type\":\"float\",\"cur\":297.000000,\"default\":297.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":297.000000,\"step\":29.700000},\"depend_and\":[\"is-custom-area==true\"]},\"page\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u626b\\u63cf\\u9875\\u9762\",\"desc\":\"\\u8bbe\\u7f6e\\u9875\\u9762\\u626b\\u63cf\\u65b9\\u5f0f\",\"type\":\"string\",\"cur\":\"\\u53cc\\u9762\",\"default\":\"\\u53cc\\u9762\",\"size\":40,\"range\":[\"\\u5355\\u9762\",\"\\u53cc\\u9762\",\"\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u901a\\u7528\\uff09\",\"\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u53d1\\u7968\\u7eb8\\uff09\",\"\\u5bf9\\u6298\"]},\"discardblank\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"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\":1,\"max\":600,\"step\":1}},\"is-exchange\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u4ea4\\u6362\\u6b63\\u53cd\\u9762\",\"desc\":\"\\u4ea4\\u6362\\u6bcf\\u5f20\\u6587\\u7a3f\\u7684\\u6b63\\u53cd\\u9762\\u51fa\\u56fe\\u987a\\u5e8f\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"page!=\\u5355\\u9762\"]},\"grp-2\":{\"cat\":\"base\",\"title\":\"\\u4eae\\u5ea6\",\"type\":\"group\",\"readonly\":false,\"affect\":0,\"group\":\"light\",\"field\":\"Common\",\"pos\":0,\"visible\":true,\"unit\":\"None\"},\"is-custom-gamma\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"light\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u542f\\u7528\\u8272\\u8c03\\u66f2\\u7ebf\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u56fe\\u50cf\\u8272\\u8c03\\u6548\\u679c\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"brightness\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"light\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u4eae\\u5ea6\\u503c\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u50cf\\u4eae\\u5ea6\",\"type\":\"int\",\"cur\":128,\"default\":128,\"size\":4,\"range\":{\"min\":1,\"max\":255,\"step\":1},\"depend_or\":[\"is-custom-gamma==false\"]},\"contrast\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"light\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u5bf9\\u6bd4\\u5ea6\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u50cf\\u5bf9\\u6bd4\\u5ea6\",\"type\":\"int\",\"cur\":4,\"default\":4,\"size\":4,\"range\":{\"min\":1,\"max\":7,\"step\":1},\"depend_or\":[\"is-custom-gamma==false\"]},\"gamma\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"light\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u4f3d\\u9a6c\\u503c\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u50cf\\u4f3d\\u739b\\u503c\",\"type\":\"float\",\"cur\":1.000000,\"default\":1.000000,\"size\":4,\"range\":{\"min\":0.010000,\"max\":5.000000,\"step\":0.499000},\"depend_or\":[\"is-custom-gamma==false\"]},\"grp-3\":{\"cat\":\"base\",\"title\":\"\\u56fe\\u50cf\\u5904\\u7406\",\"type\":\"group\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"field\":\"Common\",\"pos\":0,\"visible\":true,\"unit\":\"None\"},\"is-anti-skew\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u81ea\\u52a8\\u7ea0\\u504f\",\"desc\":\"\\u81ea\\u52a8\\u7ea0\\u6b63\\u6b6a\\u659c\\u9001\\u5165\\u7684\\u6587\\u7a3f\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4,\"depend_or\":[\"page!=\\u5bf9\\u6298\"]},\"is-split\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u56fe\\u50cf\\u62c6\\u5206\",\"desc\":\"\\u81ea\\u52a8\\u62c6\\u5206\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"page!=\\u5bf9\\u6298\"]},\"is-erase-black-frame\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u6d88\\u9664\\u9ed1\\u6846\",\"desc\":\"\\u6d88\\u9664\\u6587\\u7a3f\\u8303\\u56f4\\u5916\\u7684\\u9ed1\\u8272\\u80cc\\u666f\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4},\"bkg-fill-mode\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u80cc\\u666f\\u586b\\u5145\\u65b9\\u5f0f\",\"desc\":\"\\u9009\\u62e9\\u80cc\\u666f\\u586b\\u5145\\u65b9\\u5f0f\",\"type\":\"string\",\"cur\":\"\\u51f8\\u591a\\u8fb9\\u5f62\",\"default\":\"\\u51f8\\u591a\\u8fb9\\u5f62\",\"size\":40,\"range\":[\"\\u51f8\\u591a\\u8fb9\\u5f62\",\"\\u51f9\\u591a\\u8fb9\\u5f62\"],\"depend_or\":[\"is-erase-black-frame==true\"]},\"is-fill-color\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u8272\\u5f69\\u586b\\u5145\",\"desc\":\"\\u542f\\u7528\\u540e\\u9ed1\\u6846\\u90e8\\u5206\\u5c06\\u586b\\u5145\\u4e3a\\u6587\\u7a3f\\u5e95\\u8272\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-erase-black-frame==true\"]},\"threshold\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u9608\\u503c\",\"desc\":\"\\u6587\\u7a3f\\u5e95\\u8272\\u4e0e\\u9ed1\\u8272\\u80cc\\u666f\\u7070\\u5ea6\\u503c\\u7684\\u5dee\\u503c\\u5927\\u4e8e\\u8be5\\u503c\\uff0c\\u624d\\u4f1a\\u88ab\\u8bc6\\u522b\\u4e3a\\u6587\\u7a3f\",\"type\":\"int\",\"cur\":40,\"default\":40,\"size\":4,\"range\":{\"min\":30,\"max\":50,\"step\":1},\"depend_or\":[\"is-erase-black-frame==true\",\"paper==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"is-anti-skew==true\"]},\"anti-noise-level\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u80cc\\u666f\\u6297\\u566a\\u7b49\\u7ea7\",\"desc\":\"\\u80fd\\u591f\\u5bb9\\u5fcd\\u7684\\u80cc\\u666f\\u6742\\u8272\\u6761\\u7eb9\\u7684\\u5bbd\\u5ea6\",\"type\":\"int\",\"cur\":8,\"default\":8,\"size\":4,\"range\":{\"min\":1,\"max\":20,\"step\":1},\"depend_or\":[\"is-erase-black-frame==true\",\"paper==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"is-anti-skew==true\"]},\"margin\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u8fb9\\u7f18\\u7f29\\u8fdb\",\"desc\":\"\\u5bfb\\u627e\\u6587\\u7a3f\\u8fb9\\u7f18\\u65f6\\u5bf9\\u8fb9\\u7f18\\u7684\\u4fb5\\u5165\\u7a0b\\u5ea6\",\"type\":\"int\",\"cur\":5,\"default\":5,\"size\":4,\"range\":{\"min\":2,\"max\":30,\"step\":1},\"depend_or\":[\"is-erase-black-frame==true\",\"paper==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"is-anti-skew==true\"]},\"is-dark-sample\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u6df1\\u8272\\u6837\\u5f20\",\"desc\":\"\\u542f\\u7528\\u8be5\\u6a21\\u5f0f\\u9632\\u6b62\\u6df1\\u8272\\u5e95\\u8272\\u7684\\u6587\\u7a3f\\u56fe\\u50cf\\u88ab\\u8bef\\u5904\\u7406\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"page!=\\u5bf9\\u6298\",\"is-erase-black-frame!=true\",\"paper!=\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"is-anti-skew!=true\"]},\"is-anti-permeate\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u9632\\u6b62\\u6e17\\u900f\",\"desc\":\"\\u9632\\u6b62\\u80cc\\u9762\\u56fe\\u6848\\u6e17\\u900f\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"permeate-level\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\" \\u9632\\u6b62\\u6e17\\u900f\\u7b49\\u7ea7\",\"desc\":\"\\u9009\\u62e9\\u9632\\u6b62\\u6e17\\u900f\\u7684\\u7b49\\u7ea7\",\"type\":\"string\",\"cur\":\"\\u8f83\\u5f31\",\"default\":\"\\u8f83\\u5f31\",\"size\":16,\"range\":[\"\\u5f31\",\"\\u8f83\\u5f31\",\"\\u4e00\\u822c\",\"\\u8f83\\u5f3a\",\"\\u5f3a\"],\"depend_or\":[\"is-anti-permeate==true\"]},\"is-rid-hole-l\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u5de6\\u4fa7\",\"desc\":\"\\u7a7f\\u5b54\\u5728\\u7eb8\\u5f20\\u4e0a\\u7684\\u5de6\\u4fa7\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"search-hole-range-l\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\" \\u5de6\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":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\\u5"); static std::string jsontext3("f20\\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-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},\"is-staple\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"feeder\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u88c5\\u8ba2\\u68c0\\u6d4b\",\"desc\":\"\\u68c0\\u6d4b\\u662f\\u5426\\u51fa\\u73b0\\u7c98\\u8fde\\u9001\\u5165\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"is-check-askew\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"feeder\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u6b6a\\u659c\\u68c0\\u6d4b\",\"desc\":\"\\u68c0\\u6d4b\\u662f\\u5426\\u51fa\\u73b0\\u6b6a\\u659c\\u9001\\u5165\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4},\"askew-range\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"feeder\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u6b6a\\u659c\\u5bb9\\u5fcd\\u5ea6\",\"desc\":\"\\u503c\\u8d8a\\u5c0f\\uff0c\\u80fd\\u5bb9\\u5fcd\\u5f97\\u9001\\u5165\\u6587\\u7a3f\\u6b6a\\u659c\\u89d2\\u5ea6\\u8d8a\\u5c0f\",\"type\":\"int\",\"cur\":3,\"default\":3,\"size\":4,\"range\":{\"min\":1,\"max\":5,\"step\":1},\"depend_or\":[\"is-check-askew==true\"]}}"); namespace settingsdsp_200 { scanner_err device_status_to_hg_err(int usbdata, bool *fatal) { scanner_err code = SCANNER_ERR_OK; if (fatal) *fatal = true; switch (usbdata) { case setting3288dsp::HAVE_IMAGE: code = SCANNER_ERR_OK; if (fatal) *fatal = false; break; case setting3288dsp::STOP_SCAN: case setting3288dsp::SCAN_STOP: case setting3288dsp::USER_STOP: if (fatal) *fatal = false; code = SCANNER_ERR_DEVICE_STOPPED; break; case setting3288dsp::COUNT_MODE: code = SCANNER_ERR_DEVICE_COUNT_MODE; break; case setting3288dsp::NO_FEED: code = SCANNER_ERR_DEVICE_NO_PAPER; break; case setting3288dsp::OPEN_COVER: code = SCANNER_ERR_DEVICE_COVER_OPENNED; break; case setting3288dsp::FEED_IN_ERROR: code = SCANNER_ERR_DEVICE_FEEDING_PAPER; break; case setting3288dsp::PAPER_JAM: code = SCANNER_ERR_DEVICE_PAPER_JAMMED; break; case setting3288dsp::DETECT_DOUBLE_FEED: code = SCANNER_ERR_DEVICE_DOUBLE_FEEDING; break; case setting3288dsp::DETECT_STAPLE: code = SCANNER_ERR_DEVICE_STAPLE_ON; break; case setting3288dsp::PAPER_SKEW: code = SCANNER_ERR_DEVICE_PAPER_SKEW; break; case setting3288dsp::HARDWARE_ERROR: code = SCANNER_ERR_DEVICE_NOT_SUPPORT; break; case setting3288dsp::PC_SCAN_BUSY_or_ERROR: code = SCANNER_ERR_DEVICE_PC_BUSY; break; case setting3288dsp::SIZE_ERROR: code = SCANNER_ERR_DEVICE_SIZE_CHECK; break; case setting3288dsp::AUTO_FLAT_FINISHED: code = SCANNER_ERR_DEVICE_AUTO_FAIL_OVER; break; case setting3288dsp::AUTO_FLATTING: code = SCANNER_ERR_DEVICE_AUTO_FAIL_INFO; break; default: if (fatal) *fatal = false; break; } return code; } } hg_scanner_200::hg_scanner_200(const char* dev_name,int pid, usb_io* io) : hg_scanner(G100Serial, dev_name, io,pid) { //pid_ = pid; initdevice(); dsp_config_.value = 0; #ifndef MAPPING_FUNCTION_IN_BASE init_setting_map(setting_map_, ARRAY_SIZE(setting_map_));//优先初始化 #endif if (init_settings(0x200)) init_settings((jsontext1 + jsontext2 + jsontext3).c_str()); status_ = SCANNER_ERR_OK; } hg_scanner_200::~hg_scanner_200() {} void hg_scanner_200::discard_prev(void) { USBCB usb = { 0 }; int ret = get_scanner_status(usb), imgs = 0, packets = 0, normal = 0; while (ret == SCANNER_ERR_OK) { if (usb.u32_Data == setting3288dsp::HAVE_IMAGE) { pop_image(); imgs++; normal = 0; packets++; } else if (usb.u32_Data == setting3288dsp::NORMAL) { if(normal++ > 10) break; } else packets++; ret = get_scanner_status(usb); } if (imgs || packets) VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "discard prev-scanning %d packets and %d images.\n", packets, imgs); } int hg_scanner_200::on_scanner_closing(bool force) { return SCANNER_ERR_OK; } int hg_scanner_200::discard_all_images(void) { discard_prev(); return SCANNER_ERR_OK; } int hg_scanner_200::get_roller_life(void) { return 450000; } void hg_scanner_200::thread_handle_usb_read(void) { int ret = SCANNER_ERR_OK, prev_err = SCANNER_ERR_OK; StopWatch sw; bool first = true; while (run_) { if (sw.elapsed_s() > 30 && !is_auto_falt) { // no any data in 30 seconds, we giveup the work ... status_ = prev_err != SCANNER_ERR_OK ? prev_err : SCANNER_ERR_TIMEOUT; break; } USBCB usb = {0}; ret = get_scanner_status(usb); if (ret == SCANNER_ERR_DEVICE_AUTO_FAIL_OVER) { is_auto_falt = false; status_ = ret; std::string msg; int count = usb.u32_Count; msg.resize(count); { std::lock_guard lock(io_lock_); ret = io_->read_bulk(&msg[0], &count); } if (ret == SCANNER_ERR_OK) notify_ui_working_status(msg.c_str(), SANE_EVENT_STATUS, status_); else status_ = ret; break; } else if (ret == SCANNER_ERR_DEVICE_AUTO_FAIL_INFO) { sw.reset(); status_ = ret; std::string msg; int count = usb.u32_Count; msg.resize(count); { std::lock_guard lock(io_lock_); ret = io_->read_bulk(&msg[0], &count); } if (ret == SCANNER_ERR_OK) { status_ = ret = SCANNER_ERR_DEVICE_AUTO_FAIL_INFO; char buf[1024]; strcpy(buf, msg.c_str()); notify_ui_working_status(buf, SANE_EVENT_STATUS, status_); } else { status_ = ret; break; } } if (ret == SCANNER_ERR_DEVICE_NOT_FOUND) { // device left, the work is no meanning ... status_ = ret; break; } else if (usb.u32_Data == setting3288dsp::HAVE_IMAGE) { ret = get_img_data(usb.u32_Count); if (ret == SCANNER_ERR_INSUFFICIENT_MEMORY) { status_ = ret; break; } io_->set_timeout(200); pop_image(); sw.reset(); first = false; } else if (ret == SCANNER_ERR_DEVICE_STOPPED) { status_ = prev_err; break; } else if(ret != SCANNER_ERR_OK && ret != SCANNER_ERR_DEVICE_AUTO_FAIL_INFO && ret != SCANNER_ERR_DEVICE_AUTO_FAIL_OVER) { if (prev_err == SCANNER_ERR_OK) { if (first) { SANE_Image_Statu imgst = last_usb_image_statu(ret); // if the error occurs at the 2nd paper, then the first normal paper maybe lost, we delay 2 seconds here ... std::this_thread::sleep_for(std::chrono::milliseconds(2000)); get_scanner_status(usb); if (usb.u32_Data == setting3288dsp::HAVE_IMAGE) { if(get_img_data(usb.u32_Count, imgst) == SCANNER_ERR_INSUFFICIENT_MEMORY) { status_ = SCANNER_ERR_INSUFFICIENT_MEMORY; break; } io_->set_timeout(200); pop_image(); sw.reset(); first = false; prev_err = ret; continue; } status_ = ret; break; } } else { // notify_ui_working_status(hg_scanner::error_description((scanner_err)prev_err).c_str(), SANE_EVENT_ERROR, prev_err); } status_ = prev_err = ret; break; //dsp 设备错误消息不会发stop } this_thread::sleep_for(chrono::milliseconds(2)); } 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_200::do_start(void) { bool handled = false; int ret = try_third_app_handle_start(handled), count = -1; // for third-sane-app invoking, added on 2022-05-19 if (handled) return ret; //discard_prev(); user_cancel_ = false; imgs_.Clear(); // move from scanning done final_imgs_.clear(); // move from scanning done ret = writedown_device_configuration(true); if (ret == SCANNER_ERR_OK) writedown_image_configuration(); else { status_ = ret; return ret; } printf_devconfig(); SANE_Bool type = false; ret = get_scanner_paperon(type); if (!type) { status_ = ret = SCANNER_ERR_DEVICE_NO_PAPER; //notify_ui_working_status(STATU_DESC_SCANNER_ERR_DEVICE_NO_PAPER, SANE_EVENT_ERROR, status_); VLOG_MINI_1(LOG_LEVEL_WARNING, "device start status is(%s)\n", hg_log::lang_load(ID_STATU_DESC_SCANNER_ERR_DEVICE_NO_PAPER)); return ret; } USBCB usb = { setting3288dsp::START_COMMAND, img_conf_.scannum, 0 }; { std::lock_guard lock(io_lock_); ret = writeusb(usb); io_->set_timeout(500); } VLOG_MINI_1(LOG_LEVEL_WARNING, "write start command = %s\n", hg_scanner_err_name(ret)); 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, "start result: %s\n", hg_scanner_err_name(ret)); return ret; } int hg_scanner_200::do_stop(void) { int ret = SCANNER_ERR_OK; USBCB usbcb = { setting3288dsp::STOP, 0, 0}; { std::lock_guard lock(io_lock_); ret = writeusb(usbcb); } user_cancel_ = true; if (ret == 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)); } else if (ret == SCANNER_ERR_OK) { status_ = SCANNER_ERR_DEVICE_STOPPED; } return ret; } int hg_scanner_200::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_200::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_200::pop_image() { std::lock_guard lock(io_lock_); int ret = SCANNER_ERR_OK; USBCB usbcb = { setting3288dsp::POP_IMAGE, 0, 0 }; ret = writeusb(usbcb); return ret; } int hg_scanner_200::get_scanner_status(USBCB &usb) { std::lock_guard lock(io_lock_); int ret = SCANNER_ERR_OK; usb = { setting3288dsp::GET_DSP_STATUS, 0, 0 }; ret = writeusb(usb); if (ret != SCANNER_ERR_OK) return ret; io_->set_timeout(500); ret = readusb(usb); if (ret != SCANNER_ERR_OK) { status_ = ret; return ret; } return settingsdsp_200::device_status_to_hg_err(usb.u32_Data, nullptr); } int hg_scanner_200::get_img_data(unsigned int bytes, SANE_Image_Statu statu) { int total = bytes, ret = SCANNER_ERR_OK, index = 0, block = total; std::shared_ptr imagedata(aquire_memory(total)); if (!imagedata.get()) return SCANNER_ERR_INSUFFICIENT_MEMORY; USBCB usb{ setting3288dsp::GET_IMAGE, 0, total }; imagedata->set_image_statu(statu); { std::lock_guard lock(io_lock_); ret = writeusb(usb); if (ret != SCANNER_ERR_OK) { status_ = ret; return ret; } io_->set_timeout(500); while (total > 0) { block = 512 * 1024; if (total < block) block = total; unsigned int size = block; void* buf = imagedata->data(index, &size); if (!buf) { VLOG_MINI_3(LOG_LEVEL_FATAL, "memory(0x%08x + %u) fatal when read USB image %d !!!\n", index, block, usb_img_index_); ret = SCANNER_ERR_INSUFFICIENT_MEMORY; break; } block = size; ret = io_->read_bulk(buf, &block); io_->set_timeout(500); //不能删除可能会导致IO超时 if (ret != SCANNER_ERR_OK) break; index += block; total -= block; } } if (ret == SCANNER_ERR_OK) { ret = save_usb_data(imagedata); } return ret; } int hg_scanner_200::writedown_device_configuration(bool type,setting_hardware::HGSCANCONF_DSP *d) { if (!type) return SCANNER_ERR_OK; int ret = SCANNER_ERR_OK, len = 0; setting_hardware::HGSCANCONF_DSP p = dsp_config_; //不得改变外部的值 if (!d) d = &p; if (is_multiout) { d->params_dsp.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) { d->params_dsp.color = 1; } if (paper_size_ == TwSS::None || paper_size_ == TwSS::USStatement || paper_size_ == TwSS::MaxSize || paper_size_ == TwSS::Trigeminy) { d->params_dsp.enable_sizecheck = false; } { std::lock_guard lock(io_lock_); USBCB usbcb = { setting3288dsp::CONFIGURED_DATA, d->value, 0 }; len = sizeof(USBCB); ret = io_->write_bulk(&usbcb, &len); } VLOG_MINI_1(LOG_LEVEL_WARNING, "writedown_device_configuration is .(%s)\n", hg_scanner_err_name(ret)); return ret; } int hg_scanner_200::on_color_mode_changed(int& color_mode) { dsp_config_.params_dsp.color = (color_mode == COLOR_MODE_BLACK_WHITE || color_mode == COLOR_MODE_256_GRAY) ? 0 : 1; return SCANNER_ERR_OK; } int hg_scanner_200::on_paper_changed(int& paper) { bool exact = true; int ind = hgpaper_to_devspaper(paper_map_dsp, ARRAY_SIZE(paper_map_dsp), paper, &exact, &paper_size_), ret = exact ? SCANNER_ERR_OK : SCANNER_ERR_NOT_EXACT; if (dsp_config_.params_dsp.paper != paper_map_dsp[ind].dev_value) { int old = dsp_config_.params_dsp.paper; dsp_config_.params_dsp.paper = paper_map_dsp[ind].dev_value; ret = writedown_device_configuration(); if (ret) { dsp_config_.params_dsp.paper = old; for (int i = 0; i < ARRAY_SIZE(paper_map_dsp); ++i) { if (paper_map_dsp[i].dev_value == old) { paper = paper_map_dsp[i].paper; break; } } } else if (!exact) ret = SCANNER_ERR_NOT_EXACT; } return ret; } int hg_scanner_200::on_paper_check_changed(bool& check) { int ret = SCANNER_ERR_OK; if(dsp_config_.params_dsp.enable_sizecheck ^ check) { dsp_config_.params_dsp.enable_sizecheck = check; ret = writedown_device_configuration(); if (ret) { dsp_config_.params_dsp.enable_sizecheck = !check; check = dsp_config_.params_dsp.enable_sizecheck; } } return ret; } int hg_scanner_200::on_resolution_changed(int& dpi) { int ret = SCANNER_ERR_OK; dsp_config_.params_dsp.dpi = 1; ret = writedown_device_configuration(); return ret; } int hg_scanner_200::on_ultrasonic_check_changed(bool& check) { int ret = SCANNER_ERR_OK; if (dsp_config_.params_dsp.double_feed_enbale ^ check) { dsp_config_.params_dsp.double_feed_enbale = check; ret = writedown_device_configuration(); if (ret) { dsp_config_.params_dsp.double_feed_enbale = !check; check = dsp_config_.params_dsp.double_feed_enbale; } } return ret; } int hg_scanner_200::on_staple_check_changed(bool& check) { int ret = SCANNER_ERR_OK; if (dsp_config_.params_dsp.stable_enbale ^ check) { dsp_config_.params_dsp.stable_enbale = check; ret = writedown_device_configuration(); if (ret) { dsp_config_.params_dsp.stable_enbale = !check; check = dsp_config_.params_dsp.stable_enbale; } } return ret; } int hg_scanner_200::on_skew_check_changed(bool& check) { int ret = SCANNER_ERR_OK; if (dsp_config_.params_dsp.screw_detect_enable ^ check) { dsp_config_.params_dsp.screw_detect_enable = check; ret = writedown_device_configuration(); if (ret) { dsp_config_.params_dsp.screw_detect_enable = !check; check = dsp_config_.params_dsp.screw_detect_enable; } } return ret; } int hg_scanner_200::on_skew_check_level_changed(int& check) { int ret = SCANNER_ERR_OK, val = check, old = dsp_config_.params_dsp.screw_detect_level; setting_hardware::HGSCANCONF_DSP cf; cf.params_dsp.screw_detect_level = -1; if (val < 0) { val = 0; ret = SCANNER_ERR_NOT_EXACT; } else if (val > cf.params_dsp.screw_detect_level) { val = cf.params_dsp.screw_detect_level; ret = SCANNER_ERR_NOT_EXACT; } if (val != dsp_config_.params_dsp.screw_detect_level) { dsp_config_.params_dsp.screw_detect_level = val; ret = writedown_device_configuration(); if (ret) check = dsp_config_.params_dsp.screw_detect_level = old; } if (ret == SCANNER_ERR_OK && val != check) { check = val; ret = SCANNER_ERR_NOT_EXACT; } return ret; } int hg_scanner_200::on_set_feedmode(int feedmode) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_200::on_pic_type(bool& pic) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_200::on_pick_paper(bool autostrength) { return 0; } int hg_scanner_200::on_pick_paper_threshold(double threshold) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_200::on_is_auto_paper(bool isautopaper) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_200::on_cis_get_image(bool isautopaper) { is_cis_image = isautopaper; dsp_config_.params_dsp.isCorrect = isautopaper == true ? 0 : 1; //0设置获取cis原图,1校正之后的图 return writedown_device_configuration(); } int hg_scanner_200::on_process_double_paper(bool type) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_200::on_get_feedmode(int &feedmode) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_200::initdevice() { setting_hardware::HGSCANCONF_DSP ds; ds.params_dsp.paper = 0; ds.params_dsp.color = 0; ds.params_dsp.double_feed_enbale =0; ds.params_dsp.dpi = 0; ds.params_dsp.enable_sizecheck=0; ds.params_dsp.pc_correct=0; ds.params_dsp.screw_detect_enable=0; ds.params_dsp.screw_detect_level = 0; ds.params_dsp.stable_enbale = 0; ds.params_dsp.unused_one = 0; ds.params_dsp.unused_two = 0; writedown_device_configuration(true,&ds); printf_devconfig(&ds); return SCANNER_ERR_OK; } void hg_scanner_200::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_dsp.enable_sizecheck; ic.hardwarecaps.en_skrewdetect = dsp_config_.params_dsp.screw_detect_enable; ic.hardwarecaps.en_doublefeed = dsp_config_.params_dsp.double_feed_enbale; ic.hardwarecaps.en_stapledetect = dsp_config_.params_dsp.stable_enbale; ic.hardwarecaps.skrewdetectlevel = dsp_config_.params_dsp.screw_detect_level; // ic.hardwarecaps.is_autopaper = dsp_config_.params_dsp.is_autopaper; ic.hardwarecaps.capturepixtype = 0; //暂无参数 获取图像类型 ic.hardwarecaps.lowpowermode = LowPowerMode::Min_None; //暂无参数 设置休眠时间 两个参数3399未使用 image_configuration(ic); //agreement(); } void hg_scanner_200::printf_devconfig(setting_hardware::HGSCANCONF_DSP *d) { io_->set_timeout(200); if (!d) d = &dsp_config_; VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\r\ndsp_config.params_dsp.color:%d\r\n",d->params_dsp.color); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config_.params_dsp.double_feed_enbale:%d\r\n",d->params_dsp.double_feed_enbale); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config_.params_dsp.dpi:%d\r\n",d->params_dsp.dpi); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config_.params_dsp.enable_sizecheck:%d\r\n",d->params_dsp.enable_sizecheck); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config_.params_dsp.paper:%d\r\n",d->params_dsp.paper); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config_.params_dsp.pc_correct:%d\r\n",d->params_dsp.pc_correct); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config_.params_dsp.screw_detect_enable:%d\r\n",d->params_dsp.screw_detect_enable); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config_.params_dsp.screw_detect_level:%d\r\n",d->params_dsp.screw_detect_level); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config_.params_dsp.stable_enbale:%d\r\n",d->params_dsp.stable_enbale); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config_.params_dsp.unused_one:%d\r\n",d->params_dsp.unused_one); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config_.params_dsp.unused_two:%d\r\n",d->params_dsp.unused_two); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config_.params_dsp.value:%d\r\n",d->value); } std::string hg_scanner_200::get_firmware_version() { char buf[20] = { 0 }; int ret = SCANNER_ERR_OK, len = 8; //协议定义长度为8 300 400 =10 USBCB cmd = { setting3288dsp::GET_FW_VERSION, len, 0 }; { std::lock_guard lock(io_lock_); ret = writeusb(cmd); if (ret == SCANNER_ERR_OK) { ret = io_->read_bulk(buf, &len); } } return buf; } std::string hg_scanner_200::get_serial_num() { char buf[20] = { 0 }; int ret = SCANNER_ERR_OK, len = 12; //协议定义长度为8 300 400 =10 USBCB cmd = { setting3288dsp::GET_SERIAL, len, 0 }; { std::lock_guard lock(io_lock_); ret = writeusb(cmd); if (ret == SCANNER_ERR_OK) { ret = io_->read_bulk(buf, &len); } } return buf; } std::string hg_scanner_200::get_ip(void) { return ""; } int hg_scanner_200::set_serial_num(string str) { std::lock_guard lock(io_lock_); USBCB usbcb = { setting3288dsp::SEND_SERIAL,0,14 }; int len = sizeof(usbcb), ret = SCANNER_ERR_OK; ret = io_->write_bulk(&usbcb, &len); if (ret == SCANNER_ERR_OK) { len = str.size(); ret = io_->write_bulk(&str, &len); } return ret; } int hg_scanner_200::set_vid_pid(int data) { std::lock_guard lock(io_lock_); USBCB usbcb = { setting3288dsp::SET_USB_INFOR_VIDPID,0,0 }; int len = sizeof(usbcb); return io_->write_bulk(&usbcb, &len); } int hg_scanner_200::get_vid_pid(int& data) { std::lock_guard lock(io_lock_); USBCB usbcb = { setting3288dsp::GET_USB_INFOR_VIDPID,0,0 }; int ret = SCANNER_ERR_OK, len = sizeof(usbcb); io_->read_bulk(&usbcb, &len); if (ret == SCANNER_ERR_OK) { data = usbcb.u32_Data; } return ret; } int hg_scanner_200::agreement() { int ret = SCANNER_ERR_OK; ret = writedown_device_configuration(true); return ret; } int hg_scanner_200::set_leaflet_scan(void) { int ret = SCANNER_ERR_OK; test_1_paper_ = true; ret = start(); return ret; } int hg_scanner_200::set_clear_roller_num(void) { std::lock_guard lock(io_lock_); USBCB usbcb = { setting3288dsp::CLR_ROLLER_NUM,0,4 }; return writeusb(usbcb); } int hg_scanner_200::set_clear_history_num(void) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_200::get_device_code(void) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_200::get_sleep_time(int& data ) { int ret = SCANNER_ERR_OK, len = 0; USBCB usbcb = { setting3288dsp::GET_SLEEP_TIME, 0, 0 }; { std::lock_guard lock(io_lock_); ret = writeusb(usbcb); if (ret != SCANNER_ERR_OK) { return ret; } len = sizeof(usbcb); ret = io_->read_bulk(&usbcb, &len); } printf("usbcb.u32_Data = %d\r\n",usbcb.u32_Data); if (ret == SCANNER_ERR_OK) { data = usbcb.u32_Data; } return ret; } int hg_scanner_200::set_sleep_time(int data) { std::lock_guard lock(io_lock_); int ret = SCANNER_ERR_OK; USBCB usbcb = { setting3288dsp::SET_SLEEP_TIME,data, 0 }; ret = writeusb(usbcb); return ret; } int hg_scanner_200::get_scanner_paperon(SANE_Bool& type) { int ret = SCANNER_ERR_OK, len = 0; USBCB usbcb = { setting3288dsp::GET_PAPERFEEDER_STATUS, 0, 0 }; { std::lock_guard lock(io_lock_); len = sizeof(USBCB); 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; return ret; } int hg_scanner_200::get_scan_is_sleep(SANE_Bool& type) { int ret = SCANNER_ERR_OK, len = 0; USBCB usbcb = { setting3288dsp::ACTIVE_SCANNER, 0, 0 }; len = sizeof(USBCB); { std::lock_guard lock(io_lock_); ret = writeusb(usbcb); if (ret == SCANNER_ERR_OK) { ret = io_->read_bulk(&usbcb, &len); } } if (ret == SCANNER_ERR_OK) { if (usbcb.u32_Data == 0x10) type = true; //return SCANNER_ERR_OK; else if (usbcb.u32_Data == 0x100) type = false; //return SCANNER_ERR_DEVICE_SLEEPING; } return ret; } int hg_scanner_200::get_device_log(string &log) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_200::set_devreboot(int data) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_200::set_devshtudown() { return SCANNER_ERR_DEVICE_NOT_SUPPORT;; } int hg_scanner_200::set_scan_islock(SANE_Bool type) { return SCANNER_ERR_DEVICE_NOT_SUPPORT;; } int hg_scanner_200::get_scan_islock(SANE_Bool& type) { return SCANNER_ERR_DEVICE_NOT_SUPPORT;; } int hg_scanner_200::set_scan_lock_check_val(string str) { return SCANNER_ERR_DEVICE_NOT_SUPPORT;; } int hg_scanner_200::set_firmware_upgrade(std::string str) { return SCANNER_ERR_DEVICE_NOT_SUPPORT;; } int hg_scanner_200::set_clean_paper_road() { return SCANNER_ERR_DEVICE_NOT_SUPPORT;; } int hg_scanner_200::get_dev_islock_file(int& data) { return SCANNER_ERR_DEVICE_NOT_SUPPORT;; } int hg_scanner_200::set_dev_islock_file(int data) { return SCANNER_ERR_DEVICE_NOT_SUPPORT;; } int hg_scanner_200::set_speed_mode(int data) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_200::get_speed_mode(int& data) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_200::set_devs_distortion_check_val(float data) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_200::get_devs_distortion_check_val(float& data) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_200::set_auto_flat(int data) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; USBCB usbcb = { setting3288dsp::START_FLAT,data,0 }; int len = sizeof(usbcb); int ret = SCANNER_ERR_OK; { std::lock_guard lock(io_lock_); ret = writeusb(usbcb); } if (ret == SCANNER_ERR_OK) { wait_usb_.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_200::set_notify_sleep() { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_200::get_history_scan_count(int& num) { int ret = SCANNER_ERR_OK, len = 0; USBCB usbcb = { setting3288dsp::GET_SCANN_NUM,0, 0 }; len = sizeof(usbcb); { std::lock_guard lock(io_lock_); ret = io_->write_bulk(&usbcb, &len); if (ret != SCANNER_ERR_OK) { return ret; } ret = io_->read_bulk(&usbcb, &len); } if (ret != SCANNER_ERR_OK) { return ret; } num = usbcb.u32_Data; return ret; } int hg_scanner_200::get_roller_num(int& val) { int ret = SCANNER_ERR_OK, len = 0; USBCB usbcb = { setting3288dsp::GET_ROLLER_NUM,0, 0 }; len = sizeof(usbcb); { std::lock_guard lock(io_lock_); ret = io_->write_bulk(&usbcb, &len); if (ret != SCANNER_ERR_OK) { return ret; } ret = io_->read_bulk(&usbcb, &len); } if (ret != SCANNER_ERR_OK) { return ret; } val = usbcb.u32_Data; return ret; }