Revert "为双张处理功能,调整三方启动逻辑"

This reverts commit af593e3376.
This commit is contained in:
gb 2023-10-18 17:09:34 +08:00
parent af593e3376
commit 07d094acd0
11 changed files with 110 additions and 115 deletions

View File

@ -3384,10 +3384,8 @@ int hg_scanner::try_third_app_handle_start(bool& handled)
while (wait_usb_result_.try_wait())
std::this_thread::sleep_for(std::chrono::milliseconds(3));
// 工作线程还未退出,或者图片未取完,则不做实质性的启动操作,继续保持现状
if (!wait_img_.is_waiting() || !wait_usb_.is_waiting() || final_imgs_.size())
{
// 有图片直接返回让APP取图片没有图片则等待线程工作结束
while (final_imgs_.size() == 0)
{
if (wait_img_.is_waiting() && wait_usb_.is_waiting())
@ -3395,34 +3393,31 @@ int hg_scanner::try_third_app_handle_start(bool& handled)
std::this_thread::sleep_for(std::chrono::milliseconds(3));
}
// user_cancel_ has waited for all worker threads exit - added on 2023-10-18 for double-handling
if (user_cancel_ && final_imgs_.size() == 1 && status_ == SCANNER_ERR_DEVICE_DOUBLE_FEEDING)
final_imgs_.clear();
// 如果图片为空,扫描结束。正常结束则尝试新一轮扫描;异常结束则返回异常代码
if (final_imgs_.size() == 0)
{
final_img_index_ = 0;
//if (user_cancel_)
// handled = false;
//else if (status_ == SCANNER_ERR_OK)
// ret = SCANNER_ERR_DEVICE_NO_PAPER;
//else
// ret = status_;
if (user_cancel_ || status_ == SCANNER_ERR_OK)
if (user_cancel_)
handled = false;
else if (status_ == SCANNER_ERR_OK)
ret = SCANNER_ERR_DEVICE_NO_PAPER;
else
ret = status_;
}
}
else
else if (final_img_index_)
{
// 一轮扫描已经完成,重新开始新一轮扫描
final_img_index_ = 0;
handled = false;
if (user_cancel_)
handled = false;
else if (status_ == SCANNER_ERR_OK)
ret = SCANNER_ERR_DEVICE_NO_PAPER;
else
ret = status_;
}
else
handled = false;
}
return ret;
@ -4119,7 +4114,7 @@ int hg_scanner::read_image_data(unsigned char* buf, int* len)
return SCANNER_ERR_NO_DATA;
}
}
int hg_scanner::stop(bool from_user)
int hg_scanner::stop(void)
{
user_cancel_ = true;

View File

@ -480,7 +480,7 @@ public:
virtual int start(void);
virtual int get_image_info(SANE_Parameters* ii, int len);
virtual int read_image_data(unsigned char* buf, int* len);
virtual int stop(bool from_user = false);
virtual int stop(void);
virtual int reset(void);
virtual int device_io_control(unsigned long code, void* data, unsigned* len);
virtual int discard_all_images(void) = 0;

View File

@ -86,7 +86,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_));//优先åˆ<EFBFBD>å§åŒ?
init_setting_map(setting_map_, ARRAY_SIZE(setting_map_));//优先初始化
#endif
if (init_settings(0x200))
init_settings((jsontext1 + jsontext2 + jsontext3).c_str());
@ -318,7 +318,7 @@ int hg_scanner_200::start(void)
return ret;
}
int hg_scanner_200::stop(bool from_user)
int hg_scanner_200::stop(void)
{
int ret = SCANNER_ERR_OK;
@ -327,7 +327,7 @@ int hg_scanner_200::stop(bool from_user)
std::lock_guard<std::mutex> lock(io_lock_);
ret = writeusb(usbcb);
}
user_cancel_ = from_user;
user_cancel_ = true;
if (ret == SCANNER_ERR_DEVICE_BUSY)
{
LOG_INFO(LOG_LEVEL_DEBUG_INFO,"stop status is busy\r\n");
@ -464,7 +464,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_; //ä¸<EFBFBD>得改å<EFBFBD>˜å¤éƒ¨çš„å€?
setting_hardware::HGSCANCONF_DSP p = dsp_config_; //不得改变外部的值
if (!d)
d = &dsp_config_;
@ -661,7 +661,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设置获å<EFBFBD>cis原å¾ï¼?æ ¡æ­£ä¹å<E280B9>Žçš„å¾
dsp_config_.params_dsp.isCorrect = isautopaper == true ? 0 : 1; //0设置获取cis原图1校正之后的图
return writedown_device_configuration();
}
int hg_scanner_200::on_process_double_paper(bool type)
@ -719,7 +719,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; //æšæ— å<EFBFBD>æ•° 设置休眠时间 两个å<C2AA>æ•°3399未使ç”?
ic.hardwarecaps.lowpowermode = LowPowerMode::Min_None; //暂无参数 设置休眠时间 两个参数3399未使用
image_configuration(ic);
//agreement();
@ -747,7 +747,7 @@ std::string hg_scanner_200::get_firmware_version()
{
char buf[20] = { 0 };
int ret = SCANNER_ERR_OK,
len = 8; //å<EFBFBD><EFBFBD>议定义长度ä¸? 300 400 =10
len = 8; //协议定义长度为8 300 400 =10
USBCB cmd = { setting3288dsp::GET_FW_VERSION, len, 0 };
{
@ -765,7 +765,7 @@ std::string hg_scanner_200::get_serial_num()
{
char buf[20] = { 0 };
int ret = SCANNER_ERR_OK,
len = 12; //å<EFBFBD><EFBFBD>议定义长度ä¸? 300 400 =10
len = 12; //协议定义长度为8 300 400 =10
USBCB cmd = { setting3288dsp::GET_SERIAL, len, 0 };
{

View File

@ -39,9 +39,9 @@ protected:
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; //照片模å¼<EFBFBD>æˆè€…æ‡æœ¬æ¨¡å¼?
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; //设置æ<EFBFBD>“纸阈å€?
virtual int on_pick_paper_threshold(double threshold) override; //设置搓纸阈值
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; //双张图像校验
@ -51,7 +51,7 @@ public:
public:
virtual int start(void)override;
virtual int stop(bool from_user = false)override;
virtual int stop(void)override;
private:
int initdevice();
@ -73,43 +73,43 @@ public:
virtual std::string get_serial_num(void)override;
virtual std::string get_ip(void)override;
virtual int set_serial_num(string str) override; //设置åº<EFBFBD>列å<EFBFBD>?
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
/////////////////成功返回:SCANNER_ERR_OK /////////////
/////////////////失败返回:IO错误� /////////////
/////////////////失败返回:IO错误码 /////////////
virtual int set_leaflet_scan(void) override; //单张扫描
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; //获取设备有无纸张 /*/ 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_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; //设置设备是å<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_scan_islock(SANE_Bool type) override; //设置设备是否锁定 /*/ type:0解锁1锁定*/
virtual int get_scan_islock(SANE_Bool& type) override; //获取设备是否锁定 /*/ type:0解锁1锁定*/
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; //获å<EFBFBD>设备æ‡ä»¶ /*/ data:0 未上é”<C3A9>,1 上é”<C3A9>ã€?1 未å<C2AA>现é»å<E28098><C3A5>å<EFBFBD>•åˆ—表 -2列表没有信æ<C2A1>¯*/
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 set_speed_mode(int data) override; //设置速度模å¼<EFBFBD> /*/ ä¸<C3A4>支æŒ?
virtual int get_speed_mode(int &data) override; //设置速度模å¼<EFBFBD> /*/ ä¸<C3A4>支æŒ?
virtual int set_speed_mode(int data) override; //设置速度模式 /*/ 不支持
virtual int get_speed_mode(int &data) override; //设置速度模式 /*/ 不支持
virtual int set_devs_distortion_check_val(float data) override; //设置畸变矫正
virtual int get_devs_distortion_check_val(float& data) override; //获å<EFBFBD>设备畸å<EFBFBD>˜å€?
virtual int get_devs_distortion_check_val(float& data) override; //获取设备畸变值
virtual int set_auto_flat(int data); //设置自动平场校正
// data:0(ALL) 1(200dpi、gray) 2(200dpi、color) 3(300dpi、gray) 4(300dpi、color) 5(600dpi、gray) 6(600dpi、color)

View File

@ -1542,11 +1542,11 @@ int hg_scanner_239::start(void)
return ret;
}
int hg_scanner_239::stop(bool from_user)
int hg_scanner_239::stop(void)
{
int ret = SCANNER_ERR_OK;
user_cancel_ = from_user;
user_cancel_ = true;
ret = write_command(setting3399::SC_STOP);
io_->set_timeout(500);

View File

@ -84,7 +84,7 @@ public:
//virtual int get_image_info(IMG_PARAM* ii) override;
//virtual int read_image_data(unsigned char* buf, int* len) override;
virtual int start(void) override;
virtual int stop(bool from_user = false) override;
virtual int stop(void) override;
virtual int reset(void) override;
virtual int device_io_control(unsigned long code, void* data, unsigned* len) override;
virtual int get_roller_life(void) override;

View File

@ -86,7 +86,7 @@ hg_scanner_300::hg_scanner_300(const char* dev_name,int pid, usb_io* io) :
, last_frame_total(0)
{
dsp_config.value = 0;
dsp_config.params_3288.enableLed = 1; //暺䁅恕<EFBFBD>?
dsp_config.params_3288.enableLed = 1; //默认值
dsp_config.params_3288.isCorrect = 1;
int ret = get_device_type(firmware_sup_device_7010);
@ -122,7 +122,7 @@ hg_scanner_300::hg_scanner_300(const char* dev_name,int pid, usb_io* io) :
#ifndef MAPPING_FUNCTION_IN_BASE
init_setting_map(setting_map_, ARRAY_SIZE(setting_map_));//隡睃<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
init_setting_map(setting_map_, ARRAY_SIZE(setting_map_));//优先初始化
#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);
//<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>?
//如果设备出现卡纸 或者双张等设备信息问题需要等到设备进行发送stop才能停止。 所以始终以 "停止" 消息为结束信号
//如果有图的情况下,并且卡纸或双张等,设备会先发送卡纸双张信息。所以接受到错误信息之后,仍需要把图像取出来。
if (ret == SCANNER_ERR_DEVICE_STOPPED)
{
status_ = !savestatus_.empty() ? savestatus_[0] : SCANNER_ERR_OK;//隞亦洵銝<EFBFBD>銝芣<EFBFBD><EFBFBD>臭蛹<EFBFBD>?
status_ = !savestatus_.empty() ? savestatus_[0] : SCANNER_ERR_OK;//以第一个消息为准
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)//<EFBFBD>脫迫<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝滢<EFBFBD><EFBFBD>亙紡<EFBFBD>游㨃甇?
if (sw.elapsed_ms() > 30000 && img_conf_.resolution_dst != 600)//防止状态信息一直取不上来导致卡死
{
if ((img_conf_.papertype == TwSS::MaxSize || img_conf_.papertype == TwSS::USStatement) && pid_ == 0x0300 && firmware_sup_dpi_600)
{
@ -248,25 +248,25 @@ void hg_scanner_300::thread_handle_usb_read(void)
}
else
{
if (!savestatus_.empty())//隞亦洵銝<EFBFBD>銝芣<EFBFBD><EFBFBD>臭蛹<EFBFBD>?
if (!savestatus_.empty())//以第一个消息为准
{
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_); // <EFBFBD>蹱𡵆瘚㗛𢥫瘞思<EFBFBD><EFBFBD>鍦䴴璊?
notify_ui_working_status(hg_log::lang_load(ID_STATU_DESC_SCANNER_ERR_DEVICE_GET_IMAGE_OUTTIME), SANE_EVENT_ERROR, status_); // 鍙栧浘閫氫俊瓒呮椂
break;
}
}
if (sw.elapsed_s() > 130)
{
if (!savestatus_.empty())//隞亦洵銝<EFBFBD>銝芣<EFBFBD><EFBFBD>臭蛹<EFBFBD>?
if (!savestatus_.empty())//以第一个消息为准
{
status_ = savestatus_[0];
}
savestatus_.clear();
hg_log::log(LOG_LEVEL_WARNING, "MaxSize TimeOut,Get Image 130s\n");
notify_ui_working_status(hg_log::lang_load(ID_STATU_DESC_SCANNER_ERR_DEVICE_GET_IMAGE_OUTTIME), SANE_EVENT_ERROR, status_); // <EFBFBD>蹱𡵆瘚㗛𢥫瘞思<EFBFBD><EFBFBD>鍦䴴璊?
notify_ui_working_status(hg_log::lang_load(ID_STATU_DESC_SCANNER_ERR_DEVICE_GET_IMAGE_OUTTIME), SANE_EVENT_ERROR, status_); // 鍙栧浘閫氫俊瓒呮椂
break;
}
if (ret == SCANNER_ERR_OK && usb.u32_Count > 0)
@ -283,7 +283,7 @@ void hg_scanner_300::thread_handle_usb_read(void)
}
continue;
}
int totalNum = usb.u32_Count & 0x3fffffff; // 2022-08-04: <EFBFBD>澆捆Android嚗屸<EFBFBD>霈文㦛<EFBFBD><EFBFBD>之撠誩<EFBFBD><EFBFBD>?GB隞亙<E99A9E>
int totalNum = usb.u32_Count & 0x3fffffff; // 2022-08-04: 兼容Android默认图片大小均在1GB以内
VLOG_MINI_2(LOG_LEVEL_WARNING, "Get Scaner Image Size:%d bytes,Image Num[%d]\n", totalNum,img_num);
img_num++;
if (totalNum)
@ -394,7 +394,7 @@ int hg_scanner_300::start(void)
{
return ret;
}
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>靽嗪埯嚗?
if (is_devs_sleep_)//设备在睡眠的状态当中获取固件是失败的,所以在这个地方进行标志位设置。(总感觉不保险)
{
is_devs_sleep_ = false;
set_kernelsnap_ver();
@ -429,7 +429,7 @@ int hg_scanner_300::start(void)
VLOG_MINI_1(LOG_LEVEL_WARNING, "----------Main start scan status : %s----------\n", hg_scanner_err_description(ret));
return ret;
}
int hg_scanner_300::stop(bool from_user)
int hg_scanner_300::stop(void)
{
int ret = SCANNER_ERR_OK;
@ -445,7 +445,7 @@ int hg_scanner_300::stop(bool from_user)
LOG_INFO(LOG_LEVEL_DEBUG_INFO,"stop status is busy\r\n");
std::this_thread::sleep_for(std::chrono::milliseconds(2000));
}
user_cancel_ = from_user;
user_cancel_ = true;
if (ret == SCANNER_ERR_OK)
{
status_ = SCANNER_ERR_DEVICE_STOPPED;
@ -877,7 +877,7 @@ int hg_scanner_300::initdevice()
if (status_ != SCANNER_ERR_DEVICE_SLEEPING)
{
set_kernelsnap_ver();
is_devs_sleep_ = false; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><E691B0><EFBCB8>𣂼<EFBFBD><F0A382BC>孵稬霈曄蔭餈躰器<E8BAB0>箔辣<E7AE94><E8BEA3>𧋦<EFBFBD>?餈䀹瓷<E480B9><EFBFBD><E58CA7>斗鱏<E69697>?
is_devs_sleep_ = false; // 睡眠唤醒 客户提前点击设置这边固件版本号 还没有做判断的
}
return SCANNER_ERR_OK;
}
@ -909,7 +909,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; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㺭 霈曄蔭隡𤑳<E99AA1><F0A491B3>園𡢿 銝支葵<E694AF><E891B5>㺭3399<39>芯蝙<E88AAF>?
ic.hardwarecaps.lowpowermode = LowPowerMode::Min_None; //暂无参数 设置休眠时间 两个参数3399未使用
image_configuration(ic);
}
void hg_scanner_300::printf_devconfig(setting_hardware::HGSCANCONF_3288 *d)
@ -990,7 +990,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++) //暺𤑳蒾銝<EFBFBD>韏瑚<EFBFBD>摮䀝<EFBFBD><EFBFBD>?
for (size_t i = 0; i < 2; i++) //黑白一起保存下来
{
vector<unsigned char> imagedata;
@ -1032,7 +1032,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; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>撘惩㦛瘝⊥<EFBFBD> <20>湔𦻖<E6B994><F0A6BB96>鈭?
return SCANNER_ERR_NO_DATA; //只要有一张图没有 直接退了
}
float f = 0.0;
@ -1065,7 +1065,7 @@ std::string hg_scanner_300::get_firmware_version()
{
char buf[20] = { 0 };
int ret = SCANNER_ERR_OK,
len = 10; //<EFBFBD>讛悅摰帋<EFBFBD><EFBFBD>踹漲銝?0 100 200 =8
len = 10; //协议定义长度为10 100 200 =8
USBCB cmd = { setting3288dsp::GET_FW_VERSION,len,0,};
{

View File

@ -31,15 +31,15 @@ protected:
protected:
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; //设置超声波检�
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_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; //获取分纸强度
virtual int on_set_feedmode(int feedmode) override; //设置分纸强度
virtual int on_pic_type(bool& pic)override; //照片模å¼<EFBFBD>æˆè€…æ‡æœ¬æ¨¡å¼?
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; //待纸扫描
@ -51,7 +51,7 @@ public:
~hg_scanner_300();
public:
virtual int start(void)override;
virtual int stop(bool from_user = false)override;
virtual int stop(void)override;
private:
int set_kernelsnap_ver();
int agreement(TwSS tw,int align);
@ -66,10 +66,10 @@ private:
void writedown_image_configuration(void);
void printf_devconfig(setting_hardware::HGSCANCONF_3288 *d = NULL);
int get_device_type(bool &type);
int get_devs_distortion_check_val(float& data, int dpi, int dir);//获å<EFBFBD>设备畸å<EFBFBD>˜å€?DPI=1ã€?ã€?ï¼?dir = 0,1;
int get_devs_distortion_check_val(float& data, int dpi, int dir);//获取设备畸变值 DPI=1、2、3 dir = 0,1;
setting3288dsp::HG_JpegCompressInfo frame_info_;
///////////////////////7010专有å<EFBFBD><EFBFBD>议,获å<EFBFBD>校正数æ<EFBFBD>?/////////////////////
///////////////////////7010专有协议,获取校正数据//////////////////////
//inx:序号//
//dpi:1--->200 2--->300 3--->600//
//mode:0 灰度 1彩色
@ -81,8 +81,8 @@ private:
bool is_devs_sleep_;
int first_frame_total; //设置的帧�
int last_frame_total; //实际采集的帧�
int first_frame_total; //设置的帧数
int last_frame_total; //实际采集的帧数
std::vector<unsigned char> jpgdata_;
@ -94,42 +94,42 @@ public:
virtual std::string get_serial_num(void)override;
virtual std::string get_ip(void)override;
virtual int set_serial_num(string str) override; //设置åº<EFBFBD>列å<EFBFBD>?
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
/////////////////成功返回:SCANNER_ERR_OK /////////////
/////////////////失败返回:IO错误� /////////////
/////////////////失败返回:IO错误码 /////////////
virtual int set_leaflet_scan(void) override; //单张扫描
virtual int set_clear_roller_num(void) override; //清除滚轴计数
virtual int set_clear_history_num(void) override; //清除历å<EFBFBD>²å¼ æ•° 0303åºä»¶ç‰ˆæœ¬æ‰<C3A6>支æŒ?
virtual int set_clear_history_num(void) override; //清除历史张数 0303固件版本才支持
virtual int get_device_code(void); //获å<EFBFBD>设备ç¼ç <EFBFBD> ä¸<C3A4>支æŒ?
virtual int get_device_code(void); //获取设备编码 不支持
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_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; //设置设备是å<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_scan_islock(SANE_Bool type) override; //设置设备是否锁定 /*/ type:0解锁1锁定*/
virtual int get_scan_islock(SANE_Bool& type) override; //获取设备是否锁定 /*/ type:0解锁1锁定*/
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; //获å<EFBFBD>设备æ‡ä»¶ /*/ data:0 未上é”<C3A9>,1 上é”<C3A9>ã€?1 未å<C2AA>现é»å<E28098><C3A5>å<EFBFBD>•åˆ—表 -2列表没有信æ<C2A1>¯*/
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 set_speed_mode(int data) override; //设置速度模式 /*/ data:40,50,60,70
virtual int get_speed_mode(int& data)override; //获取速度模式 /*/ data:40,50,60,70
virtual int set_devs_distortion_check_val(float data) override; //设置畸变矫正
virtual int get_devs_distortion_check_val(float& data)override;//获å<EFBFBD>设备畸å<EFBFBD>˜å€? float to int;
virtual int get_devs_distortion_check_val(float& data)override;//获取设备畸变值 float to int;
virtual int set_auto_flat(int data)override; //设置自动平场校正
// 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)override;

View File

@ -1129,12 +1129,12 @@ int hg_scanner_302::start(void)
return ret;
}
int hg_scanner_302::stop(bool from_user)
int hg_scanner_302::stop(void)
{
std::lock_guard<std::mutex> lock(io_lock_);
int ret = SCANNER_ERR_OK;
user_cancel_ = from_user;
user_cancel_ = true;
ret = write_command(setting3399::SC_STOP);
// io_->set_timeout(500);
//final_imgs_.clear();

View File

@ -62,15 +62,15 @@ protected:
protected:
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; //设置超声波检�
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_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; //获取分纸强度
virtual int on_set_feedmode(int feedmode) override; //设置分纸强度
virtual int on_pic_type(bool& pic)override; //照片模å¼<EFBFBD>æˆè€…æ‡æœ¬æ¨¡å¼?
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; //待纸扫描
@ -86,7 +86,7 @@ public:
virtual int start(void) override;
//virtual int get_image_info(IMG_PARAM* ii) override;
//virtual int read_image_data(unsigned char* buf, int* len) override;
virtual int stop(bool from_user = false) override;
virtual int stop(void) override;
virtual int reset(void) override;
virtual int device_io_control(unsigned long code, void* data, unsigned* len) override;
@ -96,41 +96,41 @@ public:
virtual std::string get_serial_num(void)override;
virtual std::string get_ip(void)override;
virtual int set_serial_num(string str) override; //设置åº<EFBFBD>列å<EFBFBD>?
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
/////////////////成功返回:SCANNER_ERR_OK /////////////
/////////////////失败返回:IO错误� /////////////
/////////////////失败返回:IO错误码 /////////////
virtual int set_leaflet_scan(void) override; //单张扫描
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; //获取设备有无纸张 /*/ 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_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; //设置设备是å<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_scan_islock(SANE_Bool type) override; //设置设备是否锁定 /*/ type:0解锁1锁定*/
virtual int get_scan_islock(SANE_Bool& type) override; //获取设备是否锁定 /*/ type:0解锁1锁定*/
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; //获å<EFBFBD>设备æ‡ä»¶ /*/ data:0 未上é”<C3A9>,1 上é”<C3A9>ã€?1 未å<C2AA>现é»å<E28098><C3A5>å<EFBFBD>•åˆ—表 -2列表没有信æ<C2A1>¯*/
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 set_speed_mode(int data) override; //设置速度模式 /*/ data:40,50,60,70
virtual int get_speed_mode(int& data)override; //获取速度模式 /*/ data:40,50,60,70
virtual int set_devs_distortion_check_val(float data) override; //设置畸变矫正
virtual int get_devs_distortion_check_val(float& data) override; //获å<EFBFBD>设备畸å<EFBFBD>˜å€?
virtual int get_devs_distortion_check_val(float& data) override; //获取设备畸变值
virtual int set_auto_flat(int data) override; //设置自动平场校正
// data:0(ALL) 1(200dpi、gray) 2(200dpi、color) 3(300dpi、gray) 4(300dpi、color) 5(600dpi、gray) 6(600dpi、color)

View File

@ -1056,7 +1056,7 @@ scanner_err hg_scanner_mgr::hg_scanner_start(scanner_handle h, void* async_event
}
scanner_err hg_scanner_mgr::hg_scanner_stop(scanner_handle h)
{
scanner_err err = (scanner_err)SCAN_PTR(h)->stop(true);
scanner_err err = (scanner_err)SCAN_PTR(h)->stop();
// call from APP, block when all working-threads stopped - added on 2023-10-18 when handled double-feeding in SANE
while (SCAN_PTR(h)->is_running() != hg_scanner::THREAD_RUNNING_IDLE)