mirror of http://192.168.1.51:8099/lmh188/twain3.0
兼容飞线版本3399设备
This commit is contained in:
parent
7316be3dd0
commit
9f060c7745
|
@ -5,7 +5,17 @@
|
||||||
3.修复保存首选项不能保存高级设置参数问题
|
3.修复保存首选项不能保存高级设置参数问题
|
||||||
4.新增奥鸽G139型号
|
4.新增奥鸽G139型号
|
||||||
2021年11月20日
|
2021年11月20日
|
||||||
版本:3.3.5.4
|
版本:3.3.5.5
|
||||||
1.添加配置文件,可开关显示滚轴弹框以及打印协议设置信息
|
1.添加配置文件,可开关显示滚轴弹框以及打印协议设置信息
|
||||||
2.调整twain协议
|
2.调整twain协议
|
||||||
3.更新穿孔算法
|
3.更新穿孔算法
|
||||||
|
4.合入提升效率版本ocr
|
||||||
|
2021年12月01日
|
||||||
|
版本:3.3.5.6
|
||||||
|
1.添加连续扫描模式
|
||||||
|
2.增加g200 扫描仪升降台异常处理
|
||||||
|
3.添加图像拆分功能
|
||||||
|
4.修复3399对折扫描异常时的丢图问题
|
||||||
|
5.根据arm固件进行兼容,以A1209为分界线,根据版本显示连续扫描
|
||||||
|
6.屏蔽对折前旋转,奥鸽要求
|
||||||
|
7.修复首选项保存时亮度读取异常问题
|
||||||
|
|
|
@ -30,7 +30,7 @@ void CIndicatorDlg::DoDataExchange(CDataExchange* pDX)
|
||||||
BOOL CIndicatorDlg::OnInitDialog()
|
BOOL CIndicatorDlg::OnInitDialog()
|
||||||
{
|
{
|
||||||
#ifdef LANXUM
|
#ifdef LANXUM
|
||||||
GetDlgItem(IDC_BTNSTOPSCAN)->ShowWindow(SW_HIDE);
|
//GetDlgItem(IDC_BTNSTOPSCAN)->ShowWindow(SW_HIDE);
|
||||||
#endif // LANXUM
|
#endif // LANXUM
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
IMPLEMENT_DYNAMIC(CTwainUI, CDialogEx)
|
IMPLEMENT_DYNAMIC(CTwainUI, CDialogEx)
|
||||||
|
|
||||||
CTwainUI::CTwainUI(TwGlue glue, GScanCap caps, std::string confirmtitle, std::string hardwareversion, std::string serialnum, CWnd* pParent /*=nullptr*/)
|
CTwainUI::CTwainUI(TwGlue glue, GScanCap caps, std::string confirmtitle, std::string hardwareversion, std::string serialnum, std::uint32_t mbversion ,CWnd* pParent /*=nullptr*/)
|
||||||
: CDialogEx(IDD_TWAINUI, pParent)
|
: CDialogEx(IDD_TWAINUI, pParent)
|
||||||
, m_tabCtrl(new CTabCtrlSSL())
|
, m_tabCtrl(new CTabCtrlSSL())
|
||||||
, m_pageBrightness(new CBrightnessPage)
|
, m_pageBrightness(new CBrightnessPage)
|
||||||
|
@ -29,6 +29,7 @@ CTwainUI::CTwainUI(TwGlue glue, GScanCap caps, std::string confirmtitle, std::st
|
||||||
{
|
{
|
||||||
m_hardwareVersion = hardwareversion;
|
m_hardwareVersion = hardwareversion;
|
||||||
m_serialnum = serialnum;
|
m_serialnum = serialnum;
|
||||||
|
m_mbversion = mbversion;
|
||||||
//memset(settings.get(), 0, sizeof(GScanCap));
|
//memset(settings.get(), 0, sizeof(GScanCap));
|
||||||
/*m_pageImageProc->noise = caps.noise;
|
/*m_pageImageProc->noise = caps.noise;
|
||||||
m_pageImageProc->is_convex = caps.is_convex;
|
m_pageImageProc->is_convex = caps.is_convex;
|
||||||
|
@ -92,8 +93,21 @@ BOOL CTwainUI::OnInitDialog()
|
||||||
setvisable_sleepmode(false);
|
setvisable_sleepmode(false);
|
||||||
#ifdef G200
|
#ifdef G200
|
||||||
setvisable_dogear(true);
|
setvisable_dogear(true);
|
||||||
|
if (m_hardwareVersion.size() > 9)
|
||||||
|
{
|
||||||
|
if (m_hardwareVersion[5] > 'A' || atoi(m_hardwareVersion.substr(6, 4).c_str()) > 1209)
|
||||||
|
{
|
||||||
|
if (m_mbversion >= 35211210)
|
||||||
|
setvisable_autopaper(true);
|
||||||
|
else
|
||||||
|
setvisable_autopaper(false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
setvisable_autopaper(false);
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
setvisable_dogear(false);
|
setvisable_dogear(false);
|
||||||
|
setvisable_autopaper(false);
|
||||||
#endif // G200
|
#endif // G200
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -166,6 +180,7 @@ void CTwainUI::UpdateUI()
|
||||||
m_pageBasic->m_cmBoxSS->SetCurSel(getPaparSizeIndex(settings->papertype, settings->paperAlign)); //!< 纸张类型
|
m_pageBasic->m_cmBoxSS->SetCurSel(getPaparSizeIndex(settings->papertype, settings->paperAlign)); //!< 纸张类型
|
||||||
m_pageBasic->m_enableSizeCheck = settings->en_sizecheck==1?TRUE:FALSE;//!< 尺寸检测
|
m_pageBasic->m_enableSizeCheck = settings->en_sizecheck==1?TRUE:FALSE;//!< 尺寸检测
|
||||||
m_pageBasic->m_bswitchfrontback = settings->is_switchfrontback ? TRUE : FALSE; //!< 交换正反面
|
m_pageBasic->m_bswitchfrontback = settings->is_switchfrontback ? TRUE : FALSE; //!< 交换正反面
|
||||||
|
((CButton*)m_pageBasic->GetDlgItem(IDC_CKSPLIT))->SetCheck(settings->is_split);
|
||||||
#ifdef UV
|
#ifdef UV
|
||||||
m_pageBasic->m_bUV = settings->hardwarecaps.en_uv == 1 ? TRUE : FALSE;
|
m_pageBasic->m_bUV = settings->hardwarecaps.en_uv == 1 ? TRUE : FALSE;
|
||||||
#endif
|
#endif
|
||||||
|
@ -236,6 +251,7 @@ void CTwainUI::UpdateUI()
|
||||||
m_pageFeedPaper->m_cbStaple = settings->hardwarecaps.en_stapledetect==TRUE ? TRUE : FALSE;//装订检测
|
m_pageFeedPaper->m_cbStaple = settings->hardwarecaps.en_stapledetect==TRUE ? TRUE : FALSE;//装订检测
|
||||||
m_pageFeedPaper->m_cbDoublePaper = settings->hardwarecaps.en_doublefeed==TRUE ? TRUE : FALSE;//双张检测
|
m_pageFeedPaper->m_cbDoublePaper = settings->hardwarecaps.en_doublefeed==TRUE ? TRUE : FALSE;//双张检测
|
||||||
m_pageFeedPaper->m_cbSkew = settings->hardwarecaps.en_skrewdetect==TRUE ? TRUE : FALSE;//歪斜检测
|
m_pageFeedPaper->m_cbSkew = settings->hardwarecaps.en_skrewdetect==TRUE ? TRUE : FALSE;//歪斜检测
|
||||||
|
((CButton*)m_pageFeedPaper->GetDlgItem(IDC_CKAUTOPAPER))->SetCheck(settings->hardwarecaps.is_autopaper);
|
||||||
m_pageFeedPaper->m_cmBoxOrentation.SetCurSel(settings->is_autotext?4:getRotateCmbIndex(settings->imageRotateDegree));//旋转方向;
|
m_pageFeedPaper->m_cmBoxOrentation.SetCurSel(settings->is_autotext?4:getRotateCmbIndex(settings->imageRotateDegree));//旋转方向;
|
||||||
m_pageFeedPaper->m_sldSkrewDetecttion.SetPos(m_pageFeedPaper->m_cbSkew?settings->hardwarecaps.skrewdetectlevel:3);//歪斜检测等级
|
m_pageFeedPaper->m_sldSkrewDetecttion.SetPos(m_pageFeedPaper->m_cbSkew?settings->hardwarecaps.skrewdetectlevel:3);//歪斜检测等级
|
||||||
m_pageFeedPaper->m_sldSkrewDetecttion.EnableWindow(m_pageFeedPaper->m_cbSkew);
|
m_pageFeedPaper->m_sldSkrewDetecttion.EnableWindow(m_pageFeedPaper->m_cbSkew);
|
||||||
|
@ -485,6 +501,7 @@ void CTwainUI::UpDateScanParam(PCONFIGPARAMS configItem, bool updateDs)
|
||||||
//settings->resolution_dst = Resolutions[configItem->Resolution];
|
//settings->resolution_dst = Resolutions[configItem->Resolution];
|
||||||
settings->resolution_dst = configItem->Resolution;
|
settings->resolution_dst = configItem->Resolution;
|
||||||
settings->resolution_native = 200.0f;
|
settings->resolution_native = 200.0f;
|
||||||
|
settings->is_split = ((CButton*)m_pageBasic->GetDlgItem(IDC_CKSPLIT))->GetCheck();
|
||||||
settings->is_switchfrontback = configItem->EnSwitchFrontBack ? 1 : 0;
|
settings->is_switchfrontback = configItem->EnSwitchFrontBack ? 1 : 0;
|
||||||
//float value_Contrast = GetContrast(configItem->Contrast);
|
//float value_Contrast = GetContrast(configItem->Contrast);
|
||||||
settings->contrast = configItem->Contrast;
|
settings->contrast = configItem->Contrast;
|
||||||
|
@ -521,6 +538,7 @@ void CTwainUI::UpDateScanParam(PCONFIGPARAMS configItem, bool updateDs)
|
||||||
settings->hardwarecaps.en_skrewdetect = configItem->EnScrewDetect;
|
settings->hardwarecaps.en_skrewdetect = configItem->EnScrewDetect;
|
||||||
settings->hardwarecaps.skrewdetectlevel = (int)configItem->ScrewDetectLevel;
|
settings->hardwarecaps.skrewdetectlevel = (int)configItem->ScrewDetectLevel;
|
||||||
settings->hardwarecaps.en_stapledetect = configItem->EnBindingDetect;
|
settings->hardwarecaps.en_stapledetect = configItem->EnBindingDetect;
|
||||||
|
settings->hardwarecaps.is_autopaper = ((CButton*)m_pageFeedPaper->GetDlgItem(IDC_CKAUTOPAPER))->GetCheck();
|
||||||
settings->hardwarecaps.en_doublefeed = configItem->EnUltrasonicDetect;
|
settings->hardwarecaps.en_doublefeed = configItem->EnUltrasonicDetect;
|
||||||
settings->dogeardistance = m_pageFeedPaper->m_slider_dogear.GetPos();
|
settings->dogeardistance = m_pageFeedPaper->m_slider_dogear.GetPos();
|
||||||
settings->en_fold = configItem->EnFlod ? 1 : 0;
|
settings->en_fold = configItem->EnFlod ? 1 : 0;
|
||||||
|
@ -656,6 +674,13 @@ void CTwainUI::setvisable_dogear(bool flag)
|
||||||
((CButton*)m_pageFeedPaper->GetDlgItem(IDC_DogEarDetection))->SetCheck(false);
|
((CButton*)m_pageFeedPaper->GetDlgItem(IDC_DogEarDetection))->SetCheck(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CTwainUI::setvisable_autopaper(bool flag)
|
||||||
|
{
|
||||||
|
((CButton*)m_pageFeedPaper->GetDlgItem(IDC_CKAUTOPAPER))->ShowWindow(flag ? SW_SHOW : SW_HIDE);
|
||||||
|
if (!flag)
|
||||||
|
((CButton*)m_pageFeedPaper->GetDlgItem(IDC_CKAUTOPAPER))->SetCheck(false);
|
||||||
|
}
|
||||||
|
|
||||||
void CTwainUI::EnableID_OKorID_Cancel(bool enable)
|
void CTwainUI::EnableID_OKorID_Cancel(bool enable)
|
||||||
{
|
{
|
||||||
GetDlgItem(IDC_CONFIRM)->EnableWindow(enable);
|
GetDlgItem(IDC_CONFIRM)->EnableWindow(enable);
|
||||||
|
|
|
@ -165,7 +165,7 @@ class CTwainUI : public CDialogEx
|
||||||
DECLARE_DYNAMIC(CTwainUI)
|
DECLARE_DYNAMIC(CTwainUI)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CTwainUI(TwGlue glue,GScanCap caps,std::string confirmtitle,std::string hardwareversion,std::string serialnum, CWnd* pParent = nullptr); // 标准构造函数
|
CTwainUI(TwGlue glue,GScanCap caps,std::string confirmtitle,std::string hardwareversion,std::string serialnum,std::uint32_t mbversion ,CWnd* pParent = nullptr); // 标准构造函数
|
||||||
virtual ~CTwainUI();
|
virtual ~CTwainUI();
|
||||||
|
|
||||||
void UpdateUI();
|
void UpdateUI();
|
||||||
|
@ -176,6 +176,7 @@ public:
|
||||||
void setvisable_size(bool flag);
|
void setvisable_size(bool flag);
|
||||||
void setvisable_sleepmode(bool flag);
|
void setvisable_sleepmode(bool flag);
|
||||||
void setvisable_dogear(bool flag);
|
void setvisable_dogear(bool flag);
|
||||||
|
void setvisable_autopaper(bool flag);
|
||||||
void EnableID_OKorID_Cancel(bool enable);
|
void EnableID_OKorID_Cancel(bool enable);
|
||||||
// 对话框数据
|
// 对话框数据
|
||||||
#ifdef AFX_DESIGN_TIME
|
#ifdef AFX_DESIGN_TIME
|
||||||
|
@ -184,6 +185,7 @@ public:
|
||||||
public:
|
public:
|
||||||
std::string m_hardwareVersion;
|
std::string m_hardwareVersion;
|
||||||
std::string m_serialnum;
|
std::string m_serialnum;
|
||||||
|
std::uint32_t m_mbversion;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
|
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
|
||||||
|
|
|
@ -89,6 +89,8 @@ typedef enum tagUsbSupported {
|
||||||
SLEEPING = 81,
|
SLEEPING = 81,
|
||||||
//检测到有折角
|
//检测到有折角
|
||||||
HAVE_DOGEAR = 82,
|
HAVE_DOGEAR = 82,
|
||||||
|
//
|
||||||
|
MLTOP_TIMEOUT = 83,
|
||||||
//USB 未连接
|
//USB 未连接
|
||||||
USB_DISCONNECTED = 200,
|
USB_DISCONNECTED = 200,
|
||||||
//用户点击停止
|
//用户点击停止
|
||||||
|
@ -122,6 +124,7 @@ static map<UsbSupported, string> msgs = {
|
||||||
{UsbSupported::V4L2_IMAGE_EMPTY,"扫描仪图像处理异常!"},
|
{UsbSupported::V4L2_IMAGE_EMPTY,"扫描仪图像处理异常!"},
|
||||||
{UsbSupported::SLEEPING,"设备处于休眠模式,请按电源键关闭休眠!"},
|
{UsbSupported::SLEEPING,"设备处于休眠模式,请按电源键关闭休眠!"},
|
||||||
{UsbSupported::HAVE_DOGEAR,"检测到有折角,停止扫描!"},
|
{UsbSupported::HAVE_DOGEAR,"检测到有折角,停止扫描!"},
|
||||||
|
{UsbSupported::MLTOP_TIMEOUT,"升降台抬升未到达指定位置!"},
|
||||||
};
|
};
|
||||||
|
|
||||||
enum tagEventIndex
|
enum tagEventIndex
|
||||||
|
|
|
@ -127,7 +127,7 @@ int GScanO1003399::aquire_bmpdata(std::vector<unsigned char>& bmpdata)
|
||||||
{
|
{
|
||||||
if ((imagecount == 0) && (!scanflag) || (sw.elapsed_s() > 30))
|
if ((imagecount == 0) && (!scanflag) || (sw.elapsed_s() > 30))
|
||||||
{
|
{
|
||||||
if (is_scan())
|
if (is_scan() || (m_param.hardwarecaps.is_autopaper && (sw.elapsed_s() > 30)))
|
||||||
{
|
{
|
||||||
sw.reset();
|
sw.reset();
|
||||||
continue;
|
continue;
|
||||||
|
@ -203,7 +203,14 @@ std::string GScanO1003399::GetSerialNum()
|
||||||
|
|
||||||
std::uint32_t GScanO1003399::GetMotorFPGA()
|
std::uint32_t GScanO1003399::GetMotorFPGA()
|
||||||
{
|
{
|
||||||
return std::uint32_t();
|
std::string fw;
|
||||||
|
if (m_usb.get() && m_usb->is_connected())
|
||||||
|
{
|
||||||
|
fw.resize(scanner_read_reg(m_usb, SR_GET_MBVERSION_LENGHT));
|
||||||
|
scanner_write_reg(m_usb, SR_GET_MBVERSION,0);
|
||||||
|
m_usb->read_bulk(&fw[0], fw.size());
|
||||||
|
}
|
||||||
|
return atoi(fw.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
std::uint32_t GScanO1003399::GetScanFPGA()
|
std::uint32_t GScanO1003399::GetScanFPGA()
|
||||||
|
@ -250,7 +257,7 @@ void GScanO1003399::config_params(GScanCap& param)
|
||||||
cfg.g200params.stable_enbale = (unsigned int)param.hardwarecaps.en_stapledetect;
|
cfg.g200params.stable_enbale = (unsigned int)param.hardwarecaps.en_stapledetect;
|
||||||
cfg.g200params.screw_detect_enable = (unsigned int)param.hardwarecaps.en_skrewdetect;
|
cfg.g200params.screw_detect_enable = (unsigned int)param.hardwarecaps.en_skrewdetect;
|
||||||
cfg.g200params.screw_detect_level = (unsigned int)cfg.g200params.screw_detect_enable ? secrewMaps[param.hardwarecaps.skrewdetectlevel] : 0;
|
cfg.g200params.screw_detect_level = (unsigned int)cfg.g200params.screw_detect_enable ? secrewMaps[param.hardwarecaps.skrewdetectlevel] : 0;
|
||||||
|
cfg.g200params.is_autopaper = param.hardwarecaps.is_autopaper;
|
||||||
cfg.g200params.enable_sizecheck = param.en_sizecheck == 1 ? 1 : 0;
|
cfg.g200params.enable_sizecheck = param.en_sizecheck == 1 ? 1 : 0;
|
||||||
cfg.g200params.unused_one = cfg.g200params.sizeerror_errorratio = 0;
|
cfg.g200params.unused_one = cfg.g200params.sizeerror_errorratio = 0;
|
||||||
|
|
||||||
|
@ -345,7 +352,17 @@ void GScanO1003399::config_params(GScanCap& param)
|
||||||
|
|
||||||
void GScanO1003399::Scanner_StartScan(UINT16 count)
|
void GScanO1003399::Scanner_StartScan(UINT16 count)
|
||||||
{
|
{
|
||||||
error_index = 0;
|
auto fwver = GetFWVersion();
|
||||||
|
if (fwver[5] > 'A' || atoi(fwver.substr(6, 4).c_str()) >= 1209)
|
||||||
|
{
|
||||||
|
if (GetMotorFPGA() >= 35211210)
|
||||||
|
is_kernelsnap_211209 = true;
|
||||||
|
else
|
||||||
|
is_kernelsnap_211209 = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
is_kernelsnap_211209 = false;
|
||||||
|
error_index = autopaperstop = 0;
|
||||||
roller_num = this->count();
|
roller_num = this->count();
|
||||||
scanflag = true;
|
scanflag = true;
|
||||||
while (m_paths.Size() > 0)
|
while (m_paths.Size() > 0)
|
||||||
|
@ -353,10 +370,8 @@ void GScanO1003399::Scanner_StartScan(UINT16 count)
|
||||||
remove(m_paths.Take().c_str());
|
remove(m_paths.Take().c_str());
|
||||||
}
|
}
|
||||||
Set_ErrorCode(0);
|
Set_ErrorCode(0);
|
||||||
getimgnum = 0;
|
getimgnum = aquirenum = imagecount = 0;
|
||||||
aquirenum = 0;
|
keeplastimg = is_kernelsnap_211209 ? false : true;//true
|
||||||
imagecount = 0;
|
|
||||||
keeplastimg = true;
|
|
||||||
reset();
|
reset();
|
||||||
devState = DEV_ISRUNNING;
|
devState = DEV_ISRUNNING;
|
||||||
if (scanner_read_reg(m_usb, SR_GET_SLEEP_STAUTUS) != 1)
|
if (scanner_read_reg(m_usb, SR_GET_SLEEP_STAUTUS) != 1)
|
||||||
|
@ -373,17 +388,6 @@ void GScanO1003399::Scanner_StartScan(UINT16 count)
|
||||||
scanflag = false;
|
scanflag = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//int val = scanner_read_reg(m_usb, SR_GET_MBSTATUS);
|
|
||||||
//if (val)
|
|
||||||
//{
|
|
||||||
// devState = DEV_WRONG;
|
|
||||||
// HGEIntInfo info;
|
|
||||||
// info.From = MtBoard;
|
|
||||||
// info.Code = val == 0x14 ? 4 : val;
|
|
||||||
// Set_ErrorCode(codeconvter(info));
|
|
||||||
// scanflag = false;
|
|
||||||
// return;
|
|
||||||
//}
|
|
||||||
//if (!Get_Scanner_PaperOn())
|
//if (!Get_Scanner_PaperOn())
|
||||||
//{
|
//{
|
||||||
// devState = DEV_WRONG;
|
// devState = DEV_WRONG;
|
||||||
|
@ -400,49 +404,21 @@ void GScanO1003399::Scanner_StartScan(UINT16 count)
|
||||||
m_imgprocthread->join();
|
m_imgprocthread->join();
|
||||||
}
|
}
|
||||||
m_imgprocthread.reset(new thread(&GScanO1003399::proc, this, procmode));
|
m_imgprocthread.reset(new thread(&GScanO1003399::proc, this, procmode));
|
||||||
//if (m_param.resolution_dst > 200.0f || m_param.papertype == 52 || m_param.papertype == 54 || m_param.papertype == 131) {
|
|
||||||
// b_imgprothread = true;
|
|
||||||
// m_imgprocthread.enqueue([this] {
|
|
||||||
// while (b_imgprothread)
|
|
||||||
// {
|
|
||||||
// if (m_paths.Size() < 1)
|
|
||||||
// {
|
|
||||||
// this_thread::sleep_for(chrono::milliseconds(10));
|
|
||||||
// continue;
|
|
||||||
// }
|
|
||||||
// auto path = m_paths.Take();
|
|
||||||
// if (!path.empty())
|
|
||||||
// {
|
|
||||||
// auto fd = fopen(path.c_str(), "rb+");
|
|
||||||
// if (fd)
|
|
||||||
// {
|
|
||||||
// auto lenght = FileTools::get_file_size(path.c_str());
|
|
||||||
// std::shared_ptr<std::vector<char>> buff(new std::vector<char>);
|
|
||||||
// buff->resize(lenght);
|
|
||||||
// fread(buff->data(), lenght, 1, fd);
|
|
||||||
// fclose(fd);
|
|
||||||
// remove(path.c_str());
|
|
||||||
// imgproce(buff);
|
|
||||||
// }
|
|
||||||
// else {
|
|
||||||
// FileTools::writelog(log_ERROR, "img tmp file read error file name =" + path);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
//}
|
|
||||||
//else
|
|
||||||
//{
|
|
||||||
// b_imgprothread = false;
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GScanO1003399::Stop_scan()
|
void GScanO1003399::Stop_scan()
|
||||||
{
|
{
|
||||||
stop();
|
stop();
|
||||||
|
if (m_param.hardwarecaps.is_autopaper)
|
||||||
|
{
|
||||||
|
autopaperstop = true;
|
||||||
|
if (!is_scan() && imagecount == 0)
|
||||||
|
scanflag = false;
|
||||||
|
}
|
||||||
if ((devState == DEV_WRONG) || (devState == DEV_STOP))
|
if ((devState == DEV_WRONG) || (devState == DEV_STOP))
|
||||||
return;
|
return;
|
||||||
devState = DEV_STOP;
|
devState = DEV_STOP;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int GScanO1003399::notifyscan()
|
int GScanO1003399::notifyscan()
|
||||||
|
@ -543,39 +519,39 @@ void GScanO1003399::usb_run()
|
||||||
}
|
}
|
||||||
if ((codeconvter(info) == -1))
|
if ((codeconvter(info) == -1))
|
||||||
{
|
{
|
||||||
|
|
||||||
//if ((get_ErrorCode() != PAPER_JAM) && (get_ErrorCode() != DETECT_DOUBLE_FEED) && (get_ErrorCode() != DETECT_STAPLE))
|
|
||||||
//{
|
|
||||||
// keeplastimg = false;
|
|
||||||
// while (im_dev_count())
|
|
||||||
// im_rx();
|
|
||||||
// scanflag = false;
|
|
||||||
//}
|
|
||||||
//else {
|
|
||||||
while (!scanner_read_reg(m_usb, SR_GET_IMAGEPROCESSDONE))
|
while (!scanner_read_reg(m_usb, SR_GET_IMAGEPROCESSDONE))
|
||||||
this_thread::sleep_for(chrono::microseconds(30));
|
this_thread::sleep_for(chrono::microseconds(30));
|
||||||
if (scanner_read_reg(m_usb, SR_GET_KEEP_LAST_PAPER))
|
if (scanner_read_reg(m_usb, SR_GET_KEEP_LAST_PAPER))
|
||||||
{
|
{
|
||||||
|
FileTools::writelog(log_ERROR, "keep last paper true");
|
||||||
this_thread::sleep_for(chrono::milliseconds(100));
|
this_thread::sleep_for(chrono::milliseconds(100));
|
||||||
while(im_dev_count()>( m_param.is_duplex?2:1))
|
while (im_dev_count() > ((m_param.is_duplex && !m_param.en_fold) ? 2 : 1))
|
||||||
im_rx();
|
im_rx();
|
||||||
if (m_param.is_duplex)
|
if (!is_kernelsnap_211209) {
|
||||||
|
if (m_param.is_duplex && !m_param.en_fold)
|
||||||
pop_dev_im();
|
pop_dev_im();
|
||||||
pop_dev_im();
|
pop_dev_im();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
keeplastimg = false;
|
keeplastimg = false;
|
||||||
while (im_dev_count())
|
while (im_dev_count())
|
||||||
im_rx();
|
im_rx();
|
||||||
}
|
}
|
||||||
scanflag = false;
|
|
||||||
//}
|
|
||||||
|
|
||||||
if ((devState != DEV_WRONG) && (get_ErrorCode()<=0))
|
if ((devState != DEV_WRONG) && (get_ErrorCode()<=0))
|
||||||
devState = DEV_STOP;
|
devState = DEV_STOP;
|
||||||
else if ((devState != DEV_WRONG) && (get_ErrorCode() > 0))
|
else if ((devState != DEV_WRONG) && (get_ErrorCode() > 0))
|
||||||
devState = DEV_WRONG;
|
devState = DEV_WRONG;
|
||||||
|
if (m_param.hardwarecaps.is_autopaper) {
|
||||||
|
if (devState == DEV_STOP && autopaperstop == false)
|
||||||
|
scanflag = true;
|
||||||
|
else
|
||||||
|
scanflag = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
scanflag = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -644,15 +620,11 @@ bool GScanO1003399::is_dev_tx()
|
||||||
|
|
||||||
void GScanO1003399::im_rx()
|
void GScanO1003399::im_rx()
|
||||||
{
|
{
|
||||||
|
|
||||||
//m_imgthread.enqueue([this] {
|
|
||||||
//StopWatch sw;
|
|
||||||
//while (im_dev_count()){
|
|
||||||
if (is_dev_tx())
|
if (is_dev_tx())
|
||||||
return;
|
return;
|
||||||
if (keeplastimg)
|
if (keeplastimg)
|
||||||
{
|
{
|
||||||
if (m_param.is_duplex) {
|
if (m_param.is_duplex && !m_param.en_fold) {
|
||||||
if(im_dev_count()<3)
|
if(im_dev_count()<3)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -668,7 +640,8 @@ void GScanO1003399::im_rx()
|
||||||
count = read_data(buffi->data(), count, count / (0.005 * 1024 * 1024)); //
|
count = read_data(buffi->data(), count, count / (0.005 * 1024 * 1024)); //
|
||||||
pop_dev_im();
|
pop_dev_im();
|
||||||
//vector<cv::Mat> mats;
|
//vector<cv::Mat> mats;
|
||||||
m_param.multi_output_red? imagecount += 2: imagecount++;
|
//m_param.multi_output_red? imagecount += 2: imagecount++;
|
||||||
|
imagecount += 1 * (m_param.multi_output_red ? 2 : 1) * (m_param.is_split ? 2 : 1);
|
||||||
UpdateScanInfo(countNReaded(), get_imgTransfered());
|
UpdateScanInfo(countNReaded(), get_imgTransfered());
|
||||||
if (m_param.resolution_dst > 200.0f || m_param.papertype == 52 || m_param.papertype == 54 || m_param.papertype == 131)
|
if (m_param.resolution_dst > 200.0f || m_param.papertype == 52 || m_param.papertype == 54 || m_param.papertype == 131)
|
||||||
{
|
{
|
||||||
|
@ -686,18 +659,7 @@ void GScanO1003399::im_rx()
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
imgs.Put(buffi);
|
imgs.Put(buffi);
|
||||||
//fu_imgpro.push(m_imgprocthread.enqueue([this] {
|
|
||||||
// imgproce(imgs.Take());
|
|
||||||
//}));
|
|
||||||
//while (fu_imgpro.size()>1)
|
|
||||||
//{
|
|
||||||
// fu_imgpro.front().get();
|
|
||||||
// if(fu_imgpro.size()>0)
|
|
||||||
// fu_imgpro.pop();
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
//}
|
|
||||||
//});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int GScanO1003399::read_data(void* data, int length, int timeout)
|
int GScanO1003399::read_data(void* data, int length, int timeout)
|
||||||
|
@ -787,6 +749,24 @@ void GScanO1003399::imgproce(std::shared_ptr<std::vector<char>>& buff)
|
||||||
{
|
{
|
||||||
CImageApplyColorRecognition(m_param.automaticcolortype == 1 ? CImageApplyColorRecognition::ColorRecognitionMode::Color_Gray : CImageApplyColorRecognition::ColorRecognitionMode::Color_Mono).apply(mats,m_param.is_duplex);
|
CImageApplyColorRecognition(m_param.automaticcolortype == 1 ? CImageApplyColorRecognition::ColorRecognitionMode::Color_Gray : CImageApplyColorRecognition::ColorRecognitionMode::Color_Mono).apply(mats,m_param.is_duplex);
|
||||||
}
|
}
|
||||||
|
if (m_param.is_split)
|
||||||
|
{
|
||||||
|
CImageApplySplit m_split;
|
||||||
|
std::vector<cv::Mat> tmp;
|
||||||
|
for (auto& var : mats)
|
||||||
|
{
|
||||||
|
if (!var.empty())
|
||||||
|
{
|
||||||
|
auto sptmp = m_split.apply(var);
|
||||||
|
for (auto& matvar : sptmp)
|
||||||
|
{
|
||||||
|
if (!matvar.empty())
|
||||||
|
tmp.push_back(matvar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mats.swap(tmp);
|
||||||
|
}
|
||||||
for (int i = 0; i < mats.size(); i++) {
|
for (int i = 0; i < mats.size(); i++) {
|
||||||
if (!mats[i].empty()) {
|
if (!mats[i].empty()) {
|
||||||
IMat2Bmp idata;
|
IMat2Bmp idata;
|
||||||
|
@ -852,6 +832,8 @@ int GScanO1003399::codeconvter(HGEIntInfo code)
|
||||||
return AQUIRE_IMAGE_TIMEOUT;
|
return AQUIRE_IMAGE_TIMEOUT;
|
||||||
case 0x20000:
|
case 0x20000:
|
||||||
return SIZE_ERROR;
|
return SIZE_ERROR;
|
||||||
|
case 0x80000:
|
||||||
|
return MLTOP_TIMEOUT;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,6 +75,8 @@ private:
|
||||||
volatile int Error_Code;
|
volatile int Error_Code;
|
||||||
volatile bool scanflag;
|
volatile bool scanflag;
|
||||||
volatile bool keeplastimg;
|
volatile bool keeplastimg;
|
||||||
|
volatile bool autopaperstop;
|
||||||
|
volatile bool is_kernelsnap_211209;
|
||||||
GScanCap m_param;
|
GScanCap m_param;
|
||||||
std::shared_ptr<IUsb> m_usb;
|
std::shared_ptr<IUsb> m_usb;
|
||||||
volatile bool b_imgprothread;
|
volatile bool b_imgprothread;
|
||||||
|
|
|
@ -343,12 +343,12 @@ int GScanO200::Get_Roller_num()
|
||||||
{
|
{
|
||||||
if (!(m_usb.get() && m_usb->is_open()))
|
if (!(m_usb.get() && m_usb->is_open()))
|
||||||
return 0;
|
return 0;
|
||||||
USBCB usbcb = { GET_ROLLER_NUM ,0,4 };
|
USBCB usbcb = { GET_SCANN_NUM ,0,4 };
|
||||||
std::lock_guard<std::mutex> lck(m_imgLocker);
|
std::lock_guard<std::mutex> lck(m_imgLocker);
|
||||||
m_usb->write_bulk(&usbcb, sizeof(usbcb));
|
m_usb->write_bulk(&usbcb, sizeof(usbcb));
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(50));
|
std::this_thread::sleep_for(std::chrono::milliseconds(50));
|
||||||
m_usb->read_bulk(&usbcb, sizeof(usbcb));
|
m_usb->read_bulk(&usbcb, sizeof(usbcb));
|
||||||
if (usbcb.u32_CMD != GET_ROLLER_NUM)
|
if (usbcb.u32_CMD != GET_SCANN_NUM)
|
||||||
{
|
{
|
||||||
FileTools::writelog(log_ERROR, "get roller usb bulk error");
|
FileTools::writelog(log_ERROR, "get roller usb bulk error");
|
||||||
}
|
}
|
||||||
|
|
|
@ -348,11 +348,11 @@ int GScanO400::Get_Roller_num()
|
||||||
{
|
{
|
||||||
if (!(m_usb.get() && m_usb->is_open()))
|
if (!(m_usb.get() && m_usb->is_open()))
|
||||||
return false;
|
return false;
|
||||||
USBCB usbcb = { GET_ROLLER_NUM ,0,4 };
|
USBCB usbcb = { GET_SCANN_NUM ,0,4 };
|
||||||
std::lock_guard<std::mutex> lck(m_imgLocker);
|
std::lock_guard<std::mutex> lck(m_imgLocker);
|
||||||
m_usb->write_bulk(&usbcb, sizeof(usbcb));
|
m_usb->write_bulk(&usbcb, sizeof(usbcb));
|
||||||
m_usb->read_bulk(&usbcb, sizeof(usbcb));
|
m_usb->read_bulk(&usbcb, sizeof(usbcb));
|
||||||
if (usbcb.u32_CMD != GET_ROLLER_NUM)
|
if (usbcb.u32_CMD != GET_SCANN_NUM)
|
||||||
{
|
{
|
||||||
FileTools::writelog(log_ERROR, "get roller usb bulk error");
|
FileTools::writelog(log_ERROR, "get roller usb bulk error");
|
||||||
}
|
}
|
||||||
|
|
|
@ -356,11 +356,11 @@ int GScanO400Android::Get_Roller_num()
|
||||||
{
|
{
|
||||||
if (!(m_usb.get() && m_usb->is_open()))
|
if (!(m_usb.get() && m_usb->is_open()))
|
||||||
return false;
|
return false;
|
||||||
USBCB usbcb = { GET_ROLLER_NUM ,0,4 };
|
USBCB usbcb = { GET_SCANN_NUM ,0,4 };
|
||||||
std::lock_guard<std::mutex> lck(m_imgLocker);
|
std::lock_guard<std::mutex> lck(m_imgLocker);
|
||||||
m_usb->write_bulk(&usbcb, sizeof(usbcb));
|
m_usb->write_bulk(&usbcb, sizeof(usbcb));
|
||||||
m_usb->read_bulk(&usbcb, sizeof(usbcb));
|
m_usb->read_bulk(&usbcb, sizeof(usbcb));
|
||||||
if (usbcb.u32_CMD != GET_ROLLER_NUM)
|
if (usbcb.u32_CMD != GET_SCANN_NUM)
|
||||||
{
|
{
|
||||||
FileTools::writelog(log_ERROR, "get roller usb bulk error");
|
FileTools::writelog(log_ERROR, "get roller usb bulk error");
|
||||||
}
|
}
|
||||||
|
@ -629,6 +629,10 @@ void GScanO400Android::usbmain()
|
||||||
case HAVE_IMAGE:
|
case HAVE_IMAGE:
|
||||||
{
|
{
|
||||||
int totalNum = usbcb.u32_Count&0x3fffffff;
|
int totalNum = usbcb.u32_Count&0x3fffffff;
|
||||||
|
if ((usbcb.u32_Count & 0xc0000000) == 0)
|
||||||
|
{
|
||||||
|
image_last = false;
|
||||||
|
}
|
||||||
if (totalNum < 1)
|
if (totalNum < 1)
|
||||||
{
|
{
|
||||||
image_last = false;
|
image_last = false;
|
||||||
|
|
|
@ -201,7 +201,14 @@ enum Scanner_Reg_Defs
|
||||||
SR_FLAT_GRAY_MAX_BRIGHT,
|
SR_FLAT_GRAY_MAX_BRIGHT,
|
||||||
SR_KERNEL_VERSION_INFO_LENGTH,
|
SR_KERNEL_VERSION_INFO_LENGTH,
|
||||||
SR_GET_KERNEL_VERSION,
|
SR_GET_KERNEL_VERSION,
|
||||||
SR_GET_MBSTATUS
|
SR_GET_MBSTATUS,
|
||||||
|
SR_GET_IPADDR_LENGHT = 0x200,
|
||||||
|
SR_GET_MACADDR,
|
||||||
|
SR_GET_IPADDR,
|
||||||
|
SR_GET_MBVERSION_LENGHT,
|
||||||
|
SR_GET_MBVERSION,
|
||||||
|
SR_GET_USBVIDPID,
|
||||||
|
SR_SET_USBVIDPID
|
||||||
};
|
};
|
||||||
|
|
||||||
enum Scanner_Cmd_Defs
|
enum Scanner_Cmd_Defs
|
||||||
|
@ -284,7 +291,8 @@ typedef union HG_ScanConfig
|
||||||
unsigned int screw_detect_enable : 1;
|
unsigned int screw_detect_enable : 1;
|
||||||
unsigned int screw_detect_level : 3;//µÚÊ®ËÄλ
|
unsigned int screw_detect_level : 3;//µÚÊ®ËÄλ
|
||||||
unsigned int iscorrect_mod : 1;
|
unsigned int iscorrect_mod : 1;
|
||||||
unsigned int unused_one : 5;
|
unsigned int is_autopaper : 1;
|
||||||
|
unsigned int unused_one : 4;
|
||||||
unsigned int pc_correct : 1;
|
unsigned int pc_correct : 1;
|
||||||
unsigned int enable_sizecheck : 1;
|
unsigned int enable_sizecheck : 1;
|
||||||
unsigned int enabledsp_cache : 1;
|
unsigned int enabledsp_cache : 1;
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include "StopWatch.h"
|
#include "StopWatch.h"
|
||||||
|
|
||||||
|
|
||||||
using namespace cv;
|
using namespace cv;
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
@ -509,10 +510,10 @@ void ImageMatQueue::proc()
|
||||||
cv::resize(mats[i], mats[i], cv::Size(), fx, fy);//用于修正与佳能机器幅面大小不匹配问题 此系数请勿轻易动
|
cv::resize(mats[i], mats[i], cv::Size(), fx, fy);//用于修正与佳能机器幅面大小不匹配问题 此系数请勿轻易动
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scanParam.en_fold != 0) {
|
//if (scanParam.en_fold != 0) { //对折前旋转屏蔽 20211214 奥鸽要求
|
||||||
cv::flip(mats[0], mats[0], 1);
|
// cv::flip(mats[0], mats[0], 1);
|
||||||
cv::flip(mats[0], mats[0], 0);
|
// cv::flip(mats[0], mats[0], 0);
|
||||||
}
|
//}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -602,14 +603,15 @@ void ImageMatQueue::proc()
|
||||||
uvmats.clear();
|
uvmats.clear();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
if (!scanParam.is_duplex && mats.size()>1) {
|
||||||
FileTools::writelog(log_INFO, "图像处理耗时 " + to_string(sw.elapsed_ms()));
|
mats.pop_back();
|
||||||
sw.reset();
|
|
||||||
for (int i = 0; i < mats.size(); i++) {
|
|
||||||
if (!scanParam.is_duplex && i == 1) {
|
|
||||||
mats[i].release();
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (scanParam.is_split)
|
||||||
|
{
|
||||||
|
splitimg(mats);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < mats.size(); i++) {
|
||||||
if (!mats[i].empty()) {
|
if (!mats[i].empty()) {
|
||||||
IMat2Bmp idata;
|
IMat2Bmp idata;
|
||||||
#ifdef UV
|
#ifdef UV
|
||||||
|
@ -634,9 +636,7 @@ void ImageMatQueue::proc()
|
||||||
FileTools::writelog(log_ERROR, "enqueue image is empty " + std::to_string(index++));
|
FileTools::writelog(log_ERROR, "enqueue image is empty " + std::to_string(index++));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FileTools::writelog(log_INFO, "转码BMP 耗时: " + to_string(sw.elapsed_ms()));
|
|
||||||
|
|
||||||
sw.reset();
|
|
||||||
if (scanParam.multi_output_red) {
|
if (scanParam.multi_output_red) {
|
||||||
for (int i = 0; i < mats.size(); i++) {
|
for (int i = 0; i < mats.size(); i++) {
|
||||||
if (!mats[i].empty()) {
|
if (!mats[i].empty()) {
|
||||||
|
@ -656,7 +656,6 @@ void ImageMatQueue::proc()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FileTools::writelog(log_INFO, "多流输出 耗时: " + to_string(sw.elapsed_ms()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mats.clear();
|
mats.clear();
|
||||||
|
@ -668,6 +667,21 @@ void ImageMatQueue::proc()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ImageMatQueue::splitimg(std::vector<cv::Mat>& mats) {
|
||||||
|
CImageApplySplit m_split;
|
||||||
|
std::vector<cv::Mat> tmp;
|
||||||
|
for (auto& var : mats){
|
||||||
|
if (!var.empty()){
|
||||||
|
auto sptmp = m_split.apply(var);
|
||||||
|
for (auto& matvar : sptmp){
|
||||||
|
if (!matvar.empty())
|
||||||
|
tmp.push_back(matvar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mats.swap(tmp);
|
||||||
|
}
|
||||||
|
|
||||||
G400Decode::G400Decode(std::shared_ptr<std::vector<char>> buff)
|
G400Decode::G400Decode(std::shared_ptr<std::vector<char>> buff)
|
||||||
{
|
{
|
||||||
m_buffs.push_back(buff);
|
m_buffs.push_back(buff);
|
||||||
|
|
|
@ -226,6 +226,7 @@ private:
|
||||||
void EnqueueBmpBuffer(std::shared_ptr<std::vector<unsigned char>>);
|
void EnqueueBmpBuffer(std::shared_ptr<std::vector<unsigned char>>);
|
||||||
void PaniusCount(int count = 1);
|
void PaniusCount(int count = 1);
|
||||||
void init_cachethread();
|
void init_cachethread();
|
||||||
|
void splitimg(std::vector<cv::Mat>& mats);
|
||||||
void cache_run();
|
void cache_run();
|
||||||
//清除缓存文件
|
//清除缓存文件
|
||||||
void clear_cachefiles();
|
void clear_cachefiles();
|
||||||
|
|
|
@ -44,7 +44,7 @@ const std::string DB_DEVNMAX = "iDevnMax";
|
||||||
const std::string FLOD = "bFlod";
|
const std::string FLOD = "bFlod";
|
||||||
const std::string AUTOCROP = "bAuotCrop";
|
const std::string AUTOCROP = "bAuotCrop";
|
||||||
const std::string SWITCHFRONTBACK = "bSwitchFrontBack";
|
const std::string SWITCHFRONTBACK = "bSwitchFrontBack";
|
||||||
|
const std::string SPLIT = "bSplit";
|
||||||
|
|
||||||
//<!亮度对比度选项卡
|
//<!亮度对比度选项卡
|
||||||
const std::string AUTOCONTRAST = "bAutoContrast";
|
const std::string AUTOCONTRAST = "bAutoContrast";
|
||||||
|
@ -70,6 +70,7 @@ const std::string HSVCORRECT = "bHsvCorrect";
|
||||||
//<!送纸选项卡
|
//<!送纸选项卡
|
||||||
const std::string ULTRADETECT = "bUltrasonicDetect";
|
const std::string ULTRADETECT = "bUltrasonicDetect";
|
||||||
const std::string BINDINGDETECT = "bBindingDetect";
|
const std::string BINDINGDETECT = "bBindingDetect";
|
||||||
|
const std::string AUTOPAPER = "bautopaper";
|
||||||
const std::string SCANCOUNT = "ScanCount";
|
const std::string SCANCOUNT = "ScanCount";
|
||||||
const std::string DOCORIENTATION = "bOrientation";
|
const std::string DOCORIENTATION = "bOrientation";
|
||||||
const std::string AUTO_TEXT = "bAutoText";
|
const std::string AUTO_TEXT = "bAutoText";
|
||||||
|
@ -180,6 +181,7 @@ typedef struct tagHARDWAREPARAMS
|
||||||
byte en_stapledetect;
|
byte en_stapledetect;
|
||||||
byte en_skrewdetect;
|
byte en_skrewdetect;
|
||||||
byte skrewdetectlevel;
|
byte skrewdetectlevel;
|
||||||
|
byte is_autopaper;
|
||||||
LowPowerMode lowpowermode;
|
LowPowerMode lowpowermode;
|
||||||
#ifdef UV
|
#ifdef UV
|
||||||
byte en_uv;
|
byte en_uv;
|
||||||
|
@ -244,6 +246,7 @@ struct GScanCap
|
||||||
uint8_t is_autocontrast; /**< 自动对比度*/
|
uint8_t is_autocontrast; /**< 自动对比度*/
|
||||||
uint8_t is_autocrop; /**< 自动裁切*/
|
uint8_t is_autocrop; /**< 自动裁切*/
|
||||||
bool normalCrop; /**<传统模式自动裁切*/
|
bool normalCrop; /**<传统模式自动裁切*/
|
||||||
|
bool is_split; /**< 图像拆分*/
|
||||||
uint8_t is_autodiscradblank_normal; /**< 自动丢弃空白页通用*/
|
uint8_t is_autodiscradblank_normal; /**< 自动丢弃空白页通用*/
|
||||||
int discardblank_percent; /**<跳过空白页阀值*/
|
int discardblank_percent; /**<跳过空白页阀值*/
|
||||||
uint8_t is_autodiscradblank_vince;/**自动丢弃空白页发票*/
|
uint8_t is_autodiscradblank_vince;/**自动丢弃空白页发票*/
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
#include <tchar.h>
|
#include <tchar.h>
|
||||||
#include <winioctl.h>
|
#include <winioctl.h>
|
||||||
|
|
||||||
|
|
||||||
//#ifdef ANDROIDSERIAL
|
//#ifdef ANDROIDSERIAL
|
||||||
#if false
|
#if false
|
||||||
|
|
||||||
|
|
|
@ -104,6 +104,7 @@ void GscanJsonConfig::SaveGscanCapConfig(const GScanCap & gcap, const std::strin
|
||||||
//outJson["Config"].Add(DB_DEVNMAX, (int)(pConfigItem->DBlank_DevnMax));
|
//outJson["Config"].Add(DB_DEVNMAX, (int)(pConfigItem->DBlank_DevnMax));
|
||||||
outJson["Config"].Add(FLOD, (bool)(gcap.en_fold), false);
|
outJson["Config"].Add(FLOD, (bool)(gcap.en_fold), false);
|
||||||
outJson["Config"].Add(SWITCHFRONTBACK, (bool)(gcap.is_switchfrontback), false);
|
outJson["Config"].Add(SWITCHFRONTBACK, (bool)(gcap.is_switchfrontback), false);
|
||||||
|
outJson["Config"].Add(SPLIT, gcap.is_split, false);
|
||||||
|
|
||||||
#ifdef UV
|
#ifdef UV
|
||||||
outJson["Config"].Add(ENUVMODEL, (bool)(gcap.hardwarecaps.en_uv), false);
|
outJson["Config"].Add(ENUVMODEL, (bool)(gcap.hardwarecaps.en_uv), false);
|
||||||
|
@ -127,6 +128,7 @@ void GscanJsonConfig::SaveGscanCapConfig(const GScanCap & gcap, const std::strin
|
||||||
|
|
||||||
outJson["Config"].Add(ULTRADETECT, (bool)(gcap.hardwarecaps.en_doublefeed), false);
|
outJson["Config"].Add(ULTRADETECT, (bool)(gcap.hardwarecaps.en_doublefeed), false);
|
||||||
outJson["Config"].Add(BINDINGDETECT, (bool)(gcap.hardwarecaps.en_stapledetect), false);
|
outJson["Config"].Add(BINDINGDETECT, (bool)(gcap.hardwarecaps.en_stapledetect), false);
|
||||||
|
outJson["Config"].Add(AUTOPAPER, (bool)(gcap.hardwarecaps.is_autopaper), false);
|
||||||
outJson["Config"].Add(SCANCOUNT, (int)(gcap.scannum));
|
outJson["Config"].Add(SCANCOUNT, (int)(gcap.scannum));
|
||||||
outJson["Config"].Add(DOCORIENTATION, (int)(gcap.imageRotateDegree));
|
outJson["Config"].Add(DOCORIENTATION, (int)(gcap.imageRotateDegree));
|
||||||
outJson["Config"].Add(AUTO_TEXT, (bool)(gcap.is_autotext),false);
|
outJson["Config"].Add(AUTO_TEXT, (bool)(gcap.is_autotext),false);
|
||||||
|
@ -227,6 +229,7 @@ void GscanJsonConfig::WriteJsonArrayToFile(std::vector<GScanCap> cfgArray, const
|
||||||
//root["Config"][DB_DEVNMAX].Add(cfgArray[i].DBlank_DevnMax);
|
//root["Config"][DB_DEVNMAX].Add(cfgArray[i].DBlank_DevnMax);
|
||||||
root["Config"][FLOD].Add(i, (bool)cfgArray[i].en_fold);
|
root["Config"][FLOD].Add(i, (bool)cfgArray[i].en_fold);
|
||||||
root["Config"][SWITCHFRONTBACK].Add(i,(bool)cfgArray[i].is_switchfrontback);
|
root["Config"][SWITCHFRONTBACK].Add(i,(bool)cfgArray[i].is_switchfrontback);
|
||||||
|
root["Config"][SPLIT].Add(i, cfgArray[i].is_split);
|
||||||
#ifdef UV
|
#ifdef UV
|
||||||
root["Config"][ENUVMODEL].Add(i, cfgArray[i].hardwarecaps.en_uv);
|
root["Config"][ENUVMODEL].Add(i, cfgArray[i].hardwarecaps.en_uv);
|
||||||
#endif
|
#endif
|
||||||
|
@ -249,6 +252,7 @@ void GscanJsonConfig::WriteJsonArrayToFile(std::vector<GScanCap> cfgArray, const
|
||||||
|
|
||||||
root["Config"][ULTRADETECT].Add(i, (bool)cfgArray[i].hardwarecaps.en_doublefeed);
|
root["Config"][ULTRADETECT].Add(i, (bool)cfgArray[i].hardwarecaps.en_doublefeed);
|
||||||
root["Config"][BINDINGDETECT].Add(i, (bool)cfgArray[i].hardwarecaps.en_stapledetect);
|
root["Config"][BINDINGDETECT].Add(i, (bool)cfgArray[i].hardwarecaps.en_stapledetect);
|
||||||
|
root["Config"][AUTOPAPER].Add(i, (bool)cfgArray[i].hardwarecaps.is_autopaper);
|
||||||
root["Config"][SCANCOUNT].Add((int)cfgArray[i].scannum);
|
root["Config"][SCANCOUNT].Add((int)cfgArray[i].scannum);
|
||||||
root["Config"][DOCORIENTATION].Add((int)cfgArray[i].imageRotateDegree);
|
root["Config"][DOCORIENTATION].Add((int)cfgArray[i].imageRotateDegree);
|
||||||
root["Config"][AUTO_TEXT].Add(i, (bool)cfgArray[i].is_autotext);
|
root["Config"][AUTO_TEXT].Add(i, (bool)cfgArray[i].is_autotext);
|
||||||
|
@ -391,6 +395,9 @@ std::vector<GScanCap> GscanJsonConfig::parseJsonFromString(const std::string str
|
||||||
root["Config"].Get(FLOD, itmEnFlod);
|
root["Config"].Get(FLOD, itmEnFlod);
|
||||||
neb::CJsonObject itmEnSwitchFrontBack;
|
neb::CJsonObject itmEnSwitchFrontBack;
|
||||||
root["Config"].Get(SWITCHFRONTBACK, itmEnSwitchFrontBack);
|
root["Config"].Get(SWITCHFRONTBACK, itmEnSwitchFrontBack);
|
||||||
|
neb::CJsonObject itmEnSplit;
|
||||||
|
root["Config"].Get(SPLIT, itmEnSplit);
|
||||||
|
|
||||||
neb::CJsonObject itmdiscarbrank_value;
|
neb::CJsonObject itmdiscarbrank_value;
|
||||||
root["Config"].Get(DISCARBLANK_VALUE, itmdiscarbrank_value);
|
root["Config"].Get(DISCARBLANK_VALUE, itmdiscarbrank_value);
|
||||||
#ifdef UV
|
#ifdef UV
|
||||||
|
@ -433,6 +440,8 @@ std::vector<GScanCap> GscanJsonConfig::parseJsonFromString(const std::string str
|
||||||
root["Config"].Get(ULTRADETECT, itmUltDetect);
|
root["Config"].Get(ULTRADETECT, itmUltDetect);
|
||||||
neb::CJsonObject itmBingdingDetect;
|
neb::CJsonObject itmBingdingDetect;
|
||||||
root["Config"].Get(BINDINGDETECT, itmBingdingDetect);
|
root["Config"].Get(BINDINGDETECT, itmBingdingDetect);
|
||||||
|
neb::CJsonObject itmAutoPaper;
|
||||||
|
root["Config"].Get(AUTOPAPER, itmAutoPaper);
|
||||||
neb::CJsonObject itmScanCount;
|
neb::CJsonObject itmScanCount;
|
||||||
root["Config"].Get(SCANCOUNT, itmScanCount);
|
root["Config"].Get(SCANCOUNT, itmScanCount);
|
||||||
neb::CJsonObject itmDocOrientation;
|
neb::CJsonObject itmDocOrientation;
|
||||||
|
@ -508,12 +517,14 @@ std::vector<GScanCap> GscanJsonConfig::parseJsonFromString(const std::string str
|
||||||
cfp.en_fold = b_value ? 1 : 0;
|
cfp.en_fold = b_value ? 1 : 0;
|
||||||
itmEnSwitchFrontBack.Get(i, b_value);
|
itmEnSwitchFrontBack.Get(i, b_value);
|
||||||
cfp.is_switchfrontback = b_value ? 1 : 0;
|
cfp.is_switchfrontback = b_value ? 1 : 0;
|
||||||
|
itmEnSplit.Get(i, b_value);
|
||||||
|
cfp.is_split = b_value ? 1 : 0;
|
||||||
#ifdef UV
|
#ifdef UV
|
||||||
itmEnUV.Get(i, b_value);
|
itmEnUV.Get(i, b_value);
|
||||||
cfp.hardwarecaps.en_uv = b_value ? 1 : 0;
|
cfp.hardwarecaps.en_uv = b_value ? 1 : 0;
|
||||||
#endif
|
#endif
|
||||||
itmBrtnes.Get(i, i_value);
|
itmBrtnes.Get(i, f_value);
|
||||||
cfp.brightness = i_value;
|
cfp.brightness = f_value;
|
||||||
itmAutoCrnt.Get(i, b_value);
|
itmAutoCrnt.Get(i, b_value);
|
||||||
cfp.is_autocontrast = b_value ? 1 : 0;
|
cfp.is_autocontrast = b_value ? 1 : 0;
|
||||||
itmContrast.Get(i, i_value);
|
itmContrast.Get(i, i_value);
|
||||||
|
@ -548,6 +559,8 @@ std::vector<GScanCap> GscanJsonConfig::parseJsonFromString(const std::string str
|
||||||
cfp.hardwarecaps.en_doublefeed = b_value ? 1 : 0;
|
cfp.hardwarecaps.en_doublefeed = b_value ? 1 : 0;
|
||||||
itmBingdingDetect.Get(i, b_value);
|
itmBingdingDetect.Get(i, b_value);
|
||||||
cfp.hardwarecaps.en_stapledetect = b_value ? 1 : 0;
|
cfp.hardwarecaps.en_stapledetect = b_value ? 1 : 0;
|
||||||
|
itmAutoPaper.Get(i, b_value);
|
||||||
|
cfp.hardwarecaps.is_autopaper = b_value ? 1 : 0;
|
||||||
itmScanCount.Get(i, i_value);
|
itmScanCount.Get(i, i_value);
|
||||||
cfp.scannum = i_value;
|
cfp.scannum = i_value;
|
||||||
itmDocOrientation.Get(i, i_value);
|
itmDocOrientation.Get(i, i_value);
|
||||||
|
@ -623,12 +636,14 @@ std::vector<GScanCap> GscanJsonConfig::parseJsonFromString(const std::string str
|
||||||
cfp.en_fold = bvalue?1:0;
|
cfp.en_fold = bvalue?1:0;
|
||||||
root["Config"].Get(SWITCHFRONTBACK, bvalue);
|
root["Config"].Get(SWITCHFRONTBACK, bvalue);
|
||||||
cfp.is_switchfrontback = bvalue?1:0;
|
cfp.is_switchfrontback = bvalue?1:0;
|
||||||
|
root["Config"].Get(SPLIT, bvalue);
|
||||||
|
cfp.is_split = bvalue ? 1 : 0;
|
||||||
#ifdef UV
|
#ifdef UV
|
||||||
root["Config"].Get(ENUVMODEL, bvalue);
|
root["Config"].Get(ENUVMODEL, bvalue);
|
||||||
cfp.hardwarecaps.en_uv = bvalue ? 1 : 0;
|
cfp.hardwarecaps.en_uv = bvalue ? 1 : 0;
|
||||||
#endif
|
#endif
|
||||||
root["Config"].Get(BRIGHTNESS, index);
|
root["Config"].Get(BRIGHTNESS, fvalue);
|
||||||
cfp.brightness = index;
|
cfp.brightness = fvalue;
|
||||||
root["Config"].Get(AUTOCONTRAST, bvalue);
|
root["Config"].Get(AUTOCONTRAST, bvalue);
|
||||||
cfp.is_autocontrast = bvalue?1:0;
|
cfp.is_autocontrast = bvalue?1:0;
|
||||||
root["Config"].Get(CONTRAST, index);
|
root["Config"].Get(CONTRAST, index);
|
||||||
|
@ -669,6 +684,8 @@ std::vector<GScanCap> GscanJsonConfig::parseJsonFromString(const std::string str
|
||||||
cfp.hardwarecaps.en_doublefeed = bvalue?1:0;
|
cfp.hardwarecaps.en_doublefeed = bvalue?1:0;
|
||||||
root["Config"].Get(BINDINGDETECT, bvalue);
|
root["Config"].Get(BINDINGDETECT, bvalue);
|
||||||
cfp.hardwarecaps.en_stapledetect = bvalue ? 1 : 0;
|
cfp.hardwarecaps.en_stapledetect = bvalue ? 1 : 0;
|
||||||
|
root["Config"].Get(AUTOPAPER, bvalue);
|
||||||
|
cfp.hardwarecaps.is_autopaper = bvalue ? 1 : 0;
|
||||||
root["Config"].Get(SCANCOUNT, index);
|
root["Config"].Get(SCANCOUNT, index);
|
||||||
cfp.scannum = index;
|
cfp.scannum = index;
|
||||||
root["Config"].Get(DOCORIENTATION, index);
|
root["Config"].Get(DOCORIENTATION, index);
|
||||||
|
@ -739,6 +756,7 @@ json GscanJsonConfig::GscancapToJson(GScanCap& cap)
|
||||||
js[CONFIG][DISCARBLANK_VALUE] = cap.discardblank_percent;
|
js[CONFIG][DISCARBLANK_VALUE] = cap.discardblank_percent;
|
||||||
js[CONFIG][FLOD] = cap.en_fold;
|
js[CONFIG][FLOD] = cap.en_fold;
|
||||||
js[CONFIG][SWITCHFRONTBACK] = cap.is_switchfrontback;
|
js[CONFIG][SWITCHFRONTBACK] = cap.is_switchfrontback;
|
||||||
|
js[CONFIG][SPLIT] = cap.is_split;
|
||||||
#ifdef UV
|
#ifdef UV
|
||||||
js[CONFIG][ENUVMODEL] = cap.hardwarecaps.en_uv;
|
js[CONFIG][ENUVMODEL] = cap.hardwarecaps.en_uv;
|
||||||
#endif
|
#endif
|
||||||
|
@ -760,6 +778,7 @@ json GscanJsonConfig::GscancapToJson(GScanCap& cap)
|
||||||
js[CONFIG][HSVCORRECT] = cap.hsvcorrect;
|
js[CONFIG][HSVCORRECT] = cap.hsvcorrect;
|
||||||
js[CONFIG][ULTRADETECT] = cap.hardwarecaps.en_doublefeed;
|
js[CONFIG][ULTRADETECT] = cap.hardwarecaps.en_doublefeed;
|
||||||
js[CONFIG][BINDINGDETECT] = cap.hardwarecaps.en_stapledetect;
|
js[CONFIG][BINDINGDETECT] = cap.hardwarecaps.en_stapledetect;
|
||||||
|
js[CONFIG][AUTOPAPER] = cap.hardwarecaps.is_autopaper;
|
||||||
js[CONFIG][SCANCOUNT] = cap.scannum;
|
js[CONFIG][SCANCOUNT] = cap.scannum;
|
||||||
js[CONFIG][DOCORIENTATION] = cap.imageRotateDegree;
|
js[CONFIG][DOCORIENTATION] = cap.imageRotateDegree;
|
||||||
js[CONFIG][AUTO_TEXT] = cap.is_autotext;
|
js[CONFIG][AUTO_TEXT] = cap.is_autotext;
|
||||||
|
@ -798,6 +817,7 @@ GScanCap GscanJsonConfig::JsonToGscancap(json& js)
|
||||||
cap.discardblank_percent = json_cast(js[CONFIG][DISCARBLANK_VALUE]).to_int();
|
cap.discardblank_percent = json_cast(js[CONFIG][DISCARBLANK_VALUE]).to_int();
|
||||||
cap.en_fold = json_cast(js[CONFIG][FLOD]).to_int();
|
cap.en_fold = json_cast(js[CONFIG][FLOD]).to_int();
|
||||||
cap.is_switchfrontback = json_cast(js[CONFIG][SWITCHFRONTBACK]).to_int();
|
cap.is_switchfrontback = json_cast(js[CONFIG][SWITCHFRONTBACK]).to_int();
|
||||||
|
cap.is_split = json_cast(js[CONFIG][SPLIT]).to_int();
|
||||||
#ifdef UV
|
#ifdef UV
|
||||||
cap.hardwarecaps.en_uv = json_cast(js[CONFIG][ENUVMODEL]).to_int();
|
cap.hardwarecaps.en_uv = json_cast(js[CONFIG][ENUVMODEL]).to_int();
|
||||||
#endif // UV
|
#endif // UV
|
||||||
|
@ -819,6 +839,7 @@ GScanCap GscanJsonConfig::JsonToGscancap(json& js)
|
||||||
cap.hsvcorrect = json_cast(js[CONFIG][HSVCORRECT]).to_int();
|
cap.hsvcorrect = json_cast(js[CONFIG][HSVCORRECT]).to_int();
|
||||||
cap.hardwarecaps.en_doublefeed = json_cast(js[CONFIG][ULTRADETECT]).to_int();
|
cap.hardwarecaps.en_doublefeed = json_cast(js[CONFIG][ULTRADETECT]).to_int();
|
||||||
cap.hardwarecaps.en_stapledetect = json_cast(js[CONFIG][BINDINGDETECT]).to_int();
|
cap.hardwarecaps.en_stapledetect = json_cast(js[CONFIG][BINDINGDETECT]).to_int();
|
||||||
|
cap.hardwarecaps.is_autopaper = json_cast(js[CONFIG][AUTOPAPER]).to_int();
|
||||||
cap.scannum = json_cast(js[CONFIG][SCANCOUNT]).to_int();
|
cap.scannum = json_cast(js[CONFIG][SCANCOUNT]).to_int();
|
||||||
cap.imageRotateDegree = json_cast(js[CONFIG][DOCORIENTATION]).to_int();
|
cap.imageRotateDegree = json_cast(js[CONFIG][DOCORIENTATION]).to_int();
|
||||||
cap.is_autotext = json_cast(js[CONFIG][AUTO_TEXT]).to_int();
|
cap.is_autotext = json_cast(js[CONFIG][AUTO_TEXT]).to_int();
|
||||||
|
@ -856,6 +877,7 @@ json GscanJsonConfig::GetDefaultJson()
|
||||||
"discardblank_percent": 20 ,
|
"discardblank_percent": 20 ,
|
||||||
"bFlod": false ,
|
"bFlod": false ,
|
||||||
"bSwitchFrontBack": false ,
|
"bSwitchFrontBack": false ,
|
||||||
|
"bSplit": false ,
|
||||||
"bUVmodel": false,
|
"bUVmodel": false,
|
||||||
"detachnoise": false ,
|
"detachnoise": false ,
|
||||||
"detachnoisevalue": 30 ,
|
"detachnoisevalue": 30 ,
|
||||||
|
@ -874,6 +896,7 @@ json GscanJsonConfig::GetDefaultJson()
|
||||||
"bHsvCorrect": false ,
|
"bHsvCorrect": false ,
|
||||||
"bUltrasonicDetect": true ,
|
"bUltrasonicDetect": true ,
|
||||||
"bBindingDetect": false ,
|
"bBindingDetect": false ,
|
||||||
|
"bautopaper": false ,
|
||||||
"ScanCount": 65535 ,
|
"ScanCount": 65535 ,
|
||||||
"bOrientation": 0 ,
|
"bOrientation": 0 ,
|
||||||
"bAutoText": false ,
|
"bAutoText": false ,
|
||||||
|
@ -909,6 +932,7 @@ json GscanJsonConfig::GetDefaultJson()
|
||||||
"discardblank_percent": 20 ,
|
"discardblank_percent": 20 ,
|
||||||
"bFlod": false ,
|
"bFlod": false ,
|
||||||
"bSwitchFrontBack": false ,
|
"bSwitchFrontBack": false ,
|
||||||
|
"bSplit": false ,
|
||||||
"detachnoise": false ,
|
"detachnoise": false ,
|
||||||
"detachnoisevalue": 30 ,
|
"detachnoisevalue": 30 ,
|
||||||
"iBrightness": 0 ,
|
"iBrightness": 0 ,
|
||||||
|
@ -926,6 +950,7 @@ json GscanJsonConfig::GetDefaultJson()
|
||||||
"bHsvCorrect": false ,
|
"bHsvCorrect": false ,
|
||||||
"bUltrasonicDetect": true ,
|
"bUltrasonicDetect": true ,
|
||||||
"bBindingDetect": false ,
|
"bBindingDetect": false ,
|
||||||
|
"bautopaper": false ,
|
||||||
"ScanCount": 65535 ,
|
"ScanCount": 65535 ,
|
||||||
"bOrientation": 0 ,
|
"bOrientation": 0 ,
|
||||||
"bAutoText": false ,
|
"bAutoText": false ,
|
||||||
|
|
|
@ -18,4 +18,5 @@
|
||||||
#include "ImageApplyDetachNoise.h"
|
#include "ImageApplyDetachNoise.h"
|
||||||
#include "ImageApplyColorRecognition.h"
|
#include "ImageApplyColorRecognition.h"
|
||||||
#include "ImageApplyUV.h"
|
#include "ImageApplyUV.h"
|
||||||
|
#include "ImageApplySplit.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -61,6 +61,7 @@ enum class CapTypeEx : unsigned short {
|
||||||
TwEx_ENCODE = 0x8105,
|
TwEx_ENCODE = 0x8105,
|
||||||
TwEx_CropModel=0x8106,
|
TwEx_CropModel=0x8106,
|
||||||
TwEx_DogEarDistance = 0x8107,
|
TwEx_DogEarDistance = 0x8107,
|
||||||
|
TwEx_ImageSplit = 0x8108,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class PaperSizeEx : unsigned short {
|
enum class PaperSizeEx : unsigned short {
|
||||||
|
@ -88,7 +89,7 @@ using namespace std::placeholders;
|
||||||
TWPP_ENTRY_MFC(HuagaoDs)
|
TWPP_ENTRY_MFC(HuagaoDs)
|
||||||
|
|
||||||
static constexpr const Identity srcIdent(
|
static constexpr const Identity srcIdent(
|
||||||
Version(3, 3, Language::English, Country::China, "v3.3.5.5"),
|
Version(3, 3, Language::English, Country::China, "v3.3.5.6"),
|
||||||
DataGroup::Image,
|
DataGroup::Image,
|
||||||
#ifdef MAKEHUAGAO
|
#ifdef MAKEHUAGAO
|
||||||
"HUAGO",
|
"HUAGO",
|
||||||
|
@ -106,6 +107,8 @@ static constexpr const Identity srcIdent(
|
||||||
#ifdef ISG100
|
#ifdef ISG100
|
||||||
#ifdef LANXUM
|
#ifdef LANXUM
|
||||||
"G62S Series",
|
"G62S Series",
|
||||||
|
#elif defined HANVON
|
||||||
|
"HW-8190F Series",
|
||||||
#else // ISG100
|
#else // ISG100
|
||||||
"G100 Series",
|
"G100 Series",
|
||||||
#endif
|
#endif
|
||||||
|
@ -113,7 +116,7 @@ static constexpr const Identity srcIdent(
|
||||||
#ifdef LANXUM
|
#ifdef LANXUM
|
||||||
"G73S Series",
|
"G73S Series",
|
||||||
#elif defined HANVON
|
#elif defined HANVON
|
||||||
"HW-7000W Series",
|
"HW-9110M Series",
|
||||||
#else // ISG100
|
#else // ISG100
|
||||||
"G200 Series",
|
"G200 Series",
|
||||||
#endif
|
#endif
|
||||||
|
@ -124,7 +127,7 @@ static constexpr const Identity srcIdent(
|
||||||
#elif defined HANVON
|
#elif defined HANVON
|
||||||
"HW-7000W Series",
|
"HW-7000W Series",
|
||||||
#else // ISG100
|
#else // ISG100
|
||||||
"G200 Series",//兼容旧极课 pm changed ,G300 Series
|
"G300 Series",//兼容旧极课 pm changed ,G300 Series
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#elif defined(G400) // G200
|
#elif defined(G400) // G200
|
||||||
|
@ -144,6 +147,8 @@ static constexpr const Identity srcIdent(
|
||||||
"HUAGOSCAN G100 TWAIN"
|
"HUAGOSCAN G100 TWAIN"
|
||||||
#elif defined AUGE
|
#elif defined AUGE
|
||||||
"AUGESCAN G100 TWAIN"
|
"AUGESCAN G100 TWAIN"
|
||||||
|
#elif defined HANVON
|
||||||
|
"HANVONSCAN HW-8190F TAWIN"
|
||||||
#elif defined LANXUM //!LANXUM
|
#elif defined LANXUM //!LANXUM
|
||||||
"LANXUMSCAN G62S TWAIN"
|
"LANXUMSCAN G62S TWAIN"
|
||||||
#else // !MAKEHUAGAO
|
#else // !MAKEHUAGAO
|
||||||
|
@ -153,7 +158,7 @@ static constexpr const Identity srcIdent(
|
||||||
#ifdef MAKEHUAGAO
|
#ifdef MAKEHUAGAO
|
||||||
"HUAGOSCAN G200 TWAIN"
|
"HUAGOSCAN G200 TWAIN"
|
||||||
#elif defined HANVON
|
#elif defined HANVON
|
||||||
"HANVONSCAN HW-7000W TAWIN"
|
"HANVONSCAN HW-9110M TAWIN"
|
||||||
#elif defined LANXUM //!LANXUM
|
#elif defined LANXUM //!LANXUM
|
||||||
"LANXUMSCAN G73S TWAIN"
|
"LANXUMSCAN G73S TWAIN"
|
||||||
#else // !MAKEHUAGAO
|
#else // !MAKEHUAGAO
|
||||||
|
@ -165,7 +170,7 @@ static constexpr const Identity srcIdent(
|
||||||
#ifdef UV
|
#ifdef UV
|
||||||
"HUAGOSCAN G300UV TWAIN"
|
"HUAGOSCAN G300UV TWAIN"
|
||||||
#else
|
#else
|
||||||
"HUAGOSCAN G200 TWAIN"// 兼容旧极课 pm changed "HUAGOSCAN G300 TWAIN"
|
"HUAGOSCAN G300 TWAIN"// 兼容旧极课 pm changed "HUAGOSCAN G300 TWAIN"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#elif defined HANVON
|
#elif defined HANVON
|
||||||
|
@ -270,7 +275,6 @@ struct Vid_pid
|
||||||
#ifdef LANXUM
|
#ifdef LANXUM
|
||||||
|
|
||||||
static std::vector<Vid_pid> DeviceID{
|
static std::vector<Vid_pid> DeviceID{
|
||||||
{0x3072,0x239},
|
|
||||||
{0x31c9,0x8200},
|
{0x31c9,0x8200},
|
||||||
#ifdef G200
|
#ifdef G200
|
||||||
#ifdef ISG100
|
#ifdef ISG100
|
||||||
|
@ -295,7 +299,15 @@ static std::vector<Vid_pid> DeviceID{
|
||||||
|
|
||||||
#elif defined HANVON
|
#elif defined HANVON
|
||||||
static std::vector<Vid_pid> DeviceID{
|
static std::vector<Vid_pid> DeviceID{
|
||||||
|
#ifdef G200
|
||||||
|
#ifdef ISG100
|
||||||
|
{0x2903,0x8000},
|
||||||
|
#else
|
||||||
|
{0x2903,0x9000},
|
||||||
|
#endif // ISG100
|
||||||
|
#elif defined G400
|
||||||
{0x2903,0x7000},
|
{0x2903,0x7000},
|
||||||
|
#endif // G200
|
||||||
};
|
};
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
@ -387,15 +399,15 @@ HuagaoDs::HuagaoDs()
|
||||||
void HuagaoDs::showmsg(std::string caption, std::string text, int retcode)
|
void HuagaoDs::showmsg(std::string caption, std::string text, int retcode)
|
||||||
{
|
{
|
||||||
if (scanner.get()) {
|
if (scanner.get()) {
|
||||||
//int num = scanner->get_scannum() * (m_scanparam->is_duplex ? 2 : 1) * (m_scanparam->multi_output_red ? 2 : 1) / (m_scanparam->en_fold ? 2 : 1);
|
|
||||||
//int readnum =scanner->get_scannum()* (m_scanparam->is_duplex ? 2 : 1) / (m_scanparam->en_fold ? 2 : 1);
|
int num = scanner->get_imgnReaded() * (m_scanparam->is_duplex ? 2 : 1) * (m_scanparam->multi_output_red ? 2 : 1) / (m_scanparam->en_fold ? 2 : 1) * (m_scanparam->is_split ? 2 : 1);
|
||||||
int num = scanner->get_imgnReaded() * (m_scanparam->is_duplex ? 2 : 1) * (m_scanparam->multi_output_red ? 2 : 1) / (m_scanparam->en_fold ? 2 : 1);
|
|
||||||
int imgread = scanner->get_imgnReaded();
|
int imgread = scanner->get_imgnReaded();
|
||||||
IScanner* ptr = scanner.get();
|
IScanner* ptr = scanner.get();
|
||||||
if (typeid(*ptr) == typeid(GScanO1003399))
|
if (typeid(*ptr) == typeid(GScanO1003399))
|
||||||
{
|
{
|
||||||
//readnum = readnum / 2 * (m_scanparam->en_fold ? 2 : 1);
|
//readnum = readnum / 2 * (m_scanparam->en_fold ? 2 : 1);
|
||||||
num = scanner->get_imgnReaded() * (m_scanparam->multi_output_red ? 2 : 1) / (m_scanparam->en_fold ? 2 : 1);
|
num = scanner->get_imgnReaded() * (m_scanparam->multi_output_red ? 2 : 1) * (m_scanparam->is_split ? 2 : 1);
|
||||||
|
if(!m_scanparam->en_fold)
|
||||||
imgread /= 2;
|
imgread /= 2;
|
||||||
}
|
}
|
||||||
if (!(m_scanparam->is_autodiscradblank_normal || m_scanparam->is_autodiscradblank_vince))
|
if (!(m_scanparam->is_autodiscradblank_normal || m_scanparam->is_autodiscradblank_vince))
|
||||||
|
@ -837,7 +849,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
|
||||||
pid = usb.pid;
|
pid = usb.pid;
|
||||||
if (!scanner.get()) {
|
if (!scanner.get()) {
|
||||||
#ifdef G200
|
#ifdef G200
|
||||||
if (pid == 0x139 || pid == 0x239 || pid == 0x8739 || pid == 0x8629)
|
if (pid == 0x139 || pid == 0x239 || pid == 0x8739 || pid == 0x8629 || pid == 0x130 ||pid == 0x8000 || pid == 0x9000)
|
||||||
scanner.reset(new GScanO1003399());
|
scanner.reset(new GScanO1003399());
|
||||||
else
|
else
|
||||||
scanner.reset(new GScanO200());
|
scanner.reset(new GScanO200());
|
||||||
|
@ -1996,6 +2008,17 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
|
||||||
}
|
}
|
||||||
return CapSupGetAllResetEx<bool, UInt32, (CapType)CapTypeEx::TwEx_CropModel>(msg, data, m_scanparam->normalCrop, false);
|
return CapSupGetAllResetEx<bool, UInt32, (CapType)CapTypeEx::TwEx_CropModel>(msg, data, m_scanparam->normalCrop, false);
|
||||||
};
|
};
|
||||||
|
//图像拆分
|
||||||
|
m_query[(CapType)(CapTypeEx::TwEx_ImageSplit)] = msgSupportGetAllSetReset;
|
||||||
|
m_caps[(CapType)(CapTypeEx::TwEx_ImageSplit)] = [this](Msg msg, Capability& data)->Result {
|
||||||
|
CapabilityPrintf(msg, enum2str(CapTypeEx::TwEx_CropModel), msg == Msg::Set ? to_string((float)data.currentItem<UInt32>()) : "");
|
||||||
|
if (Msg::Set == msg) {
|
||||||
|
auto mech = data.currentItem<Bool>();
|
||||||
|
m_scanparam->is_split = mech;
|
||||||
|
return success();
|
||||||
|
}
|
||||||
|
return CapSupGetAllResetEx<bool, Bool, (CapType)CapTypeEx::TwEx_ImageSplit>(msg, data, m_scanparam->is_split, false);
|
||||||
|
};
|
||||||
#ifdef UV
|
#ifdef UV
|
||||||
m_query[(CapType)(CapTypeEx::TwEx_UVModel)] = msgSupportGetAllSetReset;
|
m_query[(CapType)(CapTypeEx::TwEx_UVModel)] = msgSupportGetAllSetReset;
|
||||||
m_caps[(CapType)(CapTypeEx::TwEx_UVModel)] = [this](Msg msg, Capability& data)->Result {
|
m_caps[(CapType)(CapTypeEx::TwEx_UVModel)] = [this](Msg msg, Capability& data)->Result {
|
||||||
|
@ -2085,7 +2108,7 @@ Result HuagaoDs::pendingXfersEnd(const Identity&, PendingXfers& data) {
|
||||||
{
|
{
|
||||||
if (!(m_scanparam->is_autodiscradblank_normal || m_scanparam->is_autodiscradblank_vince))
|
if (!(m_scanparam->is_autodiscradblank_normal || m_scanparam->is_autodiscradblank_vince))
|
||||||
{
|
{
|
||||||
int num = scanner->get_scannum() * (m_scanparam->is_duplex ? 2 : 1) * (m_scanparam->multi_output_red ? 2 : 1) / (m_scanparam->en_fold ? 2 : 1);
|
int num = scanner->get_scannum() * (m_scanparam->is_duplex ? 2 : 1) * (m_scanparam->multi_output_red ? 2 : 1) / (m_scanparam->en_fold ? 2 : 1) * (m_scanparam->is_split ? 2 : 1);
|
||||||
if ((num - scanner->get_imgTransfered()) != 0)
|
if ((num - scanner->get_imgTransfered()) != 0)
|
||||||
{
|
{
|
||||||
showmsg("Ìáʾ", msgs[LOSE_IMAGE]);
|
showmsg("Ìáʾ", msgs[LOSE_IMAGE]);
|
||||||
|
@ -2097,10 +2120,15 @@ Result HuagaoDs::pendingXfersEnd(const Identity&, PendingXfers& data) {
|
||||||
m_pendingXfers = 0;
|
m_pendingXfers = 0;
|
||||||
if (guiTwain.get()) {
|
if (guiTwain.get()) {
|
||||||
((CTwainUI*)(guiTwain.get()))->EnableID_OKorID_Cancel(true);
|
((CTwainUI*)(guiTwain.get()))->EnableID_OKorID_Cancel(true);
|
||||||
|
//setState(DsState::Enabled);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//setState(DsState::Open);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
m_pendingXfers = 1;
|
m_pendingXfers = 1;
|
||||||
|
//setState( DsState::XferReady );
|
||||||
}
|
}
|
||||||
data.setCount(m_pendingXfers);
|
data.setCount(m_pendingXfers);
|
||||||
return success();
|
return success();
|
||||||
|
@ -2523,7 +2551,8 @@ Twpp::Result HuagaoDs::showTwainUI(Twpp::UserInterface& ui, bool bUiOnly)
|
||||||
TwGlue glueUiOnly = { confirmFunction, cancelFunction };
|
TwGlue glueUiOnly = { confirmFunction, cancelFunction };
|
||||||
std::string serialnum = scanner->GetSerialNum();
|
std::string serialnum = scanner->GetSerialNum();
|
||||||
std::string hardwareversion = scanner->GetFWVersion();
|
std::string hardwareversion = scanner->GetFWVersion();
|
||||||
guiTwain.reset(new CTwainUI(bUiOnly ? glueUiOnly : glue, *m_scanparam, bUiOnly ? "确定" : "扫描", hardwareversion, serialnum));
|
uint32_t mbversion = scanner->GetMotorFPGA();
|
||||||
|
guiTwain.reset(new CTwainUI(bUiOnly ? glueUiOnly : glue, *m_scanparam, bUiOnly ? "确定" : "扫描", hardwareversion, serialnum,mbversion));
|
||||||
guiTwain->Create(IDD_TWAINUI, parent);
|
guiTwain->Create(IDD_TWAINUI, parent);
|
||||||
CRect newRect;
|
CRect newRect;
|
||||||
::GetWindowRect(static_cast<HWND>(ui.parent().raw()), &newRect);
|
::GetWindowRect(static_cast<HWND>(ui.parent().raw()), &newRect);
|
||||||
|
|
Binary file not shown.
Binary file not shown.
BIN
huagao/stdafx.h
BIN
huagao/stdafx.h
Binary file not shown.
|
@ -948,6 +948,7 @@ namespace Twpp {
|
||||||
setState(DsState::XferReady);
|
setState(DsState::XferReady);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
//setState(data.count() ? DsState::XferReady : DsState::Enabled);
|
||||||
setState(data.count() ? DsState::XferReady : DsState::Enabled);
|
setState(data.count() ? DsState::XferReady : DsState::Enabled);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue