From a2002ac4556bc6d95126873b8ddb3be1b176a25c Mon Sep 17 00:00:00 2001 From: yangjiaxuan <171295266@qq.com> Date: Tue, 17 Oct 2023 18:23:04 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E5=BE=AE=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/hgdev/hg_scanner.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hgdriver/hgdev/hg_scanner.cpp b/hgdriver/hgdev/hg_scanner.cpp index b2b8fbc..42ccd67 100644 --- a/hgdriver/hgdev/hg_scanner.cpp +++ b/hgdriver/hgdev/hg_scanner.cpp @@ -161,7 +161,7 @@ hg_scanner::hg_scanner(ScannerSerial serial, const char* dev_name, usb_io* io, i , is_auto_paper_scan_exit_time(60), is_read_int(true), is_auto_feedmode_(false) , firmware_sup_wait_paper_(false),firmware_sup_pick_strength_(false),firmware_sup_log_export_(false),firmware_sup_color_corr_(false),firmware_sup_wake_device_(false) , firmware_sup_double_img(false),firmware_sup_devs_lock_(false),firmware_sup_dpi_300(false),firmware_sup_dpi_600(false),firmware_sup_auto_speed_(false),firmware_sup_morr_(false) - , firmware_sup_color_fill_(false),firmware_sup_history_cnt(false), have_max_size(false), is_discardblank(false) + , firmware_sup_color_fill_(false),firmware_sup_history_cnt(false), have_max_size(false), is_discardblank(false),firmware_sup_device_7010(false) , auto_scan_restore_(false), auto_scan_prev_(is_auto_paper_scan) { #if !defined(_WIN32) && !defined(_WIN64) &&defined(x86_64) From 13cb6ad835a049370978d775da26bb63754e1a64 Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Wed, 18 Oct 2023 14:49:29 +0800 Subject: [PATCH 2/8] blocking during stop() call until all worker-threads exit --- hgdriver/hgdev/scanner_manager.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/hgdriver/hgdev/scanner_manager.cpp b/hgdriver/hgdev/scanner_manager.cpp index bacb681..445177e 100644 --- a/hgdriver/hgdev/scanner_manager.cpp +++ b/hgdriver/hgdev/scanner_manager.cpp @@ -1056,7 +1056,13 @@ 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) { - return (scanner_err)SCAN_PTR(h)->stop(); + 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) + std::this_thread::sleep_for(std::chrono::milliseconds(3)); + + return err; } scanner_err hg_scanner_mgr::hg_scanner_get_img_info(scanner_handle h, SANE_Parameters* bmi, long len) { From 483703fa950edde4c460c60ca2df939c5572fbc8 Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Wed, 18 Oct 2023 14:56:09 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E5=B0=86is=5Fscanning=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E6=8F=90=E5=8D=87=E4=B8=BA=E5=85=AC=E5=BC=80=E5=8F=AF=E8=AE=BF?= =?UTF-8?q?=E9=97=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/hgdev/hg_scanner.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/hgdriver/hgdev/hg_scanner.h b/hgdriver/hgdev/hg_scanner.h index d542225..8a8efb7 100644 --- a/hgdriver/hgdev/hg_scanner.h +++ b/hgdriver/hgdev/hg_scanner.h @@ -430,14 +430,6 @@ protected: void adjust_filling_hole(LPSCANCONF conf); - enum thread_running - { - THREAD_RUNNING_IDLE = 0, - THREAD_RUNNING_USB = 1 << 0, - THREAD_RUNNING_IMAGE = 1 << 1, - }; - int is_running(void); // return thread_running - //////////////////////////////////////////////////////////////// // 新增自定义伽玛曲线及扫描区域属性 - 2022-05-05 bool custom_gamma_; // 为true时,应用custom_gamma_val_阵列调整图像色彩;为false时,保持原来的处理方式 @@ -476,6 +468,14 @@ public: bool is_online(void); void on_language_changed(void); + enum thread_running + { + THREAD_RUNNING_IDLE = 0, + THREAD_RUNNING_USB = 1 << 0, + THREAD_RUNNING_IMAGE = 1 << 1, + }; + int is_running(void); // return thread_running + public: virtual int start(void); virtual int get_image_info(SANE_Parameters* ii, int len); From af593e33765f4f24132cd14c0f2916065354e284 Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Wed, 18 Oct 2023 16:33:25 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E4=B8=BA=E5=8F=8C=E5=BC=A0=E5=A4=84?= =?UTF-8?q?=E7=90=86=E5=8A=9F=E8=83=BD=EF=BC=8C=E8=B0=83=E6=95=B4=E4=B8=89?= =?UTF-8?q?=E6=96=B9=E5=90=AF=E5=8A=A8=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/hgdev/hg_scanner.cpp | 35 ++++++++++++--------- hgdriver/hgdev/hg_scanner.h | 2 +- hgdriver/hgdev/hg_scanner_200.cpp | 16 +++++----- hgdriver/hgdev/hg_scanner_200.h | 34 ++++++++++---------- hgdriver/hgdev/hg_scanner_239.cpp | 4 +-- hgdriver/hgdev/hg_scanner_239.h | 2 +- hgdriver/hgdev/hg_scanner_300.cpp | 38 +++++++++++------------ hgdriver/hgdev/hg_scanner_300.h | 50 +++++++++++++++--------------- hgdriver/hgdev/hg_scanner_302.cpp | 4 +-- hgdriver/hgdev/hg_scanner_302.h | 40 ++++++++++++------------ hgdriver/hgdev/scanner_manager.cpp | 2 +- 11 files changed, 116 insertions(+), 111 deletions(-) diff --git a/hgdriver/hgdev/hg_scanner.cpp b/hgdriver/hgdev/hg_scanner.cpp index 42ccd67..9571c91 100644 --- a/hgdriver/hgdev/hg_scanner.cpp +++ b/hgdriver/hgdev/hg_scanner.cpp @@ -3384,8 +3384,10 @@ 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()) @@ -3393,31 +3395,34 @@ 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_) + //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) handled = false; - else if (status_ == SCANNER_ERR_OK) - ret = SCANNER_ERR_DEVICE_NO_PAPER; else ret = status_; } } - else if (final_img_index_) - { - final_img_index_ = 0; - - if (user_cancel_) - handled = false; - else if (status_ == SCANNER_ERR_OK) - ret = SCANNER_ERR_DEVICE_NO_PAPER; - else - ret = status_; - } else + { + // 一轮扫描已经完成,重新开始新一轮扫描 + final_img_index_ = 0; handled = false; + } } return ret; @@ -4114,7 +4119,7 @@ int hg_scanner::read_image_data(unsigned char* buf, int* len) return SCANNER_ERR_NO_DATA; } } -int hg_scanner::stop(void) +int hg_scanner::stop(bool from_user) { user_cancel_ = true; diff --git a/hgdriver/hgdev/hg_scanner.h b/hgdriver/hgdev/hg_scanner.h index 8a8efb7..060df64 100644 --- a/hgdriver/hgdev/hg_scanner.h +++ b/hgdriver/hgdev/hg_scanner.h @@ -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(void); + virtual int stop(bool from_user = false); virtual int reset(void); virtual int device_io_control(unsigned long code, void* data, unsigned* len); virtual int discard_all_images(void) = 0; diff --git a/hgdriver/hgdev/hg_scanner_200.cpp b/hgdriver/hgdev/hg_scanner_200.cpp index a837056..7a6382f 100644 --- a/hgdriver/hgdev/hg_scanner_200.cpp +++ b/hgdriver/hgdev/hg_scanner_200.cpp @@ -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_));//优先初始化 + 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(void) +int hg_scanner_200::stop(bool from_user) { int ret = SCANNER_ERR_OK; @@ -327,7 +327,7 @@ int hg_scanner_200::stop(void) std::lock_guard lock(io_lock_); ret = writeusb(usbcb); } - user_cancel_ = true; + user_cancel_ = from_user; 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_; //不得改变外部的值 + 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设置获取cis原图,1校正之后的图 + dsp_config_.params_dsp.isCorrect = isautopaper == true ? 0 : 1; //0设置获取cis原图?校正之后的图 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; //暂无参数 设置休眠时间 两个参数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; //协议定义长度为8 300 400 =10 + len = 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; //协议定义长度为8 300 400 =10 + len = 12; //协议定义长度? 300 400 =10 USBCB cmd = { setting3288dsp::GET_SERIAL, len, 0 }; { diff --git a/hgdriver/hgdev/hg_scanner_200.h b/hgdriver/hgdev/hg_scanner_200.h index 5779b02..d85f12a 100644 --- a/hgdriver/hgdev/hg_scanner_200.h +++ b/hgdriver/hgdev/hg_scanner_200.h @@ -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; //照片模式或者文本模式 + 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_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(void)override; + virtual int stop(bool from_user = false)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; //设置序列号 + 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); //获取设备编码 不支持 + 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; //获取设备是否休眠当中 /*/ 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_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解锁,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_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 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; //设置速度模式 /*/ 不支持 - virtual int get_speed_mode(int &data) override; //设置速度模式 /*/ 不支持 + 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; //获取设备畸变值 + 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) diff --git a/hgdriver/hgdev/hg_scanner_239.cpp b/hgdriver/hgdev/hg_scanner_239.cpp index ff3a977..388cebf 100644 --- a/hgdriver/hgdev/hg_scanner_239.cpp +++ b/hgdriver/hgdev/hg_scanner_239.cpp @@ -1542,11 +1542,11 @@ int hg_scanner_239::start(void) return ret; } -int hg_scanner_239::stop(void) +int hg_scanner_239::stop(bool from_user) { int ret = SCANNER_ERR_OK; - user_cancel_ = true; + user_cancel_ = from_user; ret = write_command(setting3399::SC_STOP); io_->set_timeout(500); diff --git a/hgdriver/hgdev/hg_scanner_239.h b/hgdriver/hgdev/hg_scanner_239.h index 2542e63..3e13e4c 100644 --- a/hgdriver/hgdev/hg_scanner_239.h +++ b/hgdriver/hgdev/hg_scanner_239.h @@ -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(void) override; + virtual int stop(bool from_user = false) 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; diff --git a/hgdriver/hgdev/hg_scanner_300.cpp b/hgdriver/hgdev/hg_scanner_300.cpp index 2e38fd8..3bbabdb 100644 --- a/hgdriver/hgdev/hg_scanner_300.cpp +++ b/hgdriver/hgdev/hg_scanner_300.cpp @@ -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; //默认值 + 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_));//优先初始化 + 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); - //如果设备出现卡纸 或者双张等设备信息问题,需要等到设备进行发送stop才能停止。 所以始终以 "停止" 消息为结束信号 - //如果有图的情况下,并且卡纸或双张等,设备会先发送卡纸双张信息。所以接受到错误信息之后,仍需要把图像取出来。 + //如果设备出现卡纸 或者双张等设备信息问题,需要等到设备进行发送stop才能停止?所以始终以 "停止" 消息为结束信? + //如果有图的情况下,并且卡纸或双张等,设备会先发送卡纸双张信息。所以接受到错误信息之后,仍需要把图像取出来? if (ret == SCANNER_ERR_DEVICE_STOPPED) { - status_ = !savestatus_.empty() ? savestatus_[0] : SCANNER_ERR_OK;//以第一个消息为准 + 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)//防止状态信息一直取不上来导致卡死 + 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())//以第一个消息为准 + 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_); // 鍙栧浘閫氫俊瓒呮椂 + 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())//以第一个消息为准 + 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_); // 鍙栧浘閫氫俊瓒呮椂 + 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: 兼容Android,默认图片大小均在1GB以内 + int totalNum = usb.u32_Count & 0x3fffffff; // 2022-08-04: 兼容Android,默认图片大小均?GB以内 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_)//设备在睡眠的状态当中获取固件是失败的,所以在这个地方进行标志位设置。(总感觉不保险) + 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(void) +int hg_scanner_300::stop(bool from_user) { int ret = SCANNER_ERR_OK; @@ -445,7 +445,7 @@ int hg_scanner_300::stop(void) LOG_INFO(LOG_LEVEL_DEBUG_INFO,"stop status is busy\r\n"); std::this_thread::sleep_for(std::chrono::milliseconds(2000)); } - user_cancel_ = true; + user_cancel_ = from_user; 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; // 睡眠唤醒 客户提前点击设置这边固件版本号 还没有做判断的 + 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; //暂无参数 设置休眠时间 两个参数3399未使用 + 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++) //黑白一起保存下来 + for (size_t i = 0; i < 2; i++) //黑白一起保存下? { vector 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; //只要有一张图没有 直接退了 + 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; //协议定义长度为10 100 200 =8 + len = 10; //协议定义长度?0 100 200 =8 USBCB cmd = { setting3288dsp::GET_FW_VERSION,len,0,}; { diff --git a/hgdriver/hgdev/hg_scanner_300.h b/hgdriver/hgdev/hg_scanner_300.h index 5b879a9..dbd5646 100644 --- a/hgdriver/hgdev/hg_scanner_300.h +++ b/hgdriver/hgdev/hg_scanner_300.h @@ -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; //照片模式或者文本模式 + 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(void)override; + virtual int stop(bool from_user = false)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);//获取设备畸变值 DPI=1、2、3; dir = 0,1; + int get_devs_distortion_check_val(float& data, int dpi, int dir);//获取设备畸变?DPI=1???dir = 0,1; setting3288dsp::HG_JpegCompressInfo frame_info_; - ///////////////////////7010专有协议,获取校正数据////////////////////// + ///////////////////////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 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; //设置序列号 + 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; //清除历史张数 0303固件版本才支持 + virtual int set_clear_history_num(void) override; //清除历史张数 0303固件版本才支? - virtual int get_device_code(void); //获取设备编码 不支持 + 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; //获取设备是否休眠当中 /*/ 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_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解锁,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_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 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;//获取设备畸变值 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; diff --git a/hgdriver/hgdev/hg_scanner_302.cpp b/hgdriver/hgdev/hg_scanner_302.cpp index fdb1668..23f992a 100644 --- a/hgdriver/hgdev/hg_scanner_302.cpp +++ b/hgdriver/hgdev/hg_scanner_302.cpp @@ -1129,12 +1129,12 @@ int hg_scanner_302::start(void) return ret; } -int hg_scanner_302::stop(void) +int hg_scanner_302::stop(bool from_user) { std::lock_guard lock(io_lock_); int ret = SCANNER_ERR_OK; - user_cancel_ = true; + user_cancel_ = from_user; ret = write_command(setting3399::SC_STOP); // io_->set_timeout(500); //final_imgs_.clear(); diff --git a/hgdriver/hgdev/hg_scanner_302.h b/hgdriver/hgdev/hg_scanner_302.h index 9cd5af8..405e5ed 100644 --- a/hgdriver/hgdev/hg_scanner_302.h +++ b/hgdriver/hgdev/hg_scanner_302.h @@ -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; //照片模式或者文本模式 + 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(void) override; + virtual int stop(bool from_user = false) 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; //设置序列号 + 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); //获取设备编码 不支持 + 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; //获取设备是否休眠当中 /*/ 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_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解锁,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_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 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; //获取设备畸变值 + 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) diff --git a/hgdriver/hgdev/scanner_manager.cpp b/hgdriver/hgdev/scanner_manager.cpp index 445177e..52de89e 100644 --- a/hgdriver/hgdev/scanner_manager.cpp +++ b/hgdriver/hgdev/scanner_manager.cpp @@ -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(); + scanner_err err = (scanner_err)SCAN_PTR(h)->stop(true); // 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) From 07d094acd0ab5047879501eeeb600d0bc75e664f Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Wed, 18 Oct 2023 17:09:34 +0800 Subject: [PATCH 5/8] =?UTF-8?q?Revert=20"=E4=B8=BA=E5=8F=8C=E5=BC=A0?= =?UTF-8?q?=E5=A4=84=E7=90=86=E5=8A=9F=E8=83=BD=EF=BC=8C=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E4=B8=89=E6=96=B9=E5=90=AF=E5=8A=A8=E9=80=BB=E8=BE=91"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit af593e33765f4f24132cd14c0f2916065354e284. --- hgdriver/hgdev/hg_scanner.cpp | 33 +++++++++----------- hgdriver/hgdev/hg_scanner.h | 2 +- hgdriver/hgdev/hg_scanner_200.cpp | 16 +++++----- hgdriver/hgdev/hg_scanner_200.h | 34 ++++++++++---------- hgdriver/hgdev/hg_scanner_239.cpp | 4 +-- hgdriver/hgdev/hg_scanner_239.h | 2 +- hgdriver/hgdev/hg_scanner_300.cpp | 38 +++++++++++------------ hgdriver/hgdev/hg_scanner_300.h | 50 +++++++++++++++--------------- hgdriver/hgdev/hg_scanner_302.cpp | 4 +-- hgdriver/hgdev/hg_scanner_302.h | 40 ++++++++++++------------ hgdriver/hgdev/scanner_manager.cpp | 2 +- 11 files changed, 110 insertions(+), 115 deletions(-) diff --git a/hgdriver/hgdev/hg_scanner.cpp b/hgdriver/hgdev/hg_scanner.cpp index 9571c91..42ccd67 100644 --- a/hgdriver/hgdev/hg_scanner.cpp +++ b/hgdriver/hgdev/hg_scanner.cpp @@ -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; diff --git a/hgdriver/hgdev/hg_scanner.h b/hgdriver/hgdev/hg_scanner.h index 060df64..8a8efb7 100644 --- a/hgdriver/hgdev/hg_scanner.h +++ b/hgdriver/hgdev/hg_scanner.h @@ -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; diff --git a/hgdriver/hgdev/hg_scanner_200.cpp b/hgdriver/hgdev/hg_scanner_200.cpp index 7a6382f..a837056 100644 --- a/hgdriver/hgdev/hg_scanner_200.cpp +++ b/hgdriver/hgdev/hg_scanner_200.cpp @@ -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_));//优先初始? + 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 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_; //不得改变外部的? + 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设置获取cis原图?校正之后的图 + 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; //暂无参数 设置休眠时间 两个参数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; //协议定义长度? 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; //协议定义长度? 300 400 =10 + len = 12; //协议定义长度为8 300 400 =10 USBCB cmd = { setting3288dsp::GET_SERIAL, len, 0 }; { diff --git a/hgdriver/hgdev/hg_scanner_200.h b/hgdriver/hgdev/hg_scanner_200.h index d85f12a..5779b02 100644 --- a/hgdriver/hgdev/hg_scanner_200.h +++ b/hgdriver/hgdev/hg_scanner_200.h @@ -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; //照片模式或者文本模? + 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_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; //设置序列? + 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); //获取设备编码 不支? + 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; //获取设备是否休眠当中 /*/ 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_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_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; //获取设备文件 /*/ data:0 未上锁,1 上锁?1 未发现黑名单列表 -2列表没有信息*/ + 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; //设置速度模式 /*/ 不支? - virtual int get_speed_mode(int &data) override; //设置速度模式 /*/ 不支? + 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; //获取设备畸变? + 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) diff --git a/hgdriver/hgdev/hg_scanner_239.cpp b/hgdriver/hgdev/hg_scanner_239.cpp index 388cebf..ff3a977 100644 --- a/hgdriver/hgdev/hg_scanner_239.cpp +++ b/hgdriver/hgdev/hg_scanner_239.cpp @@ -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); diff --git a/hgdriver/hgdev/hg_scanner_239.h b/hgdriver/hgdev/hg_scanner_239.h index 3e13e4c..2542e63 100644 --- a/hgdriver/hgdev/hg_scanner_239.h +++ b/hgdriver/hgdev/hg_scanner_239.h @@ -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; diff --git a/hgdriver/hgdev/hg_scanner_300.cpp b/hgdriver/hgdev/hg_scanner_300.cpp index 3bbabdb..2e38fd8 100644 --- a/hgdriver/hgdev/hg_scanner_300.cpp +++ b/hgdriver/hgdev/hg_scanner_300.cpp @@ -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; //默认? + 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_));//优先初始? + 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); - //如果设备出现卡纸 或者双张等设备信息问题,需要等到设备进行发送stop才能停止?所以始终以 "停止" 消息为结束信? - //如果有图的情况下,并且卡纸或双张等,设备会先发送卡纸双张信息。所以接受到错误信息之后,仍需要把图像取出来? + //如果设备出现卡纸 或者双张等设备信息问题,需要等到设备进行发送stop才能停止。 所以始终以 "停止" 消息为结束信号 + //如果有图的情况下,并且卡纸或双张等,设备会先发送卡纸双张信息。所以接受到错误信息之后,仍需要把图像取出来。 if (ret == SCANNER_ERR_DEVICE_STOPPED) { - status_ = !savestatus_.empty() ? savestatus_[0] : SCANNER_ERR_OK;//以第一个消息为? + 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)//防止状态信息一直取不上来导致卡? + 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())//以第一个消息为? + 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_); // 鍙栧浘閫氫俊瓒呮? + 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())//以第一个消息为? + 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_); // 鍙栧浘閫氫俊瓒呮? + 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: 兼容Android,默认图片大小均?GB以内 + 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_)//设备在睡眠的状态当中获取固件是失败的,所以在这个地方进行标志位设置。(总感觉不保险? + 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; // 睡眠唤醒 客户提前点击设置这边固件版本?还没有做判断? + 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; //暂无参数 设置休眠时间 两个参数3399未使? + 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++) //黑白一起保存下? + for (size_t i = 0; i < 2; i++) //黑白一起保存下来 { vector 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; //只要有一张图没有 直接退? + 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; //协议定义长度?0 100 200 =8 + len = 10; //协议定义长度为10 100 200 =8 USBCB cmd = { setting3288dsp::GET_FW_VERSION,len,0,}; { diff --git a/hgdriver/hgdev/hg_scanner_300.h b/hgdriver/hgdev/hg_scanner_300.h index dbd5646..5b879a9 100644 --- a/hgdriver/hgdev/hg_scanner_300.h +++ b/hgdriver/hgdev/hg_scanner_300.h @@ -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; //照片模式或者文本模? + 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);//获取设备畸变?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专有协议,获取校正数?///////////////////// + ///////////////////////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 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; //设置序列? + 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; //清除历史张数 0303固件版本才支? + virtual int set_clear_history_num(void) override; //清除历史张数 0303固件版本才支持 - virtual int get_device_code(void); //获取设备编码 不支? + 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; //获取设备是否休眠当中 /*/ 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_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_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; //获取设备文件 /*/ data:0 未上锁,1 上锁?1 未发现黑名单列表 -2列表没有信息*/ + 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;//获取设备畸变? 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; diff --git a/hgdriver/hgdev/hg_scanner_302.cpp b/hgdriver/hgdev/hg_scanner_302.cpp index 23f992a..fdb1668 100644 --- a/hgdriver/hgdev/hg_scanner_302.cpp +++ b/hgdriver/hgdev/hg_scanner_302.cpp @@ -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 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(); diff --git a/hgdriver/hgdev/hg_scanner_302.h b/hgdriver/hgdev/hg_scanner_302.h index 405e5ed..9cd5af8 100644 --- a/hgdriver/hgdev/hg_scanner_302.h +++ b/hgdriver/hgdev/hg_scanner_302.h @@ -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; //照片模式或者文本模? + 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; //设置序列? + 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); //获取设备编码 不支? + 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; //获取设备是否休眠当中 /*/ 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_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_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; //获取设备文件 /*/ data:0 未上锁,1 上锁?1 未发现黑名单列表 -2列表没有信息*/ + 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; //获取设备畸变? + 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) diff --git a/hgdriver/hgdev/scanner_manager.cpp b/hgdriver/hgdev/scanner_manager.cpp index 52de89e..445177e 100644 --- a/hgdriver/hgdev/scanner_manager.cpp +++ b/hgdriver/hgdev/scanner_manager.cpp @@ -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) From 78f5a7baa7bf75007d2c8ecbb48b8490b1ab566e Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Fri, 20 Oct 2023 11:13:18 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E6=9B=B4=E6=8D=A2sane/scanner/lang?= =?UTF-8?q?=E4=B8=89=E4=B8=AA=E6=A8=A1=E5=9D=97=E5=90=8D=E7=A7=B0=EF=BC=8C?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E4=B8=8E=E7=AC=AC=E4=B8=89=E6=96=B9APP?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E5=90=8D=E7=A7=B0=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/hgdev/hg_scanner.cpp | 8 ++++---- hgdriver/hgdev/hg_scanner_300.cpp | 8 ++++---- hgdriver/hgdev/image_process.cpp | 4 ++-- sdk/hginclude/huagaoxxx_warraper_ex.h | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/hgdriver/hgdev/hg_scanner.cpp b/hgdriver/hgdev/hg_scanner.cpp index 42ccd67..2e8d1d8 100644 --- a/hgdriver/hgdev/hg_scanner.cpp +++ b/hgdriver/hgdev/hg_scanner.cpp @@ -456,12 +456,12 @@ int hg_scanner::hg_version_init_handle() { int ret = SCANNER_ERR_OK; #ifndef WIN32 - string scanner_path = hg_log::get_module_full_path(LIBNAME); + string scanner_path = hg_log::get_module_full_path(MODULE_NAME_SCANNER); if (scanner_path.empty()) { return SCANNER_ERR_OUT_OF_RANGE; } - scanner_path = scanner_path.substr(0, scanner_path.size() - strlen(LIBNAME)); + scanner_path = scanner_path.substr(0, scanner_path.size() - strlen(MODULE_NAME_SCANNER)); string HGVersionlib_path = scanner_path + HGVERSION_LIBNANE; if (access(HGVersionlib_path.c_str(), F_OK) != 0) @@ -482,8 +482,8 @@ int hg_scanner::hg_version_init_handle() HGVersion_Free_ = (SDKHGVersion_Free_)dlsym(Dynamicopen_HGVersion_pHandle_, "HGVersion_DestroyMgr"); #else - string scanner_path = hg_log::get_module_full_path(LIBNAME); - scanner_path = scanner_path.substr(0, scanner_path.size() - strlen(LIBNAME)); + string scanner_path = hg_log::get_module_full_path(MODULE_NAME_SCANNER); + scanner_path = scanner_path.substr(0, scanner_path.size() - strlen(MODULE_NAME_SCANNER)); string HGVersionlib_path = scanner_path + HGVERSION_LIBNANE; wchar_t* Prclibbuffer = new wchar_t[HGVersionlib_path.length() + 1]; diff --git a/hgdriver/hgdev/hg_scanner_300.cpp b/hgdriver/hgdev/hg_scanner_300.cpp index 2e38fd8..6b50b0b 100644 --- a/hgdriver/hgdev/hg_scanner_300.cpp +++ b/hgdriver/hgdev/hg_scanner_300.cpp @@ -866,8 +866,8 @@ int hg_scanner_300::initdevice() { if (fw.substr(4, 6) == "230303") { - string scanner_path = hg_log::get_module_full_path(LIBNAME); - scanner_path = scanner_path.substr(0, scanner_path.size() - strlen(LIBNAME)); + string scanner_path = hg_log::get_module_full_path(MODULE_NAME_SCANNER); + scanner_path = scanner_path.substr(0, scanner_path.size() - strlen(MODULE_NAME_SCANNER)); scanner_path += "update.zip"; set_firmware_upgrade(scanner_path); return SCANNER_ERR_OK; @@ -1558,8 +1558,8 @@ int hg_scanner_300::set_updata0303(void) { if (fw.substr(4, 6) == "230303") { - string scanner_path = hg_log::get_module_full_path(LIBNAME); - scanner_path = scanner_path.substr(0, scanner_path.size() - strlen(LIBNAME)); + string scanner_path = hg_log::get_module_full_path(MODULE_NAME_SCANNER); + scanner_path = scanner_path.substr(0, scanner_path.size() - strlen(MODULE_NAME_SCANNER)); scanner_path += "update.zip"; set_firmware_upgrade(scanner_path); } diff --git a/hgdriver/hgdev/image_process.cpp b/hgdriver/hgdev/image_process.cpp index 9ed38a6..e3b116a 100644 --- a/hgdriver/hgdev/image_process.cpp +++ b/hgdriver/hgdev/image_process.cpp @@ -353,8 +353,8 @@ namespace hg_imgproc HGBase_FreeImg = (SDKHGBase_FreeImage_)dlsym(Dynamicopen_HGBase_pHandle_,"HGBase_DestroyImage"); #else - string scanner_path = hg_log::get_module_full_path("scanner.dll"); - scanner_path = scanner_path.substr(0, scanner_path.size() - strlen("scanner.dll")); + string scanner_path = hg_log::get_module_full_path(MODULE_NAME_SCANNER); + scanner_path = scanner_path.substr(0, scanner_path.size() - strlen(MODULE_NAME_SCANNER)); string HGImagePrclib_path = scanner_path + IMGPRC_LIBNANE; string HGBaselib_path = scanner_path + HGBASE_LIBNAME; diff --git a/sdk/hginclude/huagaoxxx_warraper_ex.h b/sdk/hginclude/huagaoxxx_warraper_ex.h index 1aa1b9b..897e572 100644 --- a/sdk/hginclude/huagaoxxx_warraper_ex.h +++ b/sdk/hginclude/huagaoxxx_warraper_ex.h @@ -31,7 +31,7 @@ #if defined(WIN32) || defined(_WIN64) #include "../../../sdk/include/huagao/brand.h" #ifndef HGSCANNER_EXPORT -#pragma comment(lib, "scanner.lib") +#pragma comment(lib, "scannerqd.lib") #endif #define VERSION_MAJOR VERSION_MAIN #define VERSION_MINOR VERSION_SUB From f6ed0211ea8100d76eae225e00f35ed96e246ed2 Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Fri, 20 Oct 2023 11:46:27 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E5=9B=BD=E4=BA=A7?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E4=B8=8B=E8=AF=AD=E8=A8=80=E5=8C=85=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/wrapper/CMakeLists.txt | 2 +- hgsane/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hgdriver/wrapper/CMakeLists.txt b/hgdriver/wrapper/CMakeLists.txt index 991fbb8..8f6d373 100644 --- a/hgdriver/wrapper/CMakeLists.txt +++ b/hgdriver/wrapper/CMakeLists.txt @@ -36,7 +36,7 @@ endif() target_link_libraries(${PROJECT_NAME} PRIVATE ${PROJECT_SOURCE_DIR}/../../../build/libgdev.a ${PROJECT_SOURCE_DIR}/../../../build/libgimgproc.a - ${PROJECT_SOURCE_DIR}/../../../release/uos/${CMAKE_SYSTEM_PROCESSOR}/liblang.so + ${PROJECT_SOURCE_DIR}/../../../release/uos/${CMAKE_SYSTEM_PROCESSOR}/libyuyanbao.so ${PROJECT_SOURCE_DIR}/../3rdparty/opencv/lib/uos/${CMAKE_SYSTEM_PROCESSOR}/libopencv_imgproc.a ${PROJECT_SOURCE_DIR}/../3rdparty/opencv/lib/uos/${CMAKE_SYSTEM_PROCESSOR}/libopencv_imgcodecs.a ${PROJECT_SOURCE_DIR}/../3rdparty/opencv/lib/uos/${CMAKE_SYSTEM_PROCESSOR}/libopencv_highgui.a diff --git a/hgsane/CMakeLists.txt b/hgsane/CMakeLists.txt index 2957940..5d408ec 100644 --- a/hgsane/CMakeLists.txt +++ b/hgsane/CMakeLists.txt @@ -18,7 +18,7 @@ link_directories(${PROJECT_NAME} PRIVATE ${PROJECT_SOURCE_DIR}/../../release/uos/${CMAKE_SYSTEM_PROCESSOR} ) target_link_libraries(${PROJECT_NAME} PRIVATE hgdriver - ${PROJECT_SOURCE_DIR}/../../release/uos/${CMAKE_SYSTEM_PROCESSOR}/liblang.so + ${PROJECT_SOURCE_DIR}/../../release/uos/${CMAKE_SYSTEM_PROCESSOR}/libyuyanbao.so ${PROJECT_SOURCE_DIR}/../../release/uos/${CMAKE_SYSTEM_PROCESSOR}/libhgdriver.so ) From 34d078eb2d3b94bea69954f1fc375768021a5621 Mon Sep 17 00:00:00 2001 From: yangjiaxuan <171295266@qq.com> Date: Fri, 20 Oct 2023 15:50:55 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=99=A4=E7=A9=BF?= =?UTF-8?q?=E5=AD=94=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgdriver/ImageProcess/ImageApplyOutHole.cpp | 73 ++++++++++++++------- hgdriver/ImageProcess/ImageApplyOutHole.h | 3 +- 2 files changed, 50 insertions(+), 26 deletions(-) diff --git a/hgdriver/ImageProcess/ImageApplyOutHole.cpp b/hgdriver/ImageProcess/ImageApplyOutHole.cpp index 888fa96..926f872 100644 --- a/hgdriver/ImageProcess/ImageApplyOutHole.cpp +++ b/hgdriver/ImageProcess/ImageApplyOutHole.cpp @@ -6,6 +6,8 @@ #include "Device/filetools.h" #endif // LOG +//#define DRAW_PIC + CImageApplyOutHole::CImageApplyOutHole(void) : CImageApply() , m_borderSize(20) @@ -76,14 +78,20 @@ void CImageApplyOutHole::apply(std::vector& mats, bool isTwoSide) cv::Mat front_thre, back_thre; hg::threshold_Mat(front, front_thre, m_threshold); hg::threshold_Mat(back, back_thre, m_threshold); - //cv::imwrite("front_thre.jpg", front_thre); - //cv::imwrite("back_thre.jpg", back_thre); + +#ifdef DRAW_PIC + cv::imwrite("front_thre.jpg", front_thre); + cv::imwrite("back_thre.jpg", back_thre); +#endif cv::Mat element = getStructuringElement(cv::MORPH_RECT, cv::Size(5 * resize_scale, 1)); cv::morphologyEx(front_thre, front_thre, cv::MORPH_OPEN, element, cv::Point(-1, -1), 1, cv::BORDER_CONSTANT, cv::Scalar::all(0)); cv::morphologyEx(back_thre, back_thre, cv::MORPH_OPEN, element, cv::Point(-1, -1), 1, cv::BORDER_CONSTANT, cv::Scalar::all(0)); - //cv::imwrite("front_thre2.jpg", front_thre); - //cv::imwrite("back_thre2.jpg", back_thre); + +#ifdef DRAW_PIC + cv::imwrite("front_thre2.jpg", front_thre); + cv::imwrite("back_thre2.jpg", back_thre); +#endif //ֵͼˮƽת cv::flip(back_thre, back_thre, 1); //1:Horizontal @@ -94,22 +102,22 @@ void CImageApplyOutHole::apply(std::vector& mats, bool isTwoSide) hg::findContours(front_thre.clone(), contours_front, b1_front, cv::RETR_CCOMP); hg::findContours(back_thre.clone(), contours_back, b1_back, cv::RETR_CCOMP); - //ȡͼ - for (size_t i = 0; i < contours_front.size(); i++) - if (contours_front[i].size() < MIN_CONTOUR_SIZE) - { - contours_front.erase(contours_front.begin() + i); - b1_front.erase(b1_front.begin() + i); - i--; - } + ////ȡͼ + //for (size_t i = 0; i < contours_front.size(); i++) + // if (contours_front[i].size() < MIN_CONTOUR_SIZE) + // { + // contours_front.erase(contours_front.begin() + i); + // b1_front.erase(b1_front.begin() + i); + // i--; + // } - for (size_t i = 0; i < contours_back.size(); i++) - if (contours_back[i].size() < MIN_CONTOUR_SIZE) - { - contours_back.erase(contours_back.begin() + i); - b1_back.erase(b1_back.begin() + i); - i--; - } + //for (size_t i = 0; i < contours_back.size(); i++) + // if (contours_back[i].size() < MIN_CONTOUR_SIZE) + // { + // contours_back.erase(contours_back.begin() + i); + // b1_back.erase(b1_back.begin() + i); + // i--; + // } std::vector maxContour_front = hg::getMaxContour(contours_front, b1_front); std::vector maxContour_back = hg::getMaxContour(contours_back, b1_back); @@ -132,26 +140,41 @@ void CImageApplyOutHole::apply(std::vector& mats, bool isTwoSide) cv::Mat roiMat_front(front_thre, roi_front); //ֵͼнȡص cv::Mat roiMat_back(back_thre, roi_back); //ڷֵͼнȡص - //cv::imwrite("roiMat_front.jpg", roiMat_front); - //cv::imwrite("roiMat_back.jpg", roiMat_back); + +#ifdef DRAW_PIC + cv::imwrite("roiMat_front.jpg", roiMat_front); + cv::imwrite("roiMat_back.jpg", roiMat_back); +#endif //ֵͼ㣬ο0طΪ255 cv::Mat mask; cv::bitwise_or(roiMat_front, roiMat_back, mask); //㣬ֵͼص - //cv::imwrite("mask1.jpg", mask); + +#ifdef DRAW_PIC + cv::imwrite("mask1.jpg", mask); +#endif //ֵͼصͼɫȡͣȡ cv::bitwise_not(mask, mask); - //cv::imwrite("mask2.jpg", mask); //ɫ + +#ifdef DRAW_PIC + cv::imwrite("mask2.jpg", mask); //ɫ +#endif //Ϊ˱׶׹ᴩֽߣΪֽȷп׶ΪͼΣ뱳ճ cv::polylines(mask, hg::getVertices(mask_rotatedRect), true, cv::Scalar(0), LINE_WIDTH * resize_scale); //ֽžαԵ - //cv::imwrite("mask3.jpg", mask); + +#ifdef DRAW_PIC + cv::imwrite("mask3.jpg", mask); +#endif //㷨׶ͨ element = cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(DILATE_SIZE * resize_scale, DILATE_SIZE * resize_scale)); cv::dilate(mask, mask, element, cv::Point(-1, -1), 1, cv::BORDER_CONSTANT, cv::Scalar(255)); - //cv::imwrite("mask4.jpg", mask); + +#ifdef DRAW_PIC + cv::imwrite("mask4.jpg", mask); +#endif //ȡصͼ std::vector> contours_mask; diff --git a/hgdriver/ImageProcess/ImageApplyOutHole.h b/hgdriver/ImageProcess/ImageApplyOutHole.h index b028f8c..1d3dd49 100644 --- a/hgdriver/ImageProcess/ImageApplyOutHole.h +++ b/hgdriver/ImageProcess/ImageApplyOutHole.h @@ -25,7 +25,8 @@ * 2022/09/16 v1.9 Żڴ * 2022/09/16 v1.9.1 ޸ű߼ * 2022/11/17 v1.9.2 ޸Ѱҿ׶BUG - * 汾ţv1.9.2 + * 2023/05/16 v1.9.3 ޸ȡֽ߼BUG + * 汾ţv1.9.3 * ==================================================== */