2022-05-03 03:56:07 +00:00
|
|
|
|
#include "hg_scanner_239.h"
|
2022-05-30 03:04:26 +00:00
|
|
|
|
#include "../wrapper/hg_log.h"
|
2022-05-03 03:56:07 +00:00
|
|
|
|
#include "filetools.h"
|
|
|
|
|
|
2022-07-18 08:56:03 +00:00
|
|
|
|
#if defined(WIN32) || defined(_WIN64)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
#include "scanner_manager.h"
|
|
|
|
|
#endif
|
|
|
|
|
|
2022-11-23 07:39:13 +00:00
|
|
|
|
//100 200 3399
|
2022-11-26 09:48:10 +00:00
|
|
|
|
static std::string jsontext1("{\"global\":{\"device_type\":\"G139-G239\",\"option_count\":75},\"restore\":{\"category\":\"base\",\"title\":\"\\u6062\\u590d\\u9ed8\\u8ba4\\u8bbe\\u7f6e\",\"desc\":\"\\u6062\\u590d\\u9ed8\\u8ba4\\u8bbe\\u7f6e\",\"type\":\"button\",\"cur\":\"button\",\"default\":\"button\",\"size\":0},\"help\":{\"category\":\"advanced\",\"title\":\"\\u5e2e\\u52a9\",\"desc\":\"\\u663e\\u793a\\u8f6f\\u4ef6\\u5e2e\\u52a9\\u6587\\u6863\",\"type\":\"button\",\"cur\":\"true\",\"default\":\"true\",\"size\":4},\"grp-1\":{\"category\":\"base\",\"title\":\"\\u57fa\\u672c\\u8bbe\\u7f6e\",\"type\":\"group\"},\"is-multiout\":{\"category\":\"base\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\",\"desc\":\"\\u540c\\u65f6\\u8f93\\u51fa\\u591a\\u79cd\\u989c\\u8272\\u6a21\\u5f0f\\u7684\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"multiout-type\":{\"category\":\"base\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\\u7c7b\\u578b\",\"desc\":\"\\u9009\\u62e9\\u591a\\u6d41\\u8f93\\u51fa\\u7684\\u7c7b\\u578b\",\"type\":\"string\",\"cur\":\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"default\":\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"size\":32,\"range\":[\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"\\u5f69\\u8272+\\u7070\\u5ea6\",\"\\u5f69\\u8272+\\u9ed1\\u767d\",\"\\u7070\\u5ea6+\\u9ed1\\u767d\"],\"depend_or\":[\"is-multiout==true\"]},\"mode\":{\"category\":\"base\",\"title\":\"\\u989c\\u8272\\u6a21\\u5f0f\",\"desc\":\"\\u9009\\u62e9\\u8272\\u5f69\\u6a21\\u5f0f\",\"type\":\"string\",\"cur\":\"24\\u4f4d\\u5f69\\u8272\",\"default\":\"24\\u4f4d\\u5f69\\u8272\",\"size\":32,\"range\":[\"24\\u4f4d\\u5f69\\u8272\",\"256\\u7ea7\\u7070\\u5ea6\",\"\\u9ed1\\u767d\",\"\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"],\"depend_or\":[\"is-multiout!=true\"]},\"binary-threshold\":{\"category\":\"base\",\"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},\"depend_or\":[\"is-multiout==true\",\"mode==\\u9ed1\\u767d\"]},\"reverse-bw\":{\"category\":\"base\",\"title\":\"\\u9ed1\\u767d\\u56fe\\u50cf\\u53cd\\u8272\\u8f93\\u51fa\",\"desc\":\"\\u8f93\\u51fa\\u7684\\u9ed1\\u767d\\u56fe\\u50cf\\u4ee5\\u201c1\\u201d\\u4ee3\\u8868\\u9ed1\\u8272\\uff0c\\u201c0\\u201d\\u4ee3\\u8868\\u767d\\u8272\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"is-multiout==true\",\"mode==\\u9ed1\\u767d\"]},\"filter\":{\"category\":\"base\",\"title\":\"\\u7070\\u5ea6\\u6216\\u9ed1\\u767d\\u56fe\\u50cf - \\u9664\\u8272\\u4e0e\\u589e\\u5f3a\",\"desc\":\"\\u6d88\\u9664\\u6216\\u589e\\u5f3a\\u6307\\u5b9a\\u8272\\u5f69\",\"type\":\"string\",\"cur\":\"\\u4e0d\\u9664\\u8272\",\"default\":\"\\u4e0d\\u9664\\u8272\",\"size\":24,\"range\":[\"\\u4e0d\\u9664\\u8272\",\"\\u9664\\u7ea2\\u8272\",\"\\u9664\\u7eff\\u8272\",\"\\u9664\\u84dd\\u8272\",\"\\u7ea2\\u8272\\u589e\\u5f3a\",\"\\u7eff\\u8272\\u589e\\u5f3a\",\"\\u84dd\\u8272\\u589e\\u5f3a\"],\"depend_and\":[\"is-multiout!=true\",\"mode!=24\\u4f4d\\u5f69\\u8272\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-multiout-red\":{\"category\":\"base\",\"title\":\"24\\u4f4d\\u5f69\\u8272\\u56fe\\u50cf - \\u591a\\u6d41\\u8f93\\u51fa\\u9664\\u7ea2\",\"desc\":\"\\u540c\\u65f6\\u8f93\\u51fa\\u5f69\\u8272\\u56fe\\u50cf\\u548c\\u7070\\u5ea6\\u9664\\u7ea2\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-multiout!=true\",\"mode!=256\\u7ea7\\u7070\\u5ea6\",\"!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-answer-sheet-red\":{\"category\":\"base\",\"title\":\"24\\u4f4d\\u5f69\\u8272\\u56fe\\u50cf - \\u7b54\\u9898\\u5361\\u9664\\u7ea2\",\"desc\":\"\\u8f93\\u51fa\\u9664\\u7ea2\\u5f69\\u8272\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-multiout!=true\",\"mode!=256\\u7ea7\\u7070\\u5ea6\",\"!=\\u9ed1\\u767d\
|
|
|
|
|
static std::string jsontext2("ase\",\"title\":\"\\u56fe\\u50cf\\u62c6\\u5206\",\"desc\":\"\\u81ea\\u52a8\\u62c6\\u5206\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"page!=\\u5bf9\\u6298\",\"!=\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u53d1\\u7968\\u7eb8\\uff09\",\"!=\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u901a\\u7528\\uff09\"]},\"is-erase-black-frame\":{\"category\":\"base\",\"title\":\"\\u6d88\\u9664\\u9ed1\\u6846\",\"desc\":\"\\u6d88\\u9664\\u6587\\u7a3f\\u8303\\u56f4\\u5916\\u7684\\u9ed1\\u8272\\u80cc\\u666f\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4},\"bkg-fill-mode\":{\"category\":\"advanced\",\"title\":\"\\u80cc\\u666f\\u586b\\u5145\\u65b9\\u5f0f\",\"desc\":\"\\u9009\\u62e9\\u80cc\\u666f\\u586b\\u5145\\u65b9\\u5f0f\",\"type\":\"string\",\"cur\":\"\\u51f8\\u591a\\u8fb9\\u5f62\",\"default\":\"\\u51f8\\u591a\\u8fb9\\u5f62\",\"size\":40,\"range\":[\"\\u51f8\\u591a\\u8fb9\\u5f62\",\"\\u51f9\\u591a\\u8fb9\\u5f62\"],\"depend_or\":[\"is-erase-black-frame==true\"]},\"is-fill-color\":{\"category\":\"base\",\"title\":\"\\u8272\\u5f69\\u586b\\u5145\",\"desc\":\"\\u542f\\u7528\\u540e\\u9ed1\\u6846\\u90e8\\u5206\\u5c06\\u586b\\u5145\\u4e3a\\u6587\\u7a3f\\u5e95\\u8272\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-erase-black-frame==true\"]},\"threshold\":{\"category\":\"advanced\",\"title\":\"\\u9608\\u503c\",\"desc\":\"\\u6587\\u7a3f\\u5e95\\u8272\\u4e0e\\u9ed1\\u8272\\u80cc\\u666f\\u7070\\u5ea6\\u503c\\u7684\\u5dee\\u503c\\u5927\\u4e8e\\u8be5\\u503c\\uff0c\\u624d\\u4f1a\\u88ab\\u8bc6\\u522b\\u4e3a\\u6587\\u7a3f\",\"type\":\"int\",\"cur\":40,\"default\":40,\"size\":4,\"range\":{\"min\":30,\"max\":50},\"depend_or\":[\"is-erase-black-frame==true\",\"paper==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"is-anti-skew==true\"]},\"anti-noise-level\":{\"category\":\"advanced\",\"title\":\"\\u80cc\\u666f\\u6297\\u566a\\u7b49\\u7ea7\",\"desc\":\"\\u80fd\\u591f\\u5bb9\\u5fcd\\u7684\\u80cc\\u666f\\u6742\\u8272\\u6761\\u7eb9\\u7684\\u5bbd\\u5ea6\",\"type\":\"int\",\"cur\":8,\"default\":8,\"size\":4,\"range\":{\"min\":1,\"max\":20},\"depend_or\":[\"is-erase-black-frame==true\",\"paper==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"is-anti-skew==true\"]},\"margin\":{\"category\":\"advanced\",\"title\":\"\\u8fb9\\u7f18\\u7f29\\u8fdb\",\"desc\":\"\\u5bfb\\u627e\\u6587\\u7a3f\\u8fb9\\u7f18\\u65f6\\u5bf9\\u8fb9\\u7f18\\u7684\\u4fb5\\u5165\\u7a0b\\u5ea6\",\"type\":\"int\",\"cur\":5,\"default\":5,\"size\":4,\"range\":{\"min\":5,\"max\":30},\"depend_or\":[\"is-erase-black-frame==true\",\"paper==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"is-anti-skew==true\"]},\"is-dark-sample\":{\"category\":\"base\",\"title\":\"\\u6df1\\u8272\\u6837\\u5f20\",\"desc\":\"\\u542f\\u7528\\u8be5\\u6a21\\u5f0f\\u9632\\u6b62\\u6df1\\u8272\\u5e95\\u8272\\u7684\\u6587\\u7a3f\\u56fe\\u50cf\\u88ab\\u8bef\\u5904\\u7406\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"page!=\\u5bf9\\u6298\",\"is-erase-black-frame!=true\",\"paper!=\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"!=\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\\u81ea\\u52a8\\u88c1\\u5207\",\"is-anti-skew!=true\"]},\"is-anti-permeate\":{\"category\":\"base\",\"title\":\"\\u9632\\u6b62\\u6e17\\u900f\",\"desc\":\"\\u9632\\u6b62\\u80cc\\u9762\\u56fe\\u6848\\u6e17\\u900f\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"permeate-level\":{\"category\":\"base\",\"title\":\" \\u9632\\u6b62\\u6e17\\u900f\\u7b49\\u7ea7\",\"desc\":\"\\u9009\\u62e9\\u9632\\u6b62\\u6e17\\u900f\\u7684\\u7b49\\u7ea7\",\"type\":\"string\",\"cur\":\"\\u8f83\\u5f31\",\"d
|
2022-08-08 10:15:51 +00:00
|
|
|
|
|
2022-11-23 07:39:13 +00:00
|
|
|
|
//G439
|
2022-11-26 09:48:10 +00:00
|
|
|
|
static std::string jsontext3("{\"global\":{\"device_type\":\"G439\",\"option_count\":68},\"restore\":{\"category\":\"base\",\"title\":\"\\u6062\\u590d\\u9ed8\\u8ba4\\u8bbe\\u7f6e\",\"desc\":\"\\u6062\\u590d\\u9ed8\\u8ba4\\u8bbe\\u7f6e\",\"type\":\"button\",\"cur\":\"button\",\"default\":\"button\",\"size\":0},\"help\":{\"category\":\"advanced\",\"title\":\"\\u5e2e\\u52a9\",\"desc\":\"\\u663e\\u793a\\u8f6f\\u4ef6\\u5e2e\\u52a9\\u6587\\u6863\",\"type\":\"button\",\"cur\":\"true\",\"default\":\"true\",\"size\":4},\"grp-1\":{\"category\":\"base\",\"title\":\"\\u57fa\\u672c\\u8bbe\\u7f6e\",\"type\":\"group\"},\"is-multiout\":{\"category\":\"base\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\",\"desc\":\"\\u540c\\u65f6\\u8f93\\u51fa\\u591a\\u79cd\\u989c\\u8272\\u6a21\\u5f0f\\u7684\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"multiout-type\":{\"category\":\"base\",\"title\":\"\\u591a\\u6d41\\u8f93\\u51fa\\u7c7b\\u578b\",\"desc\":\"\\u9009\\u62e9\\u591a\\u6d41\\u8f93\\u51fa\\u7684\\u7c7b\\u578b\",\"type\":\"string\",\"cur\":\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"default\":\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"size\":32,\"range\":[\"\\u5f69\\u8272+\\u7070\\u5ea6+\\u9ed1\\u767d\",\"\\u5f69\\u8272+\\u7070\\u5ea6\",\"\\u5f69\\u8272+\\u9ed1\\u767d\",\"\\u7070\\u5ea6+\\u9ed1\\u767d\"],\"depend_or\":[\"is-multiout==true\"]},\"mode\":{\"category\":\"base\",\"title\":\"\\u989c\\u8272\\u6a21\\u5f0f\",\"desc\":\"\\u9009\\u62e9\\u8272\\u5f69\\u6a21\\u5f0f\",\"type\":\"string\",\"cur\":\"24\\u4f4d\\u5f69\\u8272\",\"default\":\"24\\u4f4d\\u5f69\\u8272\",\"size\":32,\"range\":[\"24\\u4f4d\\u5f69\\u8272\",\"256\\u7ea7\\u7070\\u5ea6\",\"\\u9ed1\\u767d\",\"\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"],\"depend_or\":[\"is-multiout!=true\"]},\"binary-threshold\":{\"category\":\"base\",\"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},\"depend_or\":[\"is-multiout==true\",\"mode==\\u9ed1\\u767d\"]},\"reverse-bw\":{\"category\":\"base\",\"title\":\"\\u9ed1\\u767d\\u56fe\\u50cf\\u53cd\\u8272\\u8f93\\u51fa\",\"desc\":\"\\u8f93\\u51fa\\u7684\\u9ed1\\u767d\\u56fe\\u50cf\\u4ee5\\u201c1\\u201d\\u4ee3\\u8868\\u9ed1\\u8272\\uff0c\\u201c0\\u201d\\u4ee3\\u8868\\u767d\\u8272\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_or\":[\"is-multiout==true\",\"mode==\\u9ed1\\u767d\"]},\"filter\":{\"category\":\"base\",\"title\":\"\\u7070\\u5ea6\\u6216\\u9ed1\\u767d\\u56fe\\u50cf - \\u9664\\u8272\\u4e0e\\u589e\\u5f3a\",\"desc\":\"\\u6d88\\u9664\\u6216\\u589e\\u5f3a\\u6307\\u5b9a\\u8272\\u5f69\",\"type\":\"string\",\"cur\":\"\\u4e0d\\u9664\\u8272\",\"default\":\"\\u4e0d\\u9664\\u8272\",\"size\":24,\"range\":[\"\\u4e0d\\u9664\\u8272\",\"\\u9664\\u7ea2\\u8272\",\"\\u9664\\u7eff\\u8272\",\"\\u9664\\u84dd\\u8272\",\"\\u7ea2\\u8272\\u589e\\u5f3a\",\"\\u7eff\\u8272\\u589e\\u5f3a\",\"\\u84dd\\u8272\\u589e\\u5f3a\"],\"depend_and\":[\"is-multiout!=true\",\"mode!=24\\u4f4d\\u5f69\\u8272\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-multiout-red\":{\"category\":\"base\",\"title\":\"24\\u4f4d\\u5f69\\u8272\\u56fe\\u50cf - \\u591a\\u6d41\\u8f93\\u51fa\\u9664\\u7ea2\",\"desc\":\"\\u540c\\u65f6\\u8f93\\u51fa\\u5f69\\u8272\\u56fe\\u50cf\\u548c\\u7070\\u5ea6\\u9664\\u7ea2\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-multiout!=true\",\"mode!=256\\u7ea7\\u7070\\u5ea6\",\"!=\\u9ed1\\u767d\",\"!=\\u989c\\u8272\\u81ea\\u52a8\\u8bc6\\u522b\"]},\"is-rid-answer-sheet-red\":{\"category\":\"base\",\"title\":\"24\\u4f4d\\u5f69\\u8272\\u56fe\\u50cf - \\u7b54\\u9898\\u5361\\u9664\\u7ea2\",\"desc\":\"\\u8f93\\u51fa\\u9664\\u7ea2\\u5f69\\u8272\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-multiout!=true\",\"mode!=256\\u7ea7\\u7070\\u5ea6\",\"!=\\u9ed1\\u767d\",\"!
|
|
|
|
|
static std::string jsontext4(",\"title\":\"\\u753b\\u8d28\",\"desc\":\"\\u9009\\u62e9\\u626b\\u63cf\\u4eea\\u7684\\u753b\\u8d28\\u6a21\\u5f0f\",\"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\":[\"resolution>=300\"]},\"is-exchange\":{\"category\":\"base\",\"title\":\"\\u4ea4\\u6362\\u6b63\\u53cd\\u9762\",\"desc\":\"\\u4ea4\\u6362\\u6bcf\\u5f20\\u6587\\u7a3f\\u7684\\u6b63\\u53cd\\u9762\\u51fa\\u56fe\\u987a\\u5e8f\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"page!=\\u5355\\u9762\"]},\"grp-2\":{\"category\":\"base\",\"title\":\"\\u4eae\\u5ea6\",\"type\":\"group\"},\"is-custom-gamma\":{\"category\":\"base\",\"title\":\"\\u542f\\u7528\\u8272\\u8c03\\u66f2\\u7ebf\",\"desc\":\"\\u81ea\\u5b9a\\u4e49\\u56fe\\u50cf\\u8272\\u8c03\\u6548\\u679c\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4},\"brightness\":{\"category\":\"base\",\"title\":\"\\u4eae\\u5ea6\\u503c\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u50cf\\u4eae\\u5ea6\",\"type\":\"int\",\"cur\":128,\"default\":128,\"size\":4,\"range\":{\"min\":1,\"max\":255},\"depend_and\":[\"is-custom-gamma==false\"]},\"contrast\":{\"category\":\"base\",\"title\":\"\\u5bf9\\u6bd4\\u5ea6\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u50cf\\u5bf9\\u6bd4\\u5ea6\",\"type\":\"int\",\"cur\":4,\"default\":4,\"size\":4,\"range\":{\"min\":1,\"max\":7},\"depend_and\":[\"is-custom-gamma==false\"]},\"gamma\":{\"category\":\"base\",\"title\":\"\\u4f3d\\u9a6c\\u503c\",\"desc\":\"\\u8c03\\u6574\\u56fe\\u50cf\\u4f3d\\u739b\\u503c\",\"type\":\"float\",\"cur\":1.000000,\"default\":1.000000,\"size\":4,\"range\":{\"min\":0.010000,\"max\":5.000000},\"depend_and\":[\"is-custom-gamma==false\"]},\"grp-3\":{\"category\":\"base\",\"title\":\"\\u56fe\\u50cf\\u5904\\u7406\",\"type\":\"group\"},\"is-anti-skew\":{\"category\":\"base\",\"title\":\"\\u81ea\\u52a8\\u7ea0\\u504f\",\"desc\":\"\\u81ea\\u52a8\\u7ea0\\u6b63\\u6b6a\\u659c\\u9001\\u5165\\u7684\\u6587\\u7a3f\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4,\"depend_or\":[\"page!=\\u5bf9\\u6298\"]},\"is-split\":{\"category\":\"base\",\"title\":\"\\u56fe\\u50cf\\u62c6\\u5206\",\"desc\":\"\\u81ea\\u52a8\\u62c6\\u5206\\u56fe\\u50cf\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"page!=\\u5bf9\\u6298\",\"!=\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u53d1\\u7968\\u7eb8\\uff09\",\"!=\\u8df3\\u8fc7\\u7a7a\\u767d\\u9875\\uff08\\u901a\\u7528\\uff09\"]},\"is-erase-black-frame\":{\"category\":\"base\",\"title\":\"\\u6d88\\u9664\\u9ed1\\u6846\",\"desc\":\"\\u6d88\\u9664\\u6587\\u7a3f\\u8303\\u56f4\\u5916\\u7684\\u9ed1\\u8272\\u80cc\\u666f\",\"type\":\"bool\",\"cur\":true,\"default\":true,\"size\":4},\"bkg-fill-mode\":{\"category\":\"advanced\",\"title\":\"\\u80cc\\u666f\\u586b\\u5145\\u65b9\\u5f0f\",\"desc\":\"\\u9009\\u62e9\\u80cc\\u666f\\u586b\\u5145\\u65b9\\u5f0f\",\"type\":\"string\",\"cur\":\"\\u51f8\\u591a\\u8fb9\\u5f62\",\"default\":\"\\u51f8\\u591a\\u8fb9\\u5f62\",\"size\":40,\"range\":[\"\\u51f8\\u591a\\u8fb9\\u5f62\",\"\\u51f9\\u591a\\u8fb9\\u5f62\"],\"depend_or\":[\"is-erase-black-frame==true\"]},\"is-fill-color\":{\"category\":\"base\",\"title\":\"\\u8272\\u5f69\\u586b\\u5145\",\"desc\":\"\\u542f\\u7528\\u540e\\u9ed1\\u6846\\u90e8\\u5206\\u5c06\\u586b\\u5145\\u4e3a\\u6587\\u7a3f\\u5e95\\u8272\",\"type\":\"bool\",\"cur\":false,\"default\":false,\"size\":4,\"depend_and\":[\"is-erase-black-frame==true\"]},\"threshold\":{\"category\":\"advanced\",\"title\":\"\\u9608\\u503c\",\"desc\":\"\\u6587\\u7a3f\\u5e95\\u8272\\u4e0e\\u9ed1\\u8272\\u80cc\\u666f\\u7070\\u5ea6\\u503c\\u7684\\u5dee\\u503c\\u5927\\u4e8e\\u8be5\\u503c\\uff0c\\u624d\\u4f1a\\u88ab\\u8bc6\\u522b\\u4e3a\\u6587\\u7a3f\",\"type\":\"int\",\"cur\":40,\"default\":40,\"size\":4,\"range\":{\"min\":30,\"max\":50},\"depend_or\":[\"is-erase-black-frame==true\",\"paper==\\u5339\\u914d\\u539f\\u59cb\\u5c3a\\u5bf8\",\"==\\u6700\\u5927\\u626b\\u63cf\\u5c3a\\u5bf8\",\"==\\
|
2022-10-18 08:23:22 +00:00
|
|
|
|
|
2022-05-03 03:56:07 +00:00
|
|
|
|
namespace settings
|
|
|
|
|
{
|
2022-10-18 08:23:22 +00:00
|
|
|
|
scanner_err device_status_to_hg_err(setting3399::HGEIntInfo* ds)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-05-17 07:04:55 +00:00
|
|
|
|
scanner_err code = SCANNER_ERR_OK;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
2022-10-18 08:23:22 +00:00
|
|
|
|
if (ds->From == setting3399::HGType::FPGA)
|
2022-05-17 07:04:55 +00:00
|
|
|
|
code = SCANNER_ERR_OK;
|
2022-10-18 08:23:22 +00:00
|
|
|
|
else if (ds->From == setting3399::HGType::MtBoard)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
|
|
|
|
switch (ds->Code)
|
|
|
|
|
{
|
|
|
|
|
case 0x00002:
|
2022-05-17 07:04:55 +00:00
|
|
|
|
code = SCANNER_ERR_DEVICE_NO_PAPER;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
break;
|
|
|
|
|
case 0x00004:
|
2022-05-17 07:04:55 +00:00
|
|
|
|
code = SCANNER_ERR_DEVICE_COVER_OPENNED;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
break;
|
|
|
|
|
case 0x00008:
|
2022-05-17 07:04:55 +00:00
|
|
|
|
code = SCANNER_ERR_DEVICE_FEEDING_PAPER;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
break;
|
|
|
|
|
case 0x00010:
|
2022-05-17 07:04:55 +00:00
|
|
|
|
code = SCANNER_ERR_DEVICE_PAPER_JAMMED;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
break;
|
|
|
|
|
case 0x00020:
|
2022-05-17 07:04:55 +00:00
|
|
|
|
code = SCANNER_ERR_DEVICE_DOUBLE_FEEDING;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
break;
|
|
|
|
|
case 0x00040:
|
2022-05-17 07:04:55 +00:00
|
|
|
|
code = SCANNER_ERR_DEVICE_STAPLE_ON;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
break;
|
|
|
|
|
case 0x00080:
|
2022-05-17 07:04:55 +00:00
|
|
|
|
code = SCANNER_ERR_DEVICE_PAPER_SKEW;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
break;
|
|
|
|
|
case 0x10000:
|
|
|
|
|
case 0x80000:
|
2022-05-17 07:04:55 +00:00
|
|
|
|
code = SCANNER_ERR_TIMEOUT;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
break;
|
|
|
|
|
case 0x20000:
|
2022-05-17 07:04:55 +00:00
|
|
|
|
code = SCANNER_ERR_DEVICE_SIZE_CHECK;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
break;
|
2022-12-05 07:33:56 +00:00
|
|
|
|
case 0x00100:
|
|
|
|
|
code = SCANNER_ERR_DEVICE_ISLOCK;
|
|
|
|
|
break;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-10-18 08:23:22 +00:00
|
|
|
|
else if (ds->From == setting3399::HGType::IMG)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
|
|
|
|
if (ds->Code == 1)
|
2022-05-17 07:04:55 +00:00
|
|
|
|
code = SCANNER_ERR_DEVICE_DOGEAR;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
else if (ds->Code == 2)
|
2022-05-17 07:04:55 +00:00
|
|
|
|
code = SCANNER_ERR_DEVICE_SIZE_CHECK;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
2022-10-18 08:23:22 +00:00
|
|
|
|
else if (ds->From == setting3399::HGType::V4L2)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
|
|
|
|
if (ds->Code == 0)
|
2022-05-17 07:04:55 +00:00
|
|
|
|
code = SCANNER_ERR_DEVICE_SCANN_ERROR;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
else if (ds->Code == 1)
|
2022-05-17 07:04:55 +00:00
|
|
|
|
code = SCANNER_ERR_DEVICE_NO_IMAGE;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
2022-10-18 08:23:22 +00:00
|
|
|
|
else if (ds->From == setting3399::HGType::STOPSCAN)
|
2022-05-17 07:04:55 +00:00
|
|
|
|
code = SCANNER_ERR_DEVICE_STOPPED;
|
2022-12-30 09:14:49 +00:00
|
|
|
|
else if (ds->From == setting3399::HGType::AutoCorrect)
|
|
|
|
|
{
|
|
|
|
|
if (ds->Code == 4)
|
|
|
|
|
code = SCANNER_ERR_DEVICE_AUTO_FAIL_OVER;
|
|
|
|
|
else
|
|
|
|
|
code = SCANNER_ERR_DEVICE_AUTO_FAIL_INFO;
|
|
|
|
|
}
|
|
|
|
|
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
return code;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// resolution
|
|
|
|
|
static struct
|
|
|
|
|
{
|
|
|
|
|
float resolution;
|
|
|
|
|
int dev_value;
|
|
|
|
|
}resolution_map[] =
|
|
|
|
|
{
|
|
|
|
|
{100.0f, 1},
|
|
|
|
|
{150.0f, 1},
|
|
|
|
|
{200.0f, 1},
|
|
|
|
|
{240.0f, 1},
|
|
|
|
|
{300.0f, 0},
|
|
|
|
|
{600.0f, 1} //临时版本发1 原来发2
|
|
|
|
|
};
|
|
|
|
|
bool is_equal(float l, float r)
|
|
|
|
|
{
|
|
|
|
|
return fabs(l - r) < .000001f;
|
|
|
|
|
}
|
|
|
|
|
int match_best_resolution(int resolution, bool* exact)
|
|
|
|
|
{
|
|
|
|
|
int rsl = resolution,
|
|
|
|
|
ind = 0;
|
|
|
|
|
bool good = true, *r = exact ? exact : &good;
|
|
|
|
|
|
|
|
|
|
if (rsl <= resolution_map[0].resolution)
|
|
|
|
|
{
|
|
|
|
|
ind = 0;
|
|
|
|
|
}
|
|
|
|
|
else if (rsl >= resolution_map[ARRAY_SIZE(resolution_map) - 1].resolution)
|
|
|
|
|
{
|
|
|
|
|
ind = ARRAY_SIZE(resolution_map) - 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
for (int i = 1; i < ARRAY_SIZE(resolution_map); ++i)
|
|
|
|
|
{
|
|
|
|
|
if (is_equal(rsl, resolution_map[i].resolution))
|
|
|
|
|
{
|
|
|
|
|
ind = i;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if (rsl < resolution_map[i].resolution)
|
|
|
|
|
{
|
|
|
|
|
float dif_l = rsl - resolution_map[i - 1].resolution,
|
|
|
|
|
dif_r = resolution_map[i].resolution - rsl;
|
|
|
|
|
|
|
|
|
|
if (dif_l > dif_r)
|
|
|
|
|
ind = i;
|
|
|
|
|
else
|
|
|
|
|
ind = i - 1;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
*r = is_equal(rsl, resolution_map[ind].resolution);
|
|
|
|
|
|
|
|
|
|
return ind;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// class ...
|
|
|
|
|
hg_scanner_239::hg_scanner_239(const char* dev_name, int pid,usb_io* io) : hg_scanner(G20039Serial, dev_name, io)
|
2022-10-17 10:15:29 +00:00
|
|
|
|
, rewrite_conf_(false), reset_(false),is_start_status(false)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-10-17 10:15:29 +00:00
|
|
|
|
pid_ = pid;
|
2022-05-30 03:04:26 +00:00
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "hg_scanner_239(%s) constructing ...\n", hg_log::format_ptr(this).c_str());
|
2022-05-03 03:56:07 +00:00
|
|
|
|
dev_conf_.value = 0;
|
2022-05-09 08:59:22 +00:00
|
|
|
|
#ifndef MAPPING_FUNCTION_IN_BASE
|
2022-05-03 03:56:07 +00:00
|
|
|
|
init_setting_map(setting_map_, ARRAY_SIZE(setting_map_));
|
2022-05-09 08:59:22 +00:00
|
|
|
|
#endif
|
2022-11-26 03:22:39 +00:00
|
|
|
|
if (init_settings(pid_))
|
|
|
|
|
{
|
|
|
|
|
if (pid_ == 0x239)
|
|
|
|
|
init_settings((jsontext1 + jsontext2).c_str());
|
|
|
|
|
else
|
|
|
|
|
init_settings((jsontext3 + jsontext4).c_str());
|
|
|
|
|
}
|
2022-05-03 03:56:07 +00:00
|
|
|
|
init_version();
|
2022-12-05 15:01:13 +00:00
|
|
|
|
hg_version_init_handle();
|
|
|
|
|
wait_devsislock_.notify();
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
|
|
|
|
hg_scanner_239::~hg_scanner_239()
|
|
|
|
|
{
|
2022-05-30 03:04:26 +00:00
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "hg_scanner_239(%s) destroyed.\n", hg_log::format_ptr(this).c_str());
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
|
|
|
|
int hg_scanner_239::read_register(int addr, int* val)
|
|
|
|
|
{
|
|
|
|
|
std::lock_guard<std::mutex> lock(io_lock_);
|
|
|
|
|
|
|
|
|
|
int l = sizeof(*val),
|
|
|
|
|
ret = io_->control_io(0x0c0, USB_REQ_GET_DEV_REGS, addr, 0, val, &l);
|
|
|
|
|
|
|
|
|
|
if (ret)
|
|
|
|
|
status_ = ret;
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
int hg_scanner_239::write_register(int addr, int val)
|
|
|
|
|
{
|
|
|
|
|
std::lock_guard<std::mutex> lock(io_lock_);
|
|
|
|
|
|
|
|
|
|
int l = sizeof(val),
|
|
|
|
|
ret = io_->control_io(0x040, USB_REQ_SET_DEV_REGS, addr, 0, &val, &l);
|
|
|
|
|
|
|
|
|
|
if (ret)
|
|
|
|
|
status_ = ret;
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
int hg_scanner_239::write_command(int cmd)
|
|
|
|
|
{
|
|
|
|
|
return write_register(0, cmd);
|
|
|
|
|
}
|
|
|
|
|
std::string hg_scanner_239::control_fetch(int addr, int val, int size)
|
|
|
|
|
{
|
|
|
|
|
int l = sizeof(val),
|
|
|
|
|
ret = 0;
|
|
|
|
|
std::string data("");
|
|
|
|
|
|
|
|
|
|
ret = write_register(addr, val);
|
2022-05-17 07:04:55 +00:00
|
|
|
|
if (ret == SCANNER_ERR_OK)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
|
|
|
|
std::lock_guard<std::mutex> lock(io_lock_);
|
|
|
|
|
|
|
|
|
|
l = size + 1;
|
|
|
|
|
data.resize(size + 2);
|
|
|
|
|
bzero(&data[0], size + 2);
|
|
|
|
|
ret = io_->read_bulk(&data[0], &l);
|
2022-07-27 06:10:44 +00:00
|
|
|
|
if (ret || l == 0)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-07-27 06:10:44 +00:00
|
|
|
|
VLOG_MINI_4(LOG_LEVEL_DEBUG_INFO, "control_fetch(%d, %d) - read_bulk %d byte(s) = %s\n", addr, val, l, hg_scanner_err_name(ret));
|
2022-05-03 03:56:07 +00:00
|
|
|
|
data.clear();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
2022-05-30 03:42:16 +00:00
|
|
|
|
VLOG_MINI_3(LOG_LEVEL_DEBUG_INFO, "control_fetch(%d, %d) = %s\n", addr, val, hg_scanner_err_name(ret));
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
return data;
|
|
|
|
|
}
|
|
|
|
|
std::string hg_scanner_239::get_fpga(void)
|
|
|
|
|
{
|
|
|
|
|
int val = 0,
|
2022-10-18 08:23:22 +00:00
|
|
|
|
ret = read_register(setting3399::SR_GET_MBVERSION_LENGHT, &val);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
std::string fpga("");
|
|
|
|
|
|
2022-05-17 07:04:55 +00:00
|
|
|
|
if (ret == SCANNER_ERR_OK)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
|
|
|
|
fpga.resize(val + 2);
|
|
|
|
|
bzero(&fpga[0], val + 2);
|
|
|
|
|
|
2022-10-18 08:23:22 +00:00
|
|
|
|
return control_fetch(setting3399::SR_GET_MBVERSION, 0, val);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return fpga;
|
|
|
|
|
}
|
2022-12-22 10:37:53 +00:00
|
|
|
|
int hg_scanner_239::get_scan_mode(bool &type)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
|
|
|
|
int val = 0,
|
2022-12-22 10:37:53 +00:00
|
|
|
|
ret = read_register(setting3399::SR_OS, &val); //val == 1计数模式
|
|
|
|
|
type =val == 1 ? false : true;
|
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "get scan mode error: %s\n", hg_scanner_err_name(ret));
|
|
|
|
|
//if (val == 1)
|
|
|
|
|
//{
|
|
|
|
|
//return SCANNER_ERR_DEVICE_COUNT_MODE;
|
|
|
|
|
//}
|
2022-11-24 08:57:31 +00:00
|
|
|
|
return ret;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
2022-12-28 01:56:54 +00:00
|
|
|
|
int hg_scanner_239::set_speed_mode(int data)
|
|
|
|
|
{
|
|
|
|
|
return write_register(setting3399::SR_SET_SPEEDMODE, data);
|
|
|
|
|
}
|
2022-12-29 10:05:59 +00:00
|
|
|
|
int hg_scanner_239::get_speed_mode(int& data)
|
|
|
|
|
{
|
|
|
|
|
return read_register(setting3399::SR_GET_SPEEDMODE, &data);
|
|
|
|
|
}
|
2022-12-28 01:56:54 +00:00
|
|
|
|
int hg_scanner_239::set_dpi_color_check_val(void)
|
|
|
|
|
{
|
|
|
|
|
setting3399::Scanner_Reg_Defs ratio = setting3399::SR_SET_H_200_RATIO;
|
|
|
|
|
if (resolution_ <= 200)
|
|
|
|
|
ratio = setting3399::SR_SET_H_200_RATIO;
|
|
|
|
|
else if (resolution_ > 200 && resolution_ <= 300)
|
|
|
|
|
ratio = setting3399::SR_SET_H_300_RATIO;
|
|
|
|
|
else if (resolution_ > 300 && resolution_ <= 600)
|
|
|
|
|
ratio = setting3399::SR_SET_H_600_RATIO;
|
|
|
|
|
|
|
|
|
|
return write_register(ratio, *(int*)&save_dpi_color_check_val);
|
|
|
|
|
}
|
|
|
|
|
int hg_scanner_239::get_dpi_color_check_val(int &data)
|
|
|
|
|
{
|
|
|
|
|
setting3399::Scanner_Reg_Defs ratio = setting3399::SR_SET_H_200_RATIO;
|
|
|
|
|
if (resolution_ <= 200)
|
|
|
|
|
ratio = setting3399::SR_GET_H_200_RATIO;
|
|
|
|
|
else if (resolution_ > 200 && resolution_ <= 300)
|
|
|
|
|
ratio = setting3399::SR_GET_H_300_RATIO;
|
|
|
|
|
else if (resolution_ > 300 && resolution_ <= 600)
|
|
|
|
|
ratio = setting3399::SR_GET_H_600_RATIO;
|
|
|
|
|
int ret = read_register(ratio, &data);
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
2022-12-30 09:14:49 +00:00
|
|
|
|
int hg_scanner_239::set_auto_flat(void)
|
|
|
|
|
{
|
|
|
|
|
int color = 0,
|
|
|
|
|
ret = SCANNER_ERR_OK;
|
|
|
|
|
auto fw = get_firmware_version();
|
|
|
|
|
if ((fw[5] == 'A' && atoi(fw.substr(6, 4).c_str()) <= 9999))
|
|
|
|
|
{
|
|
|
|
|
color = 0 == 1 ? 1 : 0; //暂时没有用。
|
|
|
|
|
}
|
|
|
|
|
if (!wait_usb_.is_waiting())
|
|
|
|
|
{
|
|
|
|
|
return SCANNER_ERR_DEVICE_BUSY;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ret = write_register(setting3399::SC_AUTOCORRECT, color);
|
|
|
|
|
if (ret != SCANNER_ERR_OK)
|
|
|
|
|
{
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
//status_ = SCANNER_ERR_DEVICE_BUSY;
|
|
|
|
|
wait_usb_.notify();
|
|
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(300));
|
|
|
|
|
ret = try_third_app_after_start(ret);
|
|
|
|
|
}
|
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_WARNING, "set_auto_flat ret: %s\n", hg_scanner_err_name(ret));
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
2022-11-24 08:57:31 +00:00
|
|
|
|
int hg_scanner_239::get_status(void)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
|
|
|
|
int val = 0,
|
2022-10-18 08:23:22 +00:00
|
|
|
|
ret = read_register(setting3399::SR_STATUS, &val);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
if (ret)
|
|
|
|
|
{
|
2022-05-30 03:42:16 +00:00
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "get status error: %s\n", hg_scanner_err_name(ret));
|
2022-05-03 03:56:07 +00:00
|
|
|
|
status_ = ret;
|
|
|
|
|
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
return val;
|
|
|
|
|
}
|
|
|
|
|
bool hg_scanner_239::is_dev_image_process_done(void)
|
|
|
|
|
{
|
|
|
|
|
int val = 0,
|
2022-10-18 08:23:22 +00:00
|
|
|
|
ret = read_register(setting3399::SR_GET_IMAGEPROCESSDONE, &val);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
if (ret)
|
|
|
|
|
{
|
2022-05-30 03:42:16 +00:00
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "is_dev_image_process_done() error: %s\n", hg_scanner_err_name(ret));
|
2022-05-03 03:56:07 +00:00
|
|
|
|
status_ = ret;
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
return val;
|
|
|
|
|
}
|
|
|
|
|
bool hg_scanner_239::is_dev_image_keep_last_paper(void)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
int val = 0,
|
2022-10-18 08:23:22 +00:00
|
|
|
|
ret = read_register(setting3399::SR_GET_KEEP_LAST_PAPER, &val);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
if (ret)
|
|
|
|
|
{
|
2022-05-30 03:42:16 +00:00
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "is_dev_image_keep_last_paper() error: %s\n", hg_scanner_err_name(ret));
|
2022-05-03 03:56:07 +00:00
|
|
|
|
status_ = ret;
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
return val;
|
|
|
|
|
}
|
2022-11-24 08:57:31 +00:00
|
|
|
|
int hg_scanner_239::get_image_count(void)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
|
|
|
|
int val = 0,
|
2022-10-18 08:23:22 +00:00
|
|
|
|
ret = read_register(setting3399::SR_IM_COUNT, &val);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
2022-05-30 03:42:16 +00:00
|
|
|
|
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "get_image_count() = %d, error: %s\n", val, hg_scanner_err_name(ret));
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
2022-05-17 07:04:55 +00:00
|
|
|
|
if (ret == SCANNER_ERR_OK)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
return val;
|
|
|
|
|
else
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
2022-11-24 08:57:31 +00:00
|
|
|
|
int hg_scanner_239::get_front_data_size(void)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
|
|
|
|
int val = 0,
|
2022-10-18 08:23:22 +00:00
|
|
|
|
ret = read_register(setting3399::SR_IM_FRONT_SIZE, &val);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
2022-05-17 07:04:55 +00:00
|
|
|
|
if (ret == SCANNER_ERR_OK)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
return val;
|
|
|
|
|
else
|
|
|
|
|
{
|
2022-05-30 03:42:16 +00:00
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "get_front_data_size = %s\n", hg_scanner_err_name(ret));
|
2022-05-03 03:56:07 +00:00
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
void hg_scanner_239::init_version(void)
|
|
|
|
|
{
|
|
|
|
|
std::string fv(get_firmware_version()),
|
|
|
|
|
sn(get_serial_num());
|
2022-12-06 09:47:27 +00:00
|
|
|
|
string dev = fv.substr(0, 2);
|
|
|
|
|
string ver = fv.substr(2, 3);
|
|
|
|
|
string date = fv.substr(5, 5);
|
|
|
|
|
string devType;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
2022-12-06 09:47:27 +00:00
|
|
|
|
if ((dev == "G1" || dev == "G2") && ver == "393")
|
|
|
|
|
{
|
|
|
|
|
if (date >= "A1220" && date <= "A1230")
|
|
|
|
|
{
|
|
|
|
|
if (date >= "A1224")
|
|
|
|
|
{
|
|
|
|
|
is_kernelsnap_devsislock = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (date >= "B0326" && date <= "B0334")
|
|
|
|
|
{
|
|
|
|
|
if (date >= "B0333")
|
|
|
|
|
{
|
|
|
|
|
is_kernelsnap_devsislock = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (date >= "B0429")
|
|
|
|
|
{
|
|
|
|
|
if (date >= "B1031" || date == "B0500")
|
|
|
|
|
{
|
|
|
|
|
is_kernelsnap_devsislock = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (dev == "G4" && ver == "393")
|
|
|
|
|
{
|
|
|
|
|
if (date >= "B1108")
|
|
|
|
|
{
|
|
|
|
|
is_kernelsnap_devsislock = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-12-06 09:57:00 +00:00
|
|
|
|
|
|
|
|
|
if (!is_kernelsnap_devsislock)
|
|
|
|
|
{
|
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "devs lock:%s \n", hg_scanner_err_name(SCANNER_ERR_DEVICE_NOT_SUPPORT));
|
|
|
|
|
}
|
|
|
|
|
|
2022-10-24 08:57:44 +00:00
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "Firmware version: %s\n", fv.c_str());
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
2022-11-24 16:05:52 +00:00
|
|
|
|
if (fv.length() >= 10 && (fv[5] > 'A' && atoi(fv.substr(6, 4).c_str()) >= 1209))
|
2022-05-03 03:56:07 +00:00
|
|
|
|
is_kernelsnap_211209_ = atoi(get_fpga().c_str()) >= 35211210;
|
|
|
|
|
else
|
|
|
|
|
is_kernelsnap_211209_ = false;
|
2022-11-04 06:32:17 +00:00
|
|
|
|
|
2022-11-24 16:54:43 +00:00
|
|
|
|
if (fv.length() >= 10 && (fv[5] > 'A' && atoi(fv.substr(6, 4).c_str()) >= 830))
|
2022-11-04 06:32:17 +00:00
|
|
|
|
is_kernelsnap_220830_ = true;
|
|
|
|
|
else
|
2022-10-28 10:42:22 +00:00
|
|
|
|
is_kernelsnap_220830_ = false;
|
2022-11-23 07:39:13 +00:00
|
|
|
|
|
2022-11-24 16:54:43 +00:00
|
|
|
|
if (fv.length() >= 10 && (fv[5] > 'A' && atoi(fv.substr(6, 4).c_str()) >= 1027))
|
2022-11-23 07:39:13 +00:00
|
|
|
|
is_kernelsnap_221027_ = true;
|
|
|
|
|
else
|
|
|
|
|
is_kernelsnap_221027_ = false;
|
2022-11-26 06:55:03 +00:00
|
|
|
|
|
2022-11-26 07:05:49 +00:00
|
|
|
|
if (fv.length() >= 10 && (fv[5] > 'A' && atoi(fv.substr(6, 4).c_str()) >= 430))
|
2022-11-26 06:55:03 +00:00
|
|
|
|
is_kernelsnap_220430_ = true;
|
|
|
|
|
else
|
|
|
|
|
is_kernelsnap_220430_ = false;
|
2022-11-02 10:06:49 +00:00
|
|
|
|
}
|
2022-11-24 08:57:31 +00:00
|
|
|
|
int hg_scanner_239::writedown_device_configuration(bool type, setting_hardware::HGSCANCONF_3399* dev_conf)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-05-17 07:04:55 +00:00
|
|
|
|
int ret = SCANNER_ERR_OK;
|
2022-11-19 10:16:43 +00:00
|
|
|
|
if (!type)
|
|
|
|
|
return ret;
|
2022-07-25 02:38:20 +00:00
|
|
|
|
if (!dev_conf)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
dev_conf = &dev_conf_;
|
2022-11-19 10:16:43 +00:00
|
|
|
|
|
|
|
|
|
if (is_multiout)
|
2022-10-11 08:22:32 +00:00
|
|
|
|
{
|
2022-11-22 07:31:21 +00:00
|
|
|
|
dev_conf->params_3399.color = image_prc_param_.bits.multi_out == MULTI_GRAY_AND_BW ? 0 : 1;
|
2022-10-11 08:22:32 +00:00
|
|
|
|
}
|
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)
|
2022-10-28 03:01:01 +00:00
|
|
|
|
{
|
2022-11-19 10:16:43 +00:00
|
|
|
|
dev_conf->params_3399.color = 1;
|
2022-10-28 03:01:01 +00:00
|
|
|
|
}
|
2022-11-19 10:16:43 +00:00
|
|
|
|
|
2022-10-11 08:22:32 +00:00
|
|
|
|
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
|
|
|
|
|
)
|
|
|
|
|
{
|
2022-10-18 08:23:22 +00:00
|
|
|
|
dev_conf->params_3399.enable_sizecheck = false;
|
2022-10-11 08:22:32 +00:00
|
|
|
|
}
|
2022-10-18 08:23:22 +00:00
|
|
|
|
ret = write_register(setting3399::SR_CONFIG_SCAN_PARAM, dev_conf->value);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
2022-05-30 03:42:16 +00:00
|
|
|
|
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "Writedown scanner configuration(0x%x) = %s\n", dev_conf->value, hg_scanner_err_name(ret));
|
2022-05-03 03:56:07 +00:00
|
|
|
|
return ret;
|
|
|
|
|
}
|
2022-11-24 08:57:31 +00:00
|
|
|
|
int hg_scanner_239::writedown_image_configuration(void)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-10-18 08:23:22 +00:00
|
|
|
|
int ret = write_register(setting3399::SR_CONFIF_IMGPROCPARAM, sizeof(SCANCONF));
|
2022-05-17 07:04:55 +00:00
|
|
|
|
if (ret != SCANNER_ERR_OK)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
|
|
SCANCONF ic;
|
2022-08-11 09:19:24 +00:00
|
|
|
|
int len = sizeof(ic);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
bzero(&ic, len);
|
2022-11-23 11:00:17 +00:00
|
|
|
|
if (image_prc_param_.bits.text_direction != TEXT_DIRECTION_AUTO)
|
|
|
|
|
ic.imageRotateDegree = (float)image_prc_param_.bits.text_direction;
|
|
|
|
|
else
|
|
|
|
|
ic.imageRotateDegree = 0;
|
|
|
|
|
|
|
|
|
|
ic.imageRotateDegree *= 90.0f;
|
2022-11-19 10:16:43 +00:00
|
|
|
|
ic.en_sizecheck = dev_conf_.params_3399.enable_sizecheck;
|
|
|
|
|
ic.hardwarecaps.en_skrewdetect = dev_conf_.params_3399.screw_detect_enable;
|
|
|
|
|
ic.hardwarecaps.en_doublefeed = dev_conf_.params_3399.ultrasonic_enable;
|
|
|
|
|
ic.hardwarecaps.en_stapledetect = dev_conf_.params_3399.staple_enbale;
|
|
|
|
|
ic.hardwarecaps.skrewdetectlevel = dev_conf_.params_3399.screw_detect_level;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
if (test_1_paper_)
|
|
|
|
|
{
|
2022-05-30 03:04:26 +00:00
|
|
|
|
LOG_INFO(LOG_LEVEL_DEBUG_INFO, "scanning mode: testing ONE paper ...\n");
|
2022-05-03 03:56:07 +00:00
|
|
|
|
ic.scannum = ic.is_duplex ? 2 : 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2022-11-26 03:33:49 +00:00
|
|
|
|
if (scan_count_ == -1 || is_auto_paper_scan)
|
2022-08-22 06:32:02 +00:00
|
|
|
|
ic.scannum = -1;
|
|
|
|
|
else
|
|
|
|
|
ic.scannum = (ic.is_duplex ? scan_count_ * 2 : scan_count_);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
2022-11-19 10:16:43 +00:00
|
|
|
|
ic.contrast = (contrast_ - 4) * 333.0;
|
|
|
|
|
ic.brightness = (bright_ - 128) * (2000.0 / 254.0);
|
|
|
|
|
image_configuration(ic);
|
|
|
|
|
|
2022-11-19 03:46:01 +00:00
|
|
|
|
{
|
2022-11-19 10:16:43 +00:00
|
|
|
|
std::lock_guard<std::mutex> lock(io_lock_);
|
2022-11-19 03:46:01 +00:00
|
|
|
|
|
2022-11-19 10:16:43 +00:00
|
|
|
|
ret = io_->write_bulk(&ic, &len);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
2022-11-19 10:16:43 +00:00
|
|
|
|
this_thread::sleep_for(chrono::milliseconds(500));
|
|
|
|
|
io_->set_timeout(2000);//必要延时
|
|
|
|
|
}
|
2022-05-03 03:56:07 +00:00
|
|
|
|
return ret;
|
|
|
|
|
}
|
2022-11-24 08:57:31 +00:00
|
|
|
|
int hg_scanner_239::pop_first_image(void)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-10-18 08:23:22 +00:00
|
|
|
|
int ret = write_register(setting3399::SR_IM_POP, 1);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
2022-05-30 03:42:16 +00:00
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "popup first image = %s\n", hg_scanner_err_name(ret));
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
2022-11-24 08:57:31 +00:00
|
|
|
|
int hg_scanner_239::read_one_image_from_usb(SANE_Image_Statu statu)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
|
|
|
|
int r = 0,
|
|
|
|
|
total = get_front_data_size(),
|
|
|
|
|
off = 0,
|
2022-05-17 07:04:55 +00:00
|
|
|
|
ret = SCANNER_ERR_OK;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
if (!waiting_for_memory_enough(total))
|
|
|
|
|
{
|
2022-05-17 07:04:55 +00:00
|
|
|
|
status_ = SCANNER_ERR_INSUFFICIENT_MEMORY;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
return status_;
|
|
|
|
|
}
|
|
|
|
|
if (total == -1)
|
|
|
|
|
ret = status_;
|
|
|
|
|
else
|
|
|
|
|
{
|
2022-06-01 03:04:10 +00:00
|
|
|
|
std::shared_ptr<tiny_buffer> buf(aquire_memory(total));
|
2022-05-23 06:10:18 +00:00
|
|
|
|
if (!buf.get())
|
|
|
|
|
return SCANNER_ERR_INSUFFICIENT_MEMORY;
|
|
|
|
|
|
2022-05-03 03:56:07 +00:00
|
|
|
|
// write reading command
|
2022-10-18 08:23:22 +00:00
|
|
|
|
ret = write_register(setting3399::SR_IM_TX, 1);
|
2022-07-23 05:42:34 +00:00
|
|
|
|
buf->set_image_statu(statu);
|
2022-05-17 07:04:55 +00:00
|
|
|
|
if (ret == SCANNER_ERR_OK)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
|
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(10));
|
|
|
|
|
r = total;
|
|
|
|
|
{
|
|
|
|
|
std::lock_guard<std::mutex> lock(io_lock_);
|
|
|
|
|
|
2022-06-06 04:03:24 +00:00
|
|
|
|
unsigned int size = r;
|
|
|
|
|
void* buff = buf->data(off, &size);
|
2022-06-07 09:06:09 +00:00
|
|
|
|
int block = 0;
|
2022-06-06 04:03:24 +00:00
|
|
|
|
if (!buff)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-06-06 04:03:24 +00:00
|
|
|
|
VLOG_MINI_3(LOG_LEVEL_FATAL, "memory(0x%08x + %u) fatal when read USB image %d !!!\n", off, r, usb_img_index_);
|
|
|
|
|
ret = SCANNER_ERR_INSUFFICIENT_MEMORY;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
r = size;
|
2022-06-07 09:06:09 +00:00
|
|
|
|
while (r > 0)
|
2022-06-06 04:03:24 +00:00
|
|
|
|
{
|
2022-06-07 09:06:09 +00:00
|
|
|
|
block = 512 * 1024;
|
|
|
|
|
|
|
|
|
|
if (r < block)
|
|
|
|
|
block = r;
|
|
|
|
|
|
|
|
|
|
unsigned int size = block;
|
|
|
|
|
void* buff = buf->data(off, &size);
|
|
|
|
|
if (!buf)
|
2022-06-06 04:03:24 +00:00
|
|
|
|
{
|
2022-06-07 09:06:09 +00:00
|
|
|
|
//VLOG_MINI_3(LOG_LEVEL_FATAL, "memory(0x%08x + %u) fatal when read USB image %d !!!\n", index, block, usb_img_index_);
|
2022-06-06 04:03:24 +00:00
|
|
|
|
ret = SCANNER_ERR_INSUFFICIENT_MEMORY;
|
|
|
|
|
break;
|
|
|
|
|
}
|
2022-06-07 09:06:09 +00:00
|
|
|
|
block = size;
|
|
|
|
|
ret = io_->read_bulk(buff, &block);
|
|
|
|
|
if (ret != SCANNER_ERR_OK)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
off += block;
|
|
|
|
|
r -= block;
|
2022-06-06 04:03:24 +00:00
|
|
|
|
}
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2022-05-17 07:04:55 +00:00
|
|
|
|
if (ret == SCANNER_ERR_OK)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-05-30 03:42:16 +00:00
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "Read image from USB = %s\n", hg_scanner_err_name(ret));
|
2022-05-03 03:56:07 +00:00
|
|
|
|
ret = save_usb_data(buf);
|
2022-05-17 07:04:55 +00:00
|
|
|
|
if (ret == SCANNER_ERR_OK)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
|
|
|
|
pop_first_image();
|
|
|
|
|
//if(image_prc_param_.bits.page == PAGE_SINGLE)
|
|
|
|
|
// pop_first_image();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2022-08-20 02:36:34 +00:00
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "Read image data from USB err: %s\n", hg_scanner_err_name(ret));
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
void hg_scanner_239::discard_all_images(void)
|
|
|
|
|
{
|
|
|
|
|
char buf[64];
|
2022-10-18 08:23:22 +00:00
|
|
|
|
setting3399::HGEIntInfo* info = (setting3399::HGEIntInfo*)buf;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
int size = sizeof(buf),
|
2022-11-15 01:47:06 +00:00
|
|
|
|
oto = 0,pre_img = 0,
|
2022-05-03 03:56:07 +00:00
|
|
|
|
pre_int = 0,
|
2022-05-17 07:04:55 +00:00
|
|
|
|
ret = SCANNER_ERR_OK;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
std::lock_guard<std::mutex> lock(io_lock_);
|
|
|
|
|
oto = io_->get_timeout();
|
|
|
|
|
io_->set_timeout(100);
|
|
|
|
|
ret = io_->read_interrupt(buf, &size);
|
|
|
|
|
}
|
2022-05-17 07:04:55 +00:00
|
|
|
|
while (ret == SCANNER_ERR_OK)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
|
|
|
|
pre_int++;
|
2022-10-18 08:23:22 +00:00
|
|
|
|
if (info->From == setting3399::IMG)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
|
|
|
|
while (get_image_count() > 0)
|
|
|
|
|
{
|
|
|
|
|
pop_first_image();
|
|
|
|
|
pre_img++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
size = sizeof(buf);
|
|
|
|
|
{
|
|
|
|
|
std::lock_guard<std::mutex> lock(io_lock_);
|
|
|
|
|
ret = io_->read_interrupt(buf, &size);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
{
|
|
|
|
|
std::lock_guard<std::mutex> lock(io_lock_);
|
|
|
|
|
io_->set_timeout(oto);
|
|
|
|
|
}
|
|
|
|
|
if (pre_int)
|
2022-05-30 03:04:26 +00:00
|
|
|
|
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "prev-connection has left %d interrupt packet(s) && %d image(s).\n", pre_int, pre_img);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
|
|
|
|
int hg_scanner_239::on_color_mode_changed(int& color_mode)
|
|
|
|
|
{
|
2022-11-19 10:16:43 +00:00
|
|
|
|
|
|
|
|
|
dev_conf_.params_3399.color = (color_mode == COLOR_MODE_BLACK_WHITE || color_mode == COLOR_MODE_256_GRAY) ? 0 : 1;
|
|
|
|
|
|
|
|
|
|
return SCANNER_ERR_OK;
|
|
|
|
|
|
|
|
|
|
/*int ret = SCANNER_ERR_OK;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
2022-10-18 08:23:22 +00:00
|
|
|
|
if ((((color_mode == COLOR_MODE_24_BITS || color_mode == COLOR_MODE_AUTO_MATCH) && !dev_conf_.params_3399.color) ||
|
|
|
|
|
((color_mode != COLOR_MODE_24_BITS && color_mode != COLOR_MODE_AUTO_MATCH) && dev_conf_.params_3399.color)) && color_mode != -1)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-10-18 08:23:22 +00:00
|
|
|
|
dev_conf_.params_3399.color ^= 1;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
ret = writedown_device_configuration();
|
|
|
|
|
if(ret)
|
2022-10-18 08:23:22 +00:00
|
|
|
|
dev_conf_.params_3399.color ^= 1;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
|
|
|
|
if(color_mode == COLOR_MODE_AUTO_MATCH)
|
|
|
|
|
{
|
2022-10-18 08:23:22 +00:00
|
|
|
|
dev_conf_.params_3399.color = 1;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
2022-11-19 10:16:43 +00:00
|
|
|
|
return ret;*/
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
|
|
|
|
int hg_scanner_239::on_paper_changed(int& paper)
|
|
|
|
|
{
|
|
|
|
|
bool exact = true;
|
2022-10-18 08:23:22 +00:00
|
|
|
|
int ind = hgpaper_to_devspaper(paper_map_3399, ARRAY_SIZE(paper_map_3399),paper, &exact, &paper_size_),
|
2022-05-17 07:04:55 +00:00
|
|
|
|
ret = exact ? SCANNER_ERR_OK : SCANNER_ERR_NOT_EXACT;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
2022-10-18 08:23:22 +00:00
|
|
|
|
if (dev_conf_.params_3399.paper != paper_map_3399[ind].dev_value)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-10-18 08:23:22 +00:00
|
|
|
|
int old = dev_conf_.params_3399.paper;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
2022-10-18 08:23:22 +00:00
|
|
|
|
dev_conf_.params_3399.paper = paper_map_3399[ind].dev_value;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
ret = writedown_device_configuration();
|
|
|
|
|
if (ret)
|
|
|
|
|
{
|
2022-10-18 08:23:22 +00:00
|
|
|
|
dev_conf_.params_3399.paper = old;
|
|
|
|
|
for (int i = 0; i < ARRAY_SIZE(paper_map_3399); ++i)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-10-18 08:23:22 +00:00
|
|
|
|
if (paper_map_3399[i].dev_value == old)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-10-18 08:23:22 +00:00
|
|
|
|
paper = paper_map_3399[i].paper;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (!exact)
|
2022-05-17 07:04:55 +00:00
|
|
|
|
ret = SCANNER_ERR_NOT_EXACT;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
int hg_scanner_239::on_paper_check_changed(bool& check)
|
|
|
|
|
{
|
2022-05-17 07:04:55 +00:00
|
|
|
|
int ret = SCANNER_ERR_OK;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
2022-10-18 08:23:22 +00:00
|
|
|
|
if (dev_conf_.params_3399.enable_sizecheck ^ check)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-10-18 08:23:22 +00:00
|
|
|
|
dev_conf_.params_3399.enable_sizecheck = check;
|
|
|
|
|
size_check = check;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
ret = writedown_device_configuration();
|
2022-06-08 10:33:49 +00:00
|
|
|
|
|
2022-05-03 03:56:07 +00:00
|
|
|
|
if (ret)
|
|
|
|
|
{
|
2022-10-18 08:23:22 +00:00
|
|
|
|
dev_conf_.params_3399.enable_sizecheck = !check;
|
|
|
|
|
check = dev_conf_.params_3399.enable_sizecheck;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
int hg_scanner_239::on_resolution_changed(int& dpi)
|
|
|
|
|
{
|
2022-10-31 06:37:44 +00:00
|
|
|
|
dev_conf_.params_3399.dpi = 1; //dpi 华凌cis和敦南cis 默认发1无需改变
|
|
|
|
|
int ret = writedown_device_configuration();
|
|
|
|
|
return ret;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
|
|
|
|
int hg_scanner_239::on_ultrasonic_check_changed(bool& check)
|
|
|
|
|
{
|
2022-05-17 07:04:55 +00:00
|
|
|
|
int ret = SCANNER_ERR_OK;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
2022-10-18 08:23:22 +00:00
|
|
|
|
if (dev_conf_.params_3399.ultrasonic_enable ^ check)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-10-18 08:23:22 +00:00
|
|
|
|
dev_conf_.params_3399.ultrasonic_enable = check;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
ret = writedown_device_configuration();
|
|
|
|
|
if (ret)
|
|
|
|
|
{
|
2022-10-18 08:23:22 +00:00
|
|
|
|
dev_conf_.params_3399.ultrasonic_enable = !check;
|
|
|
|
|
check = dev_conf_.params_3399.ultrasonic_enable;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
int hg_scanner_239::on_staple_check_changed(bool& check)
|
|
|
|
|
{
|
2022-05-17 07:04:55 +00:00
|
|
|
|
int ret = SCANNER_ERR_OK;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
2022-10-18 08:23:22 +00:00
|
|
|
|
if (dev_conf_.params_3399.staple_enbale ^ check)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-10-18 08:23:22 +00:00
|
|
|
|
dev_conf_.params_3399.staple_enbale = check;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
ret = writedown_device_configuration();
|
|
|
|
|
if (ret)
|
|
|
|
|
{
|
2022-10-18 08:23:22 +00:00
|
|
|
|
dev_conf_.params_3399.staple_enbale = !check;
|
|
|
|
|
check = dev_conf_.params_3399.staple_enbale;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
int hg_scanner_239::on_skew_check_changed(bool& check)
|
|
|
|
|
{
|
2022-05-17 07:04:55 +00:00
|
|
|
|
int ret = SCANNER_ERR_OK;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
2022-10-18 08:23:22 +00:00
|
|
|
|
if (dev_conf_.params_3399.screw_detect_enable ^ check)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-10-18 08:23:22 +00:00
|
|
|
|
dev_conf_.params_3399.screw_detect_enable = check;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
ret = writedown_device_configuration();
|
|
|
|
|
if (ret)
|
|
|
|
|
{
|
2022-10-18 08:23:22 +00:00
|
|
|
|
dev_conf_.params_3399.screw_detect_enable = !check;
|
|
|
|
|
check = dev_conf_.params_3399.screw_detect_enable;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
int hg_scanner_239::on_skew_check_level_changed(int& check)
|
|
|
|
|
{
|
2022-05-17 07:04:55 +00:00
|
|
|
|
int ret = SCANNER_ERR_OK,
|
2022-05-03 03:56:07 +00:00
|
|
|
|
val = check,
|
2022-10-18 08:23:22 +00:00
|
|
|
|
old = dev_conf_.params_3399.screw_detect_level;
|
|
|
|
|
setting_hardware::HGSCANCONF_3399 cf;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
2022-10-18 08:23:22 +00:00
|
|
|
|
cf.params_3399.screw_detect_level = -1;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
if (val < 0)
|
|
|
|
|
{
|
|
|
|
|
val = 0;
|
2022-05-17 07:04:55 +00:00
|
|
|
|
ret = SCANNER_ERR_NOT_EXACT;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
2022-10-18 08:23:22 +00:00
|
|
|
|
else if (val > cf.params_3399.screw_detect_level)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-10-18 08:23:22 +00:00
|
|
|
|
val = cf.params_3399.screw_detect_level;
|
2022-05-17 07:04:55 +00:00
|
|
|
|
ret = SCANNER_ERR_NOT_EXACT;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
2022-10-18 08:23:22 +00:00
|
|
|
|
if (val != dev_conf_.params_3399.screw_detect_level)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-10-18 08:23:22 +00:00
|
|
|
|
dev_conf_.params_3399.screw_detect_level = val;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
ret = writedown_device_configuration();
|
|
|
|
|
if (ret)
|
2022-10-18 08:23:22 +00:00
|
|
|
|
check = dev_conf_.params_3399.screw_detect_level = old;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
2022-05-17 07:04:55 +00:00
|
|
|
|
if (ret == SCANNER_ERR_OK && val != check)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
|
|
|
|
check = val;
|
2022-05-17 07:04:55 +00:00
|
|
|
|
ret = SCANNER_ERR_NOT_EXACT;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
2022-07-23 11:08:18 +00:00
|
|
|
|
int hg_scanner_239::on_get_feedmode(int &feedmode)//获取分纸强度
|
2022-07-23 10:01:44 +00:00
|
|
|
|
{
|
|
|
|
|
int ret = SCANNER_ERR_OK,
|
|
|
|
|
val = 0;
|
|
|
|
|
|
2022-10-18 08:23:22 +00:00
|
|
|
|
ret = read_register(setting3399::SR_GET_FEEDMODE,&feedmode);
|
2022-07-25 10:19:40 +00:00
|
|
|
|
|
|
|
|
|
if (ret == SCANNER_ERR_OK)
|
|
|
|
|
{
|
|
|
|
|
save_feedmode_type_ = true;
|
|
|
|
|
}
|
2022-07-23 10:01:44 +00:00
|
|
|
|
return ret;
|
|
|
|
|
}
|
2022-07-23 11:08:18 +00:00
|
|
|
|
int hg_scanner_239::on_set_feedmode(int feedmode)//设置分纸强度
|
2022-07-23 10:01:44 +00:00
|
|
|
|
{
|
|
|
|
|
int ret = SCANNER_ERR_OK,
|
|
|
|
|
val = 0;
|
|
|
|
|
|
2022-10-18 08:23:22 +00:00
|
|
|
|
ret = write_register(setting3399::SR_SET_FEEDMODE,feedmode);
|
2022-07-23 10:01:44 +00:00
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
2022-07-30 03:19:20 +00:00
|
|
|
|
int hg_scanner_239::on_pic_type(bool& pic)
|
|
|
|
|
{
|
2022-10-18 08:23:22 +00:00
|
|
|
|
dev_conf_.params_3399.is_textcorrect = pic;
|
2022-07-30 03:19:20 +00:00
|
|
|
|
|
|
|
|
|
int ret = writedown_device_configuration();
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
2022-08-09 07:59:01 +00:00
|
|
|
|
int hg_scanner_239::on_pick_paper(bool autostrength)
|
|
|
|
|
{
|
|
|
|
|
int val = 0,
|
2022-10-18 08:23:22 +00:00
|
|
|
|
ret = write_register(setting3399::SR_SET_AUTOMATICCONTROLFEEDMODE_ENABLE, autostrength);
|
2022-08-09 07:59:01 +00:00
|
|
|
|
if (ret != SCANNER_ERR_OK)
|
|
|
|
|
return ret;
|
|
|
|
|
|
2022-10-18 08:23:22 +00:00
|
|
|
|
ret = read_register(setting3399::SR_GET_AUTOMATICCONTROLFEEDMODE_ENABLE,&val);
|
2022-08-09 07:59:01 +00:00
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
int hg_scanner_239::on_pick_paper_threshold(double threshold)
|
|
|
|
|
{
|
|
|
|
|
threshold *= 10;
|
|
|
|
|
int val = 0,
|
2022-10-18 08:23:22 +00:00
|
|
|
|
ret = write_register(setting3399::SR_SET_AUTOMATICCONTROLFEEDMODE_THRESHOLD, threshold);
|
2022-08-09 07:59:01 +00:00
|
|
|
|
if (ret != SCANNER_ERR_OK)
|
|
|
|
|
return ret;
|
|
|
|
|
|
2022-10-18 08:23:22 +00:00
|
|
|
|
ret = read_register(setting3399::SR_GET_AUTOMATICCONTROLFEEDMODE_THRESHOLD,&val);
|
2022-08-09 07:59:01 +00:00
|
|
|
|
return ret;
|
|
|
|
|
}
|
2022-08-11 09:19:24 +00:00
|
|
|
|
int hg_scanner_239::on_is_auto_paper(bool isautopaper)
|
|
|
|
|
{
|
2022-10-28 10:42:22 +00:00
|
|
|
|
int val = 0,
|
|
|
|
|
ret = SCANNER_ERR_OK;
|
2022-11-26 09:48:10 +00:00
|
|
|
|
if (is_kernelsnap_220430_ || !isautopaper)
|
2022-10-28 10:42:22 +00:00
|
|
|
|
{
|
2022-11-26 09:48:10 +00:00
|
|
|
|
|
2022-10-28 10:42:22 +00:00
|
|
|
|
dev_conf_.params_3399.is_autopaper = isautopaper;
|
|
|
|
|
ret = writedown_device_configuration();
|
|
|
|
|
|
|
|
|
|
if (isautopaper)
|
|
|
|
|
notify_ui_working_status("\345\276\205\347\272\270\346\211\253\346\217\217\347\212\266\346\200\201\344\270\255...", SANE_EVENT_WORKING, status_);
|
|
|
|
|
}
|
2022-08-11 09:19:24 +00:00
|
|
|
|
return ret;
|
|
|
|
|
}
|
2022-12-28 01:56:54 +00:00
|
|
|
|
int hg_scanner_239::on_cis_get_image(bool isautopaper)
|
|
|
|
|
{
|
|
|
|
|
is_cis_image = isautopaper;
|
|
|
|
|
dev_conf_.params_3399.pc_correct = isautopaper;
|
|
|
|
|
return writedown_device_configuration();
|
|
|
|
|
}
|
2022-05-03 03:56:07 +00:00
|
|
|
|
void hg_scanner_239::on_device_reconnected(void)
|
|
|
|
|
{
|
|
|
|
|
int ret = writedown_device_configuration();
|
|
|
|
|
init_version();
|
|
|
|
|
|
2022-05-17 07:04:55 +00:00
|
|
|
|
rewrite_conf_ = ret != SCANNER_ERR_OK;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
if (reset_)
|
|
|
|
|
{
|
|
|
|
|
reset_ = false;
|
|
|
|
|
start();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
int hg_scanner_239::on_scanner_closing(bool force)
|
|
|
|
|
{
|
2022-05-17 07:04:55 +00:00
|
|
|
|
return SCANNER_ERR_OK;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
|
|
|
|
void hg_scanner_239::thread_handle_usb_read(void)
|
|
|
|
|
{
|
2022-12-30 09:14:49 +00:00
|
|
|
|
char buf[1024];
|
2022-10-18 08:23:22 +00:00
|
|
|
|
setting3399::HGEIntInfo* info = (setting3399::HGEIntInfo*)buf;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
int size = sizeof(buf),
|
2022-05-17 07:04:55 +00:00
|
|
|
|
ret = SCANNER_ERR_OK,
|
2022-05-03 03:56:07 +00:00
|
|
|
|
to_cnt = 0,
|
|
|
|
|
count = 0;
|
2022-08-11 09:19:24 +00:00
|
|
|
|
int auoto_paper_indx = 0;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
2022-06-01 09:16:09 +00:00
|
|
|
|
//status_ = SCANNER_ERR_DEVICE_BUSY;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
while (run_ )//&& !user_cancel_
|
|
|
|
|
{
|
|
|
|
|
size = sizeof(buf);
|
|
|
|
|
{
|
|
|
|
|
std::lock_guard<std::mutex> lock(io_lock_);
|
|
|
|
|
|
|
|
|
|
ret = io_->read_interrupt(buf, &size);
|
2022-08-26 07:44:22 +00:00
|
|
|
|
io_->set_timeout(1000);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
2022-05-17 07:04:55 +00:00
|
|
|
|
if (ret == SCANNER_ERR_TIMEOUT)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-08-11 09:19:24 +00:00
|
|
|
|
if (img_conf_.resolution_dst == 600.0 && ++to_cnt > 50 && !is_auto_paper_scan)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
|
|
|
|
status_ = ret;
|
2022-08-01 03:29:36 +00:00
|
|
|
|
notify_ui_working_status("\351\200\232\344\277\241\350\266\205\346\227\266", SANE_EVENT_ERROR, ret); // 通信超时
|
2022-06-13 09:31:03 +00:00
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "600dpi '%s'\n", hg_scanner_err_name(status_));
|
|
|
|
|
break;
|
|
|
|
|
}
|
2022-08-11 09:19:24 +00:00
|
|
|
|
else if (img_conf_.resolution_dst != 600.0 &&++to_cnt > 20 && !is_auto_paper_scan)
|
2022-06-13 09:31:03 +00:00
|
|
|
|
{
|
|
|
|
|
status_ = ret;
|
2022-08-01 03:29:36 +00:00
|
|
|
|
notify_ui_working_status("\351\200\232\344\277\241\350\266\205\346\227\266", SANE_EVENT_ERROR, ret); // 通信超时
|
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "\345\205\266\344\273\226dpi '%s'\n", hg_scanner_err_name(status_));
|
2022-05-03 03:56:07 +00:00
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(500));
|
|
|
|
|
if ((get_status() & 0x03) == 0)
|
|
|
|
|
{
|
2022-05-17 07:04:55 +00:00
|
|
|
|
status_ = SCANNER_ERR_OK;
|
2022-07-25 06:25:08 +00:00
|
|
|
|
//break;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
2022-08-26 07:44:22 +00:00
|
|
|
|
if (user_cancel_ && is_auto_paper_scan)
|
|
|
|
|
{
|
|
|
|
|
size = sizeof(buf);
|
|
|
|
|
memset(buf, 0, size);
|
2022-10-18 08:23:22 +00:00
|
|
|
|
info->From = setting3399::STOPSCAN;
|
2022-08-26 10:26:43 +00:00
|
|
|
|
LOG_INFO(LOG_LEVEL_DEBUG_INFO, "User cancelled (checked when read INT timeout), we faked a 'STOP' messag to enter exiting process ...\n");
|
2022-08-26 07:44:22 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
continue;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
2022-05-17 07:04:55 +00:00
|
|
|
|
else if (ret != SCANNER_ERR_OK)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
|
|
|
|
status_ = ret;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
to_cnt = 0;
|
|
|
|
|
if (size == sizeof(buf))
|
|
|
|
|
{
|
|
|
|
|
status_ = settings::device_status_to_hg_err(info);
|
2022-05-30 03:42:16 +00:00
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "status from interrupt point is '%s'\n", hg_scanner_err_name(status_));
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
2022-12-30 09:14:49 +00:00
|
|
|
|
if (status_ != SCANNER_ERR_OK
|
|
|
|
|
&& status_ != SCANNER_ERR_TIMEOUT
|
|
|
|
|
&& status_ != SCANNER_ERR_DEVICE_STOPPED
|
|
|
|
|
&& status_ != SCANNER_ERR_DEVICE_AUTO_FAIL_OVER
|
|
|
|
|
&& status_ != SCANNER_ERR_DEVICE_AUTO_FAIL_INFO
|
|
|
|
|
)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-08-13 07:06:32 +00:00
|
|
|
|
if (!is_dev_image_process_done() || (double_paper_handle_ & DOUBLE_PAPER_SAVE_IMG))
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-07-23 05:42:34 +00:00
|
|
|
|
int st = status_, count = 0, statu = last_usb_image_statu(st);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
while (!is_dev_image_process_done())
|
|
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(30));
|
|
|
|
|
|
2022-08-13 07:06:32 +00:00
|
|
|
|
StopWatch delay;
|
2022-12-30 09:14:49 +00:00
|
|
|
|
if((double_paper_handle_ & DOUBLE_PAPER_SAVE_IMG) && st == SCANNER_ERR_DEVICE_DOUBLE_FEEDING)
|
2022-08-13 07:06:32 +00:00
|
|
|
|
{
|
|
|
|
|
int wait = 3000 + (img_conf_.resolution_dst / 200 * 10000);
|
|
|
|
|
while (get_image_count() == 0)
|
|
|
|
|
{
|
|
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(30));
|
|
|
|
|
if (delay.elapsed_ms() > wait)
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-23 05:42:34 +00:00
|
|
|
|
while ((count = get_image_count()) > 0)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-07-23 05:42:34 +00:00
|
|
|
|
int s = SANE_Image_Statu_OK;
|
|
|
|
|
if (count <= 2)
|
|
|
|
|
{
|
|
|
|
|
if (image_prc_param_.bits.page == PAGE_SINGLE)
|
|
|
|
|
s = count == 1 ? statu : s;
|
|
|
|
|
else
|
|
|
|
|
s = statu;
|
|
|
|
|
}
|
|
|
|
|
ret = read_one_image_from_usb((SANE_Image_Statu)s);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
count++;
|
2022-05-17 07:04:55 +00:00
|
|
|
|
if (ret != SCANNER_ERR_OK
|
|
|
|
|
&& ret != SCANNER_ERR_CREATE_FILE_FAILED
|
|
|
|
|
&& ret != SCANNER_ERR_WRITE_FILE_FAILED)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
status_ = st;
|
|
|
|
|
}
|
2022-08-11 09:19:24 +00:00
|
|
|
|
|
2022-08-02 08:32:46 +00:00
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_WARNING, "\346\211\253\346\217\217\345\244\261\350\264\245, read interrupt\350\277\224\345\233\236\347\212\266\346\200\201\344\270\272\357\274\232%s\n", hg_scanner_err_description(status_));
|
2022-05-03 03:56:07 +00:00
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
2022-10-18 08:23:22 +00:00
|
|
|
|
if (info->From == setting3399::IMG)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
|
|
|
|
int s = get_status();
|
|
|
|
|
// if (s > 0 && s < 4) // running ...
|
|
|
|
|
{
|
|
|
|
|
while (get_image_count() > 0)
|
|
|
|
|
{
|
|
|
|
|
count++;
|
|
|
|
|
ret = read_one_image_from_usb();
|
2022-08-11 09:19:24 +00:00
|
|
|
|
|
2022-05-17 07:04:55 +00:00
|
|
|
|
if (ret != SCANNER_ERR_OK
|
|
|
|
|
&& ret != SCANNER_ERR_CREATE_FILE_FAILED
|
|
|
|
|
&& ret != SCANNER_ERR_WRITE_FILE_FAILED)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//else
|
2022-05-30 03:04:26 +00:00
|
|
|
|
// VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "status(0x%x) is not accept in usb thread\n", status);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
2022-10-18 08:23:22 +00:00
|
|
|
|
else if (info->From == setting3399::STOPSCAN)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-05-30 03:04:26 +00:00
|
|
|
|
LOG_INFO(LOG_LEVEL_DEBUG_INFO, "received 'STOPSCAN' message in usb thread, check remaining image and finish scanning ...\n");
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
// fetch all buffered images and exit ...
|
2022-06-10 09:44:15 +00:00
|
|
|
|
//while(!is_dev_image_process_done())
|
2022-07-27 10:32:42 +00:00
|
|
|
|
if (img_conf_.resolution_dst > 200 && is_quality_ == IMG_QUALITY)
|
2022-08-13 08:46:28 +00:00
|
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(5000));
|
2022-07-27 10:32:42 +00:00
|
|
|
|
else
|
2022-08-26 07:44:22 +00:00
|
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(2000));
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
while (get_image_count() > 0)
|
|
|
|
|
{
|
|
|
|
|
ret = read_one_image_from_usb();
|
|
|
|
|
count++;
|
2022-05-17 07:04:55 +00:00
|
|
|
|
if (ret != SCANNER_ERR_OK
|
|
|
|
|
&& ret != SCANNER_ERR_CREATE_FILE_FAILED
|
|
|
|
|
&& ret != SCANNER_ERR_WRITE_FILE_FAILED)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
break;
|
|
|
|
|
}
|
2022-08-26 07:44:22 +00:00
|
|
|
|
if (user_cancel_)
|
|
|
|
|
{
|
2022-10-22 06:46:54 +00:00
|
|
|
|
if (status_) // thread_handle_image_process maybe call stop() when insufficient memory occurs .
|
|
|
|
|
ret = status_;
|
|
|
|
|
else
|
|
|
|
|
status_ = ret = SCANNER_ERR_USER_CANCELED;
|
2022-08-26 07:44:22 +00:00
|
|
|
|
//VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "用户取消操作 '%s'\n", hg_scanner_err_name(status_));
|
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "\347\224\250\346\210\267\345\217\226\346\266\210\346\223\215\344\275\234 '%s'\n", hg_scanner_err_name(status_));
|
|
|
|
|
auoto_paper_indx = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
2022-05-03 03:56:07 +00:00
|
|
|
|
if (count == 0)
|
|
|
|
|
{
|
|
|
|
|
std::lock_guard<std::mutex> lock(io_lock_);
|
|
|
|
|
|
2022-05-30 03:04:26 +00:00
|
|
|
|
LOG_INFO(LOG_LEVEL_DEBUG_INFO, "First message received from USB is 'STOPSCAN'\n");
|
2022-05-03 03:56:07 +00:00
|
|
|
|
// notify_ui_working_status(STATU_DESC_DEVICE_RESET);
|
|
|
|
|
// reset_ = true;
|
|
|
|
|
// ret = io_->reset();
|
2022-05-17 07:04:55 +00:00
|
|
|
|
// status_ = SCANNER_ERR_IO;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
2022-05-17 07:04:55 +00:00
|
|
|
|
else if (status_ == SCANNER_ERR_TIMEOUT || status_ == SCANNER_ERR_IO || status_ == SCANNER_ERR_DEVICE_STOPPED)
|
|
|
|
|
status_ = SCANNER_ERR_OK;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
int s = get_status();
|
2022-08-26 07:44:22 +00:00
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "status after received 'STOPSCAN': 0x%x\n", s);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
if (count || (s & 3) == 0)
|
|
|
|
|
{
|
2022-05-30 03:04:26 +00:00
|
|
|
|
LOG_INFO(LOG_LEVEL_DEBUG_INFO, "Really stopped ^_^\n");
|
2022-08-11 09:19:24 +00:00
|
|
|
|
|
2022-08-12 03:02:59 +00:00
|
|
|
|
//string str = "当前批次扫描完成(第"+to_string(++auoto_paper_indx)+"批)";
|
|
|
|
|
string str = "\345\275\223\345\211\215\346\211\271\346\254\241\346\211\253\346\217\217\345\256\214\346\210\220(\347\254\254"+to_string(++auoto_paper_indx)+"\346\211\271)";
|
2022-08-26 07:44:22 +00:00
|
|
|
|
if(is_auto_paper_scan)
|
2022-08-24 09:45:25 +00:00
|
|
|
|
notify_ui_working_status(str.c_str(), SANE_EVENT_STATUS, status_);
|
2022-08-11 09:19:24 +00:00
|
|
|
|
else
|
2022-08-24 09:27:45 +00:00
|
|
|
|
break;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2022-10-18 08:23:22 +00:00
|
|
|
|
else if (info->From == setting3399::V4L2)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-05-30 03:04:26 +00:00
|
|
|
|
VLOG_MINI_2(LOG_LEVEL_WARNING, "V4L2 message received, code = %d, index = %d\n", info->Code, info->Img_Index);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
// stop();
|
|
|
|
|
break;
|
|
|
|
|
}
|
2022-12-30 09:14:49 +00:00
|
|
|
|
else if (info->From == setting3399::AutoCorrect)
|
|
|
|
|
{
|
|
|
|
|
std::string devs_info;
|
|
|
|
|
int len = info->Img_Index;
|
|
|
|
|
devs_info.resize(len);
|
|
|
|
|
ret = io_->read_bulk(&info[0], &len);
|
|
|
|
|
if (ret == SCANNER_ERR_OK)
|
|
|
|
|
{
|
|
|
|
|
notify_ui_working_status(devs_info.c_str(), SANE_EVENT_STATUS, status_);
|
|
|
|
|
}
|
|
|
|
|
if (status_ == SCANNER_ERR_DEVICE_AUTO_FAIL_OVER)
|
|
|
|
|
break;
|
|
|
|
|
}
|
2022-05-03 03:56:07 +00:00
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// error handling ...
|
2022-05-30 03:42:16 +00:00
|
|
|
|
VLOG_MINI_4(LOG_LEVEL_DEBUG_INFO, "Read HGEIntInfo: From = %d, Code = %d, Img_Index = %d, status = %s\n", info->From, info->Code, info->Img_Index, hg_scanner_err_name(status_));
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
2022-05-30 03:04:26 +00:00
|
|
|
|
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "read %d bytes, sizeof(buf) = %d\n", size, sizeof(buf));
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
this_thread::sleep_for(chrono::milliseconds(10));
|
|
|
|
|
}
|
2022-12-05 07:33:56 +00:00
|
|
|
|
if (status_ == SCANNER_ERR_DEVICE_STOPPED && !user_cancel_)
|
2022-10-28 08:01:13 +00:00
|
|
|
|
{
|
2022-12-22 10:37:53 +00:00
|
|
|
|
SANE_Bool b = true;
|
|
|
|
|
ret = get_scanner_paperon(b);
|
|
|
|
|
if (ret != SCANNER_ERR_OK)
|
|
|
|
|
{
|
|
|
|
|
status_ = ret;
|
|
|
|
|
}
|
|
|
|
|
status_ = b ? SCANNER_ERR_OK : SCANNER_ERR_DEVICE_NO_PAPER;
|
2022-10-28 08:01:13 +00:00
|
|
|
|
}
|
2022-05-30 03:42:16 +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_name(status_));
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
2022-12-23 08:51:10 +00:00
|
|
|
|
|
2022-05-03 03:56:07 +00:00
|
|
|
|
int hg_scanner_239::start(void)
|
|
|
|
|
{
|
2022-05-20 09:11:50 +00:00
|
|
|
|
bool handled = false;
|
|
|
|
|
int ret = try_third_app_handle_start(handled),
|
2022-10-12 06:26:29 +00:00
|
|
|
|
val = 0;
|
2022-05-20 06:46:25 +00:00
|
|
|
|
// for third-sane-app invoking, added on 2022-05-19
|
2022-05-20 09:11:50 +00:00
|
|
|
|
if (handled)
|
|
|
|
|
return ret;
|
2022-05-20 06:46:25 +00:00
|
|
|
|
|
2022-12-13 10:13:46 +00:00
|
|
|
|
|
2022-05-03 03:56:07 +00:00
|
|
|
|
user_cancel_ = false;
|
2022-11-26 06:55:03 +00:00
|
|
|
|
ret = on_is_auto_paper(is_auto_paper_scan);
|
2022-10-12 06:26:29 +00:00
|
|
|
|
split3399_ = 0;
|
|
|
|
|
|
2022-05-03 03:56:07 +00:00
|
|
|
|
cb_mem_ = true;
|
2022-05-30 03:04:26 +00:00
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "scanner status: 0x%x\n", get_status());
|
2022-05-03 03:56:07 +00:00
|
|
|
|
notify_ui_working_status(STATU_DESC_PREPARE_START);
|
|
|
|
|
|
|
|
|
|
reset();
|
2022-11-24 08:57:31 +00:00
|
|
|
|
//ret = get_roller_num(val);
|
|
|
|
|
|
|
|
|
|
//211220固件版本不支持返回
|
2022-12-22 10:37:53 +00:00
|
|
|
|
ret = get_scan_is_sleep(val);
|
|
|
|
|
if (!val)
|
2022-08-13 02:15:40 +00:00
|
|
|
|
{
|
2022-11-24 16:54:43 +00:00
|
|
|
|
status_ = SCANNER_ERR_DEVICE_SLEEPING;
|
2022-08-26 07:44:22 +00:00
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_WARNING, "device start status is(%s)\n", STATU_DESC_SCANNER_ERR_DEVICE_SLEEPING);
|
2022-10-28 10:42:22 +00:00
|
|
|
|
if(is_kernelsnap_220830_)
|
2022-12-22 10:37:53 +00:00
|
|
|
|
ret = set_notify_sleep();
|
2022-08-13 02:15:40 +00:00
|
|
|
|
notify_ui_working_status(STATU_DESC_SCANNER_ERR_DEVICE_NOTIFY_SLEEP, SANE_EVENT_ERROR, status_);
|
|
|
|
|
return status_;
|
|
|
|
|
}
|
2022-12-22 10:37:53 +00:00
|
|
|
|
bool type = true;
|
|
|
|
|
ret = get_scan_mode(type);
|
|
|
|
|
if (!type)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-11-24 16:54:43 +00:00
|
|
|
|
status_ = SCANNER_ERR_DEVICE_COUNT_MODE;
|
|
|
|
|
return status_;
|
2022-11-24 08:57:31 +00:00
|
|
|
|
}
|
2022-12-05 07:33:56 +00:00
|
|
|
|
//else if ((get_scan_islock(val)) == SCANNER_ERR_DEVICE_ISLOCK)
|
|
|
|
|
//{
|
|
|
|
|
// status_ = SCANNER_ERR_DEVICE_ISLOCK;
|
|
|
|
|
// return status_;
|
|
|
|
|
//}
|
2022-08-26 07:44:22 +00:00
|
|
|
|
|
2022-05-03 03:56:07 +00:00
|
|
|
|
notify_ui_working_status(STATU_DESC_REWRITE_CONFIGURATION);
|
2022-10-11 08:22:32 +00:00
|
|
|
|
if(ret == SCANNER_ERR_OK)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-11-19 10:16:43 +00:00
|
|
|
|
ret = writedown_device_configuration(true);
|
2022-11-24 08:57:31 +00:00
|
|
|
|
}
|
2022-05-17 07:04:55 +00:00
|
|
|
|
if(ret == SCANNER_ERR_OK)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
|
|
|
|
ret = writedown_image_configuration();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ret)
|
|
|
|
|
{
|
2022-05-30 03:42:16 +00:00
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_WARNING, "Write down image process parameters fail is(%s), the result will be unpredictable.\n", hg_scanner_err_name(ret));
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
std::string info(STATU_DESC_REWRITE_CONFIGURATION);
|
|
|
|
|
|
2022-05-30 03:42:16 +00:00
|
|
|
|
info += std::string("\345\244\261\350\264\245\357\274\232") + hg_scanner_err_name(ret);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
notify_ui_working_status(info.c_str(), SANE_EVENT_ERROR, ret);
|
|
|
|
|
}
|
|
|
|
|
|
2022-05-17 07:04:55 +00:00
|
|
|
|
if (ret != SCANNER_ERR_OK)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-05-30 03:42:16 +00:00
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_WARNING, "start status01 is(%s), the result will be unpredictable.\n", hg_scanner_err_name(ret));
|
2022-05-03 03:56:07 +00:00
|
|
|
|
return ret;
|
|
|
|
|
}
|
2022-12-13 10:13:46 +00:00
|
|
|
|
if (is_checksum_strat_scan)
|
|
|
|
|
{
|
|
|
|
|
std::string str("C34E58CD5F3F2FF703E1AA24892FBD69");
|
|
|
|
|
set_scan_lock_check_val(str);
|
|
|
|
|
}
|
2022-10-18 08:23:22 +00:00
|
|
|
|
ret = write_command(setting3399::SC_START);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
io_->set_timeout(1000);
|
2022-05-17 07:04:55 +00:00
|
|
|
|
if (ret == SCANNER_ERR_OK)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
|
|
|
|
wait_usb_.notify();
|
|
|
|
|
this_thread::sleep_for(chrono::milliseconds(100));
|
2022-06-01 09:16:09 +00:00
|
|
|
|
ret = try_third_app_after_start(ret);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
status_ = ret;
|
2022-05-30 03:42:16 +00:00
|
|
|
|
VLOG_MINI_3(LOG_LEVEL_WARNING, "(%s)[Thread %s]Send start command = %s\n", hg_log::current_time().c_str(), hg_log::format_current_thread_id().c_str(), hg_scanner_err_name(ret));
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
2022-06-01 09:16:09 +00:00
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_WARNING, "start result: %s\n", hg_scanner_err_name(ret));
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
int hg_scanner_239::stop(void)
|
|
|
|
|
{
|
2022-08-25 05:08:54 +00:00
|
|
|
|
int ret = SCANNER_ERR_OK;
|
2022-08-26 07:44:22 +00:00
|
|
|
|
|
2022-05-03 03:56:07 +00:00
|
|
|
|
user_cancel_ = true;
|
2022-08-26 07:44:22 +00:00
|
|
|
|
|
2022-10-18 08:23:22 +00:00
|
|
|
|
ret = write_command(setting3399::SC_STOP);
|
2022-08-26 07:44:22 +00:00
|
|
|
|
io_->set_timeout(500);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
return status_;
|
|
|
|
|
}
|
|
|
|
|
int hg_scanner_239::reset(void)
|
|
|
|
|
{
|
2022-06-01 03:04:10 +00:00
|
|
|
|
final_imgs_.clear();
|
2022-05-03 03:56:07 +00:00
|
|
|
|
discard_all_images();
|
|
|
|
|
|
|
|
|
|
return status_;
|
|
|
|
|
}
|
|
|
|
|
int hg_scanner_239::device_io_control(unsigned long code, void* data, unsigned* len)
|
|
|
|
|
{
|
2022-05-17 07:04:55 +00:00
|
|
|
|
int ret = SCANNER_ERR_OUT_OF_RANGE;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
if (HG_CONTROL_CODE_OPTION_ENABLE == code)
|
|
|
|
|
{
|
|
|
|
|
OPTEN* opten = (OPTEN*)data;
|
|
|
|
|
|
2022-05-17 07:04:55 +00:00
|
|
|
|
ret = SCANNER_ERR_OK;
|
2022-11-10 02:02:52 +00:00
|
|
|
|
if (opten->name == SANE_STD_OPT_NAME_ANTI_SKEW && !opten->enabled) // for BUG-20 modified by Gongbing on 2022-03-12
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
|
|
|
|
bool enable = true;
|
2022-11-10 02:02:52 +00:00
|
|
|
|
setting_automatic_skew(&enable);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (IO_CTRL_CODE_TEST_SINGLE == code)
|
|
|
|
|
{
|
|
|
|
|
test_1_paper_ = true;
|
|
|
|
|
ret = start();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
ret = hg_scanner::device_io_control(code, data, len);
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
std::string hg_scanner_239::get_firmware_version(void)
|
|
|
|
|
{
|
2022-10-18 08:23:22 +00:00
|
|
|
|
return control_fetch(setting3399::SR_GET_FWVERSION, 0, 20);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
|
|
|
|
std::string hg_scanner_239::get_serial_num(void)
|
|
|
|
|
{
|
2022-12-13 10:13:46 +00:00
|
|
|
|
int len = 0;
|
|
|
|
|
read_register(setting3399::SR_GET_SERIAL_LEN, &len);///???
|
|
|
|
|
return control_fetch(setting3399::SR_GET_SERIALNUM, 0, len).substr(0,len);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
|
|
|
|
std::string hg_scanner_239::get_ip(void)
|
|
|
|
|
{
|
2022-10-18 08:23:22 +00:00
|
|
|
|
return control_fetch(setting3399::SR_GET_IPADDR, 0, 40);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
2022-12-29 10:05:59 +00:00
|
|
|
|
int hg_scanner_239::get_history_scan_count(int &val)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-11-11 09:59:08 +00:00
|
|
|
|
int ret = read_register(setting3399::SR_GET_SCANN_NUM, &val);
|
|
|
|
|
return ret;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
2022-12-22 10:37:53 +00:00
|
|
|
|
int hg_scanner_239::set_clear_roller_num(void)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
|
|
|
|
int val = 0,
|
2022-10-18 08:23:22 +00:00
|
|
|
|
ret = read_register(setting3399::SR_CLR_ROLLER_NUM, &val);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
int hg_scanner_239::set_leaflet_scan(void)
|
|
|
|
|
{
|
2022-05-17 07:04:55 +00:00
|
|
|
|
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
|
|
|
|
|
2022-05-03 03:56:07 +00:00
|
|
|
|
int hg_scanner_239::get_device_code(void)
|
|
|
|
|
{
|
2022-05-17 07:04:55 +00:00
|
|
|
|
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_239::get_sleep_time(int& data)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-12-22 10:37:53 +00:00
|
|
|
|
int val = 0;
|
|
|
|
|
int ret = read_register(setting3399::SR_GET_SLEEPTIME, &val);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
2022-05-17 07:04:55 +00:00
|
|
|
|
if (ret == SCANNER_ERR_OK)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-07-25 10:19:40 +00:00
|
|
|
|
save_sleeptime_type_ = true;
|
2022-12-22 10:37:53 +00:00
|
|
|
|
data = val;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
2022-12-22 10:37:53 +00:00
|
|
|
|
|
|
|
|
|
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "get_sleep_time = %d with %s\n", data,hg_scanner_err_name(ret));
|
2022-07-25 10:19:40 +00:00
|
|
|
|
return ret;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
|
|
|
|
int hg_scanner_239::set_sleep_time(int setsleepime)
|
|
|
|
|
{
|
2022-10-18 08:23:22 +00:00
|
|
|
|
int ret = write_register(setting3399::SR_SET_SLEEPTIME, setsleepime);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
2022-05-30 03:42:16 +00:00
|
|
|
|
VLOG_MINI_2(LOG_LEVEL_DEBUG_INFO, "set sleep time to %d = %s\n", setsleepime, hg_scanner_err_name(ret));
|
2022-05-03 08:44:13 +00:00
|
|
|
|
|
|
|
|
|
return ret;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
2022-12-22 10:37:53 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int hg_scanner_239::get_scanner_paperon(SANE_Bool& type)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-12-22 10:37:53 +00:00
|
|
|
|
int val = 0;
|
|
|
|
|
int ret = read_register(setting3399::SR_GET_PAPERON, &val); //0无纸 1有纸
|
|
|
|
|
if (ret == SCANNER_ERR_OK)
|
2022-05-03 03:56:07 +00:00
|
|
|
|
{
|
2022-12-22 10:37:53 +00:00
|
|
|
|
type = val == 0 ? false : true;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
2022-12-22 10:37:53 +00:00
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "get_scanner_paperon = %s\n", hg_scanner_err_name(ret));
|
|
|
|
|
|
2022-05-03 03:56:07 +00:00
|
|
|
|
return ret;
|
|
|
|
|
}
|
2022-11-11 09:59:08 +00:00
|
|
|
|
|
2022-12-22 10:37:53 +00:00
|
|
|
|
int hg_scanner_239::get_scan_is_sleep(SANE_Bool& type)
|
|
|
|
|
{
|
|
|
|
|
int ret = 0,val;
|
|
|
|
|
ret = read_register(setting3399::SR_GET_SLEEP_STAUTUS, &val); //0休眠 1唤醒状态
|
|
|
|
|
if (ret == SCANNER_ERR_OK)
|
|
|
|
|
{
|
|
|
|
|
type = val == 1 ? true : false;
|
|
|
|
|
}
|
|
|
|
|
return ret;
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
2022-12-22 10:37:53 +00:00
|
|
|
|
int hg_scanner_239::set_notify_sleep()
|
2022-07-23 10:01:44 +00:00
|
|
|
|
{
|
|
|
|
|
int val = 0,
|
2022-10-28 08:37:02 +00:00
|
|
|
|
ret = SCANNER_ERR_OK;
|
2022-10-28 10:42:22 +00:00
|
|
|
|
if (is_kernelsnap_220830_)
|
2022-10-28 08:37:02 +00:00
|
|
|
|
{
|
2022-10-18 08:23:22 +00:00
|
|
|
|
ret = write_register(setting3399::SR_NOTIFY_SLEEP, val);
|
2022-10-28 08:37:02 +00:00
|
|
|
|
}
|
2022-07-23 10:01:44 +00:00
|
|
|
|
return ret;
|
|
|
|
|
}
|
2022-11-26 06:55:03 +00:00
|
|
|
|
int hg_scanner_239::get_roller_num(int &num)
|
2022-07-23 10:01:44 +00:00
|
|
|
|
{
|
2022-11-11 03:40:05 +00:00
|
|
|
|
int ret = read_register(setting3399::SR_GET_ROLLER_NUM, &num);
|
|
|
|
|
return ret;
|
2022-07-23 10:01:44 +00:00
|
|
|
|
}
|
2022-07-26 07:14:29 +00:00
|
|
|
|
int hg_scanner_239::get_device_log(string &logpath)
|
2022-07-23 10:01:44 +00:00
|
|
|
|
{
|
2022-07-26 07:14:29 +00:00
|
|
|
|
string save_path = hg_log::temporary_path() + PATH_SEPARATOR + "device.log";
|
|
|
|
|
string device_log_path = "/var/log/syslog";
|
|
|
|
|
string str ;
|
|
|
|
|
|
|
|
|
|
int ret = SCANNER_ERR_OK;
|
|
|
|
|
int buffersize = 0;
|
|
|
|
|
int len = device_log_path.size();
|
|
|
|
|
|
|
|
|
|
io_->set_timeout(3000);
|
2022-10-18 08:23:22 +00:00
|
|
|
|
ret = write_register(setting3399::SR_SET_JSON_PATH, len);
|
2022-07-26 07:14:29 +00:00
|
|
|
|
if (ret != SCANNER_ERR_OK)
|
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
|
|
ret = io_->write_bulk(&device_log_path[0],&len);
|
|
|
|
|
if (ret != SCANNER_ERR_OK)
|
|
|
|
|
return ret;
|
|
|
|
|
|
2022-10-18 08:23:22 +00:00
|
|
|
|
ret = read_register(setting3399::SR_GET_JSON_SIZE,&buffersize);
|
2022-07-26 07:14:29 +00:00
|
|
|
|
if (ret != SCANNER_ERR_OK || buffersize <= 0)
|
|
|
|
|
return ret;
|
|
|
|
|
|
2022-10-18 08:23:22 +00:00
|
|
|
|
ret = write_register(setting3399::SR_GET_JSON,buffersize);
|
2022-07-26 07:14:29 +00:00
|
|
|
|
if (ret != SCANNER_ERR_OK || buffersize <= 0)
|
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
|
|
str.resize(buffersize);
|
|
|
|
|
ret = io_->read_bulk(&str[0],&buffersize);
|
|
|
|
|
if (ret != SCANNER_ERR_OK)
|
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
|
|
ofstream f;
|
|
|
|
|
f.open(save_path,ios::out | ios::app);
|
|
|
|
|
if (!f.is_open())
|
|
|
|
|
return SCANNER_ERR_CREATE_FILE_FAILED;
|
|
|
|
|
|
|
|
|
|
f << str << endl;
|
|
|
|
|
f.close();
|
|
|
|
|
logpath = save_path;
|
2022-07-26 07:34:13 +00:00
|
|
|
|
VLOG_MINI_3(LOG_LEVEL_DEBUG_INFO, "log path:%s ret:%s buffersize: %d\n", logpath.c_str(),hg_scanner_err_name(ret),buffersize);
|
2022-07-23 10:01:44 +00:00
|
|
|
|
return ret;
|
|
|
|
|
}
|
2022-12-28 01:56:54 +00:00
|
|
|
|
int hg_scanner_239::set_devreboot(int data)
|
2022-10-13 07:11:58 +00:00
|
|
|
|
{
|
2022-12-28 01:56:54 +00:00
|
|
|
|
return write_register(setting3399::SR_REBOOT, data);
|
2022-10-13 07:11:58 +00:00
|
|
|
|
}
|
|
|
|
|
int hg_scanner_239::set_devshtudown()
|
|
|
|
|
{
|
|
|
|
|
int val = 0,
|
2022-10-18 08:23:22 +00:00
|
|
|
|
ret = write_register(setting3399::SR_POWEROFF, val);
|
2022-10-13 07:11:58 +00:00
|
|
|
|
|
|
|
|
|
if (ret != SCANNER_ERR_OK)
|
|
|
|
|
return ret;
|
2022-10-28 03:01:01 +00:00
|
|
|
|
}
|
|
|
|
|
int hg_scanner_239::set_scan_islock(SANE_Bool set_islock)
|
|
|
|
|
{
|
2022-12-06 09:47:27 +00:00
|
|
|
|
if (!is_kernelsnap_devsislock)
|
2022-12-06 09:57:00 +00:00
|
|
|
|
{
|
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "devs lock:%s \n", hg_scanner_err_name(SCANNER_ERR_DEVICE_NOT_SUPPORT));
|
2022-12-06 09:47:27 +00:00
|
|
|
|
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
|
2022-12-06 09:57:00 +00:00
|
|
|
|
}
|
2022-10-28 03:01:01 +00:00
|
|
|
|
|
2022-11-03 10:15:51 +00:00
|
|
|
|
if (set_islock != 0 && set_islock != 1)
|
2022-12-06 09:57:00 +00:00
|
|
|
|
{
|
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "devs lock:%s \n", hg_scanner_err_name(SCANNER_ERR_INVALID_PARAMETER));
|
2022-11-03 10:15:51 +00:00
|
|
|
|
return SCANNER_ERR_INVALID_PARAMETER;
|
2022-12-06 09:57:00 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-10-28 03:01:01 +00:00
|
|
|
|
int val = 0,
|
|
|
|
|
ret = write_register(setting3399::SR_SET_LOCK_STATES, set_islock);
|
2022-11-24 15:34:38 +00:00
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "Set scanner is lock:%d\r\n", set_islock);
|
2022-10-28 03:01:01 +00:00
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
2022-11-11 09:59:08 +00:00
|
|
|
|
int hg_scanner_239::get_scan_islock(SANE_Bool& islock)
|
2022-10-28 03:01:01 +00:00
|
|
|
|
{
|
2022-12-06 09:47:27 +00:00
|
|
|
|
if (!is_kernelsnap_devsislock)
|
2022-12-06 09:57:00 +00:00
|
|
|
|
{
|
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "devs lock:%s \n", hg_scanner_err_name(SCANNER_ERR_DEVICE_NOT_SUPPORT));
|
2022-12-06 09:47:27 +00:00
|
|
|
|
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
|
2022-12-06 09:57:00 +00:00
|
|
|
|
}
|
2022-12-05 15:01:13 +00:00
|
|
|
|
|
2022-10-28 03:01:01 +00:00
|
|
|
|
int val = 0,
|
|
|
|
|
ret = read_register(setting3399::SR_GET_LOCK_STATES, &val);
|
2022-11-02 10:06:49 +00:00
|
|
|
|
|
2022-11-11 09:59:08 +00:00
|
|
|
|
if (ret != SCANNER_ERR_OK)
|
|
|
|
|
return ret;
|
2022-10-28 03:01:01 +00:00
|
|
|
|
|
2022-11-11 09:59:08 +00:00
|
|
|
|
islock = val;
|
2022-11-24 15:34:38 +00:00
|
|
|
|
ret = islock ? SCANNER_ERR_DEVICE_ISLOCK : SCANNER_ERR_OK;
|
|
|
|
|
|
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "Get scanner is lock:%d\r\n", ret);
|
2022-10-28 03:01:01 +00:00
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
int hg_scanner_239::set_scan_lock_check_val(string check_str)
|
|
|
|
|
{
|
2022-12-06 09:47:27 +00:00
|
|
|
|
if (!is_kernelsnap_devsislock)
|
2022-12-06 09:57:00 +00:00
|
|
|
|
{
|
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "devs lock:%s \n", hg_scanner_err_name(SCANNER_ERR_DEVICE_NOT_SUPPORT));
|
2022-12-06 09:47:27 +00:00
|
|
|
|
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
|
2022-12-06 09:57:00 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-10-28 03:12:52 +00:00
|
|
|
|
#if defined(WIN32) || defined(_WIN64)
|
2022-12-13 10:13:46 +00:00
|
|
|
|
std::string encoded;
|
|
|
|
|
std::string cipher;
|
|
|
|
|
std::string keys = check_str;
|
|
|
|
|
//string sn = "G2396021071101";
|
|
|
|
|
string sn = get_serial_num();
|
|
|
|
|
if (sn.empty())
|
2022-10-28 03:01:01 +00:00
|
|
|
|
{
|
|
|
|
|
return SCANNER_ERR_INVALID_PARAMETER;
|
|
|
|
|
}
|
2022-12-13 10:13:46 +00:00
|
|
|
|
int num = 32 - keys.size(); //保持32位下发
|
2022-11-02 10:06:49 +00:00
|
|
|
|
if (num > 0)
|
2022-10-28 03:01:01 +00:00
|
|
|
|
{
|
2022-12-13 10:13:46 +00:00
|
|
|
|
std::string str(num, '0');
|
|
|
|
|
keys += str;
|
2022-10-28 03:01:01 +00:00
|
|
|
|
}
|
2022-12-13 10:13:46 +00:00
|
|
|
|
else
|
|
|
|
|
keys = keys.substr(0, 32);
|
2022-10-28 03:01:01 +00:00
|
|
|
|
|
2022-12-13 10:13:46 +00:00
|
|
|
|
unsigned char key[CryptoPP::AES::DEFAULT_KEYLENGTH] = { 0 };
|
|
|
|
|
for (int i = 0; i < 16; i++)
|
2022-11-02 10:06:49 +00:00
|
|
|
|
{
|
2022-12-13 10:13:46 +00:00
|
|
|
|
key[i] = _strtoi64(keys.substr(i * 2, 2).c_str(), nullptr, 16);
|
2022-11-02 10:06:49 +00:00
|
|
|
|
}
|
2022-12-13 10:13:46 +00:00
|
|
|
|
|
|
|
|
|
CryptoPP::ECB_Mode<CryptoPP::AES>::Encryption encode;
|
|
|
|
|
encode.SetKey(key, 16);
|
|
|
|
|
|
|
|
|
|
CryptoPP::StringSink* str_cip = new CryptoPP::StringSink(cipher);
|
|
|
|
|
CryptoPP::StreamTransformationFilter* ecb_filter = new CryptoPP::StreamTransformationFilter(encode, str_cip, CryptoPP::BlockPaddingSchemeDef::W3C_PADDING);
|
|
|
|
|
CryptoPP::StringSource* source_plain = new CryptoPP::StringSource(sn, true, ecb_filter);
|
|
|
|
|
encoded.clear();
|
2022-11-02 10:06:49 +00:00
|
|
|
|
CryptoPP::StringSink* str_encode = new CryptoPP::StringSink(encoded);
|
|
|
|
|
CryptoPP::HexEncoder* hex_encode = new CryptoPP::HexEncoder(str_encode);
|
2022-12-13 10:13:46 +00:00
|
|
|
|
CryptoPP::StringSource* source_cipher = new CryptoPP::StringSource(cipher, true, hex_encode);
|
2022-11-02 10:06:49 +00:00
|
|
|
|
|
2022-12-13 10:13:46 +00:00
|
|
|
|
int len = encoded.length();
|
|
|
|
|
int ret = write_register(setting3399::SR_DECODE_TOKEN, len);
|
2022-10-28 03:01:01 +00:00
|
|
|
|
if (ret != SCANNER_ERR_OK)
|
|
|
|
|
{
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
2022-12-13 10:13:46 +00:00
|
|
|
|
|
2022-11-02 10:06:49 +00:00
|
|
|
|
ret = io_->write_bulk(&encoded[0], &len);
|
2022-10-28 03:01:01 +00:00
|
|
|
|
|
2022-12-13 10:13:46 +00:00
|
|
|
|
SAFE_DELETE(source_plain);
|
|
|
|
|
//SAFE_DELETE(ecb_filter);
|
|
|
|
|
//SAFE_DELETE(strcip);
|
|
|
|
|
//SAFE_DELETE(source_cipher)
|
|
|
|
|
//SAFE_DELETE(hex_encode);
|
|
|
|
|
SAFE_DELETE(str_encode);
|
2022-10-28 03:01:01 +00:00
|
|
|
|
return ret;
|
2022-10-28 03:12:52 +00:00
|
|
|
|
#endif
|
2022-11-03 10:09:32 +00:00
|
|
|
|
}
|
2022-12-22 10:37:53 +00:00
|
|
|
|
int hg_scanner_239::set_firmware_upgrade(std::string filename)
|
2022-11-03 10:09:32 +00:00
|
|
|
|
{
|
2022-12-05 15:01:13 +00:00
|
|
|
|
std::lock_guard<std::mutex> lock(io_lock_);
|
2022-11-03 10:09:32 +00:00
|
|
|
|
std::ifstream fwname;
|
|
|
|
|
int ret = SCANNER_ERR_OK;
|
|
|
|
|
|
|
|
|
|
fwname.open(filename, std::ios_base::in | std::ios_base::binary);
|
|
|
|
|
if (!fwname.is_open())
|
|
|
|
|
{
|
2022-11-04 06:32:17 +00:00
|
|
|
|
return SCANNER_ERR_OPEN_FILE_FAILED;
|
2022-11-03 10:09:32 +00:00
|
|
|
|
}
|
|
|
|
|
fwname.seekg(0, std::ios::end);
|
|
|
|
|
int total = fwname.tellg();//记录总长度
|
|
|
|
|
fwname.seekg(0, std::ios::beg);
|
|
|
|
|
int pos = fwname.tellg();//记录pos位置
|
|
|
|
|
|
|
|
|
|
ret = write_register(setting3399::SR_UPDATA_START,total);
|
|
|
|
|
if (ret != SCANNER_ERR_OK)
|
|
|
|
|
{
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
int block = total;
|
|
|
|
|
while (total > 0)
|
|
|
|
|
{
|
|
|
|
|
block = 512 * 1024;
|
|
|
|
|
|
|
|
|
|
if (total < block)
|
|
|
|
|
block = total;
|
|
|
|
|
|
|
|
|
|
std::vector<char>data;
|
|
|
|
|
data.resize(block + 1);
|
|
|
|
|
fwname.read(data.data(), block);
|
|
|
|
|
|
|
|
|
|
io_->write_bulk(data.data(), &block);
|
|
|
|
|
if (ret != SCANNER_ERR_OK)
|
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
|
|
pos += block;
|
|
|
|
|
total -= block;
|
|
|
|
|
fwname.seekg(pos);
|
|
|
|
|
}
|
|
|
|
|
this_thread::sleep_for(std::chrono::milliseconds(200));
|
|
|
|
|
|
|
|
|
|
int val = 0;
|
2022-11-04 01:23:29 +00:00
|
|
|
|
ret = read_register(setting3399::SR_UPDATA_STAUTUS, &val);
|
2022-11-03 10:09:32 +00:00
|
|
|
|
if (ret != SCANNER_ERR_OK)
|
|
|
|
|
return ret;
|
|
|
|
|
else if (!val)
|
|
|
|
|
return SCANNER_ERR_DEVICE_UPGRADE_FAIL;
|
|
|
|
|
|
|
|
|
|
int to_cnt = 0;
|
2022-11-11 03:40:05 +00:00
|
|
|
|
// 到这个位置已经能够升级成功了 后面对升级结果做下判断
|
2022-11-04 08:04:38 +00:00
|
|
|
|
auto now = std::chrono::steady_clock::now();
|
|
|
|
|
while (std::chrono::duration<double>(std::chrono::steady_clock::now() - now).count() < 70)
|
2022-11-03 10:09:32 +00:00
|
|
|
|
{
|
2022-11-04 08:04:38 +00:00
|
|
|
|
int ret = read_register(setting3399::SR_UPDATA_MD5_RELUST, &val);
|
2022-11-03 10:09:32 +00:00
|
|
|
|
if (ret != SCANNER_ERR_OK)
|
|
|
|
|
{
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
if (val == 2)
|
|
|
|
|
{
|
2022-11-04 08:04:38 +00:00
|
|
|
|
int ret = read_register(setting3399::SR_UPDATA_REBOOT, &val);
|
|
|
|
|
return ret;
|
2022-11-03 10:09:32 +00:00
|
|
|
|
}
|
|
|
|
|
else if(val ==3)
|
|
|
|
|
{
|
2022-11-04 08:04:38 +00:00
|
|
|
|
int ret = read_register(setting3399::SR_UPDATA_RECOVERY, &val);
|
|
|
|
|
return ret;
|
2022-11-03 10:09:32 +00:00
|
|
|
|
}
|
2022-11-04 08:04:38 +00:00
|
|
|
|
else if (val == 6)
|
2022-11-03 10:09:32 +00:00
|
|
|
|
{
|
2022-11-04 08:04:38 +00:00
|
|
|
|
return false;
|
2022-11-03 10:09:32 +00:00
|
|
|
|
}
|
2022-11-04 08:04:38 +00:00
|
|
|
|
this_thread::sleep_for(std::chrono::milliseconds(20));
|
2022-11-03 10:09:32 +00:00
|
|
|
|
}
|
|
|
|
|
return ret;
|
2022-11-11 03:40:05 +00:00
|
|
|
|
}
|
2022-12-22 10:37:53 +00:00
|
|
|
|
int hg_scanner_239::set_clean_paper_road()
|
2022-11-11 03:40:05 +00:00
|
|
|
|
{
|
2022-12-22 10:37:53 +00:00
|
|
|
|
//std::lock_guard<std::mutex> lock(io_lock_);
|
2022-11-11 03:40:05 +00:00
|
|
|
|
int ret = 0, len = 0;
|
|
|
|
|
ret = write_register(setting3399::SR_CLEAN_PAPER_ROAD, len);
|
|
|
|
|
return ret;
|
2022-12-12 10:18:53 +00:00
|
|
|
|
}
|
|
|
|
|
int hg_scanner_239::get_dev_islock_file(int& islockfile)
|
|
|
|
|
{
|
|
|
|
|
if (!is_kernelsnap_devsislock)
|
|
|
|
|
{
|
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "devs lock:%s \n", hg_scanner_err_name(SCANNER_ERR_DEVICE_NOT_SUPPORT));
|
|
|
|
|
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
string device_log_path = "/var/log/black_list_file.txt";
|
|
|
|
|
string str;
|
|
|
|
|
|
|
|
|
|
int ret = SCANNER_ERR_OK;
|
|
|
|
|
int buffersize = 0;
|
|
|
|
|
int len = device_log_path.size();
|
|
|
|
|
|
|
|
|
|
ret = write_register(setting3399::SR_SET_JSON_PATH, len);
|
|
|
|
|
if (ret == SCANNER_ERR_OK)
|
|
|
|
|
ret = io_->write_bulk(&device_log_path[0], &len);
|
|
|
|
|
|
|
|
|
|
if (ret == SCANNER_ERR_OK)
|
|
|
|
|
ret = read_register(setting3399::SR_GET_JSON_SIZE, &buffersize);
|
|
|
|
|
|
|
|
|
|
if (ret == SCANNER_ERR_OK && buffersize > 0)
|
|
|
|
|
ret = write_register(setting3399::SR_GET_JSON, buffersize);
|
|
|
|
|
|
|
|
|
|
if (ret == SCANNER_ERR_OK && buffersize > 0)
|
|
|
|
|
{
|
|
|
|
|
str.resize(buffersize);
|
|
|
|
|
ret = io_->read_bulk(&str[0], &buffersize);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ret == SCANNER_ERR_OK && str.size() > 0)
|
|
|
|
|
islockfile = std::stoi(str);
|
|
|
|
|
else
|
|
|
|
|
islockfile = -1;
|
|
|
|
|
|
|
|
|
|
VLOG_MINI_3(LOG_LEVEL_DEBUG_INFO, "get list file is:%s ret:%s buffersize: %d\n", device_log_path.c_str(), hg_scanner_err_name(ret), buffersize);
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
int hg_scanner_239::set_dev_islock_file(int islockfile)
|
|
|
|
|
{
|
|
|
|
|
if (!is_kernelsnap_devsislock)
|
|
|
|
|
{
|
|
|
|
|
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "devs lock:%s \n", hg_scanner_err_name(SCANNER_ERR_DEVICE_NOT_SUPPORT));
|
|
|
|
|
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
|
|
|
|
|
}
|
|
|
|
|
if (islockfile != 0 && islockfile != 1)
|
|
|
|
|
{
|
|
|
|
|
return SCANNER_ERR_INVALID_PARAMETER; //这个地方设置的参数必须保证正确
|
|
|
|
|
}
|
|
|
|
|
string device_log_path = "/var/log/black_list_file.txt";
|
|
|
|
|
string str = std::to_string(islockfile);
|
|
|
|
|
|
|
|
|
|
int ret = SCANNER_ERR_OK;
|
|
|
|
|
int buffersize = 0;
|
|
|
|
|
int len = device_log_path.size();
|
|
|
|
|
int lenstr = str.size();
|
|
|
|
|
io_->set_timeout(3000);
|
|
|
|
|
ret = write_register(setting3399::SR_SET_JSON_PATH, len);
|
|
|
|
|
if (ret != SCANNER_ERR_OK)
|
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
|
|
ret = io_->write_bulk(&device_log_path[0], &len);
|
|
|
|
|
if (ret != SCANNER_ERR_OK)
|
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ret = write_register(setting3399::SR_SET_JSON, lenstr);
|
|
|
|
|
if (ret != SCANNER_ERR_OK)
|
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
|
|
ret = io_->write_bulk(&str[0], &lenstr);
|
|
|
|
|
if (ret != SCANNER_ERR_OK)
|
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
|
|
//VLOG_MINI_3(LOG_LEVEL_DEBUG_INFO, "log path:%s ret:%s buffersize: %d\n", logpath.c_str(), hg_scanner_err_name(ret), buffersize);
|
|
|
|
|
//return ret;
|
|
|
|
|
return SCANNER_ERR_OK;
|
2022-11-02 10:06:49 +00:00
|
|
|
|
}
|