code_device/hgdriver/hgdev/hg_scanner_300.cpp

1860 lines
110 KiB
C++
Raw Normal View History

#include "hg_scanner_300.h"
#include "../wrapper/hg_log.h"
2022-05-03 03:56:07 +00:00
#if defined(WIN32) || defined(_WIN64)
2022-05-03 03:56:07 +00:00
#include "scanner_manager.h"
#endif
2023-01-17 07:07:58 +00:00
//G300
static std::string jsontext1("{\"global\":{\"device_type\":\"G300\",\"option_count\":69},\"restore\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"none\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u6062\\u590d\\u9ed8\\u8ba4\\u8bbe\\u7f6e\",\"desc\":\"\\u6062\\u590d\\u9ed8\\u8ba4\\u8bbe\\u7f6e\",\"type\":\"button\",\"cur\":\"button\",\"default\":\"button\",\"size\":0},\"help\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"none\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u5e2e\\u52a9\",\"desc\":\"\\u663e\\u793a\\u8f6f\\u4ef6\\u5e2e\\u52a9\\u6587\\u6863\",\"type\":\"button\",\"cur\":\"true\",\"default\":\"true\",\"size\":4},\"grp-1\":{\"cat\":\"base\",\"title\":\"\\u57fa\\u672c\\u8bbe\\u7f6e\",\"type\":\"group\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"field\":\"Common\",\"pos\":0,\"visible\":true,\"unit\":\"None\"},\"is-multiout\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\",\"desc\":\"\\u540c\\u65f6\\u8f93\\u51fa\\u591a\\u79cd\\u989c\\u8272\\u6a21\\u5f0f\\u7684\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"multiout-type\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\\u7c7b\\u578b\",\"desc\":\"\\u9009\\u62e9\\u591a\\u6d41\\u8f93\\u51fa\\u7684\\u7c7b\\u578b\",\"type\":\"string\",\"cur\":\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"default\":\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"size\":32,\"range\":[\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"\\u5f69\\u8272+\\u7070\\u5ea6\",\"\\u5f69\\u8272+\\u9ed1\\u767d\",\"\\u7070\\u5ea6+\\u9ed1\\u767d\"],\"depend_or\":[\"is-multiout==true\"]},\"mode\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u989c\\u8272\\u6a21\\u5f0f\",\"desc\":\"\\u9009\\u62e9\\u8272\\u5f69\\u6a21\\u5f0f\",\"type\":\"string\",\"cur\":\"24\\u4f4d\\u5f69\\u8272\",\"default\":\"24\\u4f4d\\u5f69\\u8272\",\"size\":32,\"range\":[\"24\\u4f4d\\u5f69\\u8272\",\"256\\u7ea7\\u7070\\u5ea6\",\"\\u9ed1\\u767d\",\"\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"],\"depend_or\":[\"is-multiout==false\"]},\"binary-threshold\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u9ed1\\u767d\\u56fe\\u50cf\\u9608\\u503c\",\"desc\":\"\\u9ad8\\u4e8e\\u8be5\\u9608\\u503c\\u4e3a1\\uff08\\u767d\\uff09\\uff0c\\u4f4e\\u4e8e\\u8be5\\u9608\\u503c\\u4e3a0\\uff08\\u9ed1\\uff09\",\"type\":\"int\",\"cur\":127,\"default\":127,\"size\":4,\"range\":{\"min\":0,\"max\":255,\"step\":1},\"depend_or\":[\"multiout-type!=\\u5f69\\u8272+\\u7070\\u5ea6\",\"mode==\\u9ed1\\u767d\"]},\"reverse-bw\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u9ed1\\u767d\\u56fe\\u50cf\\u53cd\\u8272\\u8f93\\u51fa\",\"desc\":\"\\u8f93\\u51fa\\u7684\\u9ed1\\u767d\\u56fe\\u50cf\\u4ee5\\u201c1\\u201d\\u4ee3\\u8868\\u9ed1\\u8272\\uff0c\\u201c0\\u201d\\u4ee3\\u8868\\u767d\\u8272\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"multiout-type!=\\u5f69\\u8272+\\u7070\\u5ea6\",\"mode==\\u9ed1\\u767d\"]},\"filter\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u7070\\u5ea6\\u6216\\u9ed1\\u767d\\u56fe\\u50cf - \\u9664\\u8272\\u4e0e\\u589e\\u5f3a\",\"desc\":\"\\u6d88\\u9664\\u6216\\u589e\\u5f3a\\u6307\\u5b9a\\u8272\\u5f69\",\"type\":\"string\",\"cur\":\"\\u4e0d\\u9664\\u8272\",\"default\":\"\\u4e0d\\u9664\\u8272\",\"size\":24,\"range\":[\"\\u4e0d\\u9664\\u8272\",\"\\u9664\\u7ea2\\u8272\",\"\\u9664\\u7eff\\u8272\",\"\\u9664\\u84dd\
static std::string jsontext2("f\\u533a\\u57df\\u4e0b\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\\u53f3\\u4e0b\\u89d2y\\u5750\\u6807\",\"type\":\"float\",\"cur\":297.000000,\"default\":297.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":297.000000,\"step\":29.700000},\"depend_and\":[\"is-custom-area==true\"]},\"is-size-check\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u5c3a\\u5bf8\\u68c0\\u6d4b\",\"desc\":\"\\u68c0\\u6d4b\\u7eb8\\u5f20\\u5b9e\\u9645\\u5c3a\\u5bf8\\u4e0e\\u8bbe\\u7f6e\\u662f\\u5426\\u5339\\u914d\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"paper!=\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\"]},\"page\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u626b\\u63cf\\u9875\\u9762\",\"desc\":\"\\u8bbe\\u7f6e\\u9875\\u9762\\u626b\\u63cf\\u65b9\\u5f0f\",\"type\":\"string\",\"cur\":\"\\u53cc\\u9762\",\"default\":\"\\u53cc\\u9762\",\"size\":40,\"range\":[\"\\u5355\\u9762\",\"\\u53cc\\u9762\",\"\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u901a\\u7528\\uff09\",\"\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u53d1\\u7968\\u7eb8\\uff09\",\"\\u5bf9\\u6298\"]},\"discardblank\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"page!=\\u5bf9\\u6298\"]},\"blank-sensitivity\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\" \\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\u7075\\u654f\\u5ea6\",\"desc\":\"\\u6570\\u503c\\u8d8a\\u5927\\uff0c\\u5219\\u8d8a\\u5bb9\\u6613\\u8df3\\u8fc7\",\"type\":\"int\",\"cur\":30,\"default\":30,\"size\":4,\"range\":{\"min\":1,\"max\":100,\"step\":1},\"depend_or\":[\"page==\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u53d1\\u7968\\u7eb8\\uff09\",\"==\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u901a\\u7528\\uff09\",\"discardblank==true\"]},\"fold-type\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u5bf9\\u6298\\u6a21\\u5f0f\",\"desc\":\"\",\"type\":\"string\",\"cur\":\"\\u5de6\\u53f3\\u5bf9\\u6298\",\"default\":\"\\u5de6\\u53f3\\u5bf9\\u6298\",\"size\":50,\"range\":[\"\\u5de6\\u53f3\\u5bf9\\u6298\",\"\\u4e0a\\u4e0b\\u5bf9\\u6298\",\"\\u81ea\\u52a8\\u5bf9\\u6298\"],\"depend_or\":[\"page==\\u5bf9\\u6298\"]},\"resolution\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u5206\\u8fa8\\u7387\",\"desc\":\"\\u8bbe\\u7f6e\\u626b\\u63cf\\u56fe\\u50cf\\u7684\\u5206\\u8fa8\\u7387\",\"type\":\"int\",\"cur\":200,\"default\":200,\"size\":4,\"range\":{\"min\":100,\"max\":600,\"step\":1}},\"image-quality\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u753b\\u8d28\",\"desc\":\"\\u9009\\u62e9\\u626b\\u63cf\\u4eea\\u7684\\u753b\\u8d28\\u6a21\\u5f0f\",\"type\":\"string\",\"cur\":\"\\u753b\\u8d28\\u4f18\\u5148\",\"default\":\"\\u753b\\u8d28\\u4f18\\u5148\",\"size\":200,\"range\":[\"\\u901f\\u5ea6\\u4f18\\u5148\",\"\\u753b\\u8d28\\u4f18\\u5148\"],\"depend_or\":[\"resolution>=300\"]},\"is-exchange\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u4ea4\\u6362\\u6b63\\u53cd\\u9762\",\"desc\":\"\\u4ea4\\u6362\\u6bcf\\u5f20\\u6587\\u7a3f\\u7684\\u6b63\\u53cd\\u9762\\u51fa\\u56fe\\u987a\\u5e8f\",\"type\":
static std::string jsontext3("\"unit\":\"None\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u5de6\\u4fa7\",\"desc\":\"\\u7a7f\\u5b54\\u5728\\u7eb8\\u5f20\\u4e0a\\u7684\\u5de6\\u4fa7\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"search-hole-range-l\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\" \\u5de6\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000,\"step\":0.050000},\"depend_or\":[\"is-rid-hole-l==true\"]},\"is-rid-hole-r\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u53f3\\u4fa7\",\"desc\":\"\\u7a7f\\u5b54\\u5728\\u7eb8\\u5f20\\u4e0a\\u7684\\u53f3\\u4fa7\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"search-hole-range-r\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\" \\u53f3\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000,\"step\":0.050000},\"depend_or\":[\"is-rid-hole-r==true\"]},\"is-rid-hole-t\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u4e0a\\u4fa7\",\"desc\":\"\\u7a7f\\u5b54\\u5728\\u7eb8\\u5f20\\u7684\\u4e0a\\u90e8\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"search-hole-range-t\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\" \\u4e0a\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000,\"step\":0.050000},\"depend_or\":[\"is-rid-hole-t==true\"]},\"is-rid-hole-b\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u4e0b\\u4fa7\",\"desc\":\"\\u7a7f\\u5b54\\u5728\\u7eb8\\u5f20\\u7684\\u4e0b\\u90e8\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"search-hole-range-b\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\" \\u4e0b\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000,\"step\":0.050000},\"depend_or\":[\"is-rid-hole-b==true\"]},\"grp-4\":{\"cat\":\"base\",\"title\":\"\\u9001\\u7eb8\\u65b9\\u5f0f\\u8bbe\\u7f6e\",\"type\":\"group\",\"readonly\":false,\"affect\":0,\"group\":\"feeder\",\"field\":\"Common\",\"pos\":0,\"visible\":true,\"unit\":\"None\"},\"scan-mode\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"feeder\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u626b\\u63cf\\u5f20\\u6570\",\"desc\":\"\\u9009\\u62e9\\u6307\\u5b9a\\u6570\\u91cf\\u626b\\u63cf\\u6216\\u8fde\\u7eed\\u626b\\u63cf\",\"type\":\"string\",\"cur\":\"\\u8fde\\u7eed\\u626b\\u63cf\",\"default\":\"\\u8fde\\u7eed\\u626b\\
2023-01-17 07:07:58 +00:00
//G400
static std::string jsontext4("{\"global\":{\"device_type\":\"G400\",\"option_count\":67},\"restore\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"none\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u6062\\u590d\\u9ed8\\u8ba4\\u8bbe\\u7f6e\",\"desc\":\"\\u6062\\u590d\\u9ed8\\u8ba4\\u8bbe\\u7f6e\",\"type\":\"button\",\"cur\":\"button\",\"default\":\"button\",\"size\":0},\"help\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"none\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u5e2e\\u52a9\",\"desc\":\"\\u663e\\u793a\\u8f6f\\u4ef6\\u5e2e\\u52a9\\u6587\\u6863\",\"type\":\"button\",\"cur\":\"true\",\"default\":\"true\",\"size\":4},\"grp-1\":{\"cat\":\"base\",\"title\":\"\\u57fa\\u672c\\u8bbe\\u7f6e\",\"type\":\"group\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"field\":\"Common\",\"pos\":0,\"visible\":true,\"unit\":\"None\"},\"is-multiout\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\",\"desc\":\"\\u540c\\u65f6\\u8f93\\u51fa\\u591a\\u79cd\\u989c\\u8272\\u6a21\\u5f0f\\u7684\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"multiout-type\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\\u7c7b\\u578b\",\"desc\":\"\\u9009\\u62e9\\u591a\\u6d41\\u8f93\\u51fa\\u7684\\u7c7b\\u578b\",\"type\":\"string\",\"cur\":\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"default\":\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"size\":32,\"range\":[\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"\\u5f69\\u8272+\\u7070\\u5ea6\",\"\\u5f69\\u8272+\\u9ed1\\u767d\",\"\\u7070\\u5ea6+\\u9ed1\\u767d\"],\"depend_or\":[\"is-multiout==true\"]},\"mode\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u989c\\u8272\\u6a21\\u5f0f\",\"desc\":\"\\u9009\\u62e9\\u8272\\u5f69\\u6a21\\u5f0f\",\"type\":\"string\",\"cur\":\"24\\u4f4d\\u5f69\\u8272\",\"default\":\"24\\u4f4d\\u5f69\\u8272\",\"size\":32,\"range\":[\"24\\u4f4d\\u5f69\\u8272\",\"256\\u7ea7\\u7070\\u5ea6\",\"\\u9ed1\\u767d\",\"\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"],\"depend_or\":[\"is-multiout==false\"]},\"binary-threshold\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u9ed1\\u767d\\u56fe\\u50cf\\u9608\\u503c\",\"desc\":\"\\u9ad8\\u4e8e\\u8be5\\u9608\\u503c\\u4e3a1\\uff08\\u767d\\uff09\\uff0c\\u4f4e\\u4e8e\\u8be5\\u9608\\u503c\\u4e3a0\\uff08\\u9ed1\\uff09\",\"type\":\"int\",\"cur\":127,\"default\":127,\"size\":4,\"range\":{\"min\":0,\"max\":255,\"step\":1},\"depend_or\":[\"multiout-type!=\\u5f69\\u8272+\\u7070\\u5ea6\",\"mode==\\u9ed1\\u767d\"]},\"reverse-bw\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u9ed1\\u767d\\u56fe\\u50cf\\u53cd\\u8272\\u8f93\\u51fa\",\"desc\":\"\\u8f93\\u51fa\\u7684\\u9ed1\\u767d\\u56fe\\u50cf\\u4ee5\\u201c1\\u201d\\u4ee3\\u8868\\u9ed1\\u8272\\uff0c\\u201c0\\u201d\\u4ee3\\u8868\\u767d\\u8272\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"multiout-type!=\\u5f69\\u8272+\\u7070\\u5ea6\",\"mode==\\u9ed1\\u767d\"]},\"filter\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u7070\\u5ea6\\u6216\\u9ed1\\u767d\\u56fe\\u50cf - \\u9664\\u8272\\u4e0e\\u589e\\u5f3a\",\"desc\":\"\\u6d88\\u9664\\u6216\\u589e\\u5f3a\\u6307\\u5b9a\\u8272\\u5f69\",\"type\":\"string\",\"cur\":\"\\u4e0d\\u9664\\u8272\",\"default\":\"\\u4e0d\\u9664\\u8272\",\"size\":24,\"range\":[\"\\u4e0d\\u9664\\u8272\",\"\\u9664\\u7ea2\\u8272\",\"\\u9664\\u7eff\\u8272\",\"\\u9664\\u84dd\
static std::string jsontext5("at\",\"cur\":0.000000,\"default\":0.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":297.000000,\"step\":29.700000},\"depend_and\":[\"is-custom-area==true\"]},\"br-y\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u626b\\u63cf\\u533a\\u57df\\u4e0b\\u4fa7\\uff08mm\\uff09\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u626b\\u63cf\\u533a\\u57df\\u53f3\\u4e0b\\u89d2y\\u5750\\u6807\",\"type\":\"float\",\"cur\":297.000000,\"default\":297.000000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":297.000000,\"step\":29.700000},\"depend_and\":[\"is-custom-area==true\"]},\"page\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u626b\\u63cf\\u9875\\u9762\",\"desc\":\"\\u8bbe\\u7f6e\\u9875\\u9762\\u626b\\u63cf\\u65b9\\u5f0f\",\"type\":\"string\",\"cur\":\"\\u53cc\\u9762\",\"default\":\"\\u53cc\\u9762\",\"size\":40,\"range\":[\"\\u5355\\u9762\",\"\\u53cc\\u9762\",\"\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u901a\\u7528\\uff09\",\"\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u53d1\\u7968\\u7eb8\\uff09\",\"\\u5bf9\\u6298\"]},\"discardblank\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\",\"desc\":\"\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"page!=\\u5bf9\\u6298\"]},\"blank-sensitivity\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\" \\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\u7075\\u654f\\u5ea6\",\"desc\":\"\\u6570\\u503c\\u8d8a\\u5927\\uff0c\\u5219\\u8d8a\\u5bb9\\u6613\\u8df3\\u8fc7\",\"type\":\"int\",\"cur\":30,\"default\":30,\"size\":4,\"range\":{\"min\":1,\"max\":100,\"step\":1},\"depend_or\":[\"page==\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u53d1\\u7968\\u7eb8\\uff09\",\"==\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u901a\\u7528\\uff09\",\"discardblank==true\"]},\"fold-type\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u5bf9\\u6298\\u6a21\\u5f0f\",\"desc\":\"\",\"type\":\"string\",\"cur\":\"\\u5de6\\u53f3\\u5bf9\\u6298\",\"default\":\"\\u5de6\\u53f3\\u5bf9\\u6298\",\"size\":200,\"range\":[\"\\u5de6\\u53f3\\u5bf9\\u6298\",\"\\u4e0a\\u4e0b\\u5bf9\\u6298\",\"\\u81ea\\u52a8\\u5bf9\\u6298\"],\"depend_or\":[\"page==\\u5bf9\\u6298\"]},\"resolution\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u5206\\u8fa8\\u7387\",\"desc\":\"\\u8bbe\\u7f6e\\u626b\\u63cf\\u56fe\\u50cf\\u7684\\u5206\\u8fa8\\u7387\",\"type\":\"int\",\"cur\":200,\"default\":200,\"size\":4,\"range\":{\"min\":100,\"max\":600,\"step\":1}},\"image-quality\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u753b\\u8d28\",\"desc\":\"\",\"type\":\"string\",\"cur\":\"\\u753b\\u8d28\\u4f18\\u5148\",\"default\":\"\\u753b\\u8d28\\u4f18\\u5148\",\"size\":200,\"range\":[\"\\u901f\\u5ea6\\u4f18\\u5148\",\"\\u753b\\u8d28\\u4f18\\u5148\"],\"depend_or\":[\"resolution>=300\"]},\"is-exchange\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"base\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u4ea4\\u6362\\u6b63\\u53cd\\u9762\",\"desc\":\"\\u4ea4\\u6362\\u6bcf\\u5f20\\u6587\\u7a3f\\u7684\\u6b63\\u53cd\\u9762\\u51fa\\u56fe\\u987a\\u5e8f\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"page!=\\u5355\\u9762\"]},\"grp-2\":{\"cat\":\"base\",\"title\":\"\\u4eae\\u5ea6\",\"type\":\"group\",\"readonly\":false,\"affect\":0,\"group\":\"light\",\"field\":\"Common\",\"pos\":0,\"visible\":true,\"unit\":\"None\"},\"is-custom-gamma\":
static std::string jsontext6("\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\" \\u5de6\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000,\"step\":0.050000},\"depend_or\":[\"is-rid-hole-l==true\"]},\"is-rid-hole-r\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u53f3\\u4fa7\",\"desc\":\"\\u7a7f\\u5b54\\u5728\\u7eb8\\u5f20\\u4e0a\\u7684\\u53f3\\u4fa7\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"search-hole-range-r\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\" \\u53f3\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000,\"step\":0.050000},\"depend_or\":[\"is-rid-hole-r==true\"]},\"is-rid-hole-t\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u4e0a\\u4fa7\",\"desc\":\"\\u7a7f\\u5b54\\u5728\\u7eb8\\u5f20\\u7684\\u4e0a\\u90e8\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"search-hole-range-t\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\" \\u4e0a\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000,\"step\":0.050000},\"depend_or\":[\"is-rid-hole-t==true\"]},\"is-rid-hole-b\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u7a7f\\u5b54\\u79fb\\u9664\\u2014\\u4e0b\\u4fa7\",\"desc\":\"\\u7a7f\\u5b54\\u5728\\u7eb8\\u5f20\\u7684\\u4e0b\\u90e8\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"search-hole-range-b\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"imgproc\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\" \\u4e0b\\u4fa7\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"desc\":\"\\u7a7f\\u5b54\\u641c\\u7d22\\u8303\\u56f4\\u5360\\u5e45\\u9762\\u6bd4\\u4f8b\",\"type\":\"float\",\"cur\":0.100000,\"default\":0.100000,\"size\":4,\"range\":{\"min\":0.000000,\"max\":0.500000,\"step\":0.050000},\"depend_or\":[\"is-rid-hole-b==true\"]},\"grp-4\":{\"cat\":\"base\",\"title\":\"\\u9001\\u7eb8\\u65b9\\u5f0f\\u8bbe\\u7f6e\",\"type\":\"group\",\"readonly\":false,\"affect\":0,\"group\":\"feeder\",\"field\":\"Common\",\"pos\":0,\"visible\":true,\"unit\":\"None\"},\"scan-mode\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"feeder\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"None\",\"title\":\"\\u626b\\u63cf\\u5f20\\u6570\",\"desc\":\"\\u9009\\u62e9\\u6307\\u5b9a\\u6570\\u91cf\\u626b\\u63cf\\u6216\\u8fde\\u7eed\\u626b\\u63cf\",\"type\":\"string\",\"cur\":\"\\u8fde\\u7eed\\u626b\\u63cf\",\"default\":\"\\u8fde\\u7eed\\u626b\\u63cf\",\"size\":32,\"range\":[\"\\u8fde\\u7eed\\u626b\\u63cf\",\"\\u626b\\u63cf\\u6307\\u5b9a\\u5f20\\u6570\"]},\"scan-count\":{\"cat\":\"base\",\"readonly\":false,\"affect\":0,\"group\":\"feeder\",\"visible\":true,\"field\":\"Common\",\"pos\":0,\"unit\":\"No
2022-10-28 10:42:22 +00:00
2022-05-03 03:56:07 +00:00
namespace settingsdsp_300
{
scanner_err device_status_to_hg_err(int usbdata)
2022-05-03 03:56:07 +00:00
{
scanner_err code = SCANNER_ERR_NO_DATA;
2022-05-03 03:56:07 +00:00
switch (usbdata)
{
case setting3288dsp::DOUBLE_FEED_IMAGE:
case setting3288dsp::HAVE_IMAGE:
code = SCANNER_ERR_OK;
2022-05-03 03:56:07 +00:00
break;
case setting3288dsp::STOP_SCAN:
code = SCANNER_ERR_DEVICE_STOPPED;
2022-05-03 03:56:07 +00:00
break;
case setting3288dsp::COUNT_MODE:
code = SCANNER_ERR_DEVICE_COUNT_MODE;
2022-05-03 03:56:07 +00:00
break;
case setting3288dsp::NO_FEED:
code = SCANNER_ERR_DEVICE_NO_PAPER;
2022-05-03 03:56:07 +00:00
break;
case setting3288dsp::OPEN_COVER:
code = SCANNER_ERR_DEVICE_COVER_OPENNED;
2022-05-03 03:56:07 +00:00
break;
case setting3288dsp::FEED_IN_ERROR:
code = SCANNER_ERR_DEVICE_FEEDING_PAPER;
2022-05-03 03:56:07 +00:00
break;
case setting3288dsp::PAPER_JAM:
code = SCANNER_ERR_DEVICE_PAPER_JAMMED;
2022-05-03 03:56:07 +00:00
break;
case setting3288dsp::DETECT_DOUBLE_FEED:
code = SCANNER_ERR_DEVICE_DOUBLE_FEEDING;
2022-05-03 03:56:07 +00:00
break;
case setting3288dsp::DETECT_STAPLE:
code = SCANNER_ERR_DEVICE_STAPLE_ON;
2022-05-03 03:56:07 +00:00
break;
case setting3288dsp::PAPER_SKEW:
code = SCANNER_ERR_DEVICE_PAPER_SKEW;
2022-05-03 03:56:07 +00:00
break;
case setting3288dsp::HARDWARE_ERROR:
code = SCANNER_ERR_DEVICE_NOT_SUPPORT;
2022-05-03 03:56:07 +00:00
break;
case setting3288dsp::PC_SCAN_BUSY_or_ERROR:
code = SCANNER_ERR_DEVICE_PC_BUSY;
2022-05-03 03:56:07 +00:00
break;
case setting3288dsp::SIZE_ERROR:
code = SCANNER_ERR_DEVICE_SIZE_CHECK;
2022-05-03 03:56:07 +00:00
break;
2022-12-29 16:05:43 +00:00
case setting3288dsp::AUTO_FLAT_FINISHED:
code = SCANNER_ERR_DEVICE_AUTO_FAIL_OVER;
break;
case setting3288dsp::AUTO_FLATTING:
code = SCANNER_ERR_DEVICE_AUTO_FAIL_INFO;
break;
2023-02-21 09:52:18 +00:00
case setting3288dsp::HAVE_HOLE:
code = SCANNER_ERR_DEVICE_MAYBE_IS_HOLE;
break;
2023-10-25 11:50:29 +00:00
case setting3288dsp::IMAGE_DIRTY_BAND:
case setting3288dsp::IMAGE_DIRTY_CIS:
code = SCANNER_ERR_DEVICE_LENS_DIRTY;
break;
2022-05-03 03:56:07 +00:00
default:
code = SCANNER_ERR_NO_DATA;
2022-12-29 16:05:43 +00:00
break;
2022-05-03 03:56:07 +00:00
}
return code;
}
}
2023-08-16 00:59:49 +00:00
hg_scanner_300::hg_scanner_300(const char* dev_name,int pid, usb_io* io) :
hg_scanner(G100Serial, dev_name, io,pid)
,papersize(pid)
,is_devs_sleep_(false)
2022-05-03 03:56:07 +00:00
{
if (init_settings(pid_))
{
if (pid_ == 0x300)
init_settings((jsontext1 + jsontext2 + jsontext3).c_str());
else
init_settings((jsontext4 + jsontext5 + jsontext6).c_str());
}
dsp_config.value = 0;
dsp_config.params_3288.enableLed = 1; //默认值
dsp_config.params_3288.isCorrect = 1;
2023-09-22 06:17:06 +00:00
int ret = initdevice();
if (ret != SCANNER_ERR_OK)
{
return;
}
2023-10-24 06:38:58 +00:00
std::string fv(get_firmware_version()),
sn(get_serial_num());
if (fv.empty() || sn.empty())
return;
2023-09-22 06:17:06 +00:00
2023-10-24 06:38:58 +00:00
string dev = fv.substr(0, 2);
string ver = fv.substr(2, 3);
string date = fv.substr(5, 5);
string year = fv.substr(4, 2);
string devType;
string year_date = fv.substr(4, 6);
2023-10-25 11:50:29 +00:00
firmware_sup_morr_ = year_date.compare("230724") >= 0 ? true : false;
firmware_sup_double_check = year_date.compare("231027") >= 0 ? true : false;
firmware_sup_dirty_check = year_date.compare("231027") >= 0 ? true : false;
firmware_sup_backup_restore = year_date.compare("231021") >= 0 ? true : false;
firmware_sup_boardTime = year_date.compare("231021") >= 0 ? true : false;
firmware_sup_double_img = year_date.compare("231027") >= 0 ? true : false;
firmware_sup_log_export_G300_ = year_date.compare("230430") >= 0 ? true : false;
#ifndef MAPPING_FUNCTION_IN_BASE
init_setting_map(setting_map_, ARRAY_SIZE(setting_map_));//优先初始化
#endif
if (firmware_sup_boardTime)
update_boarddatetime();//暂未考虑版本兼容情况
//wait_read_int.notify();
status_ = SCANNER_ERR_OK;
2022-05-03 03:56:07 +00:00
}
hg_scanner_300::~hg_scanner_300()
{}
int hg_scanner_300::on_scanner_closing(bool force)
{
return SCANNER_ERR_OK;
2022-05-03 03:56:07 +00:00
}
void hg_scanner_300::thread_handle_usb_read(void)
{
int ret = SCANNER_ERR_OK,
status = SCANNER_ERR_OK;
StopWatch sw;
sw.reset();
SANE_Image_Statu statu = IMG_STATUS_OK;
int img_num = 0;
savestatus_.clear();
2022-05-03 03:56:07 +00:00
while (run_)
{
USBCB usb={0};
ret = get_scanner_status(usb);
2023-05-17 06:46:47 +00:00
if (ret && ret != SCANNER_ERR_NO_DATA)
{
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "status from bulk point is '%s'\n", hg_scanner_err_description(ret));
}
2022-05-03 03:56:07 +00:00
//printf("usb.u32_Data = %d ret = %d\r\n",usb.u32_Data,ret);
//如果设备出现卡纸 或者双张等设备信息问题需要等到设备进行发送stop才能停止。 所以始终以 "停止" 消息为结束信号
//如果有图的情况下,并且卡纸或双张等,设备会先发送卡纸双张信息。所以接受到错误信息之后,仍需要把图像取出来。
if (ret == SCANNER_ERR_DEVICE_STOPPED)
2022-05-03 03:56:07 +00:00
{
status_ = !savestatus_.empty() ? savestatus_[0] : SCANNER_ERR_OK;//以第一个消息为准
2022-05-03 03:56:07 +00:00
savestatus_.clear();
2023-02-15 07:06:36 +00:00
if (user_cancel_)
{
if (status_ && status_ != SCANNER_ERR_DEVICE_STOPPED) // thread_handle_image_process maybe call stop() when insufficient memory occurs .
ret = status_;
else
status_ = ret = SCANNER_ERR_USER_CANCELED;
2023-05-17 06:46:47 +00:00
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "%s\n", hg_scanner_err_description(status_));
2023-02-15 07:06:36 +00:00
}
2023-05-17 06:46:47 +00:00
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "'STOPSCAN' message in usb thread:%s\n" , hg_scanner_err_description(status_));
2023-02-15 07:06:36 +00:00
2022-05-03 03:56:07 +00:00
break;
}
2023-01-17 07:07:58 +00:00
if (ret != SCANNER_ERR_OK &&
ret != SCANNER_ERR_DEVICE_STOPPED &&
ret != SCANNER_ERR_NO_DATA &&
ret != SCANNER_ERR_DEVICE_AUTO_FAIL_INFO &&
ret != SCANNER_ERR_DEVICE_AUTO_FAIL_OVER)
2022-05-03 03:56:07 +00:00
{
2023-01-17 07:07:58 +00:00
//statu = last_usb_image_statu(ret);
2022-05-03 03:56:07 +00:00
savestatus_.push_back(ret);
}
2023-01-17 07:07:58 +00:00
else if (ret != SCANNER_ERR_NO_DATA &&
ret != SCANNER_ERR_DEVICE_AUTO_FAIL_OVER &&
ret != SCANNER_ERR_DEVICE_AUTO_FAIL_INFO)
2022-12-30 09:14:49 +00:00
{
statu = IMG_STATUS_OK;
2022-12-30 09:14:49 +00:00
}
2022-12-29 16:05:43 +00:00
else if (ret == SCANNER_ERR_DEVICE_AUTO_FAIL_OVER)
{
2022-12-30 10:16:40 +00:00
is_auto_falt = false;
2022-12-30 09:14:49 +00:00
status_ = ret;
2022-12-29 16:05:43 +00:00
std::string msg;
int count = usb.u32_Count;
2022-12-30 09:14:49 +00:00
msg.resize(count);
2023-05-24 02:11:56 +00:00
{
std::lock_guard<std::mutex> lock(io_lock_);
ret = io_->read_bulk(&msg[0], &count);
}
2022-12-30 09:14:49 +00:00
if (ret == SCANNER_ERR_OK)
notify_ui_working_status(msg.c_str(), SANE_EVENT_STATUS, status_);
else
status_ = ret;
2022-12-29 16:05:43 +00:00
break;
}
else if (ret == SCANNER_ERR_DEVICE_AUTO_FAIL_INFO)
2022-12-29 10:05:59 +00:00
{
2022-12-30 09:14:49 +00:00
sw.reset();
status_ = ret;
2022-12-29 16:05:43 +00:00
std::string msg;
int count = usb.u32_Count;
2022-12-30 09:14:49 +00:00
msg.resize(count);
ret = io_->read_bulk(&msg[0], &count);
if (ret == SCANNER_ERR_OK)
{
2022-12-30 09:54:27 +00:00
status_= ret = SCANNER_ERR_DEVICE_AUTO_FAIL_INFO;
2022-12-30 09:14:49 +00:00
char buf[1024];
strcpy(buf, msg.c_str());
2022-12-30 09:54:27 +00:00
notify_ui_working_status(buf, SANE_EVENT_STATUS, status_);
2023-01-17 07:07:58 +00:00
msg.clear();
2022-12-30 09:14:49 +00:00
}
else
{
status_ = ret;
break;
}
2022-12-29 10:05:59 +00:00
}
2023-02-15 07:06:36 +00:00
else if (ret == SCANNER_ERR_IO)
2022-12-29 10:05:59 +00:00
{
2023-02-15 07:06:36 +00:00
status_ = ret;
2023-05-17 06:46:47 +00:00
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "%s\n", hg_scanner_err_description(status_));
2022-05-03 03:56:07 +00:00
break;
}
if (sw.elapsed_ms() > 30000 && img_conf_.resolution_dst != 600)//防止状态信息一直取不上来导致卡死
2023-02-15 07:06:36 +00:00
{
2023-06-26 10:00:58 +00:00
if ((img_conf_.papertype == TwSS::MaxSize || img_conf_.papertype == TwSS::USStatement) && pid_ == 0x0300 && firmware_sup_dpi_600)
2023-02-15 07:06:36 +00:00
{
hg_log::log(LOG_LEVEL_WARNING, "while 30S\n");
2023-02-15 07:06:36 +00:00
}
else
{
if (!savestatus_.empty())//以第一个消息为准
{
status_ = savestatus_[0];
}
2023-02-15 07:06:36 +00:00
savestatus_.clear();
hg_log::log(LOG_LEVEL_WARNING, "Get Status TimeOut,get image out 30S\n");
notify_ui_working_status(hg_log::lang_load(ID_STATU_DESC_SCANNER_ERR_DEVICE_GET_IMAGE_OUTTIME), SANE_EVENT_ERROR, status_); // 鍙栧浘閫氫俊瓒呮椂
2023-02-15 07:06:36 +00:00
break;
}
}
2023-05-08 01:54:48 +00:00
if (sw.elapsed_s() > 130)
{
if (!savestatus_.empty())//以第一个消息为准
{
status_ = savestatus_[0];
}
savestatus_.clear();
2023-05-08 02:29:27 +00:00
hg_log::log(LOG_LEVEL_WARNING, "MaxSize TimeOut,Get Image 130s\n");
notify_ui_working_status(hg_log::lang_load(ID_STATU_DESC_SCANNER_ERR_DEVICE_GET_IMAGE_OUTTIME), SANE_EVENT_ERROR, status_); // 鍙栧浘閫氫俊瓒呮椂
break;
}
if (ret == SCANNER_ERR_OK && usb.u32_Count > 0)
2022-05-03 03:56:07 +00:00
{
int totalNum = usb.u32_Count & 0x3fffffff; // 2022-08-04: 兼容Android默认图片大小均在1GB以内
VLOG_MINI_2(LOG_LEVEL_WARNING, "Get Scaner Image Size:%d bytes,Image Num[%d]\n", totalNum,img_num);
img_num++;
2022-08-04 03:36:37 +00:00
if (totalNum)
{
2022-08-04 03:36:37 +00:00
std::shared_ptr<tiny_buffer> imagedata(aquire_memory(totalNum));
2022-05-03 03:56:07 +00:00
2022-08-04 03:36:37 +00:00
if (!imagedata.get())
{
status_ = SCANNER_ERR_INSUFFICIENT_MEMORY;
break;
}
2022-05-03 03:56:07 +00:00
imagedata->set_image_statu(usb.u32_Data == setting3288dsp::DOUBLE_FEED_IMAGE ? IMG_STATUS_DOUBLE : IMG_STATUS_OK);
2022-08-04 03:36:37 +00:00
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
2022-05-03 03:56:07 +00:00
{
status_ = ret;
break;
}
}
}
this_thread::sleep_for(chrono::milliseconds(10));
}
2023-05-17 06:46:47 +00:00
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "USB thread exit with code: %s, status = %s\n", hg_scanner_err_name(ret), hg_scanner_err_description(status_));
2022-05-03 03:56:07 +00:00
}
int hg_scanner_300::discard_all_images(void)
{
2023-05-24 02:11:56 +00:00
int block = 1024 * 512, len = block;
uint8_t* buf = new uint8_t[block];
if(buf)
{
2023-05-24 02:11:56 +00:00
std::lock_guard<std::mutex> lock(io_lock_);
int cnt = 0, ret = SCANNER_ERR_OK;
2023-05-24 02:11:56 +00:00
io_->set_timeout(1000);
2023-05-24 02:11:56 +00:00
while ((ret = io_->read_bulk(buf, &len)) == SCANNER_ERR_OK)
{
2023-05-24 02:11:56 +00:00
len = block;
this_thread::sleep_for(chrono::milliseconds(10));
if (cnt++ > 10)
{
break;
}
}
2023-05-24 02:11:56 +00:00
delete[] buf;
}
2023-05-24 02:11:56 +00:00
2023-06-26 10:00:58 +00:00
//if (is_read_int)
//{
// initdevice();
//}
return SCANNER_ERR_OK;
}
2023-06-13 04:28:20 +00:00
int hg_scanner_300::get_roller_life(void)
{
return pid_ == 300 ? 150000 : 200000;
}
int hg_scanner_300::do_start(void)
2023-01-17 07:07:58 +00:00
{
bool handled = false;
int ret = try_third_app_handle_start(handled), //sane调用是每次都会调用一次start和stop
2022-12-22 10:37:53 +00:00
count = -1,
val = 1;
user_cancel_ = false;
// for third-sane-app invoking, added on 2022-05-19
if (handled)
return ret;
final_imgs_.clear();
imgs_.Clear(); // move from scanning done
2022-12-22 10:37:53 +00:00
ret = get_scan_is_sleep(val);
2023-02-13 08:38:05 +00:00
if (!val && ret == SCANNER_ERR_OK)
2022-05-03 03:56:07 +00:00
{
2022-12-22 10:37:53 +00:00
status_ = SCANNER_ERR_DEVICE_SLEEPING;
2022-12-22 10:37:53 +00:00
return status_;
2022-05-03 03:56:07 +00:00
}
2023-02-13 08:38:05 +00:00
ret = get_scanner_paperon(val);
if (!val && ret == SCANNER_ERR_OK)
{
status_ = SCANNER_ERR_DEVICE_NO_PAPER;
2023-02-13 08:38:05 +00:00
return status_;
}
if (ret != SCANNER_ERR_OK)
{
return ret;
}
if (is_devs_sleep_)//设备在睡眠的状态当中获取固件是失败的,所以在这个地方进行标志位设置。(总感觉不保险)
{
is_devs_sleep_ = false;
set_kernelsnap_ver();
int paper = image_prc_param_.bits.paper;
on_paper_changed(paper);
int dpi = resolution_;
on_resolution_changed(dpi);
}
ret = writedown_device_configuration(true);
if (ret == SCANNER_ERR_OK)
writedown_image_configuration();
else
{
status_ = ret;
return ret;
}
2023-05-17 06:46:47 +00:00
printf_devconfig();
USBCB usb = { setting3288dsp::START_COMMAND, img_conf_.scannum, 0};
2023-05-24 02:11:56 +00:00
{
std::lock_guard<std::mutex> lock(io_lock_);
ret = writeusb(usb);
}
if(ret == SCANNER_ERR_OK)
2022-05-03 03:56:07 +00:00
{
wait_usb_.notify();
std::this_thread::sleep_for(std::chrono::milliseconds(300));
ret = try_third_app_after_start(ret);
2022-05-03 03:56:07 +00:00
}
else
status_ = ret;
2023-05-17 06:46:47 +00:00
VLOG_MINI_1(LOG_LEVEL_WARNING, "----------Main start scan status : %s----------\n", hg_scanner_err_description(ret));
2022-05-03 03:56:07 +00:00
return ret;
2023-01-17 07:07:58 +00:00
}
int hg_scanner_300::do_stop(void)
2022-05-03 03:56:07 +00:00
{
int ret = SCANNER_ERR_OK;
2022-05-03 03:56:07 +00:00
USBCB usbcb = { setting3288dsp::STOP, 0, 0};
2023-05-24 02:11:56 +00:00
{
std::lock_guard<std::mutex> lock(io_lock_);
ret = writeusb(usbcb);
}
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "Write stop command = %d\n", ret);
2022-05-03 03:56:07 +00:00
if (status_ == SCANNER_ERR_DEVICE_BUSY)
2022-05-03 03:56:07 +00:00
{
LOG_INFO(LOG_LEVEL_DEBUG_INFO,"stop status is busy\r\n");
2022-05-03 03:56:07 +00:00
std::this_thread::sleep_for(std::chrono::milliseconds(2000));
}
user_cancel_ = true;
if (ret == SCANNER_ERR_OK)
2022-05-03 03:56:07 +00:00
{
status_ = SCANNER_ERR_DEVICE_STOPPED;
2022-05-03 03:56:07 +00:00
}
//final_imgs_.clear();
return ret;
2022-05-03 03:56:07 +00:00
}
int hg_scanner_300::writeusb(USBCB &usb)
{
int ret = SCANNER_ERR_OK;
2022-05-03 03:56:07 +00:00
int len = sizeof(usb);
ret = io_->write_bulk(&usb,&len);
if (ret)
{
status_ = ret;
}
return ret;
}
int hg_scanner_300::readusb(USBCB &usb)
{
int ret = SCANNER_ERR_OK;
2022-05-03 03:56:07 +00:00
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;
2022-05-03 03:56:07 +00:00
USBCB usbcb = { setting3288dsp::POP_IMAGE, 0, 0};
2023-05-24 02:11:56 +00:00
{
std::lock_guard<std::mutex> lock(io_lock_);
ret = writeusb(usbcb);
}
2022-05-03 03:56:07 +00:00
return ret;
}
int hg_scanner_300::get_scanner_status(USBCB &usb)
{
2023-05-24 02:11:56 +00:00
std::lock_guard<std::mutex> lock(io_lock_);
int ret = SCANNER_ERR_OK;
2022-05-03 03:56:07 +00:00
usb = { setting3288dsp::GET_DSP_STATUS, 0, 0};
io_->set_timeout(2000);
2022-05-03 03:56:07 +00:00
ret = writeusb(usb);
if (ret != SCANNER_ERR_OK)
{
VLOG_MINI_1(LOG_LEVEL_WARNING, "get_scanner_status write usb: %s\n", hg_scanner_err_name(ret));
2022-05-03 03:56:07 +00:00
return ret;
}
2022-05-03 03:56:07 +00:00
ret = readusb(usb);
if (ret != SCANNER_ERR_OK)
2022-05-03 03:56:07 +00:00
{
VLOG_MINI_1(LOG_LEVEL_WARNING, "get_scanner_status read usb: %s\n", hg_scanner_err_name(ret));
2022-05-03 03:56:07 +00:00
status_ = ret;
return ret;
}
scanner_err code = settingsdsp_300::device_status_to_hg_err(usb.u32_Data);
2022-05-03 03:56:07 +00:00
return code ;
}
2023-10-24 06:38:58 +00:00
int hg_scanner_300::get_img_data(std::shared_ptr<tiny_buffer>& imagedata)
{
int total = imagedata->size(),
ret = SCANNER_ERR_OK,
index = 0,
block = total;
USBCB usb{ setting3288dsp::GET_IMAGE, 0, total };
2022-05-03 03:56:07 +00:00
{
2023-05-24 02:11:56 +00:00
std::lock_guard<std::mutex> lock(io_lock_);
ret = writeusb(usb);
if (ret != SCANNER_ERR_OK)
{
2023-05-24 02:11:56 +00:00
VLOG_MINI_1(LOG_LEVEL_WARNING, "get_img_data setting3288dsp::GET_IMAGE write usb: %s\n", hg_scanner_err_name(ret));
}
else
{
VLOG_MINI_1(LOG_LEVEL_FATAL, "get_img_data get data total len is:%d\n", total);
while (total > 0)
{
2023-05-24 02:11:56 +00:00
block = 512 * 1024;
2022-05-03 03:56:07 +00:00
2023-05-24 02:11:56 +00:00
if (total < block)
block = total;
2023-05-24 02:11:56 +00:00
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 && ret != SCANNER_ERR_TIMEOUT)
{
VLOG_MINI_1(LOG_LEVEL_FATAL, "get_img_data read_data:%s!!! \n", hg_scanner_err_name(ret));
break;
}
else if (ret == SCANNER_ERR_TIMEOUT && io_->get_timeout() > 3000)
{
VLOG_MINI_2(LOG_LEVEL_FATAL, "get_img_data read_data:%s!!! ,get_timeout is %d\n", hg_scanner_err_name(ret), io_->get_timeout());
break;
}
index += block;
total -= block;
}
2022-05-03 03:56:07 +00:00
}
}
if (ret == SCANNER_ERR_OK)
2022-05-03 03:56:07 +00:00
{
ret = save_usb_data(imagedata);
}
else
{
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "Read image data from USB err: %s\n", hg_scanner_err_name(ret));
do_stop();
string str = STATU_DESC_SCANNER_ERR_DEVICE_GET_IMAGE_ERR;
str = str + '-' + STATU_DESC_SCANNER_ERR_DEVICE_STOPPED;
notify_ui_working_status(str.c_str(), SANE_EVENT_ERROR, ret);
}
2023-10-24 06:38:58 +00:00
return status_ = ret;
2022-05-03 03:56:07 +00:00
}
2023-09-22 06:17:06 +00:00
int hg_scanner_300::writedown_device_configuration(bool type,setting_hardware::HGSCANCONF_3288 *d)
2022-05-03 03:56:07 +00:00
{
if (!type)
return SCANNER_ERR_OK;
2022-05-03 03:56:07 +00:00
int ret = SCANNER_ERR_OK,
2022-05-03 03:56:07 +00:00
len = 0;
2022-11-19 10:16:43 +00:00
SIZE size;
setting_hardware::HGSCANCONF_3288 p = dsp_config;
2022-05-03 03:56:07 +00:00
if (!d)
{
p.params_3288.lutmode = keep_watermark_;
d = &p;
}
2022-11-19 10:16:43 +00:00
if (is_multiout)
{
2023-02-13 08:38:05 +00:00
d->params_3288.isColor = image_prc_param_.bits.multi_out == MULTI_GRAY_AND_BW ? 0 : 1;
2022-11-19 10:16:43 +00:00
}
else if ((image_prc_param_.bits.color_mode == COLOR_MODE_256_GRAY
|| image_prc_param_.bits.color_mode == COLOR_MODE_BLACK_WHITE)
&& image_prc_param_.bits.rid_color != RID_COLOR_NONE)
{
d->params_3288.isColor = 1;
}
2022-11-23 14:58:22 +00:00
if (paper_size_ == TwSS::USStatement || paper_size_ == TwSS::MaxSize)
2022-11-19 10:16:43 +00:00
{
//d->params_3288.pageSize = setting3288dsp::G400_MAXSIZE;
2022-11-19 10:16:43 +00:00
}
if (paper_size_ == TwSS::None || paper_size_ == TwSS::USStatement || paper_size_ == TwSS::MaxSize || paper_size_ == TwSS::Trigeminy)
{
d->params_3288.enableSizeDetect = false;
}
2023-02-13 08:38:05 +00:00
if ((is_quality_ == IMG_SPEED) && (resolution_ >= 300))
2023-02-13 08:38:05 +00:00
{
VLOG_MINI_1(LOG_LEVEL_WARNING, "writedown_device_configuration is_quality_ is .(%d)\n", is_quality_)
2023-02-13 08:38:05 +00:00
d->params_3288.dpi = 1;
}
if (image_prc_param_.bits.remove_morr && firmware_sup_morr_ && resolution_ < 500)
{
d->params_3288.moire = true;
}
else
d->params_3288.moire = false;
if (image_prc_param_.bits.paper == PAPER_AUTO_MATCH
|| image_prc_param_.bits.paper == PAPER_MAX_SIZE
|| image_prc_param_.bits.paper == PAPER_MAX_SIZE_CLIP
|| image_prc_param_.bits.paper == PAPER_TRIGEMINY
|| image_prc_param_.bits.paper == PAPER_16K
|| image_prc_param_.bits.paper == PAPER_8K
|| image_prc_param_.bits.paper == PAPER_16K_LATERAL
)
{
d->params_3288.enableSizeDetect = false;
}
2022-11-19 10:16:43 +00:00
size = papersize.GetPaperSize(TwSS::A4, 200, img_conf_.paperAlign);
dsp_config.params_3288.dstHeight = (int)((size.cy + 200) / 100);
2022-05-03 03:56:07 +00:00
USBCB usbcb = { setting3288dsp::CONFIGURED_DATA, d->value, 0};
2022-05-03 03:56:07 +00:00
len = sizeof(USBCB);
2023-05-24 02:11:56 +00:00
{
std::lock_guard<std::mutex> lock(io_lock_);
ret = io_->write_bulk(&usbcb, &len);
}
if (type)
{
printf_devconfig(d);
}
VLOG_MINI_1(LOG_LEVEL_WARNING, "writedown_device_configuration is .(%s)\n", hg_scanner_err_name(ret));
2022-05-03 03:56:07 +00:00
return ret;
}
int hg_scanner_300::on_color_mode_changed(int& color_mode)
{
2022-11-19 10:16:43 +00:00
dsp_config.params_3288.isColor = (color_mode == COLOR_MODE_BLACK_WHITE || color_mode == COLOR_MODE_256_GRAY) ? 0 : 1;
return SCANNER_ERR_OK;
2022-05-03 03:56:07 +00:00
}
int hg_scanner_300::on_paper_changed(int& paper)
{
bool exact = true;
2023-06-26 10:00:58 +00:00
Paper_Map* papermap = pid_ == 0x0300 && firmware_sup_dpi_600 ? paper_map_3288_600dpi : paper_map_3288;
int paperlen = pid_ == 0x0300 && firmware_sup_dpi_600 ? ARRAY_SIZE(paper_map_3288_600dpi) : ARRAY_SIZE(paper_map_3288);
2023-02-15 07:06:36 +00:00
int ind = hgpaper_to_devspaper(papermap, paperlen, paper, &exact, &paper_size_),
ret = exact ? SCANNER_ERR_OK : SCANNER_ERR_NOT_EXACT;
2022-05-03 03:56:07 +00:00
2023-02-15 07:06:36 +00:00
if (dsp_config.params_3288.pageSize != papermap[ind].dev_value)
2022-05-03 03:56:07 +00:00
{
int old = dsp_config.params_3288.pageSize;
2022-05-03 03:56:07 +00:00
2023-02-15 07:06:36 +00:00
dsp_config.params_3288.pageSize = papermap[ind].dev_value;
2022-05-03 03:56:07 +00:00
ret = writedown_device_configuration();
if (ret)
{
dsp_config.params_3288.pageSize = old;
2023-02-15 07:06:36 +00:00
for (int i = 0; i < paperlen; ++i)
2022-05-03 03:56:07 +00:00
{
2023-02-15 07:06:36 +00:00
if (papermap[i].dev_value == old)
2022-05-03 03:56:07 +00:00
{
2023-02-15 07:06:36 +00:00
paper = papermap[i].paper;
2022-05-03 03:56:07 +00:00
break;
}
}
}
else if (!exact)
ret = SCANNER_ERR_NOT_EXACT;
2022-05-03 03:56:07 +00:00
}
return ret;
}
int hg_scanner_300::on_paper_check_changed(bool& check)
{
2023-06-26 10:00:58 +00:00
if (!firmware_sup_dpi_600 && check)
{
check = false;
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int ret = SCANNER_ERR_OK;
if(dsp_config.params_3288.enableSizeDetect ^ check)
2022-05-03 03:56:07 +00:00
{
dsp_config.params_3288.enableSizeDetect = check;
2022-05-03 03:56:07 +00:00
ret = writedown_device_configuration();
if (ret)
{
dsp_config.params_3288.enableSizeDetect = !check;
check = dsp_config.params_3288.enableSizeDetect;
2022-05-03 03:56:07 +00:00
}
}
return ret;
}
int hg_scanner_300::on_resolution_changed(int& dpi)
{
int ret = SCANNER_ERR_OK;
2023-06-26 10:00:58 +00:00
if (firmware_sup_dpi_600)
dsp_config.params_3288.dpi = dpi == 600 ? 3 : (dpi < 599 && dpi>=300) ? 2 : 1;
2023-06-26 10:00:58 +00:00
else if (firmware_sup_dpi_300)
2023-02-13 08:38:05 +00:00
dsp_config.params_3288.dpi = (dpi >= 300) ? 2 : 1;
else
dsp_config.params_3288.dpi = 1;
2023-06-26 10:00:58 +00:00
VLOG_MINI_3(LOG_LEVEL_WARNING, "on_resolution_changed is dpi:%d .set device dpi(%d),firmware_sup_dpi_300 is :%d\n", dpi, dsp_config.params_3288.dpi, firmware_sup_dpi_300);
2022-11-19 10:16:43 +00:00
2022-05-03 03:56:07 +00:00
ret = writedown_device_configuration();
return ret;
}
int hg_scanner_300::on_ultrasonic_check_changed(bool& check)
{
int ret = SCANNER_ERR_OK;
2022-05-03 03:56:07 +00:00
if (dsp_config.params_3288.doubleFeeded ^ check)
2022-05-03 03:56:07 +00:00
{
dsp_config.params_3288.doubleFeeded = check;
2022-05-03 03:56:07 +00:00
ret = writedown_device_configuration();
if (ret)
{
dsp_config.params_3288.doubleFeeded = !check;
check = dsp_config.params_3288.doubleFeeded;
2022-05-03 03:56:07 +00:00
}
}
return ret;
}
int hg_scanner_300::set_kernelsnap_ver()
{
int ret = SCANNER_ERR_OK;
string fw = get_firmware_version();
if (!fw.empty())
{
if (atoi(fw.substr(4, 6).c_str()) >= 221106 && atoi(fw.substr(4, 6).c_str()) < 230210)
2023-06-26 10:00:58 +00:00
firmware_sup_dpi_300 = true;
else if (atoi(fw.substr(4, 6).c_str()) >= 230210)
2023-06-26 10:00:58 +00:00
firmware_sup_dpi_600 = true;
else
{
2023-06-26 10:00:58 +00:00
firmware_sup_dpi_300 = false;
firmware_sup_dpi_600 = false;
}
2023-06-26 10:00:58 +00:00
firmware_sup_history_cnt = atoi(fw.substr(4, 6).c_str()) >= 220303 ? true : false;
}
else
{
ret = SCANNER_ERR_NO_DATA;
}
2023-04-25 10:06:14 +00:00
2023-06-26 10:00:58 +00:00
VLOG_MINI_2(LOG_LEVEL_WARNING, "hg_scanner_300 firmware_sup_dpi_300 :%d ,firmware_sup_dpi_600:%d\n", firmware_sup_dpi_300, firmware_sup_dpi_600);
return SCANNER_ERR_OK;
}
2022-05-03 03:56:07 +00:00
int hg_scanner_300::agreement(TwSS tw,int align)
{
int ret = SCANNER_ERR_OK;
2022-05-03 03:56:07 +00:00
SIZE size;
setting_hardware::HGSCANCONF_3288 d = dsp_config;
2022-05-03 03:56:07 +00:00
size = papersize.GetPaperSize(TwSS::A4,200,align);
dsp_config.params_3288.dstHeight = (int)((size.cy + 200)/100);
2022-05-03 03:56:07 +00:00
ret = writedown_device_configuration(true,&d);
return ret;
}
int hg_scanner_300::initdevice()
{
io_->set_timeout(2000);
int val = 0,
ret = SCANNER_ERR_OK;
status_ = ret;
int cnt = 0;
2023-04-28 08:12:56 +00:00
ret = get_scan_is_sleep(val);
if (!val && ret == SCANNER_ERR_OK)
{
2023-04-28 08:12:56 +00:00
is_devs_sleep_ = status_ = SCANNER_ERR_DEVICE_SLEEPING;
}
2023-04-28 08:12:56 +00:00
if (status_ != SCANNER_ERR_DEVICE_SLEEPING)
2023-04-25 10:06:14 +00:00
{
string fw = get_firmware_version();
2023-04-28 08:12:56 +00:00
if (!fw.empty())
2023-04-25 10:06:14 +00:00
{
2023-04-28 08:12:56 +00:00
if (fw.substr(4, 6) == "230303")
{
string scanner_path = hg_log::get_module_full_path(MODULE_NAME_SCANNER);
scanner_path = scanner_path.substr(0, scanner_path.size() - strlen(MODULE_NAME_SCANNER));
2023-04-28 08:12:56 +00:00
scanner_path += "update.zip";
set_firmware_upgrade(scanner_path);
return SCANNER_ERR_OK;
2023-04-28 08:12:56 +00:00
}
}
2023-04-25 10:06:14 +00:00
}
2023-04-28 08:12:56 +00:00
if (status_ != SCANNER_ERR_DEVICE_SLEEPING)
{
set_kernelsnap_ver();
is_devs_sleep_ = false; // 睡眠唤醒 客户提前点击设置这边固件版本号 还没有做判断的
2023-04-28 08:12:56 +00:00
}
return status_;
2022-05-03 03:56:07 +00:00
}
void hg_scanner_300::writedown_image_configuration(void)
{
SCANCONF ic;
2022-11-19 10:16:43 +00:00
int len = sizeof(ic);
bzero(&ic, len);
ic.contrast = contrast_;
ic.brightness = bright_;
2022-11-23 11:00:17 +00:00
if (image_prc_param_.bits.text_direction != TEXT_DIRECTION_AUTO)
ic.imageRotateDegree = image_prc_param_.bits.text_direction;
else
ic.imageRotateDegree = 0;
2022-11-19 10:16:43 +00:00
if (test_1_paper_)
{
LOG_INFO(LOG_LEVEL_DEBUG_INFO, "scanning mode: testing ONE paper ...\n");
ic.scannum = 1;
}
else
ic.scannum = scan_count_;
ic.en_sizecheck = dsp_config.params_3288.enableSizeDetect;
ic.hardwarecaps.en_skrewdetect = 0;
ic.hardwarecaps.en_doublefeed = dsp_config.params_3288.doubleFeeded;
ic.hardwarecaps.en_stapledetect = 0;
ic.hardwarecaps.skrewdetectlevel = 0;
// ic.hardwarecaps.is_autopaper = dsp_config_.params_dsp.is_autopaper;
ic.hardwarecaps.capturepixtype = 0; //暂无参数 获取图像类型
ic.hardwarecaps.lowpowermode = LowPowerMode::Min_None; //暂无参数 设置休眠时间 两个参数3399未使用
2022-11-19 10:16:43 +00:00
image_configuration(ic);
2022-05-03 03:56:07 +00:00
}
void hg_scanner_300::printf_devconfig(setting_hardware::HGSCANCONF_3288 *d)
2022-05-03 03:56:07 +00:00
{
if (!d)
d = &dsp_config;
2023-05-17 06:46:47 +00:00
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.doubleFeeded:%d\r\n",d->params_3288.doubleFeeded);
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.dpi:%d\r\n",d->params_3288.dpi);
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.dstHeight:%d\r\n",d->params_3288.dstHeight);
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.enableLed:%d\r\n",d->params_3288.enableLed);
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.isColor:%d\r\n",d->params_3288.isColor);
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.isCorrect:%d\r\n",d->params_3288.isCorrect);
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.pageSize:%d\r\n",d->params_3288.pageSize);
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.reversed1:%d\r\n",d->params_3288.reversed1);
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.reversed2:%d\r\n",d->params_3288.reversed2);
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.enableSizeDetect:%d\r\n",d->params_3288.enableSizeDetect);
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "dsp_config.params_3288.dirty_detect:%d\r\n", d->params_3288.dirty_detect);
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO,"dsp_config.params_3288.value:%d\r\n",d->value);
2022-05-03 03:56:07 +00:00
}
2023-09-22 06:17:06 +00:00
2023-10-16 08:24:44 +00:00
int hg_scanner_300::get_devs_distortion_check_val(float& data, int dpi, int dir)
{
int ret = SCANNER_ERR_OK;
USBCB usbcb = { dir ? setting3288dsp::GET_JUST_COF_V : setting3288dsp::GET_JUST_COF_H ,0,dpi };
int len = sizeof(usbcb);
{
ret = io_->write_bulk(&usbcb, &len);
if (ret != SCANNER_ERR_OK)
{
return ret;
}
io_->set_timeout(3000);
ret = io_->read_bulk(&usbcb, &len);
}
if (ret != SCANNER_ERR_OK)
{
return ret;
}
int val = usbcb.u32_Data;
data = *(float*)&val;
}
int hg_scanner_300::update_boarddatetime()
{
if (!firmware_sup_boardTime)
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
USBCB usbcb = { setting3288dsp::GET_DATETIME,0,0 };
int len = sizeof(usbcb);
int size = 0;
int ret = io_->write_bulk(&usbcb, &len);
if (ret == SCANNER_ERR_OK)
{
len = sizeof(usbcb);
ret = io_->read_bulk(&usbcb, &len);
if (usbcb.u32_Count == 512 || usbcb.u32_Count == 0)
{
VLOG_MINI_1(LOG_LEVEL_FATAL, "GET_DATETIME error data lenght\n", 0);
return SCANNER_ERR_ACCESS_DENIED;
}
std::string datenow;
datenow.resize(usbcb.u32_Count);
size = datenow.size();
io_->read_bulk(&datenow[0], &size);
VLOG_MINI_1(LOG_LEVEL_FATAL, "Boardtime : %s \n", datenow.c_str());
}
else
{
VLOG_MINI_1(LOG_LEVEL_FATAL, "GET_DATETIME usb communication failed\n", 0);
return SCANNER_ERR_ACCESS_DENIED;
}
//获取当前系统时间
time_t now_time;
struct tm* info;
char buffer[32];
time(&now_time);
info = localtime(&now_time);
strftime(buffer, 32, "%Y-%m-%d %H:%M:%S", info);
std::string str = buffer;
usbcb.u32_CMD = setting3288dsp::SET_DATETIME;
usbcb.u32_Count = str.length();
ret = io_->write_bulk(&usbcb, &len);
size = str.size();
ret = io_->write_bulk(&str[0], &size);
if (ret != SCANNER_ERR_OK)
{
VLOG_MINI_1(LOG_LEVEL_FATAL, "GET_DATETIME failed \n", 0);
return SCANNER_ERR_ACCESS_DENIED;
}
USBCB usbcb2 = { setting3288dsp::GET_DATETIME,0,0 };
len = sizeof(usbcb);
ret = io_->write_bulk(&usbcb2, &len);
if (ret == SCANNER_ERR_OK)
{
ret = io_->read_bulk(&usbcb2, &len);
if (usbcb2.u32_Count == 512 || usbcb2.u32_Count == 0)
{
VLOG_MINI_1(LOG_LEVEL_FATAL, "GET_DATETIME error data lenght\n", 0);
return SCANNER_ERR_ACCESS_DENIED;
}
std::string datenow;
datenow.resize(usbcb2.u32_Count);
int size = datenow.size();
io_->read_bulk(&datenow[0], &size);
VLOG_MINI_1(LOG_LEVEL_FATAL, "After update board time : %s \n", datenow.c_str());
}
else
{
VLOG_MINI_1(LOG_LEVEL_FATAL, "GET_DATETIME usb communication failed\n", 0);
return SCANNER_ERR_ACCESS_DENIED;
}
return SCANNER_ERR_OK;
}
2023-09-22 06:17:06 +00:00
int hg_scanner_300::get_correction_image(int inx , int dpi, int mode)
{
for (auto it : correction_image_map_)
{
if (it.second.info.params.colormode == mode && it.second.info.params.dpi == dpi)
{
return -1;//预防重复添加
}
}
2023-09-22 06:17:06 +00:00
int ret = SCANNER_ERR_OK;
setting3288dsp::FLAT_INFO_IMAGE image_info;
image_info.info.params.dpi = dpi;
image_info.info.params.colormode = mode;
cv::Mat white_mat;
cv::Mat black_mat;;
for (size_t i = 0; i < 2; i++) //黑白一起保存下来
2023-09-22 06:17:06 +00:00
{
vector<unsigned char> imagedata;
image_info.info.params.is_whiteimage = i;
int val = image_info.info.value;
USBCB cmd = { setting3288dsp::GET_FLAT_DATA,val,0, };
{
std::lock_guard<std::mutex> lock(io_lock_);
ret = writeusb(cmd);
if (ret == SCANNER_ERR_OK)
ret = readusb(cmd);
if (ret)
return ret;
image_info.info.value = cmd.u32_Data;
if (image_info.info.params.status != 100)
{
VLOG_MINI_1(LOG_LEVEL_WARNING, "get_correction_image status:%d\n", image_info.info.params.status);
return SCANNER_ERR_NO_DATA;
}
int len = image_info.info.params.datalen;
imagedata.resize(len);
if (ret == SCANNER_ERR_OK)
ret = io_->read_bulk(&imagedata[0], &len);
if (imagedata.empty())
{
return SCANNER_ERR_NO_DATA;
}
cv::ImreadModes rmc = cv::IMREAD_GRAYSCALE;;// image_info.info.params.colormode ? cv::IMREAD_COLOR : cv::IMREAD_GRAYSCALE;
2023-09-22 06:17:06 +00:00
cv::Mat mat = cv::imdecode(imagedata, rmc);//color BGR
//if (mat.channels() == 3)
//cv::cvtColor(mat, mat, CV_BGR2RGB);
if (mat.empty())
{
VLOG_MINI_1(LOG_LEVEL_WARNING, "get_correction_image image is NULL:%d\n", image_info.info.params.status);
return SCANNER_ERR_NO_DATA; //只要有一张图没有 直接退了
2023-09-22 06:17:06 +00:00
}
2023-10-16 08:24:44 +00:00
float f = 0.0;
get_devs_distortion_check_val(f, dpi, i);
2023-09-22 06:17:06 +00:00
if (i)
2023-10-16 08:24:44 +00:00
{
image_info.vratio = f;
2023-09-22 06:17:06 +00:00
white_mat = mat;
2023-10-16 08:24:44 +00:00
}
2023-09-22 06:17:06 +00:00
else
2023-10-16 08:24:44 +00:00
{
image_info.hratio = f;
2023-09-22 06:17:06 +00:00
black_mat = mat;
2023-10-16 08:24:44 +00:00
}
2023-09-22 06:17:06 +00:00
}
}
//cv::imwrite("C://image//correction_image_white_mat" + to_string(inx) + ".bmp", white_mat);
//cv::imwrite("C://image//correction_image_black_mat" + to_string(inx) + ".bmp", black_mat);
ret = hg_imgproc::correction_image(ImagePrc_pHandle_, image_info.flat_lut, black_mat, white_mat);
correction_image_map_[inx] = image_info;
return ret;
}
2022-05-03 03:56:07 +00:00
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 = { setting3288dsp::GET_FW_VERSION,len,0,};
2022-05-03 03:56:07 +00:00
2023-05-24 02:11:56 +00:00
{
std::lock_guard<std::mutex> lock(io_lock_);
ret = writeusb(cmd);
if(ret == SCANNER_ERR_OK)
ret = io_->read_bulk(buf, &len);
}
string fw = buf;
VLOG_MINI_1(LOG_LEVEL_WARNING, "get_firmware_version:%s\n", !fw.empty() ? fw.c_str() : "not find devs firmware_version");
2022-05-03 03:56:07 +00:00
return buf;
}
std::string hg_scanner_300::get_serial_num()
{
string SerialNum = "";
int ret = SCANNER_ERR_OK,
2022-05-03 03:56:07 +00:00
len = 14;
SerialNum.resize(len);
USBCB cmd = { setting3288dsp::GET_SERIAL,len,0,};
2023-05-24 02:11:56 +00:00
{
std::lock_guard<std::mutex> lock(io_lock_);
ret = writeusb(cmd);
if(ret == SCANNER_ERR_OK)
ret = io_->read_bulk(&SerialNum[0], &len);
}
VLOG_MINI_1(LOG_LEVEL_WARNING, "get_serial_num:%s\n", !SerialNum.empty() ? SerialNum.c_str() : "not find devs get_serial_num");
2022-05-03 03:56:07 +00:00
return SerialNum;
}
2022-12-22 10:37:53 +00:00
std::string hg_scanner_300::get_ip(void)
{
return "";
}
2022-05-03 03:56:07 +00:00
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int hg_scanner_300::set_leaflet_scan(void)
{
int ret = SCANNER_ERR_OK;
2022-05-03 03:56:07 +00:00
test_1_paper_ = true;
ret = start();
return ret;
}
2022-12-22 10:37:53 +00:00
int hg_scanner_300::set_clear_roller_num(void)
2022-05-03 03:56:07 +00:00
{
2023-05-24 02:11:56 +00:00
std::lock_guard<std::mutex> lock(io_lock_);
2022-12-29 10:05:59 +00:00
USBCB usbcb = { setting3288dsp::CLR_ROLLER_NUM,0,4 };
return writeusb(usbcb);
2022-05-03 03:56:07 +00:00
}
int hg_scanner_300::set_clear_history_num(void)
{
2023-06-26 10:00:58 +00:00
if (!firmware_sup_history_cnt)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
2023-05-24 02:11:56 +00:00
std::lock_guard<std::mutex> lock(io_lock_);
USBCB usbcb = { setting3288dsp::CLR_SCAN_NUM,0,4 };
return writeusb(usbcb);
}
2022-05-03 03:56:07 +00:00
int hg_scanner_300::get_device_code(void)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
2022-05-03 03:56:07 +00:00
}
2022-12-22 10:37:53 +00:00
int hg_scanner_300::get_sleep_time(int &data)
2022-05-03 03:56:07 +00:00
{
int ret = SCANNER_ERR_OK,
2022-05-03 03:56:07 +00:00
len = 0;
2022-12-22 10:37:53 +00:00
USBCB usbcb = { setting3288dsp::GET_SLEEP_TIME, 0, 0 };
2022-05-03 03:56:07 +00:00
{
2023-05-24 02:11:56 +00:00
std::lock_guard<std::mutex> lock(io_lock_);
ret = writeusb(usbcb);
if (ret != SCANNER_ERR_OK)
{
return ret;
}
len = sizeof(usbcb);
ret = io_->read_bulk(&usbcb, &len);
2022-05-03 03:56:07 +00:00
}
if (ret == SCANNER_ERR_OK)
2022-05-03 03:56:07 +00:00
{
2022-12-22 10:37:53 +00:00
data = (SANE_Power)usbcb.u32_Data;
2022-05-03 03:56:07 +00:00
}
VLOG_MINI_1(LOG_LEVEL_WARNING, "get_sleep_time:%d\n", data);
2022-05-03 03:56:07 +00:00
return ret;
}
2022-12-22 10:37:53 +00:00
int hg_scanner_300::set_sleep_time(int data)
2022-05-03 03:56:07 +00:00
{
2023-05-24 02:11:56 +00:00
std::lock_guard<std::mutex> lock(io_lock_);
2022-12-22 10:37:53 +00:00
int ret = SCANNER_ERR_OK;
if (data == -1)
data = 0x7FFFFFFF;
2022-12-22 10:37:53 +00:00
USBCB usbcb = { setting3288dsp::SET_SLEEP_TIME,data, 0};
2022-05-03 03:56:07 +00:00
ret = writeusb(usbcb);
return ret;
}
2022-12-22 10:37:53 +00:00
int hg_scanner_300::get_scanner_paperon(SANE_Bool& type)
2022-05-03 03:56:07 +00:00
{
int ret = SCANNER_ERR_OK,
2022-05-03 03:56:07 +00:00
len = 0;
2022-12-28 01:56:54 +00:00
USBCB usbcb = { setting3288dsp::GET_PAPERFEEDER_STATUS, 0, 0};
2022-05-03 03:56:07 +00:00
len = sizeof(USBCB);
{
2022-12-22 10:37:53 +00:00
std::lock_guard<std::mutex> lock(io_lock_);
2023-05-24 02:11:56 +00:00
ret = writeusb(usbcb);
if (ret == SCANNER_ERR_OK)
{
ret = io_->read_bulk(&usbcb, &len);
type = usbcb.u32_Data == 0 ? false : true;
}
2022-05-03 03:56:07 +00:00
}
2022-12-22 10:37:53 +00:00
//if (usbcb.u32_Data == 0)
// ret = SCANNER_ERR_DEVICE_NO_PAPER;
//else
// ret = SCANNER_ERR_OK;
2023-05-17 06:46:47 +00:00
VLOG_MINI_1(LOG_LEVEL_WARNING, "get_scanner_paperon is(%s)\n", !type ? hg_scanner_err_description(SCANNER_ERR_DEVICE_NO_PAPER) : hg_scanner_err_description(SCANNER_ERR_OK));
2022-05-03 03:56:07 +00:00
return ret;
}
2022-12-22 10:37:53 +00:00
int hg_scanner_300::get_scan_is_sleep(SANE_Bool& type)
2022-05-03 03:56:07 +00:00
{
2022-12-22 10:37:53 +00:00
int ret = SCANNER_ERR_OK,
len = 0;
2022-05-03 03:56:07 +00:00
2022-12-28 01:56:54 +00:00
USBCB usbcb = { setting3288dsp::ACTIVE_SCANNER, 0, 0 };
2022-05-03 03:56:07 +00:00
len = sizeof(USBCB);
{
2022-12-22 10:37:53 +00:00
std::lock_guard<std::mutex> lock(io_lock_);
2023-05-24 02:11:56 +00:00
ret = writeusb(usbcb);
if (ret == SCANNER_ERR_OK)
{
ret = io_->read_bulk(&usbcb, &len);
}
2022-05-03 03:56:07 +00:00
}
2022-12-22 10:37:53 +00:00
if (ret == SCANNER_ERR_OK)
2022-05-03 03:56:07 +00:00
{
2022-12-22 10:37:53 +00:00
if (usbcb.u32_Data == 0x10)
type = true;
//return SCANNER_ERR_OK;
else if (usbcb.u32_Data == 0x100)
type = false;
//return SCANNER_ERR_DEVICE_SLEEPING;
2022-05-03 03:56:07 +00:00
}
2023-05-17 06:46:47 +00:00
VLOG_MINI_1(LOG_LEVEL_WARNING, "get_scan_is_sleep is(%s)\n", !type ? hg_scanner_err_description(SCANNER_ERR_DEVICE_SLEEPING) : hg_scanner_err_description(SCANNER_ERR_OK));
2022-12-22 10:37:53 +00:00
return ret;
2022-05-03 03:56:07 +00:00
}
///此款设备无此功能
2022-05-03 03:56:07 +00:00
int hg_scanner_300::on_staple_check_changed(bool& check)
{
return SCANNER_ERR_OK;
2022-05-03 03:56:07 +00:00
}
int hg_scanner_300::on_skew_check_changed(bool& check)
{
return SCANNER_ERR_OK;
2022-05-03 03:56:07 +00:00
}
int hg_scanner_300::on_skew_check_level_changed(int& check)
{
return SCANNER_ERR_OK;
2022-05-03 03:56:07 +00:00
}
int hg_scanner_300::on_set_feedmode(int feedmode)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
2022-12-28 01:56:54 +00:00
int hg_scanner_300::on_pic_type(bool& pic)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner_300::on_pick_paper(bool autostrength)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner_300::on_pick_paper_threshold(double threshold)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner_300::on_is_auto_paper(bool isautopaper)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner_300::on_cis_get_image(bool isautopaper)
{
is_cis_image = isautopaper;
dsp_config.params_3288.isCorrect = isautopaper == true ? 0 : 1;
return writedown_device_configuration();
}
2023-10-11 09:44:16 +00:00
int hg_scanner_300::on_process_double_paper(bool type)
{
2023-10-25 11:50:29 +00:00
if (!firmware_sup_double_check)
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
dsp_config.params_3288.en_doublefeed_check = type;
return SCANNER_ERR_OK;
2023-10-11 09:44:16 +00:00
}
int hg_scanner_300::on_detect_lens_dirty(bool &type)
2023-10-25 11:50:29 +00:00
{
if (!firmware_sup_dirty_check)
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
is_lens_dirty = type;
dsp_config.params_3288.dirty_detect = type;
2023-10-25 11:50:29 +00:00
return SCANNER_ERR_OK;
}
int hg_scanner_300::on_get_feedmode(int &feedmode)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner_300::get_device_log(string &log)
{
if (firmware_sup_log_export_G300_)
{
std::string src_name = "/var/log/syslog";
std::string save_path = hg_log::temporary_path() + PATH_SEPARATOR + "device.log";
USBCB usbcb = { 0 };
usbcb.u32_CMD = 0x301;
usbcb.u32_Count = src_name.length();
int len = src_name.length();
int size = sizeof(usbcb);
int ret = io_->write_bulk(&usbcb, &size);
ret = io_->write_bulk(&src_name[0], &len);
usbcb.u32_CMD = 0x300;
ret = io_->write_bulk(&usbcb, &size);
ret = io_->read_bulk(&usbcb, &size);
ofstream out(save_path);
usbcb.u32_CMD = 0x302;
ret = io_->write_bulk(&usbcb, &size);
int touch = 0;
std::string buff;
int unitsize = 512 * 1024;
int bufsize = usbcb.u32_Count <= unitsize ? usbcb.u32_Count : unitsize;
buff.resize(bufsize);
while (touch < usbcb.u32_Count)
{
ret = io_->read_bulk(&buff[0], &bufsize);
if (SCANNER_ERR_OK != ret)
return ret;
out.write(&buff[0], bufsize);
touch += bufsize;
bufsize = unitsize > usbcb.u32_Count - touch ? usbcb.u32_Count - touch : unitsize;
}
out.close();
log = save_path;
}
else
{
int ret = SCANNER_ERR_OK,
len = 0;
string save_path = hg_log::temporary_path() + PATH_SEPARATOR + "device.log";
string str;
string str2;
USBCB usbcb = { setting3288dsp::GET_LOG_FILES_INFO, 0, 0 };
len = sizeof(USBCB);
{
std::lock_guard<std::mutex> lock(io_lock_);
ret = writeusb(usbcb);
if (ret == SCANNER_ERR_OK)
{
ret = readusb(usbcb);
}
int block = usbcb.u32_Count,
total = usbcb.u32_Count,
index = 0;
if (total == 0)
{
return SCANNER_ERR_NO_DATA;
}
str.resize(total);
str2.resize(total);
//ret = io_->read_bulk(&str[index], &block);//Reading too much data at once can cause error(TIME_OUT), it requires segmented reading. 2023-10-9
while (total)
{
block = 1024 * 1024;
if (total < block)
{
block = total;
}
ret = io_->read_bulk(&str[index], &block);
if (ret != SCANNER_ERR_OK)
return ret;
index += block;
total -= block;
}
}
if (ret != SCANNER_ERR_OK)
return ret;
ofstream f;
f.open(save_path, ios::out | ios::trunc);
if (!f.is_open())
return SCANNER_ERR_CREATE_FILE_FAILED;
f << str << endl;
f.close();
log = save_path;
}
return SCANNER_ERR_OK;
}
2022-12-28 01:56:54 +00:00
int hg_scanner_300::set_devreboot(int data)
2022-12-22 10:37:53 +00:00
{
2022-12-28 01:56:54 +00:00
USBCB usbcb = { setting3288dsp::REBOOT, data ,0 };
return writeusb(usbcb);
2022-12-22 10:37:53 +00:00
}
int hg_scanner_300::set_devshtudown()
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner_300::set_scan_islock(SANE_Bool type)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner_300::get_scan_islock(SANE_Bool& type)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner_300::set_scan_lock_check_val(string str)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner_300::set_firmware_upgrade(std::string str)
{
std::lock_guard<std::mutex> lock(io_lock_);
2023-04-25 10:06:14 +00:00
std::ifstream filename;
int ret = SCANNER_ERR_OK;
int block = 1024 * 1024;
char* sendbuf = new char[block];
filename.open(str, std::ios_base::in | std::ios_base::binary);
if (!filename.is_open())
{
return SCANNER_ERR_NO_DATA;
}
filename.seekg(0, std::ios::end);
size_t total = filename.tellg();
filename.seekg(0, std::ios::beg);
USBCB pre = { setting3288dsp::PRE_UPGRADE,0,total };
int len = sizeof(pre);
ret = io_->write_bulk(&pre, &len); //先告诉下面总字节数
2023-04-25 10:06:14 +00:00
if (ret != SCANNER_ERR_OK)
{
VLOG_MINI_1(LOG_LEVEL_WARNING, "PRE_UPGRADE: %s\n", hg_scanner_err_name(ret));
2023-04-25 10:06:14 +00:00
return ret;
}
USBCB update = { setting3288dsp::START_UPGRADE,0,total };
len = sizeof(update);
while (total > 0)
{
memset(sendbuf, 0, block);
block = 1024 * 1024;
if (total < block)
{
block = total;
}
io_->write_bulk(&update, &len);//数据分段写,每次都要先告诉下面?
2023-04-25 10:06:14 +00:00
filename.read(sendbuf, block);
//size_t pos = filename.tellg();
io_->write_bulk(sendbuf,&block);
ret = io_->read_bulk(&update, &len);
2023-04-25 10:06:14 +00:00
if (ret != SCANNER_ERR_OK)
{
VLOG_MINI_1(LOG_LEVEL_WARNING, "START_UPGRADE: %s\n", hg_scanner_err_name(ret));
2023-04-25 10:06:14 +00:00
return ret;
}
total -= block;
this_thread::sleep_for(std::chrono::milliseconds(10));
}
if (sendbuf)
{
delete[]sendbuf;
}
USBCB updatefinished = { setting3288dsp::UPDATE_FINISHED,0,0 };
len = sizeof(updatefinished);
ret = io_->write_bulk(&updatefinished, &len);
if (ret != SCANNER_ERR_OK)
{
VLOG_MINI_1(LOG_LEVEL_WARNING, "UPDATE_FINISHED: %s\n", hg_scanner_err_name(ret));
}
2023-04-25 10:06:14 +00:00
StopWatch sw;
this_thread::sleep_for(std::chrono::milliseconds(2000));
while (sw.elapsed_s() < 60)
{
this_thread::sleep_for(std::chrono::milliseconds(1000));
io_->set_timeout(3000);
USBCB result = { setting3288dsp::GET_UPDATE_RESULT,0,0 };
len = sizeof(result);
ret = io_->write_bulk(&result, &len);
if (ret == SCANNER_ERR_OK)
ret = io_->read_bulk(&result, &len);
else
{
VLOG_MINI_1(LOG_LEVEL_WARNING, "Write GET_UPDATE_RESULT failed: %d\n", ret);
}
if (ret != SCANNER_ERR_OK)
{
VLOG_MINI_1(LOG_LEVEL_WARNING, "updata result read_bulk:%s\n", hg_scanner_err_name(ret));
//return ret;
}
if (result.u32_Data == 2 || result.u32_Data == 3)
{
VLOG_MINI_1(LOG_LEVEL_WARNING, "updata result:%d\n", result.u32_Data);
break;
}
else if (result.u32_Data == 1)
{
VLOG_MINI_1(LOG_LEVEL_WARNING, "GET_UPDATE_RESULT---Failed : %d\n", result.u32_Data);
return SCANNER_ERR_DEVICE_UPGRADE_FAIL;
}
else
{
VLOG_MINI_1(LOG_LEVEL_WARNING, "GET_UPDATE_RESULT---u32_Data:%d\n", result.u32_Data);
}
}
return ret;
2022-12-22 10:37:53 +00:00
}
int hg_scanner_300::set_clean_paper_road()
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner_300::get_dev_islock_file(int& data)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner_300::set_dev_islock_file(int data)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
2022-12-28 01:56:54 +00:00
int hg_scanner_300::set_speed_mode(int data)
{
int ret = SCANNER_ERR_OK,
len = 0;
2022-12-29 10:05:59 +00:00
USBCB usbcb = { setting3288dsp::SET_SPEED_MODE,data,0 };
2022-12-28 01:56:54 +00:00
len = sizeof(usbcb);
ret = io_->write_bulk(&usbcb, &len);
return 0;
}
2022-12-29 10:05:59 +00:00
int hg_scanner_300::get_speed_mode(int& data)
{
int ret = SCANNER_ERR_OK,
len = 0;
USBCB usbcb = { setting3288dsp::GET_SPEED_MODE,0,0 };
len = sizeof(usbcb);
ret = io_->write_bulk(&usbcb, &len);
if (ret != SCANNER_ERR_OK)
{
return ret;
}
ret = io_->read_bulk(&usbcb, &len);
if (ret == SCANNER_ERR_OK)
{
data = usbcb.u32_Data;
}
return ret;
}
int hg_scanner_300::set_devs_distortion_check_val(float data)
2022-12-28 01:56:54 +00:00
{
int val = *(int*)&data; //float to int send
2022-12-28 01:56:54 +00:00
int ret = SCANNER_ERR_OK,
len = 0;
int protocol_dpi = resolution_ == 200 ? 1 : (resolution_ == 300 ? 2 : 3);
USBCB usbcb = { setting3288dsp::SET_JUST_COF_V ,val,protocol_dpi };
len = sizeof(usbcb);
float f = *(float*)&(val);
VLOG_MINI_3(LOG_LEVEL_WARNING, "set_devs_distortion_check_val dpi is:%d,config dpi = %d,distortion_check_val(%f)\n", resolution_, protocol_dpi,f);
io_->set_timeout(5000);
2023-05-24 02:11:56 +00:00
{
std::lock_guard<std::mutex> lock(io_lock_);
ret = io_->write_bulk(&usbcb, &len);
}
2022-12-28 01:56:54 +00:00
return ret;
}
int hg_scanner_300::get_devs_distortion_check_val(float& data)
2023-01-05 10:18:38 +00:00
{
int ret = SCANNER_ERR_OK,
len = 0,
val = 0;
int protocol_dpi = resolution_ == 200 ? 1 : (resolution_ == 300 ? 2 : 3);
USBCB usbcb = { setting3288dsp::GET_JUST_COF_V ,0,protocol_dpi };
2023-01-10 06:56:27 +00:00
len = sizeof(usbcb);
2023-01-05 10:18:38 +00:00
{
2023-05-24 02:11:56 +00:00
std::lock_guard<std::mutex> lock(io_lock_);
2023-01-05 10:18:38 +00:00
2023-05-24 02:11:56 +00:00
ret = io_->write_bulk(&usbcb, &len);
if (ret != SCANNER_ERR_OK)
{
return ret;
}
io_->set_timeout(3000);
ret = io_->read_bulk(&usbcb, &len);
}
if (ret != SCANNER_ERR_OK)
{
return ret;
2023-01-05 10:18:38 +00:00
}
val = usbcb.u32_Data;
data = *(float *) &val;
VLOG_MINI_3(LOG_LEVEL_WARNING, "get_distortion_check_val dpi is:%d,protocol_dpi = %d get_distortion_check_val(%f)\n", resolution_, protocol_dpi, data);
2023-01-05 10:18:38 +00:00
return ret;
}
int hg_scanner_300::set_auto_flat(int data)
2022-12-29 16:05:43 +00:00
{
if (data < 0 && data >6)
{
data = 0;
}
USBCB usbcb = { setting3288dsp::START_FLAT,data,0 };
2022-12-29 16:05:43 +00:00
int len = sizeof(usbcb);
2023-05-24 02:11:56 +00:00
int ret = SCANNER_ERR_OK;
{
std::lock_guard<std::mutex> lock(io_lock_);
ret = writeusb(usbcb);
}
2022-12-29 16:05:43 +00:00
2022-12-30 09:14:49 +00:00
if (ret == SCANNER_ERR_OK && wait_usb_.is_waiting())
2022-12-29 16:05:43 +00:00
{
//status_ = SCANNER_ERR_DEVICE_BUSY;
wait_usb_.notify();
std::this_thread::sleep_for(std::chrono::milliseconds(300));
ret = try_third_app_after_start(ret);
}
else
status_ = ret;
VLOG_MINI_1(LOG_LEVEL_WARNING, "set_auto_flat ret: %s\n", hg_scanner_err_name(ret));
return ret;
}
int hg_scanner_300::set_updata0303(void)
{
string fw = get_firmware_version();
if (!fw.empty())
{
if (fw.substr(4, 6) == "230303")
{
string scanner_path = hg_log::get_module_full_path(MODULE_NAME_SCANNER);
scanner_path = scanner_path.substr(0, scanner_path.size() - strlen(MODULE_NAME_SCANNER));
scanner_path += "update.zip";
set_firmware_upgrade(scanner_path);
}
}
return 0;
}
int hg_scanner_300::get_devs_cpu(string& cpu)
{
std::string src_name = "/usr/local/huago/sysinfo.json";
std::string dst_name = "./sys.log";
USBCB usbcb = { 0 };
usbcb.u32_CMD = 0x301;
usbcb.u32_Count = src_name.length();
int len = src_name.length();
int size = sizeof(usbcb);
int ret = io_->write_bulk(&usbcb, &size);
ret = io_->write_bulk(&src_name[0], &len);
usbcb.u32_CMD = 0x300;
ret = io_->write_bulk(&usbcb, &size);
ret = io_->read_bulk(&usbcb, &size);
ofstream out(dst_name);
usbcb.u32_CMD = 0x302;
ret = io_->write_bulk(&usbcb, &size);
int touch = 0;
std::string buff;
int bufsize = usbcb.u32_Count < 512 * 1024 ? usbcb.u32_Count : 512 * 1024;
buff.resize(bufsize);
while (touch < usbcb.u32_Count)
{
ret = io_->read_bulk(&buff[0], &bufsize);
if (SCANNER_ERR_OK != ret)
return ret;
out.write(&buff[0], bufsize);
touch += bufsize;
bufsize = bufsize > usbcb.u32_Count - touch ? usbcb.u32_Count - touch : bufsize;
}
out.close();
long long cpu_size = 0;
json js = json::parse(buff);
if (js.contains("MemTotal"))
{
cpu_size = js["MemTotal"];
}
float num = (float)cpu_size / 1024 / 1024 / 1024;
char buf[10] = { 0 };
sprintf(buf, "%.2f", num);
strcat(buf, "GB");
cpu = buf;
return ret;
}
int hg_scanner_300::get_devs_disk(string& disk)
{
std::string src_name = "/usr/local/huago/sysinfo.json";
std::string dst_name = "./sys.log";
USBCB usbcb = { 0 };
usbcb.u32_CMD = 0x301;
usbcb.u32_Count = src_name.length();
int len = src_name.length();
int size = sizeof(usbcb);
int ret = io_->write_bulk(&usbcb, &size);
ret = io_->write_bulk(&src_name[0], &len);
usbcb.u32_CMD = 0x300;
ret = io_->write_bulk(&usbcb, &size);
ret = io_->read_bulk(&usbcb, &size);
ofstream out(dst_name);
usbcb.u32_CMD = 0x302;
ret = io_->write_bulk(&usbcb, &size);
int touch = 0;
std::string buff;
int bufsize = usbcb.u32_Count < 512 * 1024 ? usbcb.u32_Count : 512 * 1024;
buff.resize(bufsize);
while (touch < usbcb.u32_Count)
{
ret = io_->read_bulk(&buff[0], &bufsize);
if (SCANNER_ERR_OK != ret)
return ret;
out.write(&buff[0], bufsize);
touch += bufsize;
bufsize = bufsize > usbcb.u32_Count - touch ? usbcb.u32_Count - touch : bufsize;
}
out.close();
long disk_size = 0;
json js = json::parse(buff);
if (js.contains("DiskTotal"))
{
disk_size = js["DiskTotal"];
}
float num = (float)disk_size / 1024 / 1024;
char buf[10] = { 0 };
sprintf(buf, "%.2f", num);
strcat(buf, "GB");
disk = buf;
return ret;
}
int hg_scanner_300::set_restore()
{
if (!firmware_sup_backup_restore)
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
USBCB usbcb = { 0,0,0 };
//usbcb.u32_CMD = setting3288dsp::SET_BACKUP_CONFIG;
int len = sizeof(usbcb);
usbcb.u32_CMD = setting3288dsp::SET_RECOVERY;
int ret = io_->write_bulk(&usbcb, &len);
usbcb.u32_CMD = setting3288dsp::GET_RECOVERY_STATUS;
StopWatch sw;
while (sw.elapsed_ms()< 8000.0)
{
len = sizeof(USBCB);
ret = io_->write_bulk(&usbcb, &len);
len = sizeof(USBCB);
ret = io_->read_bulk(&usbcb, &len);
if (usbcb.u32_Data == 2)
break;
std::this_thread::sleep_for(std::chrono::milliseconds(5));
}
std::string log_info = usbcb.u32_Data == 2 ? "RECOVERY success " : " RECOVERY failed " + std::to_string(usbcb.u32_Data);
VLOG_MINI_1(LOG_LEVEL_FATAL, log_info.c_str(), 0);
return usbcb.u32_Data == 2? SCANNER_ERR_OK: SCANNER_ERR_ACCESS_DENIED;
}
int hg_scanner_300::set_backup()
{
if (!firmware_sup_backup_restore)
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
USBCB usbcb = { 0,0,0 };
int len = sizeof(usbcb);
usbcb.u32_CMD = setting3288dsp::SET_BACKUP_CONFIG;
int ret = io_->write_bulk(&usbcb, &len);
usbcb.u32_CMD = setting3288dsp::GET_BACKUP_STATUS;
StopWatch sw;
while (sw.elapsed_ms() < 5000.0)
{
ret = io_->write_bulk(&usbcb, &len);
ret = io_->read_bulk(&usbcb, &len);
if (usbcb.u32_Data == 2)
break;
std::this_thread::sleep_for(std::chrono::milliseconds(5));
}
std::string log_info = usbcb.u32_Data == 2 ? "Back up success " : " Backup failed "+ std::to_string(usbcb.u32_Data);
VLOG_MINI_1(LOG_LEVEL_FATAL, log_info.c_str(),0);
return usbcb.u32_Data == 2 ? SCANNER_ERR_OK : SCANNER_ERR_INVALID_PARAMETER;
}
2022-12-31 04:08:44 +00:00
int hg_scanner_300::set_serial_num(string str)
{
std::lock_guard<std::mutex> lock(io_lock_);
USBCB usbcb = { setting3288dsp::SEND_SERIAL,0,14 };
int len = sizeof(usbcb),
ret = SCANNER_ERR_OK;
ret = io_->write_bulk(&usbcb, &len);
if (ret == SCANNER_ERR_OK)
{
len = str.size();
ret = io_->write_bulk(&str, &len);
}
return ret;
}
2023-01-03 03:12:26 +00:00
int hg_scanner_300::set_vid_pid(int data)
{
2023-05-24 02:11:56 +00:00
std::lock_guard<std::mutex> lock(io_lock_);
2023-01-04 09:27:02 +00:00
USBCB usbcb = { setting3288dsp::SET_USB_INFOR_VIDPID,data,0 };
2023-01-03 03:12:26 +00:00
int len = sizeof(usbcb);
return io_->write_bulk(&usbcb, &len);
}
int hg_scanner_300::get_vid_pid(int& data)
{
2023-05-24 02:11:56 +00:00
std::lock_guard<std::mutex> lock(io_lock_);
2023-01-03 03:12:26 +00:00
USBCB usbcb = { setting3288dsp::GET_USB_INFOR_VIDPID,0,0 };
int ret = SCANNER_ERR_OK,
len = sizeof(usbcb);
2023-01-04 09:27:02 +00:00
io_->write_bulk(&usbcb, &len);
2023-01-03 03:12:26 +00:00
io_->read_bulk(&usbcb, &len);
if (ret == SCANNER_ERR_OK)
{
data = usbcb.u32_Data;
}
return ret;
}
2022-12-22 10:37:53 +00:00
int hg_scanner_300::set_notify_sleep()
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
2022-12-29 10:05:59 +00:00
int hg_scanner_300::get_history_scan_count(int& num)
{
2022-11-26 09:48:10 +00:00
int ret = SCANNER_ERR_OK,
len = 0;
2022-11-26 11:27:23 +00:00
USBCB usbcb = { setting3288dsp::GET_SCANN_NUM,0, 0 };
len = sizeof(usbcb);
2022-11-26 11:40:13 +00:00
{
2023-05-24 02:11:56 +00:00
std::lock_guard<std::mutex> lock(io_lock_);
ret = io_->write_bulk(&usbcb, &len);
if (ret != SCANNER_ERR_OK)
{
return ret;
}
ret = io_->read_bulk(&usbcb, &len);
2022-11-26 11:40:13 +00:00
}
2022-11-26 11:27:23 +00:00
if (ret != SCANNER_ERR_OK)
{
return ret;
}
num = usbcb.u32_Data;
return ret;
}
int hg_scanner_300::get_roller_num(int& val)
{
2022-11-26 09:48:10 +00:00
int ret = SCANNER_ERR_OK,
len = 0;
2022-11-26 11:27:23 +00:00
USBCB usbcb = { setting3288dsp::GET_ROLLER_NUM,0, 0 };
len = sizeof(usbcb);
2022-11-26 11:40:13 +00:00
{
2023-05-24 02:11:56 +00:00
std::lock_guard<std::mutex> lock(io_lock_);
ret = io_->write_bulk(&usbcb, &len);
if (ret != SCANNER_ERR_OK)
{
return ret;
}
ret = io_->read_bulk(&usbcb, &len);
2022-11-26 11:40:13 +00:00
}
2022-11-26 11:27:23 +00:00
if (ret != SCANNER_ERR_OK)
{
return ret;
}
val = usbcb.u32_Data;
return ret;
2023-04-28 08:19:59 +00:00
}