调整校正流程
This commit is contained in:
parent
8b2045592f
commit
14c3b8494a
|
@ -1041,6 +1041,9 @@ void hg_scanner::working_done(void*)
|
|||
case SCANNER_ERR_DEVICE_ISLOCK:
|
||||
notify_ui_working_status(STATU_DESC_SCANNER_ERR_DEVICE_ISLOCK, SANE_EVENT_SCAN_FINISHED, status_);
|
||||
break;
|
||||
case SCANNER_ERR_DEVICE_AUTO_FAIL_OVER:
|
||||
notify_ui_working_status(STATU_DESC_SCANNER_ERR_DEVICE_AUTO_FAIL_OVER, SANE_EVENT_SCAN_FINISHED, status_);
|
||||
break;
|
||||
default:
|
||||
notify_ui_working_status(user_cancel_ ? STATU_DESC_SCAN_CANCELED : STATU_DESC_SCAN_STOPPED, SANE_EVENT_SCAN_FINISHED, status_);
|
||||
break;
|
||||
|
@ -3386,6 +3389,7 @@ int hg_scanner::device_io_control(unsigned long code, void* data, unsigned* len)
|
|||
}
|
||||
else if (code == IO_CTRL_CODE_SET_AUTO_FALT)
|
||||
{
|
||||
|
||||
return set_auto_flat();
|
||||
}
|
||||
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
|
||||
|
|
|
@ -476,7 +476,7 @@ public:
|
|||
virtual int get_speed_mode(int &data) = 0; //获取速度模式 /*/ 设备不同值不同,详情见子类注释
|
||||
virtual int set_dpi_color_check(bool type); //获取畸变矫正
|
||||
virtual int set_dpi_color_check_val(void) = 0; //设置畸变矫正值
|
||||
virtual int set_auto_flat(void) ; //设置自动平场校正
|
||||
virtual int set_auto_flat(void) = 0; //设置自动平场校正
|
||||
};
|
||||
|
||||
#ifdef UOS
|
||||
|
|
|
@ -63,6 +63,12 @@ namespace settingsdsp_200
|
|||
case setting3288dsp::SIZE_ERROR:
|
||||
code = SCANNER_ERR_DEVICE_SIZE_CHECK;
|
||||
break;
|
||||
case setting3288dsp::AUTO_FLAT_FINISHED:
|
||||
code = SCANNER_ERR_DEVICE_AUTO_FAIL_OVER;
|
||||
break;
|
||||
case setting3288dsp::AUTO_FLATTING:
|
||||
code = SCANNER_ERR_DEVICE_AUTO_FAIL_INFO;
|
||||
break;
|
||||
default:
|
||||
if (fatal)
|
||||
*fatal = false;
|
||||
|
@ -140,6 +146,42 @@ void hg_scanner_200::thread_handle_usb_read(void)
|
|||
USBCB usb = {0};
|
||||
ret = get_scanner_status(usb);
|
||||
|
||||
if (ret == SCANNER_ERR_DEVICE_AUTO_FAIL_OVER)
|
||||
{
|
||||
status_ = ret;
|
||||
std::string msg;
|
||||
int count = usb.u32_Count;
|
||||
msg.resize(count);
|
||||
|
||||
ret = io_->read_bulk(&msg[0], &count);
|
||||
if (ret == SCANNER_ERR_OK)
|
||||
notify_ui_working_status(msg.c_str(), SANE_EVENT_STATUS, status_);
|
||||
else
|
||||
status_ = ret;
|
||||
|
||||
break;
|
||||
}
|
||||
else if (ret == SCANNER_ERR_DEVICE_AUTO_FAIL_INFO)
|
||||
{
|
||||
sw.reset();
|
||||
status_ = ret;
|
||||
|
||||
std::string msg;
|
||||
int count = usb.u32_Count;
|
||||
msg.resize(count);
|
||||
ret = io_->read_bulk(&msg[0], &count);
|
||||
if (ret == SCANNER_ERR_OK)
|
||||
{
|
||||
char buf[1024];
|
||||
strcpy(buf, msg.c_str());
|
||||
notify_ui_working_status(buf, SANE_EVENT_STATUS, status_);
|
||||
}
|
||||
else
|
||||
{
|
||||
status_ = ret;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (ret == SCANNER_ERR_DEVICE_NOT_FOUND)
|
||||
{
|
||||
// device left, the work is no meanning ...
|
||||
|
@ -165,7 +207,7 @@ void hg_scanner_200::thread_handle_usb_read(void)
|
|||
status_ = prev_err;
|
||||
break;
|
||||
}
|
||||
else if(ret != SCANNER_ERR_OK)
|
||||
else if(ret != SCANNER_ERR_OK && ret != SCANNER_ERR_DEVICE_AUTO_FAIL_INFO && ret != SCANNER_ERR_DEVICE_AUTO_FAIL_OVER)
|
||||
{
|
||||
if (prev_err == SCANNER_ERR_OK)
|
||||
{
|
||||
|
@ -850,6 +892,25 @@ int hg_scanner_200::set_dpi_color_check_val(void)
|
|||
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
|
||||
}
|
||||
|
||||
int hg_scanner_200::set_auto_flat(void)
|
||||
{
|
||||
USBCB usbcb = { setting3288dsp::START_FLAT,0,0 };
|
||||
int len = sizeof(usbcb);
|
||||
int ret = writeusb(usbcb);
|
||||
|
||||
if (ret == SCANNER_ERR_OK)
|
||||
{
|
||||
//status_ = SCANNER_ERR_DEVICE_BUSY;
|
||||
wait_usb_.notify();
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(300));
|
||||
ret = try_third_app_after_start(ret);
|
||||
}
|
||||
else
|
||||
status_ = ret;
|
||||
VLOG_MINI_1(LOG_LEVEL_WARNING, "set_auto_flat ret: %s\n", hg_scanner_err_name(ret));
|
||||
return ret;
|
||||
}
|
||||
|
||||
int hg_scanner_200::set_notify_sleep()
|
||||
{
|
||||
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
|
||||
|
|
|
@ -98,4 +98,5 @@ public:
|
|||
virtual int set_speed_mode(int data) override; //设置速度模式 /*/ 不支持
|
||||
virtual int get_speed_mode(int &data) override; //设置速度模式 /*/ 不支持
|
||||
virtual int set_dpi_color_check_val(void) override; //设置畸变矫正
|
||||
virtual int set_auto_flat(void); //设置自动平场校正
|
||||
};
|
||||
|
|
|
@ -77,6 +77,14 @@ namespace settings
|
|||
}
|
||||
else if (ds->From == setting3399::HGType::STOPSCAN)
|
||||
code = SCANNER_ERR_DEVICE_STOPPED;
|
||||
else if (ds->From == setting3399::HGType::AutoCorrect)
|
||||
{
|
||||
if (ds->Code == 4)
|
||||
code = SCANNER_ERR_DEVICE_AUTO_FAIL_OVER;
|
||||
else
|
||||
code = SCANNER_ERR_DEVICE_AUTO_FAIL_INFO;
|
||||
}
|
||||
|
||||
|
||||
return code;
|
||||
}
|
||||
|
@ -282,6 +290,34 @@ int hg_scanner_239::get_dpi_color_check_val(int &data)
|
|||
int ret = read_register(ratio, &data);
|
||||
return ret;
|
||||
}
|
||||
int hg_scanner_239::set_auto_flat(void)
|
||||
{
|
||||
int color = 0,
|
||||
ret = SCANNER_ERR_OK;
|
||||
auto fw = get_firmware_version();
|
||||
if ((fw[5] == 'A' && atoi(fw.substr(6, 4).c_str()) <= 9999))
|
||||
{
|
||||
color = 0 == 1 ? 1 : 0; //暂时没有用。
|
||||
}
|
||||
if (!wait_usb_.is_waiting())
|
||||
{
|
||||
return SCANNER_ERR_DEVICE_BUSY;
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = write_register(setting3399::SC_AUTOCORRECT, color);
|
||||
if (ret != SCANNER_ERR_OK)
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
//status_ = SCANNER_ERR_DEVICE_BUSY;
|
||||
wait_usb_.notify();
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(300));
|
||||
ret = try_third_app_after_start(ret);
|
||||
}
|
||||
VLOG_MINI_1(LOG_LEVEL_WARNING, "set_auto_flat ret: %s\n", hg_scanner_err_name(ret));
|
||||
return ret;
|
||||
}
|
||||
int hg_scanner_239::get_status(void)
|
||||
{
|
||||
int val = 0,
|
||||
|
@ -889,7 +925,7 @@ int hg_scanner_239::on_scanner_closing(bool force)
|
|||
}
|
||||
void hg_scanner_239::thread_handle_usb_read(void)
|
||||
{
|
||||
char buf[64];
|
||||
char buf[1024];
|
||||
setting3399::HGEIntInfo* info = (setting3399::HGEIntInfo*)buf;
|
||||
int size = sizeof(buf),
|
||||
ret = SCANNER_ERR_OK,
|
||||
|
@ -951,7 +987,12 @@ void hg_scanner_239::thread_handle_usb_read(void)
|
|||
status_ = settings::device_status_to_hg_err(info);
|
||||
VLOG_MINI_1(LOG_LEVEL_DEBUG_INFO, "status from interrupt point is '%s'\n", hg_scanner_err_name(status_));
|
||||
|
||||
if (status_ != SCANNER_ERR_OK && status_ != SCANNER_ERR_TIMEOUT && status_ != SCANNER_ERR_DEVICE_STOPPED)
|
||||
if (status_ != SCANNER_ERR_OK
|
||||
&& status_ != SCANNER_ERR_TIMEOUT
|
||||
&& status_ != SCANNER_ERR_DEVICE_STOPPED
|
||||
&& status_ != SCANNER_ERR_DEVICE_AUTO_FAIL_OVER
|
||||
&& status_ != SCANNER_ERR_DEVICE_AUTO_FAIL_INFO
|
||||
)
|
||||
{
|
||||
if (!is_dev_image_process_done() || (double_paper_handle_ & DOUBLE_PAPER_SAVE_IMG))
|
||||
{
|
||||
|
@ -960,8 +1001,7 @@ void hg_scanner_239::thread_handle_usb_read(void)
|
|||
std::this_thread::sleep_for(std::chrono::milliseconds(30));
|
||||
|
||||
StopWatch delay;
|
||||
if((double_paper_handle_ & DOUBLE_PAPER_SAVE_IMG) &&
|
||||
st == SCANNER_ERR_DEVICE_DOUBLE_FEEDING)
|
||||
if((double_paper_handle_ & DOUBLE_PAPER_SAVE_IMG) && st == SCANNER_ERR_DEVICE_DOUBLE_FEEDING)
|
||||
{
|
||||
int wait = 3000 + (img_conf_.resolution_dst / 200 * 10000);
|
||||
while (get_image_count() == 0)
|
||||
|
@ -1079,6 +1119,19 @@ void hg_scanner_239::thread_handle_usb_read(void)
|
|||
// stop();
|
||||
break;
|
||||
}
|
||||
else if (info->From == setting3399::AutoCorrect)
|
||||
{
|
||||
std::string devs_info;
|
||||
int len = info->Img_Index;
|
||||
devs_info.resize(len);
|
||||
ret = io_->read_bulk(&info[0], &len);
|
||||
if (ret == SCANNER_ERR_OK)
|
||||
{
|
||||
notify_ui_working_status(devs_info.c_str(), SANE_EVENT_STATUS, status_);
|
||||
}
|
||||
if (status_ == SCANNER_ERR_DEVICE_AUTO_FAIL_OVER)
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
// error handling ...
|
||||
|
|
|
@ -116,5 +116,6 @@ public:
|
|||
virtual int get_speed_mode(int& data)override; //获取速度模式 /*/ data:100,110,120
|
||||
virtual int set_dpi_color_check_val(void) override; //设置畸变矫正值
|
||||
virtual int get_dpi_color_check_val(int &data); //获取畸变矫正
|
||||
virtual int set_auto_flat(void); //设置自动平场校正
|
||||
};
|
||||
|
||||
|
|
|
@ -122,44 +122,58 @@ void hg_scanner_300::thread_handle_usb_read(void)
|
|||
statu = last_usb_image_statu(ret);
|
||||
savestatus_.push_back(ret);
|
||||
}
|
||||
//else if (ret != SCANNER_ERR_NO_DATA)
|
||||
//{
|
||||
// statu = SANE_Image_Statu_OK;
|
||||
//}
|
||||
else if (ret != SCANNER_ERR_NO_DATA && ret != SCANNER_ERR_DEVICE_AUTO_FAIL_OVER && ret != SCANNER_ERR_DEVICE_AUTO_FAIL_INFO)
|
||||
{
|
||||
statu = SANE_Image_Statu_OK;
|
||||
}
|
||||
else if (ret == SCANNER_ERR_DEVICE_AUTO_FAIL_OVER)
|
||||
{
|
||||
status_ = ret;
|
||||
std::string msg;
|
||||
msg.resize(usb.u32_Count);
|
||||
int count = usb.u32_Count;
|
||||
io_->read_bulk(&msg[0], &count);
|
||||
status_ = SCANNER_ERR_DEVICE_AUTO_FAIL_OVER;
|
||||
//notify_ui_working_status(msg.c_str(), SANE_EVENT_STATUS, status_);
|
||||
msg.resize(count);
|
||||
|
||||
ret = io_->read_bulk(&msg[0], &count);
|
||||
if (ret == SCANNER_ERR_OK)
|
||||
notify_ui_working_status(msg.c_str(), SANE_EVENT_STATUS, status_);
|
||||
else
|
||||
status_ = ret;
|
||||
|
||||
break;
|
||||
}
|
||||
else if (ret == SCANNER_ERR_DEVICE_AUTO_FAIL_INFO)
|
||||
{
|
||||
sw.reset();
|
||||
status_ = ret;
|
||||
|
||||
std::string msg;
|
||||
msg.resize(usb.u32_Count);
|
||||
int count = usb.u32_Count;
|
||||
io_->read_bulk(&msg[0], &count);
|
||||
status_ = SCANNER_ERR_DEVICE_AUTO_FAIL_INFO;
|
||||
char buf[1024];
|
||||
strcpy(buf, msg.c_str());
|
||||
notify_ui_working_status(buf, SANE_EVENT_STATUS, status_);
|
||||
msg.resize(count);
|
||||
ret = io_->read_bulk(&msg[0], &count);
|
||||
if (ret == SCANNER_ERR_OK)
|
||||
{
|
||||
char buf[1024];
|
||||
strcpy(buf, msg.c_str());
|
||||
notify_ui_working_status(buf, SANE_EVENT_STATUS, status_);
|
||||
}
|
||||
else
|
||||
{
|
||||
status_ = ret;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ret == SCANNER_ERR_NO_DATA && savestatus_.empty() && sw.elapsed_ms() > 5000)
|
||||
if (sw.elapsed_ms() > 20000)//防止状态信息一直取不上来导致卡死
|
||||
{
|
||||
//3288固件 获取有纸无纸问题的bug,如果是打开盖子在start之前【主动】获取的话,会先报无纸,而不是开盖。
|
||||
//但是在【端点】又获取不到有纸还是无纸的状态,所以只能通过等待超时,再来【主动】获取有无纸张。
|
||||
SANE_Bool is_paperon = false;
|
||||
get_scanner_paperon(is_paperon);
|
||||
if (!is_paperon && !user_cancel_)
|
||||
ret = get_scanner_paperon(is_paperon);
|
||||
if (!is_paperon && !user_cancel_ && ret == SCANNER_ERR_OK)
|
||||
{
|
||||
status_ = SCANNER_ERR_DEVICE_NO_PAPER;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (sw.elapsed_ms() > 20000)//防止状态信息一直取不上来导致卡死
|
||||
{
|
||||
status_ = !savestatus_.empty() ? savestatus_[0] : SCANNER_ERR_TIMEOUT;//以第一个消息为准
|
||||
savestatus_.clear();
|
||||
hg_log::log(LOG_LEVEL_WARNING, "get status timeout,get image out\n");
|
||||
|
@ -842,7 +856,7 @@ int hg_scanner_300::set_auto_flat(void)
|
|||
int len = sizeof(usbcb);
|
||||
int ret = writeusb(usbcb);
|
||||
|
||||
if (ret == SCANNER_ERR_OK)
|
||||
if (ret == SCANNER_ERR_OK && wait_usb_.is_waiting())
|
||||
{
|
||||
//status_ = SCANNER_ERR_DEVICE_BUSY;
|
||||
wait_usb_.notify();
|
||||
|
|
|
@ -1276,6 +1276,10 @@ int hg_scanner_302::set_dpi_color_check_val(void)
|
|||
|
||||
return write_register(retio, *(int*)&save_dpi_color_check_val);
|
||||
}
|
||||
int hg_scanner_302::set_auto_flat(void)
|
||||
{
|
||||
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
|
||||
}
|
||||
int hg_scanner_302::set_notify_sleep()
|
||||
{
|
||||
int val = 0,
|
||||
|
|
|
@ -121,4 +121,5 @@ public:
|
|||
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_dpi_color_check_val(void) override; //设置畸变矫正
|
||||
virtual int set_auto_flat(void) override; //设置自动平场校正
|
||||
};
|
||||
|
|
|
@ -58,6 +58,12 @@ namespace settingsdsp_400
|
|||
case setting3288dsp::SIZE_ERROR:
|
||||
code = SCANNER_ERR_DEVICE_SIZE_CHECK;
|
||||
break;
|
||||
case setting3288dsp::AUTO_FLAT_FINISHED:
|
||||
code = SCANNER_ERR_DEVICE_AUTO_FAIL_OVER;
|
||||
break;
|
||||
case setting3288dsp::AUTO_FLATTING:
|
||||
code = SCANNER_ERR_DEVICE_AUTO_FAIL_INFO;
|
||||
break;
|
||||
default:
|
||||
code = SCANNER_ERR_NO_DATA;
|
||||
break;
|
||||
|
@ -118,18 +124,50 @@ void hg_scanner_400::thread_handle_usb_read(void)
|
|||
statu = last_usb_image_statu(ret);
|
||||
savestatus_.push_back(ret);
|
||||
}
|
||||
else
|
||||
statu = SANE_Image_Statu_OK;
|
||||
if (sw.elapsed_s() > 30)//防止状态信息一直取不上来导致卡死
|
||||
else if (ret != SCANNER_ERR_NO_DATA && ret != SCANNER_ERR_DEVICE_AUTO_FAIL_OVER && ret != SCANNER_ERR_DEVICE_AUTO_FAIL_INFO)
|
||||
{
|
||||
if (!savestatus_.empty())
|
||||
statu = SANE_Image_Statu_OK;
|
||||
}
|
||||
else if (ret == SCANNER_ERR_DEVICE_AUTO_FAIL_OVER)
|
||||
{
|
||||
status_ = ret;
|
||||
std::string msg;
|
||||
int count = usb.u32_Count;
|
||||
msg.resize(count);
|
||||
|
||||
ret = io_->read_bulk(&msg[0], &count);
|
||||
if (ret == SCANNER_ERR_OK)
|
||||
notify_ui_working_status(msg.c_str(), SANE_EVENT_STATUS, status_);
|
||||
else
|
||||
status_ = ret;
|
||||
|
||||
break;
|
||||
}
|
||||
else if (ret == SCANNER_ERR_DEVICE_AUTO_FAIL_INFO)
|
||||
{
|
||||
sw.reset();
|
||||
status_ = ret;
|
||||
|
||||
std::string msg;
|
||||
int count = usb.u32_Count;
|
||||
msg.resize(count);
|
||||
ret = io_->read_bulk(&msg[0], &count);
|
||||
if (ret == SCANNER_ERR_OK)
|
||||
{
|
||||
status_ = savestatus_[0];
|
||||
char buf[1024];
|
||||
strcpy(buf, msg.c_str());
|
||||
notify_ui_working_status(buf, SANE_EVENT_STATUS, status_);
|
||||
}
|
||||
else
|
||||
{
|
||||
status_ = SCANNER_ERR_TIMEOUT;
|
||||
status_ = ret;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (sw.elapsed_s() > 30)//防止状态信息一直取不上来导致卡死
|
||||
{
|
||||
status_ = !savestatus_.empty() ? savestatus_[0] : SCANNER_ERR_TIMEOUT;
|
||||
savestatus_.clear();
|
||||
hg_log::log(LOG_LEVEL_WARNING, "get status timeout,get image out\n");
|
||||
break;
|
||||
|
@ -817,6 +855,26 @@ int hg_scanner_400::set_dpi_color_check_val(void)
|
|||
//int ratio = cmd.u32_Data;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int hg_scanner_400::set_auto_flat(void)
|
||||
{
|
||||
USBCB usbcb = { setting3288dsp::START_FLAT,0,0 };
|
||||
int len = sizeof(usbcb);
|
||||
int ret = writeusb(usbcb);
|
||||
|
||||
if (ret == SCANNER_ERR_OK && wait_usb_.is_waiting())
|
||||
{
|
||||
//status_ = SCANNER_ERR_DEVICE_BUSY;
|
||||
wait_usb_.notify();
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(300));
|
||||
ret = try_third_app_after_start(ret);
|
||||
}
|
||||
else
|
||||
status_ = ret;
|
||||
VLOG_MINI_1(LOG_LEVEL_WARNING, "set_auto_flat ret: %s\n", hg_scanner_err_name(ret));
|
||||
return ret;
|
||||
}
|
||||
|
||||
int hg_scanner_400::set_notify_sleep()
|
||||
{
|
||||
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
|
||||
|
|
|
@ -103,4 +103,5 @@ public:
|
|||
virtual int set_speed_mode(int data) override; //设置速度模式 /*/ data:40,50,60,70,80
|
||||
virtual int get_speed_mode(int &data) override; //设置速度模式 /*/ data:40,50,60,70,80
|
||||
virtual int set_dpi_color_check_val(void) override; //设置畸变矫正
|
||||
virtual int set_auto_flat(void); //设置自动平场校正
|
||||
};
|
||||
|
|
|
@ -1236,6 +1236,10 @@ int hg_scanner_402::set_dpi_color_check_val(void)
|
|||
|
||||
return write_register(retio, *(int*)&save_dpi_color_check_val);
|
||||
}
|
||||
int hg_scanner_402::set_auto_flat(void)
|
||||
{
|
||||
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
|
||||
}
|
||||
int hg_scanner_402::set_notify_sleep()
|
||||
{
|
||||
int val = 0,
|
||||
|
|
|
@ -121,4 +121,5 @@ public:
|
|||
virtual int set_speed_mode(int data) override; //设置速度模式 /*/ data:40,50,60,70,80
|
||||
virtual int get_speed_mode(int &data) override; //设置速度模式 /*/ data:40,50,60,70,80
|
||||
virtual int set_dpi_color_check_val(void) override; //设置畸变矫正
|
||||
virtual int set_auto_flat(void) override; //设置自动平场校正
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue