3399板子配置适配

This commit is contained in:
lovelyyoung 2021-08-17 09:07:55 +08:00
parent a577af2d56
commit 8109139e24
56 changed files with 685 additions and 902 deletions

3
.gitignore vendored
View File

@ -2,4 +2,5 @@
Debug/*
Release/*
HuaGoCorrect/Debug/*
HuaGoCorrect/Release/*
HuaGoCorrect/Release/*
HuaGoCorrect/ScanPicture/*

View File

@ -6,4 +6,10 @@
5CIS的通道阀值以及畸变检测中目标值偏差值等参数自动加载和保存
2021年7月31日
1.增加3399 板子g100 g200 校正及配置功能
1.增加3399 板子g100 g200 校正及配置功能
2021年8月17日
1. 界面增加速度模式配置功能;
2. 增加明场暗场校正最大明场值配置;
3. 界面UI按钮顺序调整对齐等操作
V4.2版本

View File

@ -1,31 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28307.960
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HuaGoCorrect_V3.0", "HuaGoCorrect\HuaGoCorrect.vcxproj", "{988CC4D3-44EC-4A9D-AC05-B2AF0EA48E75}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
Release|Win32 = Release|Win32
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{988CC4D3-44EC-4A9D-AC05-B2AF0EA48E75}.Debug|Win32.ActiveCfg = Debug|Win32
{988CC4D3-44EC-4A9D-AC05-B2AF0EA48E75}.Debug|Win32.Build.0 = Debug|Win32
{988CC4D3-44EC-4A9D-AC05-B2AF0EA48E75}.Debug|x64.ActiveCfg = Debug|x64
{988CC4D3-44EC-4A9D-AC05-B2AF0EA48E75}.Debug|x64.Build.0 = Debug|x64
{988CC4D3-44EC-4A9D-AC05-B2AF0EA48E75}.Release|Win32.ActiveCfg = Release|Win32
{988CC4D3-44EC-4A9D-AC05-B2AF0EA48E75}.Release|Win32.Build.0 = Release|Win32
{988CC4D3-44EC-4A9D-AC05-B2AF0EA48E75}.Release|x64.ActiveCfg = Release|x64
{988CC4D3-44EC-4A9D-AC05-B2AF0EA48E75}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8B23184A-7ABD-4E4F-B3EC-DFE00243E802}
EndGlobalSection
EndGlobal

Binary file not shown.

View File

@ -25,6 +25,7 @@ CA3::~CA3()
void CA3::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_CMBSPEEDMODE, m_cmbSpeedmode);
}
@ -37,6 +38,13 @@ BEGIN_MESSAGE_MAP(CA3, CDialog)
ON_BN_CLICKED(IDC_BTNSETCOLORSP, &CA3::OnBnClickedBtnsetcolorsp)
ON_BN_CLICKED(IDC_BTNGETSLEEPTIME, &CA3::OnBnClickedBtngetsleeptime)
ON_BN_CLICKED(IDC_BTNSETSLEEPTIME, &CA3::OnBnClickedBtnsetsleeptime)
ON_BN_CLICKED(IDC_BTNSETCLRMAXBRT, &CA3::OnBnClickedBtnsetclrmaxbrt)
ON_BN_CLICKED(IDC_BTNSETGRYMAXBRT, &CA3::OnBnClickedBtnsetgrymaxbrt)
ON_BN_CLICKED(IDC_BTNGETCLRMAXBRT, &CA3::OnBnClickedBtngetclrmaxbrt)
ON_BN_CLICKED(IDC_BTNGETGRYMAXBRT, &CA3::OnBnClickedBtngetgrymaxbrt)
ON_BN_CLICKED(IDC_BTNGETVERSION, &CA3::OnBnClickedBtngetversion)
ON_BN_CLICKED(IDC_BTNSETSPEED, &CA3::OnBnClickedBtnsetspeed)
ON_BN_CLICKED(IDC_BTNGETSPEED, &CA3::OnBnClickedBtngetspeed)
END_MESSAGE_MAP()
@ -48,7 +56,10 @@ BOOL CA3::OnInitDialog()
CDialog::OnInitDialog();
// TODO: 在此添加额外的初始化
for (size_t i = 0; i < speedmodeMap.size(); i++)
{
m_cmbSpeedmode.InsertString(i, speedmodeMapString[i]);
}
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
@ -106,24 +117,28 @@ void CA3::OnBnClickedBtnsetcolorsp()
}
void CA3::OnGetOrSetSp(bool get,int type)
void CA3::OnGetOrSetSp(bool get, int type)
{
int sp;
CString str_sp;
auto parent = (CHuaGoCorrectDlg*)GetParent();
int itemid = type == 0 ? IDC_LBGRAYSP : (type == 1 ? IDC_LBCOLORSP : IDC_LBGUVSP); //IDC_LBCOLORSP
if (get)
{
if (parent->m_drv.get() && parent->m_drv->IsConnected()) {
if (get)
{
parent->m_drv->GetSptime(type, sp);
str_sp.Format("%d", sp);
SetDlgItemText(itemid, str_sp);
}
else
{
GetDlgItemText(itemid, str_sp);
int value= atoi(str_sp);
parent->m_drv->SetSptime(type, value);
parent->m_drv->GetSptime(type, sp);
str_sp.Format(L"%d", sp);
SetDlgItemText(itemid, str_sp);
}
else
{
GetDlgItemText(itemid, str_sp);
USES_CONVERSION;
std::string str(W2A(str_sp));
int value = atoi(str.c_str());
parent->m_drv->SetSptime(type, value);
}
}
}
@ -134,18 +149,48 @@ void CA3::OnGetOrSetSleepTime(bool get, int type)
CString str_sp;
auto parent = (CHuaGoCorrectDlg*)GetParent();
int itemid = type == 0 ? IDC_LBGRAYSP : (type == 1 ? IDC_LBCOLORSP : IDC_LBGUVSP); //IDC_LBCOLORSP
if (get)
{
if (parent->m_drv.get() && parent->m_drv->IsConnected()) {
if (get)
{
parent->m_drv->GetSptime(type, sp);
str_sp.Format("%d", sp);
SetDlgItemText(itemid, str_sp);
parent->m_drv->GetSptime(type, sp);
str_sp.Format(L"%d", sp);
SetDlgItemText(itemid, str_sp);
}
else
{
GetDlgItemText(itemid, str_sp);
USES_CONVERSION;
std::string str(W2A(str_sp));
int value = atoi(str.c_str());
parent->m_drv->SetSptime(type, value);
}
}
else
{
GetDlgItemText(itemid, str_sp);
int value = atoi(str_sp);
parent->m_drv->SetSptime(type, value);
}
void CA3::UpdateMaxBright(bool get, int id)
{
int sp;
CString str_sp;
auto parent = (CHuaGoCorrectDlg*)GetParent();
if (parent->m_drv.get() && parent->m_drv->IsConnected()) {
if (get)
{
unsigned int val = 0;
parent->m_drv->GetFlatMaxBright(id == IDC_LBCLRMAXBRT, val);
str_sp.Format(L"%d", val);
SetDlgItemText(id, str_sp);
}
else
{
GetDlgItemText(id, str_sp);
USES_CONVERSION;
std::string str(W2A(str_sp));
int value = atoi(str.c_str());
if (value <= 0) value = 180;
parent->m_drv->SetFlatMaxBright(id == IDC_LBCLRMAXBRT, value);
}
}
}
@ -154,18 +199,22 @@ void CA3::UpdateSleepTime(bool get)
int sp;
CString str_sp;
auto parent = (CHuaGoCorrectDlg*)GetParent();
if (get)
{
parent->m_drv->GetSleepTime(sp);
str_sp.Format("%d", sp);
SetDlgItemText(IDC_LBSLEEPTIME, str_sp);
}
else
{
GetDlgItemText(IDC_LBSLEEPTIME, str_sp);
int value = atoi(str_sp);
if (value <= 0) value = 60;
parent->m_drv->SetSleepTime(value);
if (parent->m_drv.get() && parent->m_drv->IsConnected()) {
if (get)
{
parent->m_drv->GetSleepTime(sp);
str_sp.Format(L"%d", sp);
SetDlgItemText(IDC_LBSLEEPTIME, str_sp);
}
else
{
GetDlgItemText(IDC_LBSLEEPTIME, str_sp);
USES_CONVERSION;
std::string str(W2A(str_sp));
int value = atoi(str.c_str());
if (value <= 0) value = 60;
parent->m_drv->SetSleepTime(value);
}
}
}
@ -178,4 +227,102 @@ void CA3::OnBnClickedBtngetsleeptime()
void CA3::OnBnClickedBtnsetsleeptime()
{
UpdateSleepTime(false);
}
void CA3::OnBnClickedBtnsetclrmaxbrt()
{
UpdateMaxBright(false, IDC_LBCLRMAXBRT);
}
void CA3::OnBnClickedBtnsetgrymaxbrt()
{
// TODO: 在此添加控件通知处理程序代码
UpdateMaxBright(false, IDC_LBGRYMAXBRT);
}
void CA3::OnBnClickedBtngetclrmaxbrt()
{
// TODO: 在此添加控件通知处理程序代码
UpdateMaxBright(true, IDC_LBCLRMAXBRT);
}
void CA3::OnBnClickedBtngetgrymaxbrt()
{
// TODO: 在此添加控件通知处理程序代码
UpdateMaxBright(true, IDC_LBGRYMAXBRT);
}
void CA3::OnBnClickedBtngetversion()
{
auto parent = (CHuaGoCorrectDlg*)GetParent();
if (parent != NULL)
{
if (parent->m_drv.get() && parent->m_drv->IsConnected()) {
auto kversion = parent->m_drv->GetKernelVersion();
CString version(kversion.c_str());
SetDlgItemText(IDC_LBKERNEL_VERSION, version);
}
}
}
void CA3::OnBnClickedBtnsetspeed()
{
// TODO: 在此添加控件通知处理程序代码
updatespeedmode(false);
}
void CA3::OnBnClickedBtngetspeed()
{
// TODO: 在此添加控件通知处理程序代码
updatespeedmode(true);
}
void CA3::updatespeedmode(bool get)
{
auto parent = (CHuaGoCorrectDlg*)GetParent();
if (parent != NULL)
{
if (parent->m_drv.get() && parent->m_drv->IsConnected()) {
int speedmode;
if (get)
{
parent->m_drv->GetSpeedMode(speedmode, true);
bool bfound = false;
for (size_t i = 0; i < speedmodeMap.size(); i++)
{
if (speedmodeMap[i].Speedmode == speedmode)
{
m_cmbSpeedmode.SetCurSel(i);
OnGetOrSetSp(true, 0);//更新灰度sp
OnGetOrSetSp(true, 1);//更新彩色sp
bfound = true;
break;
}
}
if (!bfound)
MessageBox(L"未找到对应的速度模式!", L"提示", MB_OK | MB_ICONINFORMATION);
}
else
{
int cmbindex = m_cmbSpeedmode.GetCurSel();
if (cmbindex != -1)
{
auto t_speedmode = speedmodeMap[cmbindex];
parent->m_drv->GetSpeedMode(t_speedmode.Speedmode, false);
parent->m_drv->SetSptime(0, t_speedmode.GraySp);
parent->m_drv->SetSptime(1, t_speedmode.ColorSp);
}
}
}
else
{
MessageBox(L"未找到扫描仪!", L"提示", MB_OK | MB_ICONINFORMATION);
}
}
}

View File

@ -1,5 +1,5 @@
#pragma once
#include <map>
// CA3 对话框
@ -32,11 +32,43 @@ public:
private:
void OnGetOrSetSp(bool get, int type);
public:
afx_msg
void OnGetOrSetSleepTime(bool get, int type);
afx_msg void OnGetOrSetSleepTime(bool get, int type);
void UpdateMaxBright(bool get,int id);
void UpdateSleepTime(bool get);
void OnBnClickedBtngetsleeptime();
afx_msg void OnBnClickedBtnsetsleeptime();
afx_msg void OnBnClickedBtngetcolorsp2();
afx_msg void OnBnClickedBtnsetcolorsp2();
afx_msg void OnBnClickedBtnsetclrmaxbrt();
afx_msg void OnBnClickedBtnsetgrymaxbrt();
afx_msg void OnBnClickedBtngetclrmaxbrt();
afx_msg void OnBnClickedBtngetgrymaxbrt();
afx_msg void OnBnClickedBtngetversion();
afx_msg void OnBnClickedBtnsetspeed();
afx_msg void OnBnClickedBtngetspeed();
void updatespeedmode(bool get);
private:
struct speedmodeparam {
int Speedmode;
unsigned int ColorSp;
unsigned int GraySp;
};
std::map<int, speedmodeparam> speedmodeMap = {
{0,{70,0x437,0xca7}},
{1,{80,0x388,0xa98}},
{2,{90,0x30a,0x91f}},
{3,{100,0x280,0x781}},
{4,{110,0x280,0x781}},
{5,{120,0x280,0x781}},
{6,{130,0x280,0x781}}
};
std::map<int, CString> speedmodeMapString = {
{0,L"G100_70PPM"},
{1,L"G100_80PPM"},
{2,L"G100_90PPM"},
{3,L"G200_100PPM"},
{4,L"G200_110PPM"},
{5,L"G200_120PPM"},
{6,L"G200_130PPM"}
};
CComboBox m_cmbSpeedmode;
};

View File

@ -118,14 +118,16 @@ void CA4::SendCorrectParam()
UpdateData();
int index = m_A4FlatModel.GetCurSel();
auto parent = (CHuaGoCorrectDlg*)GetParent();
parent->m_drv->SendFlatData(params, index);
if (parent->m_drv.get() && parent->m_drv->IsConnected()) {
parent->m_drv->SendFlatData(params, index);
}
}
void CA4::OnCbnSelChangeA4FlatModel()
{
auto parent = (CHuaGoCorrectDlg*)GetParent();
if (parent->m_drv->IsConnected())
if (parent->m_drv.get()&&parent->m_drv->IsConnected())
{
auto correctdata = parent->m_drv->GetFlatData();
updateA4Config(correctdata);
@ -179,7 +181,9 @@ void CA4::LoadCfg()
void CA4::OnBnClickedBtnReboot()
{
auto parent = (CHuaGoCorrectDlg*)GetParent();
parent->m_drv->Reboot();
if (parent->m_drv.get() && parent->m_drv->IsConnected()) {
parent->m_drv->Reboot();
}
}
/// <summary>
@ -203,9 +207,11 @@ void CA4::OnBnClickedBtnGetvidpid()
void CA4::OnBnClickedBtngetSerial()
{
auto parent = (CHuaGoCorrectDlg*)GetParent();
std::string serial= parent->m_drv->GetSerialNum();
CString c_serial(serial.c_str());
SetDlgItemText(IDC_tbxSerial, c_serial);
if (parent->m_drv.get() && parent->m_drv->IsConnected()) {
std::string serial = parent->m_drv->GetSerialNum();
CString c_serial(serial.c_str());
SetDlgItemText(IDC_tbxSerial, c_serial);
}
}
/// <summary>
@ -224,10 +230,13 @@ void CA4::OnBnClickedBtnSetSerial()
auto parent = (CHuaGoCorrectDlg*)GetParent();
CString cserial;
GetDlgItemText(IDC_tbxSerial, cserial);
if (!cserial.IsEmpty())
{
std::string ser(cserial.GetBuffer());
parent->m_drv->SetSerialNum(ser);
if (parent->m_drv.get() && parent->m_drv->IsConnected()) {
if (!cserial.IsEmpty())
{
USES_CONVERSION;
std::string str(W2A(cserial));
parent->m_drv->SetSerialNum(str);
}
}
}
@ -236,11 +245,13 @@ void CA4::OnBnClickedBtnGethor()
{
auto parent = (CHuaGoCorrectDlg*)GetParent();
int ratio = 0;
parent->m_drv->GetRatio(0, ratio);
float f_ratio = *(float*)&ratio;
CString str;
str.Format("%.4f", f_ratio);
SetDlgItemText(IDC_tbxHOR, str);
if (parent->m_drv.get() && parent->m_drv->IsConnected()) {
parent->m_drv->GetRatio(0, ratio);
float f_ratio = *(float*)&ratio;
CString str;
str.Format(L"%.4f", f_ratio);
SetDlgItemText(IDC_tbxHOR, str);
}
}
@ -248,44 +259,56 @@ void CA4::OnBnClickedBtnGetver()
{
auto parent = (CHuaGoCorrectDlg*)GetParent();
int ratio = 0;
parent->m_drv->GetRatio(1, ratio);
float f_ratio = *(float*)&ratio;
CString str;
str.Format("%.4f", f_ratio);
SetDlgItemText(IDC_tbxVER, str);
if (parent->m_drv.get() && parent->m_drv->IsConnected()) {
parent->m_drv->GetRatio(1, ratio);
float f_ratio = *(float*)&ratio;
CString str;
str.Format(L"%.4f", f_ratio);
SetDlgItemText(IDC_tbxVER, str);
}
}
void CA4::OnBnClickedBtnSethor()
{
auto parent = (CHuaGoCorrectDlg*)GetParent();
CString str;
GetDlgItemText(IDC_tbxHOR, str);
float f_value = atof(str);
int value = *(int*)&f_value;
parent->m_drv->SetRatio(0, value);
if (parent->m_drv.get() && parent->m_drv->IsConnected()) {
CString str;
GetDlgItemText(IDC_tbxHOR, str);
USES_CONVERSION;
std::string s_str(W2A(str));
float f_value = atof(s_str.c_str());
int value = *(int*)&f_value;
parent->m_drv->SetRatio(0, value);
}
}
void CA4::OnBnClickedBtnSetver()
{
auto parent = (CHuaGoCorrectDlg*)GetParent();
CString str;
GetDlgItemText(IDC_tbxVER, str);
float f_value = atof(str);
int value = *(int*)&f_value;
parent->m_drv->SetRatio(1, value);
if (parent->m_drv.get() && parent->m_drv->IsConnected()) {
CString str;
GetDlgItemText(IDC_tbxVER, str);
USES_CONVERSION;
std::string s_str(W2A(str));
float f_value = atof(s_str.c_str());
int value = *(int*)&f_value;
parent->m_drv->SetRatio(1, value);
}
}
void CA4::OnBnClickedBtngetVersion()
{
auto parent = (CHuaGoCorrectDlg*)GetParent();
std::string ver = parent->m_drv->GetFWVersion();
if (ver.size() > 0)
{
CString str(ver.c_str());
SetDlgItemText(IDC_tbxVersion, str);
if (parent->m_drv.get() && parent->m_drv->IsConnected()) {
std::string ver = parent->m_drv->GetFWVersion();
if (ver.size() > 0)
{
CString str(ver.c_str());
SetDlgItemText(IDC_tbxVersion, str);
}
}
}
@ -315,14 +338,15 @@ void CA4::OnBnClickedBtnGetexpos()
{
// TODO: 在此添加控件通知处理程序代码
auto parent = (CHuaGoCorrectDlg*)GetParent();
int esposeA, exposeB;
parent->m_drv->GetExpose(esposeA,exposeB);
CString expA, expB;
expA.Format("%d", esposeA);
expB.Format("%d", exposeB);
SetDlgItemText(IDC_tbxUVAExpos, expA);
SetDlgItemText(IDC_tbxUVBExpos, expB);
if (parent->m_drv.get() && parent->m_drv->IsConnected()) {
int esposeA, exposeB;
parent->m_drv->GetExpose(esposeA, exposeB);
CString expA, expB;
expA.Format(L"%d", esposeA);
expB.Format(L"%d", exposeB);
SetDlgItemText(IDC_tbxUVAExpos, expA);
SetDlgItemText(IDC_tbxUVBExpos, expB);
}
}
@ -334,9 +358,14 @@ void CA4::OnBnClickedBtnSetexpos()
CString expA, expB;
GetDlgItemText(IDC_tbxUVAExpos, expA);
GetDlgItemText(IDC_tbxUVBExpos, expB);
esposeA= atoi(expA);
exposeB = atoi(expB);
parent->m_drv->SetExpose(esposeA, exposeB);
USES_CONVERSION;
std::string str_a(W2A(expA));
std::string str_b(W2A(expB));
esposeA= atoi(str_a.c_str());
exposeB = atoi(str_b.c_str());
if (parent->m_drv.get() && parent->m_drv->IsConnected()) {
parent->m_drv->SetExpose(esposeA, exposeB);
}
}
@ -383,9 +412,19 @@ void CA4::UpdateGains(int id, bool increase)
{
int startindex = id == IDC_BTNADOWN ? 0 : 6;
for (size_t i = startindex; i < (6 + startindex); i++)
{
{
params.Gain[i] = params.Gain[i]--;
}
}
UpdateData(FALSE);
}
}
void CA4::OnEnChangetbxfrexposure2()
{
// TODO: 如果该控件是 RICHEDIT 控件,它将不
// 发送此通知,除非重写 CDialog::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask()
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
}

View File

@ -74,4 +74,5 @@ public:
afx_msg void OnBnClickedBtnbup();
afx_msg void OnBnClickedBtnbdown();
void UpdateGains(int id, bool get);
afx_msg void OnEnChangetbxfrexposure2();
};

View File

@ -177,12 +177,17 @@ void CVISON::showfun()
auto ret = ((CHuaGoCorrectDlg*)parent)->m_drv->aquire_image(path, 0);
if (ret != -1)
{
imageindex++;
aquiredimgindx++;
CString cPath(path.c_str());
m_path.push_back(cPath);
m_onStop(false, aquiredimgindx);
DrawPicture(cPath);
if (path.length() > 0) {
imageindex++;
aquiredimgindx++;
USES_CONVERSION;
std::string t_path = StringToUtf(path);
CString cPath(A2T(t_path.c_str()));
m_path.push_back(cPath);
m_onStop(false, aquiredimgindx);
DrawPicture(cPath);
}
}
else
{

View File

@ -1,40 +0,0 @@
// Config.cpp: implementation of the CConfig class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Config.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CConfig::CConfig()
{
}
CConfig::~CConfig()
{
}
void CConfig::GetTextInfo(CString strKeyName, CString &strText)
{
char cParam[256];
::GetPrivateProfileString("TextInfo", strKeyName, "", cParam, 255, INI_FILE_NAME);
strText = cParam;
}
void CConfig::LoadCfg()
{
UINT iParam[30] = {0};
iParam[0] = ::GetPrivateProfileInt("ColorCorrection", "FRExposure ", 340, INI_FILE_NAME);
}

View File

@ -1,42 +0,0 @@
// Config.h: interface for the CConfig class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_CONFIG_H__9AA09B6E_5336_4EBA_BF73_3B1389D6FAF0__INCLUDED_)
#define AFX_CONFIG_H__9AA09B6E_5336_4EBA_BF73_3B1389D6FAF0__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define INI_FILE_NAME "./HuaGoScan.ini"
class CConfig
{
public:
CConfig();
virtual ~CConfig();
void LoadCfg();
void GetTextInfo(CString strKeyName, CString &strText);
DWORD GetPort()
{
return m_dwLocalPort;
}
const char *GetTitle()
{
return m_strTitle;
}
const char* GetSQLIP()
{
return m_strSQLIP;
}
private:
CString m_strTitle; // 主界面上显示的标题
CString m_strSQLIP;
DWORD m_dwLocalPort; // 开启的端口号
};
#endif // !defined(AFX_CONFIG_H__9AA09B6E_5336_4EBA_BF73_3B1389D6FAF0__INCLUDED_)

View File

@ -1,220 +0,0 @@
// ConfigParam.cpp : 实现文件
//
#include "stdafx.h"
#include "HuaGoCorrect.h"
#include "ConfigParam.h"
#include "afxdialogex.h"
// CConfigParam 对话框
IMPLEMENT_DYNAMIC(CConfigParam, CDialog)
CConfigParam::CConfigParam(CWnd* pParent /*=NULL*/)
: CDialog(CConfigParam::IDD, pParent)
, m_AMaxStep(0)
, m_AMinStep(0)
, m_BMaxStep(0)
, m_BMinStep(0)
, m_AERMaxStep(0)
, m_AERMinStep(0)
, m_AEGMaxStep(0)
, m_AEGMinStep(0)
, m_AEBMaxStep(0)
, m_AEBMinStep(0)
, m_BERMaxStep(0)
, m_BERMinStep(0)
, m_BEGMaxStep(0)
, m_BEGMinStep(0)
, m_BEBMaxStep(0)
, m_BEBMinStep(0)
, m_GainStep(0)
{
}
CConfigParam::~CConfigParam()
{
}
void CConfigParam::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_AMaxStep, m_AMaxStep);
DDV_MinMaxUInt(pDX, m_AMaxStep, 0, 255);
DDX_Text(pDX, IDC_AMinStep, m_AMinStep);
DDV_MinMaxUInt(pDX, m_AMinStep, 0, 255);
DDX_Text(pDX, IDC_BMaxStep, m_BMaxStep);
DDV_MinMaxUInt(pDX, m_BMaxStep, 0, 255);
DDX_Text(pDX, IDC_BMinStep, m_BMinStep);
DDV_MinMaxUInt(pDX, m_BMinStep, 0, 255);
DDX_Text(pDX, IDC_AERMaxStep, m_AERMaxStep);
DDV_MinMaxUInt(pDX, m_AERMaxStep, 0, 1000);
DDX_Text(pDX, IDC_AERMinStep, m_AERMinStep);
DDV_MinMaxUInt(pDX, m_AERMinStep, 0, 1000);
DDX_Text(pDX, IDC_AEGMaxStep, m_AEGMaxStep);
DDV_MinMaxUInt(pDX, m_AEGMaxStep, 0, 1000);
DDX_Text(pDX, IDC_AEGMinStep, m_AEGMinStep);
DDV_MinMaxUInt(pDX, m_AEGMinStep, 0, 1000);
DDX_Text(pDX, IDC_AEBMaxStep, m_AEBMaxStep);
DDV_MinMaxUInt(pDX, m_AEBMaxStep, 0, 1000);
DDX_Text(pDX, IDC_AEBMinStep, m_AEBMinStep);
DDV_MinMaxUInt(pDX, m_AEBMinStep, 0, 1000);
DDX_Text(pDX, IDC_BERMaxStep, m_BERMaxStep);
DDV_MinMaxUInt(pDX, m_BERMaxStep, 0, 1000);
DDX_Text(pDX, IDC_BERMinStep, m_BERMinStep);
DDV_MinMaxUInt(pDX, m_BERMinStep, 0, 1000);
DDX_Text(pDX, IDC_BEGMaxStep, m_BEGMaxStep);
DDV_MinMaxUInt(pDX, m_BEGMaxStep, 0, 1000);
DDX_Text(pDX, IDC_BEGMinStep, m_BEGMinStep);
DDV_MinMaxUInt(pDX, m_BEGMinStep, 0, 1000);
DDX_Text(pDX, IDC_BEBMaxStep, m_BEBMaxStep);
DDV_MinMaxUInt(pDX, m_BEBMaxStep, 0, 1000);
DDX_Text(pDX, IDC_BEBMinStep, m_BEBMinStep);
DDV_MinMaxUInt(pDX, m_BEBMinStep, 0, 1000);
DDX_Text(pDX, IDC_GainStep, m_GainStep);
DDV_MinMaxUInt(pDX, m_GainStep, 0, 1000);
}
BEGIN_MESSAGE_MAP(CConfigParam, CDialog)
ON_BN_CLICKED(IDC_BTN_SAVECFG, &CConfigParam::OnBtnSaveCFG)
END_MESSAGE_MAP()
// CConfigParam 消息处理程序
BOOL CConfigParam::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 在此添加额外的初始化
LoadConfig();
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
void CConfigParam::LoadConfig()
{
UpdateData(TRUE);
m_AMaxStep = ::GetPrivateProfileInt("GrayBlack", "AGMaxStep", 255, INI_FILE_NAME);
m_AMinStep = ::GetPrivateProfileInt("GrayBlack", "AGMinStep", 0, INI_FILE_NAME);
m_BMaxStep = ::GetPrivateProfileInt("GrayBlack", "BGMaxStep", 255, INI_FILE_NAME);
m_BMinStep = ::GetPrivateProfileInt("GrayBlack", "BGMinStep", 0, INI_FILE_NAME);
m_AERMaxStep = ::GetPrivateProfileInt("ColorWhite", "ACRMaxStep", 900, INI_FILE_NAME);
m_AERMinStep = ::GetPrivateProfileInt("ColorWhite", "ACRMinStep", 0, INI_FILE_NAME);
m_AEGMaxStep = ::GetPrivateProfileInt("ColorWhite", "ACGMaxStep", 900, INI_FILE_NAME);
m_AEGMinStep = ::GetPrivateProfileInt("ColorWhite", "ACGMinStep", 0, INI_FILE_NAME);
m_AEBMaxStep = ::GetPrivateProfileInt("ColorWhite", "ACBMaxStep", 900, INI_FILE_NAME);
m_AEBMinStep = ::GetPrivateProfileInt("ColorWhite", "ACBMinStep", 0, INI_FILE_NAME);
m_BERMaxStep = ::GetPrivateProfileInt("ColorWhite", "BCRMaxStep", 900, INI_FILE_NAME);
m_BERMinStep = ::GetPrivateProfileInt("ColorWhite", "BCRMinStep", 0, INI_FILE_NAME);
m_BEGMaxStep = ::GetPrivateProfileInt("ColorWhite", "BCGMaxStep", 900, INI_FILE_NAME);
m_BEGMinStep = ::GetPrivateProfileInt("ColorWhite", "BCGMinStep", 0, INI_FILE_NAME);
m_BEBMaxStep = ::GetPrivateProfileInt("ColorWhite", "BCBMaxStep", 900, INI_FILE_NAME);
m_BEBMinStep = ::GetPrivateProfileInt("ColorWhite", "BCBMinStep", 0, INI_FILE_NAME);
m_GainStep = ::GetPrivateProfileInt("GainStep", "ABGainStep", 24, INI_FILE_NAME);
UpdateData(FALSE);
}
void CConfigParam::OnBtnSaveCFG()
{
// TODO: 在此添加控件通知处理程序代码
SaveParam();
OnOK();
}
void CConfigParam::SaveParam()
{
UpdateData(TRUE);
CString csAMaxStep,csAMinStep,csBMaxStep,csBMinStep,csABGainStep;
CString csAERMaxStep,csAERMinStep,csAEGMaxStep,csAEGMinStep,csAEBMaxStep,csAEBMinStep;
CString csBERMaxStep,csBERMinStep,csBEGMaxStep,csBEGMinStep,csBEBMaxStep,csBEBMinStep;
csAMaxStep.Format(_T("%d"),m_AMaxStep);
csAMinStep.Format(_T("%d"),m_AMinStep);
csBMaxStep.Format(_T("%d"),m_BMaxStep);
csBMinStep.Format(_T("%d"),m_BMinStep);
csAERMaxStep.Format(_T("%d"),m_AERMaxStep);
csAERMinStep.Format(_T("%d"),m_AERMinStep);
csAEGMaxStep.Format(_T("%d"),m_AEGMaxStep);
csAEGMinStep.Format(_T("%d"),m_AEGMinStep);
csAEBMaxStep.Format(_T("%d"),m_AEBMaxStep);
csAEBMinStep.Format(_T("%d"),m_AEBMinStep);
csBERMaxStep.Format(_T("%d"),m_BERMaxStep);
csBERMinStep.Format(_T("%d"),m_BERMinStep);
csBEGMaxStep.Format(_T("%d"),m_BEGMaxStep);
csBEGMinStep.Format(_T("%d"),m_BEGMinStep);
csBEBMaxStep.Format(_T("%d"),m_BEBMaxStep);
csBEBMinStep.Format(_T("%d"),m_BEBMinStep);
csABGainStep.Format(_T("%d"),m_GainStep);
UpdateData(FALSE);
WritePrivateProfileString("GrayBlack", "AGMaxStep", csAMaxStep, INI_FILE_NAME);
WritePrivateProfileString("GrayBlack", "AGMinStep", csAMinStep, INI_FILE_NAME);
WritePrivateProfileString("ColorCorrection", "F1Offset", csAMaxStep, INI_FILE_NAME);
WritePrivateProfileString("ColorCorrection", "F2Offset", csAMaxStep, INI_FILE_NAME);
WritePrivateProfileString("ColorCorrection", "F3Offset", csAMaxStep, INI_FILE_NAME);
WritePrivateProfileString("ColorCorrection", "F4Offset", csAMaxStep, INI_FILE_NAME);
WritePrivateProfileString("ColorCorrection", "F5Offset", csAMaxStep, INI_FILE_NAME);
WritePrivateProfileString("ColorCorrection", "F6Offset", csAMaxStep, INI_FILE_NAME);
WritePrivateProfileString("GrayCorrection", "F1Offset", csAMaxStep, INI_FILE_NAME);
WritePrivateProfileString("GrayCorrection", "F2Offset", csAMaxStep, INI_FILE_NAME);
WritePrivateProfileString("GrayCorrection", "F3Offset", csAMaxStep, INI_FILE_NAME);
WritePrivateProfileString("GrayCorrection", "F4Offset", csAMaxStep, INI_FILE_NAME);
WritePrivateProfileString("GrayCorrection", "F5Offset", csAMaxStep, INI_FILE_NAME);
WritePrivateProfileString("GrayCorrection", "F6Offset", csAMaxStep, INI_FILE_NAME);
WritePrivateProfileString("GrayBlack", "BGMaxStep", csBMaxStep, INI_FILE_NAME);
WritePrivateProfileString("GrayBlack", "BGMinStep", csBMinStep, INI_FILE_NAME);
WritePrivateProfileString("ColorCorrection", "B1Offset", csBMaxStep, INI_FILE_NAME);
WritePrivateProfileString("ColorCorrection", "B2Offset", csBMaxStep, INI_FILE_NAME);
WritePrivateProfileString("ColorCorrection", "B3Offset", csBMaxStep, INI_FILE_NAME);
WritePrivateProfileString("ColorCorrection", "B4Offset", csBMaxStep, INI_FILE_NAME);
WritePrivateProfileString("ColorCorrection", "B5Offset", csBMaxStep, INI_FILE_NAME);
WritePrivateProfileString("ColorCorrection", "B6Offset", csBMaxStep, INI_FILE_NAME);
WritePrivateProfileString("GrayCorrection", "B1Offset", csBMaxStep, INI_FILE_NAME);
WritePrivateProfileString("GrayCorrection", "B2Offset", csBMaxStep, INI_FILE_NAME);
WritePrivateProfileString("GrayCorrection", "B3Offset", csBMaxStep, INI_FILE_NAME);
WritePrivateProfileString("GrayCorrection", "B4Offset", csBMaxStep, INI_FILE_NAME);
WritePrivateProfileString("GrayCorrection", "B5Offset", csBMaxStep, INI_FILE_NAME);
WritePrivateProfileString("GrayCorrection", "B6Offset", csBMaxStep, INI_FILE_NAME);
WritePrivateProfileString("ColorWhite", "ACRMaxStep", csAERMaxStep, INI_FILE_NAME);
WritePrivateProfileString("ColorWhite", "ACRMinStep", csAERMinStep, INI_FILE_NAME);
WritePrivateProfileString("ColorCorrection", "FRExposure", csAERMaxStep, INI_FILE_NAME);
WritePrivateProfileString("ColorWhite", "ACGMaxStep", csAEGMaxStep, INI_FILE_NAME);
WritePrivateProfileString("ColorWhite", "ACGMinStep", csAEGMinStep, INI_FILE_NAME);
WritePrivateProfileString("ColorCorrection", "FGExposure", csAEGMaxStep, INI_FILE_NAME);
WritePrivateProfileString("ColorWhite", "ACBMaxStep", csAEBMaxStep, INI_FILE_NAME);
WritePrivateProfileString("ColorWhite", "ACBMinStep", csAEBMinStep, INI_FILE_NAME);
WritePrivateProfileString("ColorCorrection", "FBExposure", csAEBMaxStep, INI_FILE_NAME);
WritePrivateProfileString("ColorWhite", "BCRMaxStep", csBERMaxStep, INI_FILE_NAME);
WritePrivateProfileString("ColorWhite", "BCRMinStep", csBERMinStep, INI_FILE_NAME);
WritePrivateProfileString("ColorCorrection", "BRExposure", csBERMaxStep, INI_FILE_NAME);
WritePrivateProfileString("ColorWhite", "BCGMaxStep", csBEGMaxStep, INI_FILE_NAME);
WritePrivateProfileString("ColorWhite", "BCGMinStep", csBEGMinStep, INI_FILE_NAME);
WritePrivateProfileString("ColorCorrection", "BGExposure", csBEGMaxStep, INI_FILE_NAME);
WritePrivateProfileString("ColorWhite", "BCBMaxStep", csBEBMaxStep, INI_FILE_NAME);
WritePrivateProfileString("ColorWhite", "BCBMinStep", csBEBMinStep, INI_FILE_NAME);
WritePrivateProfileString("ColorCorrection", "BBExposure", csBEBMaxStep, INI_FILE_NAME);
WritePrivateProfileString("GainStep", "ABGainStep", csABGainStep, INI_FILE_NAME);
MessageBox(_T("配置完成"));
}
void CConfigParam::OnOK()
{
// TODO: 在此添加专用代码和/或调用基类
CDialog::OnOK();
}

View File

@ -1,45 +0,0 @@
#pragma once
#include "Config.h"
// CConfigParam 对话框
class CConfigParam : public CDialog
{
DECLARE_DYNAMIC(CConfigParam)
public:
CConfigParam(CWnd* pParent = NULL); // 标准构造函数
virtual ~CConfigParam();
// 对话框数据
enum { IDD = IDD_DIALOG_CONFIGPARAM };
void LoadConfig();
void SaveParam();
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
public:
virtual BOOL OnInitDialog();
UINT m_AMaxStep;
UINT m_AMinStep;
UINT m_BMaxStep;
UINT m_BMinStep;
UINT m_AERMaxStep;
UINT m_AERMinStep;
UINT m_AEGMaxStep;
UINT m_AEGMinStep;
UINT m_AEBMaxStep;
UINT m_AEBMinStep;
UINT m_BERMaxStep;
UINT m_BERMinStep;
UINT m_BEGMaxStep;
UINT m_BEGMinStep;
UINT m_BEBMaxStep;
UINT m_BEBMinStep;
UINT m_GainStep;
afx_msg void OnBtnSaveCFG();
virtual void OnOK();
};

Binary file not shown.

View File

@ -104,8 +104,8 @@ void CHuaGoCorrectApp::CreateScanFile()
char cTime[11];
CTime currTime = CTime::GetCurrentTime();
_snprintf(cTime, 11, "%04d-%02d-%02d", currTime.GetYear(), currTime.GetMonth(), currTime.GetDay());
csDate.Format("%s",cTime);
//csDate.Format(L"%s",cTime);
csDate = cTime;
path = ".\\ScanPicture\\";
if (!PathIsDirectory(path))

Binary file not shown.

View File

@ -29,7 +29,7 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
<UseOfMfc>Dynamic</UseOfMfc>
<PlatformToolset>v142</PlatformToolset>
<VCToolsVersion>
@ -47,7 +47,7 @@
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet>
<UseOfMfc>Dynamic</UseOfMfc>
<PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
@ -215,8 +215,6 @@ opencv_imgproc2410.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ClInclude Include="A4.h" />
<ClInclude Include="BlockingQueue.h" />
<ClInclude Include="commondef.h" />
<ClInclude Include="Config.h" />
<ClInclude Include="ConfigParam.h" />
<ClInclude Include="CVISON.h" />
<ClInclude Include="DefHSCommon.h" />
<ClInclude Include="DefHSStructure.h" />
@ -246,8 +244,6 @@ opencv_imgproc2410.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ItemGroup>
<ClCompile Include="A3.cpp" />
<ClCompile Include="A4.cpp" />
<ClCompile Include="Config.cpp" />
<ClCompile Include="ConfigParam.cpp" />
<ClCompile Include="CVISON.cpp" />
<ClCompile Include="gscan3399.cpp" />
<ClCompile Include="gscn_drv.cpp" />

View File

@ -48,9 +48,6 @@
<ClInclude Include="Resource.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="Config.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="filetools.h">
<Filter>头文件</Filter>
</ClInclude>
@ -96,9 +93,6 @@
<ClInclude Include="A4.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="ConfigParam.h">
<Filter>头文件</Filter>
</ClInclude>
<ClInclude Include="CVISON.h">
<Filter>头文件</Filter>
</ClInclude>
@ -137,9 +131,6 @@
<ClCompile Include="stdafx.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="Config.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="imageprocess.cpp">
<Filter>源文件</Filter>
</ClCompile>
@ -170,9 +161,6 @@
<ClCompile Include="A4.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="ConfigParam.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="CVISON.cpp">
<Filter>源文件</Filter>
</ClCompile>

