增加自动校正流程

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, //扫描仪内部图片丢失 V4L2_IMAGE_EMPTY = 80, //扫描仪内部图片丢失
SLEEPING = 81, //处于休眠中 SLEEPING = 81, //处于休眠中
HAVE_DOGEAR = 82, //检测到有折角 HAVE_DOGEAR = 82, //检测到有折角
AUTO_FLATTING = 198,//自动校正中
USB_DISCONNECTED = 200, //USB 未连接 USB_DISCONNECTED = 200, //USB 未连接
USER_STOP = 201, //用户点击停止 USER_STOP = 201, //用户点击停止
AUTO_FLAT_FINISHED = 202, //自动校正完成 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)); return set_devreboot(*((int*)data));
} }
else if (code == IO_CTRL_CODE_SET_AUTO_FALT)
{
return set_auto_flat();
}
return SCANNER_ERR_DEVICE_NOT_SUPPORT; return SCANNER_ERR_DEVICE_NOT_SUPPORT;
} }
std::string hg_scanner::get_firmware_version(void) 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; return SCANNER_ERR_DEVICE_NOT_SUPPORT;
} }
int hg_scanner::set_auto_flat(void)
{
return 0;
}
////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////
int hg_scanner::set_leaflet_scan(void) int hg_scanner::set_leaflet_scan(void)
{ {

View File

@ -476,6 +476,7 @@ public:
virtual int get_speed_mode(int &data) = 0; //获取速度模式 /*/ 设备不同值不同,详情见子类注释 virtual int get_speed_mode(int &data) = 0; //获取速度模式 /*/ 设备不同值不同,详情见子类注释
virtual int set_dpi_color_check(bool type); //获取畸变矫正 virtual int set_dpi_color_check(bool type); //获取畸变矫正
virtual int set_dpi_color_check_val(void) = 0; //设置畸变矫正值 virtual int set_dpi_color_check_val(void) = 0; //设置畸变矫正值
virtual int set_auto_flat(void) ; //设置自动平场校正
}; };
#ifdef UOS #ifdef UOS

View File

@ -53,9 +53,15 @@ namespace settingsdsp_300
case setting3288dsp::SIZE_ERROR: case setting3288dsp::SIZE_ERROR:
code = SCANNER_ERR_DEVICE_SIZE_CHECK; code = SCANNER_ERR_DEVICE_SIZE_CHECK;
break; 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: default:
code = SCANNER_ERR_NO_DATA; code = SCANNER_ERR_NO_DATA;
break; break;
} }
return code; return code;
@ -111,16 +117,38 @@ void hg_scanner_300::thread_handle_usb_read(void)
savestatus_.clear(); savestatus_.clear();
break; 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); statu = last_usb_image_statu(ret);
savestatus_.push_back(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; SANE_Bool is_paperon = false;
get_scanner_paperon(is_paperon); get_scanner_paperon(is_paperon);
@ -130,8 +158,6 @@ void hg_scanner_300::thread_handle_usb_read(void)
break; break;
} }
} }
if (sw.elapsed_ms() > 20000)//防止状态信息一直取不上来导致卡死 if (sw.elapsed_ms() > 20000)//防止状态信息一直取不上来导致卡死
{ {
status_ = !savestatus_.empty() ? savestatus_[0] : SCANNER_ERR_TIMEOUT;//以第一个消息为准 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; //int ratio = cmd.u32_Data;
return ret; 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() int hg_scanner_300::set_notify_sleep()
{ {
return SCANNER_ERR_DEVICE_NOT_SUPPORT; 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 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 get_speed_mode(int& data)override; //获取速度模式 /*/ data:40,50,60,70
virtual int set_dpi_color_check_val(void) override; //设置畸变矫正 virtual int set_dpi_color_check_val(void) override; //设置畸变矫正
virtual int set_auto_flat(void)override; //设置自动平场校正
}; };