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
2023-03-17 09:09:50 +00:00
static std : : string jsontext1 ( " { \" global \" :{ \" device_type \" : \" G139-G239 \" , \" option_count \" :77}, \" restore \" :{ \" category \" : \" base \" , \" readonly \" :false, \" hwonly \" :false, \" 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 \" , \" readonly \" :false, \" hwonly \" :false, \" 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 \" , \" readonly \" :false, \" hwonly \" :false}, \" is-multiout \" :{ \" category \" : \" base \" , \" readonly \" :false, \" hwonly \" :false, \" 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 \" , \" readonly \" :false, \" hwonly \" :false, \" 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 \" , \" readonly \" :false, \" hwonly \" :false, \" 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 \" , \" readonly \" :false, \" hwonly \" :false, \" title \" : \" \\ u9ed1 \\ u767d \\ u56fe \\ u50cf \\ u9608 \\ u503c \" , \" desc \" : \" \\ u9ad8 \\ u4e8e \\ u8be5 \\ u9608 \\ u503c \\ u4e3a1 \\ uff08 \\ u767d \\ uff09 \\ uff0c \\ u4f4e \\ u4e8e \\ u8be5 \\ u9608 \\ u503c \\ u4e3a0 \\ uff08 \\ u9ed1 \\ uff09 \" , \" type \" : \" int \" , \" cur \" :127, \" default \" :127, \" size \" :4, \" range \" :{ \" min \" :0, \" max \" :255, \" step \" :1}, \" depend_or \" :[ \" is-multiout==true \" , \" mode== \\ u9ed1 \\ u767d \" ]}, \" reverse-bw \" :{ \" category \" : \" base \" , \" readonly \" :false, \" hwonly \" :false, \" 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 \" , \" readonly \" :false, \" hwonly \" :false, \" 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 \" , \" readonly \" :false, \" hwonly \" :false, \" 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 \\ u52
2023-03-17 14:27:06 +00:00
static std : : string jsontext2 ( " nd_or \" :[ \" is-erase-bkg==true \" ]}, \" sharpen \" :{ \" category \" : \" base \" , \" readonly \" :false, \" hwonly \" :false, \" title \" : \" \\ u9510 \\ u5316 \\ u4e0e \\ u6a21 \\ u7cca \" , \" desc \" : \" \\ u9009 \\ u62e9 \\ u9510 \\ u5316 \\ u6548 \\ u679c \\ u6216 \\ u6a21 \\ u7cca \\ u6548 \\ u679c \" , \" type \" : \" string \" , \" cur \" : \" \\ u65e0 \" , \" default \" : \" \\ u65e0 \" , \" size \" :24, \" range \" :[ \" \\ u65e0 \" , \" \\ u9510 \\ u5316 \" , \" \\ u8fdb \\ u4e00 \\ u6b65 \\ u9510 \\ u5316 \" , \" \\ u6a21 \\ u7cca \" , \" \\ u8fdb \\ u4e00 \\ u6b65 \\ u6a21 \\ u7cca \" ], \" depend_and \" :[ \" is-multiout!=true \" , \" mode!= \\ u9ed1 \\ u767d \" , \" != \\ u989c \\ u8272 \\ u81ea \\ u52a8 \\ u8bc6 \\ u522b \" ]}, \" is-rid-morr \" :{ \" category \" : \" base \" , \" readonly \" :false, \" hwonly \" :false, \" title \" : \" \\ u53bb \\ u9664 \\ u6469 \\ u5c14 \\ u7eb9 \" , \" desc \" : \" \\ u53bb \\ u9664 \\ u56fe \\ u50cf \\ u4e2d \\ u7684 \\ u6469 \\ u5c14 \\ u7eb9 \" , \" type \" : \" bool \" , \" cur \" :false, \" default \" :false, \" size \" :4, \" depend_and \" :[ \" is-multiout!=true \" , \" mode!= \\ u9ed1 \\ u767d \" , \" != \\ u989c \\ u8272 \\ u81ea \\ u52a8 \\ u8bc6 \\ u522b \" ]}, \" is-rid-grid \" :{ \" category \" : \" base \" , \" readonly \" :false, \" hwonly \" :false, \" title \" : \" \\ u9664 \\ u7f51 \\ u7eb9 \" , \" desc \" : \" \\ u53bb \\ u9664 \\ u56fe \\ u50cf \\ u4e2d \\ u7684 \\ u7f51 \\ u7eb9 \" , \" type \" : \" bool \" , \" cur \" :false, \" default \" :false, \" size \" :4, \" depend_and \" :[ \" is-multiout!=true \" , \" mode!= \\ u9ed1 \\ u767d \" , \" != \\ u989c \\ u8272 \\ u81ea \\ u52a8 \\ u8bc6 \\ u522b \" ]}, \" is-err-extension \" :{ \" category \" : \" base \" , \" readonly \" :false, \" hwonly \" :false, \" title \" : \" \\ u9519 \\ u8bef \\ u6269 \\ u6563 \" , \" desc \" : \" \\ u4ee5 \\ u70b9 \\ u9635 \\ u5f62 \\ u5f0f \\ u6784 \\ u5efa \\ u56fe \\ u50cf \" , \" type \" : \" bool \" , \" cur \" :false, \" default \" :false, \" size \" :4, \" depend_or \" :[ \" mode== \\ u9ed1 \\ u767d \" ]}, \" is-noise-optimize \" :{ \" category \" : \" base \" , \" readonly \" :false, \" hwonly \" :false, \" title \" : \" \\ u9ed1 \\ u767d \\ u56fe \\ u50cf \\ u566a \\ u70b9 \\ u4f18 \\ u5316 \" , \" desc \" : \" \\ u53bb \\ u9664 \\ u56fe \\ u50cf \\ u4e2d \\ u7684 \\ u5b64 \\ u7acb \\ u9ed1 \\ u70b9 \" , \" type \" : \" bool \" , \" cur \" :false, \" default \" :false, \" size \" :4, \" depend_or \" :[ \" mode== \\ u9ed1 \\ u767d \" ]}, \" noise-size \" :{ \" category \" : \" base \" , \" readonly \" :false, \" hwonly \" :false, \" title \" : \" \\ u566a \\ u70b9 \\ u4f18 \\ u5316 \\ u5c3a \\ u5bf8 \" , \" desc \" : \" \\ u8bbe \\ u7f6e \\ u9700 \\ u8981 \\ u53bb \\ u9664 \\ u7684 \\ u9ed1 \\ u8272 \\ u5b64 \\ u7acb \\ u70b9 \\ u7684 \\ u8fde \\ u901a \\ u4e2a \\ u6570 \" , \" type \" : \" int \" , \" cur \" :30, \" default \" :30, \" size \" :4, \" range \" :{ \" min \" :10, \" max \" :50, \" step \" :1}, \" depend_or \" :[ \" is-noise-optimize==true \" ]}, \" paper \" :{ \" category \" : \" base \" , \" readonly \" :false, \" hwonly \" :false, \" title \" : \" \\ u7eb8 \\ u5f20 \\ u5c3a \\ u5bf8 \" , \" desc \" : \" \\ u8bbe \\ u7f6e \\ u51fa \\ u56fe \\ u5927 \\ u5c0f \" , \" type \" : \" string \" , \" cur \" : \" \\ u5339 \\ u914d \\ u539f \\ u59cb \\ u5c3a \\ u5bf8 \" , \" default \" : \" \\ u5339 \\ u914d \\ u539f \\ u59cb \\ u5c3a \\ u5bf8 \" , \" size \" :48, \" range \" :[ \" A3 \" , \" 8 \\ u5f00 \" , \" A4 \" , \" A4 \\ u6a2a \\ u5411 \" , \" 16 \\ u5f00 \" , \" 16 \\ u5f00 \\ u6a2a \\ u5411 \" , \" A5 \" , \" A5 \\ u6a2a \\ u5411 \" , \" A6 \" , \" A6 \\ u6a2a \\ u5411 \" , \" B4 \" , \" B5 \" , \" B5 \\ u6a2a \\ u5411 \" , \" B6 \" , \" B6 \\ u6a2a \\ u5411 \" , \" Letter \" , \" Letter \\ u6a2a \\ u5411 \" , \" Double Letter \" , \" LEGAL \" , \" \\ u5339 \\ u914d \\ u539f \\ u59cb \\ u5c3a \\ u5bf8 \" , \" \\ u6700 \\ u5927 \\ u626b \\ u63cf \\ u5c3a \\ u5bf8 \\ u81ea \\ u52a8 \\ u88c1 \\ u5207 \" , \" \\ u6700 \\ u5927 \\ u626b \\ u63cf \\ u5c3a \\ u5bf8 \" , \" \\ u4e09 \\ u8054 \\ u8bd5 \\ u5377 \" ]}, \" is-custom-area \" :{ \" category \" : \" base \" , \" readonly \" :false, \" hwonly \" :false, \" title \" : \" \\ u81ea \\ u5b9a \\ u4e49 \\ u626b \\ u63cf \\ u533a \\ u57df \" , \" desc \" : \" \\ u81ea \\ u5b9a \\ u4e49 \\ u626b \\ u63cf \\ u533a \\ u57df \" , \" type \" : \" bool \" , \" cur \" :false, \" default \" :false, \" size \" :4, \" depend_and \" :[ \" paper!= \\ u5339 \\ u914d \\ u539f \\ u59cb \\ u5c3a \\ u5bf8 \" , \" != \\ u4e09 \\ u8054 \\ u8bd5 \\ u5377 \" , \" != \\ u6700 \\ u5927 \\ u626b \\ u63cf \\ u5c3a \\ u5bf8 \" , \" != \\ u6700 \\ u5927 \\ u626b \\ u63cf \\ u5c3a \\ u5bf8 \\ u81ea \\ u52a8 \\ u88c1 \\ u5207 \" ]}, \" tl-x \" :{ \" category \" : \" base \" , \" readonly \" :false, \" hwonly \" :false, \" title \" : \" \\ u626b \\ u63cf \\ u533a \\ u57df \\ u5de6 \\ u4fa7 \\ uff08mm \\ uff09 \" , \" desc \" : \" \\ u81ea \\ u5b9a \\ u4e49 \\ u626b \\ u63cf \\ u533a \\ u57df \\ u5de6 \\ u4e0a \\ u89d2x \\ u5750 \\ u6807 \" , \" type \" : \" float \" , \" cur \" :0.000000, \" default \" :0.000000, \" size \" :4, \" range \" :{ \" min \" :0.000000, \" max \" :210.000000, \" step \" :21.000000}, \" depend_and \" :[ \" is-custom
2023-03-17 09:09:50 +00:00
static std : : string jsontext3 ( " int \" , \" cur \" :40, \" default \" :40, \" size \" :4, \" range \" :{ \" min \" :30, \" max \" :50, \" step \" :1}, \" depend_or \" :[ \" is-erase-black-frame==true \" , \" paper== \\ u5339 \\ u914d \\ u539f \\ u59cb \\ u5c3a \\ u5bf8 \" , \" == \\ u6700 \\ u5927 \\ u626b \\ u63cf \\ u5c3a \\ u5bf8 \" , \" == \\ u6700 \\ u5927 \\ u626b \\ u63cf \\ u5c3a \\ u5bf8 \\ u81ea \\ u52a8 \\ u88c1 \\ u5207 \" , \" is-anti-skew==true \" ]}, \" anti-noise-level \" :{ \" category \" : \" advanced \" , \" readonly \" :false, \" hwonly \" :false, \" 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 \" :2, \" max \" :20, \" step \" :1}, \" depend_or \" :[ \" is-erase-black-frame==true \" , \" paper== \\ u5339 \\ u914d \\ u539f \\ u59cb \\ u5c3a \\ u5bf8 \" , \" == \\ u6700 \\ u5927 \\ u626b \\ u63cf \\ u5c3a \\ u5bf8 \" , \" == \\ u6700 \\ u5927 \\ u626b \\ u63cf \\ u5c3a \\ u5bf8 \\ u81ea \\ u52a8 \\ u88c1 \\ u5207 \" , \" is-anti-skew==true \" ]}, \" margin \" :{ \" category \" : \" advanced \" , \" readonly \" :false, \" hwonly \" :false, \" 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, \" step \" :1}, \" 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 \" , \" readonly \" :false, \" hwonly \" :false, \" 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 \" , \" readonly \" :false, \" hwonly \" :false, \" 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 \" , \" readonly \" :false, \" hwonly \" :false, \" title \" : \" \\ u9632 \\ u6b62 \\ u6e17 \\ u900f \\ u7b49 \\ u7ea7 \" , \" desc \" : \" \\ u9009 \\ u62e9 \\ u9632 \\ u6b62 \\ u6e17 \\ u900f \\ u7684 \\ u7b49 \\ u7ea7 \" , \" type \" : \" string \" , \" cur \" : \" \\ u8f83 \\ u5f31 \" , \" default \" : \" \\ u8f83 \\ u5f31 \" , \" size \" :16, \" range \" :[ \" \\ u5f31 \" , \" \\ u8f83 \\ u5f31 \" , \" \\ u4e00 \\ u822c \" , \" \\ u8f83 \\ u5f3a \" , \" \\ u5f3a \" ], \" depend_or \" :[ \" is-anti-permeate==true \" ]}, \" is-rid-hole-l \" :{ \" category \" : \" base \" , \" readonly \" :false, \" hwonly \" :false, \" title \" : \" \\ u7a7f \\ u5b54 \\ u79fb \\ u9664 \\ u2014 \\ u5de6 \\ u4fa7 \" , \" desc \" : \" \\ u7a7f \\ u5b54 \\ u5728 \\ u7eb8 \\ u5f20 \\ u4e0a \\ u7684 \\ u5de6 \\ u4fa7 \" , \" type \" : \" bool \" , \" cur \" :false, \" default \" :false, \" size \" :4}, \" search-hole-range-l \" :{ \" category \" : \" base \" , \" readonly \" :false, \" hwonly \" :false, \" title \" : \" \\ u5de6 \\ u4fa7 \\ u7a7f \\ u5b54 \\ u641c \\ u7d22 \\ u8303 \\ u56f4 \\ u5360 \\ u5e45 \\ u9762 \\ u6bd4 \\ u4f8b \" , \" desc \" : \" \\ u7a7f \\ u5b54 \\ u641c \\ u7d22 \\ u8303 \\ u56f4 \\ u5360 \\ u5e45 \\ u9762 \\ u6bd4 \\ u4f8b \" , \" type \" : \" float \" , \" cur \" :0.100000, \" default \" :0.100000, \" size \" :4, \" range \" :{ \" min \" :0.000000, \" max \" :0.500000, \" step \" :0.050000}, \" depend_and \" :[ \" is-rid-hole-l==true \" ]}, \" is-rid-hole-r \" :{ \" category \" : \" base \" , \" readonly \" :false, \" hwonly \" :false, \" title \" : \" \\ u7a7f \\ u5b54 \\ u79fb \\ u9664 \\ u2014 \\ u53f3 \\ u4fa7 \" , \" desc \" : \" \\ u7a7f \\ u5b54 \\ u5728 \\ u7eb8 \\ u5f20 \\ u4e0a \\ u7684 \\ u53f3 \\ u4fa7 \" , \" type \" : \" bool \" , \" cur \" :false, \" default \" :false, \" size \" :4}, \" search-hole-range-r \" :{ \" category \" : \" base \" , \" readonly \" :false, \" hwonly \" :false, \" title \" : \" \\ u53f3 \\ u4fa7 \\ u7a7f \\ u5b54 \\ u641c \\ u7d22 \\ u8303 \\ u56f4 \\ u5360 \\ u5e45 \\ u9762 \\ u6bd4 \\ u4f8b \" , \" desc \" : \" \\ u7a
2022-08-08 10:15:51 +00:00
2022-11-23 07:39:13 +00:00
//G439
2023-03-17 14:27:06 +00:00
static std : : string jsontext4 ( " { \" global \" :{ \" device_type \" : \" G439 \" , \" option_count \" :68}, \" restore \" :{ \" category \" : \" base \" , \" readonly \" :false, \" hwonly \" :false, \" 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 \" , \" readonly \" :false, \" hwonly \" :false, \" 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 \" , \" readonly \" :false, \" hwonly \" :false}, \" is-multiout \" :{ \" category \" : \" base \" , \" readonly \" :false, \" hwonly \" :false, \" 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 \" , \" readonly \" :false, \" hwonly \" :false, \" 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 \" , \" readonly \" :false, \" hwonly \" :false, \" 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 \" , \" readonly \" :false, \" hwonly \" :false, \" title \" : \" \\ u9ed1 \\ u767d \\ u56fe \\ u50cf \\ u9608 \\ u503c \" , \" desc \" : \" \\ u9ad8 \\ u4e8e \\ u8be5 \\ u9608 \\ u503c \\ u4e3a1 \\ uff08 \\ u767d \\ uff09 \\ uff0c \\ u4f4e \\ u4e8e \\ u8be5 \\ u9608 \\ u503c \\ u4e3a0 \\ uff08 \\ u9ed1 \\ uff09 \" , \" type \" : \" int \" , \" cur \" :127, \" default \" :127, \" size \" :4, \" range \" :{ \" min \" :0, \" max \" :255, \" step \" :1}, \" depend_or \" :[ \" is-multiout==true \" , \" mode== \\ u9ed1 \\ u767d \" ]}, \" reverse-bw \" :{ \" category \" : \" base \" , \" readonly \" :false, \" hwonly \" :false, \" 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 \" , \" readonly \" :false, \" hwonly \" :false, \" 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 \" , \" readonly \" :false, \" hwonly \" :false, \" 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 \" ]
static std : : string jsontext5 ( " p \" :1}, \" depend_and \" :[ \" is-custom-gamma==false \" ]}, \" contrast \" :{ \" category \" : \" base \" , \" readonly \" :false, \" hwonly \" :false, \" title \" : \" \\ u5bf9 \\ u6bd4 \\ u5ea6 \" , \" desc \" : \" \\ u8c03 \\ u6574 \\ u56fe \\ u50cf \\ u5bf9 \\ u6bd4 \\ u5ea6 \" , \" type \" : \" int \" , \" cur \" :4, \" default \" :4, \" size \" :4, \" range \" :{ \" min \" :1, \" max \" :7, \" step \" :1}, \" depend_and \" :[ \" is-custom-gamma==false \" ]}, \" gamma \" :{ \" category \" : \" base \" , \" readonly \" :false, \" hwonly \" :false, \" title \" : \" \\ u4f3d \\ u9a6c \\ u503c \" , \" desc \" : \" \\ u8c03 \\ u6574 \\ u56fe \\ u50cf \\ u4f3d \\ u739b \\ u503c \" , \" type \" : \" float \" , \" cur \" :1.000000, \" default \" :1.000000, \" size \" :4, \" range \" :{ \" min \" :0.010000, \" max \" :5.000000, \" step \" :0.499000}, \" depend_and \" :[ \" is-custom-gamma==false \" ]}, \" grp-3 \" :{ \" category \" : \" base \" , \" title \" : \" \\ u56fe \\ u50cf \\ u5904 \\ u7406 \" , \" type \" : \" group \" , \" readonly \" :false, \" hwonly \" :false}, \" is-anti-skew \" :{ \" category \" : \" base \" , \" readonly \" :false, \" hwonly \" :false, \" 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 \" , \" readonly \" :false, \" hwonly \" :false, \" 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 \" , \" readonly \" :false, \" hwonly \" :false, \" 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 \" , \" readonly \" :false, \" hwonly \" :false, \" 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 \" , \" readonly \" :false, \" hwonly \" :false, \" 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 \" , \" readonly \" :false, \" hwonly \" :false, \" title \" : \" \\ u9608 \\ u503c \" , \" desc \" : \" \\ u6587 \\ u7a3f \\ u5e95 \\ u8272 \\ u4e0e \\ u9ed1 \\ u8272 \\ u80cc \\ u666f \\ u7070 \\ u5ea6 \\ u503c \\ u7684 \\ u5dee \\ u503c \\ u5927 \\ u4e8e \\ u8be5 \\ u503c \\ uff0c \\ u624d \\ u4f1a \\ u88ab \\ u8bc6 \\ u522b \\ u4e3a \\ u6587 \\ u7a3f \" , \" type \" : \" int \" , \" cur \" :40, \" default \" :40, \" size \" :4, \" range \" :{ \" min \" :30, \" max \" :50, \" step \" :1}, \" depend_or \" :[ \" is-erase-black-frame==true \" , \" paper== \\ u5339 \\ u914d \\ u539f \\ u59cb \\ u5c3a \\ u5bf8 \" , \" == \\ u6700 \\ u5927 \\ u626b \\ u63cf \\ u5c3a \\ u5bf8 \" , \" == \\ u6700 \\ u5927 \\ u626b \\ u63cf \\ u5c3a \\ u5bf8 \\ u81ea \\ u52a8 \\ u88c1 \\ u5207 \" , \" is-anti-skew==true \" ]}, \" anti-noise-level \" :{ \" category \" : \" advanced \" , \" readonly \" :false, \" hwonly \" :false, \" title \" : \" \\ u80cc \\ u666f \\ u6297 \\ u566a \\ u7b49 \\ u7ea7 \" , \" desc \" : \" \\ u80fd \\ u591f \\ u5bb9 \\ u5fcd \\ u7684 \\ u80cc \\ u666f \\ u6742 \\ u8272 \\ u6761 \\ u7eb9 \\ u7684 \\ u5bbd \\ u5ea6 \" , \" type \" : \" int \" , \" cur \" :8, \" default \" :8, \" size \" :4, \" range \" :{ \" min \" :1, \" max \" :20, \" step \" :1}, \" depend_or \" :[ \" is-erase-black-frame==true \" , \" paper== \\ u5339 \\ u914d \\ u539f \\ u59cb \\ u5c3a \\ u5bf8 \" , \" == \\ u6700 \\ u5927 \\ u626b \\ u63cf \\ u5c3a \\ u5bf8 \" , \" == \\ u6700 \\ u5927 \\ u626b \\ u63cf \\ u5c3a \\ u5bf8 \\ u81ea \\ u52a8 \\ u88c1 \\ u5207 \" , \" is-anti-skew==true \" ]}, \" margin \" :{ \" category \" : \" advanced \" , \" readonly \" :false, \" hwonly \" :false, \" title \" : \" \\ u8fb9 \\ u7f18 \\ u7f29 \\ u8fdb \" , \" desc \" :
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 ...
2023-01-17 07:07:58 +00:00
hg_scanner_239 : : hg_scanner_239 ( const char * dev_name , int pid , usb_io * io ) : hg_scanner ( G20039Serial , dev_name , io , pid )
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
{
2023-01-17 07:07:58 +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 )
2023-03-15 11:00:17 +00:00
init_settings ( ( jsontext1 + jsontext2 + jsontext3 ) . c_str ( ) ) ;
2022-11-26 03:22:39 +00:00
else
2023-03-15 11:00:17 +00:00
init_settings ( ( jsontext4 + jsontext5 ) . c_str ( ) ) ;
2022-11-26 03:22:39 +00:00
}
2022-05-03 03:56:07 +00:00
init_version ( ) ;
2022-12-05 15:01:13 +00:00
hg_version_init_handle ( ) ;
2023-01-04 05:53:04 +00:00
# ifdef OEM_HUAGAO
2022-12-05 15:01:13 +00:00
wait_devsislock_ . notify ( ) ;
2023-01-04 05:53:04 +00:00
# endif
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 ) ;
}
2023-03-17 14:27:06 +00:00
int hg_scanner_239 : : set_devs_distortion_check_val ( float data )
2022-12-28 01:56:54 +00:00
{
2023-03-17 14:27:06 +00:00
int val = * ( int * ) & data ;
2022-12-28 01:56:54 +00:00
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 ;
2023-03-17 14:27:06 +00:00
return write_register ( ratio , val ) ;
2022-12-28 01:56:54 +00:00
}
2023-03-17 14:27:06 +00:00
int hg_scanner_239 : : get_devs_distortion_check_val ( float & data )
2022-12-28 01:56:54 +00:00
{
2023-03-17 14:27:06 +00:00
int val = 0 ;
2022-12-28 01:56:54 +00:00
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 ;
2023-03-17 14:27:06 +00:00
int ret = read_register ( ratio , & val ) ;
data = * ( float * ) & val ;
2022-12-28 01:56:54 +00:00
return ret ;
}
2023-03-06 03:37:37 +00:00
int hg_scanner_239 : : set_auto_flat ( int data )
2022-12-30 09:14:49 +00:00
{
2023-03-06 03:37:37 +00:00
int ret = SCANNER_ERR_OK ;
2022-12-30 09:14:49 +00:00
auto fw = get_firmware_version ( ) ;
2023-02-07 08:57:53 +00:00
if ( fw . empty ( ) )
{
return SCANNER_ERR_NO_DATA ;
}
2022-12-30 09:14:49 +00:00
if ( ( fw [ 5 ] = = ' A ' & & atoi ( fw . substr ( 6 , 4 ) . c_str ( ) ) < = 9999 ) )
{
2023-03-07 07:30:51 +00:00
data = data = = 1 ? 1 : 0 ; //暂时没有用。
2022-12-30 09:14:49 +00:00
}
if ( ! wait_usb_ . is_waiting ( ) )
{
return SCANNER_ERR_DEVICE_BUSY ;
}
else
{
2023-03-06 03:37:37 +00:00
ret = write_register ( setting3399 : : SC_AUTOCORRECT , data ) ;
2022-12-30 09:14:49 +00:00
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 ( ) ) ;
2023-02-07 08:57:53 +00:00
if ( fv . empty ( ) | | sn . empty ( ) )
2023-02-07 08:45:25 +00:00
return ;
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 ) ;
2023-02-24 09:42:28 +00:00
string year = fv . substr ( 4 , 2 ) ;
2022-12-06 09:47:27 +00:00
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 ;
}
}
2023-03-01 07:19:15 +00:00
2022-12-06 09:47:27 +00:00
}
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
2023-03-01 07:07:47 +00:00
if ( dev = = " G1 " | | dev = = " G2 " | | dev = = " G4 " )
{
is_kernelsnap_211209_ = date > = " A1209 " ? ( is_kernelsnap_211209_ = atoi ( get_fpga ( ) . c_str ( ) ) > = 35211210 ) : false ; //基本用不到了
2023-03-15 03:03:36 +00:00
is_kernelsnap_220830_ = date > = " B0830 " ? true : false ;
is_kernelsnap_221027_ = date > = " B1027 " ? true : false ;
is_kernelsnap_220430_ = date > = " B0430 " ? true : false ;
2023-03-01 07:19:15 +00:00
is_kernelsnap_3C_cccc = year > = " 3C " ? true : false ;
2023-03-03 09:26:30 +00:00
is_kernelsnap_220500_ = date > = " B0500 " ? true : false ;
2023-03-15 03:03:36 +00:00
is_kernelsnap_211227_ = date < = " A1227 " ? true : false ;
2023-03-01 07:07:47 +00:00
}
2023-03-03 01:54:37 +00:00
VLOG_MINI_6 ( LOG_LEVEL_DEBUG_INFO ,
" Firmware version : %s,is_kernelsnap_211209_:%d ,is_kernelsnap_220830_:%d,is_kernelsnap_221027_:%d,is_kernelsnap_220430_:%d,is_kernelsnap_3C_cccc:%d \n " ,
fv . c_str ( ) , is_kernelsnap_211209_ , is_kernelsnap_220830_ , is_kernelsnap_221027_ , is_kernelsnap_220430_ , is_kernelsnap_3C_cccc ) ;
2023-03-01 07:07:47 +00:00
//if (fv.length() >= 10 && (fv[5] > 'A' && atoi(fv.substr(6, 4).c_str()) >= 1209))
// is_kernelsnap_211209_ = atoi(get_fpga().c_str()) >= 35211210;
//else
// is_kernelsnap_211209_ = false;
//if (fv.length() >= 10 && (fv[5] > 'A' && atoi(fv.substr(6, 4).c_str()) >= 830))
// is_kernelsnap_220830_ = true;
//else
// is_kernelsnap_220830_ = false;
//if (fv.length() >= 10 && (fv[5] > 'A' && atoi(fv.substr(6, 4).c_str()) >= 1027))
// is_kernelsnap_221027_ = true;
//else
// is_kernelsnap_221027_ = false;
//if (fv.length() >= 10 && (fv[5] > 'A' && atoi(fv.substr(6, 4).c_str()) >= 430))
// 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
}
2023-03-03 01:52:39 +00:00
if ( is_kernelsnap_3C_cccc & & image_prc_param_ . bits . paper = = PAPER_AUTO_MATCH )
{
dev_conf - > params_3399 . is_fixedpaper = false ;
dev_conf - > params_3399 . en_autosize = true ;
}
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
2023-02-08 09:24:07 +00:00
ic . scannum = ( ( image_prc_param_ . bits . page ! = PAGE_SINGLE ) ? 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 )
2023-03-14 09:02:38 +00:00
{
VLOG_MINI_1 ( LOG_LEVEL_FATAL , " read_one_image_from_usb read_data:%s!!! \n " , hg_scanner_err_name ( ret ) ) ;
2022-06-07 09:06:09 +00:00
break ;
2023-03-14 09:02:38 +00:00
}
2022-06-07 09:06:09 +00:00
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 )
{
2023-03-15 03:03:36 +00:00
if ( is_kernelsnap_211227_ )
dev_conf_ . params_3399 . dpi = 1 ;
else
dev_conf_ . params_3399 . dpi = dpi = = 600 ? 3 : ( dpi < 599 & & dpi > 299 ) ? 2 : 1 ;
2023-02-08 08:19:42 +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 ,
2023-03-16 10:49:24 +00:00
val = check - 1 , //上面设置的是1 - 5 , 接受范围值为0 - 4, 默认2
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
2023-03-16 10:49:24 +00:00
if ( val < 0 & & val > 5 )
{
check = 3 ;
ret = SCANNER_ERR_NOT_EXACT ;
}
if ( val ! = dev_conf_ . params_3399 . screw_detect_level )
{
dev_conf_ . params_3399 . screw_detect_level = val ;
ret = writedown_device_configuration ( ) ;
if ( ret )
{
check = dev_conf_ . params_3399 . screw_detect_level = old ;
check + = 1 ;
}
}
/*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 ;
2023-03-16 10:49:24 +00:00
} */
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 )
{
2023-03-16 10:49:24 +00:00
float f = threshold ;
//threshold *= 10;
int val = * ( int * ) & f ;
int ret = write_register ( setting3399 : : SR_SET_AUTOMATICCONTROLFEEDMODE_THRESHOLD , val ) ;
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 ) ;
2023-03-16 10:49:24 +00:00
float v = * ( float * ) & 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 ( ) ;
2023-01-10 01:36:22 +00:00
//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-10-28 10:42:22 +00:00
}
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
}
2023-01-05 10:18:38 +00:00
void hg_scanner_239 : : thread_correction ( void )
{
StopWatch sw ;
char buf [ 64 ] ;
setting3399 : : HGEIntInfo * info = ( setting3399 : : HGEIntInfo * ) buf ;
int size = sizeof ( buf ) ,
ret = SCANNER_ERR_OK ;
while ( run_ )
{
size = sizeof ( buf ) ;
{
std : : lock_guard < std : : mutex > lock ( io_lock_ ) ;
ret = io_ - > read_interrupt ( buf , & size ) ;
io_ - > set_timeout ( 1000 ) ;
printf ( " size:%d \r \n " , size ) ;
}
if ( ret = = SCANNER_ERR_TIMEOUT )
{
2023-03-17 14:27:06 +00:00
if ( sw . elapsed_s ( ) > 30 )
2023-01-05 10:18:38 +00:00
{
status_ = ret ;
2023-03-17 14:27:06 +00:00
//notify_ui_working_status(hg_log::lang_load(ID_STATU_DESC_SCANNER_ERR_DEVICE_FAIL_OUTTIME), SANE_EVENT_ERROR, ret); // 通信超时
2023-01-05 10:18:38 +00:00
VLOG_MINI_1 ( LOG_LEVEL_DEBUG_INFO , " 设备校正超时 '%s' \n " , hg_scanner_err_name ( status_ ) ) ;
break ;
}
std : : this_thread : : sleep_for ( std : : chrono : : milliseconds ( 500 ) ) ;
2023-03-17 14:27:06 +00:00
continue ;
2023-01-05 10:18:38 +00:00
}
if ( size = = sizeof ( buf ) )
{
if ( setting3399 : : AutoCorrect = = info - > From )
{
status_ = = SCANNER_ERR_DEVICE_AUTO_FAIL_INFO ;
sw . reset ( ) ;
std : : string sinfo ;
int len = info - > Img_Index ;
sinfo . resize ( len ) ;
io_ - > read_bulk ( & sinfo [ 0 ] , & len ) ;
char buf [ 1024 ] ;
strcpy ( buf , sinfo . c_str ( ) ) ;
notify_ui_working_status ( buf , SANE_EVENT_STATUS , status_ ) ;
printf ( " %s \r \n " , sinfo . c_str ( ) ) ;
if ( info - > Code = = 4 )
{
status_ = SCANNER_ERR_DEVICE_AUTO_FAIL_OVER ;
notify_ui_working_status ( buf , SANE_EVENT_STATUS , status_ ) ;
2023-03-17 14:27:06 +00:00
break ;
2023-01-05 10:18:38 +00:00
}
2023-03-17 14:27:06 +00:00
//break;
2023-01-05 10:18:38 +00:00
}
}
this_thread : : sleep_for ( chrono : : milliseconds ( 10 ) ) ;
}
}
void hg_scanner_239 : : thread_get_dves_image ( void )
2022-05-03 03:56:07 +00:00
{
2023-01-04 09:54:30 +00:00
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 ) ,
2023-01-05 10:18:38 +00:00
ret = SCANNER_ERR_OK ,
count = 0 ;
2022-08-11 09:19:24 +00:00
int auoto_paper_indx = 0 ;
2023-03-17 09:09:50 +00:00
2023-03-03 01:52:39 +00:00
svdevs_err_ . clear ( ) ;
2023-03-15 11:00:17 +00:00
StopWatch sw ;
2023-01-05 10:18:38 +00:00
while ( run_ ) //&& !user_cancel_
2022-05-03 03:56:07 +00:00
{
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
}
2023-01-16 08:03:14 +00:00
2022-05-17 07:04:55 +00:00
if ( ret = = SCANNER_ERR_TIMEOUT )
2022-05-03 03:56:07 +00:00
{
2023-03-17 09:09:50 +00:00
std : : this_thread : : sleep_for ( std : : chrono : : milliseconds ( 400 ) ) ;
if ( img_conf_ . resolution_dst = = 600.0 & & sw . elapsed_s ( ) > 60 & & ! is_auto_paper_scan )
2022-05-03 03:56:07 +00:00
{
status_ = ret ;
2023-01-18 10:08:47 +00:00
notify_ui_working_status ( hg_log : : lang_load ( ID_STATU_DESC_SCANNER_ERR_DEVICE_GET_IMAGE_OUTTIME ) , SANE_EVENT_ERROR , ret ) ; // 取图通信超时
2023-01-16 08:03:14 +00:00
VLOG_MINI_1 ( LOG_LEVEL_DEBUG_INFO , " > 600DPI:%s \n " , hg_scanner_err_name ( status_ ) ) ;
2022-06-13 09:31:03 +00:00
break ;
}
2023-03-17 09:09:50 +00:00
else if ( img_conf_ . resolution_dst < 600.0 & & sw . elapsed_s ( ) > 20 & & ! is_auto_paper_scan )
2022-06-13 09:31:03 +00:00
{
2023-03-17 09:09:50 +00:00
notify_ui_working_status ( hg_log : : lang_load ( ID_STATU_DESC_SCANNER_ERR_DEVICE_GET_IMAGE_OUTTIME ) , SANE_EVENT_ERROR , ret ) ;
2023-01-16 08:03:14 +00:00
VLOG_MINI_1 ( LOG_LEVEL_DEBUG_INFO , " < 600DPI:%s \n " , hg_scanner_err_name ( status_ ) ) ;
2022-05-03 03:56:07 +00:00
break ;
}
2023-03-17 09:09:50 +00:00
if ( is_auto_paper_scan & & sw . elapsed_s ( ) > = is_auto_paper_scan_exit_time & & is_auto_paper_scan_exit_time ! = 0 )
2023-03-15 11:00:17 +00:00
{
stop ( ) ;
notify_ui_working_status ( from_default_language ( STATU_DESC_SCANNER_ERR_DEVICE_EXIT_WAIT_SCAN ) , SANE_EVENT_ERROR , status_ ) ;
2023-03-17 09:09:50 +00:00
VLOG_MINI_1 ( LOG_LEVEL_DEBUG_INFO , " < exit wait:%s \n " , from_default_language ( STATU_DESC_SCANNER_ERR_DEVICE_EXIT_WAIT_SCAN ) ) ;
2023-03-15 11:00:17 +00:00
}
2023-03-17 09:09:50 +00:00
if ( ( get_status ( ) & 0x03 ) = = 0 )
{
status_ = SCANNER_ERR_OK ;
//break;
}
if ( user_cancel_ & & is_auto_paper_scan ) //其他直接跳过当此循坏
2022-08-26 07:44:22 +00:00
{
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 ;
2023-03-17 09:09:50 +00:00
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 ;
}
2023-03-15 11:00:17 +00:00
sw . reset ( ) ;
2023-03-17 09:09:50 +00:00
2022-05-03 03:56:07 +00:00
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
2023-01-05 10:18:38 +00:00
if ( status_ ! = SCANNER_ERR_OK
& & status_ ! = SCANNER_ERR_TIMEOUT
2022-12-30 09:14:49 +00:00
& & 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 ;
2023-01-05 10:18:38 +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 ;
}
}
2023-03-17 09:09:50 +00:00
////239 暂时先关闭双张存图弹窗提示,待到固件更新再确认是否需要弹窗
//while ((count = get_image_count()) > 0)
//{
// 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);
// count++;
// if (ret != SCANNER_ERR_OK
// && ret != SCANNER_ERR_CREATE_FILE_FAILED
// && ret != SCANNER_ERR_WRITE_FILE_FAILED)
// break;
//}
//status_ = st;
2023-03-16 10:49:24 +00:00
//break;
2022-05-03 03:56:07 +00:00
}
2023-03-03 01:52:39 +00:00
svdevs_err_ . push_back ( status_ ) ;
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_ ) ) ;
2023-03-03 01:52:39 +00:00
//break; //这个时候退出的话消息就还没读完, 错误信息先保存下来, 只有获取到stop时才退出, 如果没获取完退出, 可能会导致第二次扫描直接返回扫描完成
//设备返回stop就是告诉我设备已经准备好, 可以进行下来操作。
2022-05-03 03:56:07 +00:00
}
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 ( ) ;
2023-01-05 10:18:38 +00:00
// if (s > 0 && s < 4) // running ...
2022-05-03 03:56:07 +00:00
{
while ( get_image_count ( ) > 0 )
{
2023-03-17 09:09:50 +00:00
2022-05-03 03:56:07 +00:00
ret = read_one_image_from_usb ( ) ;
2023-03-17 09:09:50 +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 ;
}
}
//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
}
2023-03-17 09:09:50 +00:00
else if ( info - > From = = setting3399 : : STOPSCAN ) //固件版本:3B0326获取无纸时, 下面中断信息会先发无纸在停止扫描,然后在发无纸
{ //此时int端点还要信息没有读取完, 而且退出点击继续扫描, 下面设备还未结束扫描
2023-03-03 01:52:39 +00:00
if ( ! svdevs_err_ . empty ( ) )
{
status_ = svdevs_err_ . front ( ) ;
}
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())
2023-03-17 09:09:50 +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
2023-03-17 09:09:50 +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 ;
}
2023-03-15 11:00:17 +00:00
if ( user_cancel_ & & ! is_auto_paper_scan )
2022-08-26 07:44:22 +00:00
{
2023-02-15 07:06:36 +00:00
if ( status_ & & status_ ! = SCANNER_ERR_DEVICE_STOPPED ) // thread_handle_image_process maybe call stop() when insufficient memory occurs .
2022-10-22 06:46:54 +00:00
ret = status_ ;
else
status_ = ret = SCANNER_ERR_USER_CANCELED ;
2023-01-18 10:08:47 +00:00
VLOG_MINI_2 ( LOG_LEVEL_DEBUG_INFO , " %s:%s \n " , hg_log : : lang_load ( ID_STATU_DESC_SCANNER_ERR_DEVICE_GET_USER_CANCEL_SCAN ) , hg_scanner_err_name ( status_ ) ) ;
2022-08-26 07:44:22 +00:00
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 " ) ;
2023-01-05 10:18:38 +00:00
// notify_ui_working_status(STATU_DESC_DEVICE_RESET);
// reset_ = true;
// ret = io_->reset();
// 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 ) ;
2023-03-17 09:09:50 +00:00
if ( count = = 0 | | ( s & 3 ) = = 0 )
2022-05-03 03:56:07 +00:00
{
2022-05-30 03:04:26 +00:00
LOG_INFO ( LOG_LEVEL_DEBUG_INFO , " Really stopped ^_^ \n " ) ;
2023-01-05 10:18:38 +00:00
2022-08-12 03:02:59 +00:00
//string str = "当前批次扫描完成(第"+to_string(++auoto_paper_indx)+"批)";
2023-01-16 08:03:14 +00:00
//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)";
2023-01-18 10:08:47 +00:00
string str = hg_log : : lang_load ( ID_STATU_DESC_SCANNER_ERR_DEVICE_ROUND_SACN_OVER ) ;
2023-01-16 08:03:14 +00:00
str + = " : " + to_string ( + + auoto_paper_indx ) ;
2023-03-17 09:09:50 +00:00
if ( ! user_cancel_ & & is_auto_paper_scan & & svdevs_err_ . empty ( ) )
2023-03-15 11:00:17 +00:00
notify_ui_working_status ( str . c_str ( ) , SANE_EVENT_ERROR , 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 ) ;
2023-01-05 10:18:38 +00:00
// stop();
2022-05-03 03:56:07 +00:00
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
{
2023-02-17 07:16:22 +00:00
//通过int端点返回 如果不反回则是固件问题,软件不做处理
//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
}
2023-01-05 10:18:38 +00:00
void hg_scanner_239 : : thread_handle_usb_read ( void )
{
if ( is_auto_falt )
thread_correction ( ) ;
else
thread_get_dves_image ( ) ;
}
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 ( ) ) ;
2023-01-18 10:08:47 +00:00
notify_ui_working_status ( hg_log : : lang_load ( ID_STATU_DESC_PREPARE_START ) ) ;
2022-05-03 03:56:07 +00:00
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 ) ;
2023-02-13 08:38:05 +00:00
if ( ! val & & ret = = SCANNER_ERR_OK )
2022-08-13 02:15:40 +00:00
{
2022-11-24 16:54:43 +00:00
status_ = SCANNER_ERR_DEVICE_SLEEPING ;
2023-01-18 10:08:47 +00:00
VLOG_MINI_1 ( LOG_LEVEL_WARNING , " device start status is(%s) \n " , hg_log : : lang_load ( ID_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 ( ) ;
2023-01-10 01:36:22 +00:00
//notify_ui_working_status(STATU_DESC_SCANNER_ERR_DEVICE_NOTIFY_SLEEP, SANE_EVENT_ERROR, status_);
2022-08-13 02:15:40 +00:00
return status_ ;
}
2023-02-13 08:38:05 +00:00
if ( ret ! = SCANNER_ERR_OK )
{
return ret ;
}
2022-12-22 10:37:53 +00:00
bool type = true ;
ret = get_scan_mode ( type ) ;
2023-02-13 08:38:05 +00:00
if ( ! type & & ret = = SCANNER_ERR_OK )
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-08-26 07:44:22 +00:00
2023-01-10 01:36:22 +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
2023-01-10 01:36:22 +00:00
//std::string info(STATU_DESC_REWRITE_CONFIGURATION);
2022-05-03 03:56:07 +00:00
2023-01-10 01:36:22 +00:00
//info += std::string("\345\244\261\350\264\245\357\274\232") + hg_scanner_err_name(ret);
//notify_ui_working_status(info.c_str(), SANE_EVENT_ERROR, 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
{
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 ;
}
2023-01-04 05:53:04 +00:00
# ifdef OEM_HUAGAO
2022-12-13 10:13:46 +00:00
if ( is_checksum_strat_scan )
{
std : : string str ( " C34E58CD5F3F2FF703E1AA24892FBD69 " ) ;
set_scan_lock_check_val ( str ) ;
}
2023-01-04 05:53:04 +00:00
# endif
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 )
{
2023-02-21 01:54:26 +00:00
int len = 0 ;
read_register ( setting3399 : : SR_GET_SERIAL_LEN , & len ) ;
return control_fetch ( setting3399 : : SR_GET_IPADDR , 0 , len ) ;
2022-05-03 03:56:07 +00:00
}
2023-02-03 02:30:57 +00:00
std : : string hg_scanner_239 : : get_device_model ( void )
{
string device_model = " /home/linaro/microtek_sn " ;
string str ;
int ret = SCANNER_ERR_OK ;
int buffersize = 0 ;
int len = device_model . size ( ) ;
io_ - > set_timeout ( 3000 ) ;
ret = write_register ( setting3399 : : SR_SET_JSON_PATH , len ) ;
if ( ret ! = SCANNER_ERR_OK )
return " " ;
ret = io_ - > write_bulk ( & device_model [ 0 ] , & len ) ;
if ( ret ! = SCANNER_ERR_OK )
return " " ;
ret = read_register ( setting3399 : : SR_GET_JSON_SIZE , & buffersize ) ;
if ( ret ! = SCANNER_ERR_OK | | buffersize < = 0 )
return " " ;
ret = write_register ( setting3399 : : SR_GET_JSON , buffersize ) ;
if ( ret ! = SCANNER_ERR_OK | | buffersize < = 0 )
return " " ;
str . resize ( buffersize ) ;
ret = io_ - > read_bulk ( & str [ 0 ] , & buffersize ) ;
if ( ret ! = SCANNER_ERR_OK )
return " " ; ;
return str ;
}
2023-01-03 03:12:26 +00:00
int hg_scanner_239 : : set_serial_num ( string str )
{
int len = str . size ( ) ,
ret = write_register ( setting3399 : : SR_SET_SERIALNUM , len ) ;
if ( ret = = SCANNER_ERR_OK )
{
ret = io_ - > write_bulk ( & str [ 0 ] , & len ) ;
}
return ret ;
}
int hg_scanner_239 : : set_vid_pid ( int data )
{
return write_register ( setting3399 : : SR_SET_USBVIDPID , data ) ;
}
int hg_scanner_239 : : get_vid_pid ( int & data )
{
return read_register ( setting3399 : : SR_GET_USBVIDPID , & data ) ;
}
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 ;
}
2023-03-06 03:37:37 +00:00
int hg_scanner_239 : : set_clear_history_num ( void )
{
int val = 0 ,
ret = read_register ( setting3399 : : SR_CLR_SCANN_NUM , & val ) ;
return ret ;
}
2022-05-03 03:56:07 +00:00
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
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
{
2023-02-15 09:29:34 +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
}