View File

@ -100,7 +100,7 @@ BEGIN_MESSAGE_MAP(CHuaGoCorrectDlg, CDialogEx)
ON_BN_CLICKED(IDC_BTN_FLAT, &CHuaGoCorrectDlg::OnBnClickedBtnFlat)
ON_CBN_SELCHANGE(IDC_dpi_comboBox, &CHuaGoCorrectDlg::OnCbnSelChangeDpi)
ON_CBN_SELCHANGE(IDC_color_comboBox, &CHuaGoCorrectDlg::OnCbnSelChangeColor)
//ON_WM_TIMER()
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BTN_SELECTFILE, &CHuaGoCorrectDlg::OnBnClickedBtnSelectfile)
ON_BN_CLICKED(IDC_BTN_UPDATE, &CHuaGoCorrectDlg::OnBnClickedBtnUpdate)
ON_BN_CLICKED(IDC_BTN_REFRESH, &CHuaGoCorrectDlg::OnBnClickedBtnRefresh)
@ -157,7 +157,7 @@ BOOL CHuaGoCorrectDlg::OnInitDialog()
else
{
CString str;
str.Format("%d", num);
str.Format(L"%d", num);
SetDlgItemText(IDC_STATIC_NUM, str);
}
};
@ -165,7 +165,7 @@ BOOL CHuaGoCorrectDlg::OnInitDialog()
m_tab.GetClientRect(&tabRect); // 获取标签控件客户区Rect
// 调整tabRect使其覆盖范围适合放置标签页
tabRect.left += 1;
tabRect.left += 10;
tabRect.right -= 1;
tabRect.top += 35;
tabRect.bottom -= 1;
@ -185,7 +185,6 @@ BOOL CHuaGoCorrectDlg::OnInitDialog()
m_ComboxColor.InsertString(0, _T("gray"));
m_ComboxColor.InsertString(1, _T("color"));
m_ComboxColor.SetCurSel(1);
//m_drv->set_decompress_pix_type(TWPT_RGB);
m_A4Scanner.SetCheck(0);
n_hour = 0;
@ -239,7 +238,7 @@ bool CHuaGoCorrectDlg::RefreshUSBList()
while (info != ret.end())
{
CString strinfo;
strinfo.Format("vid0x%x pid0X%x", info->vid, info->pid);
strinfo.Format(L"vid0x%x pid0X%x", info->vid, info->pid);
m_Usbs.InsertString(i, strinfo);
info++;
i++;
@ -311,9 +310,9 @@ void CHuaGoCorrectDlg::RefreshTabChange()
// 获取标签控件客户区Rect并对其调整以适合放置标签页
m_tab.GetClientRect(&tabRect);
tabRect.left += 10;
tabRect.right -= 1;
tabRect.top += 35;
tabRect.left += 15;
tabRect.right += 20;
tabRect.top += 20;
tabRect.bottom -= 1;
switch (m_tab.GetCurSel())
@ -343,7 +342,7 @@ void CHuaGoCorrectDlg::Scan()
HGScanConfig config = { 0 };
config.g200params.dpi = 1;//only support 200DPI
config.g200params.paper = 0;
config.g200params.pc_correct = !((CButton*)GetDlgItem(IDC_CKBORGINIMG))->GetCheck();
config.g200params.pc_correct = ((CButton*)GetDlgItem(IDC_CKBORGINIMG))->GetCheck();
config.g200params.color = m_iColorIndex == 1 ? 1 : 0;
config.g200params.double_feed_enbale = TRUE;
config.g200params.screw_detect_enable = FALSE;
@ -354,15 +353,15 @@ void CHuaGoCorrectDlg::Scan()
m_drv->Scanner_StartScan(-1);
m_drv->run();
//if (b_suspend)
// KillTimer(N_TIMER_SEC);
if (b_suspend)
KillTimer(N_TIMER_SEC);
//b_suspend = FALSE;
//n_hour = 0;
//n_minute = 0;
//n_second = 0;
//SetTimer(N_TIMER_SEC, N_TIME_SEC, NULL);
//SetTimer(N_TIMER_SHOW, N_TIME_SHOW, NULL);
b_suspend = FALSE;
n_hour = 0;
n_minute = 0;
n_second = 0;
SetTimer(N_TIMER_SEC, N_TIME_SEC, NULL);
SetTimer(N_TIMER_SHOW, N_TIME_SHOW, NULL);
}
@ -371,7 +370,7 @@ void CHuaGoCorrectDlg::OnBnClickedCheckparamset()
// TODO: 在此添加控件通知处理程序代码
if (!m_drv->IsConnected())
{
MessageBox("扫描仪未连接!");
MessageBox(TEXT("扫描仪未连接!"));
return;
}
m_A4Dlg.SendCorrectParam();
@ -383,7 +382,7 @@ void CHuaGoCorrectDlg::OnBnClickedCheckparamread()
// TODO: 在此添加控件通知处理程序代码
if (!m_drv->IsConnected())
{
MessageBox("扫描仪未连接!");
MessageBox(TEXT("扫描仪未连接!"));
return;
}
m_tab.SetCurSel(0);
@ -397,14 +396,29 @@ void CHuaGoCorrectDlg::OnBnClickedBtnFlat()
m_iflatIndex = -2;
if (!m_drv->IsConnected())
{
MessageBox("扫描仪未连接!");
MessageBox(TEXT("扫描仪未连接!"));
return;
}
if (GetDlgItem(IDC_CKBCORRECTMODE)->IsWindowVisible())
{
m_tab.SetCurSel(2);
RefreshTabChange();
((CEdit*)(m_A3dlg.GetDlgItem(IDC_LSTFLATINFO)))->Clear();
auto flatcall = [&](string info) {
USES_CONVERSION;
std::string c_str = StringToUtf(info);
CString pWideChar = A2T(c_str.c_str());
CString oldinfo;
((CEdit*)(m_A3dlg.GetDlgItem(IDC_LSTFLATINFO)))->GetWindowText(oldinfo);
oldinfo += pWideChar;
((CEdit*)(m_A3dlg.GetDlgItem(IDC_LSTFLATINFO)))->SetWindowText(oldinfo);
auto edit = ((CEdit*)(m_A3dlg.GetDlgItem(IDC_LSTFLATINFO)));
edit->LineScroll(edit->GetLineCount());
};
m_drv->SetFlatCallback(flatcall);
m_drv->StartFlat(((CButton*)GetDlgItem(IDC_CKBCORRECTMODE))->GetCheck());
}
else
m_drv->StartFlat(true);//彩色
}
@ -413,26 +427,26 @@ void CHuaGoCorrectDlg::WriteLog(CString msg)
{
if (!msg.IsEmpty())
{
FILE* pFile = fopen(".//log//CorrectLog.log", "a+");
if (pFile != NULL)
{
char cTime[32];
CTime currTime = CTime::GetCurrentTime();
_snprintf(cTime, 30, "[%04d-%02d-%02d %02d:%02d:%02d]",
currTime.GetYear(), currTime.GetMonth(), currTime.GetDay(),
currTime.GetHour(), currTime.GetMinute(), currTime.GetSecond());
fwrite(cTime, 1, strlen(cTime), pFile);
fwrite(msg, 1, strlen(msg), pFile);
fwrite("\n", 1, 1, pFile);
fclose(pFile);
}
//FILE* pFile = fopen(".//log//CorrectLog.log", "a+");
//if (pFile != NULL)
//{
// char cTime[32];
// CTime currTime = CTime::GetCurrentTime();
// _snprintf(cTime, 30, "[%04d-%02d-%02d %02d:%02d:%02d]",
// currTime.GetYear(), currTime.GetMonth(), currTime.GetDay(),
// currTime.GetHour(), currTime.GetMinute(), currTime.GetSecond());
// fwrite(cTime, 1, strlen(cTime), pFile);
// fwrite(msg, 1, strlen(msg.GetBuffer()), pFile);
// fwrite("\n", 1, 1, pFile);
// fclose(pFile);
//}
}
}
void CHuaGoCorrectDlg::OnCancel()
{
// TODO: 在此添加专用代码和/或调用基类
if (IDOK != AfxMessageBox("确定要退出服务器吗?", MB_ICONQUESTION | MB_OKCANCEL))
if (IDOK != AfxMessageBox(L"确定要退出此程序吗?", MB_ICONQUESTION | MB_OKCANCEL))
{
return;
}
@ -469,51 +483,51 @@ void CHuaGoCorrectDlg::OnBnClickedStopScan()
}
//void CHuaGoCorrectDlg::OnTimer(UINT_PTR nIDEvent)
//{
// // TODO: 在此添加消息处理程序代码和/或调用默认值
// switch (nIDEvent)
// {
// case 1:
// {
// if (b_review == FALSE)
// {
// n_second++;
// if (n_second == 60)
// {
// n_second = 0;
// n_minute++;
// }
// if (n_minute == 60)
// {
// n_minute = 0;
// n_hour++;
// }
// }
// }
// case 2:
// {
// if (b_review == FALSE)
// {
// int h1, h2, m1, m2, s1, s2;
// h1 = n_hour / 10;
// h2 = n_hour % 10;
// m1 = n_minute / 10;
// m2 = n_minute % 10;
// s1 = n_second / 10;
// s2 = n_second % 10;
// s_hour.Format("%d%d", h1, h2);
// s_minute.Format("%d%d", m1, m2);
// s_second.Format("%d%d", s1, s2);
// }
// UpdateData(FALSE);
// }
// default:
// break;
// }
//
// CDialogEx::OnTimer(nIDEvent);
//}
void CHuaGoCorrectDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
switch (nIDEvent)
{
case 1:
{
if (b_review == FALSE)
{
n_second++;
if (n_second == 60)
{
n_second = 0;
n_minute++;
}
if (n_minute == 60)
{
n_minute = 0;
n_hour++;
}
}
}
case 2:
{
if (b_review == FALSE)
{
int h1, h2, m1, m2, s1, s2;
h1 = n_hour / 10;
h2 = n_hour % 10;
m1 = n_minute / 10;
m2 = n_minute % 10;
s1 = n_second / 10;
s2 = n_second % 10;
s_hour.Format(L"%d%d", h1, h2);
s_minute.Format(L"%d%d", m1, m2);
s_second.Format(L"%d%d", s1, s2);
}
UpdateData(FALSE);
}
default:
break;
}
CDialogEx::OnTimer(nIDEvent);
}
/// <summary>
/// 选择更新文件
@ -530,8 +544,10 @@ void CHuaGoCorrectDlg::OnBnClickedBtnSelectfile()
NULL);
if (IDOK == ofd.DoModal())
{
USES_CONVERSION;
updateFilePath = ofd.GetPathName();
SetDlgItemText(IDC_LB_FILEPATH, updateFilePath.c_str());
SetDlgItemText(IDC_LB_FILEPATH, updateFilePath);
}
}
@ -584,7 +600,8 @@ void CHuaGoCorrectDlg::OnCbnSelchangeCmbUsbs()
GetDlgItem(IDC_CKBUVMODEL)->EnableWindow(i->vid == 0x3072 && i->pid == 0x0300);
}
m_drv->open(i->vid, i->pid, 0);
std::string savepath(GetMainApp()->path.GetBuffer());
USES_CONVERSION;
std::string savepath(W2A(GetMainApp()->path.GetBuffer()));
m_drv->SetPath(savepath);
if (i->pid & 0x39)
{
@ -608,7 +625,7 @@ void CHuaGoCorrectDlg::OnCbnSelchangeCmbUsbs()
{
MessageBox(TEXT("open current select usb scanner failed"), TEXT("Notify"), MB_OK | MB_ICONINFORMATION);
}
}
}
}
@ -624,11 +641,11 @@ void CHuaGoCorrectDlg::OnBnClickedBtnstart()
if (!m_drv->IsConnected())
{
MessageBox("扫描仪未连接!");
MessageBox(L"扫描仪未连接!");
return;
}
m_iColorIndex = m_ComboxColor.GetCurSel();
GetDlgItem(IDC_STATIC_NUM)->SetWindowText("0");
GetDlgItem(IDC_STATIC_NUM)->SetWindowText(L"0");
m_drv->DevStateChange();
m_drv->reset();
Scan();
@ -656,9 +673,9 @@ void CHuaGoCorrectDlg::OnBnClickedBtnstop()
m2 = n_minute % 10;
s1 = n_second / 10;
s2 = n_second % 10;
s_hour.Format("%d%d", h1, h2);
s_minute.Format("%d%d", m1, m2);
s_second.Format("%d%d", s1, s2);
s_hour.Format(L"%d%d", h1, h2);
s_minute.Format(L"%d%d", m1, m2);
s_second.Format(L"%d%d", s1, s2);
UpdateData(FALSE);
}
m_drv->Stop_scan();
@ -667,8 +684,10 @@ void CHuaGoCorrectDlg::OnBnClickedBtnstop()
void CHuaGoCorrectDlg::updatefunc()
{
CProgressCtrl* prb = (CProgressCtrl*)GetDlgItem(IDC_PRB_UPDATE);
int ret= m_drv->Updata(updateFilePath, [this,&prb](long pos, long len) {
prb->SetRange32(0,len);
USES_CONVERSION;
std::string updatefile(W2A(updateFilePath));
int ret = m_drv->Updata(updatefile, [this, &prb](long pos, long len) {
prb->SetRange32(0, len);
prb->SetPos(pos);
});
if (ret == false)
@ -679,60 +698,4 @@ void CHuaGoCorrectDlg::updatefunc()
{
MessageBox(TEXT("更新完成!"), TEXT("提示"), MB_OK | MB_ICONINFORMATION);
}
//std::ifstream updatefile;
//updatefile.open(updateFilePath, std::ios_base::in | std::ios_base::binary);
//if (!updatefile.is_open())
//{
// MessageBox(TEXT("更新文件打开失败!"), TEXT("提示"), MB_OK);
//}
//CProgressCtrl* prb = (CProgressCtrl*)GetDlgItem(IDC_PRB_UPDATE);
//updatefile.seekg(0, std::ios::end);
//size_t length = updatefile.tellg();
//prb->SetRange32(0, length);
//updatefile.seekg(0, std::ios::beg);
//USBCB pre_update = { PRE_UPGRADE,0,length };
//m_drv->m_usb->write_bulk(&pre_update, sizeof(pre_update));
//size_t nreaded = 0;
//size_t nleft = length;
//int buffersize = 1024 * 1024;
//if (length <= buffersize)//小于1MB
//{
// char* uotstream = new char[length];
// USBCB update = { START_UPGRADE,0,length };
// m_drv->m_usb->write_bulk(&update, sizeof(update));
// updatefile.read(uotstream, length);
// m_drv->m_usb->write_bulk(uotstream, length);
// m_drv->m_usb->read_bulk(&update, sizeof(update));
// if (update.u32_Count != length)
// MessageBox(TEXT("下载失败!"), TEXT("警告!"), MB_OK);
// delete[] uotstream;
//}
//else
//{
// while (true)
// {
// int ntotransfer;
// if (nleft < buffersize)
// ntotransfer = nleft;
// else
// ntotransfer = buffersize;
// USBCB update = { START_UPGRADE,0,ntotransfer };
// m_drv->m_usb->write_bulk(&update, sizeof(update));
// std::vector<char> data;
// data.resize(ntotransfer);
// updatefile.read(data.data(), ntotransfer);
// m_drv->m_usb->write_bulk(data.data(), ntotransfer);
// m_drv->m_usb->read_bulk(&update, sizeof(update));
// nreaded += ntotransfer;
// nleft -= ntotransfer;
// prb->SetPos(nreaded);
// if (nreaded >= length)
// break;
// this_thread::sleep_for(std::chrono::milliseconds(10));
// }
//}
//USBCB updatefinished = { UPDATE_FINISHED,0,0 };
//m_drv->m_usb->write_bulk(&updatefinished, sizeof(updatefinished));
//MessageBox(TEXT("固件下载完成!"), TEXT("提示"), MB_OK | MB_ICONINFORMATION);
}

View File

@ -11,7 +11,7 @@
#include "twain.h"
#include "A3.h"
#include "A4.h"
#include "ConfigParam.h"
//#include "ConfigParam.h"
#include "afxwin.h"
#include "CVISON.h"
#include "scn_usb.h"
@ -63,7 +63,6 @@ public:
CA4 m_A4Dlg;
CVISON m_VisonDlg;
CA3 m_A3dlg;
CConfigParam m_ConfigParam;
std::shared_ptr<IScanner> m_drv;
CRect tabRect; // 标签控件客户区的位置和大小
void Scan();
@ -104,7 +103,7 @@ public:
CString s_minute;
CString s_second;
afx_msg void OnBnClickedStopScan();
//afx_msg void OnTimer(UINT_PTR nIDEvent);
afx_msg void OnTimer(UINT_PTR nIDEvent);
afx_msg void OnBnClickedBtnSelectfile();
afx_msg void OnBnClickedBtnUpdate();
afx_msg void OnBnClickedBtnRefresh();
@ -112,7 +111,7 @@ public:
afx_msg void OnBnClickedBtnstart();
afx_msg void OnBnClickedBtnstop();
private:
std::string updateFilePath;
CString updateFilePath;
std::thread m_updateThread;
void updatefunc();
};

View File

@ -15,6 +15,7 @@ public:
virtual void SetFWVersion() = 0;
virtual std::string GetSerialNum() = 0;
virtual void SetSerialNum(std::string serial) = 0;
virtual std::string GetKernelVersion() =0;
virtual void SetRatio(int tyepe, int ration) = 0;
virtual void GetRatio(int type, int& ratio) = 0;
virtual void Reboot() = 0;
@ -44,8 +45,12 @@ public:
virtual void SetSptime(int type, int time) = 0;
virtual void GetSleepTime(int& sleeptime) = 0;
virtual void SetSleepTime(int sleeptime) = 0;
virtual bool Updata(std::string filename, std::function<void(long, long)> func) = 0;
virtual void GetFlatMaxBright(bool iscolor, unsigned int& val) = 0;
virtual void SetFlatMaxBright(bool iscolor, unsigned int val) = 0;
virtual bool Updata(std::string filename, std::function<void(long, long)> func) = 0;
virtual void SetFlatCallback(std::function<void(std::string)> func) = 0;
virtual void GetSpeedMode(int& speedmode,bool get) = 0 ;
void SetPath(std::string csFilePath)
{
csPath = csFilePath;

View File

@ -49,7 +49,7 @@ cv::Mat JpegBuffer::getMat( int pixType)
//XdPrint("buffer size is :%d ==========================\n",getSize());
cv::Mat image = jl.decode(m_buffer, pixType);//oixtype
XdPrint("Decode Image time epleased :%lf ==========================\n",sw.elapsed_ms());
XdPrint(L"Decode Image time epleased :%lf ==========================\n",sw.elapsed_ms());
//XdPrint("==image col is :%d, image row is :%d, image size is :%d===\n",image.cols, image.rows, image.size);
//FileTools::write_log("D:/1.txt",)

View File

@ -313,34 +313,34 @@ TCHAR* GetCurExeFilePath(HINSTANCE hInstance, TCHAR* lpPath, DWORD dwSize)
TCHAR* GetExistFileDir(TCHAR* p_file_path)
{
WIN32_FIND_DATA wfd = {0};
LPSTR p_test = NULL;
HANDLE hFindFile = INVALID_HANDLE_VALUE;
//WIN32_FIND_DATA wfd = {0};
//LPSTR p_test = NULL;
//HANDLE hFindFile = INVALID_HANDLE_VALUE;
if ( p_file_path == NULL )
//if ( p_file_path == NULL )
// return NULL;
//
//hFindFile = FindFirstFile(p_file_path, &wfd);
//if (hFindFile != NULL)
//{
// FindClose(hFindFile);
// hFindFile= INVALID_HANDLE_VALUE;
//}
//if ( wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
//{
// return p_file_path;
//}
//
//p_test = _tcsrchr(p_file_path, '\\');
//if ( p_test != NULL )
//{
// *p_test = 0;
// return GetExistFileDir(p_file_path);
//}
//else
//{
return NULL;
hFindFile = FindFirstFile(p_file_path, &wfd);
if (hFindFile != NULL)
{
FindClose(hFindFile);
hFindFile= INVALID_HANDLE_VALUE;
}
if ( wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
{
return p_file_path;
}
p_test = _tcsrchr(p_file_path, '\\');
if ( p_test != NULL )
{
*p_test = 0;
return GetExistFileDir(p_file_path);
}
else
{
return NULL;
}
//}
}
DWORD CALLBACK BrowserCallbackProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
@ -375,10 +375,10 @@ BOOL CheckAndCreateFileDir(TCHAR* p_file_path, BOOL flg)
return FALSE;
}
}
if ( _access(p_file_path, 0) == 0)
{
return TRUE;
}
//if ( _access(p_file_path, 0) == 0)
//{
// return TRUE;
//}
if ( !flg )
return FALSE;
@ -412,67 +412,67 @@ BOOL CheckAndCreateFileDir(TCHAR* p_file_path, BOOL flg)
BOOL CheckDiskFreeBitM(HWND hWin, TCHAR *p_disk_name, DWORD dw_min_bit_m)
{
TCHAR *p = NULL;
TCHAR sz_root_path_name[MAX_PATH + 1] = {0};
INT len = 0;
DWORD dwTotalDiskSpace = 0;
DWORD dwFreeDiskSpace = 0;
DWORD dwUsedDiskSpace = 0;
//TCHAR *p = NULL;
//TCHAR sz_root_path_name[MAX_PATH + 1] = {0};
//INT len = 0;
//
//DWORD dwTotalDiskSpace = 0;
//DWORD dwFreeDiskSpace = 0;
//DWORD dwUsedDiskSpace = 0;
ULARGE_INTEGER uiFreeBytesAvailableToCaller;
ULARGE_INTEGER uiTotalNumberOfBytes;
ULARGE_INTEGER uiTotalNumberOfFreeBytes;
//ULARGE_INTEGER uiFreeBytesAvailableToCaller;
//ULARGE_INTEGER uiTotalNumberOfBytes;
//ULARGE_INTEGER uiTotalNumberOfFreeBytes;
UINT un_ret = 0;
if ( p_disk_name == NULL )
return FALSE;
//UINT un_ret = 0;
//if ( p_disk_name == NULL )
// return FALSE;
len = _tcslen(p_disk_name);
if ( len > MAX_PATH )
{
len = MAX_PATH;
}
//len = _tcslen(p_disk_name);
//if ( len > MAX_PATH )
//{
// len = MAX_PATH;
//}
memcpy(sz_root_path_name, p_disk_name, (size_t)len);
//memcpy(sz_root_path_name, p_disk_name, (size_t)len);
p = _tcsstr(sz_root_path_name, "\\");
if ( p == NULL )
{
if ( len == 2 )
{
if ( !((sz_root_path_name[0] >= 'A' && sz_root_path_name[0] <= 'Z' || sz_root_path_name[0] >= 'a' && sz_root_path_name[0] <= 'z') && sz_root_path_name[1]== ':') )
return FALSE;
}
else
return FALSE;
}
if ( p != NULL )
*(p+1) = 0;
un_ret = GetDriveType(sz_root_path_name);
if ( un_ret == 0 || un_ret == 1)
{
return FALSE;
}
if(GetDiskFreeSpaceEx(sz_root_path_name, &uiFreeBytesAvailableToCaller, &uiTotalNumberOfBytes, &uiTotalNumberOfFreeBytes))
{
//dwTotalDiskSpace = (DWORD)(uiTotalNumberOfBytes.QuadPart / 1024 / 1024);
dwFreeDiskSpace = (DWORD)(uiFreeBytesAvailableToCaller.QuadPart >> 20);
//dwUsedDiskSpace = dwTotalDiskSpace - dwFreeDiskSpace;
if ( dwFreeDiskSpace < dw_min_bit_m )
{
//ShowErrorStr(hWin, 1101);//1101=磁盘空间不足
MyMessageBox( TEXT("磁盘分区可用空间不足"), 0, MB_ICONWARNING);
return FALSE;
}
}
else
{
MyMessageBox( TEXT("磁盘分区可用空间不足"), 0, MB_ICONWARNING);
//GetErrorMessage(NULL, 0, FALSE);
return FALSE;
}
//p = _tcsstr(sz_root_path_name, "\\");
//if ( p == NULL )
//{
// if ( len == 2 )
// {
// if ( !((sz_root_path_name[0] >= 'A' && sz_root_path_name[0] <= 'Z' || sz_root_path_name[0] >= 'a' && sz_root_path_name[0] <= 'z') && sz_root_path_name[1]== ':') )
// return FALSE;
// }
// else
// return FALSE;
//}
//if ( p != NULL )
// *(p+1) = 0;
//un_ret = GetDriveType(sz_root_path_name);
//if ( un_ret == 0 || un_ret == 1)
//{
// return FALSE;
//}
//
//if(GetDiskFreeSpaceEx(sz_root_path_name, &uiFreeBytesAvailableToCaller, &uiTotalNumberOfBytes, &uiTotalNumberOfFreeBytes))
//{
// //dwTotalDiskSpace = (DWORD)(uiTotalNumberOfBytes.QuadPart / 1024 / 1024);
// dwFreeDiskSpace = (DWORD)(uiFreeBytesAvailableToCaller.QuadPart >> 20);
// //dwUsedDiskSpace = dwTotalDiskSpace - dwFreeDiskSpace;
// if ( dwFreeDiskSpace < dw_min_bit_m )
// {
// //ShowErrorStr(hWin, 1101);//1101=磁盘空间不足
// MyMessageBox( TEXT("磁盘分区可用空间不足"), 0, MB_ICONWARNING);
// return FALSE;
// }
//}
//else
//{
// MyMessageBox( TEXT("磁盘分区可用空间不足"), 0, MB_ICONWARNING);
// //GetErrorMessage(NULL, 0, FALSE);
// return FALSE;
//}
//ShowErrorStr(hWin, 1101);//1101=磁盘空间不足
//return FALSE;
return TRUE;

Binary file not shown.

View File

@ -312,7 +312,12 @@ enum Scanner_Reg_Defs
SR_SET_COLOR_SP,
SR_SET_SLEEPTIME,
SR_GET_SLEEPTIME,
SR_GET_SLEEP_STAUTUS,
SR_GET_SLEEP_STAUTUS,
SR_GET_IMAGEPROCESSDONE,
SR_GET_KEEP_LAST_PAPER,
SR_GET_PAPERON,
SR_SET_SPEEDMODE,
SR_GET_SPEEDMODE,
SR_GET_CUO_ERROR = 0x50,
SR_GET_DOU_ERROR,
SR_GET_JAM_ERROR,
@ -326,7 +331,11 @@ enum Scanner_Reg_Defs
SR_UPDATA_RECOVERY = 0x103,
SR_UPDATA_REBOOT = 0x104,
SR_POWEROFF = 0x105,
SR_REBOOT = 0x106
SR_REBOOT = 0x106,
SR_FLAT_CLR_MAX_BRIGHT,
SR_FLAT_GRAY_MAX_BRIGHT,
SR_KERNEL_VERSION_INFO_LENGTH,
SR_GET_KERNEL_VERSION
};
enum Scanner_Cmd_Defs
@ -355,7 +364,8 @@ enum HGType
FPGA,
V4L2,
IMG,
STOPSCAN,
AutoCorrect,
STOPSCAN
};
typedef union HG_ScanConfig
@ -396,4 +406,5 @@ struct HGEIntInfo
{
HGType From;
unsigned int Code;
unsigned int Img_Index;
};

