增加自动校正流程

This commit is contained in:
13038267101 2022-12-30 00:05:43 +08:00
parent dd2ccf4499
commit 8b2045592f
5 changed files with 62 additions and 7 deletions

View File

@ -727,6 +727,7 @@ namespace setting3288dsp
V4L2_IMAGE_EMPTY = 80, //扫描仪内部图片丢失
SLEEPING = 81, //处于休眠中
HAVE_DOGEAR = 82, //检测到有折角
AUTO_FLATTING = 198,//自动校正中
USB_DISCONNECTED = 200, //USB 未连接
USER_STOP = 201, //用户点击停止
AUTO_FLAT_FINISHED = 202, //自动校正完成

View File

@ -3384,6 +3384,10 @@ int hg_scanner::device_io_control(unsigned long code, void* data, unsigned* len)
{
return set_devreboot(*((int*)data));
}
else if (code == IO_CTRL_CODE_SET_AUTO_FALT)
{
return set_auto_flat();
}
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
std::string hg_scanner::get_firmware_version(void)
@ -3477,6 +3481,10 @@ int hg_scanner::set_dpi_color_check_val(void)
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;
}
int hg_scanner::set_auto_flat(void)
{
return 0;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
int hg_scanner::set_leaflet_scan(void)
{

View File

@ -476,6 +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) ; //设置自动平场校正
};
#ifdef UOS

View File

@ -53,9 +53,15 @@ namespace settingsdsp_300
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;
break;
}
return code;
@ -111,16 +117,38 @@ void hg_scanner_300::thread_handle_usb_read(void)
savestatus_.clear();
break;
}
if (ret != SCANNER_ERR_OK && ret != SCANNER_ERR_DEVICE_STOPPED && ret != SCANNER_ERR_NO_DATA)
if (ret != SCANNER_ERR_OK && ret != SCANNER_ERR_DEVICE_STOPPED && ret != SCANNER_ERR_NO_DATA && ret != SCANNER_ERR_DEVICE_AUTO_FAIL_INFO && ret != SCANNER_ERR_DEVICE_AUTO_FAIL_OVER)
{
statu = last_usb_image_statu(ret);
savestatus_.push_back(ret);
}
else if (ret != SCANNER_ERR_NO_DATA)
//else if (ret != SCANNER_ERR_NO_DATA)
//{
// statu = SANE_Image_Statu_OK;
//}
else if (ret == SCANNER_ERR_DEVICE_AUTO_FAIL_OVER)
{
statu = SANE_Image_Statu_OK;
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_);
break;
}
else if (ret == SCANNER_ERR_NO_DATA && savestatus_.empty() &&sw.elapsed_ms() > 5000)
else if (ret == SCANNER_ERR_DEVICE_AUTO_FAIL_INFO)
{
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_);
}
if (ret == SCANNER_ERR_NO_DATA && savestatus_.empty() && sw.elapsed_ms() > 5000)
{
SANE_Bool is_paperon = false;
get_scanner_paperon(is_paperon);
@ -130,8 +158,6 @@ void hg_scanner_300::thread_handle_usb_read(void)
break;
}
}
if (sw.elapsed_ms() > 20000)//防止状态信息一直取不上来导致卡死
{
status_ = !savestatus_.empty() ? savestatus_[0] : SCANNER_ERR_TIMEOUT;//以第一个消息为准
@ -810,6 +836,24 @@ int hg_scanner_300::set_dpi_color_check_val(void)
//int ratio = cmd.u32_Data;
return ret;
}
int hg_scanner_300::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_300::set_notify_sleep()
{
return SCANNER_ERR_DEVICE_NOT_SUPPORT;

View File

@ -100,4 +100,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; //设置自动平场校正
};