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

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;
}
if (hg_log::ini_get("func", "no-paper-chk") == "1")
no_paper_check_ = true;
std::string mem = hg_log::ini_get("mem", "max_img");
if (!mem.empty())
{

View File

@ -89,9 +89,9 @@ class hg_scanner
std::string family_;
std::string save_multiout; //保存多留输出类型
bool save_sizecheck;
bool read_over_with_no_data_; // 针对第三方调用在最后一段数据时是否返回“SCANNER_ERR_NO_DATA”
int is_color_type_;//保存最后下发到设备的颜色类型
bool have_max_size; //条目是否存在最大尺寸
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_;//靽嘥<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𦒘<EFBFBD><EFBFBD><EFBFBD>霈曉<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>脩掩<EFBFBD>?
bool have_max_size; //<EFBFBD>∠𤌍<EFBFBD>臬炏摮睃銁<EFBFBD><EFBFBD>憭批偕撖?
sane_callback ui_ev_cb_;
@ -135,17 +135,17 @@ class hg_scanner
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
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:
// 设置接口
protected:
// 配置序号映射数组各子类必须重载“init_setting_map”方法以初始化该数组 --> 2022-05-09基类中以title自动匹配功能序号子类不必再处理并屏蔽此项工作
// 比如: 某型设备的“颜色模式”功能号为1 setting_map_[HG_BASE_SETTING_INDEX_COLOR_MODE] = 1
// <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>賣迨憿孵極雿?
// 瘥𥪜<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函数即可
// 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_get_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_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_cis_get_image(bool type) = 0;
virtual int on_process_double_paper(bool type) = 0; //双张图像校验
virtual int on_detect_lens_dirty(bool &type); //检测镜头脏污
virtual int on_set_period(int val); //PWM占空比
virtual int on_detect_lens_dirty(bool &type); //<EFBFBD>瘚钅<EFBFBD>憭渲<EFBFBD>瘙?
virtual int on_set_period(int val); //PWM<EFBFBD>删征瘥?
protected:
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_islock_read();
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();
// adjust color or apply custom gamma
void adjust_color(hg_imgproc::HIMGPRC handle);
@ -300,9 +300,9 @@ protected:
int status_;
bool async_io_;
bool cb_mem_;
bool test_1_paper_; // 是否为单张扫描模式
bool test_1_paper_; // <EFBFBD>臬炏銝箏<EFBFBD>撘䭾醌<EFBFBD>𤩺芋撘?
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_;
IMGPRCFIXPARAM image_prc_param_;
@ -311,57 +311,57 @@ protected:
int noise_range_; // 噪点优化尺寸
TwSS paper_size_;
int omit_empty_level_; // 跳过空白页灵敏度
int resolution_; // 分辨率
int resolution_; // <EFBFBD><EFBFBD><EFBFBD>?
double rid_hole_range_; // 穿孔移除范围
int bright_; // 亮度
int contrast_; // 对比度
int contrast_; // 撖寞<EFBFBD>摨?
double gamma_; // 伽玛
int threshold_; // 阈值
int threshold_; // <EFBFBD><EFBFBD><EFBFBD>?
int anti_noise_; // 背景搞噪等级
int margin_; // 边缘缩进
int fractate_level_; // 折角检测复杂度
int scan_count_; // 扫描张数各实例化类在重载set_setting_value中如果发现该设置项对该参数有影响时需要对此值作更改
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_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 sleeptime_; // 睡眠时间
bool is_auto_paper_scan; // 待纸扫描
bool size_check; // 尺寸检测
bool save_feedmode_type_; //保存分支强度狀態
bool size_check; // 撠箏站璉<EFBFBD>瘚?
bool save_feedmode_type_; //靽嘥<EFBFBD><EFBFBD><EFBFBD>𣈲撘箏漲<EFBFBD><EFBFBD><EFBFBD>?
bool save_sleeptime_type_; //保存休眠時間
bool isremove_left_hole; //设置左边除穿孔
bool isremove_right_hole; //设置右边除穿孔
bool isremove_top_hole; //设置上边除穿孔
bool isremove_low_hole; //设置下边除穿孔
double isremove_left_hole_threshold; //设置左边除穿孔阈值
double isremove_right_hole_threshold; //设置右边除穿孔阈值
double isremove_top_hole_threshold; //设置上边除穿孔阈值
double isremove_low_hole_threshold; //设置下边除穿孔阈值
bool isremove_left_hole; //霈曄蔭撌西器<EFBFBD>斤忽摮?
bool isremove_right_hole; //霈曄蔭<EFBFBD>唾器<EFBFBD>斤忽摮?
bool isremove_top_hole; //霈曄蔭銝𡃏器<EFBFBD>斤忽摮?
bool isremove_low_hole; //霈曄蔭銝贝器<EFBFBD>斤忽摮?
double isremove_left_hole_threshold; //霈曄蔭撌西器<EFBFBD>斤忽摮娪<EFBFBD><EFBFBD>?
double isremove_right_hole_threshold; //霈曄蔭<EFBFBD>唾器<EFBFBD>斤忽摮娪<EFBFBD><EFBFBD>?
double isremove_top_hole_threshold; //霈曄蔭銝𡃏器<EFBFBD>斤忽摮娪<EFBFBD><EFBFBD>?
double isremove_low_hole_threshold; //霈曄蔭銝贝器<EFBFBD>斤忽摮娪<EFBFBD><EFBFBD>?
int fold_type_; //对折类型
bool is_cis_image; //设置cis获取原图
bool is_dpi_color_check; //纵向DPI、色差检测 ,畸变自动计算
float save_dpi_color_check_val; //保存纵向DPI、色差检测 ,畸变自动计算 的值
bool is_dpi_color_check; //蝥萄<EFBFBD>DPI<EFBFBD><EFBFBD>𠧧撌格<EFBFBD>瘚? ,<2C><EFBFBD><E8A9A8>芸𢆡霈∠<E99C88>
float save_dpi_color_check_val; //靽嘥<EFBFBD>蝥萄<EFBFBD>DPI<EFBFBD><EFBFBD>𠧧撌格<EFBFBD>瘚? ,<2C><EFBFBD><E8A9A8>芸𢆡霈∠<E99C88> <20><><EFBFBD>?
bool is_auto_falt; //是否进行平场校正
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_discardblank; //是否启动跳过空白页
bool is_lens_dirty; //是否检测镜头脏污
int split3399_; //3399设备正面和反面图像是相对的,所以对折时反面需要进行特殊处理
bool is_discardblank; //<EFBFBD>臬炏<EFBFBD>臬𢆡頝唾<EFBFBD>蝛箇蒾憿?
bool is_lens_dirty; //<EFBFBD>臬炏璉<EFBFBD>瘚钅<EFBFBD>憭渲<EFBFBD>瘙?
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_;
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_pick_strength_; //固件支持 分纸强度 139 239-3B0830
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_wake_device_; //固件支持 唤醒设备 139 239-3B0830
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_600; //固件支持 真实DPI600 139 239-21227此版本以下不支持真实dpidpi设置1
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_history_cnt; //固件支持 清除历史张数 3288 G300 220303
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_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
int mat_width;
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 dump_usb_path_; // 诊断模式输出USB原始图像
@ -392,6 +392,7 @@ protected:
unsigned long memory_size_; // MB
unsigned long wait_mem_seconds_; // wait up to wait_mem_seconds_ if memory usage is great than memory_size_
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_;
BlockingQueue<std::shared_ptr<tiny_buffer>> imgs_;
@ -406,7 +407,7 @@ protected:
int init_settings(int pid);
void change_string_2_lang_id(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_after_start(int err);
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);
////////////////////////////////////////////////////////////////
// 新增自定义伽玛曲线及扫描区域属性 - 2022-05-05
bool custom_gamma_; // 为true时应用custom_gamma_val_阵列调整图像色彩为false时保持原来的处理方式
SANE_Gamma *custom_gamma_val_; // 当为RGB或者彩色时为三组256字节的数据当为黑白或灰度时只有一组256字节
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>銋劐播<EFBFBD>𥟇𤩅蝥踹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>撅墧<EFBFBD>?- 2022-05-05
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<EFBFBD>𤥁<EFBFBD><EFBFBD><EFBFBD>脫𧒄嚗䔶蛹銝厩<EFBFBD>256摮𡑒<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>敶㮖蛹暺𤑳蒾<EFBFBD>𣇉<EFBFBD>摨行𧒄嚗<EFBFBD><EFBFBD><EFBFBD>蝏?56摮𡑒<E691AE>
bool custom_area_; // 是否启用自定义区域为true时才使用下列4个数据为false时保持原来的处理方式
double custom_area_lt_x_; // 自定义区域左上角x坐标
double custom_area_lt_y_; // 自定义区域左上角y坐标
double custom_area_br_x_; // 自定义区域右下角x坐标
double custom_area_br_y_; // 自定义区域右下角y坐标
SIZE paper_size_mm_; // 当前纸张尺寸mm
// 新增自定义伽玛曲线及扫描区域属性 - END
SIZE paper_size_mm_; // 敶枏<EFBFBD>蝥詨<EFBFBD>撠箏站嚗ém嚗?
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>銋劐播<EFBFBD>𥟇𤩅蝥踹<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>撅墧<EFBFBD>?- END
////////////////////////////////////////////////////////////////
// 2022-07-23 新增双张之后留图继续扫描
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黑白像素相反
bool is_white_0_; // 是否0代表白色
// 2022-08-31 <EFBFBD><EFBFBD>暺𤑳蒾<EFBFBD><EFBFBD><EFBFBD>臬炏<EFBFBD>滩𠧧颲枏枂嚗㇊NM暺𤑳蒾<EFBFBD><EFBFBD>銝𦻓MP暺𤑳蒾<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?
bool is_white_0_; // <EFBFBD>臬炏<EFBFBD>?<3F>嗘誨銵函蒾<E587BD>?
public:
int start(void);
@ -479,7 +480,7 @@ public:
virtual int reset(void);
virtual int device_io_control(unsigned long code, void* data, unsigned* len);
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:
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 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 get_vid_pid(int& data) = 0; //获取vidpid
/////////////成功返回:SCANNER_ERR_OK /////////////
/////////////失败返回:IO错误码 /////////////
/////////////憭梯揖餈𥪜<EFBFBD>:IO<49>躰秤<E8BAB0>? /////////////
virtual int set_leaflet_scan(void) = 0; //单张扫描
virtual int get_abuot_info(void); //获取软件关于信息 (基类实现)
virtual int restore_default_setting(void); //恢复默认设置 (基类实现)
virtual int set_final_image_format(SANE_FinalImgFormat* fmt);//设置图像处理最终输出final())的图像数据格式 (基类实现) ***
virtual int get_compression_format(void); //获取支持的压缩格式 不支持
virtual int set_compression_format(void); //设置图像数据最终输出的压缩格式 不支持
virtual int get_compression_format(void); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝻拇聢撘? 銝齿𣈲<E9BDBF>?
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_clear_roller_num(void) = 0; //清除滚轴计数
virtual int set_clear_history_num(void) = 0; //清除历史张数
virtual int get_device_code(void); //获取设备编码 不支持
virtual int get_scanner_paperon(SANE_Bool& type)=0; //获取设备有无纸张 /*/ type : false无纸不正常状态false true有纸 */
virtual int get_scan_is_sleep(SANE_Bool& type) = 0; //获取设备是否休眠当中 /*/ type : false休眠不正常状态false true未休眠*/
virtual int get_sleep_time(int& data) = 0; //获取功耗模式(休眠) /*/ data > 0*/
virtual int set_sleep_time(int data) = 0; //设置功耗模式(休眠) /*/ data > 0*/
virtual int get_device_code(void); //<EFBFBD><EFBFBD>霈曉<EFBFBD>蝻𣇉<EFBFBD> 銝齿𣈲<E9BDBF>?
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; //<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; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>埈芋撘𧶏<EFBFBD>隡𤑳<EFBFBD>嚗? /*/ 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_roller_num(int &data) = 0; //获取滚轮张数 /*/ data > 0*/
virtual int set_notify_sleep(void) = 0; //唤醒设备
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_scan_islock(SANE_Bool type) = 0; //设置设备是否锁定 /*/ type:0解锁1锁定*/
virtual int get_scan_islock(SANE_Bool& type) = 0; //获取设备是否锁定 /*/ type:0解锁1锁定*/
virtual int set_scan_lock_check_val(string str) = 0; //获取设备是否锁定 /*/ str:校验码*/
virtual int set_firmware_upgrade(std::string str) = 0; //固件升级 /*/ str:文件名路径*/
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; //<EFBFBD><EFBFBD>霈曉<EFBFBD><EFBFBD>臬炏<EFBFBD><EFBFBD><EFBFBD> /*/ type:0閫<30><E996AB>嚗?<3F><><EFBFBD>*/
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; //<EFBFBD>箔辣<EFBFBD><EFBFBD>漣 /*/ str:<3A><><EFBFBD>滩楝敺?/
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 get_scan_mode(bool& type) ; //获取设备是否计数模式 /*/ type:false计数模式 true非计数模式
virtual int set_speed_mode(int data) = 0; //设置速度模式 /*/ 设备不同值不同,详情见子类注释
virtual int get_speed_mode(int &data) = 0; //获取速度模式 /*/ 设备不同值不同,详情见子类注释
virtual int set_distortion_image(bool type); //设置畸变校正图 /*/ 基类处理
virtual int get_distortion_check_val(int &val); //获取自动计算畸变校正值 /*/ 基类处理
virtual int set_devs_distortion_check_val(float data) = 0; //设置畸变矫正值 float;
virtual int get_devs_distortion_check_val(float& data) = 0; //获取设备畸变值 float;
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; //霈曄蔭<EFBFBD>笔漲璅<EFBFBD> /*/ 霈曉<E99C88>銝滚<E98A9D><E6BB9A><EFBFBD><E6BD94><EFBFBD>霂行<E99C82><EFBFBD><E996AB>蝐餅釣<E9A485>?
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); //霈曄蔭<EFBFBD><EFBFBD><EFBFBD>⊥迤<EFBFBD>? /*/ <20>箇掩憭<E68EA9><E686AD>
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; //霈曄蔭<EFBFBD><EFBFBD><EFBFBD>急迤<EFBFBD>? 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; //设置自动平场校正
// 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 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 get_devs_time(string &times); //获取设备时间 //3399设备支持
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;
#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
if (init_settings(0x200))
init_settings((jsontext1 + jsontext2 + jsontext3).c_str());
@ -305,6 +305,9 @@ int hg_scanner_200::do_start(void)
}
printf_devconfig();
SANE_Bool type = false;
if (!no_paper_check_)
{
ret = get_scanner_paperon(type);
if (!type)
{
@ -313,6 +316,7 @@ int hg_scanner_200::do_start(void)
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 };
{
@ -487,7 +491,7 @@ int hg_scanner_200::writedown_device_configuration(bool type,setting_hardware::H
int ret = SCANNER_ERR_OK,
len = 0;
setting_hardware::HGSCANCONF_DSP p = dsp_config_; //不得改变外部的值
setting_hardware::HGSCANCONF_DSP p = dsp_config_; //ä¸<EFBFBD>得改å<EFBFBD>˜å¤éƒ¨çš„å€?
if (!d)
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)
{
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();
}
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.is_autopaper = dsp_config_.params_dsp.is_autopaper;
ic.hardwarecaps.capturepixtype = 0; //暂无参数 获取图像类型
ic.hardwarecaps.lowpowermode = LowPowerMode::Min_None; //暂无参数 设置休眠时间 两个参数3399未使用
ic.hardwarecaps.lowpowermode = LowPowerMode::Min_None; //æšæ— å<EFBFBD>æ•° 设置休眠时间 两个å<C2AA>æ•°3399未使ç”?
image_configuration(ic);
//agreement();
@ -770,7 +774,7 @@ std::string hg_scanner_200::get_firmware_version()
{
char buf[20] = { 0 };
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 };
{
@ -788,7 +792,7 @@ std::string hg_scanner_200::get_serial_num()
{
char buf[20] = { 0 };
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 };
{

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());
dsp_config.value = 0;
dsp_config.params_3288.enableLed = 1; //默认值
dsp_config.params_3288.enableLed = 1; //暺䁅恕<EFBFBD>?
dsp_config.params_3288.isCorrect = 1;
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;
#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
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);
//如果设备出现卡纸 或者双张等设备信息问题需要等到设备进行发送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)
{
status_ = !savestatus_.empty() ? savestatus_[0] : SCANNER_ERR_OK;//以第一个消息为准
status_ = !savestatus_.empty() ? savestatus_[0] : SCANNER_ERR_OK;//隞亦洵銝<EFBFBD>銝芣<EFBFBD><EFBFBD>臭蛹<EFBFBD>?
savestatus_.clear();
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_));
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)
{
@ -248,7 +248,7 @@ void hg_scanner_300::thread_handle_usb_read(void)
}
else
{
if (!savestatus_.empty())//以第一个消息为准
if (!savestatus_.empty())//隞亦洵銝<EFBFBD>銝芣<EFBFBD><EFBFBD>臭蛹<EFBFBD>?
{
status_ = savestatus_[0];
}
@ -260,7 +260,7 @@ void hg_scanner_300::thread_handle_usb_read(void)
}
if (sw.elapsed_s() > 130)
{
if (!savestatus_.empty())//以第一个消息为准
if (!savestatus_.empty())//隞亦洵銝<EFBFBD>銝芣<EFBFBD><EFBFBD>臭蛹<EFBFBD>?
{
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)
{
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);
img_num++;
if (totalNum)
@ -371,6 +371,8 @@ int hg_scanner_300::do_start(void)
return status_;
}
if (!no_paper_check_)
{
ret = get_scanner_paperon(val);
if (!val && ret == SCANNER_ERR_OK)
{
@ -378,11 +380,12 @@ int hg_scanner_300::do_start(void)
return status_;
}
}
if (ret != SCANNER_ERR_OK)
{
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;
set_kernelsnap_ver();
@ -807,7 +810,7 @@ int hg_scanner_300::initdevice()
if (status_ != SCANNER_ERR_DEVICE_SLEEPING)
{
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_;
}
@ -839,7 +842,7 @@ void hg_scanner_300::writedown_image_configuration(void)
// ic.hardwarecaps.is_autopaper = dsp_config_.params_dsp.is_autopaper;
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);
}
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 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;
@ -1022,7 +1025,7 @@ int hg_scanner_300::get_correction_image(int inx , int dpi, int mode)
if (mat.empty())
{
VLOG_MINI_1(LOG_LEVEL_WARNING, "get_correction_image image is NULL:%d\n", image_info.info.params.status);
return SCANNER_ERR_NO_DATA; //只要有一张图没有 直接退了
return SCANNER_ERR_NO_DATA; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>撘惩㦛瘝⊥<EFBFBD> <20>湔𦻖<E6B994><F0A6BB96>鈭?
}
float f = 0.0;
@ -1055,7 +1058,7 @@ std::string hg_scanner_300::get_firmware_version()
{
char buf[20] = { 0 };
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,};
{

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());
dsp_config.value = 0;
dsp_config.params_7010.enableLed = 1; //默认值
dsp_config.params_7010.enableLed = 1; //暺䁅恕<EFBFBD>?
dsp_config.params_7010.isCorrect = 1;
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
init_setting_map(setting_map_, ARRAY_SIZE(setting_map_));//优先初始化
init_setting_map(setting_map_, ARRAY_SIZE(setting_map_));//隡睃<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
#endif
if (init_settings(pid_))
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);
//如果设备出现卡纸 或者双张等设备信息问题需要等到设备进行发送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)
{
status_ = !savestatus_.empty() ? savestatus_[0] : SCANNER_ERR_OK;//以第一个消息为准
status_ = !savestatus_.empty() ? savestatus_[0] : SCANNER_ERR_OK;//隞亦洵銝<EFBFBD>銝芣<EFBFBD><EFBFBD>臭蛹<EFBFBD>?
savestatus_.clear();
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_));
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)
{
@ -225,19 +225,19 @@ void hg_scanner_306::thread_handle_usb_read(void)
}
else
{
if (!savestatus_.empty())//以第一个消息为准
if (!savestatus_.empty())//隞亦洵銝<EFBFBD>銝芣<EFBFBD><EFBFBD>臭蛹<EFBFBD>?
{
status_ = savestatus_[0];
}
savestatus_.clear();
hg_log::log(LOG_LEVEL_WARNING, "Get Status TimeOut,get image out 30S\n");
notify_ui_working_status(hg_log::lang_load(ID_STATU_DESC_SCANNER_ERR_DEVICE_GET_IMAGE_OUTTIME), SANE_EVENT_ERROR, status_); // 鍙栧浘閫氫俊瓒呮椂
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;
}
}
if (sw.elapsed_s() > 130)
{
if (!savestatus_.empty())//以第一个消息为准
if (!savestatus_.empty())//隞亦洵銝<EFBFBD>銝芣<EFBFBD><EFBFBD>臭蛹<EFBFBD>?
{
status_ = savestatus_[0];
}
@ -327,6 +327,8 @@ int hg_scanner_306::do_start(void)
return status_;
}
if (!no_paper_check_)
{
ret = get_scanner_paperon(val);
if (!val && ret == SCANNER_ERR_OK)
{
@ -334,11 +336,13 @@ int hg_scanner_306::do_start(void)
return status_;
}
}
if (ret != SCANNER_ERR_OK)
{
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;
set_kernelsnap_ver();
@ -765,7 +769,7 @@ int hg_scanner_306::initdevice()
if (status_ != SCANNER_ERR_DEVICE_SLEEPING)
{
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;
}
@ -797,7 +801,7 @@ void hg_scanner_306::writedown_image_configuration(void)
// ic.hardwarecaps.is_autopaper = dsp_config_.params_dsp.is_autopaper;
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);
}
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 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;
@ -915,7 +919,7 @@ int hg_scanner_306::get_correction_image(int inx , int dpi, int mode)
if (mat.empty())
{
VLOG_MINI_1(LOG_LEVEL_WARNING, "get_correction_image image is NULL:%d\n", image_info.info.params.status);
return SCANNER_ERR_NO_DATA; //只要有一张图没有 直接退了
return SCANNER_ERR_NO_DATA; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>撘惩㦛瘝⊥<EFBFBD> <20>湔𦻖<E6B994><F0A6BB96>鈭?
}
float f = 0.0;
@ -941,7 +945,7 @@ std::string hg_scanner_306::get_firmware_version()
{
char buf[20] = { 0 };
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,};
{
@ -1228,13 +1232,13 @@ int hg_scanner_306::set_scan_lock_check_val(string str)
}
//#enum scanner_err
//#{
//# SCANNER_ERR_OK = 0, //设备正常状态
//# SCANNER_ERR_OK = 0, //霈曉<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
//# 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_CHECK_VAL_ERROR, 4 //设备更新:校验检测错误
//# SCANNER_ERR_UPDATE_CHECK_FILE_LOST, 5 //设备更新:文件丢失
//# SCANNER_ERR_UPDATE_UNZIP_FAIL, 6 //设备更新:解压失败
//# SCANNER_ERR_UPDATE_CHECK_VAL_ERROR, 4 //霈曉<EFBFBD><EFBFBD>湔鰵嚗𡁏嵗撉峕<EFBFBD>瘚钅<EFBFBD>霂?
//# SCANNER_ERR_UPDATE_CHECK_FILE_LOST, 5 //霈曉<EFBFBD><EFBFBD>湔鰵嚗𡁏<EFBFBD>隞嗡腺憭?
//# SCANNER_ERR_UPDATE_UNZIP_FAIL, 6 //霈曉<EFBFBD><EFBFBD>湔鰵嚗朞圾<EFBFBD>见仃韐?
//#};
int hg_scanner_306::set_firmware_upgrade(std::string str)
{