View File

@ -147,6 +147,22 @@ void gscan3399::SetSerialNum(std::string serial)
}
}
std::string gscan3399::GetKernelVersion()
{
std::string version = "unkown";
if (m_usb.get() && m_usb->is_connected())
{
int length = scanner_read_reg(m_usb, SR_KERNEL_VERSION_INFO_LENGTH);
version.resize(length);
if (length > 0)
{
scanner_write_reg(m_usb, SR_GET_KERNEL_VERSION, length);
read_data(&version[0], version.length(), 200);
}
}
return version;
}
void gscan3399::SetRatio(int tyepe, int ration)
{
scanner_write_reg(m_usb, tyepe == 0 ? SR_SET_H_RATIO : SR_SET_V_RATIO, ration);
@ -181,7 +197,7 @@ bool gscan3399::Get_Scanner_PaperOn()
void gscan3399::Config_Scanner(HGScanConfig config)
{
m_config = config;
scanner_write_reg(m_usb, SR_CONFIG_SCAN_PARAM, config.value);
scanner_write_reg(m_usb, SR_CONFIG_SCAN_PARAM, config.value);
}
void gscan3399::Scanner_StartScan(UINT16 count)
{
@ -227,6 +243,22 @@ void gscan3399::set_decompress_pix_type(int pixtype)
}
void gscan3399::GetFlatMaxBright(bool iscolor, unsigned int& val)
{
if (m_usb.get() && m_usb->is_connected())
{
val= scanner_read_reg(m_usb, iscolor?SR_FLAT_CLR_MAX_BRIGHT:SR_FLAT_GRAY_MAX_BRIGHT);
}
}
void gscan3399::SetFlatMaxBright(bool iscolor, unsigned int val)
{
if (m_usb.get() && m_usb->is_connected())
{
scanner_write_reg(m_usb, iscolor ? SR_FLAT_CLR_MAX_BRIGHT : SR_FLAT_GRAY_MAX_BRIGHT,val);
}
}
bool gscan3399::Updata(std::string filename, std::function<void(long, long)> func)
{
std::ifstream updatefile;
@ -369,25 +401,18 @@ CaptureParams gscan3399::GetFlatData()
void gscan3399::StartFlat(bool iscolor)
{
int color = iscolor ? 1 : 0;
scanner_write_reg(m_usb, SC_AUTOCORRECT, color);
unsigned char buff[64] = { 0 };
StopWatch sw;
while (sw.elapsed_s() < 120)
if (m_usbthread.get())
{
auto lenght = m_usb->read_int(buff, sizeof(buff));
if (lenght == sizeof(buff))
b_usbthread = false;
if (m_usbthread->joinable())
{
HGEIntInfo info = *(HGEIntInfo*)&buff;
if (info.From == 5 && info.Code == 6)
break;
m_usbthread->join();
m_usbthread.reset();
}
this_thread::sleep_for(chrono::milliseconds(30));
DoEvents();
}
if(sw.elapsed_s()<120)
MessageBox(NULL, TEXT(iscolor?"彩色自动校正已完成!":"灰度自动校正已完成!"), TEXT("提示"), MB_OK);
else
MessageBox(NULL, TEXT(iscolor ? "彩色自动校正失败!" : "彩色自动校正失败!"), TEXT("提示"), MB_OK);
b_usbthread = true;
m_usbthread.reset(new thread(&gscan3399::usb_run, this));
scanner_write_reg(m_usb, SC_AUTOCORRECT, color);
}
void gscan3399::DevStateChange()
@ -404,7 +429,6 @@ void gscan3399::close()
{
if (m_usb.get())
m_usb->close();
}
void gscan3399::GetExpose(int& Aside, int& Bside)
@ -440,6 +464,25 @@ void gscan3399::SetSleepTime(int sleeptime)
scanner_write_reg(m_usb, SR_SET_SLEEPTIME, sleeptime);
}
void gscan3399::SetFlatCallback(std::function<void(std::string)> func)
{
m_flatcallback = func;
}
void gscan3399::GetSpeedMode(int& speedmode, bool get)
{
if (m_usb.get() && m_usb->is_connected())
{
if (get)
{
speedmode= scanner_read_reg(m_usb, SR_GET_SPEEDMODE);
}
else
{
scanner_write_reg(m_usb, SR_SET_SPEEDMODE,speedmode);
}
}
}
void gscan3399::usbcallback(bool isleft, void* usrdata)
{
@ -471,7 +514,7 @@ void gscan3399::get_imgdata()
if (is_bulktransferring())
{
std::this_thread::sleep_for(std::chrono::milliseconds(1));
continue;
return;
}
imgremains++;
auto& buffi = im_data;
@ -535,7 +578,9 @@ void gscan3399::imgproce(std::shared_ptr<std::vector<char>>& buffs)
p = localtime(&timp);
std::string filename = std::to_string(p->tm_hour) + "_" + std::to_string(p->tm_min) + "_" + std::to_string(p->tm_sec);
static int indeximg = 0;
std::string path = csPath+"\\"+filename + ".png";
++indeximg;
auto str = indeximg % 2 == 1 ? "F" : "B";
std::string path = csPath+"\\"+filename + str+".png";
if (!mat.empty()) {
cv::imwrite(path, mat);
m_imagespath.Put(path);
@ -559,7 +604,7 @@ void gscan3399::usb_run()
}
memset(buff, 0, sizeof(buff));
auto length = m_usb->read_int(buff, sizeof(buff));
if (((length) == sizeof(buff)) || is_bulktransferring())
if (((length) == sizeof(buff)))
{
HGEIntInfo info = *(HGEIntInfo*)&buff;
switch (info.From)
@ -568,6 +613,19 @@ void gscan3399::usb_run()
if (is_runing())
get_imgdata();
break;
case AutoCorrect:
if (info.Img_Index != 0)
{
std::string s_info;
s_info.resize(info.Img_Index);
m_usb->read_bulk(&s_info[0], s_info.length());
//FileTools::write_log("D:\\info.txt", s_info);
if (m_flatcallback)
m_flatcallback(s_info);
}
if (info.Code == 4)//flat done
return;
break;
default:
break;
}

View File

@ -16,6 +16,7 @@ public:
virtual void SetFWVersion();
virtual std::string GetSerialNum();
virtual void SetSerialNum(std::string serial);
virtual std::string GetKernelVersion();
virtual void SetRatio(int tyepe, int ration);
virtual void GetRatio(int type, int& ratio);
virtual void Reboot();
@ -31,7 +32,8 @@ public:
virtual void run();
virtual int get_decompress_pix_type();
virtual void set_decompress_pix_type(int pixtype);
virtual void GetFlatMaxBright(bool iscolor, unsigned int& val);
virtual void SetFlatMaxBright(bool iscolor, unsigned int val);
virtual bool Updata(std::string filename, std::function<void(long, long)> func);
virtual void SetIsDuplex(bool value);
@ -64,6 +66,11 @@ public:
virtual void GetSleepTime(int& sleeptime);
virtual void SetSleepTime(int sleeptime);
virtual void SetFlatCallback(std::function<void(std::string)> func);
virtual void GetSpeedMode(int& speedmode,bool getorset);
private:
static void usbcallback(bool isleft, void* usrdata);
int read_data(void* data, int length, int timeout);
@ -88,4 +95,5 @@ private:
BlockingQueue<std::string> m_imagespath;
std::atomic_int imgremains;
HGScanConfig m_config;
std::function<void(std::string)> m_flatcallback;
};

View File

@ -18,7 +18,7 @@ GScn_Drv::GScn_Drv()
{
//run();
XdPrint("Init GScn_Drv() \n");
XdPrint(L"Init GScn_Drv() \n");
m_bRun = false;
devState = DEV_STOP;
@ -35,9 +35,9 @@ GScn_Drv::~GScn_Drv()
m_bRun = false;
devState = DEV_STOP;
m_threadUsb.join();
XdPrint("m_threadUsb Released True 22222222222222222222222 \n");
XdPrint(L"m_threadUsb Released True 22222222222222222222222 \n");
}
XdPrint("~ GScn_Drv() \n");
XdPrint(L"~ GScn_Drv() \n");
}
void GScn_Drv::InitMSGMap()
@ -82,7 +82,7 @@ void GScn_Drv::open(int vid, int pid,int index)
m_usb->open();//同时存在多个同种扫描设备时默认选取第一个vid pid匹配的设备
selectDeviceIndex=index;
m_scannerType=G300;
h= ::FindWindow(NULL, "HGScannerTool");
h= ::FindWindow(NULL, L"HGScannerTool");
}
}
@ -223,6 +223,23 @@ void GScn_Drv::SetSleepTime(int sleeptime)
}
}
void GScn_Drv::GetFlatMaxBright(bool iscolor, unsigned int& val)
{
}
void GScn_Drv::SetFlatMaxBright(bool iscolor, unsigned int val)
{
}
void GScn_Drv::SetFlatCallback(std::function<void(std::string)> func)
{
m_flatcallback = func;
}
void GScn_Drv::GetSpeedMode(int& speedmode, bool get)
{
}
void GScn_Drv::reset()
{
while (!m_pImages.empty())
@ -425,11 +442,13 @@ DWORD GScn_Drv::usbmain()
case DETECT_STAPLE:
case PAPER_SKEW:
case HARDWARE_ERROR:
case PC_SCAN_BUSY_or_ERROR:
MessageBox(h, ntcMsg[usbcb.u32_Data].c_str(), "Ìáʾ", MB_OK | MB_ICONERROR);
case PC_SCAN_BUSY_or_ERROR:{
USES_CONVERSION;
MessageBox(h, CString(ntcMsg[usbcb.u32_Data].c_str()), L"Ìáʾ", MB_OK | MB_ICONERROR);
devState = DEV_WRONG;
m_pImages.SetScanFlag(false);
break;
}
case NORMAL:
break;
default:
@ -442,15 +461,15 @@ DWORD GScn_Drv::usbmain()
}
catch (CMemoryException* e)
{
XdPrint("CMemoryException");
XdPrint(L"CMemoryException");
}
catch (CFileException* e)
{
XdPrint("CFileException");
XdPrint(L"CFileException");
}
catch (CException* e)
{
XdPrint("CException");
XdPrint(L"CException");
}
return 0;
}
@ -508,11 +527,11 @@ std::string GScn_Drv::GetFWVersion()
std::lock_guard<std::mutex> lck(m_imgLocker);
std::string pFWVersion = " ";
USBCB usbcb = { GET_FW_VERSION,0,0 };
XdPrint("Get GetFWVersion");
XdPrint(L"Get GetFWVersion");
m_usb->write_bulk(&usbcb, sizeof(usbcb));
CString cslog;
cslog.Format("GetFWVersion Read_Data %d",usbcb.u32_Data);
cslog.Format(L"GetFWVersion Read_Data %d",usbcb.u32_Data);
m_usb->read_bulk(&pFWVersion[0], 10);
return pFWVersion;
@ -541,16 +560,21 @@ void GScn_Drv::SetSerialNum(std::string pvalue)
return;
}
std::string GScn_Drv::GetKernelVersion()
{
return "un support";
}
int GScn_Drv::GetScanNum()
{
std::lock_guard<std::mutex> lck(m_imgLocker);
USBCB usbcb = { GET_SCANN_NUM,0,4 };
DWORD transfer;
XdPrint("Get GetScanNum");
XdPrint(L"Get GetScanNum");
m_usb->write_bulk(&usbcb, sizeof(usbcb));
CString cslog;
cslog.Format("GetScanNum Read_Data %d",usbcb.u32_Data);
cslog.Format(L"GetScanNum Read_Data %d",usbcb.u32_Data);
//WriteLog(cslog);
m_usb->read_bulk(&usbcb, sizeof(usbcb));
@ -562,7 +586,7 @@ void GScn_Drv::ClrRollerNum()
std::lock_guard<std::mutex> lck(m_imgLocker);
USBCB usbcb = { CLR_ROLLER_NUM,0,4 };
DWORD transfer;
XdPrint("Get ClrRollerNum");
XdPrint(L"Get ClrRollerNum");
m_usb->write_bulk(&usbcb, sizeof(usbcb));
return;
}
@ -572,7 +596,7 @@ void GScn_Drv::ClrScanNum()
std::lock_guard<std::mutex> lck(m_imgLocker);
USBCB usbcb = { CLR_SCAN_NUM,0,4 };
DWORD transfer;
XdPrint("Get ClrScanNum");
XdPrint(L"Get ClrScanNum");
m_usb->write_bulk(&usbcb, sizeof(usbcb));
return;
}
@ -648,7 +672,7 @@ std::string GScn_Drv::GetSerialNum()
str.resize(14);
USBCB usbcb = { GET_SERIAL,0,14 };
m_usb->write_bulk(&usbcb, sizeof(usbcb));
XdPrint("GetSerialNum Read_Data %d",usbcb.u32_Data);
XdPrint(L"GetSerialNum Read_Data %d",usbcb.u32_Data);
m_usb->read_bulk(&str, 14);
return str;
}

