增加扫描前无纸检测配置开关,以解决部分老设备没有无纸检测协议导致无法扫描的情况

This commit is contained in:
gb 2023-12-22 09:26:05 +08:00
parent 13b4327281
commit ddf6b6e4d1
5 changed files with 144 additions and 129 deletions

View File

@ -180,6 +180,9 @@ hg_scanner::hg_scanner(ScannerSerial serial, const char* dev_name, usb_io* io, i
dump_img_ = &hg_scanner::dump_image_real; dump_img_ = &hg_scanner::dump_image_real;
} }
if (hg_log::ini_get("func", "no-paper-chk") == "1")
no_paper_check_ = true;
std::string mem = hg_log::ini_get("mem", "max_img"); std::string mem = hg_log::ini_get("mem", "max_img");
if (!mem.empty()) if (!mem.empty())
{ {

View File

@ -89,9 +89,9 @@ class hg_scanner
std::string family_; std::string family_;
std::string save_multiout; //保存多留输出类型 std::string save_multiout; //保存多留输出类型
bool save_sizecheck; bool save_sizecheck;
bool read_over_with_no_data_; // 针对第三方调用在最后一段数据时是否返回“SCANNER_ERR_NO_DATA” bool read_over_with_no_data_; // <EFBFBD><EFBFBD>笆蝚砌<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𦒘<EFBFBD>畾菜㺭<EFBFBD>格𧒄<EFBFBD>臬炏餈𥪜<EFBFBD><EFBFBD>侻CANNER_ERR_NO_DATA<EFBFBD>?
int is_color_type_;//保存最后下发到设备的颜色类型 int is_color_type_;//靽嘥<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𦒘<EFBFBD><EFBFBD><EFBFBD>霈曉<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>脩掩<EFBFBD>?
bool have_max_size; //条目是否存在最大尺寸 bool have_max_size; //<EFBFBD>∠𤌍<EFBFBD>臬炏摮睃銁<EFBFBD><EFBFBD>憭批偕撖?
sane_callback ui_ev_cb_; sane_callback ui_ev_cb_;
@ -135,17 +135,17 @@ class hg_scanner
void reset_custom_area_range(int paper); void reset_custom_area_range(int paper);
float reset_custom_area_jsn_value(const char* name, double& var, float range_l, float range_u, float value_l, float value_u); // return cur value float reset_custom_area_jsn_value(const char* name, double& var, float range_l, float range_u, float value_l, float value_u); // return cur value
int set_color_change(void); int set_color_change(void);
bool jsn_reorganize(); // 固件版本不同 初始化json要做出相对应的删除 bool jsn_reorganize(); // <EFBFBD>箔辣<EFBFBD><EFBFBD>𧋦銝滚<EFBFBD> <20><EFBFBD><E598A5>馛son閬<6E><E996AC><EFBFBD>箇㮾撖孵<E69296><E5ADB5><EFBFBD><EFBFBD><EFBFBD>?
public: public:
// 设置接口 // 设置接口
protected: protected:
// 配置序号映射数组各子类必须重载“init_setting_map”方法以初始化该数组 --> 2022-05-09基类中以title自动匹配功能序号子类不必再处理并屏蔽此项工作 // <EFBFBD>滨蔭摨誩噡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>摮鞟掩敹<EFBFBD><EFBFBD>滩蝸<EFBFBD>𦤹nit_setting_map<EFBFBD>脲䲮瘜蓥誑<EFBFBD><EFBFBD><EFBFBD>𤥁砲<EFBFBD><EFBFBD> --> 2022-05-09嚗𡁜抅蝐颱葉隞另itle<6C>芸𢆡<E88AB8><EFBFBD><E5AFA5><EFBFBD>摨誩噡嚗<E599A1><E59A97>蝐颱<E89D90><EFBFBD><E695B9><EFBFBD><E686AD>撟嗅<E6929F><E59785>賣迨憿孵極雿?
// 比如: 某型设备的“颜色模式”功能号为1 setting_map_[HG_BASE_SETTING_INDEX_COLOR_MODE] = 1 // 瘥𥪜<EFBFBD>嚗? <20>𣂼<EFBFBD>霈曉<E99C88><E69B89><EFBFBD><EFBFBD>𣈯<EFBFBD><F0A388AF>脫芋撘謿<E69298><EFBFBD><E598A5>賢噡銝?嚗<><E59A97> setting_map_[HG_BASE_SETTING_INDEX_COLOR_MODE] = 1
// 如果设备的“颜色模式”配置逻辑与基类预定义的不同, // 如果设备的“颜色模式”配置逻辑与基类预定义的不同,
// 则 setting_map_[HG_BASE_SETTING_INDEX_COLOR_MODE] = -1在子类重载的set_setting_value方法中处理 // <EFBFBD>?setting_map_[HG_BASE_SETTING_INDEX_COLOR_MODE] = -1嚗<31>銁摮鞟掩<E99E9F>滩蝸<E6BBA9><E89DB8>et_setting_value<75><EFBFBD>銝剖<E98A9D><E58996>?
// //
// 2022-06-28: 属性处理函数改用map结构存储只须处理set_setting_map函数即可 // 2022-06-28: 属性处理函数改用map结构存储只须处理set_setting_map函数即可
// int setting_map_[HG_BASE_SETTING_INDEX_MAX]; // int setting_map_[HG_BASE_SETTING_INDEX_MAX];
@ -259,14 +259,14 @@ protected:
virtual int on_skew_check_level_changed(int& check) = 0; virtual int on_skew_check_level_changed(int& check) = 0;
virtual int on_get_feedmode(int& feedmode) = 0; //获取分纸强度 virtual int on_get_feedmode(int& feedmode) = 0; //获取分纸强度
virtual int on_set_feedmode(int feedmode) = 0; //设置分纸强度 virtual int on_set_feedmode(int feedmode) = 0; //设置分纸强度
virtual int on_pic_type(bool& pic) = 0; //照片模式或者文本模式 virtual int on_pic_type(bool& pic) = 0; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𤥁<EFBFBD><EFBFBD><EFBFBD><EFBFBD>祆芋撘?
virtual int on_pick_paper(bool autostrength) = 0; //设置搓纸使能 virtual int on_pick_paper(bool autostrength) = 0; //设置搓纸使能
virtual int on_pick_paper_threshold(double threshold) = 0; //设置搓纸阈值 virtual int on_pick_paper_threshold(double threshold) = 0; //霈曄蔭<EFBFBD>梶爾<EFBFBD><EFBFBD><EFBFBD>?
virtual int on_is_auto_paper(bool isautopaper) = 0; //待纸扫描 virtual int on_is_auto_paper(bool isautopaper) = 0; //待纸扫描
virtual int on_cis_get_image(bool type) = 0; virtual int on_cis_get_image(bool type) = 0;
virtual int on_process_double_paper(bool type) = 0; //双张图像校验 virtual int on_process_double_paper(bool type) = 0; //双张图像校验
virtual int on_detect_lens_dirty(bool &type); //检测镜头脏污 virtual int on_detect_lens_dirty(bool &type); //<EFBFBD>瘚钅<EFBFBD>憭渲<EFBFBD>瘙?
virtual int on_set_period(int val); //PWM占空比 virtual int on_set_period(int val); //PWM<EFBFBD>删征瘥?
protected: protected:
virtual int set_setting_value(const char* name, void* data, long* len); virtual int set_setting_value(const char* name, void* data, long* len);
@ -274,7 +274,7 @@ protected:
virtual void thread_handle_usb_read(void) = 0; virtual void thread_handle_usb_read(void) = 0;
virtual void thread_handle_islock_read(); virtual void thread_handle_islock_read();
int hg_version_init_handle(); int hg_version_init_handle();
int set_server_blacklist_lock(); // 0:不锁定 1:锁定 int set_server_blacklist_lock(); // 0:銝漤<EFBFBD>摰?1:<3A><><EFBFBD>
void hg_version_free_handle(); void hg_version_free_handle();
// adjust color or apply custom gamma // adjust color or apply custom gamma
void adjust_color(hg_imgproc::HIMGPRC handle); void adjust_color(hg_imgproc::HIMGPRC handle);
@ -300,9 +300,9 @@ protected:
int status_; int status_;
bool async_io_; bool async_io_;
bool cb_mem_; bool cb_mem_;
bool test_1_paper_; // 是否为单张扫描模式 bool test_1_paper_; // <EFBFBD>臬炏銝箏<EFBFBD>撘䭾醌<EFBFBD>𤩺芋撘?
std::vector<std::string> jsn_children_; std::vector<std::string> jsn_children_;
std::vector<string> erase_depend_; //需要删除父依赖项 std::vector<string> erase_depend_; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>靘肽<EFBFBD>憿?
json setting_jsn_; json setting_jsn_;
IMGPRCFIXPARAM image_prc_param_; IMGPRCFIXPARAM image_prc_param_;
@ -311,57 +311,57 @@ protected:
int noise_range_; // 噪点优化尺寸 int noise_range_; // 噪点优化尺寸
TwSS paper_size_; TwSS paper_size_;
int omit_empty_level_; // 跳过空白页灵敏度 int omit_empty_level_; // 跳过空白页灵敏度
int resolution_; // 分辨率 int resolution_; // <EFBFBD><EFBFBD><EFBFBD>?
double rid_hole_range_; // 穿孔移除范围 double rid_hole_range_; // 穿孔移除范围
int bright_; // 亮度 int bright_; // 亮度
int contrast_; // 对比度 int contrast_; // 撖寞<EFBFBD>摨?
double gamma_; // 伽玛 double gamma_; // 伽玛
int threshold_; // 阈值 int threshold_; // <EFBFBD><EFBFBD><EFBFBD>?
int anti_noise_; // 背景搞噪等级 int anti_noise_; // 背景搞噪等级
int margin_; // 边缘缩进 int margin_; // 边缘缩进
int fractate_level_; // 折角检测复杂度 int fractate_level_; // 折角检测复杂度
int scan_count_; // 扫描张数各实例化类在重载set_setting_value中如果发现该设置项对该参数有影响时需要对此值作更改 int scan_count_; // 扫描张数各实例化类在重载set_setting_value中如果发现该设置项对该参数有影响时需要对此值作更改
bool is_auto_matic_color;// 自动颜色识别 bool is_auto_matic_color;// 自动颜色识别
int is_quality_; // 画质设置 0 - 速度优先1 - 画质优先 int is_quality_; // <EFBFBD>餉捶霈曄蔭 0 - <20>笔漲隡睃<E99AA1>嚗? - <20>餉捶隡睃<E99AA1>
bool is_color_fill; // 色彩填充 bool is_color_fill; // 色彩填充
bool is_multiout; // 多流输出 bool is_multiout; // 多流输出
int bw_threshold_; // 黑白图像阈值 added on 2022-06-28 int bw_threshold_; // 暺𤑳蒾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?嚗Òdded on 2022-06-28嚗?
int feedmode_; // 分纸强度 int feedmode_; // 分纸强度
int sleeptime_; // 睡眠时间 int sleeptime_; // 睡眠时间
bool is_auto_paper_scan; // 待纸扫描 bool is_auto_paper_scan; // 待纸扫描
bool size_check; // 尺寸检测 bool size_check; // 撠箏站璉<EFBFBD>瘚?
bool save_feedmode_type_; //保存分支强度狀態 bool save_feedmode_type_; //靽嘥<EFBFBD><EFBFBD><EFBFBD>𣈲撘箏漲<EFBFBD><EFBFBD><EFBFBD>?
bool save_sleeptime_type_; //保存休眠時間 bool save_sleeptime_type_; //保存休眠時間
bool isremove_left_hole; //设置左边除穿孔 bool isremove_left_hole; //霈曄蔭撌西器<EFBFBD>斤忽摮?
bool isremove_right_hole; //设置右边除穿孔 bool isremove_right_hole; //霈曄蔭<EFBFBD>唾器<EFBFBD>斤忽摮?
bool isremove_top_hole; //设置上边除穿孔 bool isremove_top_hole; //霈曄蔭銝𡃏器<EFBFBD>斤忽摮?
bool isremove_low_hole; //设置下边除穿孔 bool isremove_low_hole; //霈曄蔭銝贝器<EFBFBD>斤忽摮?
double isremove_left_hole_threshold; //设置左边除穿孔阈值 double isremove_left_hole_threshold; //霈曄蔭撌西器<EFBFBD>斤忽摮娪<EFBFBD><EFBFBD>?
double isremove_right_hole_threshold; //设置右边除穿孔阈值 double isremove_right_hole_threshold; //霈曄蔭<EFBFBD>唾器<EFBFBD>斤忽摮娪<EFBFBD><EFBFBD>?
double isremove_top_hole_threshold; //设置上边除穿孔阈值 double isremove_top_hole_threshold; //霈曄蔭銝𡃏器<EFBFBD>斤忽摮娪<EFBFBD><EFBFBD>?
double isremove_low_hole_threshold; //设置下边除穿孔阈值 double isremove_low_hole_threshold; //霈曄蔭銝贝器<EFBFBD>斤忽摮娪<EFBFBD><EFBFBD>?
int fold_type_; //对折类型 int fold_type_; //对折类型
bool is_cis_image; //设置cis获取原图 bool is_cis_image; //设置cis获取原图
bool is_dpi_color_check; //纵向DPI、色差检测 ,畸变自动计算 bool is_dpi_color_check; //蝥萄<EFBFBD>DPI<EFBFBD><EFBFBD>𠧧撌格<EFBFBD>瘚? ,<2C><EFBFBD><E8A9A8>芸𢆡霈∠<E99C88>
float save_dpi_color_check_val; //保存纵向DPI、色差检测 ,畸变自动计算 的值 float save_dpi_color_check_val; //靽嘥<EFBFBD>蝥萄<EFBFBD>DPI<EFBFBD><EFBFBD>𠧧撌格<EFBFBD>瘚? ,<2C><EFBFBD><E8A9A8>芸𢆡霈∠<E99C88> <20><><EFBFBD>?
bool is_auto_falt; //是否进行平场校正 bool is_auto_falt; //是否进行平场校正
bool color_correction_; //是否色彩校正 bool color_correction_; //是否色彩校正
int is_auto_paper_scan_exit_time; //待纸扫描退出时间 int is_auto_paper_scan_exit_time; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>箸𧒄<EFBFBD>?
bool is_auto_feedmode_; //是否启用自动分纸强度 bool is_auto_feedmode_; //是否启用自动分纸强度
bool is_discardblank; //是否启动跳过空白页 bool is_discardblank; //<EFBFBD>臬炏<EFBFBD>臬𢆡頝唾<EFBFBD>蝛箇蒾憿?
bool is_lens_dirty; //是否检测镜头脏污 bool is_lens_dirty; //<EFBFBD>臬炏璉<EFBFBD>瘚钅<EFBFBD>憭渲<EFBFBD>瘙?
int split3399_; //3399设备正面和反面图像是相对的,所以对折时反面需要进行特殊处理 int split3399_; //3399霈曉<EFBFBD><EFBFBD>𢒰<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𤩺糓<EFBFBD>詨笆<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>隞亙笆<EFBFBD>䀹𧒄<EFBFBD>漤𢒰<EFBFBD><EFBFBD><EFBFBD><EFBFBD>銵𣬚鸌畾𠰴<EFBFBD><EFBFBD>?
int pid_; int pid_;
SANE_DISTORTION_VAL distortion_val; //畸变修正结构体保存 SANE_DISTORTION_VAL distortion_val; //<EFBFBD><EFBFBD>靽格迤蝏𤘪<EFBFBD>雿㮖<EFBFBD>摮?
/////////不同的固件号版本支持 /////////不同的固件号版本支持
bool firmware_sup_wait_paper_; //固件支持 待纸扫描 139 239-3B0431, 439-3B0629 bool firmware_sup_wait_paper_; //固件支持 待纸扫描 139 239-3B0431, 439-3B0629
bool firmware_sup_pick_strength_; //固件支持 分纸强度 139 239-3B0830 bool firmware_sup_pick_strength_; //固件支持 分纸强度 139 239-3B0830
bool firmware_sup_log_export_; //固件支持 日志导出 139 239-3B0429 bool firmware_sup_log_export_; //固件支持 日志导出 139 239-3B0429
bool firmware_sup_log_export_G300_; //固件支持 不用协议,直接读片上文件,设备日志导出 300 - 0430 bool firmware_sup_log_export_G300_; //<EFBFBD>箔辣<EFBFBD><EFBFBD> 銝滨鍂<E6BBA8>讛悅嚗𣬚凒<F0A3AC9A>亥粉<E4BAA5><E7B289><EFBFBD><EFBFBD><EFBFBD>辣嚗諹挽憭<E68CBD>𠯫敹堒紡<E5A092>? 300 - 0430
bool firmware_sup_color_corr_; //固件支持 偏色校正 139 239 439-3C bool firmware_sup_color_corr_; //固件支持 偏色校正 139 239 439-3C
bool firmware_sup_wake_device_; //固件支持 唤醒设备 139 239-3B0830 bool firmware_sup_wake_device_; //固件支持 唤醒设备 139 239-3B0830
bool firmware_sup_double_img; //固件支持 双张保留 139 239-3C bool firmware_sup_double_img; //固件支持 双张保留 139 239-3C
@ -369,19 +369,19 @@ protected:
bool firmware_sup_dpi_300; //固件支持 真实DPI300 139 239-21227此版本以下不支持真实dpidpi设置1 //3288 G300 用到 bool firmware_sup_dpi_300; //固件支持 真实DPI300 139 239-21227此版本以下不支持真实dpidpi设置1 //3288 G300 用到
bool firmware_sup_dpi_600; //固件支持 真实DPI600 139 239-21227此版本以下不支持真实dpidpi设置1 bool firmware_sup_dpi_600; //固件支持 真实DPI600 139 239-21227此版本以下不支持真实dpidpi设置1
bool firmware_sup_auto_speed_; //固件支持 自适应速度 139 239 439 -3C bool firmware_sup_auto_speed_; //固件支持 自适应速度 139 239 439 -3C
bool firmware_sup_morr_; //固件支持 摩尔纹 139 239-3C0518 bool firmware_sup_morr_; //<EFBFBD>箔辣<EFBFBD><EFBFBD> <20><EFBFBD>蝥? 139 239-3C0518
bool firmware_sup_color_fill_; //固件支持 色彩填充 139 239 439 -3C bool firmware_sup_color_fill_; //固件支持 色彩填充 139 239 439 -3C
bool firmware_sup_history_cnt; //固件支持 清除历史张数 3288 G300 220303 bool firmware_sup_history_cnt; //固件支持 清除历史张数 3288 G300 220303
bool firmware_sup_double_check; //固件支持 双张校验 231027 bool firmware_sup_double_check; //固件支持 双张校验 231027
bool firmware_sup_dirty_check; //固件支持 脏污检测 231027 bool firmware_sup_dirty_check; //<EFBFBD>箔辣<EFBFBD><EFBFBD> <20>𤩺情璉<E68385>瘚? 231027
bool firmware_sup_backup_restore; //固件支持 备份还原 231021 bool firmware_sup_backup_restore; //固件支持 备份还原 231021
bool firmware_sup_boardTime; //固件支持 板级时间校验 231021 bool firmware_sup_boardTime; //固件支持 板级时间校验 231021
bool firmware_sup_permeation_level; //固件支持 防渗透等级 3399-3C1206 bool firmware_sup_permeation_level; //<EFBFBD>箔辣<EFBFBD><EFBFBD> <20><EFBFBD><E884AB><EFBFBD>蝥? 3399-3C1206
bool firmware_sup_device_7010; //G300 设备但是7010 2023/9/21 bool firmware_sup_device_7010; //G300 设备但是7010 2023/9/21
int mat_width; int mat_width;
int mat_height; int mat_height;
SCANCONF img_conf_; //此参数外部不做任何改变请在writedown_image_configuration做修改 SCANCONF img_conf_; //甇文<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>帋遙雿閙㺿<EFBFBD><EFBFBD>霂瑕銁writedown_image_configuration<EFBFBD>帋耨<EFBFBD>?
std::string img_type_; std::string img_type_;
std::string dump_usb_path_; // 诊断模式输出USB原始图像 std::string dump_usb_path_; // 诊断模式输出USB原始图像
@ -392,6 +392,7 @@ protected:
unsigned long memory_size_; // MB unsigned long memory_size_; // MB
unsigned long wait_mem_seconds_; // wait up to wait_mem_seconds_ if memory usage is great than memory_size_ unsigned long wait_mem_seconds_; // wait up to wait_mem_seconds_ if memory usage is great than memory_size_
bool isx86_Advan_; bool isx86_Advan_;
bool no_paper_check_ = false; // <20><EFBFBD><E680A5>齿糓<E9BDBF><EFBFBD>瘚𧢲<E7989A>蝥貊𠶖<E8B28A><F0A0B696><EFBFBD><EFBFBD>臭誑<E887AD><EFBFBD><E69C9E>滨蔭[func]no-paper-chk=1撘<31><E69298>?
int stop_fatal_; int stop_fatal_;
BlockingQueue<std::shared_ptr<tiny_buffer>> imgs_; BlockingQueue<std::shared_ptr<tiny_buffer>> imgs_;
@ -406,7 +407,7 @@ protected:
int init_settings(int pid); int init_settings(int pid);
void change_string_2_lang_id(const char* name, const char* key); void change_string_2_lang_id(const char* name, const char* key);
std::string get_setting_item_string(const char* name, const char* key); std::string get_setting_item_string(const char* name, const char* key);
int on_scann_error(int err); // 返回“0”忽略错误继续执行其它值则停止后续工作 int on_scann_error(int err); // 餈𥪜<EFBFBD><EFBFBD>?<3F>嘥蕭<E598A5>仿<EFBFBD>霂舐誧蝏剜<E89D8F>銵䕘<E98AB5><E49598><EFBFBD><E59785><EFBFBD><E6BE86>𨀣迫<F0A880A3>𡒊賒撌乩<E6928C>
int try_third_app_handle_start(bool& handled); int try_third_app_handle_start(bool& handled);
int try_third_app_after_start(int err); int try_third_app_after_start(int err);
std::shared_ptr<tiny_buffer> aquire_memory(int size, bool from_usb = true); std::shared_ptr<tiny_buffer> aquire_memory(int size, bool from_usb = true);
@ -423,24 +424,24 @@ protected:
int wait_one_image_from_start(bool& handled); int wait_one_image_from_start(bool& handled);
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////
// 新增自定义伽玛曲线及扫描区域属性 - 2022-05-05 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>銋劐播<EFBFBD>𥟇𤩅蝥踹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>撅墧<EFBFBD>?- 2022-05-05
bool custom_gamma_; // 为true时应用custom_gamma_val_阵列调整图像色彩为false时保持原来的处理方式 bool custom_gamma_; // 銝演rue<EFBFBD><EFBFBD>摨𠉛鍂custom_gamma_val_<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>脣蔗嚗𥕢蛹false<EFBFBD><EFBFBD>靽脲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䲮撘?
SANE_Gamma *custom_gamma_val_; // 当为RGB或者彩色时为三组256字节的数据当为黑白或灰度时只有一组256字节 SANE_Gamma *custom_gamma_val_; // 敶㮖蛹RGB<EFBFBD>𤥁<EFBFBD><EFBFBD><EFBFBD>脫𧒄嚗䔶蛹銝厩<EFBFBD>256摮𡑒<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>敶㮖蛹暺𤑳蒾<EFBFBD>𣇉<EFBFBD>摨行𧒄嚗<EFBFBD><EFBFBD><EFBFBD>蝏?56摮𡑒<E691AE>
bool custom_area_; // 是否启用自定义区域为true时才使用下列4个数据为false时保持原来的处理方式 bool custom_area_; // 是否启用自定义区域为true时才使用下列4个数据为false时保持原来的处理方式
double custom_area_lt_x_; // 自定义区域左上角x坐标 double custom_area_lt_x_; // 自定义区域左上角x坐标
double custom_area_lt_y_; // 自定义区域左上角y坐标 double custom_area_lt_y_; // 自定义区域左上角y坐标
double custom_area_br_x_; // 自定义区域右下角x坐标 double custom_area_br_x_; // 自定义区域右下角x坐标
double custom_area_br_y_; // 自定义区域右下角y坐标 double custom_area_br_y_; // 自定义区域右下角y坐标
SIZE paper_size_mm_; // 当前纸张尺寸mm SIZE paper_size_mm_; // 敶枏<EFBFBD>蝥詨<EFBFBD>撠箏站嚗ém嚗?
// 新增自定义伽玛曲线及扫描区域属性 - END // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>銋劐播<EFBFBD>𥟇𤩅蝥踹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>撅墧<EFBFBD>?- END
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////
// 2022-07-23 新增双张之后留图继续扫描 // 2022-07-23 新增双张之后留图继续扫描
int double_paper_handle_; // 汉王要求出现双张的时候可保留 int double_paper_handle_; // 汉王要求出现双张的时候可保留
bool keep_watermark_; // 汉王要求图像处理过程中保留水印 - 是否与背景移除、背景填充相关??? bool keep_watermark_; // 瘙厩<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝凋<EFBFBD><EFBFBD>蹱偌<EFBFBD>?- <20>臬炏銝舘<E98A9D><E88898>舐宏<E88890><EFBFBD><E6898E><EFBFBD><EFBFBD><E887AC><E280B5><EFBFBD><EFBFBD><EFBFBD><E59A97>
// 2022-08-31 新增黑白图像是否反色输出PNM黑白像素与BMP黑白像素相反 // 2022-08-31 <EFBFBD><EFBFBD>暺𤑳蒾<EFBFBD><EFBFBD><EFBFBD>臬炏<EFBFBD>滩𠧧颲枏枂嚗㇊NM暺𤑳蒾<EFBFBD><EFBFBD>銝𦻓MP暺𤑳蒾<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?
bool is_white_0_; // 是否0代表白色 bool is_white_0_; // <EFBFBD>臬炏<EFBFBD>?<3F>嗘誨銵函蒾<E587BD>?
public: public:
int start(void); int start(void);
@ -479,7 +480,7 @@ public:
virtual int reset(void); virtual int reset(void);
virtual int device_io_control(unsigned long code, void* data, unsigned* len); virtual int device_io_control(unsigned long code, void* data, unsigned* len);
virtual int discard_all_images(void) = 0; virtual int discard_all_images(void) = 0;
virtual int get_roller_life(void); // 获取滚轴最大寿命 virtual int get_roller_life(void); // <EFBFBD><EFBFBD>皛朞蓬<EFBFBD><EFBFBD>憭批紊<EFBFBD>?
public: public:
hg_scanner(ScannerSerial serial, const char* dev_name, usb_io* io,int pid); hg_scanner(ScannerSerial serial, const char* dev_name, usb_io* io,int pid);
@ -496,52 +497,52 @@ public:
virtual std::string get_device_model(void); virtual std::string get_device_model(void);
virtual int set_device_model(string str); virtual int set_device_model(string str);
virtual int set_serial_num(string str) = 0; //设置序列号 virtual int set_serial_num(string str) = 0; //霈曄蔭摨誩<EFBFBD><EFBFBD>?
virtual int set_vid_pid(int data) = 0; //设置vidpid virtual int set_vid_pid(int data) = 0; //设置vidpid
virtual int get_vid_pid(int& data) = 0; //获取vidpid virtual int get_vid_pid(int& data) = 0; //获取vidpid
/////////////成功返回:SCANNER_ERR_OK ///////////// /////////////成功返回:SCANNER_ERR_OK /////////////
/////////////失败返回:IO错误码 ///////////// /////////////憭梯揖餈𥪜<EFBFBD>:IO<49>躰秤<E8BAB0>? /////////////
virtual int set_leaflet_scan(void) = 0; //单张扫描 virtual int set_leaflet_scan(void) = 0; //单张扫描
virtual int get_abuot_info(void); //获取软件关于信息 (基类实现) virtual int get_abuot_info(void); //获取软件关于信息 (基类实现)
virtual int restore_default_setting(void); //恢复默认设置 (基类实现) virtual int restore_default_setting(void); //恢复默认设置 (基类实现)
virtual int set_final_image_format(SANE_FinalImgFormat* fmt);//设置图像处理最终输出final())的图像数据格式 (基类实现) *** virtual int set_final_image_format(SANE_FinalImgFormat* fmt);//设置图像处理最终输出final())的图像数据格式 (基类实现) ***
virtual int get_compression_format(void); //获取支持的压缩格式 不支持 virtual int get_compression_format(void); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝻拇聢撘? 銝齿𣈲<E9BDBF>?
virtual int set_compression_format(void); //设置图像数据最终输出的压缩格式 不支持 virtual int set_compression_format(void); //霈曄蔭<EFBFBD><EFBFBD><EFBFBD>唳旿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>讠憬<EFBFBD><EFBFBD> 銝齿𣈲<E9BDBF>?
virtual int set_auto_color_type(void); //设置自动匹配颜色模式 (基类实现) virtual int set_auto_color_type(void); //设置自动匹配颜色模式 (基类实现)
virtual int set_clear_roller_num(void) = 0; //清除滚轴计数 virtual int set_clear_roller_num(void) = 0; //清除滚轴计数
virtual int set_clear_history_num(void) = 0; //清除历史张数 virtual int set_clear_history_num(void) = 0; //清除历史张数
virtual int get_device_code(void); //获取设备编码 不支持 virtual int get_device_code(void); //<EFBFBD><EFBFBD>霈曉<EFBFBD>蝻𣇉<EFBFBD> 銝齿𣈲<E9BDBF>?
virtual int get_scanner_paperon(SANE_Bool& type)=0; //获取设备有无纸张 /*/ type : false无纸不正常状态false true有纸 */ virtual int get_scanner_paperon(SANE_Bool& type)=0; //<EFBFBD><EFBFBD>霈曉<EFBFBD><EFBFBD><EFBFBD>蝥詨<EFBFBD> /*/ type : false<73>删爾嚗<E788BE><E59A97><EFBFBD><EFBFBD><EFBFBD><E59786>alse嚗? true<75>厩爾 */
virtual int get_scan_is_sleep(SANE_Bool& type) = 0; //获取设备是否休眠当中 /*/ type : false休眠不正常状态false true未休眠*/ virtual int get_scan_is_sleep(SANE_Bool& type) = 0; //<EFBFBD><EFBFBD>霈曉<EFBFBD><EFBFBD>臬炏隡𤑳<EFBFBD>敶㮖葉 /*/ type : false隡𤑳<E99AA1><EFBFBD><E59A97><EFBFBD><EFBFBD><EFBFBD><E59786>alse嚗? true<75><EFBFBD><E88AAF>?/
virtual int get_sleep_time(int& data) = 0; //获取功耗模式(休眠) /*/ data > 0*/ virtual int get_sleep_time(int& data) = 0; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>埈芋撘𧶏<EFBFBD>隡𤑳<EFBFBD>嚗? /*/ data > 0*/
virtual int set_sleep_time(int data) = 0; //设置功耗模式(休眠) /*/ data > 0*/ virtual int set_sleep_time(int data) = 0; //霈曄蔭<EFBFBD><EFBFBD>埈芋撘𧶏<EFBFBD>隡𤑳<EFBFBD>嚗? /*/ data > 0*/
virtual int get_history_scan_count(int &data) = 0; //获取历史扫描张数 /*/ data > 0*/ virtual int get_history_scan_count(int &data) = 0; //获取历史扫描张数 /*/ data > 0*/
virtual int get_roller_num(int &data) = 0; //获取滚轮张数 /*/ data > 0*/ virtual int get_roller_num(int &data) = 0; //获取滚轮张数 /*/ data > 0*/
virtual int set_notify_sleep(void) = 0; //唤醒设备 virtual int set_notify_sleep(void) = 0; //唤醒设备
virtual int get_device_log(string &log) = 0; //获取设备日志 /*/ log :储存路径*/ virtual int get_device_log(string &log) = 0; //获取设备日志 /*/ log :储存路径*/
virtual int set_devreboot(int data) = 0; //设置设备重启 /*/ data:0 reboot data:1 1进入loader,0普通重启 virtual int set_devreboot(int data) = 0; //霈曄蔭霈曉<EFBFBD><EFBFBD>滚鍳 /*/ data:0 reboot data:1 1餈𥕦<E9A488>loader,0<><EFBFBD>𡁻<EFBFBD><F0A181BB>?
virtual int set_devshtudown() = 0; //设置设备关机 virtual int set_devshtudown() = 0; //设置设备关机
virtual int set_scan_islock(SANE_Bool type) = 0; //设置设备是否锁定 /*/ type:0解锁1锁定*/ virtual int set_scan_islock(SANE_Bool type) = 0; //霈曄蔭霈曉<EFBFBD><EFBFBD>臬炏<EFBFBD><EFBFBD><EFBFBD> /*/ type:0閫<30><E996AB>嚗?<3F><><EFBFBD>*/
virtual int get_scan_islock(SANE_Bool& type) = 0; //获取设备是否锁定 /*/ type:0解锁1锁定*/ virtual int get_scan_islock(SANE_Bool& type) = 0; //<EFBFBD><EFBFBD>霈曉<EFBFBD><EFBFBD>臬炏<EFBFBD><EFBFBD><EFBFBD> /*/ type:0閫<30><E996AB>嚗?<3F><><EFBFBD>*/
virtual int set_scan_lock_check_val(string str) = 0; //获取设备是否锁定 /*/ str:校验码*/ virtual int set_scan_lock_check_val(string str) = 0; //<EFBFBD><EFBFBD>霈曉<EFBFBD><EFBFBD>臬炏<EFBFBD><EFBFBD><EFBFBD> /*/ str:<3A><EFBFBD><E28ABF>?/
virtual int set_firmware_upgrade(std::string str) = 0; //固件升级 /*/ str:文件名路径*/ virtual int set_firmware_upgrade(std::string str) = 0; //<EFBFBD>箔辣<EFBFBD><EFBFBD>漣 /*/ str:<3A><><EFBFBD>滩楝敺?/
virtual int set_clean_paper_road() = 0; //清理纸道 virtual int set_clean_paper_road() = 0; //清理纸道
virtual int get_dev_islock_file(int &data) = 0; //获取设备文件 /*/ data:0 未上锁1 上锁。-1 未发现黑名单列表 -2列表没有信息*/ virtual int get_dev_islock_file(int &data) = 0; //<EFBFBD><EFBFBD>霈曉<EFBFBD><EFBFBD><EFBFBD>辣 /*/ data:0 <20><EFBFBD><E88AAF><EFBFBD><EFBFBD>1 銝𢠃<E98A9D><F0A2A083>?1 <20><EFBFBD><E88AB8><EFBFBD><E59C88><EFBFBD><E6BB9A>𡑒” -2<>𡑒”瘝⊥<E7989D>靽⊥<E99DBD>*/
virtual int set_dev_islock_file(int data) = 0; //设置设备文件 /*/ data:0 未上锁1 上锁*/ virtual int set_dev_islock_file(int data) = 0; //设置设备文件 /*/ data:0 未上锁1 上锁*/
virtual int get_scan_mode(bool& type) ; //获取设备是否计数模式 /*/ type:false计数模式 true非计数模式 virtual int get_scan_mode(bool& type) ; //<EFBFBD><EFBFBD>霈曉<EFBFBD><EFBFBD>臬炏霈⊥㺭璅<EFBFBD> /*/ type:false霈⊥㺭璅<E79285> true<75>噼恣<E599BC>唳芋撘?
virtual int set_speed_mode(int data) = 0; //设置速度模式 /*/ 设备不同值不同,详情见子类注释 virtual int set_speed_mode(int data) = 0; //霈曄蔭<EFBFBD>笔漲璅<EFBFBD> /*/ 霈曉<E99C88>銝滚<E98A9D><E6BB9A><EFBFBD><E6BD94><EFBFBD>霂行<E99C82><EFBFBD><E996AB>蝐餅釣<E9A485>?
virtual int get_speed_mode(int &data) = 0; //获取速度模式 /*/ 设备不同值不同,详情见子类注释 virtual int get_speed_mode(int &data) = 0; //<EFBFBD><EFBFBD><EFBFBD>笔漲璅<EFBFBD> /*/ 霈曉<E99C88>銝滚<E98A9D><E6BB9A><EFBFBD><E6BD94><EFBFBD>霂行<E99C82><EFBFBD><E996AB>蝐餅釣<E9A485>?
virtual int set_distortion_image(bool type); //设置畸变校正图 /*/ 基类处理 virtual int set_distortion_image(bool type); //霈曄蔭<EFBFBD><EFBFBD><EFBFBD>⊥迤<EFBFBD>? /*/ <20>箇掩憭<E68EA9><E686AD>
virtual int get_distortion_check_val(int &val); //获取自动计算畸变校正值 /*/ 基类处理 virtual int get_distortion_check_val(int &val); //<EFBFBD><EFBFBD><EFBFBD>芸𢆡霈∠<EFBFBD><EFBFBD><EFBFBD><EFBFBD>⊥迤<EFBFBD>? /*/ <20>箇掩憭<E68EA9><E686AD>
virtual int set_devs_distortion_check_val(float data) = 0; //设置畸变矫正值 float; virtual int set_devs_distortion_check_val(float data) = 0; //霈曄蔭<EFBFBD><EFBFBD><EFBFBD>急迤<EFBFBD>? float;
virtual int get_devs_distortion_check_val(float& data) = 0; //获取设备畸变值 float; virtual int get_devs_distortion_check_val(float& data) = 0; //<EFBFBD><EFBFBD>霈曉<EFBFBD><EFBFBD><EFBFBD><EFBFBD>? float;
virtual int set_auto_flat(int data) = 0; //设置自动平场校正 virtual int set_auto_flat(int data) = 0; //设置自动平场校正
// data:0(ALL) 1(200dpi、gray) 2(200dpi、color) 3(300dpi、gray) 4(300dpi、color) 5(600dpi、gray) 6(600dpi、color) // data:0(ALL) 1(200dpi、gray) 2(200dpi、color) 3(300dpi、gray) 4(300dpi、color) 5(600dpi、gray) 6(600dpi、color)
virtual int set_updata0303(void) ; virtual int set_updata0303(void) ;
virtual int get_motor_board_ver(string &ver); //获取G239电机板的固件号 //3399设备支持 virtual int get_motor_board_ver(string &ver); //<EFBFBD><EFBFBD>G239<EFBFBD>菜㦤<EFBFBD><EFBFBD><EFBFBD>箔辣<EFBFBD>?//3399霈曉<E99C88><E69B89><EFBFBD>
virtual int set_devs_time(string times); //设置设备时间 //3399设备支持 virtual int set_devs_time(string times); //设置设备时间 //3399设备支持
virtual int get_devs_time(string &times); //获取设备时间 //3399设备支持 virtual int get_devs_time(string &times); //获取设备时间 //3399设备支持
virtual int get_devs_cpu(int& cpu); //获取设备内存大小(kb) virtual int get_devs_cpu(int& cpu); //获取设备内存大小(kb)

View File

@ -87,7 +87,7 @@ hg_scanner_200::hg_scanner_200(const char* dev_name,int pid, usb_io* io) : hg_sc
dsp_config_.value = 0; dsp_config_.value = 0;
#ifndef MAPPING_FUNCTION_IN_BASE #ifndef MAPPING_FUNCTION_IN_BASE
init_setting_map(setting_map_, ARRAY_SIZE(setting_map_));//优先初始化 init_setting_map(setting_map_, ARRAY_SIZE(setting_map_));//优先åˆ<EFBFBD>å§åŒ?
#endif #endif
if (init_settings(0x200)) if (init_settings(0x200))
init_settings((jsontext1 + jsontext2 + jsontext3).c_str()); init_settings((jsontext1 + jsontext2 + jsontext3).c_str());
@ -305,13 +305,17 @@ int hg_scanner_200::do_start(void)
} }
printf_devconfig(); printf_devconfig();
SANE_Bool type = false; SANE_Bool type = false;
ret = get_scanner_paperon(type);
if (!type) if (!no_paper_check_)
{ {
status_ = ret = SCANNER_ERR_DEVICE_NO_PAPER; ret = get_scanner_paperon(type);
//notify_ui_working_status(STATU_DESC_SCANNER_ERR_DEVICE_NO_PAPER, SANE_EVENT_ERROR, status_); if (!type)
VLOG_MINI_1(LOG_LEVEL_WARNING, "device start status is(%s)\n", hg_log::lang_load(ID_STATU_DESC_SCANNER_ERR_DEVICE_NO_PAPER)); {
return ret; status_ = ret = SCANNER_ERR_DEVICE_NO_PAPER;
//notify_ui_working_status(STATU_DESC_SCANNER_ERR_DEVICE_NO_PAPER, SANE_EVENT_ERROR, status_);
VLOG_MINI_1(LOG_LEVEL_WARNING, "device start status is(%s)\n", hg_log::lang_load(ID_STATU_DESC_SCANNER_ERR_DEVICE_NO_PAPER));
return ret;
}
} }
USBCB usb = { setting3288dsp::START_COMMAND, img_conf_.scannum, 0 }; USBCB usb = { setting3288dsp::START_COMMAND, img_conf_.scannum, 0 };
@ -487,7 +491,7 @@ int hg_scanner_200::writedown_device_configuration(bool type,setting_hardware::H
int ret = SCANNER_ERR_OK, int ret = SCANNER_ERR_OK,
len = 0; len = 0;
setting_hardware::HGSCANCONF_DSP p = dsp_config_; //不得改变外部的值 setting_hardware::HGSCANCONF_DSP p = dsp_config_; //ä¸<EFBFBD>得改å<EFBFBD>˜å¤éƒ¨çš„å€?
if (!d) if (!d)
d = &p; d = &p;
@ -684,7 +688,7 @@ int hg_scanner_200::on_is_auto_paper(bool isautopaper)
int hg_scanner_200::on_cis_get_image(bool isautopaper) int hg_scanner_200::on_cis_get_image(bool isautopaper)
{ {
is_cis_image = isautopaper; is_cis_image = isautopaper;
dsp_config_.params_dsp.isCorrect = isautopaper == true ? 0 : 1; //0设置获取cis原图1校正之后的图 dsp_config_.params_dsp.isCorrect = isautopaper == true ? 0 : 1; //0设置获å<EFBFBD>cis原å¾ï¼?æ ¡æ­£ä¹å<E280B9>Žçš„å¾
return writedown_device_configuration(); return writedown_device_configuration();
} }
int hg_scanner_200::on_process_double_paper(bool type) int hg_scanner_200::on_process_double_paper(bool type)
@ -742,7 +746,7 @@ void hg_scanner_200::writedown_image_configuration(void)
ic.hardwarecaps.skrewdetectlevel = dsp_config_.params_dsp.screw_detect_level; ic.hardwarecaps.skrewdetectlevel = dsp_config_.params_dsp.screw_detect_level;
// ic.hardwarecaps.is_autopaper = dsp_config_.params_dsp.is_autopaper; // ic.hardwarecaps.is_autopaper = dsp_config_.params_dsp.is_autopaper;
ic.hardwarecaps.capturepixtype = 0; //暂无参数 获取图像类型 ic.hardwarecaps.capturepixtype = 0; //暂无参数 获取图像类型
ic.hardwarecaps.lowpowermode = LowPowerMode::Min_None; //暂无参数 设置休眠时间 两个参数3399未使用 ic.hardwarecaps.lowpowermode = LowPowerMode::Min_None; //æšæ— å<EFBFBD>æ•° 设置休眠时间 两个å<C2AA>æ•°3399未使ç”?
image_configuration(ic); image_configuration(ic);
//agreement(); //agreement();
@ -770,7 +774,7 @@ std::string hg_scanner_200::get_firmware_version()
{ {
char buf[20] = { 0 }; char buf[20] = { 0 };
int ret = SCANNER_ERR_OK, int ret = SCANNER_ERR_OK,
len = 8; //协议定义长度为8 300 400 =10 len = 8; //å<EFBFBD><EFBFBD>议定义长度ä¸? 300 400 =10
USBCB cmd = { setting3288dsp::GET_FW_VERSION, len, 0 }; USBCB cmd = { setting3288dsp::GET_FW_VERSION, len, 0 };
{ {
@ -788,7 +792,7 @@ std::string hg_scanner_200::get_serial_num()
{ {
char buf[20] = { 0 }; char buf[20] = { 0 };
int ret = SCANNER_ERR_OK, int ret = SCANNER_ERR_OK,
len = 12; //协议定义长度为8 300 400 =10 len = 12; //å<EFBFBD><EFBFBD>议定义长度ä¸? 300 400 =10
USBCB cmd = { setting3288dsp::GET_SERIAL, len, 0 }; USBCB cmd = { setting3288dsp::GET_SERIAL, len, 0 };
{ {

View File

@ -89,7 +89,7 @@ hg_scanner_300::hg_scanner_300(const char* dev_name,int pid, usb_io* io) :
{ {
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "hg_scanner_300(%s) constructing ...\n", hg_log::format_ptr(this).c_str()); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "hg_scanner_300(%s) constructing ...\n", hg_log::format_ptr(this).c_str());
dsp_config.value = 0; dsp_config.value = 0;
dsp_config.params_3288.enableLed = 1; //默认值 dsp_config.params_3288.enableLed = 1; //暺䁅恕<EFBFBD>?
dsp_config.params_3288.isCorrect = 1; dsp_config.params_3288.isCorrect = 1;
int ret = initdevice(); int ret = initdevice();
@ -118,7 +118,7 @@ hg_scanner_300::hg_scanner_300(const char* dev_name,int pid, usb_io* io) :
firmware_sup_log_export_G300_ = year_date.compare("230430") >= 0 ? true : false; firmware_sup_log_export_G300_ = year_date.compare("230430") >= 0 ? true : false;
#ifndef MAPPING_FUNCTION_IN_BASE #ifndef MAPPING_FUNCTION_IN_BASE
init_setting_map(setting_map_, ARRAY_SIZE(setting_map_));//优先初始化 init_setting_map(setting_map_, ARRAY_SIZE(setting_map_));//隡睃<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
#endif #endif
if (init_settings(pid_)) if (init_settings(pid_))
@ -159,11 +159,11 @@ void hg_scanner_300::thread_handle_usb_read(void)
} }
//printf("usb.u32_Data = %d ret = %d\r\n",usb.u32_Data,ret); //printf("usb.u32_Data = %d ret = %d\r\n",usb.u32_Data,ret);
//如果设备出现卡纸 或者双张等设备信息问题需要等到设备进行发送stop才能停止。 所以始终以 "停止" 消息为结束信号 //<EFBFBD><EFBFBD>霈曉<EFBFBD><EFBFBD>箇緵<EFBFBD>∠爾 <20>𤥁<EFBFBD><F0A4A581><EFBFBD>撘删<E69298>霈曉<E99C88>靽⊥<E99DBD><E28AA5><EFBFBD>嚗屸<E59A97><EFBFBD><E996AC><EFBFBD>啗挽憭<E68CBD><E686AD><EFBFBD><E98AB5><EFBFBD><EFBFBD>top<6F><EFBFBD><E6BBA9>𨀣迫<F0A880A3>?<3F><>隞亙<E99A9E><EFBFBD>誑 "<22>𨀣迫" 瘨<><E798A8>銝箇<E98A9D><E7AE87>煺縑<E785BA>?
//如果有图的情况下,并且卡纸或双张等,设备会先发送卡纸双张信息。所以接受到错误信息之后,仍需要把图像取出来。 //<EFBFBD><EFBFBD><EFBFBD>匧㦛<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>僎銝𥪜㨃蝥豢<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝑㚁<EFBFBD>霈曉<EFBFBD>隡𡁜<EFBFBD><EFBFBD><EFBFBD><EFBFBD>㨃蝥詨<EFBFBD>撘牐縑<EFBFBD><EFBFBD><EFBFBD><EFBFBD>隞交𦻖<EFBFBD><EFBFBD><EFBFBD>躰秤靽⊥<EFBFBD>銋见<EFBFBD>嚗䔶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>硋枂<EFBFBD><EFBFBD>?
if (ret == SCANNER_ERR_DEVICE_STOPPED) if (ret == SCANNER_ERR_DEVICE_STOPPED)
{ {
status_ = !savestatus_.empty() ? savestatus_[0] : SCANNER_ERR_OK;//以第一个消息为准 status_ = !savestatus_.empty() ? savestatus_[0] : SCANNER_ERR_OK;//隞亦洵銝<EFBFBD>銝芣<EFBFBD><EFBFBD>臭蛹<EFBFBD>?
savestatus_.clear(); savestatus_.clear();
if (user_cancel_) if (user_cancel_)
{ {
@ -240,7 +240,7 @@ void hg_scanner_300::thread_handle_usb_read(void)
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "%s\n", hg_scanner_err_description(status_)); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "%s\n", hg_scanner_err_description(status_));
break; break;
} }
if (sw.elapsed_ms() > 30000 && img_conf_.resolution_dst != 600)//防止状态信息一直取不上来导致卡死 if (sw.elapsed_ms() > 30000 && img_conf_.resolution_dst != 600)//<EFBFBD>脫迫<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝滢<EFBFBD><EFBFBD>亙紡<EFBFBD>游㨃甇?
{ {
if ((img_conf_.papertype == TwSS::MaxSize || img_conf_.papertype == TwSS::USStatement) && pid_ == 0x0300 && firmware_sup_dpi_600) if ((img_conf_.papertype == TwSS::MaxSize || img_conf_.papertype == TwSS::USStatement) && pid_ == 0x0300 && firmware_sup_dpi_600)
{ {
@ -248,7 +248,7 @@ void hg_scanner_300::thread_handle_usb_read(void)
} }
else else
{ {
if (!savestatus_.empty())//以第一个消息为准 if (!savestatus_.empty())//隞亦洵銝<EFBFBD>銝芣<EFBFBD><EFBFBD>臭蛹<EFBFBD>?
{ {
status_ = savestatus_[0]; status_ = savestatus_[0];
} }
@ -260,7 +260,7 @@ void hg_scanner_300::thread_handle_usb_read(void)
} }
if (sw.elapsed_s() > 130) if (sw.elapsed_s() > 130)
{ {
if (!savestatus_.empty())//以第一个消息为准 if (!savestatus_.empty())//隞亦洵銝<EFBFBD>銝芣<EFBFBD><EFBFBD>臭蛹<EFBFBD>?
{ {
status_ = savestatus_[0]; status_ = savestatus_[0];
} }
@ -271,7 +271,7 @@ void hg_scanner_300::thread_handle_usb_read(void)
} }
if (ret == SCANNER_ERR_OK && usb.u32_Count > 0) if (ret == SCANNER_ERR_OK && usb.u32_Count > 0)
{ {
int totalNum = usb.u32_Count & 0x3fffffff; // 2022-08-04: 兼容Android默认图片大小均在1GB以内 int totalNum = usb.u32_Count & 0x3fffffff; // 2022-08-04: <EFBFBD>澆捆Android嚗屸<EFBFBD>霈文㦛<EFBFBD><EFBFBD>之撠誩<EFBFBD><EFBFBD>?GB隞亙<E99A9E>
VLOG_MINI_2(LOG_LEVEL_WARNING, "Get Scaner Image Size:%d bytes,Image Num[%d]\n", totalNum,img_num); VLOG_MINI_2(LOG_LEVEL_WARNING, "Get Scaner Image Size:%d bytes,Image Num[%d]\n", totalNum,img_num);
img_num++; img_num++;
if (totalNum) if (totalNum)
@ -371,18 +371,21 @@ int hg_scanner_300::do_start(void)
return status_; return status_;
} }
ret = get_scanner_paperon(val); if (!no_paper_check_)
if (!val && ret == SCANNER_ERR_OK)
{ {
status_ = SCANNER_ERR_DEVICE_NO_PAPER; ret = get_scanner_paperon(val);
if (!val && ret == SCANNER_ERR_OK)
{
status_ = SCANNER_ERR_DEVICE_NO_PAPER;
return status_; return status_;
}
} }
if (ret != SCANNER_ERR_OK) if (ret != SCANNER_ERR_OK)
{ {
return ret; return ret;
} }
if (is_devs_sleep_)//设备在睡眠的状态当中获取固件是失败的,所以在这个地方进行标志位设置。(总感觉不保险) if (is_devs_sleep_)//霈曉<EFBFBD><EFBFBD>函辺<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝剛繮<EFBFBD>硋𤐄隞嗆糓憭梯揖<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>隞亙銁餈嗘葵<EFBFBD>唳䲮餈𥡝<EFBFBD><EFBFBD><EFBFBD><EFBFBD>雿滩挽蝵柴<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>閫劐<EFBFBD>靽嗪埯嚗?
{ {
is_devs_sleep_ = false; is_devs_sleep_ = false;
set_kernelsnap_ver(); set_kernelsnap_ver();
@ -807,7 +810,7 @@ int hg_scanner_300::initdevice()
if (status_ != SCANNER_ERR_DEVICE_SLEEPING) if (status_ != SCANNER_ERR_DEVICE_SLEEPING)
{ {
set_kernelsnap_ver(); set_kernelsnap_ver();
is_devs_sleep_ = false; // 睡眠唤醒 客户提前点击设置这边固件版本号 还没有做判断的 is_devs_sleep_ = false; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><E691B0><EFBCB8>𣂼<EFBFBD><F0A382BC>孵稬霈曄蔭餈躰器<E8BAB0>箔辣<E7AE94><E8BEA3>𧋦<EFBFBD>?餈䀹瓷<E480B9><EFBFBD><E58CA7>斗鱏<E69697>?
} }
return status_; return status_;
} }
@ -839,7 +842,7 @@ void hg_scanner_300::writedown_image_configuration(void)
// ic.hardwarecaps.is_autopaper = dsp_config_.params_dsp.is_autopaper; // ic.hardwarecaps.is_autopaper = dsp_config_.params_dsp.is_autopaper;
ic.hardwarecaps.capturepixtype = 0; //暂无参数 获取图像类型 ic.hardwarecaps.capturepixtype = 0; //暂无参数 获取图像类型
ic.hardwarecaps.lowpowermode = LowPowerMode::Min_None; //暂无参数 设置休眠时间 两个参数3399未使用 ic.hardwarecaps.lowpowermode = LowPowerMode::Min_None; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㺭 霈曄蔭隡𤑳<E99AA1><F0A491B3>園𡢿 銝支葵<E694AF><E891B5>㺭3399<39>芯蝙<E88AAF>?
image_configuration(ic); image_configuration(ic);
} }
void hg_scanner_300::printf_devconfig(setting_hardware::HGSCANCONF_3288 *d) void hg_scanner_300::printf_devconfig(setting_hardware::HGSCANCONF_3288 *d)
@ -980,7 +983,7 @@ int hg_scanner_300::get_correction_image(int inx , int dpi, int mode)
cv::Mat white_mat; cv::Mat white_mat;
cv::Mat black_mat;; cv::Mat black_mat;;
for (size_t i = 0; i < 2; i++) //黑白一起保存下来 for (size_t i = 0; i < 2; i++) //暺𤑳蒾銝<EFBFBD>韏瑚<EFBFBD>摮䀝<EFBFBD><EFBFBD>?
{ {
vector<unsigned char> imagedata; vector<unsigned char> imagedata;
@ -1022,7 +1025,7 @@ int hg_scanner_300::get_correction_image(int inx , int dpi, int mode)
if (mat.empty()) if (mat.empty())
{ {
VLOG_MINI_1(LOG_LEVEL_WARNING, "get_correction_image image is NULL:%d\n", image_info.info.params.status); VLOG_MINI_1(LOG_LEVEL_WARNING, "get_correction_image image is NULL:%d\n", image_info.info.params.status);
return SCANNER_ERR_NO_DATA; //只要有一张图没有 直接退了 return SCANNER_ERR_NO_DATA; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>撘惩㦛瘝⊥<EFBFBD> <20>湔𦻖<E6B994><F0A6BB96>鈭?
} }
float f = 0.0; float f = 0.0;
@ -1055,7 +1058,7 @@ std::string hg_scanner_300::get_firmware_version()
{ {
char buf[20] = { 0 }; char buf[20] = { 0 };
int ret = SCANNER_ERR_OK, int ret = SCANNER_ERR_OK,
len = 10; //协议定义长度为10 100 200 =8 len = 10; //<EFBFBD>讛悅摰帋<EFBFBD><EFBFBD>踹漲銝?0 100 200 =8
USBCB cmd = { setting3288dsp::GET_FW_VERSION,len,0,}; USBCB cmd = { setting3288dsp::GET_FW_VERSION,len,0,};
{ {

View File

@ -84,7 +84,7 @@ hg_scanner_306::hg_scanner_306(const char* dev_name,int pid, usb_io* io) :
{ {
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "hg_scanner_306(%s) constructing ...\n", hg_log::format_ptr(this).c_str()); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "hg_scanner_306(%s) constructing ...\n", hg_log::format_ptr(this).c_str());
dsp_config.value = 0; dsp_config.value = 0;
dsp_config.params_7010.enableLed = 1; //默认值 dsp_config.params_7010.enableLed = 1; //暺䁅恕<EFBFBD>?
dsp_config.params_7010.isCorrect = 1; dsp_config.params_7010.isCorrect = 1;
int ret = get_device_type(firmware_sup_device_7010); int ret = get_device_type(firmware_sup_device_7010);
@ -101,7 +101,7 @@ hg_scanner_306::hg_scanner_306(const char* dev_name,int pid, usb_io* io) :
} }
#ifndef MAPPING_FUNCTION_IN_BASE #ifndef MAPPING_FUNCTION_IN_BASE
init_setting_map(setting_map_, ARRAY_SIZE(setting_map_));//优先初始化 init_setting_map(setting_map_, ARRAY_SIZE(setting_map_));//隡睃<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
#endif #endif
if (init_settings(pid_)) if (init_settings(pid_))
init_settings((jsontext1 + jsontext2 + jsontext3).c_str()); init_settings((jsontext1 + jsontext2 + jsontext3).c_str());
@ -136,11 +136,11 @@ void hg_scanner_306::thread_handle_usb_read(void)
} }
//printf("usb.u32_Data = %d ret = %d\r\n",usb.u32_Data,ret); //printf("usb.u32_Data = %d ret = %d\r\n",usb.u32_Data,ret);
//如果设备出现卡纸 或者双张等设备信息问题需要等到设备进行发送stop才能停止。 所以始终以 "停止" 消息为结束信号 //<EFBFBD><EFBFBD>霈曉<EFBFBD><EFBFBD>箇緵<EFBFBD>∠爾 <20>𤥁<EFBFBD><F0A4A581><EFBFBD>撘删<E69298>霈曉<E99C88>靽⊥<E99DBD><E28AA5><EFBFBD>嚗屸<E59A97><EFBFBD><E996AC><EFBFBD>啗挽憭<E68CBD><E686AD><EFBFBD><E98AB5><EFBFBD><EFBFBD>top<6F><EFBFBD><E6BBA9>𨀣迫<F0A880A3>?<3F><>隞亙<E99A9E><EFBFBD>誑 "<22>𨀣迫" 瘨<><E798A8>銝箇<E98A9D><E7AE87>煺縑<E785BA>?
//如果有图的情况下,并且卡纸或双张等,设备会先发送卡纸双张信息。所以接受到错误信息之后,仍需要把图像取出来。 //<EFBFBD><EFBFBD><EFBFBD>匧㦛<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>僎銝𥪜㨃蝥豢<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝑㚁<EFBFBD>霈曉<EFBFBD>隡𡁜<EFBFBD><EFBFBD><EFBFBD><EFBFBD>㨃蝥詨<EFBFBD>撘牐縑<EFBFBD><EFBFBD><EFBFBD><EFBFBD>隞交𦻖<EFBFBD><EFBFBD><EFBFBD>躰秤靽⊥<EFBFBD>銋见<EFBFBD>嚗䔶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>硋枂<EFBFBD><EFBFBD>?
if (ret == SCANNER_ERR_DEVICE_STOPPED) if (ret == SCANNER_ERR_DEVICE_STOPPED)
{ {
status_ = !savestatus_.empty() ? savestatus_[0] : SCANNER_ERR_OK;//以第一个消息为准 status_ = !savestatus_.empty() ? savestatus_[0] : SCANNER_ERR_OK;//隞亦洵銝<EFBFBD>銝芣<EFBFBD><EFBFBD>臭蛹<EFBFBD>?
savestatus_.clear(); savestatus_.clear();
if (user_cancel_) if (user_cancel_)
{ {
@ -217,7 +217,7 @@ void hg_scanner_306::thread_handle_usb_read(void)
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "%s\n", hg_scanner_err_description(status_)); VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "%s\n", hg_scanner_err_description(status_));
break; break;
} }
if (sw.elapsed_ms() > 30000 && img_conf_.resolution_dst != 600)//防止状态信息一直取不上来导致卡死 if (sw.elapsed_ms() > 30000 && img_conf_.resolution_dst != 600)//<EFBFBD>脫迫<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝滢<EFBFBD><EFBFBD>亙紡<EFBFBD>游㨃甇?
{ {
if ((img_conf_.papertype == TwSS::MaxSize || img_conf_.papertype == TwSS::USStatement) && pid_ == 0x0300 && firmware_sup_dpi_600) if ((img_conf_.papertype == TwSS::MaxSize || img_conf_.papertype == TwSS::USStatement) && pid_ == 0x0300 && firmware_sup_dpi_600)
{ {
@ -225,19 +225,19 @@ void hg_scanner_306::thread_handle_usb_read(void)
} }
else else
{ {
if (!savestatus_.empty())//以第一个消息为准 if (!savestatus_.empty())//隞亦洵銝<EFBFBD>銝芣<EFBFBD><EFBFBD>臭蛹<EFBFBD>?
{ {
status_ = savestatus_[0]; status_ = savestatus_[0];
} }
savestatus_.clear(); savestatus_.clear();
hg_log::log(LOG_LEVEL_WARNING, "Get Status TimeOut,get image out 30S\n"); hg_log::log(LOG_LEVEL_WARNING, "Get Status TimeOut,get image out 30S\n");
notify_ui_working_status(hg_log::lang_load(ID_STATU_DESC_SCANNER_ERR_DEVICE_GET_IMAGE_OUTTIME), SANE_EVENT_ERROR, status_); // 鍙栧浘閫氫俊瓒呮椂 notify_ui_working_status(hg_log::lang_load(ID_STATU_DESC_SCANNER_ERR_DEVICE_GET_IMAGE_OUTTIME), SANE_EVENT_ERROR, status_); // <EFBFBD>蹱𡵆瘚㗛𢥫瘞思<EFBFBD><EFBFBD>鍦䴴璊?
break; break;
} }
} }
if (sw.elapsed_s() > 130) if (sw.elapsed_s() > 130)
{ {
if (!savestatus_.empty())//以第一个消息为准 if (!savestatus_.empty())//隞亦洵銝<EFBFBD>銝芣<EFBFBD><EFBFBD>臭蛹<EFBFBD>?
{ {
status_ = savestatus_[0]; status_ = savestatus_[0];
} }
@ -327,18 +327,22 @@ int hg_scanner_306::do_start(void)
return status_; return status_;
} }
ret = get_scanner_paperon(val); if (!no_paper_check_)
if (!val && ret == SCANNER_ERR_OK)
{ {
status_ = SCANNER_ERR_DEVICE_NO_PAPER; ret = get_scanner_paperon(val);
if (!val && ret == SCANNER_ERR_OK)
{
status_ = SCANNER_ERR_DEVICE_NO_PAPER;
return status_; return status_;
}
} }
if (ret != SCANNER_ERR_OK) if (ret != SCANNER_ERR_OK)
{ {
return ret; return ret;
} }
if (is_devs_sleep_)//设备在睡眠的状态当中获取固件是失败的,所以在这个地方进行标志位设置。(总感觉不保险) if (is_devs_sleep_)//霈曉<EFBFBD><EFBFBD>函辺<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝剛繮<EFBFBD>硋𤐄隞嗆糓憭梯揖<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>隞亙銁餈嗘葵<EFBFBD>唳䲮餈𥡝<EFBFBD><EFBFBD><EFBFBD><EFBFBD>雿滩挽蝵柴<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>閫劐<EFBFBD>靽嗪埯嚗?
{ {
is_devs_sleep_ = false; is_devs_sleep_ = false;
set_kernelsnap_ver(); set_kernelsnap_ver();
@ -765,7 +769,7 @@ int hg_scanner_306::initdevice()
if (status_ != SCANNER_ERR_DEVICE_SLEEPING) if (status_ != SCANNER_ERR_DEVICE_SLEEPING)
{ {
set_kernelsnap_ver(); set_kernelsnap_ver();
is_devs_sleep_ = false; // 睡眠唤醒 客户提前点击设置这边固件版本号 还没有做判断的 is_devs_sleep_ = false; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><E691B0><EFBCB8>𣂼<EFBFBD><F0A382BC>孵稬霈曄蔭餈躰器<E8BAB0>箔辣<E7AE94><E8BEA3>𧋦<EFBFBD>?餈䀹瓷<E480B9><EFBFBD><E58CA7>斗鱏<E69697>?
} }
return SCANNER_ERR_OK; return SCANNER_ERR_OK;
} }
@ -797,7 +801,7 @@ void hg_scanner_306::writedown_image_configuration(void)
// ic.hardwarecaps.is_autopaper = dsp_config_.params_dsp.is_autopaper; // ic.hardwarecaps.is_autopaper = dsp_config_.params_dsp.is_autopaper;
ic.hardwarecaps.capturepixtype = 0; //暂无参数 获取图像类型 ic.hardwarecaps.capturepixtype = 0; //暂无参数 获取图像类型
ic.hardwarecaps.lowpowermode = LowPowerMode::Min_None; //暂无参数 设置休眠时间 两个参数3399未使用 ic.hardwarecaps.lowpowermode = LowPowerMode::Min_None; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㺭 霈曄蔭隡𤑳<E99AA1><F0A491B3>園𡢿 銝支葵<E694AF><E891B5>㺭3399<39>芯蝙<E88AAF>?
image_configuration(ic); image_configuration(ic);
} }
void hg_scanner_306::printf_devconfig(setting_hardware::HGSCANCONF_7010 *d) void hg_scanner_306::printf_devconfig(setting_hardware::HGSCANCONF_7010 *d)
@ -877,7 +881,7 @@ int hg_scanner_306::get_correction_image(int inx , int dpi, int mode)
cv::Mat white_mat; cv::Mat white_mat;
cv::Mat black_mat;; cv::Mat black_mat;;
for (size_t i = 0; i < 2; i++) //黑白一起保存下来 for (size_t i = 0; i < 2; i++) //暺𤑳蒾銝<EFBFBD>韏瑚<EFBFBD>摮䀝<EFBFBD><EFBFBD>?
{ {
vector<unsigned char> imagedata; vector<unsigned char> imagedata;
@ -915,7 +919,7 @@ int hg_scanner_306::get_correction_image(int inx , int dpi, int mode)
if (mat.empty()) if (mat.empty())
{ {
VLOG_MINI_1(LOG_LEVEL_WARNING, "get_correction_image image is NULL:%d\n", image_info.info.params.status); VLOG_MINI_1(LOG_LEVEL_WARNING, "get_correction_image image is NULL:%d\n", image_info.info.params.status);
return SCANNER_ERR_NO_DATA; //只要有一张图没有 直接退了 return SCANNER_ERR_NO_DATA; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>撘惩㦛瘝⊥<EFBFBD> <20>湔𦻖<E6B994><F0A6BB96>鈭?
} }
float f = 0.0; float f = 0.0;
@ -941,7 +945,7 @@ std::string hg_scanner_306::get_firmware_version()
{ {
char buf[20] = { 0 }; char buf[20] = { 0 };
int ret = SCANNER_ERR_OK, int ret = SCANNER_ERR_OK,
len = 10; //协议定义长度为10 100 200 =8 len = 10; //<EFBFBD>讛悅摰帋<EFBFBD><EFBFBD>踹漲銝?0 100 200 =8
USBCB cmd = { setting3288dsp::GET_FW_VERSION,len,0,}; USBCB cmd = { setting3288dsp::GET_FW_VERSION,len,0,};
{ {
@ -1228,13 +1232,13 @@ int hg_scanner_306::set_scan_lock_check_val(string str)
} }
//#enum scanner_err //#enum scanner_err
//#{ //#{
//# SCANNER_ERR_OK = 0, //设备正常状态 //# SCANNER_ERR_OK = 0, //霈曉<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
//# SCANNER_ERR_SLEEP, 1 //设备处于休眠当中 //# SCANNER_ERR_SLEEP, 1 //设备处于休眠当中
//# SCANNER_ERR_UPDATE_OK, 2 //设备更新:成功 //# SCANNER_ERR_UPDATE_OK, 2 //霈曉<EFBFBD><EFBFBD>湔鰵嚗𡁏<EFBFBD><EFBFBD>?
//# SCANNER_ERR_UPDATE_UPDATAING, 3 //设备更新:进行中 //# SCANNER_ERR_UPDATE_UPDATAING, 3 //设备更新:进行中
//# SCANNER_ERR_UPDATE_CHECK_VAL_ERROR, 4 //设备更新:校验检测错误 //# SCANNER_ERR_UPDATE_CHECK_VAL_ERROR, 4 //霈曉<EFBFBD><EFBFBD>湔鰵嚗𡁏嵗撉峕<EFBFBD>瘚钅<EFBFBD>霂?
//# SCANNER_ERR_UPDATE_CHECK_FILE_LOST, 5 //设备更新:文件丢失 //# SCANNER_ERR_UPDATE_CHECK_FILE_LOST, 5 //霈曉<EFBFBD><EFBFBD>湔鰵嚗𡁏<EFBFBD>隞嗡腺憭?
//# SCANNER_ERR_UPDATE_UNZIP_FAIL, 6 //设备更新:解压失败 //# SCANNER_ERR_UPDATE_UNZIP_FAIL, 6 //霈曉<EFBFBD><EFBFBD>湔鰵嚗朞圾<EFBFBD>见仃韐?
//#}; //#};
int hg_scanner_306::set_firmware_upgrade(std::string str) int hg_scanner_306::set_firmware_upgrade(std::string str)
{ {