增加上传图像并校验功能,屏蔽302代码内的尺寸检测

This commit is contained in:
yangjiaxuan 2023-10-11 17:39:36 +08:00
parent 2d7d9b5e52
commit e5f3e22cdd
7 changed files with 239 additions and 253 deletions

View File

@ -1,4 +1,4 @@
#include "common_setting.h"
#include "common_setting.h"
#include "sane/sane_option_definitions.h"
#include "hg_log.h"
@ -504,12 +504,12 @@ int double_paper_flag_from_option_value(std::string& opt_val, bool* exact)
if (exact)
*exact = true;
if (opt_val == hg_log::lang_load(ID_OPTION_VALUE_SZTPCL_SCTXBJXSM))
return DOUBLE_PAPER_CONTINUE | DOUBLE_PAPER_SAVE_IMG;
else if (opt_val == hg_log::lang_load(ID_OPTION_VALUE_SZTPCL_SCTXBTZSM))
if (opt_val == hg_log::lang_load(ID_OPTION_VALUE_SZTPCL_SCTXBTZSM))//上传图像并停止
return DOUBLE_PAPER_SAVE_IMG;
else if (opt_val == hg_log::lang_load(ID_OPTION_VALUE_SZTPCL_DQTXBTZSM))//丢弃图像并停止
return DOUBLE_PAPEAR_STOP;
else if (opt_val == from_default_language(OPTION_VALUE_SZTPCL_SCTXBJY))//上传图像并校验
return DOUBLE_PAPER_SAVE_IMG;
else if (opt_val == hg_log::lang_load(ID_OPTION_VALUE_SZTPCL_DQTXBJXSM))
return DOUBLE_PAPER_CONTINUE;
else
{
if (exact)

View File

@ -273,6 +273,7 @@ enum
{
DOUBLE_PAPER_CONTINUE = 0x01, // 继续扫描
DOUBLE_PAPER_SAVE_IMG = 0x02, // 保存图片
DOUBLE_PAPEAR_STOP = 0x03 //丢弃并停止
};
int double_paper_flag_from_option_value(std::string& opt_val, bool* exact);
std::string double_paper_flag_to_option_value(int flag);
@ -632,7 +633,7 @@ namespace setting_hardware
unsigned int ultrasonic_enable : 1; // 是否进行超声波检测(双/多张进纸检测)
unsigned int staple_enbale : 1; // 是否进行钉书钉检测
unsigned int screw_detect_enable : 1; // 是否歪斜检测
unsigned int screw_detect_level : 3; // 歪斜检测水平
unsigned int screw_detect_level : 3; // 歪斜检测水平 bit14
unsigned int iscorrect_mod : 1; // 是否自动校正
unsigned int is_autopaper : 1; // 是否自动进纸
// unsigned int reserved1 : 4; // 保留
@ -641,7 +642,8 @@ namespace setting_hardware
unsigned int en_anlogic_key : 1; //
unsigned int en_autosize : 1; //
unsigned int pc_correct : 1; // 是否在PC端校正 1:不校正 cis原图0:校正
unsigned int enable_sizecheck : 1; // 是否进行尺寸检测
//unsigned int enable_sizecheck : 1; // 是否进行尺寸检测 2023-10-11 屏蔽 此bit位变更为double_out_en
unsigned int double_out_en : 1; //true 双张纸搓出出纸口, false 卡在出纸口
unsigned int enabledsp_cache : 1; // 是否在片上缓存
unsigned int sizeerror_errorratio : 9; // 幅面检测
}params_3399;
@ -1113,11 +1115,24 @@ namespace setting3399
AutoCorrect,
STOPSCAN,
};
enum Image_Status
{
Image_Status_OK = 0, // normal
Image_Status_Double = 1 << 0, // double-feeded paper
Image_Status_Jammed = 1 << 1, // jammed paper
Image_Status_Staple = 1 << 2, // staples on the paper
Image_Status_Size_Error = 1 << 3, // size check failed
Image_Status_Dogear = 1 << 4, // paper has dogear - common
Image_Status_Partial = 1 << 5, // dogear - scanned partial
Image_Status_Blank = 1 << 6 // blank image
};
struct HGEIntInfo
{
HGType From;
unsigned int Code;
unsigned int Img_Index;
Image_Status Img_Status;
};
enum PaperSize_ //239 302 402
{

View File

@ -2318,6 +2318,8 @@ int hg_scanner::setting_go_on_when_double_checked(void* data, long* len)
double_paper_handle_ = double_paper_flag_from_option_value(val, &ok);
on_process_double_paper(double_paper_handle_ == DOUBLE_PAPEAR_STOP ? false : true);
// 此处需要通知设备双张处理方式
// OPTION_VALUE_SZTPCL_xxx 共4种选择,目前只支持出现双张后停止的两种方式
// 若要上传出现双张的图片,请确保双张信号在图片之前发出来
@ -2948,6 +2950,10 @@ int hg_scanner::on_cis_get_image(bool isautopaper)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner::on_process_double_paper(bool type)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
void hg_scanner::on_device_reconnected(void)
{
std::lock_guard<std::mutex> lock(io_lock_);
@ -5153,6 +5159,7 @@ int hg_scanner::image_configuration(SCANCONF& ic)
//ic.imageRotateDegree *= 90.0f;
//}
ic.en_sizecheck = size_check;
ic.is_duplex = (image_prc_param_.bits.page == PAGE_DOUBLE
|| image_prc_param_.bits.page == PAGE_OMIT_EMPTY

View File

@ -260,6 +260,7 @@ protected:
virtual int on_pick_paper_threshold(double threshold) = 0; //设置搓纸阈值
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);
protected:
virtual int set_setting_value(const char* name, void* data, long* len);

File diff suppressed because one or more lines are too long

View File

@ -38,7 +38,7 @@ class hg_scanner_239 : public hg_scanner
int read_register(int addr, int* val);
int write_register(int addr, int val);
int write_command(int cmd);
int writedown_device_configuration(bool type = false, setting_hardware::HGSCANCONF_3399* dev_conf = NULL);//false 在startå†<EFBFBD>把type置为true,å…¶ä»å<E28093>šè®¾ç½®æ—¶ä¸<C3A4>å<EFBFBD>
int writedown_device_configuration(bool type = false, setting_hardware::HGSCANCONF_3399* dev_conf = NULL);//false 鍦╯tart鍐嶆妸type缃负true,鍏朵粬鍋氳缃椂涓嶅彂
int writedown_image_configuration(void);
int pop_first_image(void);
int read_one_image_from_usb(SANE_Image_Statu statu = IMG_STATUS_OK);
@ -58,21 +58,22 @@ protected:
virtual int discard_all_images(void);
protected:
virtual int on_color_mode_changed(int& color_mode) override; //颜色切æ<EFBFBD>¢
virtual int on_paper_changed(int& paper) override; //纸张大å°<EFBFBD>设置
virtual int on_paper_check_changed(bool& check) override; //尺寸检�
virtual int on_resolution_changed(int& dpi) override; //分辨率设�
virtual int on_ultrasonic_check_changed(bool& check) override; //设置超声波检�
virtual int on_staple_check_changed(bool& check) override; //设置订书针检�
virtual int on_skew_check_changed(bool& check) override; //设置歪斜检�
virtual int on_skew_check_level_changed(int& check) override; //设置歪斜检测强�
virtual int on_get_feedmode(int& feedmode) override; //获å<EFBFBD>分纸强度
virtual int on_set_feedmode(int feedmode) override; //设置分纸强度
virtual int on_pic_type(bool& pic)override; //照片模å¼<EFBFBD>æˆè€…æ‡æœ¬æ¨¡å¼?
virtual int on_pick_paper(bool autostrength)override; //自动分纸强度
virtual int on_color_mode_changed(int& color_mode) override; //棰滆壊鍒囨崲
virtual int on_paper_changed(int& paper) override; //绾稿紶澶у皬璁剧疆
virtual int on_paper_check_changed(bool& check) override; //灏哄妫€娴?
virtual int on_resolution_changed(int& dpi) override; //鍒嗚鲸鐜囪缃?
virtual int on_ultrasonic_check_changed(bool& check) override; //璁剧疆瓒呭0娉㈡娴?
virtual int on_staple_check_changed(bool& check) override; //璁剧疆璁功閽堟娴?
virtual int on_skew_check_changed(bool& check) override; //璁剧疆姝枩妫€娴?
virtual int on_skew_check_level_changed(int& check) override; //璁剧疆姝枩妫€娴嬪己搴?
virtual int on_get_feedmode(int& feedmode) override; //鑾峰彇鍒嗙焊寮哄害
virtual int on_set_feedmode(int feedmode) override; //璁剧疆鍒嗙焊寮哄害
virtual int on_pic_type(bool& pic)override; //鐓х墖妯″紡鎴栬€呮枃鏈ā寮?
virtual int on_pick_paper(bool autostrength)override; //鑷姩鍒嗙焊寮哄害
virtual int on_pick_paper_threshold(double threshold)override;
virtual int on_is_auto_paper(bool isautopaper)override; //待纸扫æ<C2AB><C3A6>
virtual int on_cis_get_image(bool isautopaper) override; //cis 原å¾èŽ·å<C2B7>
virtual int on_is_auto_paper(bool isautopaper)override; //寰呯焊鎵弿
virtual int on_cis_get_image(bool isautopaper) override; //cis 鍘熷浘鑾峰彇
virtual int on_process_double_paper(bool type) override;
public:
@ -89,60 +90,60 @@ public:
virtual int get_roller_life(void) override;
public:
//////////////åºå®šçš„硬件信æ<EFBFBD>¯è®¾ç½®æˆèŽ·å<EFBFBD>//////////////
//////////////鍥哄畾鐨勭‖浠朵俊鎭缃垨鑾峰彇//////////////
virtual std::string get_firmware_version(void)override;
virtual std::string get_serial_num(void)override;
virtual std::string get_ip(void)override;
virtual std::string get_device_model(void);
virtual int set_device_model(string str);
virtual int set_serial_num(string str) override; //设置åº<EFBFBD>列å<EFBFBD>?
virtual int set_vid_pid(int data) override; //设置vidpid
virtual int get_vid_pid(int& data)override; //获å<EFBFBD>vidpid
virtual int set_serial_num(string str) override; //璁剧疆搴忓垪鍙?
virtual int set_vid_pid(int data) override; //璁剧疆vidpid
virtual int get_vid_pid(int& data)override; //鑾峰彇vidpid
/////////////////æˆ<EFBFBD>功返åž:SCANNER_ERR_OK /////////////
/////////////////失败返回:IO错误�or SCANNER_ERR_DEVICE_NOT_SUPPORT /////////////
virtual int set_leaflet_scan(void) override; //å<EFBFBD>•å¼ æ‰«æ<EFBFBD><EFBFBD>
/////////////////鎴愬姛杩斿洖:SCANNER_ERR_OK /////////////
/////////////////澶辫触杩斿洖:IO閿欒鐮?or SCANNER_ERR_DEVICE_NOT_SUPPORT /////////////
virtual int set_leaflet_scan(void) override; //鍗曞紶鎵弿
virtual int set_clear_roller_num(void) override; //清除滚轴计数
virtual int set_clear_history_num(void) override; //清除历å<EFBFBD>²å¼ æ•°
virtual int set_clear_roller_num(void) override; //娓呴櫎婊氳酱璁℃暟
virtual int set_clear_history_num(void) override; //娓呴櫎鍘嗗彶寮犳暟
virtual int get_device_code(void); //获å<EFBFBD>设备ç¼ç <EFBFBD> ä¸<C3A4>支æŒ?
virtual int get_device_code(void); //鑾峰彇璁惧缂栫爜 涓嶆敮鎸?
virtual int get_scanner_paperon(SANE_Bool& type) override; //获å<EFBFBD>设备有无纸张 /*/ type : 0无纸 1有纸 */
virtual int get_scanner_paperon(SANE_Bool& type) override; //鑾峰彇璁惧鏈夋棤绾稿紶 /*/ type : 0鏃犵焊 1鏈夌焊 */
virtual int get_scan_is_sleep(SANE_Bool& type) override; //获å<EFBFBD>设备是å<EFBFBD>¦ä¼çœ å½“中 /*/ type : 0ä¼çœ  1唤é†çŠ¶æ€?/
virtual int get_sleep_time(int& data) override; //获å<EFBFBD>功耗模å¼<EFBFBD>(ä¼çœ ï¼? /*/ data > 0*/
virtual int set_sleep_time(int data) override; //设置功耗模å¼<EFBFBD>(ä¼çœ ï¼? /*/ data > 0*/
virtual int get_history_scan_count(int& data) override; //获å<EFBFBD>历å<EFBFBD>²æ‰«æ<EFBFBD><EFBFBD>å¼ æ•° /*/ data > 0*/
virtual int get_roller_num(int& data) override; //获å<EFBFBD>滚轮张数 /*/ data > 0*/
virtual int set_notify_sleep(void) override; //唤醒设备
virtual int get_device_log(string& log) override; //获å<EFBFBD>设备日志 /*/ log :储存路径*/
virtual int set_devreboot(int data) override; //设置设备é‡<EFBFBD>å<EFBFBD>¯
virtual int set_devshtudown() override; //设置设备关机
virtual int set_scan_islock(SANE_Bool type) override; //设置设备是å<EFBFBD>¦é”<EFBFBD>定 /*/ type:0解é”<C3A9>ï¼?é”<C3A9>定*/
virtual int get_scan_islock(SANE_Bool& type) override; //获å<EFBFBD>设备是å<EFBFBD>¦é”<EFBFBD>定 /*/ type:0解é”<C3A9>ï¼?é”<C3A9>定*/
virtual int set_scan_lock_check_val(string str) override; //获å<EFBFBD>设备是å<EFBFBD>¦é”<EFBFBD>定 /*/ str:校验ç ?/
virtual int set_firmware_upgrade(std::string str) override; //åºä»¶å<EFBFBD>‡çº§ /*/ str:æ‡ä»¶å<C2B6><C3A5>è·¯å¾?/
virtual int set_clean_paper_road() override; //清ç<EFBFBD>†çº¸é<EFBFBD>
virtual int get_dev_islock_file(int& data) override; //获å<EFBFBD>设备æ‡ä»¶ /*/ data:0 未上é”<C3A9>,1 上é”<C3A9>ã€?1 未å<C2AA>现é»å<E28098><C3A5>å<EFBFBD>•åˆ—表 -2列表没有信æ<C2A1>¯*/
virtual int set_dev_islock_file(int data) override; //设置设备文件 /*/ data:0 未上é”<C3A9>,1 上é”<C3A9>*/
virtual int get_scan_mode(bool& type); //获å<EFBFBD>是å<EFBFBD>¦æ˜¯è®¡æ•°æ¨¡å¼? /*/ type : fasle计数模å¼<C3A5> trueé<65>žè®¡æ•?*/
virtual int get_scan_is_sleep(SANE_Bool& type) override; //鑾峰彇璁惧鏄惁浼戠湢褰撲腑 /*/ type : 0浼戠湢 1鍞ら啋鐘舵€?/
virtual int get_sleep_time(int& data) override; //鑾峰彇鍔熻€楁ā寮忥紙浼戠湢锛? /*/ data > 0*/
virtual int set_sleep_time(int data) override; //璁剧疆鍔熻€楁ā寮忥紙浼戠湢锛? /*/ data > 0*/
virtual int get_history_scan_count(int& data) override; //鑾峰彇鍘嗗彶鎵弿寮犳暟 /*/ data > 0*/
virtual int get_roller_num(int& data) override; //鑾峰彇婊氳疆寮犳暟 /*/ data > 0*/
virtual int set_notify_sleep(void) override; //鍞ら啋璁惧
virtual int get_device_log(string& log) override; //鑾峰彇璁惧鏃ュ織 /*/ log :鍌ㄥ瓨璺緞*/
virtual int set_devreboot(int data) override; //璁剧疆璁惧閲嶅惎
virtual int set_devshtudown() override; //璁剧疆璁惧鍏虫満
virtual int set_scan_islock(SANE_Bool type) override; //璁剧疆璁惧鏄惁閿佸畾 /*/ type:0瑙攣锛?閿佸畾*/
virtual int get_scan_islock(SANE_Bool& type) override; //鑾峰彇璁惧鏄惁閿佸畾 /*/ type:0瑙攣锛?閿佸畾*/
virtual int set_scan_lock_check_val(string str) override; //鑾峰彇璁惧鏄惁閿佸畾 /*/ str:鏍¢獙鐮?/
virtual int set_firmware_upgrade(std::string str) override; //鍥轰欢鍗囩骇 /*/ str:鏂囦欢鍚嶈矾寰?/
virtual int set_clean_paper_road() override; //娓呯悊绾搁亾
virtual int get_dev_islock_file(int& data) override; //鑾峰彇璁惧鏂囦欢 /*/ data:0 鏈笂閿侊紝1 涓婇攣銆?1 鏈彂鐜伴粦鍚嶅崟鍒楄〃 -2鍒楄〃娌℃湁淇℃伅*/
virtual int set_dev_islock_file(int data) override; //璁剧疆璁惧鏂囦欢 /*/ data:0 鏈笂閿侊紝1 涓婇攣*/
virtual int get_scan_mode(bool& type); //鑾峰彇鏄惁鏄鏁版ā寮? /*/ type : fasle璁℃暟妯″紡 true闈炶鏁?*/
virtual int set_speed_mode(int data) override; //设置速度模å¼<EFBFBD> /*/ data:100,110,120
virtual int get_speed_mode(int& data)override; //获å<EFBFBD>速度模å¼<EFBFBD> /*/ data:100,110,120
virtual int set_speed_mode(int data) override; //璁剧疆閫熷害妯″紡 /*/ data:100,110,120
virtual int get_speed_mode(int& data)override; //鑾峰彇閫熷害妯″紡 /*/ data:100,110,120
virtual int set_devs_distortion_check_val(float data) override; //设置畸å<EFBFBD>˜çŸ«æ­£å€?
virtual int get_devs_distortion_check_val(float &data) override; //获å<EFBFBD>畸å<EFBFBD>˜çŸ«æ­£å€?
virtual int set_devs_distortion_check_val(float data) override; //璁剧疆鐣稿彉鐭鍊?
virtual int get_devs_distortion_check_val(float &data) override; //鑾峰彇鐣稿彉鐭鍊?
virtual int set_auto_flat(int data); //设置自动平场校正
// data:0(ALL) 1(200dpiã€<EFBFBD>gray) 2(200dpiã€<C3A3>color) 3(300dpiã€<C3A3>gray) 4(300dpiã€<C3A3>color) 5(600dpiã€<C3A3>gray) 6(600dpiã€<C3A3>color)
virtual int set_auto_flat(int data); //璁剧疆鑷姩骞冲満鏍℃
// data:0(ALL) 1(200dpi銆乬ray) 2(200dpi銆乧olor) 3(300dpi銆乬ray) 4(300dpi銆乧olor) 5(600dpi銆乬ray) 6(600dpi銆乧olor)
virtual int get_motor_board_ver(string &ver);
virtual int set_devs_time(string times); //设置设备时间 //3399设备支æŒ<C3A6>
virtual int get_devs_time(string& times); //获å<EFBFBD>设备时间 //3399设备支æŒ<C3A6>
virtual int get_devs_cpu(string& cpu); //获å<EFBFBD>设备内存大å°<EFBFBD>
virtual int get_devs_disk(string& disk); //获å<EFBFBD>设备硬ç˜å®¹é‡<EFBFBD>大å°<EFBFBD>
virtual int set_devs_time(string times); //璁剧疆璁惧鏃堕棿 //3399璁惧鏀寔
virtual int get_devs_time(string& times); //鑾峰彇璁惧鏃堕棿 //3399璁惧鏀寔
virtual int get_devs_cpu(string& cpu); //鑾峰彇璁惧鍐呭瓨澶у皬
virtual int get_devs_disk(string& disk); //鑾峰彇璁惧纭洏瀹归噺澶у皬
};

View File

@ -478,7 +478,7 @@ int hg_scanner_302::writedown_device_configuration(bool type,setting_hardware::H
|| image_prc_param_.bits.paper == PAPER_16K_LATERAL
)
{
dev_conf->params_3399.enable_sizecheck = false;
//dev_conf->params_3399.enable_sizecheck = false;
}
{
std::lock_guard<std::mutex> lock(io_lock_);
@ -500,7 +500,7 @@ int hg_scanner_302::writedown_image_configuration(void)
ic.imageRotateDegree = (float)image_prc_param_.bits.text_direction;
else
ic.imageRotateDegree = 0;
ic.en_sizecheck = dev_conf_.params_3399.enable_sizecheck;
//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;
@ -742,17 +742,17 @@ int hg_scanner_302::on_paper_check_changed(bool& check)
{
int ret = SCANNER_ERR_OK;
if (dev_conf_.params_3399.enable_sizecheck ^ check)
{
dev_conf_.params_3399.enable_sizecheck = check;
ret = writedown_device_configuration();
//if (dev_conf_.params_3399.enable_sizecheck ^ check)
//{
// dev_conf_.params_3399.enable_sizecheck = check;
// ret = writedown_device_configuration();
if (ret)
{
dev_conf_.params_3399.enable_sizecheck = !check;
check = dev_conf_.params_3399.enable_sizecheck;
}
}
// if (ret)
// {
// dev_conf_.params_3399.enable_sizecheck = !check;
// check = dev_conf_.params_3399.enable_sizecheck;
// }
//}
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
@ -763,7 +763,7 @@ int hg_scanner_302::on_paper_check_changed(bool& check)
)
{
setting_hardware::HGSCANCONF_3399 *d = &dev_conf_;
d->params_3399.enable_sizecheck = false;
//d->params_3399.enable_sizecheck = false;
ret = writedown_device_configuration(d);
}