View File

@ -27,6 +27,7 @@ public:
virtual void SetFWVersion();
virtual std::string GetSerialNum();
virtual void SetSerialNum(std::string serial);
virtual std::string GetKernelVersion();
virtual void SetRatio(int tyepe, int ration);
virtual void GetRatio(int type, int& ratio);
virtual void Reboot();
@ -71,6 +72,12 @@ public:
virtual void GetSleepTime(int& sleeptime);
virtual void SetSleepTime(int sleeptime);
virtual void GetFlatMaxBright(bool iscolor, unsigned int& val);
virtual void SetFlatMaxBright(bool iscolor, unsigned int val);
virtual void SetFlatCallback(std::function<void(std::string)> func);
virtual void GetSpeedMode(int& speedmode, bool get);
private:
volatile int devState;
volatile bool m_bRun;
@ -95,4 +102,5 @@ private:
DWORD usbmain();
void Pop_Image();
HGScanConfig m_config;
std::function<void(std::string)> m_flatcallback;
};

View File

@ -1,130 +0,0 @@
[ColorCorrection]
;²ÊɫУÕýģʽ
FRExposure =900
FGExposure =900
FBExposure =900
F1Gain =30
F2Gain =30
F3Gain =30
F4Gain =30
F5Gain =30
F6Gain =30
F1Offset =255
F2Offset =255
F3Offset =255
F4Offset =255
F5Offset =255
F6Offset =255
BRExposure =900
BGExposure =900
BBExposure =900
B1Gain =30
B2Gain =30
B3Gain =30
B4Gain =30
B5Gain =30
B6Gain =30
B1Offset =255
B2Offset =255
B3Offset =255
B4Offset =255
B5Offset =255
B6Offset =255
[ColorFlat]
;²ÊÉ«
FRExposure =340
FGExposure =620
FBExposure =324
F1Gain =24
F2Gain =24
F3Gain =24
F4Gain =24
F5Gain =24
F6Gain =24
F1Offset =117
F2Offset =117
F3Offset =117
F4Offset =117
F5Offset =117
F6Offset =117
BRExposure =233
BGExposure =418
BBExposure =220
B1Gain =24
B2Gain =24
B3Gain =24
B4Gain =24
B5Gain =24
B6Gain =24
B1Offset =64
B2Offset =64
B3Offset =64
B4Offset =64
B5Offset =64
B6Offset =64
[GrayCorrection]
;»Ò¶ÈУÕýģʽ
FRExposure =200
FGExposure =200
FBExposure =200
F1Gain =30
F2Gain =30
F3Gain =30
F4Gain =30
F5Gain =30
F6Gain =30
F1Offset =255
F2Offset =255
F3Offset =255
F4Offset =255
F5Offset =255
F6Offset =255
BRExposure =200
BGExposure =200
BBExposure =200
B1Gain =30
B2Gain =30
B3Gain =30
B4Gain =30
B5Gain =30
B6Gain =30
B1Offset =255
B2Offset =255
B3Offset =255
B4Offset =255
B5Offset =255
B6Offset =255
[GrayFlat]
;»Ò¶È
FRExposure =340
FGExposure =620
FBExposure =324
F1Gain =24
F2Gain =24
F3Gain =24
F4Gain =24
F5Gain =24
F6Gain =24
F1Offset =117
F2Offset =117
F3Offset =117
F4Offset =117
F5Offset =117
F6Offset =117
BRExposure =233
BGExposure =418
BBExposure =220
B1Gain =24
B2Gain =24
B3Gain =24
B4Gain =24
B5Gain =24
B6Gain =24
B1Offset =64
B2Offset =64
B3Offset =64
B4Offset =64
B5Offset =64
B6Offset =64