From 979fb98cd293ec483dcf1fbbef03081fde13ca0a Mon Sep 17 00:00:00 2001 From: "mo1027728827@qq.com" Date: Wed, 8 Jun 2022 15:29:42 +0800 Subject: [PATCH 01/13] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=8A=98=E8=A7=92?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/hgdev/hg_scanner_239.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hgdriver/hgdev/hg_scanner_239.cpp b/hgdriver/hgdev/hg_scanner_239.cpp index 08a06b4..2af09c2 100644 --- a/hgdriver/hgdev/hg_scanner_239.cpp +++ b/hgdriver/hgdev/hg_scanner_239.cpp @@ -22,7 +22,7 @@ #define USB_REQ_SET_DEV_REGS 0x64 -static std::string jsontext("{\"device_type\":\"G239\",\"option_count\":60,\"1\":{\"category\":\"base\",\"name\":\"cfg-1\",\"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\":\"cfg-2\",\"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\":\"cfg-4\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"5\":{\"category\":\"base\",\"name\":\"cfg-5\",\"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\":\"cfg-6\",\"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!=true\"]},\"7\":{\"category\":\"base\",\"name\":\"cfg-7\",\"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\"]},\"8\":{\"category\":\"base\",\"name\":\"cfg-8\",\"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\"]},\"9\":{\"category\":\"base\",\"name\":\"cfg-9\",\"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\"]},\"10\":{\"category\":\"base\",\"name\":\"cfg-10\",\"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\"]},\"11\":{\"category\":\"base\",\"name\":\"cfg-11\",\"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\":[\"10==true\"]},\"12\":{\"category\":\"base\",\"name\":\"cfg-12\",\"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\"]},\"13\":{\"category\":\"base\",\"name\":\"cfg-13\",\"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\"]},\"14\":{\"category\":\"base\",\"name\":\"cfg-14\",\"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\"]},\"15\":{\"category\":\"base\",\"name\":\"cfg-15\",\"title\":\"\\u9519\\u8bef\\u6269\\u6563\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"6==\\u9ed1\\u767d\"]},\"16\":{\"category\":\"base\",\"name\":\"cfg-16\",\"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\"]},\"17\":{\"category\":\"base\",\"name\":\"cfg-17\",\"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\":[\"16==true\"]},\"18\":{\"category\":\"base\",\"name\":\"cfg-18\",\"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\":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\"]},\"19\":{\"category\":\"base\",\"name\":\"cfg-19\",\"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\":[\"18!=\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"18!=\\u4e09\\u8054\\u8bd5\\u5377\",\"18!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"18!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\"]},\"20\":{\"category\":\"base\",\"name\":\"tl-x\",\"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},\"depend_and\":[\"19==true\"]},\"21\":{\"category\":\"base\",\"name\":\"br-x\",\"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},\"depend_and\":[\"19==true\"]},\"22\":{\"category\":\"base\",\"name\":\"tl-y\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u4e0a\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\\u5de6\\u4e0a\\u89d2y\\u5750\\u6807\",\"type\":\"float\",\"cur\":0.000000,\"default\":0.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":297.000000},\"depend_and\":[\"19==true\"]},\"23\":{\"category\":\"base\",\"name\":\"br-y\",\"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},\"depend_and\":[\"19==true\"]},\"24\":{\"category\":\"base\",\"name\":\"cfg-24\",\"title\":\"\\u5c3a\\u5bf8\\u68c0\\u6d4b\",\"desc\":\"\\u68c0\\u6d4b\\u7eb8\\u5f20\\u5b9e\\u9645\\u5c3a\\u5bf8\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"18==A3\",\"18==A4\",\"18==A4\\u6a2a\\u5411\",\"18==A5\",\"18==A5\\u6a2a\\u5411\",\"18==A6\",\"18==A6\\u6a2a\\u5411\",\"18==B4\",\"18==B5\",\"18==B5\\u6a2a\\u5411\",\"18==B6\",\"18==B6\\u6a2a\\u5411\",\"18==Double Letter\",\"18==LEGAL\",\"18==Letter\",\"18==Letter\\u6a2a\\u5411\"]},\"25\":{\"category\":\"base\",\"name\":\"cfg-25\",\"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\"]},\"26\":{\"category\":\"base\",\"name\":\"cfg-26\",\"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,240,300,600]},\"28\":{\"category\":\"base\",\"name\":\"cfg-28\",\"title\":\"\\u753b\\u8d28\",\"desc\":\"\",\"type\":\"string\",\"cur\":\"\\u901f\\u5ea6\\u4f18\\u5148\",\"default\":\"\\u901f\\u5ea6\\u4f18\\u5148\",\"size\":24,\"range\":[\"\\u901f\\u5ea6\\u4f18\\u5148\",\"\\u753b\\u8d28\\u4f18\\u5148\"],\"depend_or\":[\"27==300\",\"27==600\"]},\"29\":{\"category\":\"base\",\"name\":\"cfg-29\",\"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\"]},\"30\":{\"category\":\"base\",\"name\":\"cfg-30\",\"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\"]},\"31\":{\"category\":\"base\",\"name\":\"cfg-31\",\"title\":\"\\u81ea\\u52a8\\u7ea0\\u504f\",\"desc\":\"\\u81ea\\u52a8\\u7ea0\\u504f\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4,\"depend_or\":[\"25!=\\u5bf9\\u6298\"]},\"32\":{\"category\":\"base\",\"name\":\"grp-2\",\"title\":\"\\u4eae\\u5ea6\",\"type\":\"group\"},\"33\":{\"category\":\"base\",\"name\":\"cfg-33\",\"title\":\"\\u542f\\u7528\\u8272\\u8c03\\u66f2\\u7ebf\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"34\":{\"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}},\"35\":{\"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}},\"36\":{\"category\":\"base\",\"name\":\"cfg-36\",\"title\":\"\\u4f3d\\u9a6c\\u503c\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u7247\\u4f3d\\u739b\\u503c\",\"type\":\"float\",\"cur\":1.000000,\"default\":1.000000,\"size\":4,\"range\":{\"min\":0.010000,\"max\":5.000000}},\"37\":{\"category\":\"base\",\"name\":\"grp-3\",\"title\":\"\\u56fe\\u50cf\\u5904\\u7406\",\"type\":\"group\"},\"38\":{\"category\":\"base\",\"name\":\"cfg-38\",\"title\":\"\\u6d88\\u9664\\u9ed1\\u6846\",\"desc\":\"\\u6d88\\u9664\\u9ed1\\u6846\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4},\"39\":{\"category\":\"base\",\"name\":\"cfg-39\",\"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\",\"18!=\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"18!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"18!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"31!=true\"]},\"40\":{\"category\":\"advanced\",\"name\":\"cfg-40\",\"title\":\"\\u9608\\u503c\",\"desc\":\"\\u9608\\u503c\",\"type\":\"int\",\"cur\":40,\"default\":40,\"size\":4,\"range\":{\"min\":30,\"max\":50},\"depend_or\":[\"38==true\",\"18==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"18==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"18==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"31==true\"]},\"41\":{\"category\":\"advanced\",\"name\":\"cfg-41\",\"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\",\"18==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"18==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"18==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"31==true\"]},\"42\":{\"category\":\"advanced\",\"name\":\"cfg-42\",\"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\",\"18==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"18==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"31==true\",\"18==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\"]},\"43\":{\"category\":\"advanced\",\"name\":\"cfg-43\",\"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\":\"cfg-44\",\"title\":\"\\u9632\\u6b62\\u6e17\\u900f\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"45\":{\"category\":\"base\",\"name\":\"cfg-45\",\"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\":\"cfg-46\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\",\"desc\":\"\\u79fb\\u9664\\u7eb8\\u5f20\\u4e2d\\u7684\\u7a7f\\u5b54\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"47\":{\"category\":\"base\",\"name\":\"cfg-47\",\"title\":\" \\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.010000,\"max\":0.500000},\"depend_or\":[\"46==true\"]},\"48\":{\"category\":\"base\",\"name\":\"cfg-48\",\"title\":\"\\u8272\\u5f69\\u586b\\u5145\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"38==true\"]},\"49\":{\"category\":\"base\",\"name\":\"grp-4\",\"title\":\"\\u9001\\u7eb8\\u65b9\\u5f0f\\u8bbe\\u7f6e\",\"type\":\"group\"},\"50\":{\"category\":\"base\",\"name\":\"cfg-50\",\"title\":\"\\u8d85\\u58f0\\u6ce2\\u68c0\\u6d4b\",\"desc\":\"\\u8d85\\u58f0\\u6ce2\\u68c0\\u6d4b\\u9001\\u7eb8\\u72b6\\u6001\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4},\"51\":{\"category\":\"base\",\"name\":\"cfg-51\",\"title\":\"\\u88c5\\u8ba2\\u68c0\\u6d4b\",\"desc\":\"\\u68c0\\u6d4b\\u7eb8\\u5f20\\u4e0a\\u662f\\u5426\\u6709\\u9489\\u4e66\\u9489\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"52\":{\"category\":\"base\",\"name\":\"cfg-52\",\"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\"]},\"53\":{\"category\":\"base\",\"name\":\"cfg-53\",\"title\":\" \\u626b\\u63cf\\u6570\\u91cf\",\"desc\":\"\\u626b\\u63cf\\u6307\\u5b9a\\u6570\\u91cf\",\"type\":\"int\",\"cur\":1,\"default\":1,\"size\":4,\"depend_or\":[\"52==\\u626b\\u63cf\\u6307\\u5b9a\\u5f20\\u6570\"]},\"54\":{\"category\":\"base\",\"name\":\"cfg-54\",\"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\"]},\"55\":{\"category\":\"base\",\"name\":\"cfg-55\",\"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\",\"54!=\\u81ea\\u52a8\\u6587\\u672c\\u65b9\\u5411\\u8bc6\\u522b\\u00b0\"]},\"56\":{\"category\":\"base\",\"name\":\"cfg-56\",\"title\":\"\\u6298\\u89d2\\u68c0\\u6d4b\",\"desc\":\"\\u7eb8\\u5f20\\u6298\\u89d2\\u68c0\\u6d4b\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"57\":{\"category\":\"base\",\"name\":\"cfg-57\",\"title\":\" \\u6298\\u89d2\\u5927\\u5c0f\",\"desc\":\"\\u503c\\u8d8a\\u5c0f\\uff0c\\u4ee3\\u8868\\u80fd\\u68c0\\u6d4b\\u5230\\u7684\\u6298\\u89d2\\u8d8a\\u5c0f\",\"type\":\"int\",\"cur\":10,\"default\":10,\"size\":4,\"range\":{\"min\":0,\"max\":100},\"depend_or\":[\"56==true\"]},\"58\":{\"category\":\"base\",\"name\":\"cfg-58\",\"title\":\"\\u6b6a\\u659c\\u68c0\\u6d4b\",\"desc\":\"\\u7eb8\\u5f20\\u6b6a\\u659c\\u68c0\\u6d4b\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4},\"59\":{\"category\":\"base\",\"name\":\"cfg-59\",\"title\":\"\\u6b6a\\u659c\\u5bb9\\u5fcd\\u5ea6\",\"desc\":\"\\u503c\\u8d8a\\u5c0f\\uff0c\\u4ee3\\u8868\\u80fd\\u68c0\\u6d4b\\u5230\\u7eb8\\u5f20\\u7684\\u6b6a\\u659c\\u89d2\\u5ea6\\u8d8a\\u5c0f\",\"type\":\"int\",\"cur\":3,\"default\":3,\"size\":4,\"range\":{\"min\":1,\"max\":5},\"depend_or\":[\"58==true\"]}}"); +static std::string jsontext("{\"device_type\":\"G239\",\"option_count\":60,\"1\":{\"category\":\"base\",\"name\":\"cfg-1\",\"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\":\"cfg-2\",\"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\":\"cfg-4\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"5\":{\"category\":\"base\",\"name\":\"cfg-5\",\"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\":\"cfg-6\",\"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!=true\"]},\"7\":{\"category\":\"base\",\"name\":\"cfg-7\",\"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\"]},\"8\":{\"category\":\"base\",\"name\":\"cfg-8\",\"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\"]},\"9\":{\"category\":\"base\",\"name\":\"cfg-9\",\"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\"]},\"10\":{\"category\":\"base\",\"name\":\"cfg-10\",\"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\"]},\"11\":{\"category\":\"base\",\"name\":\"cfg-11\",\"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\":[\"10==true\"]},\"12\":{\"category\":\"base\",\"name\":\"cfg-12\",\"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\"]},\"13\":{\"category\":\"base\",\"name\":\"cfg-13\",\"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\"]},\"14\":{\"category\":\"base\",\"name\":\"cfg-14\",\"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\"]},\"15\":{\"category\":\"base\",\"name\":\"cfg-15\",\"title\":\"\\u9519\\u8bef\\u6269\\u6563\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"6==\\u9ed1\\u767d\"]},\"16\":{\"category\":\"base\",\"name\":\"cfg-16\",\"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\"]},\"17\":{\"category\":\"base\",\"name\":\"cfg-17\",\"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\":[\"16==true\"]},\"18\":{\"category\":\"base\",\"name\":\"cfg-18\",\"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\":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\"]},\"19\":{\"category\":\"base\",\"name\":\"cfg-19\",\"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\":[\"18!=\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"18!=\\u4e09\\u8054\\u8bd5\\u5377\",\"18!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"18!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\"]},\"20\":{\"category\":\"base\",\"name\":\"tl-x\",\"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},\"depend_and\":[\"19==true\"]},\"21\":{\"category\":\"base\",\"name\":\"br-x\",\"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},\"depend_and\":[\"19==true\"]},\"22\":{\"category\":\"base\",\"name\":\"tl-y\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u4e0a\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\\u5de6\\u4e0a\\u89d2y\\u5750\\u6807\",\"type\":\"float\",\"cur\":0.000000,\"default\":0.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":297.000000},\"depend_and\":[\"19==true\"]},\"23\":{\"category\":\"base\",\"name\":\"br-y\",\"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},\"depend_and\":[\"19==true\"]},\"24\":{\"category\":\"base\",\"name\":\"cfg-24\",\"title\":\"\\u5c3a\\u5bf8\\u68c0\\u6d4b\",\"desc\":\"\\u68c0\\u6d4b\\u7eb8\\u5f20\\u5b9e\\u9645\\u5c3a\\u5bf8\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"18==A3\",\"18==A4\",\"18==A4\\u6a2a\\u5411\",\"18==A5\",\"18==A5\\u6a2a\\u5411\",\"18==A6\",\"18==A6\\u6a2a\\u5411\",\"18==B4\",\"18==B5\",\"18==B5\\u6a2a\\u5411\",\"18==B6\",\"18==B6\\u6a2a\\u5411\",\"18==Double Letter\",\"18==LEGAL\",\"18==Letter\",\"18==Letter\\u6a2a\\u5411\"]},\"25\":{\"category\":\"base\",\"name\":\"cfg-25\",\"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\"]},\"26\":{\"category\":\"base\",\"name\":\"cfg-26\",\"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,240,300,600]},\"28\":{\"category\":\"base\",\"name\":\"cfg-28\",\"title\":\"\\u753b\\u8d28\",\"desc\":\"\",\"type\":\"string\",\"cur\":\"\\u901f\\u5ea6\\u4f18\\u5148\",\"default\":\"\\u901f\\u5ea6\\u4f18\\u5148\",\"size\":24,\"range\":[\"\\u901f\\u5ea6\\u4f18\\u5148\",\"\\u753b\\u8d28\\u4f18\\u5148\"],\"depend_or\":[\"27==300\",\"27==600\"]},\"29\":{\"category\":\"base\",\"name\":\"cfg-29\",\"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\"]},\"30\":{\"category\":\"base\",\"name\":\"cfg-30\",\"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\"]},\"31\":{\"category\":\"base\",\"name\":\"cfg-31\",\"title\":\"\\u81ea\\u52a8\\u7ea0\\u504f\",\"desc\":\"\\u81ea\\u52a8\\u7ea0\\u504f\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4,\"depend_or\":[\"25!=\\u5bf9\\u6298\"]},\"32\":{\"category\":\"base\",\"name\":\"grp-2\",\"title\":\"\\u4eae\\u5ea6\",\"type\":\"group\"},\"33\":{\"category\":\"base\",\"name\":\"cfg-33\",\"title\":\"\\u542f\\u7528\\u8272\\u8c03\\u66f2\\u7ebf\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"34\":{\"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}},\"35\":{\"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}},\"36\":{\"category\":\"base\",\"name\":\"cfg-36\",\"title\":\"\\u4f3d\\u9a6c\\u503c\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u7247\\u4f3d\\u739b\\u503c\",\"type\":\"float\",\"cur\":1.000000,\"default\":1.000000,\"size\":4,\"range\":{\"min\":0.010000,\"max\":5.000000}},\"37\":{\"category\":\"base\",\"name\":\"grp-3\",\"title\":\"\\u56fe\\u50cf\\u5904\\u7406\",\"type\":\"group\"},\"38\":{\"category\":\"base\",\"name\":\"cfg-38\",\"title\":\"\\u6d88\\u9664\\u9ed1\\u6846\",\"desc\":\"\\u6d88\\u9664\\u9ed1\\u6846\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4},\"39\":{\"category\":\"base\",\"name\":\"cfg-39\",\"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\",\"18!=\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"18!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"18!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"31!=true\"]},\"40\":{\"category\":\"advanced\",\"name\":\"cfg-40\",\"title\":\"\\u9608\\u503c\",\"desc\":\"\\u9608\\u503c\",\"type\":\"int\",\"cur\":40,\"default\":40,\"size\":4,\"range\":{\"min\":30,\"max\":50},\"depend_or\":[\"38==true\",\"18==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"18==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"18==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"31==true\"]},\"41\":{\"category\":\"advanced\",\"name\":\"cfg-41\",\"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\",\"18==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"18==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"18==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"31==true\"]},\"42\":{\"category\":\"advanced\",\"name\":\"cfg-42\",\"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\",\"18==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"18==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"31==true\",\"18==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\"]},\"43\":{\"category\":\"advanced\",\"name\":\"cfg-43\",\"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\":\"cfg-44\",\"title\":\"\\u9632\\u6b62\\u6e17\\u900f\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"45\":{\"category\":\"base\",\"name\":\"cfg-45\",\"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\":\"cfg-46\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\",\"desc\":\"\\u79fb\\u9664\\u7eb8\\u5f20\\u4e2d\\u7684\\u7a7f\\u5b54\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"47\":{\"category\":\"base\",\"name\":\"cfg-47\",\"title\":\" \\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.010000,\"max\":0.500000},\"depend_or\":[\"46==true\"]},\"48\":{\"category\":\"base\",\"name\":\"cfg-48\",\"title\":\"\\u8272\\u5f69\\u586b\\u5145\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"38==true\"]},\"49\":{\"category\":\"base\",\"name\":\"grp-4\",\"title\":\"\\u9001\\u7eb8\\u65b9\\u5f0f\\u8bbe\\u7f6e\",\"type\":\"group\"},\"50\":{\"category\":\"base\",\"name\":\"cfg-50\",\"title\":\"\\u8d85\\u58f0\\u6ce2\\u68c0\\u6d4b\",\"desc\":\"\\u8d85\\u58f0\\u6ce2\\u68c0\\u6d4b\\u9001\\u7eb8\\u72b6\\u6001\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4},\"51\":{\"category\":\"base\",\"name\":\"cfg-51\",\"title\":\"\\u88c5\\u8ba2\\u68c0\\u6d4b\",\"desc\":\"\\u68c0\\u6d4b\\u7eb8\\u5f20\\u4e0a\\u662f\\u5426\\u6709\\u9489\\u4e66\\u9489\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"52\":{\"category\":\"base\",\"name\":\"cfg-52\",\"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\"]},\"53\":{\"category\":\"base\",\"name\":\"cfg-53\",\"title\":\" \\u626b\\u63cf\\u6570\\u91cf\",\"desc\":\"\\u626b\\u63cf\\u6307\\u5b9a\\u6570\\u91cf\",\"type\":\"int\",\"cur\":1,\"default\":1,\"size\":4,\"depend_or\":[\"52==\\u626b\\u63cf\\u6307\\u5b9a\\u5f20\\u6570\"]},\"54\":{\"category\":\"base\",\"name\":\"cfg-54\",\"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\"]},\"55\":{\"category\":\"base\",\"name\":\"cfg-55\",\"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\",\"54!=\\u81ea\\u52a8\\u6587\\u672c\\u65b9\\u5411\\u8bc6\\u522b\\u00b0\"]},\"56\":{\"category\":\"base\",\"name\":\"cfg-56\",\"title\":\"\\u6298\\u89d2\\u68c0\\u6d4b\",\"desc\":\"\\u7eb8\\u5f20\\u6298\\u89d2\\u68c0\\u6d4b\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"57\":{\"category\":\"base\",\"name\":\"cfg-57\",\"title\":\" \\u6298\\u89d2\\u5927\\u5c0f\",\"desc\":\"\\u503c\\u8d8a\\u5c0f\\uff0c\\u4ee3\\u8868\\u80fd\\u68c0\\u6d4b\\u5230\\u7684\\u6298\\u89d2\\u8d8a\\u5c0f\",\"type\":\"int\",\"cur\":70,\"default\":70,\"size\":4,\"range\":{\"min\":0,\"max\":100},\"depend_or\":[\"56==true\"]},\"58\":{\"category\":\"base\",\"name\":\"cfg-58\",\"title\":\"\\u6b6a\\u659c\\u68c0\\u6d4b\",\"desc\":\"\\u7eb8\\u5f20\\u6b6a\\u659c\\u68c0\\u6d4b\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4},\"59\":{\"category\":\"base\",\"name\":\"cfg-59\",\"title\":\"\\u6b6a\\u659c\\u5bb9\\u5fcd\\u5ea6\",\"desc\":\"\\u503c\\u8d8a\\u5c0f\\uff0c\\u4ee3\\u8868\\u80fd\\u68c0\\u6d4b\\u5230\\u7eb8\\u5f20\\u7684\\u6b6a\\u659c\\u89d2\\u5ea6\\u8d8a\\u5c0f\",\"type\":\"int\",\"cur\":3,\"default\":3,\"size\":4,\"range\":{\"min\":1,\"max\":5},\"depend_or\":[\"58==true\"]}}"); enum hg_239_setting_item { HG_239_SETTING_RESTORE = 1, // 恢复默认设置 From db6e99290f6e410b75583f38bb73c472c12b19a1 Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Wed, 8 Jun 2022 16:31:41 +0800 Subject: [PATCH 02/13] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E5=8C=BA?= =?UTF-8?q?=E5=9F=9F=E8=A3=81=E5=88=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/hgdev/hg_scanner.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hgdriver/hgdev/hg_scanner.cpp b/hgdriver/hgdev/hg_scanner.cpp index e454207..ee8a7d9 100644 --- a/hgdriver/hgdev/hg_scanner.cpp +++ b/hgdriver/hgdev/hg_scanner.cpp @@ -92,7 +92,7 @@ hg_scanner::hg_scanner(ScannerSerial serial , fractate_level_(50), ui_ev_cb_(ui_default_callback), scan_life_(NULL) , notify_setting_result_(false), user_cancel_(false), cb_mem_(true), test_1_paper_(false) , setting_count_(0),img_type_(""), online_(false),is_quality_(-1),is_color_fill(false),is_multiout(false),save_multiout(OPTION_VALUE_DLSC_CS_HD_HB) - , final_img_index_(0) + , final_img_index_(0), custom_area_(false) { final_path_ = hg_log::ini_get("paths", "final_img"); if(final_path_.empty()) From 2c5183b5b8037290f2b73b43f2a7b7d23edcf19f Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Wed, 8 Jun 2022 16:42:27 +0800 Subject: [PATCH 03/13] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/hgdev/hg_scanner.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/hgdriver/hgdev/hg_scanner.cpp b/hgdriver/hgdev/hg_scanner.cpp index ee8a7d9..24ef38e 100644 --- a/hgdriver/hgdev/hg_scanner.cpp +++ b/hgdriver/hgdev/hg_scanner.cpp @@ -1465,9 +1465,7 @@ int hg_scanner::setting_skew_check_level(void* data) } int hg_scanner::setting_is_custom_gamma(void* data) { - SANE_Bool* v = (SANE_Bool*)data; - - custom_gamma_ = *v == SANE_TRUE; + custom_gamma_ = *((bool*)data); return SCANNER_ERR_OK; } @@ -1481,9 +1479,7 @@ int hg_scanner::setting_custom_gamma_data(void* data) } int hg_scanner::setting_is_custom_area(void* data) { - SANE_Bool* v = (SANE_Bool*)data; - - custom_area_ = *v == SANE_TRUE; + custom_area_ = *((bool*)data); return SCANNER_ERR_OK; } From f4985cffc6b64e88a34c3e1c53705050cc8d688e Mon Sep 17 00:00:00 2001 From: "mo1027728827@qq.com" Date: Wed, 8 Jun 2022 18:33:49 +0800 Subject: [PATCH 04/13] =?UTF-8?q?=E5=B0=BA=E5=AF=B8=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E5=88=87=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/hgdev/hg_scanner.cpp | 10 +++++++++- hgdriver/hgdev/hg_scanner.h | 1 + hgdriver/hgdev/hg_scanner_239.cpp | 12 ++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/hgdriver/hgdev/hg_scanner.cpp b/hgdriver/hgdev/hg_scanner.cpp index 24ef38e..d4145b8 100644 --- a/hgdriver/hgdev/hg_scanner.cpp +++ b/hgdriver/hgdev/hg_scanner.cpp @@ -92,7 +92,7 @@ hg_scanner::hg_scanner(ScannerSerial serial , fractate_level_(50), ui_ev_cb_(ui_default_callback), scan_life_(NULL) , notify_setting_result_(false), user_cancel_(false), cb_mem_(true), test_1_paper_(false) , setting_count_(0),img_type_(""), online_(false),is_quality_(-1),is_color_fill(false),is_multiout(false),save_multiout(OPTION_VALUE_DLSC_CS_HD_HB) - , final_img_index_(0), custom_area_(false) + , final_img_index_(0), custom_area_(false),save_sizecheck(false) { final_path_ = hg_log::ini_get("paths", "final_img"); if(final_path_.empty()) @@ -1066,6 +1066,11 @@ int hg_scanner::setting_paper(void* data) else if (!exact) ret = SCANNER_ERR_NOT_EXACT; + if (save_sizecheck) + { + setting_paper_check(&save_sizecheck); + } + VLOG_MINI_3(LOG_LEVEL_DEBUG_INFO, "Change paper from %s to %s = %s\n", paper_string(old).c_str(), (char*)data, hg_scanner_err_name(ret)); if(ret == SCANNER_ERR_NOT_EXACT) @@ -1078,11 +1083,14 @@ int hg_scanner::setting_paper(void* data) int hg_scanner::setting_paper_check(void* data) { bool use = *((bool*)data); + int ret = on_paper_check_changed(use); VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "Change paper size-checking %s = %s\n", *((bool*)data) ? "enabled" : "disabled", hg_scanner_err_name(ret)); *((bool*)data) = use; + save_sizecheck = use; + return ret; } int hg_scanner::setting_page(void* data) diff --git a/hgdriver/hgdev/hg_scanner.h b/hgdriver/hgdev/hg_scanner.h index a92a2e2..eec73bb 100644 --- a/hgdriver/hgdev/hg_scanner.h +++ b/hgdriver/hgdev/hg_scanner.h @@ -101,6 +101,7 @@ class hg_scanner bool notify_setting_result_; std::string name_; std::string save_multiout; //保存多留输出类型 + bool save_sizecheck; sane_callback ui_ev_cb_; do_when_born_and_dead* scan_life_; diff --git a/hgdriver/hgdev/hg_scanner_239.cpp b/hgdriver/hgdev/hg_scanner_239.cpp index 2af09c2..eece70c 100644 --- a/hgdriver/hgdev/hg_scanner_239.cpp +++ b/hgdriver/hgdev/hg_scanner_239.cpp @@ -1293,12 +1293,24 @@ int hg_scanner_239::on_paper_check_changed(bool& check) { dev_conf_.g200params.enable_sizecheck = check; ret = writedown_device_configuration(); + if (ret) { dev_conf_.g200params.enable_sizecheck = !check; check = dev_conf_.g200params.enable_sizecheck; } } + if (image_prc_param_.bits.paper == PAPER_AUTO_MATCH + ||image_prc_param_.bits.paper == PAPER_MAX_SIZE + ||image_prc_param_.bits.paper ==PAPER_MAX_SIZE_CLIP + ||image_prc_param_.bits.paper ==PAPER_TRIGEMINY + ) + { + HGSCANCONF *d = &dev_conf_; + d->g200params.enable_sizecheck = false; + ret = writedown_device_configuration(d); + } + return ret; } From 7a776486ac7bca4f28cff0ef747d642f604ad8fb Mon Sep 17 00:00:00 2001 From: "mo1027728827@qq.com" Date: Thu, 9 Jun 2022 16:49:32 +0800 Subject: [PATCH 05/13] =?UTF-8?q?=E8=B0=83=E6=95=B4=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E8=A3=81=E5=88=87=E5=92=8C=E9=83=A8=E5=88=86=E5=B0=BA?= =?UTF-8?q?=E5=AF=B8=E6=A3=80=E6=B5=8B=20=E8=BF=9B=E8=A1=8C=E5=88=87?= =?UTF-8?q?=E6=8D=A2=E6=97=B6=E5=AF=BC=E8=87=B4=20=E5=B0=BA=E5=AF=B8?= =?UTF-8?q?=E6=A3=80=E6=B5=8B=E8=BF=98=E8=83=BD=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/hgdev/hg_scanner_200.cpp | 12 ++++++++++++ hgdriver/hgdev/hg_scanner_239.cpp | 19 +++++++++++++++++-- hgdriver/hgdev/hg_scanner_300.cpp | 13 ++++++++++++- hgdriver/hgdev/hg_scanner_400.cpp | 12 ++++++++++++ hgdriver/hgdev/scanner_manager.cpp | 8 ++++---- 5 files changed, 57 insertions(+), 7 deletions(-) diff --git a/hgdriver/hgdev/hg_scanner_200.cpp b/hgdriver/hgdev/hg_scanner_200.cpp index 2b3d96c..ba2b1fd 100644 --- a/hgdriver/hgdev/hg_scanner_200.cpp +++ b/hgdriver/hgdev/hg_scanner_200.cpp @@ -1153,6 +1153,18 @@ else 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 (image_prc_param_.bits.paper == PAPER_AUTO_MATCH + ||image_prc_param_.bits.paper == PAPER_MAX_SIZE + ||image_prc_param_.bits.paper == PAPER_MAX_SIZE_CLIP + ||image_prc_param_.bits.paper == PAPER_TRIGEMINY + ||image_prc_param_.bits.paper == PAPER_16K + ||image_prc_param_.bits.paper == PAPER_8K + ||image_prc_param_.bits.paper == PAPER_16K_LATERAL + ) + { + ic.cropRect.enable = false; } img_conf_ = ic; diff --git a/hgdriver/hgdev/hg_scanner_239.cpp b/hgdriver/hgdev/hg_scanner_239.cpp index eece70c..596031e 100644 --- a/hgdriver/hgdev/hg_scanner_239.cpp +++ b/hgdriver/hgdev/hg_scanner_239.cpp @@ -924,6 +924,18 @@ else { ic.pixtype = 2; } + //自定义裁切 + if (image_prc_param_.bits.paper == PAPER_AUTO_MATCH + ||image_prc_param_.bits.paper == PAPER_MAX_SIZE + ||image_prc_param_.bits.paper == PAPER_MAX_SIZE_CLIP + ||image_prc_param_.bits.paper == PAPER_TRIGEMINY + ||image_prc_param_.bits.paper == PAPER_16K + ||image_prc_param_.bits.paper == PAPER_8K + ||image_prc_param_.bits.paper == PAPER_16K_LATERAL + ) + { + ic.cropRect.enable = false; + } { std::lock_guard lock(io_lock_); @@ -1302,8 +1314,11 @@ int hg_scanner_239::on_paper_check_changed(bool& check) } if (image_prc_param_.bits.paper == PAPER_AUTO_MATCH ||image_prc_param_.bits.paper == PAPER_MAX_SIZE - ||image_prc_param_.bits.paper ==PAPER_MAX_SIZE_CLIP - ||image_prc_param_.bits.paper ==PAPER_TRIGEMINY + ||image_prc_param_.bits.paper == PAPER_MAX_SIZE_CLIP + ||image_prc_param_.bits.paper == PAPER_TRIGEMINY + ||image_prc_param_.bits.paper == PAPER_16K + ||image_prc_param_.bits.paper == PAPER_8K + ||image_prc_param_.bits.paper == PAPER_16K_LATERAL ) { HGSCANCONF *d = &dev_conf_; diff --git a/hgdriver/hgdev/hg_scanner_300.cpp b/hgdriver/hgdev/hg_scanner_300.cpp index 648ef36..ff870ce 100644 --- a/hgdriver/hgdev/hg_scanner_300.cpp +++ b/hgdriver/hgdev/hg_scanner_300.cpp @@ -1072,7 +1072,18 @@ else { ic.pixtype = 2; } - + //自定义裁切 + if (image_prc_param_.bits.paper == PAPER_AUTO_MATCH + ||image_prc_param_.bits.paper == PAPER_MAX_SIZE + ||image_prc_param_.bits.paper == PAPER_MAX_SIZE_CLIP + ||image_prc_param_.bits.paper == PAPER_TRIGEMINY + ||image_prc_param_.bits.paper == PAPER_16K + ||image_prc_param_.bits.paper == PAPER_8K + ||image_prc_param_.bits.paper == PAPER_16K_LATERAL + ) + { + ic.cropRect.enable = false; + } img_conf_ = ic; int ret = agreement((TwSS)img_conf_.papertype,img_conf_.paperAlign); diff --git a/hgdriver/hgdev/hg_scanner_400.cpp b/hgdriver/hgdev/hg_scanner_400.cpp index d4d8eb5..2c6b702 100644 --- a/hgdriver/hgdev/hg_scanner_400.cpp +++ b/hgdriver/hgdev/hg_scanner_400.cpp @@ -1087,6 +1087,18 @@ void hg_scanner_400::writedown_image_configuration(void) 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 (image_prc_param_.bits.paper == PAPER_AUTO_MATCH + ||image_prc_param_.bits.paper == PAPER_MAX_SIZE + ||image_prc_param_.bits.paper == PAPER_MAX_SIZE_CLIP + ||image_prc_param_.bits.paper == PAPER_TRIGEMINY + ||image_prc_param_.bits.paper == PAPER_16K + ||image_prc_param_.bits.paper == PAPER_8K + ||image_prc_param_.bits.paper == PAPER_16K_LATERAL + ) + { + ic.cropRect.enable = false; } img_conf_ = ic; diff --git a/hgdriver/hgdev/scanner_manager.cpp b/hgdriver/hgdev/scanner_manager.cpp index ffcd97f..1ca729f 100644 --- a/hgdriver/hgdev/scanner_manager.cpp +++ b/hgdriver/hgdev/scanner_manager.cpp @@ -24,20 +24,20 @@ static struct std::string rsc; // USB resource, version-addr. e.g. "USB2.0-1" } g_supporting_devices[] = { -//#ifdef OEM_LISICHENG +#ifdef OEM_LISICHENG {0x31c9, 0x8420, SCANNER_NAME_LSC_G42S, "G426xF", ""} , {0x31c9, 0x8520, SCANNER_NAME_LSC_G52S, "G52x0F", ""} , {0x31c9, 0x8620, SCANNER_NAME_LSC_G62S, "G6290U", ""} , {0x31c9, 0x8629, SCANNER_NAME_LSC_G62S, "G6290U", ""} , {0x31c9, 0x8730, SCANNER_NAME_LSC_G73S, "G73x0U", ""} , {0x31c9, 0x8739, SCANNER_NAME_LSC_G73S, "G73x0U", ""}, -//#endif -//#ifdef OEM_HANWANG +#endif +#ifdef OEM_HANWANG {0x2903, 0x7000, SCANNER_NAME_HW_7000, "HW-74x0WA", ""} , {0x2903, 0x1000, SCANNER_NAME_HW_1060A, "HW-1060A", ""} , {0x2903, 0x8000, SCANNER_NAME_HW_8090F, "HW-8090F", ""} , {0x2903, 0x9000, SCANNER_NAME_HW_9110F, "HW-9110F", ""}, -//#endif +#endif {0x3072, 0x100, SCANNER_NAME_HG_G100, "GScanO200", ""} , {0x3072, 0x200, SCANNER_NAME_HG_G200, "GScanO200", ""} , {0x3072, 0x300, SCANNER_NAME_HG_G300, "GScanO400", ""} From 9e5dad553180f1537762256eb84fea3128b238dd Mon Sep 17 00:00:00 2001 From: "mo1027728827@qq.com" Date: Fri, 10 Jun 2022 17:44:15 +0800 Subject: [PATCH 06/13] =?UTF-8?q?=E8=B0=83=E6=95=B4=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E8=A3=81=E5=88=87=E7=9A=84=E6=8E=A7=E4=BB=B6=E4=BA=92?= =?UTF-8?q?=E6=96=A5=EF=BC=8C=E8=B0=83=E6=95=B4=E8=B7=B3=E8=BF=87=E7=A9=BA?= =?UTF-8?q?=E7=99=BD=E9=A1=B5=E5=9B=A0=E4=B8=BA=E6=8A=98=E5=8F=A0=E8=BF=87?= =?UTF-8?q?=E7=9A=84=E7=BA=B8=E5=BC=A0=E8=80=8C=E8=B7=B3=E4=B8=8D=E8=BF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/hgdev/hg_scanner_239.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/hgdriver/hgdev/hg_scanner_239.cpp b/hgdriver/hgdev/hg_scanner_239.cpp index 596031e..f3b0559 100644 --- a/hgdriver/hgdev/hg_scanner_239.cpp +++ b/hgdriver/hgdev/hg_scanner_239.cpp @@ -843,7 +843,7 @@ else 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_ >= 60 ? 60 : omit_empty_level_; //默认20 + ic.discardblank_percent = omit_empty_level_ >= 70 ? 70 : omit_empty_level_; 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; @@ -886,7 +886,7 @@ else 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); @@ -894,7 +894,7 @@ else 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; ic.normalCrop = image_prc_param_.bits.dark_sample; ic.dogeardistabce = fractate_level_; @@ -929,9 +929,6 @@ else ||image_prc_param_.bits.paper == PAPER_MAX_SIZE ||image_prc_param_.bits.paper == PAPER_MAX_SIZE_CLIP ||image_prc_param_.bits.paper == PAPER_TRIGEMINY - ||image_prc_param_.bits.paper == PAPER_16K - ||image_prc_param_.bits.paper == PAPER_8K - ||image_prc_param_.bits.paper == PAPER_16K_LATERAL ) { ic.cropRect.enable = false; @@ -1567,8 +1564,8 @@ void hg_scanner_239::thread_handle_usb_read(void) LOG_INFO(LOG_LEVEL_DEBUG_INFO, "received 'STOPSCAN' message in usb thread, check remaining image and finish scanning ...\n"); // fetch all buffered images and exit ... - while(!is_dev_image_process_done()) - std::this_thread::sleep_for(std::chrono::milliseconds(30)); + //while(!is_dev_image_process_done()) + std::this_thread::sleep_for(std::chrono::milliseconds(1000)); while (get_image_count() > 0) { From e6f00313aacdca10aecd2db9e593905ea6611888 Mon Sep 17 00:00:00 2001 From: 13038267101 Date: Mon, 13 Jun 2022 17:31:03 +0800 Subject: [PATCH 07/13] =?UTF-8?q?=E6=96=B0=E5=A2=9Elibusb=E5=BA=93?= =?UTF-8?q?=E7=9A=84=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/hgdev/hg_scanner_239.cpp | 11 +++++++++-- hgdriver/wrapper/CMakeLists.txt | 3 ++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/hgdriver/hgdev/hg_scanner_239.cpp b/hgdriver/hgdev/hg_scanner_239.cpp index f3b0559..26c253f 100644 --- a/hgdriver/hgdev/hg_scanner_239.cpp +++ b/hgdriver/hgdev/hg_scanner_239.cpp @@ -1482,11 +1482,18 @@ void hg_scanner_239::thread_handle_usb_read(void) } if (ret == SCANNER_ERR_TIMEOUT) { - if (++to_cnt > 20) + if (img_conf_.resolution_dst == 600.0 && ++to_cnt > 50) { status_ = ret; notify_ui_working_status("通信超时", SANE_EVENT_ERROR, ret); - //stop(); + VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "600dpi '%s'\n", hg_scanner_err_name(status_)); + break; + } + else if (img_conf_.resolution_dst != 600.0 &&++to_cnt > 20) + { + status_ = ret; + notify_ui_working_status("通信超时", SANE_EVENT_ERROR, ret); + VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "其他dpi '%s'\n", hg_scanner_err_name(status_)); break; } std::this_thread::sleep_for(std::chrono::milliseconds(500)); diff --git a/hgdriver/wrapper/CMakeLists.txt b/hgdriver/wrapper/CMakeLists.txt index d36cb0f..c072a01 100644 --- a/hgdriver/wrapper/CMakeLists.txt +++ b/hgdriver/wrapper/CMakeLists.txt @@ -23,8 +23,9 @@ message(STATUS ${CMAKE_HOST_SYSTEM}) message(STATUS ${CMAKE_SYSTEM_PROCESSOR}) message(STATUS ${CMAKE_HOST_SYSTEM_NAME}) - +target_link_libraries(${PROJECT_NAME} PRIVATE udev) target_link_libraries(${PROJECT_NAME} PRIVATE + ${PROJECT_SOURCE_DIR}/../../../sdk/lib/uos/${CMAKE_SYSTEM_PROCESSOR}/libusb-1.0.a ${PROJECT_SOURCE_DIR}/../../../build/libgdev.a ${PROJECT_SOURCE_DIR}/../../../build/libgimgproc.a ${PROJECT_SOURCE_DIR}/../3rdparty/opencv/lib/uos/${CMAKE_SYSTEM_PROCESSOR}/libopencv_world.a From ca2e83e14c36d414aef7964fb8dba8722c5b7b88 Mon Sep 17 00:00:00 2001 From: 13038267101 Date: Tue, 14 Jun 2022 17:02:19 +0800 Subject: [PATCH 08/13] =?UTF-8?q?=E8=B0=83=E6=95=B4=E9=83=A8=E5=88=86?= =?UTF-8?q?=E7=9A=84=E5=88=87=E6=8D=A2=E9=A2=9C=E8=89=B2=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/hgdev/hg_scanner.cpp | 61 ++++++++++++++++++++++++++++--- hgdriver/hgdev/hg_scanner.h | 2 + hgdriver/hgdev/hg_scanner_239.cpp | 16 +++++++- hgdriver/hgdev/hg_scanner_239.h | 2 +- 4 files changed, 74 insertions(+), 7 deletions(-) diff --git a/hgdriver/hgdev/hg_scanner.cpp b/hgdriver/hgdev/hg_scanner.cpp index d4145b8..0efc944 100644 --- a/hgdriver/hgdev/hg_scanner.cpp +++ b/hgdriver/hgdev/hg_scanner.cpp @@ -857,6 +857,16 @@ void hg_scanner::reset_custom_area_range(int paper) } } +int hg_scanner::set_color_change(void) +{ + // if (/* condition */) + // { + // /* code */ + // } + + return SCANNER_ERR_OK; +} + int hg_scanner::setting_restore(void* data) { // restore ... @@ -942,12 +952,18 @@ int hg_scanner::setting_multi_out(void *data) { is_multiout = *((bool*)data); int val = image_prc_param_.bits.color_mode; - + printf("val = %d\r\n",val); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "image_prc_param_.bits.multi_out %d ", image_prc_param_.bits.multi_out); - if (!is_multiout) - on_color_mode_changed(val); - + if (is_multiout) + { + if (image_prc_param_.bits.multi_out == MULTI_GRAY_AND_BW) + val = COLOR_MODE_256_GRAY; + else + val = COLOR_MODE_24_BITS; + } + on_color_mode_changed(val); + return SCANNER_ERR_OK; } int hg_scanner::setting_multi_out_type(void *data) @@ -1544,6 +1560,40 @@ int hg_scanner::setting_color_fill(void *data) } int hg_scanner::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) && !is_color_type_) || + ((color_mode != COLOR_MODE_24_BITS && color_mode != COLOR_MODE_AUTO_MATCH) && is_color_type_)) && color_mode != -1) + { + is_color_type_ ^= 1; + } + if (image_prc_param_.bits.rid_color != RID_COLOR_NONE + &&(image_prc_param_.bits.color_mode == COLOR_MODE_256_GRAY || image_prc_param_.bits.color_mode == COLOR_MODE_BLACK_WHITE) + ) + { + is_color_type_ = 1; + } + if(image_prc_param_.bits.rid_color != RID_COLOR_NONE + && (image_prc_param_.bits.color_mode == COLOR_MODE_256_GRAY || image_prc_param_.bits.color_mode == COLOR_MODE_BLACK_WHITE) + && color_mode == -1) + { + is_color_type_ = 1; + } + else if (image_prc_param_.bits.rid_color == RID_COLOR_NONE + && (image_prc_param_.bits.color_mode == COLOR_MODE_256_GRAY || image_prc_param_.bits.color_mode == COLOR_MODE_BLACK_WHITE) + && color_mode == -1) + { + is_color_type_ = 0; + } + if (is_multiout) + { + is_color_type_ = 1; + // if (/* condition */) + // { + // /* code */ + // } + + } + return SCANNER_ERR_OK; } int hg_scanner::on_paper_changed(int& paper) @@ -2607,4 +2657,5 @@ int hg_scanner::set_scan_with_hole(void) int hg_scanner::get_scan_is_sleep(void) { return SCANNER_ERR_DEVICE_NOT_SUPPORT; -} \ No newline at end of file +} + diff --git a/hgdriver/hgdev/hg_scanner.h b/hgdriver/hgdev/hg_scanner.h index eec73bb..2d58db9 100644 --- a/hgdriver/hgdev/hg_scanner.h +++ b/hgdriver/hgdev/hg_scanner.h @@ -102,6 +102,7 @@ class hg_scanner std::string name_; std::string save_multiout; //保存多留输出类型 bool save_sizecheck; + int is_color_type_;//保存最后下发到设备的颜色类型 sane_callback ui_ev_cb_; do_when_born_and_dead* scan_life_; @@ -125,6 +126,7 @@ class hg_scanner void working_done(void*); void reset_custom_area_range(int paper); + int set_color_change(void); // 设置接口 protected: diff --git a/hgdriver/hgdev/hg_scanner_239.cpp b/hgdriver/hgdev/hg_scanner_239.cpp index 26c253f..e2272c2 100644 --- a/hgdriver/hgdev/hg_scanner_239.cpp +++ b/hgdriver/hgdev/hg_scanner_239.cpp @@ -913,7 +913,7 @@ else 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) @@ -923,7 +923,21 @@ else 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 (image_prc_param_.bits.paper == PAPER_AUTO_MATCH ||image_prc_param_.bits.paper == PAPER_MAX_SIZE diff --git a/hgdriver/hgdev/hg_scanner_239.h b/hgdriver/hgdev/hg_scanner_239.h index c0fd3f6..12adf37 100644 --- a/hgdriver/hgdev/hg_scanner_239.h +++ b/hgdriver/hgdev/hg_scanner_239.h @@ -59,7 +59,7 @@ class hg_scanner_239 : public hg_scanner protected: virtual void init_setting_map(int* setting_map, int count) override; - virtual int on_color_mode_changed(int& color_mode) override; + int on_color_mode_changed(int& color_mode) override; virtual int on_paper_changed(int& paper) override; virtual int on_paper_check_changed(bool& check) override; virtual int on_resolution_changed(int& dpi) override; From 9752079d31013fd5691a453f844c3a64f71a1dce Mon Sep 17 00:00:00 2001 From: 13038267101 Date: Wed, 15 Jun 2022 09:05:56 +0800 Subject: [PATCH 09/13] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E6=89=93=E5=8D=B0=E8=B0=83=E8=AF=95=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/hgdev/hg_scanner.cpp | 1 - hgdriver/hgdev/hg_scanner_239.cpp | 6 ------ 2 files changed, 7 deletions(-) diff --git a/hgdriver/hgdev/hg_scanner.cpp b/hgdriver/hgdev/hg_scanner.cpp index 0efc944..5e30a42 100644 --- a/hgdriver/hgdev/hg_scanner.cpp +++ b/hgdriver/hgdev/hg_scanner.cpp @@ -952,7 +952,6 @@ int hg_scanner::setting_multi_out(void *data) { is_multiout = *((bool*)data); int val = image_prc_param_.bits.color_mode; - printf("val = %d\r\n",val); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "image_prc_param_.bits.multi_out %d ", image_prc_param_.bits.multi_out); if (is_multiout) diff --git a/hgdriver/hgdev/hg_scanner_239.cpp b/hgdriver/hgdev/hg_scanner_239.cpp index e2272c2..6829d89 100644 --- a/hgdriver/hgdev/hg_scanner_239.cpp +++ b/hgdriver/hgdev/hg_scanner_239.cpp @@ -662,12 +662,6 @@ void hg_scanner_239::image_process(std::shared_ptr& buff) param.double_side = img_conf_.is_duplex; param.dpi = img_conf_.resolution_dst; - // printf("img_conf_ =%d\r\n",img_conf_.pixtype); - // printf("param.black_white :%d\r\n",param.black_white); - // printf("param.channels :%d\r\n",param.channels); - // printf("param.color_mode :%d\r\n",param.color_mode); - // printf("param.double_side :%d\r\n",param.double_side); - // printf("param.dpi :%d\r\n",param.dpi); handle = hg_imgproc::init(&img_conf_,¶m,pid_); err = hg_imgproc::load_buffer(handle, buff); From 654fdbfcf7a7862db41529d285c84d58ca8f9788 Mon Sep 17 00:00:00 2001 From: 13038267101 Date: Wed, 15 Jun 2022 09:47:17 +0800 Subject: [PATCH 10/13] =?UTF-8?q?=E8=B0=83=E6=95=B4=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.sh | 2 +- hgdriver/hgdev/hg_scanner_239.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.sh b/build.sh index 8c83ff5..59ebc76 100755 --- a/build.sh +++ b/build.sh @@ -7,7 +7,7 @@ mainverstr="s/ver_1/4/g" #版本控制 minver="06" minverstr="s/ver_2/" - +sudo apt install libudev-dev if [ "$sys" == "UnionTech" ];then # uos ... diff --git a/hgdriver/hgdev/hg_scanner_239.cpp b/hgdriver/hgdev/hg_scanner_239.cpp index 6829d89..4f38871 100644 --- a/hgdriver/hgdev/hg_scanner_239.cpp +++ b/hgdriver/hgdev/hg_scanner_239.cpp @@ -883,7 +883,7 @@ else { 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); + 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; From 5d3422d1404f0d1824693148978f62f669ac5964 Mon Sep 17 00:00:00 2001 From: 13038267101 Date: Wed, 15 Jun 2022 10:09:26 +0800 Subject: [PATCH 11/13] =?UTF-8?q?libusb=E7=9A=84=E7=BC=96=E8=AF=91?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/hgdev/hg_scanner_239.cpp | 7 +++++-- hgdriver/wrapper/CMakeLists.txt | 12 ++++++++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/hgdriver/hgdev/hg_scanner_239.cpp b/hgdriver/hgdev/hg_scanner_239.cpp index 4f38871..7125539 100644 --- a/hgdriver/hgdev/hg_scanner_239.cpp +++ b/hgdriver/hgdev/hg_scanner_239.cpp @@ -806,8 +806,11 @@ else ic.imageRotateDegree *= 90.0f; - 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.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; diff --git a/hgdriver/wrapper/CMakeLists.txt b/hgdriver/wrapper/CMakeLists.txt index c072a01..4ba1a35 100644 --- a/hgdriver/wrapper/CMakeLists.txt +++ b/hgdriver/wrapper/CMakeLists.txt @@ -23,9 +23,17 @@ message(STATUS ${CMAKE_HOST_SYSTEM}) message(STATUS ${CMAKE_SYSTEM_PROCESSOR}) message(STATUS ${CMAKE_HOST_SYSTEM_NAME}) -target_link_libraries(${PROJECT_NAME} PRIVATE udev) + +if(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux") + target_link_libraries(${PROJECT_NAME} PRIVATE udev + ${PROJECT_SOURCE_DIR}/../../../sdk/lib/uos/${CMAKE_SYSTEM_PROCESSOR}/libusb-1.0.a + ) +else() + message("current platform: Windows ") +endif() + target_link_libraries(${PROJECT_NAME} PRIVATE - ${PROJECT_SOURCE_DIR}/../../../sdk/lib/uos/${CMAKE_SYSTEM_PROCESSOR}/libusb-1.0.a + ${PROJECT_SOURCE_DIR}/../../../build/libgdev.a ${PROJECT_SOURCE_DIR}/../../../build/libgimgproc.a ${PROJECT_SOURCE_DIR}/../3rdparty/opencv/lib/uos/${CMAKE_SYSTEM_PROCESSOR}/libopencv_world.a From 1badfeb8714516e7cc90af2931328382b16709bb Mon Sep 17 00:00:00 2001 From: 13038267101 Date: Wed, 15 Jun 2022 10:35:09 +0800 Subject: [PATCH 12/13] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=85=B6=E4=BB=96?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E7=9A=84=E4=BA=92=E6=96=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/hgdev/hg_scanner_200.cpp | 29 +++++++++++++++++++++++++---- hgdriver/hgdev/hg_scanner_239.cpp | 9 +++++++++ hgdriver/hgdev/hg_scanner_300.cpp | 29 +++++++++++++++++++++++++---- hgdriver/hgdev/hg_scanner_400.cpp | 29 +++++++++++++++++++++++++---- 4 files changed, 84 insertions(+), 12 deletions(-) diff --git a/hgdriver/hgdev/hg_scanner_200.cpp b/hgdriver/hgdev/hg_scanner_200.cpp index ba2b1fd..938973c 100644 --- a/hgdriver/hgdev/hg_scanner_200.cpp +++ b/hgdriver/hgdev/hg_scanner_200.cpp @@ -1146,6 +1146,7 @@ else ic.multiOutput = MultiOutput::Unused; ic.fadeback = false; } + //多留输出的处理 if (image_prc_param_.bits.multi_out == MULTI_GRAY_AND_BW && is_multiout) { ic.pixtype = 1; @@ -1153,15 +1154,35 @@ else 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 - ||image_prc_param_.bits.paper == PAPER_16K - ||image_prc_param_.bits.paper == PAPER_8K - ||image_prc_param_.bits.paper == PAPER_16K_LATERAL ) { ic.cropRect.enable = false; diff --git a/hgdriver/hgdev/hg_scanner_239.cpp b/hgdriver/hgdev/hg_scanner_239.cpp index 7125539..e7ea84f 100644 --- a/hgdriver/hgdev/hg_scanner_239.cpp +++ b/hgdriver/hgdev/hg_scanner_239.cpp @@ -934,6 +934,15 @@ else 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 diff --git a/hgdriver/hgdev/hg_scanner_300.cpp b/hgdriver/hgdev/hg_scanner_300.cpp index ff870ce..47d058f 100644 --- a/hgdriver/hgdev/hg_scanner_300.cpp +++ b/hgdriver/hgdev/hg_scanner_300.cpp @@ -1064,6 +1064,7 @@ else ic.multiOutput = MultiOutput::Unused; ic.fadeback = false; } + //多留输出的处理 if (image_prc_param_.bits.multi_out == MULTI_GRAY_AND_BW && is_multiout) { ic.pixtype = 1; @@ -1071,21 +1072,41 @@ else 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 - ||image_prc_param_.bits.paper == PAPER_16K - ||image_prc_param_.bits.paper == PAPER_8K - ||image_prc_param_.bits.paper == PAPER_16K_LATERAL ) { ic.cropRect.enable = false; } - img_conf_ = ic; + img_conf_ = ic; int ret = agreement((TwSS)img_conf_.papertype,img_conf_.paperAlign); if (ret != SCANNER_ERR_OK) { diff --git a/hgdriver/hgdev/hg_scanner_400.cpp b/hgdriver/hgdev/hg_scanner_400.cpp index 2c6b702..a3b140e 100644 --- a/hgdriver/hgdev/hg_scanner_400.cpp +++ b/hgdriver/hgdev/hg_scanner_400.cpp @@ -1080,6 +1080,7 @@ void hg_scanner_400::writedown_image_configuration(void) ic.multiOutput = MultiOutput::Unused; ic.fadeback = false; } + //多留输出的处理 if (image_prc_param_.bits.multi_out == MULTI_GRAY_AND_BW && is_multiout) { ic.pixtype = 1; @@ -1087,15 +1088,35 @@ void hg_scanner_400::writedown_image_configuration(void) 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 - ||image_prc_param_.bits.paper == PAPER_16K - ||image_prc_param_.bits.paper == PAPER_8K - ||image_prc_param_.bits.paper == PAPER_16K_LATERAL ) { ic.cropRect.enable = false; From 7b92ec93d8ce2588a195b538cd5c5f20f0be6740 Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Wed, 15 Jun 2022 11:05:36 +0800 Subject: [PATCH 13/13] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E4=BB=A5=E9=80=82=E5=BA=94TWAIN=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/hgdev/common_setting.cpp | 67 ++++++++++++++++ hgdriver/hgdev/hg_scanner.cpp | 42 ++++++++++- hgdriver/hgdev/scanner_manager.cpp | 2 + hgsane/sane_hg_mdw.cpp | 105 ++++++++++++++++++++------ hgsane/sane_hg_mdw.h | 12 ++- hgsane/sane_option.cpp | 36 +++++++++ hgsane/sane_option.h | 2 + sdk/hginclude/huagaoxxx_warraper_ex.h | 6 +- 8 files changed, 243 insertions(+), 29 deletions(-) diff --git a/hgdriver/hgdev/common_setting.cpp b/hgdriver/hgdev/common_setting.cpp index 470564c..6c0d3f6 100644 --- a/hgdriver/hgdev/common_setting.cpp +++ b/hgdriver/hgdev/common_setting.cpp @@ -134,6 +134,73 @@ static struct paper_size {PAPER_B5_LATERAL, {250, 176}}, // {PAPER_B5, {182, 257}}, {PAPER_B6_LATERAL, {176, 125}} }; +// Custom 纸张的大小由用户定义. +// Letter Letter 纸(216 毫米 × 279 毫米). +// Legal Legal 纸(216 毫米 × 356 毫米). +// A4 A4 纸(210 毫米 × 297 毫米). +// CSheet C 纸(432 毫米 × 559 毫米). +// DSheet D 纸(559 毫米 × 864 毫米). +// ESheet E 纸(864 毫米 × 1118 毫米). +// LetterSmall Letter small 纸(216 毫米 × 279 毫米). +// Tabloid Tabloid 纸(279 毫米 × 432 毫米). +// Ledger Ledger 纸(432 毫米 × 279 毫米). +// Statement Statement 纸(140 毫米 × 216 毫米). +// Executive Executive 纸(184 毫米 × 267 毫米). +// A3 A3 纸(297 毫米 × 420 毫米). +// A4Small A4 small 纸(210 毫米 × 297 毫米). +// A5 A5 纸(148 毫米 × 210 毫米). +// B4 B4 纸(250 × 353 毫米). +// B5 B5 纸(176 毫米 × 250 毫米). +// Folio Folio 纸(216 毫米 × 330 毫米). +// Quarto Quarto 纸(215 毫米 × 275 毫米). +// Standard10x14 Standard 纸(254 毫米 × 356 毫米). +// Standard11x17 Standard 纸(279 毫米 × 432 毫米). +// Note Note 纸(216 毫米 × 279 毫米). +// Number9Envelope #9 envelope(98 毫米 × 225 毫米). +// Number10Envelope #10 envelope(105 毫米 × 241 毫米). +// Number11Envelope #11 envelope(114 毫米 × 263 毫米). +// Number12Envelope #12 envelope(120 毫米 × 279 毫米). +// Number14Envelope #14 envelope(127 毫米 × 292 毫米). +// DLEnvelope DL 信封(110 毫米 × 220 毫米). +// C5Envelope C5 信封(162 毫米 × 229 毫米). +// C3Envelope C3 信封(324 毫米 × 458 毫米). +// C4Envelope C4 信封(229 毫米 × 324 毫米). +// C6Envelope C6 信封(114 毫米 × 162 毫米). +// C65Envelope C65 信封(114 毫米 × 229 毫米). +// B4Envelope B4 信封(250 × 353 毫米). +// B5Envelope B5 信封(176 毫米 × 250 毫米). +// B6Envelope B6 信封(176 毫米 × 125 毫米). +// ItalyEnvelope Italy envelope(110 毫米 × 230 毫米). +// MonarchEnvelope Monarch envelope(98 毫米 × 191 毫米). +// PersonalEnvelope 6 3 / 4 envelope(92 毫米 × 165 毫米). +// USStandardFanfold US standard fanfold(378 毫米 × 279 毫米). +// GermanStandardFanfold German standard fanfold(216 毫米 × 305 毫米). +// GermanLegalFanfold German legal fanfold(216 毫米 × 330 毫米). +// IsoB4 ISO B4(250 毫米 × 353 毫米). +// JapanesePostcard Japanese postcard(100 毫米 × 148 毫米). +// Standard9x11 Standard 纸(229 毫米 × 279 毫米). +// Standard10x11 Standard 纸(254 毫米 × 279 毫米). +// Standard15x11 Standard 纸(381 毫米 × 279 毫米). +// InviteEnvelope 邀请函信封(220 毫米 × 220 毫米). +// LetterExtra Letter extra 纸(236 毫米 × 305 毫米).该值特定于 PostScript 驱动程序, 仅供 Linotronic 打印机使用以节省纸张. +// LegalExtra Legal extra 纸(236 毫米 × 381 毫米).该值特定于 PostScript 驱动程序, 仅供 Linotronic 打印机使用以节省纸张. +// TabloidExtra Tabloid extra 纸(297 毫米 × 457 毫米).该值特定于 PostScript 驱动程序, 仅供 Linotronic 打印机使用以节省纸张. +// A4Extra A4 extra 纸(236 毫米 × 322 毫米).该值是针对 PostScript 驱动程序的, 仅供 Linotronic 打印机使用以节省纸张. +// LetterTransverse Letter transverse 纸(210 毫米 × 279 毫米). +// A4Transverse A4 transverse 纸(210 毫米 × 297 毫米). +// LetterExtraTransverse Letter extra transverse 纸(236 毫米 × 305 毫米). +// APlus SuperA / SuperA / A4 纸(227 毫米 × 356 毫米). +// BPlus SuperB / SuperB / A3 纸(305 毫米 × 487 毫米). +// LetterPlus Letter plus 纸(216 毫米 × 322 毫米). +// A4Plus A4 plus 纸(210 毫米 × 330 毫米). +// A5Transverse A5 transverse 纸(148 毫米 × 210 毫米). +// B5Transverse JIS B5 transverse 纸(182 毫米 × 257 毫米). +// A3Extra A3 extra 纸(322 毫米 × 445 毫米). +// A5Extra A5 extra 纸(174 毫米 × 235 毫米). +// B5Extra ISO B5 extra 纸(201 毫米 × 276 毫米). +// A2 A2 纸(420 毫米 × 594 毫米). +// A3Transverse A3 transverse 纸(297 毫米 × 420 毫米). +// A3ExtraTransverse A3 extra transverse 纸(322 毫米 × 445 毫米). static int match_best(struct _fixed_option* arr, size_t num, std::string& val, bool& exact) { diff --git a/hgdriver/hgdev/hg_scanner.cpp b/hgdriver/hgdev/hg_scanner.cpp index 5e30a42..21bdcd9 100644 --- a/hgdriver/hgdev/hg_scanner.cpp +++ b/hgdriver/hgdev/hg_scanner.cpp @@ -2384,12 +2384,45 @@ int hg_scanner::device_io_control(unsigned long code, void* data, unsigned* len) return clear_roller_num(); } + else if (code == IO_CTRL_CODE_GET_FINAL_IMAGE_FORMAT) + { + SANE_FinalImgFormat* fmt = (SANE_FinalImgFormat*)data; + if (!fmt) + { + *len = sizeof(SANE_FinalImgFormat); + + return SCANNER_ERR_INSUFFICIENT_MEMORY; + } + + if (img_type_ == ".bmp") + fmt->img_format = SANE_IMAGE_TYPE_BMP; + else if (img_type_ == ".jpg") + fmt->img_format = SANE_IMAGE_TYPE_JPG; + else if (img_type_ == ".png") + fmt->img_format = SANE_IMAGE_TYPE_PNG; + else if (img_type_ == ".gif") + fmt->img_format = SANE_IMAGE_TYPE_GIF; + else + fmt->img_format = SANE_IMAGE_TYPE_BMP; + + return SCANNER_ERR_OK; + } else if (code == IO_CTRL_CODE_SET_FINAL_IMAGE_FORMAT) { SANE_FinalImgFormat* fmt = (SANE_FinalImgFormat*)data; return set_final_image_format(fmt); } + else if (code == IO_CTRL_CODE_GET_FINAL_COMPRESSION) + { + *(int*)data = SANE_COMPRESSION_NONE; + + return SCANNER_ERR_OK; + } + else if (code == IO_CTRL_CODE_SET_FINAL_COMPRESSION) + { + return SCANNER_ERR_DEVICE_NOT_SUPPORT; + } else if(code == IO_CTRL_CODE_TEST_SINGLE) { return set_leaflet_scan(); @@ -2527,6 +2560,13 @@ int hg_scanner::device_io_control(unsigned long code, void* data, unsigned* len) //setting_help(data); return SCANNER_ERR_OK; } + else if (code == IO_CTRL_CODE_GET_IMAGE_QUEUE_COUNT) + { + *len = final_imgs_.size(); + + return wait_img_.is_waiting() && wait_usb_.is_waiting() ? SCANNER_ERR_NO_DATA : SCANNER_ERR_OK; + } + return SCANNER_ERR_DEVICE_NOT_SUPPORT; } std::string hg_scanner::get_firmware_version(void) @@ -2592,7 +2632,7 @@ int hg_scanner::set_final_image_format(SANE_FinalImgFormat* fmt) case SANE_IMAGE_TYPE_SVG: return SCANNER_ERR_INVALID_PARAMETER; default: - img_type_ = ""; + img_type_ = ".bmp"; break; } return SCANNER_ERR_OK; diff --git a/hgdriver/hgdev/scanner_manager.cpp b/hgdriver/hgdev/scanner_manager.cpp index 1ca729f..d1c7f8c 100644 --- a/hgdriver/hgdev/scanner_manager.cpp +++ b/hgdriver/hgdev/scanner_manager.cpp @@ -415,6 +415,8 @@ scanner_err hg_scanner_mgr::hg_scanner_enum(ScannerInfo* scanner_list, long* cou { for (size_t i = 0; i < devusbuf.size(); i++) { + scanner_list->vid = g_supporting_devices[devusbuf[i].ind].vid; + scanner_list->pid = g_supporting_devices[devusbuf[i].ind].pid; strcpy(scanner_list->name, g_supporting_devices[devusbuf[i].ind].name.c_str()); strcpy(scanner_list->type, g_supporting_devices[devusbuf[i].ind].type.c_str()); sprintf(scanner_list->model, "%x", g_supporting_devices[devusbuf[i].ind].pid); diff --git a/hgsane/sane_hg_mdw.cpp b/hgsane/sane_hg_mdw.cpp index 0c6b2eb..10b69f6 100644 --- a/hgsane/sane_hg_mdw.cpp +++ b/hgsane/sane_hg_mdw.cpp @@ -68,6 +68,36 @@ namespace local_utility return (SANE_Status)hgerr; } + int sane_statu_2_scanner_err(int statu) + { +#define RETURN_MATCH_ERROR(hg, sane) \ + if(statu == sane) \ + return hg; + + RETURN_MATCH_ERROR(SCANNER_ERR_OK, SANE_STATUS_GOOD); + RETURN_MATCH_ERROR(SCANNER_ERR_INVALID_PARAMETER, SANE_STATUS_INVAL); + RETURN_MATCH_ERROR(SCANNER_ERR_INSUFFICIENT_MEMORY, SANE_STATUS_NO_MEM); + RETURN_MATCH_ERROR(SCANNER_ERR_ACCESS_DENIED, SANE_STATUS_ACCESS_DENIED); + RETURN_MATCH_ERROR(SCANNER_ERR_IO_PENDING, SANE_STATUS_GOOD); + RETURN_MATCH_ERROR(SCANNER_ERR_NOT_EXACT, SANE_STATUS_GOOD); + RETURN_MATCH_ERROR(SCANNER_ERR_CONFIGURATION_CHANGED, SANE_STATUS_GOOD); + RETURN_MATCH_ERROR(SCANNER_ERR_NOT_OPEN, SANE_STATUS_NO_DOCS); + RETURN_MATCH_ERROR(SCANNER_ERR_NOT_START, SANE_STATUS_NO_DOCS); + RETURN_MATCH_ERROR(SCANNER_ERR_NO_DATA, SANE_STATUS_EOF); + RETURN_MATCH_ERROR(SCANNER_ERR_HAS_DATA_YET, SANE_STATUS_IO_ERROR); + RETURN_MATCH_ERROR(SCANNER_ERR_OUT_OF_RANGE, SANE_STATUS_NO_MEM); + RETURN_MATCH_ERROR(SCANNER_ERR_IO, SANE_STATUS_IO_ERROR); + RETURN_MATCH_ERROR(SCANNER_ERR_TIMEOUT, SANE_STATUS_IO_ERROR); + + RETURN_MATCH_ERROR(SCANNER_ERR_DEVICE_NOT_FOUND, SANE_STATUS_NO_DOCS); + RETURN_MATCH_ERROR(SCANNER_ERR_DEVICE_NOT_SUPPORT, SANE_STATUS_UNSUPPORTED); + RETURN_MATCH_ERROR(SCANNER_ERR_DEVICE_BUSY, SANE_STATUS_DEVICE_BUSY); + RETURN_MATCH_ERROR(SCANNER_ERR_DEVICE_COVER_OPENNED, SANE_STATUS_COVER_OPEN); + RETURN_MATCH_ERROR(SCANNER_ERR_DEVICE_NO_PAPER, SANE_STATUS_NO_DOCS); + RETURN_MATCH_ERROR(SCANNER_ERR_DEVICE_PAPER_JAMMED, SANE_STATUS_JAMMED); + + return statu; + } void* acquire_memory(size_t bytes, const char* info) { @@ -437,6 +467,7 @@ hg_sane_middleware* hg_sane_middleware::instance(void) } void hg_sane_middleware::clear(void) { + local_utility::stop_work(); if (hg_sane_middleware::inst_) { delete hg_sane_middleware::inst_; @@ -992,10 +1023,30 @@ SANE_Option_Descriptor* hg_sane_middleware::find_stored_descriptor(SANE_Handle h return find_stored_descriptor(dev.dev_name.c_str(), option); } -bool hg_sane_middleware::get_current_value(scanner_handle handle, int option, void* value, SANE_Value_Type *type) +void hg_sane_middleware::reload_current_value(scanner_handle handle, std::vector* changed) +{ + long count = 0; + + if (changed) + changed->clear(); + hg_scanner_get_parameter(handle, 0, NULL, &count); + for (int i = 1; i < count; ++i) + { + std::string val(get_option_json(handle, i)); + json* jsn = new json(); + if (jsn->attach_text(&val[0]) && + jsn->get_value("type", val)) + { + if (refresh_current_value(i, jsn)) + changed->push_back(i); + } + delete jsn; + } +} +bool hg_sane_middleware::get_current_value(scanner_handle handle, int option, void* value, SANE_Value_Type* type) { std::string val(get_option_json(handle, option)); - json* jsn = new json(); + json* jsn = new json(); int estimate = 20; bool ret = false; @@ -1052,8 +1103,8 @@ bool hg_sane_middleware::get_current_value(scanner_handle handle, int option, vo void* hg_sane_middleware::get_default_value(scanner_handle handle, int option) { std::string val(get_option_json(handle, option)); - void* data = nullptr; - json* jsn = new json(); + void* data = nullptr; + json* jsn = new json(); if (jsn->attach_text(&val[0]) && jsn->get_value("type", val)) @@ -1105,28 +1156,13 @@ void* hg_sane_middleware::get_default_value(scanner_handle handle, int option) } } delete jsn; - - return data; -} -void hg_sane_middleware::reload_current_value(scanner_handle handle, std::vector* changed) -{ - long count = 0; - if (changed) - changed->clear(); - hg_scanner_get_parameter(handle, 0, NULL, &count); - for (int i = 1; i < count; ++i) + if (!data && std_opt_) { - std::string val(get_option_json(handle, i)); - json* jsn = new json(); - if (jsn->attach_text(&val[0]) && - jsn->get_value("type", val)) - { - if (refresh_current_value(i, jsn)) - changed->push_back(i); - } - delete jsn; + data = std_opt_->get_default_value(handle, option); } + + return data; } SANE_Status hg_sane_middleware::get_devices(const SANE_Device*** device_list, SANE_Bool local_only) { @@ -1452,6 +1488,24 @@ SANE_Status hg_sane_middleware::set_option(SANE_Handle h, SANE_Int option, SANE_ return status; } } +bool hg_sane_middleware::get_cur_value(SANE_Handle handle, int option, void* value, SANE_Value_Type* type) +{ + scanner_handle h = find_openning_device(handle); + + if (!h) + return false; + + return get_current_value(h, option, value, type); +} +void* hg_sane_middleware::get_def_value(SANE_Handle handle, int option) +{ + scanner_handle h = find_openning_device(handle); + + if (!h) + return NULL; + + return get_default_value(h, option); +} SANE_Status hg_sane_middleware::io_control(SANE_Handle h, unsigned long code, void* data, unsigned* len) { OPENDEV od; @@ -1873,7 +1927,6 @@ extern "C" { // avoid compiler exporting name in C++ style !!! } void inner_sane_exit(void) { - local_utility::stop_work(); hg_sane_middleware::clear(); } SANE_Status inner_sane_get_devices(const SANE_Device*** device_list, SANE_Bool local_only) @@ -1974,6 +2027,10 @@ BOOL WINAPI DllMain(HINSTANCE inst, DWORD reason, LPVOID reserved) } } } + else if (reason == DLL_PROCESS_DETACH) + { + inner_sane_exit(); + } return TRUE; } diff --git a/hgsane/sane_hg_mdw.h b/hgsane/sane_hg_mdw.h index 799073a..4d3f8b2 100644 --- a/hgsane/sane_hg_mdw.h +++ b/hgsane/sane_hg_mdw.h @@ -80,9 +80,9 @@ class hg_sane_middleware SANE_Option_Descriptor* find_stored_descriptor(const char* name, int option); SANE_Option_Descriptor* find_stored_descriptor(SANE_Handle handle, int option); - bool get_current_value(scanner_handle handle, int option, void* value, SANE_Value_Type *type = NULL); - void* get_default_value(scanner_handle handle, int option); // caller should call local_utility::free_memory to free the returned value void reload_current_value(scanner_handle handle, std::vector* changed = NULL); + bool get_current_value(scanner_handle handle, int option, void* value, SANE_Value_Type* type = NULL); + void* get_default_value(scanner_handle handle, int option); // caller should call local_utility::free_memory to free the returned value /// /// 关联项处理 @@ -185,9 +185,17 @@ public: SANE_Option_Descriptor* get_option_descriptor(SANE_Handle h, SANE_Int option); SANE_Status set_option(SANE_Handle h, SANE_Int option, SANE_Action action, void* value, SANE_Int* after_do); + bool get_cur_value(SANE_Handle handle, int option, void* value, SANE_Value_Type* type = NULL); + void* get_def_value(SANE_Handle handle, int option); // caller should call local_utility::free_memory to free the returned value // extension ... SANE_Status io_control(SANE_Handle h, unsigned long code, void* data, unsigned* len); public: }; + +namespace local_utility +{ + void free_memory(void* m); + int sane_statu_2_scanner_err(int statu); +} diff --git a/hgsane/sane_option.cpp b/hgsane/sane_option.cpp index f2e6935..e50656f 100644 --- a/hgsane/sane_option.cpp +++ b/hgsane/sane_option.cpp @@ -263,6 +263,7 @@ void sane_std_opts::init_known_opt(int option, SANE_Option_Descriptor* desc) om.known.desc->title = "Duplex"; om.known.desc->type = SANE_TYPE_BOOL; om.known.desc->unit = SANE_UNIT_NONE; + om.init = "true"; known_opts_.push_back(om); } } @@ -287,6 +288,7 @@ void sane_std_opts::init_known_opt(int option, SANE_Option_Descriptor* desc) om.known.desc->title = "Page Width"; om.known.desc->type = SANE_TYPE_INT; om.known.desc->unit = SANE_UNIT_MM; + om.init = "210"; known_opts_.push_back(om); om.known.opt = opt_num_base_ + known_opts_.size(); @@ -300,6 +302,7 @@ void sane_std_opts::init_known_opt(int option, SANE_Option_Descriptor* desc) om.known.desc->title = "Page Height"; om.known.desc->type = SANE_TYPE_INT; om.known.desc->unit = SANE_UNIT_MM; + om.init = "297"; known_opts_.push_back(om); } } @@ -319,6 +322,39 @@ bool sane_std_opts::is_known_option(int opt, SANE_Option_Descriptor** user) return sod != nullptr; } +void* sane_std_opts::get_default_value(scanner_handle h, int opt) +{ + int ind = -1; + void* ret = nullptr; + + if (get_known_option(opt, &ind)) + { + OPTMAP* op = &known_opts_[ind]; + if (op->known.desc->type == SANE_TYPE_BOOL) + { + ret = local_utility::acquire_memory(sizeof(SANE_Bool), nullptr); + *(SANE_Bool*)ret = op->init == "true" ? SANE_TRUE : SANE_FALSE; + } + else if (op->known.desc->type == SANE_TYPE_INT) + { + ret = local_utility::acquire_memory(sizeof(SANE_Int), nullptr); + *(SANE_Int*)ret = atoi(op->init.c_str()); + } + else if(op->known.desc->type == SANE_TYPE_FIXED) + { + ret = local_utility::acquire_memory(sizeof(SANE_Fixed), nullptr); + *(SANE_Fixed*)ret = SANE_FIX(atof(op->init.c_str())); + } + else if (op->known.desc->type == SANE_TYPE_STRING) + { + ret = local_utility::acquire_memory(op->known.desc->size + 4, nullptr); + memset(ret, 0, op->known.desc->size + 4); + strcpy((char*)ret, op->init.c_str()); + } + } + + return ret; +} scanner_err sane_std_opts::get_value(scanner_handle h, int opt, void* buf) { int ind = -1; diff --git a/hgsane/sane_option.h b/hgsane/sane_option.h index aa825ac..bc888ce 100644 --- a/hgsane/sane_option.h +++ b/hgsane/sane_option.h @@ -33,6 +33,7 @@ class sane_std_opts { SANEOPT known; SANEOPT user; + std::string init; }OPTMAP; std::vector known_opts_; int opt_num_base_; @@ -57,6 +58,7 @@ public: SANE_Option_Descriptor* get_option(int option); bool is_known_option(int opt, SANE_Option_Descriptor** user = nullptr); + void* get_default_value(scanner_handle h, int opt); // call local_utility::free_memory to free the returned buffer scanner_err get_value(scanner_handle h, int opt, void* buf); // call this ONLY when is_known_option returnning true scanner_err set_value(scanner_handle h, int opt, void* buf); // call this ONLY when is_known_option returnning true }; diff --git a/sdk/hginclude/huagaoxxx_warraper_ex.h b/sdk/hginclude/huagaoxxx_warraper_ex.h index 125276a..267b5b8 100644 --- a/sdk/hginclude/huagaoxxx_warraper_ex.h +++ b/sdk/hginclude/huagaoxxx_warraper_ex.h @@ -30,9 +30,9 @@ #ifdef WIN32 #ifndef HGSCANNER_EXPORT #ifdef _DEBUG -#pragma comment(lib, "debug/hgscanner.lib") +#pragma comment(lib, "debug/scanner.lib") #else -#pragma comment(lib, "release/hgscanner.lib") +#pragma comment(lib, "release/scanner.lib") #endif #endif #endif @@ -134,6 +134,8 @@ typedef struct _device { + unsigned short vid; + unsigned short pid; char name[MAX_NAME_LEN]; // 设备ANSI名称,驱动需要保证该名称唯一, // 即使在有几台同类设备同时连接上时,也能通过该名称访问指定的设备 // 参考命名:名称+资源,如“HG200 USB1”