#include "hg_scanner_300.h" #include "../wrapper/hg_log.h" #if defined(WIN32) || defined(_WIN64) #include "scanner_manager.h" #endif #ifdef OEM_LISICHENG static std::string jsontext("{\"device_type\":\"G300-lsc\",\"option_count\":60,\"1\":{\"category\":\"base\",\"name\":\"restore\",\"title\":\"\\u6062\\u590d\\u9ed8\\u8ba4\\u8bbe\\u7f6e\",\"desc\":\"\\u6062\\u590d\\u9ed8\\u8ba4\\u8bbe\\u7f6e\",\"type\":\"button\",\"cur\":\"button\",\"default\":\"button\",\"size\":0},\"2\":{\"category\":\"advanced\",\"name\":\"help\",\"title\":\"\\u5e2e\\u52a9\",\"desc\":\"\\u663e\\u793a\\u8f6f\\u4ef6\\u5e2e\\u52a9\\u6587\\u6863\",\"type\":\"button\",\"cur\":\"true\",\"default\":\"true\",\"size\":4},\"3\":{\"category\":\"base\",\"name\":\"grp-1\",\"title\":\"\\u57fa\\u672c\\u8bbe\\u7f6e\",\"type\":\"group\"},\"4\":{\"category\":\"base\",\"name\":\"is-multiout\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"5\":{\"category\":\"base\",\"name\":\"multiout-type\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\\u7c7b\\u578b\",\"desc\":\"\",\"type\":\"string\",\"cur\":\"\\u65e0\",\"default\":\"\\u65e0\",\"size\":32,\"range\":[\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"\\u5f69\\u8272+\\u7070\\u5ea6\",\"\\u5f69\\u8272+\\u9ed1\\u767d\",\"\\u7070\\u5ea6+\\u9ed1\\u767d\"],\"depend_or\":[\"4==true\"]},\"6\":{\"category\":\"base\",\"name\":\"mode\",\"title\":\"\\u989c\\u8272\\u6a21\\u5f0f\",\"desc\":\"\\u8bbe\\u7f6e\\u989c\\u8272\\u4f4d\\u6df1\",\"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\":[\"4==false\"]},\"7\":{\"category\":\"base\",\"name\":\"binary-threshold\",\"title\":\"\\u9ed1\\u767d\\u56fe\\u50cf\\u9608\\u503c\",\"desc\":\"\",\"type\":\"int\",\"cur\":128,\"default\":128,\"size\":4,\"range\":{\"min\":0,\"max\":255},\"depend_or\":[\"6==\\u9ed1\\u767d\"]},\"8\":{\"category\":\"base\",\"name\":\"filter\",\"title\":\"\\u7070\\u5ea6\\u6216\\u9ed1\\u767d\\u56fe\\u50cf - \\u9664\\u8272\",\"desc\":\"\\u9664\\u53bb\\u56fe\\u50cf\\u5f69\\u8272\",\"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\":[\"4!=true\",\"6!=24\\u4f4d\\u5f69\\u8272\",\"6!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"9\":{\"category\":\"base\",\"name\":\"is-rid-multiout-red\",\"title\":\"24\\u4f4d\\u5f69\\u8272\\u56fe\\u50cf - \\u591a\\u6d41\\u8f93\\u51fa\\u9664\\u7ea2\",\"desc\":\"\\u591a\\u901a\\u9053\\u8f93\\u51fa\\u4e2d\\uff0c\\u53bb\\u9664\\u7ea2\\u8272\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"4!=true\",\"6!=256\\u7ea7\\u7070\\u5ea6\",\"6!=\\u9ed1\\u767d\",\"6!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"10\":{\"category\":\"base\",\"name\":\"is-rid-answer-sheet-red\",\"title\":\"24\\u4f4d\\u5f69\\u8272\\u56fe\\u50cf - \\u7b54\\u9898\\u5361\\u9664\\u7ea2\",\"desc\":\"\\u7b54\\u9898\\u5361\\u626b\\u63cf\\u4e2d\\u53bb\\u9664\\u7ea2\\u8272\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"4!=true\",\"6!=256\\u7ea7\\u7070\\u5ea6\",\"6!=\\u9ed1\\u767d\",\"6!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"11\":{\"category\":\"base\",\"name\":\"is-erase-bkg\",\"title\":\"\\u80cc\\u666f\\u79fb\\u9664\",\"desc\":\"\\u79fb\\u9664\\u5f69\\u8272\\u56fe\\u50cf\\u80cc\\u666f\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"4!=true\",\"6!=256\\u7ea7\\u7070\\u5ea6\",\"6!=\\u9ed1\\u767d\",\"6!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"12\":{\"category\":\"base\",\"name\":\"bkg-color-range\",\"title\":\" \\u80cc\\u666f\\u8272\\u5f69\\u6d6e\\u52a8\\u8303\\u56f4\",\"desc\":\"\\u8bbe\\u5b9a\\u80cc\\u666f\\u8272\\u5f69\\u7684\\u6d6e\\u52a8\\u8303\\u56f4\\uff0c\\u5728\\u8be5\\u8303\\u56f4\\u5185\\u7684\\u90fd\\u5f53\\u4f5c\\u80cc\\u666f\\u79fb\\u9664\",\"type\":\"int\",\"cur\":20,\"default\":20,\"size\":4,\"range\":{\"min\":1,\"max\":128},\"depend_or\":[\"11==true\"]},\"13\":{\"category\":\"base\",\"name\":\"sharpen\",\"title\":\"\\u9510\\u5316\\u4e0e\\u6a21\\u7cca\",\"desc\":\"\\u9510\\u5316\\u4e0e\\u6a21\\u7cca\",\"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\":[\"4!=true\",\"6!=\\u9ed1\\u767d\",\"6!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"14\":{\"category\":\"base\",\"name\":\"is-rid-morr\",\"title\":\"\\u53bb\\u9664\\u6469\\u5c14\\u7eb9\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"4!=true\",\"6!=\\u9ed1\\u767d\",\"6!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"15\":{\"category\":\"base\",\"name\":\"is-rid-grid\",\"title\":\"\\u9664\\u7f51\\u7eb9\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"4!=true\",\"6!=\\u9ed1\\u767d\",\"6!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"16\":{\"category\":\"base\",\"name\":\"is-err-extension\",\"title\":\"\\u9519\\u8bef\\u6269\\u6563\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"6==\\u9ed1\\u767d\"]},\"17\":{\"category\":\"base\",\"name\":\"is-noise-optimize\",\"title\":\"\\u9ed1\\u767d\\u56fe\\u50cf\\u566a\\u70b9\\u4f18\\u5316\",\"desc\":\"\\u566a\\u70b9\\u4f18\\u5316\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"6==\\u9ed1\\u767d\"]},\"18\":{\"category\":\"base\",\"name\":\"noise-size\",\"title\":\" \\u566a\\u70b9\\u4f18\\u5316\\u5c3a\\u5bf8\",\"desc\":\"\\u566a\\u70b9\\u4f18\\u5316\\u5c3a\\u5bf8\",\"type\":\"int\",\"cur\":30,\"default\":30,\"size\":4,\"range\":{\"min\":10,\"max\":50},\"depend_or\":[\"17==true\"]},\"19\":{\"category\":\"base\",\"name\":\"paper\",\"title\":\"\\u7eb8\\u5f20\\u5c3a\\u5bf8\",\"desc\":\"\\u8bbe\\u7f6e\\u7eb8\\u5f20\\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\"]},\"20\":{\"category\":\"base\",\"name\":\"is-custom-area\",\"title\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"19!=\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"19!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"19!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\"]},\"21\":{\"category\":\"base\",\"name\":\"tl-x\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u5de6\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\",\"type\":\"float\",\"cur\":0.000000,\"default\":0.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":210.000000},\"depend_and\":[\"20==true\"]},\"22\":{\"category\":\"base\",\"name\":\"br-x\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u53f3\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\",\"type\":\"float\",\"cur\":210.000000,\"default\":210.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":210.000000},\"depend_and\":[\"20==true\"]},\"23\":{\"category\":\"base\",\"name\":\"tl-y\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u4e0a\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\",\"type\":\"float\",\"cur\":0.000000,\"default\":0.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":297.000000},\"depend_and\":[\"20==true\"]},\"24\":{\"category\":\"base\",\"name\":\"br-y\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u4e0b\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\",\"type\":\"float\",\"cur\":297.000000,\"default\":297.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":297.000000},\"depend_and\":[\"20==true\"]},\"25\":{\"category\":\"base\",\"name\":\"page\",\"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\"]},\"26\":{\"category\":\"base\",\"name\":\"blank-sensitivity\",\"title\":\" \\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\u7075\\u654f\\u5ea6\",\"desc\":\"\\u7075\\u654f\\u5ea6\\u8d8a\\u9ad8\\uff0c\\u5219\\u8d8a\\u5bb9\\u6613\\u8df3\\u8fc7\",\"type\":\"int\",\"cur\":50,\"default\":50,\"size\":4,\"range\":{\"min\":1,\"max\":100},\"depend_or\":[\"25==\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u901a\\u7528\\uff09\",\"25==\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u53d1\\u7968\\u7eb8\\uff09\"]},\"27\":{\"category\":\"base\",\"name\":\"resolution\",\"title\":\"\\u5206\\u8fa8\\u7387\",\"desc\":\"\\u626b\\u63cf\\u4eea\\u5206\\u8fa8\\u7387\",\"type\":\"int\",\"cur\":200,\"default\":200,\"size\":4,\"range\":[100,150,200,300]},\"28\":{\"category\":\"base\",\"name\":\"is-exchange\",\"title\":\"\\u4ea4\\u6362\\u6b63\\u53cd\\u9762\",\"desc\":\"\\u4ea4\\u6362\\u6b63\\u53cd\\u9762\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"25!=\\u5355\\u9762\"]},\"29\":{\"category\":\"base\",\"name\":\"is-split\",\"title\":\"\\u56fe\\u50cf\\u62c6\\u5206\",\"desc\":\"\\u81ea\\u52a8\\u62c6\\u5206\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"25!=\\u5bf9\\u6298\"]},\"30\":{\"category\":\"base\",\"name\":\"is-anti-skew\",\"title\":\"\\u81ea\\u52a8\\u7ea0\\u504f\",\"desc\":\"\\u81ea\\u52a8\\u7ea0\\u504f\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4,\"depend_or\":[\"25!=\\u5bf9\\u6298\"]},\"31\":{\"category\":\"base\",\"name\":\"grp-2\",\"title\":\"\\u4eae\\u5ea6\",\"type\":\"group\"},\"32\":{\"category\":\"base\",\"name\":\"is-custom-gamma\",\"title\":\"\\u542f\\u7528\\u8272\\u8c03\\u66f2\\u7ebf\",\"desc\":\"\\u901a\\u8fc7\\u8272\\u8c03\\u66f2\\u7ebf\\u6765\\u8bbe\\u7f6e\\u56fe\\u50cf\\u4f3d\\u9a6c\\u503c\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"33\":{\"category\":\"base\",\"name\":\"brightness\",\"title\":\"\\u4eae\\u5ea6\\u503c\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u7247\\u4eae\\u5ea6\",\"type\":\"int\",\"cur\":128,\"default\":128,\"size\":4,\"range\":{\"min\":1,\"max\":255},\"depend_and\":[\"32==false\"]},\"34\":{\"category\":\"base\",\"name\":\"contrast\",\"title\":\"\\u5bf9\\u6bd4\\u5ea6\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u7247\\u5bf9\\u6bd4\\u5ea6\",\"type\":\"int\",\"cur\":4,\"default\":4,\"size\":4,\"range\":{\"min\":1,\"max\":7},\"depend_and\":[\"32==false\"]},\"35\":{\"category\":\"base\",\"name\":\"gamma\",\"title\":\"\\u4f3d\\u9a6c\\u503c\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u7247\\u4f3d\\u9a6c\\u503c\",\"type\":\"float\",\"cur\":1.000000,\"default\":1.000000,\"size\":4,\"range\":{\"min\":0.010000,\"max\":5.000000},\"depend_and\":[\"32==false\"]},\"36\":{\"category\":\"base\",\"name\":\"grp-3\",\"title\":\"\\u56fe\\u50cf\\u5904\\u7406\",\"type\":\"group\"},\"37\":{\"category\":\"base\",\"name\":\"is-erase-black-frame\",\"title\":\"\\u6d88\\u9664\\u9ed1\\u6846\",\"desc\":\"\\u6d88\\u9664\\u9ed1\\u6846\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4},\"38\":{\"category\":\"base\",\"name\":\"is-dark-sample\",\"title\":\"\\u6df1\\u8272\\u6837\\u5f20\",\"desc\":\"\\u6df1\\u8272\\u6837\\u5f20\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"25!=\\u5bf9\\u6298\",\"37!=true\",\"19!=\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"19!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"19!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"30!=true\"]},\"39\":{\"category\":\"advanced\",\"name\":\"threshold\",\"title\":\"\\u9608\\u503c\",\"desc\":\"\\u9608\\u503c\",\"type\":\"int\",\"cur\":40,\"default\":40,\"size\":4,\"range\":{\"min\":30,\"max\":50},\"depend_or\":[\"37==true\",\"19==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"19==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"19==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"30==true\"]},\"40\":{\"category\":\"advanced\",\"name\":\"anti-noise-level\",\"title\":\"\\u80cc\\u666f\\u6297\\u566a\\u7b49\\u7ea7\",\"desc\":\"\\u80cc\\u666f\\u6297\\u566a\\u7b49\\u7ea7\",\"type\":\"int\",\"cur\":8,\"default\":8,\"size\":4,\"range\":{\"min\":1,\"max\":20},\"depend_or\":[\"37==true\",\"19==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"19==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"19==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"30==true\"]},\"41\":{\"category\":\"advanced\",\"name\":\"margin\",\"title\":\"\\u8fb9\\u7f18\\u7f29\\u8fdb\",\"desc\":\"\\u8fb9\\u7f18\\u7f29\\u8fdb\",\"type\":\"int\",\"cur\":5,\"default\":5,\"size\":4,\"range\":{\"min\":5,\"max\":30},\"depend_or\":[\"37==true\",\"19==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"19==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"30==true\",\"19==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\"]},\"42\":{\"category\":\"advanced\",\"name\":\"bkg-fill-mode\",\"title\":\"\\u80cc\\u666f\\u586b\\u5145\\u65b9\\u5f0f\",\"desc\":\"\\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\":[\"37==true\"]},\"43\":{\"category\":\"base\",\"name\":\"is-anti-permeate\",\"title\":\"\\u9632\\u6b62\\u6e17\\u900f\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"44\":{\"category\":\"base\",\"name\":\"permeate-level\",\"title\":\" \\u9632\\u6b62\\u6e17\\u900f\\u7b49\\u7ea7\",\"desc\":\"\",\"type\":\"string\",\"cur\":\"\\u8f83\\u5f31\",\"default\":\"\\u8f83\\u5f31\",\"size\":16,\"range\":[\"\\u5f31\",\"\\u8f83\\u5f31\",\"\\u4e00\\u822c\",\"\\u8f83\\u5f3a\",\"\\u5f3a\"],\"depend_or\":[\"43==true\"]},\"45\":{\"category\":\"base\",\"name\":\"is-rid-hole-l\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u5de6\\u4fa7\",\"desc\":\"\\u79fb\\u9664\\u7eb8\\u5f20\\u4e2d\\u7684\\u7a7f\\u5b54\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"46\":{\"category\":\"base\",\"name\":\"search-hole-range-l\",\"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},\"depend_or\":[\"45==true\"]},\"47\":{\"category\":\"base\",\"name\":\"is-rid-hole-r\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u53f3\\u4fa7\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"48\":{\"category\":\"base\",\"name\":\"search-hole-range-r\",\"title\":\" \\u53f3\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000},\"depend_or\":[\"47==true\"]},\"49\":{\"category\":\"base\",\"name\":\"is-rid-hole-t\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u4e0a\\u4fa7\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"50\":{\"category\":\"base\",\"name\":\"search-hole-range-t\",\"title\":\" \\u4e0a\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000},\"depend_or\":[\"49==true\"]},\"51\":{\"category\":\"base\",\"name\":\"is-rid-hole-b\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u4e0b\\u4fa7\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"52\":{\"category\":\"base\",\"name\":\"search-hole-range-b\",\"title\":\" \\u4e0b\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000},\"depend_or\":[\"51==true\"]},\"53\":{\"category\":\"base\",\"name\":\"is-fill-color\",\"title\":\"\\u8272\\u5f69\\u586b\\u5145\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"37==true\"]},\"54\":{\"category\":\"base\",\"name\":\"grp-4\",\"title\":\"\\u9001\\u7eb8\\u65b9\\u5f0f\\u8bbe\\u7f6e\",\"type\":\"group\"},\"55\":{\"category\":\"base\",\"name\":\"is-ultrosonic\",\"title\":\"\\u8d85\\u58f0\\u6ce2\\u68c0\\u6d4b\",\"desc\":\"\\u8d85\\u58f0\\u6ce2\\u68c0\\u6d4b\\u9001\\u7eb8\\u72b6\\u6001\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4},\"56\":{\"category\":\"base\",\"name\":\"scan-mode\",\"title\":\"\\u626b\\u63cf\\u5f20\\u6570\",\"desc\":\"\\u626b\\u63cf\\u7eb8\\u5f20\\u6570\\u91cf\",\"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\"]},\"57\":{\"category\":\"base\",\"name\":\"scan-count\",\"title\":\" \\u626b\\u63cf\\u6570\\u91cf\",\"desc\":\"\\u626b\\u63cf\\u6307\\u5b9a\\u6570\\u91cf\",\"type\":\"int\",\"cur\":1,\"default\":1,\"size\":4,\"depend_or\":[\"56==\\u626b\\u63cf\\u6307\\u5b9a\\u5f20\\u6570\"]},\"58\":{\"category\":\"base\",\"name\":\"direction\",\"title\":\"\\u6587\\u7a3f\\u65b9\\u5411\",\"desc\":\"\\u6587\\u7a3f\\u65b9\\u5411\",\"type\":\"string\",\"cur\":\"0\\u00b0\",\"default\":\"0\\u00b0\",\"size\":40,\"range\":[\"0\\u00b0\",\"90\\u00b0\",\"180\\u00b0\",\"-90\\u00b0\"]},\"59\":{\"category\":\"base\",\"name\":\"is-rotate-bkg-180\",\"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\":[\"25!=\\u5355\\u9762\",\"25!=\\u5bf9\\u6298\",\"58!=\\u81ea\\u52a8\\u6587\\u672c\\u65b9\\u5411\\u8bc6\\u522b\\u00b0\"]}}"); #else static std::string jsontext("{\"device_type\":\"G300\",\"option_count\":61,\"1\":{\"category\":\"base\",\"name\":\"restore\",\"title\":\"\\u6062\\u590d\\u9ed8\\u8ba4\\u8bbe\\u7f6e\",\"desc\":\"\\u6062\\u590d\\u9ed8\\u8ba4\\u8bbe\\u7f6e\",\"type\":\"button\",\"cur\":\"button\",\"default\":\"button\",\"size\":0},\"2\":{\"category\":\"advanced\",\"name\":\"help\",\"title\":\"\\u5e2e\\u52a9\",\"desc\":\"\\u663e\\u793a\\u8f6f\\u4ef6\\u5e2e\\u52a9\\u6587\\u6863\",\"type\":\"button\",\"cur\":\"true\",\"default\":\"true\",\"size\":4},\"3\":{\"category\":\"base\",\"name\":\"grp-1\",\"title\":\"\\u57fa\\u672c\\u8bbe\\u7f6e\",\"type\":\"group\"},\"4\":{\"category\":\"base\",\"name\":\"is-multiout\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"5\":{\"category\":\"base\",\"name\":\"multiout-type\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\\u7c7b\\u578b\",\"desc\":\"\",\"type\":\"string\",\"cur\":\"\\u65e0\",\"default\":\"\\u65e0\",\"size\":32,\"range\":[\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"\\u5f69\\u8272+\\u7070\\u5ea6\",\"\\u5f69\\u8272+\\u9ed1\\u767d\",\"\\u7070\\u5ea6+\\u9ed1\\u767d\"],\"depend_or\":[\"4==true\"]},\"6\":{\"category\":\"base\",\"name\":\"mode\",\"title\":\"\\u989c\\u8272\\u6a21\\u5f0f\",\"desc\":\"\\u8bbe\\u7f6e\\u989c\\u8272\\u4f4d\\u6df1\",\"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\":[\"4==false\"]},\"7\":{\"category\":\"base\",\"name\":\"binary-threshold\",\"title\":\"\\u9ed1\\u767d\\u56fe\\u50cf\\u9608\\u503c\",\"desc\":\"\",\"type\":\"int\",\"cur\":128,\"default\":128,\"size\":4,\"range\":{\"min\":0,\"max\":255},\"depend_or\":[\"6==\\u9ed1\\u767d\"]},\"8\":{\"category\":\"base\",\"name\":\"filter\",\"title\":\"\\u7070\\u5ea6\\u6216\\u9ed1\\u767d\\u56fe\\u50cf - \\u9664\\u8272\",\"desc\":\"\\u9664\\u53bb\\u56fe\\u50cf\\u5f69\\u8272\",\"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\":[\"4!=true\",\"6!=24\\u4f4d\\u5f69\\u8272\",\"6!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"9\":{\"category\":\"base\",\"name\":\"is-rid-multiout-red\",\"title\":\"24\\u4f4d\\u5f69\\u8272\\u56fe\\u50cf - \\u591a\\u6d41\\u8f93\\u51fa\\u9664\\u7ea2\",\"desc\":\"\\u591a\\u901a\\u9053\\u8f93\\u51fa\\u4e2d\\uff0c\\u53bb\\u9664\\u7ea2\\u8272\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"4!=true\",\"6!=256\\u7ea7\\u7070\\u5ea6\",\"6!=\\u9ed1\\u767d\",\"6!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"10\":{\"category\":\"base\",\"name\":\"is-rid-answer-sheet-red\",\"title\":\"24\\u4f4d\\u5f69\\u8272\\u56fe\\u50cf - \\u7b54\\u9898\\u5361\\u9664\\u7ea2\",\"desc\":\"\\u7b54\\u9898\\u5361\\u626b\\u63cf\\u4e2d\\u53bb\\u9664\\u7ea2\\u8272\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"4!=true\",\"6!=256\\u7ea7\\u7070\\u5ea6\",\"6!=\\u9ed1\\u767d\",\"6!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"11\":{\"category\":\"base\",\"name\":\"is-erase-bkg\",\"title\":\"\\u80cc\\u666f\\u79fb\\u9664\",\"desc\":\"\\u79fb\\u9664\\u5f69\\u8272\\u56fe\\u50cf\\u80cc\\u666f\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"4!=true\",\"6!=256\\u7ea7\\u7070\\u5ea6\",\"6!=\\u9ed1\\u767d\",\"6!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"12\":{\"category\":\"base\",\"name\":\"bkg-color-range\",\"title\":\" \\u80cc\\u666f\\u8272\\u5f69\\u6d6e\\u52a8\\u8303\\u56f4\",\"desc\":\"\\u8bbe\\u5b9a\\u80cc\\u666f\\u8272\\u5f69\\u7684\\u6d6e\\u52a8\\u8303\\u56f4\\uff0c\\u5728\\u8be5\\u8303\\u56f4\\u5185\\u7684\\u90fd\\u5f53\\u4f5c\\u80cc\\u666f\\u79fb\\u9664\",\"type\":\"int\",\"cur\":20,\"default\":20,\"size\":4,\"range\":{\"min\":1,\"max\":128},\"depend_or\":[\"11==true\"]},\"13\":{\"category\":\"base\",\"name\":\"sharpen\",\"title\":\"\\u9510\\u5316\\u4e0e\\u6a21\\u7cca\",\"desc\":\"\\u9510\\u5316\\u4e0e\\u6a21\\u7cca\",\"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\":[\"4!=true\",\"6!=\\u9ed1\\u767d\",\"6!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"14\":{\"category\":\"base\",\"name\":\"is-rid-morr\",\"title\":\"\\u53bb\\u9664\\u6469\\u5c14\\u7eb9\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"4!=true\",\"6!=\\u9ed1\\u767d\",\"6!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"15\":{\"category\":\"base\",\"name\":\"is-rid-grid\",\"title\":\"\\u9664\\u7f51\\u7eb9\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"4!=true\",\"6!=\\u9ed1\\u767d\",\"6!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"16\":{\"category\":\"base\",\"name\":\"is-err-extension\",\"title\":\"\\u9519\\u8bef\\u6269\\u6563\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"6==\\u9ed1\\u767d\"]},\"17\":{\"category\":\"base\",\"name\":\"is-noise-optimize\",\"title\":\"\\u9ed1\\u767d\\u56fe\\u50cf\\u566a\\u70b9\\u4f18\\u5316\",\"desc\":\"\\u566a\\u70b9\\u4f18\\u5316\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"6==\\u9ed1\\u767d\"]},\"18\":{\"category\":\"base\",\"name\":\"noise-size\",\"title\":\" \\u566a\\u70b9\\u4f18\\u5316\\u5c3a\\u5bf8\",\"desc\":\"\\u566a\\u70b9\\u4f18\\u5316\\u5c3a\\u5bf8\",\"type\":\"int\",\"cur\":30,\"default\":30,\"size\":4,\"range\":{\"min\":10,\"max\":50},\"depend_or\":[\"17==true\"]},\"19\":{\"category\":\"base\",\"name\":\"paper\",\"title\":\"\\u7eb8\\u5f20\\u5c3a\\u5bf8\",\"desc\":\"\\u8bbe\\u7f6e\\u7eb8\\u5f20\\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\"]},\"20\":{\"category\":\"base\",\"name\":\"is-custom-area\",\"title\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"19!=\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"19!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"19!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\"]},\"21\":{\"category\":\"base\",\"name\":\"tl-x\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u5de6\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\",\"type\":\"float\",\"cur\":0.000000,\"default\":0.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":210.000000},\"depend_and\":[\"20==true\"]},\"22\":{\"category\":\"base\",\"name\":\"br-x\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u53f3\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\",\"type\":\"float\",\"cur\":210.000000,\"default\":210.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":210.000000},\"depend_and\":[\"20==true\"]},\"23\":{\"category\":\"base\",\"name\":\"tl-y\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u4e0a\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\",\"type\":\"float\",\"cur\":0.000000,\"default\":0.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":297.000000},\"depend_and\":[\"20==true\"]},\"24\":{\"category\":\"base\",\"name\":\"br-y\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u4e0b\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\",\"type\":\"float\",\"cur\":297.000000,\"default\":297.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":297.000000},\"depend_and\":[\"20==true\"]},\"25\":{\"category\":\"base\",\"name\":\"page\",\"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\"]},\"26\":{\"category\":\"base\",\"name\":\"blank-sensitivity\",\"title\":\" \\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\u7075\\u654f\\u5ea6\",\"desc\":\"\\u7075\\u654f\\u5ea6\\u8d8a\\u9ad8\\uff0c\\u5219\\u8d8a\\u5bb9\\u6613\\u8df3\\u8fc7\",\"type\":\"int\",\"cur\":50,\"default\":50,\"size\":4,\"range\":{\"min\":1,\"max\":100},\"depend_or\":[\"25==\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u901a\\u7528\\uff09\",\"25==\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u53d1\\u7968\\u7eb8\\uff09\"]},\"27\":{\"category\":\"base\",\"name\":\"resolution\",\"title\":\"\\u5206\\u8fa8\\u7387\",\"desc\":\"\\u626b\\u63cf\\u4eea\\u5206\\u8fa8\\u7387\",\"type\":\"int\",\"cur\":200,\"default\":200,\"size\":4,\"range\":[100,150,200,300]},\"28\":{\"category\":\"base\",\"name\":\"is-exchange\",\"title\":\"\\u4ea4\\u6362\\u6b63\\u53cd\\u9762\",\"desc\":\"\\u4ea4\\u6362\\u6b63\\u53cd\\u9762\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"25!=\\u5355\\u9762\"]},\"29\":{\"category\":\"base\",\"name\":\"is-split\",\"title\":\"\\u56fe\\u50cf\\u62c6\\u5206\",\"desc\":\"\\u81ea\\u52a8\\u62c6\\u5206\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"25!=\\u5bf9\\u6298\"]},\"30\":{\"category\":\"base\",\"name\":\"is-anti-skew\",\"title\":\"\\u81ea\\u52a8\\u7ea0\\u504f\",\"desc\":\"\\u81ea\\u52a8\\u7ea0\\u504f\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4,\"depend_or\":[\"25!=\\u5bf9\\u6298\"]},\"31\":{\"category\":\"base\",\"name\":\"grp-2\",\"title\":\"\\u4eae\\u5ea6\",\"type\":\"group\"},\"32\":{\"category\":\"base\",\"name\":\"is-custom-gamma\",\"title\":\"\\u542f\\u7528\\u8272\\u8c03\\u66f2\\u7ebf\",\"desc\":\"\\u901a\\u8fc7\\u8272\\u8c03\\u66f2\\u7ebf\\u6765\\u8bbe\\u7f6e\\u56fe\\u50cf\\u4f3d\\u9a6c\\u503c\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"33\":{\"category\":\"base\",\"name\":\"brightness\",\"title\":\"\\u4eae\\u5ea6\\u503c\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u7247\\u4eae\\u5ea6\",\"type\":\"int\",\"cur\":128,\"default\":128,\"size\":4,\"range\":{\"min\":1,\"max\":255},\"depend_and\":[\"32==false\"]},\"34\":{\"category\":\"base\",\"name\":\"contrast\",\"title\":\"\\u5bf9\\u6bd4\\u5ea6\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u7247\\u5bf9\\u6bd4\\u5ea6\",\"type\":\"int\",\"cur\":4,\"default\":4,\"size\":4,\"range\":{\"min\":1,\"max\":7},\"depend_and\":[\"32==false\"]},\"35\":{\"category\":\"base\",\"name\":\"gamma\",\"title\":\"\\u4f3d\\u9a6c\\u503c\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u7247\\u4f3d\\u9a6c\\u503c\",\"type\":\"float\",\"cur\":1.000000,\"default\":1.000000,\"size\":4,\"range\":{\"min\":0.010000,\"max\":5.000000},\"depend_and\":[\"32==false\"]},\"36\":{\"category\":\"base\",\"name\":\"grp-3\",\"title\":\"\\u56fe\\u50cf\\u5904\\u7406\",\"type\":\"group\"},\"37\":{\"category\":\"base\",\"name\":\"is-photo-mode\",\"title\":\"\\u7167\\u7247\\u6a21\\u5f0f\",\"desc\":\"\\u9009\\u62e9\\u8be5\\u6a21\\u5f0f\\u4ee5\\u4fdd\\u7559\\u56fe\\u7247\\u6c34\\u5370\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"38\":{\"category\":\"base\",\"name\":\"is-erase-black-frame\",\"title\":\"\\u6d88\\u9664\\u9ed1\\u6846\",\"desc\":\"\\u6d88\\u9664\\u9ed1\\u6846\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4},\"39\":{\"category\":\"base\",\"name\":\"is-dark-sample\",\"title\":\"\\u6df1\\u8272\\u6837\\u5f20\",\"desc\":\"\\u6df1\\u8272\\u6837\\u5f20\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"25!=\\u5bf9\\u6298\",\"38!=true\",\"19!=\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"19!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"19!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"30!=true\"]},\"40\":{\"category\":\"advanced\",\"name\":\"threshold\",\"title\":\"\\u9608\\u503c\",\"desc\":\"\\u9608\\u503c\",\"type\":\"int\",\"cur\":40,\"default\":40,\"size\":4,\"range\":{\"min\":30,\"max\":50},\"depend_or\":[\"38==true\",\"19==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"19==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"19==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"30==true\"]},\"41\":{\"category\":\"advanced\",\"name\":\"anti-noise-level\",\"title\":\"\\u80cc\\u666f\\u6297\\u566a\\u7b49\\u7ea7\",\"desc\":\"\\u80cc\\u666f\\u6297\\u566a\\u7b49\\u7ea7\",\"type\":\"int\",\"cur\":8,\"default\":8,\"size\":4,\"range\":{\"min\":1,\"max\":20},\"depend_or\":[\"38==true\",\"19==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"19==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"19==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"30==true\"]},\"42\":{\"category\":\"advanced\",\"name\":\"margin\",\"title\":\"\\u8fb9\\u7f18\\u7f29\\u8fdb\",\"desc\":\"\\u8fb9\\u7f18\\u7f29\\u8fdb\",\"type\":\"int\",\"cur\":5,\"default\":5,\"size\":4,\"range\":{\"min\":5,\"max\":30},\"depend_or\":[\"38==true\",\"19==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"19==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"30==true\",\"19==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\"]},\"43\":{\"category\":\"advanced\",\"name\":\"bkg-fill-mode\",\"title\":\"\\u80cc\\u666f\\u586b\\u5145\\u65b9\\u5f0f\",\"desc\":\"\\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\":[\"38==true\"]},\"44\":{\"category\":\"base\",\"name\":\"is-anti-permeate\",\"title\":\"\\u9632\\u6b62\\u6e17\\u900f\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"45\":{\"category\":\"base\",\"name\":\"permeate-level\",\"title\":\" \\u9632\\u6b62\\u6e17\\u900f\\u7b49\\u7ea7\",\"desc\":\"\",\"type\":\"string\",\"cur\":\"\\u8f83\\u5f31\",\"default\":\"\\u8f83\\u5f31\",\"size\":16,\"range\":[\"\\u5f31\",\"\\u8f83\\u5f31\",\"\\u4e00\\u822c\",\"\\u8f83\\u5f3a\",\"\\u5f3a\"],\"depend_or\":[\"44==true\"]},\"46\":{\"category\":\"base\",\"name\":\"is-rid-hole-l\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u5de6\\u4fa7\",\"desc\":\"\\u79fb\\u9664\\u7eb8\\u5f20\\u4e2d\\u7684\\u7a7f\\u5b54\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"47\":{\"category\":\"base\",\"name\":\"search-hole-range-l\",\"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},\"depend_or\":[\"46==true\"]},\"48\":{\"category\":\"base\",\"name\":\"is-rid-hole-r\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u53f3\\u4fa7\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"49\":{\"category\":\"base\",\"name\":\"search-hole-range-r\",\"title\":\" \\u53f3\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000},\"depend_or\":[\"48==true\"]},\"50\":{\"category\":\"base\",\"name\":\"is-rid-hole-t\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u4e0a\\u4fa7\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"51\":{\"category\":\"base\",\"name\":\"search-hole-range-t\",\"title\":\" \\u4e0a\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000},\"depend_or\":[\"50==true\"]},\"52\":{\"category\":\"base\",\"name\":\"is-rid-hole-b\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u4e0b\\u4fa7\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"53\":{\"category\":\"base\",\"name\":\"search-hole-range-b\",\"title\":\" \\u4e0b\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000},\"depend_or\":[\"52==true\"]},\"54\":{\"category\":\"base\",\"name\":\"is-fill-color\",\"title\":\"\\u8272\\u5f69\\u586b\\u5145\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"38==true\"]},\"55\":{\"category\":\"base\",\"name\":\"grp-4\",\"title\":\"\\u9001\\u7eb8\\u65b9\\u5f0f\\u8bbe\\u7f6e\",\"type\":\"group\"},\"56\":{\"category\":\"base\",\"name\":\"is-ultrosonic\",\"title\":\"\\u8d85\\u58f0\\u6ce2\\u68c0\\u6d4b\",\"desc\":\"\\u8d85\\u58f0\\u6ce2\\u68c0\\u6d4b\\u9001\\u7eb8\\u72b6\\u6001\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4},\"57\":{\"category\":\"base\",\"name\":\"scan-mode\",\"title\":\"\\u626b\\u63cf\\u5f20\\u6570\",\"desc\":\"\\u626b\\u63cf\\u7eb8\\u5f20\\u6570\\u91cf\",\"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\"]},\"58\":{\"category\":\"base\",\"name\":\"scan-count\",\"title\":\" \\u626b\\u63cf\\u6570\\u91cf\",\"desc\":\"\\u626b\\u63cf\\u6307\\u5b9a\\u6570\\u91cf\",\"type\":\"int\",\"cur\":1,\"default\":1,\"size\":4,\"depend_or\":[\"57==\\u626b\\u63cf\\u6307\\u5b9a\\u5f20\\u6570\"]},\"59\":{\"category\":\"base\",\"name\":\"direction\",\"title\":\"\\u6587\\u7a3f\\u65b9\\u5411\",\"desc\":\"\\u6587\\u7a3f\\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\"]},\"60\":{\"category\":\"base\",\"name\":\"is-rotate-bkg-180\",\"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\":[\"25!=\\u5355\\u9762\",\"25!=\\u5bf9\\u6298\",\"59!=\\u81ea\\u52a8\\u6587\\u672c\\u65b9\\u5411\\u8bc6\\u522b\\u00b0\"]}}"); #endif namespace settingsdsp_300 { scanner_err device_status_to_hg_err(int usbdata) { scanner_err code = SCANNER_ERR_NO_DATA; switch (usbdata) { case HAVE_IMAGE: code = SCANNER_ERR_OK; break; case STOP_SCAN: code = SCANNER_ERR_DEVICE_STOPPED; break; case COUNT_MODE: code = SCANNER_ERR_DEVICE_COUNT_MODE; break; case NO_FEED: code = SCANNER_ERR_DEVICE_NO_PAPER; break; case OPEN_COVER: code = SCANNER_ERR_DEVICE_COVER_OPENNED; break; case FEED_IN_ERROR: code = SCANNER_ERR_DEVICE_FEEDING_PAPER; break; case PAPER_JAM: code = SCANNER_ERR_DEVICE_PAPER_JAMMED; break; case DETECT_DOUBLE_FEED: code = SCANNER_ERR_DEVICE_DOUBLE_FEEDING; break; case DETECT_STAPLE: code = SCANNER_ERR_DEVICE_STAPLE_ON; break; case PAPER_SKEW: code = SCANNER_ERR_DEVICE_PAPER_SKEW; break; case HARDWARE_ERROR: code = SCANNER_ERR_DEVICE_NOT_SUPPORT; break; case PC_SCAN_BUSY_or_ERROR: code = SCANNER_ERR_DEVICE_PC_BUSY; break; case SIZE_ERROR: code = SCANNER_ERR_DEVICE_SIZE_CHECK; break; default: code = SCANNER_ERR_NO_DATA; break; } return code; } static struct { int paper; TwSS type; int dev_value; }paper_map[] = { {PAPER_A3, TwSS::A3, G400_A3}, {PAPER_A4, TwSS::A4, G400_A4}, {PAPER_A4_LATERAL, TwSS::A4, G400_A4R}, {PAPER_A5, TwSS::A5, G400_A5}, {PAPER_A5_LATERAL, TwSS::A5, G400_A5R}, {PAPER_A6, TwSS::A6, G400_A6}, {PAPER_A6_LATERAL, TwSS::A6, G400_A6R}, {PAPER_B4, TwSS::B4, G400_B4}, {PAPER_B5, TwSS::B5, G400_B5}, {PAPER_B5_LATERAL, TwSS::B5, G400_B5R}, {PAPER_B6, TwSS::B6, G400_B6}, {PAPER_B6_LATERAL, TwSS::B6, G400_B6R}, {PAPER_LETTER, TwSS::USLetter, G400_LETTER}, {PAPER_LETTER_LATERAL, TwSS::USLetter, G400_LETTERR}, {PAPER_DOUBLE_LETTER, TwSS::USLedger, G400_DOUBLELETTER}, {PAPER_LEGAL, TwSS::USLegal, G400_LEGAL}, {PAPER_AUTO_MATCH, TwSS::None, G400_A4}, {PAPER_MAX_SIZE_CLIP, TwSS::USStatement, G400_MAXSIZE}, {PAPER_MAX_SIZE, TwSS::MaxSize, G400_MAXSIZE} }; 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); ++i) { if (paper == paper_map[i].paper) { ind = i; break; } } if (paper == paper_map[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[ind].dev_value); paper = paper_map[ind].paper; if (type) *type = paper_map[ind].type; return ind; } } enum hg_239_setting_item { HG_239_SETTING_RESTORE = 1, // 恢复默认设置 HG_239_SETTING_HELP, // 帮助 HG__239_SETTING_GROUP_1, HG_239_SETTING_COLOR_MODE, // 颜色模式 HG_239_SETTING_ERASE_COLOR, // 除色 HG_239_SETTING_ERASE_MULTI_RED, // 多流输出除红 HG_239_SETTING_ERASE_ANSWER_RED, // 答题卡除红 HG_239_SETTING_ERASE_BACKGROUND, // 移除背景 HG_239_SETTING_ERASE_BKG_RANGE, // 移除背景范围 HG_239_SETTING_NOISE, // 黑白图像噪点优化 HG_239_SETTING_NOISE_SIZE, // 噪点优化尺寸 HG_239_SETTING_PAPER_SIZE, // 纸张尺寸 HG_300_SETTING_CUSTOM_AREA, // 自定义扫描区域 HG_300_SETTING_CUSTOM_AREA_LEFT, // 扫描区域左侧(mm) HG_300_SETTING_CUSTOM_AREA_RIGHT, // 扫描区域右侧(mm) HG_300_SETTING_CUSTOM_AREA_TOP, // 扫描区域上侧(mm) HG_300_SETTING_CUSTOM_AREA_BOTTOM, // 扫描区域下侧(mm) //HG_239_SETTING_PAPER_SIZE_CHECK, // 尺寸检测 HG_239_SETTING_PAGE, // 扫描页面 HG_239_SETTING_SKIP_NILL, // 跳过空白页灵敏度 HG_239_SETTING_RESOLUTION, // 分辨率 HG_239_SETTING_REVERSE, // 交换正反面 HG_239_SETTING_SPLIT, // 图像拆分 HG_239_SETTING_CORRECT, // 自动纠偏 HG_239_SETTING_ERASE_HOLE, // 穿孔移除 HG_239_SETTING_HOLE_SEARCH, // 穿孔搜索范围 HG__239_SETTING_GROUP_2, HG_300_SETTING_CUSTOM_GAMMA, // 启用色调曲线 HG_239_SETTING_LIGHT, // 亮度 HG_239_SETTING_CONTRAST, // 对比度 HG_239_SETTING_GAMMA, // 伽玛 HG__239_SETTING_GROUP_3, HG_239_SETTING_SHARP, // 锐化与模糊 HG_239_SETTING_ERASE_BLACK_BORDER, // 消除黑框 HG_239_SETTING_SAMPLE, // 深色样张 HG_239_SETTING_THRESHOLD, // 阈值 HG_239_SETTING_ANTI_NOISE, // 背景抗噪等级 HG_239_SETTING_MARGIN, // 边缘缩进 HG_239_SETTING_FILLING, // 背景填充方式 HG_239_SETTING_PERMEATE, // 防止渗透 HG_239_SETTING_PERMEATE_lv, // 防止渗透等级 HG_239_SETTING_REMOVE_MORR, // 去除摩尔纹 HG_239_SETTING_ERROR_EXTENTION, // 错误扩散 HG_239_SETTING_REMOVE_TXTTURE, // 除网纹 HG__239_SETTING_GROUP_4, HG_239_SETTING_ULTRASONIC, // 超声波检测 HG_239_SETTING_SCAN_METHOD, // 连续扫描或扫描指定张数 HG_239_SETTING_SCAN_COUNT, // 扫描指定数量 HG_239_SETTING_DIRECTION, // 文稿方向 删除文稿自动识别 HG_239_SETTING_ROTATE, // 背面旋转180° HG_239_SETTING_END, //暂时屏蔽 HG_239_SETTING_MULTI_OUT = 500, // 多流输出 }; hg_scanner_300::hg_scanner_300(const char* dev_name,int pid, usb_io* io) : hg_scanner(G100Serial, dev_name, io),pid_(pid),papersize(pid) { string fw = get_firmware_version(); initdevice(); #ifndef MAPPING_FUNCTION_IN_BASE init_setting_map(setting_map_, ARRAY_SIZE(setting_map_));//优先初始化 #endif if (init_settings(0x300)) init_settings(jsontext.c_str()); printf_devconfig(); } hg_scanner_300::~hg_scanner_300() {} int hg_scanner_300::on_scanner_closing(bool force) { return SCANNER_ERR_OK; } void hg_scanner_300::thread_handle_usb_read(void) { int ret = SCANNER_ERR_OK, status = SCANNER_ERR_OK; StopWatch sw; SANE_Image_Statu statu = SANE_Image_Statu_OK; savestatus_.clear(); while (run_) { USBCB usb={0}; ret = get_scanner_status(usb); //printf("usb.u32_Data = %d ret = %d\r\n",usb.u32_Data,ret); ////如果设备出现卡纸 或者双张等设备信息问题,需要等到设备进行发送stop才能停止。 所以始终以 "停止" 消息为结束信号 ////如果有图的情况下,并且卡纸或双张等,设备会先发送卡纸双张信息。所以接受到错误信息之后,仍需要把图像取出来。 if (ret == SCANNER_ERR_DEVICE_STOPPED) { if (!savestatus_.empty()) { status_ = savestatus_[0]; //以第一个消息为准 } else { status_ = SCANNER_ERR_OK; } savestatus_.clear(); break; } if (ret != SCANNER_ERR_OK && ret != SCANNER_ERR_DEVICE_STOPPED && ret != SCANNER_ERR_NO_DATA) { statu = last_usb_image_statu(ret); savestatus_.push_back(ret); } else statu = SANE_Image_Statu_OK; if (sw.elapsed_ms() > 30000)//防止状态信息一直取不上来导致卡死 { if (!savestatus_.empty()) { status_ = savestatus_[0]; } else { status_ = SCANNER_ERR_TIMEOUT; } savestatus_.clear(); hg_log::log(LOG_LEVEL_WARNING, "get status timeout,get image out\n"); break; } if (ret == SCANNER_ERR_OK && usb.u32_Count > 0) { int totalNum = usb.u32_Count & 0x3fffffff; // 2022-08-04: 兼容Android,默认图片大小均在1GB以内 if (totalNum) { std::shared_ptr imagedata(aquire_memory(totalNum)); if (!imagedata.get()) { status_ = SCANNER_ERR_INSUFFICIENT_MEMORY; break; } imagedata->set_image_statu(statu); ret = get_img_data(imagedata); //io_->set_timeout(200); if (ret == SCANNER_ERR_OK) { ret = pop_image(); sw.reset(); if (ret != SCANNER_ERR_OK) { status_ = ret; break; } } else { status_ = ret; break; } } } this_thread::sleep_for(chrono::milliseconds(10)); } } int hg_scanner_300::start(void) { bool handled = false; int ret = try_third_app_handle_start(handled), count = -1; user_cancel_ = false; // for third-sane-app invoking, added on 2022-05-19 if (handled) return ret; ret = writedown_device_configuration(true); if (ret == SCANNER_ERR_OK) writedown_image_configuration(); else { status_ = ret; return ret; } printf_devconfig(); ret = get_scan_is_sleep(); if (ret == SCANNER_ERR_DEVICE_SLEEPING) { status_ = ret; notify_ui_working_status(STATU_DESC_SCANNER_ERR_DEVICE_SLEEPING, SANE_EVENT_ERROR, status_); notify_ui_working_status(STATU_DESC_SCANNER_ERR_DEVICE_NOTIFY_SLEEP, SANE_EVENT_ERROR, status_); VLOG_MINI_1(LOG_LEVEL_WARNING, "device start status is(%s)\n", STATU_DESC_SCANNER_ERR_DEVICE_SLEEPING); return ret; } ret = get_scanner_paperon(); if (ret == SCANNER_ERR_DEVICE_NO_PAPER) { status_ = ret; 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", STATU_DESC_SCANNER_ERR_DEVICE_NO_PAPER); return ret; } USBCB usb = {START_COMMAND, img_conf_.scannum, 0}; ret = writeusb(usb); //io_->set_timeout(500); if(ret == SCANNER_ERR_OK) { //status_ = SCANNER_ERR_DEVICE_BUSY; wait_usb_.notify(); std::this_thread::sleep_for(std::chrono::milliseconds(300)); ret = try_third_app_after_start(ret); } else status_ = ret; VLOG_MINI_1(LOG_LEVEL_WARNING, "start result: %s\n", hg_scanner_err_name(ret)); return ret; } int hg_scanner_300::stop(void) { int ret = SCANNER_ERR_OK; USBCB usbcb = {STOP, 0, 0}; ret = writeusb(usbcb); if (status_ == SCANNER_ERR_DEVICE_BUSY) { LOG_INFO(LOG_LEVEL_DEBUG_INFO,"stop status is busy\r\n"); std::this_thread::sleep_for(std::chrono::milliseconds(2000)); } user_cancel_ = true; if (ret == SCANNER_ERR_OK) { status_ = SCANNER_ERR_DEVICE_STOPPED; } //final_imgs_.clear(); return status_; } int hg_scanner_300::writeusb(USBCB &usb) { std::lock_guard lock(io_lock_); int ret = SCANNER_ERR_OK; int len = sizeof(usb); ret = io_->write_bulk(&usb,&len); if (ret) { status_ = ret; } return ret; } int hg_scanner_300::readusb(USBCB &usb) { std::lock_guard lock(io_lock_); int ret = SCANNER_ERR_OK; int len = sizeof(USBCB); ret = io_->read_bulk(&usb,&len); if (ret) { status_ = ret; } return ret; } int hg_scanner_300::pop_image() { int ret = SCANNER_ERR_OK; USBCB usbcb = {POP_IMAGE, 0, 0}; ret = writeusb(usbcb); return ret; } int hg_scanner_300::get_scanner_status(USBCB &usb) { int ret = SCANNER_ERR_OK; usb = {GET_DSP_STATUS, 0, 0}; ret = writeusb(usb); if (ret != SCANNER_ERR_OK) return ret; //io_->set_timeout(200); //必要延时,且不能小于这个数值 ret = readusb(usb); if (ret != SCANNER_ERR_OK) { status_ = ret; return ret; } scanner_err code = settingsdsp_300::device_status_to_hg_err(usb.u32_Data); return code ; } int hg_scanner_300::get_img_data(std::shared_ptr &imagedata) { int total = imagedata->size(), ret = SCANNER_ERR_OK, index = 0, block = total; USBCB usb{GET_IMAGE, 0, total}; ret = writeusb(usb); if (ret != SCANNER_ERR_OK) { status_ = ret; return ret; } //io_->set_timeout(500); printf_devconfig(); 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); if (ret != SCANNER_ERR_OK) { status_ = ret; return ret; } index += block; total -= block; } if (ret == SCANNER_ERR_OK) { ret = save_usb_data(imagedata); } status_ = ret; return ret; } void hg_scanner_300::image_process(std::shared_ptr& buffer) { int ret = SCANNER_ERR_OK; hg_imgproc::HIMGPRC handle = get_image_process_object(pid_); hg_imgproc::IMGHEAD ih; int err = SCANNER_ERR_OK, index = 0; void* buf = NULL; hg_imgproc::load_buffer(handle, buffer); hg_imgproc::decode(handle,pid_); /////////////////////////////////////111111111111111111111111111////////////////////////////////// ret = hg_imgproc::auto_crop(handle); //首次必须先调用这个算法 // if (img_conf_.en_sizecheck) // { // VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"img_conf_.en_sizecheck :%d\r\n",img_conf_.en_sizecheck); // printf("img_conf_.en_sizecheck = %d\r\n",img_conf_.en_sizecheck); // ret = hg_imgproc::size_detection(handle); // VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"img_conf_.en_sizecheck ret:%d\r\n",ret); // if (ret == SCANNER_ERR_DEVICE_SIZE_CHECK) // { // status_ = SCANNER_ERR_DEVICE_SIZE_CHECK; // return ; // } // } if (!isremove_left_hole) { isremove_top_hole_threshold = 0; } if (!isremove_right_hole) { isremove_right_hole_threshold = 0; } if (!isremove_top_hole) { isremove_top_hole_threshold = 0; } if (!isremove_low_hole) { isremove_low_hole_threshold = 0; } if (isremove_left_hole || isremove_right_hole || isremove_top_hole || isremove_low_hole) { ret = hg_imgproc::fillhole(handle, isremove_top_hole_threshold, isremove_low_hole_threshold, isremove_left_hole_threshold, isremove_right_hole_threshold); } if (img_conf_.is_autodiscradblank_normal || img_conf_.is_autodiscradblank_vince) { ret = hg_imgproc::discardBlank(handle); //HG_LOGHG_LOG_LEVEL_DEBUG_INFO,"丢弃空白页开启\r\n"); } if(img_conf_.fadeback) { hg_imgproc::fadeback(handle,img_conf_.fadebackrange, img_conf_.is_duplex); //HG_LOGHG_LOG_LEVEL_DEBUG_INFO,"背景除色开启\r\n"); } if (img_conf_.resolution_dst != img_conf_.resolution_native) { hg_imgproc::resolution_change(handle); //HG_LOGHG_LOG_LEVEL_DEBUG_INFO,"dpi改变开启\r\n"); } if (img_conf_.cropRect.enable && !img_conf_.is_autocrop) { hg_imgproc::croprect(handle); //HG_LOGHG_LOG_LEVEL_DEBUG_INFO,"手动裁图开启\r\n"); } if (img_conf_.filter != ColorFilter::FILTER_NONE && (img_conf_.pixtype == COLOR_MODE_BLACK_WHITE || img_conf_.pixtype == COLOR_MODE_256_GRAY)) { hg_imgproc::channel(handle); //HG_LOGHG_LOG_LEVEL_DEBUG_INFO,"除色开启\r\n"); } /////////////////////////////////////2222222222222222222222222222222222222////////////////////////////////// adjust_color(handle); if (img_conf_.pixtype == COLOR_MODE_24_BITS && img_conf_.hsvcorrect) { hg_imgproc::answerSheetFilterRed(handle); //HG_LOGHG_LOG_LEVEL_DEBUG_INFO,"答题卡出红开启\r\n"); } if (img_conf_.refuseInflow) { int lv = 5; if (image_prc_param_.bits.is_permeate_lv_ == 0) lv = 5; else if (image_prc_param_.bits.is_permeate_lv_ == 1) lv = 15; else if (image_prc_param_.bits.is_permeate_lv_ == 2) lv = 25; else if (image_prc_param_.bits.is_permeate_lv_ == 3) lv = 35; else if (image_prc_param_.bits.is_permeate_lv_ == 4) lv = 45; hg_imgproc::antiInflow(handle,lv); } if (img_conf_.colorCorrection && img_conf_.pixtype != COLOR_MODE_BLACK_WHITE) { hg_imgproc::colorCorrection(handle); //HG_LOGHG_LOG_LEVEL_DEBUG_INFO,"颜色校正开启\r\n"); } if ((img_conf_.imageRotateDegree != TEXT_DIRECTION_0 || img_conf_.is_backrotate180) && (!img_conf_.is_autotext)) { hg_imgproc::orentation(handle); //HG_LOGHG_LOG_LEVEL_DEBUG_INFO,"自动旋转开启\r\n"); } if (img_conf_.removeMorr) { hg_imgproc::textureRemove(handle); //HG_LOGHG_LOG_LEVEL_DEBUG_INFO,"除摩尔纹开启\r\n"); } if (img_conf_.detachnoise.is_detachnoise) { hg_imgproc::nosieDetach(handle); //HG_LOGHG_LOG_LEVEL_DEBUG_INFO,"噪点优化开启\r\n"); } if (img_conf_.pixtype == COLOR_MODE_BLACK_WHITE) { hg_imgproc::errorextention(handle); //HG_LOGHG_LOG_LEVEL_DEBUG_INFO,"黑白图处理开启\r\n"); } if (img_conf_.en_fold) { hg_imgproc::fold(handle); //HG_LOGHG_LOG_LEVEL_DEBUG_INFO,"对折开启\r\n"); } /////////////////////////////////// if (img_conf_.multi_output_red && img_conf_.pixtype == COLOR_MODE_24_BITS) { err = hg_imgproc::multi_out_red(handle); //HG_LOGHG_LOG_LEVEL_DEBUG_INFO,"多流出红开启\r\n"); } if (img_conf_.sharpen) { hg_imgproc::sharpenType(handle); } if (img_conf_.splitImage) { int colormode=1; if(img_conf_.filter == RID_COLOR_NONE) colormode=img_conf_.pixtype; err = hg_imgproc::split(handle,img_conf_.multiOutput,img_conf_.splitImage,img_conf_.multi_output_red,colormode,img_conf_.is_duplex,0); VLOG_MINI_5(LOG_LEVEL_DEBUG_INFO, "img split-> multiOutput is:%d splitImage is:%d multi_output_red is:%d pixtype is:%d is_duplex:%d\r\n" ,img_conf_.multiOutput ,img_conf_.splitImage ,img_conf_.multi_output_red ,img_conf_.pixtype ,img_conf_.is_duplex); //HG_LOGHG_LOG_LEVEL_DEBUG_INFO,"图像拆分开启\r\n"); } if (!img_conf_.splitImage || !img_conf_.multi_output_red || !is_multiout) { if(img_conf_.automaticcolor) { hg_imgproc::auto_matic_color(handle,img_conf_.automaticcolortype); //HG_LOGHG_LOG_LEVEL_DEBUG_INFO,"颜色自动识别开启\r\n"); } } if (img_conf_.is_autotext) { printf("文本方向自动识别\r\n"); hg_imgproc::ocr_auto_txtdirect(handle); } //多流输出最后处理 if (is_multiout) { int multi_out = img_conf_.multiOutput; err = hg_imgproc::multi_out(handle,multi_out); } hg_imgproc::final(handle); while (hg_imgproc::get_final_data(handle, &ih, &buf, index++) == SCANNER_ERR_OK) { VLOG_MINI_5(LOG_LEVEL_DEBUG_INFO, "Final picture %d (%d * %d * %d) with %u bytes!\n", index , ih.width, ih.height, ih.bits * ih.channels, ih.total_bytes); if(!img_type_.empty()) { std::vectorbmpdata; //cv::imencode(img_type_,*((cv::Mat*)buf),bmpdata); hg_imgproc::imgtypechange(handle,img_type_,buf,bmpdata); if(bmpdata.empty()) { status_ = SCANNER_ERR_NO_DATA; return ; } buf = bmpdata.data(); ih.total_bytes = bmpdata.size(); VLOG_MINI_6(LOG_LEVEL_DEBUG_INFO, "Set img type is:%s Final picture %d (%d * %d * %d) with %u bytes!\n",img_type_.c_str() ,index , ih.width, ih.height, ih.bits * ih.channels, ih.total_bytes); } save_final_image(&ih, buf); } hg_imgproc::release(handle); } int hg_scanner_300::writedown_device_configuration(bool type,HGSCANCONF_G400 *d) { if (!type) return SCANNER_ERR_OK; int ret = SCANNER_ERR_OK, len = 0; if (!d) { dsp_config.params.lutmode = keep_watermark_; d = &dsp_config; } USBCB usbcb = {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_300::on_color_mode_changed(int& color_mode) { int ret = SCANNER_ERR_OK; // if ((((color_mode == COLOR_MODE_24_BITS || color_mode == COLOR_MODE_AUTO_MATCH) && !dsp_config.params.color) || // ((color_mode != COLOR_MODE_24_BITS && color_mode != COLOR_MODE_AUTO_MATCH) && dsp_config.params.color)) && color_mode != -1) // { // printf("color_mode111111111111111111111 =%d\r\n",color_mode); // dsp_config.params.color ^= 1; // //ret = writedown_device_configuration(); // printf("on_color_mode_changed ret =%d\r\n",ret); // if(ret) // dsp_config.params.color ^= 1; // } if (color_mode == COLOR_MODE_BLACK_WHITE || color_mode == COLOR_MODE_256_GRAY) { dsp_config.params.isColor = 0; } else if(color_mode == COLOR_MODE_24_BITS || color_mode == COLOR_MODE_AUTO_MATCH) { dsp_config.params.isColor = 1; } HGSCANCONF_G400 d = dsp_config; if(image_prc_param_.bits.rid_color != RID_COLOR_NONE && image_prc_param_.bits.color_mode == COLOR_MODE_256_GRAY && color_mode == -1) { d.params.isColor = 1; } else if (image_prc_param_.bits.rid_color == RID_COLOR_NONE && image_prc_param_.bits.color_mode == COLOR_MODE_256_GRAY && color_mode == -1) { d.params.isColor = 0; } if(color_mode == -1) ret = writedown_device_configuration(false,&d); return ret; } int hg_scanner_300::on_paper_changed(int& paper) { bool exact = true; int ind = settingsdsp_300::match_best_paper(paper, &exact, &paper_size_), ret = exact ? SCANNER_ERR_OK : SCANNER_ERR_NOT_EXACT; if (dsp_config.params.pageSize != settingsdsp_300::paper_map[ind].dev_value) { int old = dsp_config.params.pageSize; dsp_config.params.pageSize = settingsdsp_300::paper_map[ind].dev_value; ret = writedown_device_configuration(); if (ret) { dsp_config.params.pageSize = old; for (int i = 0; i < ARRAY_SIZE(settingsdsp_300::paper_map); ++i) { if (settingsdsp_300::paper_map[i].dev_value == old) { paper = settingsdsp_300::paper_map[i].paper; break; } } } else if (!exact) ret = SCANNER_ERR_NOT_EXACT; } return ret; } int hg_scanner_300::on_paper_check_changed(bool& check) { int ret = SCANNER_ERR_OK; if(dsp_config.params.enableSizeDetect ^ check) { dsp_config.params.enableSizeDetect = check; ret = writedown_device_configuration(); if (ret) { dsp_config.params.enableSizeDetect = !check; check = dsp_config.params.enableSizeDetect; } } return ret; } int hg_scanner_300::on_resolution_changed(int& dpi) { int ret = SCANNER_ERR_OK; dsp_config.params.dpi = 1; ret = writedown_device_configuration(); return ret; } int hg_scanner_300::on_ultrasonic_check_changed(bool& check) { int ret = SCANNER_ERR_OK; if (dsp_config.params.doubleFeeded ^ check) { dsp_config.params.doubleFeeded = check; ret = writedown_device_configuration(); if (ret) { dsp_config.params.doubleFeeded = !check; check = dsp_config.params.doubleFeeded; } } return ret; } int hg_scanner_300::agreement(TwSS tw,int align) { int ret = SCANNER_ERR_OK; SIZE size; HGSCANCONF_G400 d = dsp_config; size = papersize.GetPaperSize(TwSS::A4,200,align); dsp_config.params.dstHeight = (int)((size.cy + 200)/100); if (img_conf_.is_autocrop) { dsp_config.params.pageSize = G400_AUTO; } if (img_conf_.filter != 3) { d.params.isColor = 1; } ret = writedown_device_configuration(true,&d); //io_->set_timeout(200); return ret; } int hg_scanner_300::initdevice() { dsp_config.value = 0; dsp_config.params.enableLed = 1; dsp_config.params.isCorrect = 1; dsp_config.params.reversed1 = 0; dsp_config.params.reversed2 = 0; dsp_config.params.enableSizeDetect =0; writedown_device_configuration(true); printf_devconfig(); return SCANNER_ERR_OK; } void hg_scanner_300::writedown_image_configuration(void) { SCANCONF ic; ic.papertype = paper_size_; if (is_lateral(image_prc_param_.bits.paper)) ic.paperAlign = Rot270; // else if (image_prc_param_.bits.text_direction == TEXT_DIRECTION_AUTO) // ic.paperAlign = AutoTextOrientation; else ic.paperAlign = Rot0; ic.en_sizecheck = dsp_config.params.enableSizeDetect; if (image_prc_param_.bits.text_direction != TEXT_DIRECTION_AUTO) ic.imageRotateDegree = image_prc_param_.bits.text_direction; else ic.imageRotateDegree = 0; ic.is_duplex = (image_prc_param_.bits.page == PAGE_DOUBLE || image_prc_param_.bits.page == PAGE_OMIT_EMPTY || image_prc_param_.bits.page == PAGE_OMIT_EMPTY_RECEIPT || image_prc_param_.bits.page ==PAGE_FOLIO); ic.en_fold = (image_prc_param_.bits.page == PAGE_FOLIO); ic.pixtype = image_prc_param_.bits.color_mode == COLOR_MODE_AUTO_MATCH ? 2 : image_prc_param_.bits.color_mode; ic.automaticcolor = is_auto_matic_color; ic.automaticcolortype = 1;// ic.pixtype; //存疑 ic.resolution_dst = resolution_; ic.resolution_native = 200; ic.gamma = (float)gamma_; ic.contrast = (float)contrast_ ; ic.brightness = (float)bright_ ; ic.threshold = threshold_; ic.is_autocontrast = 0; //无参数 ic.is_autocrop = (ic.papertype == TwSS::None || ic.papertype ==TwSS::USStatement); ic.is_autodiscradblank_normal = image_prc_param_.bits.page == PAGE_OMIT_EMPTY; ic.discardblank_percent = omit_empty_level_ > 70 ? 70 : omit_empty_level_; //默认20 ic.is_autodiscradblank_vince = image_prc_param_.bits.page == PAGE_OMIT_EMPTY_RECEIPT; ic.is_switchfrontback = image_prc_param_.bits.exchange; ic.autodescrew = image_prc_param_.bits.automatic_skew; ic.multi_output_red = image_prc_param_.bits.rid_red; ic.hsvcorrect = image_prc_param_.bits.rid_answer_red; ic.sharpen = image_prc_param_.bits.sharpen; //ic.enhance_color = image_prc_param_.bits.rid_color; ic.fillbackground = image_prc_param_.bits.erase_black_frame; ic.is_convex = (image_prc_param_.bits.fill_background == FILL_BKG_CONVEX_POLYGON); ic.noise = image_prc_param_.bits.noise_optimize; ic.indent = margin_; ic.AutoCrop_threshold = threshold_; 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.is_backrotate180 = image_prc_param_.bits.rotate_back_180; ic.is_dogeardetection = image_prc_param_.bits.fractate_check; ic.hardwarecaps.en_skrewdetect = 0; ic.hardwarecaps.en_doublefeed = dsp_config.params.doubleFeeded; ic.hardwarecaps.en_stapledetect = 0; ic.hardwarecaps.skrewdetectlevel = 0; // ic.hardwarecaps.is_autopaper = dsp_config.params.is_autopaper; ic.hardwarecaps.capturepixtype = 0; //暂无参数 获取图像类型 ic.hardwarecaps.lowpowermode = LowPowerMode::Min_None; //暂无参数 设置休眠时间 两个参数3399未使用 ic.fillhole.is_fillhole = image_prc_param_.bits.rid_hole; ic.fillhole.fillholeratio = rid_hole_range_; ic.detachnoise.is_detachnoise = image_prc_param_.bits.noise_optimize; ic.detachnoise.detachnoise = noise_range_; ic.is_autotext = image_prc_param_.bits.text_direction == TEXT_DIRECTION_AUTO ? 1 :0; ic.isfillcolor = is_color_fill; ic.refuseInflow = image_prc_param_.bits.is_permeate; ic.colorCorrection = 0; ic.removeMorr = image_prc_param_.bits.remove_morr; ic.errorExtention = image_prc_param_.bits.error_extention ;//暂无参数 ic.textureRemove = image_prc_param_.bits.remove_txtture;//暂无参数 ic.splitImage = image_prc_param_.bits.split; ic.cropRect.enable = custom_area_; int height = (custom_area_br_y_ *ic.resolution_dst) /25.4 - (custom_area_lt_y_ *ic.resolution_dst /25.4); int width = (custom_area_br_x_ *ic.resolution_dst) /25.4 - (custom_area_lt_x_ *ic.resolution_dst /25.4); ic.cropRect.height = height; ic.cropRect.width = width; ic.cropRect.x = custom_area_lt_x_ *ic.resolution_dst /25.4; ic.cropRect.y = custom_area_lt_y_ *ic.resolution_dst /25.4; ic.multiOutput = (MultiOutput)image_prc_param_.bits.multi_out; if (!is_multiout) { ic.multiOutput = MultiOutput::Unused; } ic.normalCrop = image_prc_param_.bits.dark_sample; ic.dogeardistabce = fractate_level_; ic.fadeback = image_prc_param_.bits.erase_bakground; ic.fadebackrange = erase_bkg_range_; ic.isuoloadexceptionimage = (double_paper_handle_ & DOUBLE_PAPER_SAVE_IMG) == DOUBLE_PAPER_SAVE_IMG; int filter_clr[] = { 3, 0, 1, 2, 5, 6, 7 }; if(image_prc_param_.bits.color_mode == COLOR_MODE_24_BITS || image_prc_param_.bits.color_mode == COLOR_MODE_AUTO_MATCH) ic.filter = 3; else { ic.filter = filter_clr[image_prc_param_.bits.rid_color]; // if(ic.filter != 3) // ic.pixtype = 2; ic.hsvcorrect = 0; ic.multi_output_red = 0; ic.multiOutput = MultiOutput::Unused; ic.fadeback = false; } //多留输出的处理 if (image_prc_param_.bits.multi_out == MULTI_GRAY_AND_BW && is_multiout) { ic.pixtype = 1; } else if ((image_prc_param_.bits.multi_out == MULTI_OUT_ALL ||image_prc_param_.bits.multi_out == MULTI_COLOR_AND_GRAY||image_prc_param_.bits.multi_out == MULTI_COLOR_AND_BW) && is_multiout) { ic.pixtype = 2; } if (is_multiout) { ic.hsvcorrect = 0; ic.multi_output_red = 0; ic.fadeback = false; ic.sharpen = 0; ic.removeMorr = 0; ic.textureRemove = 0; ic.errorExtention = 0; ic.detachnoise.is_detachnoise = 0; } if (ic.pixtype == 0) { ic.hsvcorrect = 0; ic.multi_output_red = 0; ic.fadeback = false; ic.sharpen = 0; ic.removeMorr = 0; ic.textureRemove = 0; } //自定义裁切 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 ) { ic.cropRect.enable = false; } img_conf_ = ic; int ret = agreement((TwSS)img_conf_.papertype,img_conf_.paperAlign); if (ret != SCANNER_ERR_OK) { status_ = ret; return ; } VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.pixtype=%d", ic.pixtype); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.papertype=%d", ic.papertype); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.AutoCrop_threshold=%d", ic.AutoCrop_threshold); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.autodescrew=%d", ic.autodescrew); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.automaticcolor=%d", ic.automaticcolor); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.brightness=%f", ic.brightness); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.contrast=%f", ic.contrast); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.en_fold=%d", ic.en_fold); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.en_sizecheck=%d", ic.en_sizecheck); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.enhance_color=%d", ic.enhance_color); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.fillbackground=%d", ic.fillbackground); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.filter=%d", ic.filter); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.gamma=%f", ic.gamma); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.hardwarecaps.capturepixtype=%d", ic.hardwarecaps.capturepixtype); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.hardwarecaps.en_doublefeed=%d", ic.hardwarecaps.en_doublefeed); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.hsvcorrect=%d", ic.hsvcorrect); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.imageRotateDegree=%f", ic.imageRotateDegree); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.indent=%d", 5); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.is_autocontrast=%d", ic.is_autocontrast); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.is_autocrop=%d", ic.is_autocrop); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.is_autodiscradblank_normal=%d", ic.is_autodiscradblank_normal); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.is_autodiscradblank_vince=%d", ic.is_autodiscradblank_vince); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.is_autotext=%d", ic.is_autotext); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.is_backrotate180=%d", ic.is_backrotate180); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.is_convex=%d", ic.is_convex); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.is_duplex=%d", ic.is_duplex); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.is_switchfrontback=%d", ic.is_switchfrontback); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.is_dogeardetection=%d", ic.is_dogeardetection); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.multi_output_red=%d", ic.multi_output_red); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.noise=%d", 8); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.resolution_dst=%f", ic.resolution_dst); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.resolution_native=%f", ic.resolution_native); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.scannum=%d", ic.scannum); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.sharpen=%d", ic.sharpen); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.discardblank_percent=%d", ic.discardblank_percent); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.detachnoise.is_detachnoise=%d", ic.detachnoise.is_detachnoise); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.detachnoise.detachnoise=%d\r ", ic.detachnoise.detachnoise); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.detachnoise.refuseInflow=%d\r ", ic.refuseInflow); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.refuseInflow=%d\r ", ic.refuseInflow); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.removeMorr=%d\r ", ic.removeMorr); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.errorExtention=%d\r ", ic.errorExtention); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.textureRemove=%d\r\n ", ic.textureRemove); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.fillhole.is_fillhole=%d\r\n ", ic.fillhole.is_fillhole); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.ic.fillhole.fillholeratio=%f\r\n ", ic.fillhole.fillholeratio); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.fadeback=%d\r\n ",ic.fadeback); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.cropRect.enable=%d\r\n ",ic.cropRect.enable); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.cropRect.height=%d\r\n ",ic.cropRect.height); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.cropRect.width=%d\r\n ",ic.cropRect.width); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.cropRect.x=%d\r\n ",ic.cropRect.x); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\n ic.cropRect.y=%d\r\n ",ic.cropRect.y); } void hg_scanner_300::printf_devconfig(HGSCANCONF_G400 *d) { //io_->set_timeout(200); if (!d) d = &dsp_config; VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"\r\ndsp_config.params.doubleFeeded:%d\r\n",d->params.doubleFeeded); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params.dpi:%d\r\n",d->params.dpi); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params.dstHeight:%d\r\n",d->params.dstHeight); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params.enableLed:%d\r\n",d->params.enableLed); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params.enableStable:%d\r\n",d->params.enableStable); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params.isColor:%d\r\n",d->params.isColor); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params.isCorrect:%d\r\n",d->params.isCorrect); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params.pageSize:%d\r\n",d->params.pageSize); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params.reversed1:%d\r\n",d->params.reversed1); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params.reversed2:%d\r\n",d->params.reversed2); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params.enableSizeDetect:%d\r\n",d->params.enableSizeDetect); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params.value:%d\r\n",d->value); } std::string hg_scanner_300::get_firmware_version() { char buf[20] = { 0 }; int ret = SCANNER_ERR_OK, len = 10; //协议定义长度为10 100 200 =8 USBCB cmd = {GET_FW_VERSION,len,0,}; ret = writeusb(cmd); ret = io_->read_bulk(buf, &len); return buf; } std::string hg_scanner_300::get_serial_num() { string SerialNum = ""; int ret = SCANNER_ERR_OK, len = 14; SerialNum.resize(len); USBCB cmd = {GET_SERIAL,len,0,}; ret = writeusb(cmd); std::lock_guard lock(io_lock_); ret = io_->read_bulk(&SerialNum[0],&len); if (ret != SCANNER_ERR_OK) { return "0000000000000000000"; } return SerialNum; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// int hg_scanner_300::set_leaflet_scan(void) { int ret = SCANNER_ERR_OK; test_1_paper_ = true; ret = start(); return ret; } int hg_scanner_300::get_abuot_info(void) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_300::restore_default_setting(void) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_300::set_final_image_format(void) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_300::get_compression_format(void) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_300::set_compression_format(void) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_300::set_auto_color_type(void) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_300::get_device_code(void) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_300::get_sleep_time(SANE_Power* getime) { int ret = SCANNER_ERR_OK, len = 0; USBCB usbcb = {GET_SLEEP_TIME, 0, 0}; ret = writeusb(usbcb); if (ret != SCANNER_ERR_OK) { return ret; } len = sizeof(usbcb); ret = io_->read_bulk(&usbcb,&len); if (ret == SCANNER_ERR_OK) { if (getime) { *getime = (SANE_Power)usbcb.u32_Data; } if (usbcb.u32_Data) { return SCANNER_ERR_DEVICE_SLEEPING; } } return ret; } int hg_scanner_300::set_sleep_time(SANE_Power* setime) { if (!setime) { return SCANNER_ERR_NO_DATA; } int ret = SCANNER_ERR_OK, time = *setime; USBCB usbcb = {SET_SLEEP_TIME,time, 0}; ret = writeusb(usbcb); return ret; } int hg_scanner_300::get_dogear_distance(void) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_300::set_dogear_distance(void) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_300::get_scanner_paperon(SANE_Bool* paperon) { int ret = SCANNER_ERR_OK, len = 0; USBCB usbcb = {GET_PAPER_STATUS, 0, 0}; len = sizeof(USBCB); ret = writeusb(usbcb); //io_->set_timeout(500); if (ret == SCANNER_ERR_OK) { ret = io_->read_bulk(&usbcb,&len); } if (ret != SCANNER_ERR_OK) { return ret; } if (usbcb.u32_Data == 0) ret = SCANNER_ERR_DEVICE_NO_PAPER; else ret = SCANNER_ERR_OK; if (paperon) { *paperon = usbcb.u32_Data; } return ret; } int hg_scanner_300::set_scan_when_paper_on(void) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_300::get_scan_when_paper_on(void) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_300::get_scan_with_hole(void) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_300::set_scan_with_hole(void) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_300::get_scan_is_sleep() { int ret = SCANNER_ERR_OK, len = 0; USBCB usbcb = {0x100, 0, 0}; len = sizeof(USBCB); ret = writeusb(usbcb); //io_->set_timeout(200); if (ret == SCANNER_ERR_OK) { ret = io_->read_bulk(&usbcb,&len); } if (ret != SCANNER_ERR_OK) { return ret; } if (usbcb.u32_Data == 0x10) { return SCANNER_ERR_OK; } else if (usbcb.u32_Data == 0x100) { return SCANNER_ERR_DEVICE_SLEEPING; } } ///此款设备无此功能 int hg_scanner_300::on_staple_check_changed(bool& check) { return SCANNER_ERR_OK; } int hg_scanner_300::on_skew_check_changed(bool& check) { return SCANNER_ERR_OK; } int hg_scanner_300::on_skew_check_level_changed(int& check) { return SCANNER_ERR_OK; } int hg_scanner_300::agreement() { int ret = SCANNER_ERR_OK; if (image_prc_param_.bits.rid_color != RID_COLOR_NONE) { dsp_config.params.isColor = 1; } ret = writedown_device_configuration(true); //io_->set_timeout(200); return ret; } int hg_scanner_300::on_set_feedmode(int feedmode) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_300::on_get_feedmode(int &feedmode) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_300::get_device_log(string &log) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; } int hg_scanner_300::notify_sleep() { return SCANNER_ERR_DEVICE_NOT_SUPPORT; }