3288 400 敦南cis功能适配

This commit is contained in:
lovelyyoung 2022-01-26 17:05:59 +08:00
parent 21b4849332
commit a285d89660
18 changed files with 279 additions and 118 deletions

View File

@ -46,6 +46,7 @@ BEGIN_MESSAGE_MAP(CA3, CDialog)
ON_BN_CLICKED(IDC_BTNSETSPEED, &CA3::OnBnClickedBtnsetspeed) ON_BN_CLICKED(IDC_BTNSETSPEED, &CA3::OnBnClickedBtnsetspeed)
ON_BN_CLICKED(IDC_BTNGETSPEED, &CA3::OnBnClickedBtngetspeed) ON_BN_CLICKED(IDC_BTNGETSPEED, &CA3::OnBnClickedBtngetspeed)
ON_BN_CLICKED(IDC_BTNGETIP, &CA3::OnBnClickedBtngetip) ON_BN_CLICKED(IDC_BTNGETIP, &CA3::OnBnClickedBtngetip)
ON_BN_CLICKED(IDC_BTNGETSYSINFO, &CA3::OnBnClickedBtnGetSysInfo)
END_MESSAGE_MAP() END_MESSAGE_MAP()
@ -363,3 +364,13 @@ void CA3::OnBnClickedBtngetip()
SetDlgItemText(IDC_LBIPADDR, vs); SetDlgItemText(IDC_LBIPADDR, vs);
} }
} }
void CA3::OnBnClickedBtnGetSysInfo()
{
auto parent = (CHuaGoCorrectDlg*)GetParent();
if (parent->m_drv.get() && parent->m_drv->IsConnected()) {
std::string version = parent->m_drv->GetSysInfo();
CString vs(version.c_str());
MessageBox(vs, TEXT("ϵͳÐÅÏ¢"),MB_OK);
}
}

View File

@ -28,7 +28,7 @@ public:
afx_msg void OnBnClickedBtnsetuvsp(); afx_msg void OnBnClickedBtnsetuvsp();
afx_msg void OnBnClickedBtngetcolorsp(); afx_msg void OnBnClickedBtngetcolorsp();
afx_msg void OnBnClickedBtnsetcolorsp(); afx_msg void OnBnClickedBtnsetcolorsp();
afx_msg void OnBnClickedBtnGetSysInfo();
private: private:
void OnGetOrSetSp(bool get, int type); void OnGetOrSetSp(bool get, int type);
public: public:

View File

@ -265,7 +265,8 @@ void CA4::OnBnClickedBtnGethor()
auto parent = (CHuaGoCorrectDlg*)GetParent(); auto parent = (CHuaGoCorrectDlg*)GetParent();
int ratio = 0; int ratio = 0;
if (parent->m_drv.get() && parent->m_drv->IsConnected()) { if (parent->m_drv.get() && parent->m_drv->IsConnected()) {
parent->m_drv->GetRatio(0, ratio); int dpi = parent->GetSelectDPIIndex() == 0 ? 1 : (parent->GetSelectDPIIndex() == 1 ? 2 : 3);
parent->m_drv->GetRatio(0, ratio, dpi);
float f_ratio = *(float*)∶ float f_ratio = *(float*)∶
CString str; CString str;
str.Format(L"%.4f", f_ratio); str.Format(L"%.4f", f_ratio);
@ -279,7 +280,8 @@ void CA4::OnBnClickedBtnGetver()
auto parent = (CHuaGoCorrectDlg*)GetParent(); auto parent = (CHuaGoCorrectDlg*)GetParent();
int ratio = 0; int ratio = 0;
if (parent->m_drv.get() && parent->m_drv->IsConnected()) { if (parent->m_drv.get() && parent->m_drv->IsConnected()) {
parent->m_drv->GetRatio(1, ratio); int dpi = parent->GetSelectDPIIndex() == 0 ? 1 : (parent->GetSelectDPIIndex() == 1 ? 2 : 3);
parent->m_drv->GetRatio(1, ratio, dpi);
float f_ratio = *(float*)∶ float f_ratio = *(float*)∶
CString str; CString str;
str.Format(L"%.4f", f_ratio); str.Format(L"%.4f", f_ratio);
@ -292,13 +294,14 @@ void CA4::OnBnClickedBtnSethor()
{ {
auto parent = (CHuaGoCorrectDlg*)GetParent(); auto parent = (CHuaGoCorrectDlg*)GetParent();
if (parent->m_drv.get() && parent->m_drv->IsConnected()) { if (parent->m_drv.get() && parent->m_drv->IsConnected()) {
int dpi = parent->GetSelectDPIIndex() == 0 ? 1 : (parent->GetSelectDPIIndex() == 1 ? 2 : 3);
CString str; CString str;
GetDlgItemText(IDC_tbxHOR, str); GetDlgItemText(IDC_tbxHOR, str);
USES_CONVERSION; USES_CONVERSION;
std::string s_str(W2A(str)); std::string s_str(W2A(str));
float f_value = atof(s_str.c_str()); float f_value = atof(s_str.c_str());
int value = *(int*)&f_value; int value = *(int*)&f_value;
parent->m_drv->SetRatio(0, value); parent->m_drv->SetRatio(0, value, dpi);
} }
} }
@ -307,13 +310,14 @@ void CA4::OnBnClickedBtnSetver()
{ {
auto parent = (CHuaGoCorrectDlg*)GetParent(); auto parent = (CHuaGoCorrectDlg*)GetParent();
if (parent->m_drv.get() && parent->m_drv->IsConnected()) { if (parent->m_drv.get() && parent->m_drv->IsConnected()) {
int dpi = parent->GetSelectDPIIndex() == 0 ? 1 : (parent->GetSelectDPIIndex() == 1 ? 2 : 3);
CString str; CString str;
GetDlgItemText(IDC_tbxVER, str); GetDlgItemText(IDC_tbxVER, str);
USES_CONVERSION; USES_CONVERSION;
std::string s_str(W2A(str)); std::string s_str(W2A(str));
float f_value = atof(s_str.c_str()); float f_value = atof(s_str.c_str());
int value = *(int*)&f_value; int value = *(int*)&f_value;
parent->m_drv->SetRatio(1, value); parent->m_drv->SetRatio(1, value, dpi);
} }
} }

Binary file not shown.

Binary file not shown.

View File

@ -234,6 +234,7 @@ opencv_imgproc2410d.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ClInclude Include="MutexEx.h" /> <ClInclude Include="MutexEx.h" />
<ClInclude Include="PublicFunc.h" /> <ClInclude Include="PublicFunc.h" />
<ClInclude Include="Resource.h" /> <ClInclude Include="Resource.h" />
<ClInclude Include="ScannerTypeConfig.h" />
<ClInclude Include="scn_config.h" /> <ClInclude Include="scn_config.h" />
<ClInclude Include="scn_usb.h" /> <ClInclude Include="scn_usb.h" />
<ClInclude Include="stdafx.h" /> <ClInclude Include="stdafx.h" />
@ -255,6 +256,7 @@ opencv_imgproc2410d.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ClCompile Include="jpeglib.cpp" /> <ClCompile Include="jpeglib.cpp" />
<ClCompile Include="JsonConfig.cpp" /> <ClCompile Include="JsonConfig.cpp" />
<ClCompile Include="PublicFunc.cpp" /> <ClCompile Include="PublicFunc.cpp" />
<ClCompile Include="ScannerTypeConfig.cpp" />
<ClCompile Include="scn_config.cpp" /> <ClCompile Include="scn_config.cpp" />
<ClCompile Include="scn_usb.cpp" /> <ClCompile Include="scn_usb.cpp" />
<ClCompile Include="stdafx.cpp"> <ClCompile Include="stdafx.cpp">

View File

@ -123,6 +123,9 @@
<ClInclude Include="vendorconfig.h"> <ClInclude Include="vendorconfig.h">
<Filter>头文件</Filter> <Filter>头文件</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="ScannerTypeConfig.h">
<Filter>头文件</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="HuaGoCorrect.cpp"> <ClCompile Include="HuaGoCorrect.cpp">
@ -176,6 +179,9 @@
<ClCompile Include="vendorconfig.cpp"> <ClCompile Include="vendorconfig.cpp">
<Filter>源文件</Filter> <Filter>源文件</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="ScannerTypeConfig.cpp">
<Filter>源文件</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ResourceCompile Include="HuaGoCorrect.rc"> <ResourceCompile Include="HuaGoCorrect.rc">

View File

@ -177,10 +177,10 @@ BOOL CHuaGoCorrectDlg::OnInitDialog()
// 根据调整好的tabRect放置m_VisonDlg子对话框并设置为隐藏 // 根据调整好的tabRect放置m_VisonDlg子对话框并设置为隐藏
m_VisonDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); m_VisonDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
m_ComboxDpi.InsertString(0, _T("300")); m_ComboxDpi.InsertString(0, _T("200"));
m_ComboxDpi.InsertString(1, _T("200")); m_ComboxDpi.InsertString(1, _T("300"));
m_ComboxDpi.InsertString(2, _T("150")); m_ComboxDpi.InsertString(2, _T("600"));
m_ComboxDpi.SetCurSel(1); m_ComboxDpi.SetCurSel(0);
m_ComboxColor.InsertString(0, _T("gray")); m_ComboxColor.InsertString(0, _T("gray"));
m_ComboxColor.InsertString(1, _T("color")); m_ComboxColor.InsertString(1, _T("color"));
@ -345,8 +345,8 @@ void CHuaGoCorrectDlg::Scan()
m_drv->PID == 0x8739 || m_drv->PID == 0x8739 ||
m_drv->PID == 0x8629) m_drv->PID == 0x8629)
{ {
config.g200params.dpi = 1;//only support 200DPI config.g200params.dpi = m_iDpiIndex==0?1:(m_iDpiIndex==1?2:3);//only support 200DPI
config.g200params.paper = 2; config.g200params.paper = 16;
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.color = m_iColorIndex == 1 ? 1 : 0;
config.g200params.double_feed_enbale = TRUE; config.g200params.double_feed_enbale = TRUE;
@ -355,7 +355,7 @@ void CHuaGoCorrectDlg::Scan()
} }
else else
{ {
config.g400params.dpi = 1;//only support 200DPI config.g400params.dpi = m_iDpiIndex == 0 ? 1 : (m_iDpiIndex == 1 ? 2 : 3);//only support 200DPI ;// 1;//only support 200DPI
config.g400params.pageSize = 0; config.g400params.pageSize = 0;
config.g400params.isCorrect = !((CButton*)GetDlgItem(IDC_CKBORGINIMG))->GetCheck(); config.g400params.isCorrect = !((CButton*)GetDlgItem(IDC_CKBORGINIMG))->GetCheck();
config.g400params.isColor = m_iColorIndex == 1 ? 1 : 0; config.g400params.isColor = m_iColorIndex == 1 ? 1 : 0;

View File

@ -110,6 +110,9 @@ public:
afx_msg void OnCbnSelchangeCmbUsbs(); afx_msg void OnCbnSelchangeCmbUsbs();
afx_msg void OnBnClickedBtnstart(); afx_msg void OnBnClickedBtnstart();
afx_msg void OnBnClickedBtnstop(); afx_msg void OnBnClickedBtnstop();
int GetSelectDPIIndex() {
return m_iDpiIndex;
}
private: private:
CString updateFilePath; CString updateFilePath;
std::thread m_updateThread; std::thread m_updateThread;

View File

@ -18,8 +18,8 @@ public:
virtual std::string GetMbVersion() = 0; virtual std::string GetMbVersion() = 0;
virtual std::string GetIpAddr() = 0; virtual std::string GetIpAddr() = 0;
virtual std::string GetKernelVersion() =0; virtual std::string GetKernelVersion() =0;
virtual void SetRatio(int tyepe, int ration) = 0; virtual void SetRatio(int tyepe, int ration,int dpi=0) = 0;
virtual void GetRatio(int type, int& ratio) = 0; virtual void GetRatio(int type, int& ratio,int dpi=0) = 0;
virtual void Reboot(bool loader=false) = 0; virtual void Reboot(bool loader=false) = 0;
virtual void PowerOff() = 0; virtual void PowerOff() = 0;
virtual bool is_scan() = 0; virtual bool is_scan() = 0;
@ -54,6 +54,7 @@ public:
virtual void SetFlatCallback(std::function<void(std::string)> func) = 0; virtual void SetFlatCallback(std::function<void(std::string)> func) = 0;
virtual void GetSpeedMode(int& speedmode,bool get) = 0 ; virtual void GetSpeedMode(int& speedmode,bool get) = 0 ;
virtual void GetOrSetVIDPID(int& value, bool get) = 0; virtual void GetOrSetVIDPID(int& value, bool get) = 0;
virtual std::string GetSysInfo() = 0;
void SetPath(std::string csFilePath) void SetPath(std::string csFilePath)
{ {
csPath = csFilePath; csPath = csFilePath;

Binary file not shown.

View File

@ -0,0 +1,61 @@
#include "stdafx.h"
#include "ScannerTypeConfig.h"
#include "json.hpp"
#include <io.h>
#include <iostream>
#include <fstream>
ScannerTypeConfig::ScannerTypeConfig()
{
if (_access("scannerconfig.json", 0) != 0)
{
json j = json::array();
{
for (size_t i = 0; i < m_supscanner.size(); i++)
{
json t_j;
auto tsup = m_supscanner[i];
to_json(t_j, tsup);
j.push_back(t_j);
}
}
std::ofstream ofs("scannerconfig.json");
//ofs << std::setw(4) << js << std::endl;
}
}
ScannerTypeConfig::~ScannerTypeConfig()
{
}
std::vector<SupScanner> ScannerTypeConfig::GetSupScanners()
{
return std::vector<SupScanner>();
}
void ScannerTypeConfig::AddSupScanner(SupScanner add)
{
}
void ScannerTypeConfig::initconfig()
{
}
void ScannerTypeConfig::from_json(json& j, SupScanner& sup)
{
j.at("VID").get_to(sup.VID);
j.at("PID").get_to(sup.PID);
j.at("ScannerType").get_to(sup.ScannerType);
}
void ScannerTypeConfig::to_json(json& j, SupScanner& sup)
{
j = json{
{"VID",sup.VID},
{"PID",sup.PID},
{"ScannerType",sup.ScannerType}
};
}

View File

@ -0,0 +1,29 @@
#pragma once
#include "commondef.h"
#include <map>
#include <vector>
#include "json.hpp"
using json = nlohmann::json;
class ScannerTypeConfig
{
public:
ScannerTypeConfig();
~ScannerTypeConfig();
std::vector<SupScanner> GetSupScanners();
void AddSupScanner(SupScanner add);
private:
void initconfig();
void from_json(json& j, SupScanner& sup);
void to_json(json& j, SupScanner& sup);
const std::vector< SupScanner> m_supscanner = {
{0x064b,0x7823,ScannerType::S_G139},
{0x3072,0x0139,ScannerType::S_G139},
{0x3072,0x0239,ScannerType::S_G239},
{0x3072,0x0300,ScannerType::S_G300_3288},
{0x3072,0x0300,ScannerType::S_G300UV_3288},
{0x3072,0x0339,ScannerType::S_G300_3399},
{0x3072,0x0400,ScannerType::S_G400_3288},
{0x3072,0x0439,ScannerType::S_G400_3399},
};
};

View File

@ -167,7 +167,9 @@ enum tagUsbKeyWords :unsigned int
GET_UV_EXPOSA = 0x100, GET_UV_EXPOSA = 0x100,
GET_UV_EXPOSB = 0x101, GET_UV_EXPOSB = 0x101,
SET_UV_EXPOSA = 0x102, SET_UV_EXPOSA = 0x102,
SET_UV_EXPOSB = 0x103 SET_UV_EXPOSB = 0x103,
GETSYSINFO_LEN = 0x200,
GETSYSINFO = 0x201
}; };
typedef enum tagUsbKeyWords UsbKeyWords, * PUsbKeyWords; typedef enum tagUsbKeyWords UsbKeyWords, * PUsbKeyWords;
@ -416,4 +418,22 @@ struct HGEIntInfo
HGType From; HGType From;
unsigned int Code; unsigned int Code;
unsigned int Img_Index; unsigned int Img_Index;
}; };
enum class ScannerType
{
S_G139,
S_G239,
S_G300_3288,
S_G300UV_3288,
S_G300_3399,
S_G400_3288,
S_G400_3399
};
typedef struct {
unsigned short VID;
unsigned short PID;
ScannerType ScannerType;
}SupScanner;

View File

@ -197,12 +197,12 @@ std::string gscan3399::GetKernelVersion()
return version; return version;
} }
void gscan3399::SetRatio(int tyepe, int ration) void gscan3399::SetRatio(int tyepe, int ration,int dpi)
{ {
scanner_write_reg(m_usb, tyepe == 0 ? SR_SET_H_RATIO : SR_SET_V_RATIO, ration); scanner_write_reg(m_usb, tyepe == 0 ? SR_SET_H_RATIO : SR_SET_V_RATIO, ration);
} }
void gscan3399::GetRatio(int type, int& ratio) void gscan3399::GetRatio(int type, int& ratio,int dpi)
{ {
ratio = scanner_read_reg(m_usb, type == 0 ? SR_GET_H_RATIO : SR_GET_V_RATIO); ratio = scanner_read_reg(m_usb, type == 0 ? SR_GET_H_RATIO : SR_GET_V_RATIO);
} }
@ -532,6 +532,11 @@ void gscan3399::GetOrSetVIDPID(int& value, bool get)
} }
} }
std::string gscan3399::GetSysInfo()
{
return "Unsupported";
}
void gscan3399::usbcallback(bool isleft, void* usrdata) void gscan3399::usbcallback(bool isleft, void* usrdata)
{ {
gscan3399* This = (gscan3399*)usrdata; gscan3399* This = (gscan3399*)usrdata;

View File

@ -19,8 +19,8 @@ public:
virtual std::string GetKernelVersion(); virtual std::string GetKernelVersion();
virtual std::string GetIpAddr(); virtual std::string GetIpAddr();
virtual std::string GetMbVersion(); virtual std::string GetMbVersion();
virtual void SetRatio(int tyepe, int ration); virtual void SetRatio(int tyepe, int ration,int dpi=0);
virtual void GetRatio(int type, int& ratio); virtual void GetRatio(int type, int& ratio,int dpi=0);
virtual void Reboot(bool loader=false); virtual void Reboot(bool loader=false);
virtual void PowerOff(); virtual void PowerOff();
virtual bool is_scan(); virtual bool is_scan();
@ -72,7 +72,7 @@ public:
virtual void SetFlatCallback(std::function<void(std::string)> func); virtual void SetFlatCallback(std::function<void(std::string)> func);
virtual void GetSpeedMode(int& speedmode,bool getorset); virtual void GetSpeedMode(int& speedmode,bool getorset);
virtual void GetOrSetVIDPID(int& value, bool get) override; virtual void GetOrSetVIDPID(int& value, bool get) override;
virtual std::string GetSysInfo() override;
private: private:
static void usbcallback(bool isleft, void* usrdata); static void usbcallback(bool isleft, void* usrdata);
int read_data(void* data, int length, int timeout); int read_data(void* data, int length, int timeout);

View File

@ -14,10 +14,10 @@
//#define BYTE unsigned char //#define BYTE unsigned char
GScn_Drv::GScn_Drv() GScn_Drv::GScn_Drv()
:selectDeviceIndex(-1),m_scannerType(-1),m_isScanning(false) :selectDeviceIndex(-1), m_scannerType(-1), m_isScanning(false)
{ {
//run(); //run();
XdPrint(L"Init GScn_Drv() \n"); XdPrint(L"Init GScn_Drv() \n");
m_bRun = false; m_bRun = false;
@ -25,7 +25,7 @@ GScn_Drv::GScn_Drv()
InitMSGMap(); InitMSGMap();
InitScannerDiviceMap(); InitScannerDiviceMap();
} }
GScn_Drv::~GScn_Drv() GScn_Drv::~GScn_Drv()
@ -42,38 +42,38 @@ GScn_Drv::~GScn_Drv()
void GScn_Drv::InitMSGMap() void GScn_Drv::InitMSGMap()
{ {
if (ntcMsg.size()>0) if (ntcMsg.size() > 0)
ntcMsg.clear(); ntcMsg.clear();
ntcMsg[COUNT_MODE]="计数模式,请先退出计数模式!"; ntcMsg[COUNT_MODE] = "计数模式,请先退出计数模式!";
ntcMsg[NO_FEED]="无纸,请放置纸张!"; ntcMsg[NO_FEED] = "无纸,请放置纸张!";
ntcMsg[OPEN_COVER]="扫描仪开盖!"; ntcMsg[OPEN_COVER] = "扫描仪开盖!";
ntcMsg[FEED_IN_ERROR]="拾纸错误!"; ntcMsg[FEED_IN_ERROR] = "拾纸错误!";
ntcMsg[PAPER_JAM]="卡纸!"; ntcMsg[PAPER_JAM] = "卡纸!";
ntcMsg[DETECT_DOUBLE_FEED]="双张!"; ntcMsg[DETECT_DOUBLE_FEED] = "双张!";
ntcMsg[DETECT_STAPLE]="订书针!"; ntcMsg[DETECT_STAPLE] = "订书针!";
ntcMsg[PAPER_SKEW]="纸张歪斜!"; ntcMsg[PAPER_SKEW] = "纸张歪斜!";
ntcMsg[HARDWARE_ERROR]="硬件错误!"; ntcMsg[HARDWARE_ERROR] = "硬件错误!";
ntcMsg[PC_SCAN_BUSY_or_ERROR]="PC错误"; ntcMsg[PC_SCAN_BUSY_or_ERROR] = "PC错误";
} }
void GScn_Drv::InitScannerDiviceMap() void GScn_Drv::InitScannerDiviceMap()
{ {
if (devType.size()>0) if (devType.size() > 0)
{ {
devType.clear(); devType.clear();
} }
devType["G100"]=G100; devType["G100"] = G100;
devType["G200"]=G200; devType["G200"] = G200;
devType["G300"]=G300; devType["G300"] = G300;
devType["G400"]=G400; devType["G400"] = G400;
devType["G500"]=G500; devType["G500"] = G500;
} }
static int iNum = 0; static int iNum = 0;
void GScn_Drv::open(int vid, int pid,int index) void GScn_Drv::open(int vid, int pid, int index)
{ {
auto devs = UsbScan_List::find_vid_pid(vid, pid); auto devs = UsbScan_List::find_vid_pid(vid, pid);
@ -83,9 +83,9 @@ void GScn_Drv::open(int vid, int pid,int index)
m_usb->open();//?同时存在多个同种扫描设备时默认选取第一个vid pid匹配的设备 m_usb->open();//?同时存在多个同种扫描设备时默认选取第一个vid pid匹配的设备
VID = vid; VID = vid;
PID = pid; PID = pid;
selectDeviceIndex=index; selectDeviceIndex = index;
m_scannerType=G300; m_scannerType = G300;
h= ::FindWindow(NULL, L"HGScannerTool"); h = ::FindWindow(NULL, L"HGScannerTool");
} }
} }
@ -108,7 +108,7 @@ std::string GScn_Drv::popMat(int num)
} }
int GScn_Drv::aquire_image(std::string& image,int num) int GScn_Drv::aquire_image(std::string& image, int num)
{ {
while (true) while (true)
{ {
@ -166,7 +166,7 @@ void GScn_Drv::SetExpose(int aside, int bside)
void GScn_Drv::GetSptime(int type, int& time) void GScn_Drv::GetSptime(int type, int& time)
{ {
USBCB usb = {0,0,0}; USBCB usb = { 0,0,0 };
switch (type) switch (type)
{ {
case 0: case 0:
@ -213,7 +213,7 @@ void GScn_Drv::GetSleepTime(int& sleeptime)
USBCB usb = { GET_SLEEP_TIME,0,0 }; USBCB usb = { GET_SLEEP_TIME,0,0 };
m_usb->write_bulk(&usb, sizeof(usb)); m_usb->write_bulk(&usb, sizeof(usb));
m_usb->read_bulk(&usb, sizeof(usb)); m_usb->read_bulk(&usb, sizeof(usb));
sleeptime=usb.u32_Data; sleeptime = usb.u32_Data;
} }
} }
@ -243,7 +243,7 @@ void GScn_Drv::GetSpeedMode(int& speedmode, bool get)
{ {
if (m_usb.get() && m_usb->is_connected()) if (m_usb.get() && m_usb->is_connected())
{ {
USBCB speed = { get ? GET_SPEED_MODE:SET_SPEED_MODE,speedmode,0 }; USBCB speed = { get ? GET_SPEED_MODE : SET_SPEED_MODE,speedmode,0 };
m_usb->write_bulk(&speed, sizeof(speed)); m_usb->write_bulk(&speed, sizeof(speed));
if (get) if (get)
{ {
@ -267,6 +267,24 @@ void GScn_Drv::GetOrSetVIDPID(int& value, bool get)
} }
} }
std::string GScn_Drv::GetSysInfo()
{
UsbKeyWords keyword = GETSYSINFO_LEN;
USBCB cmd = { keyword ,0,0 };
m_usb->write_bulk(&cmd, sizeof(cmd));
m_usb->read_bulk(&cmd, sizeof(cmd));
int len = cmd.u32_Count;
string str;
str.resize(4096);
cmd.u32_CMD = GETSYSINFO;
cmd.u32_Count = 0;
cmd.u32_Data = 0;
m_usb->write_bulk(&cmd, sizeof(cmd));
m_usb->read_bulk(&str[0], len);
int aa = 0;
return str;
}
void GScn_Drv::reset() void GScn_Drv::reset()
{ {
while (!m_pImages.empty()) while (!m_pImages.empty())
@ -282,8 +300,8 @@ void GScn_Drv::pushMat(JpegBuffer& data)
} }
bool GScn_Drv::IsConnected() bool GScn_Drv::IsConnected()
{ {
if(m_usb.get()) if (m_usb.get())
return m_usb->is_connected(); return m_usb->is_connected();
else else
return false; return false;
@ -294,7 +312,7 @@ bool GScn_Drv::IsConnected()
cv::Mat GScn_Drv::Get_Img_Data(int bufferSize) cv::Mat GScn_Drv::Get_Img_Data(int bufferSize)
{ {
std::lock_guard<std::mutex> lck(m_Locker); std::lock_guard<std::mutex> lck(m_Locker);
cv::Mat iData(1, bufferSize,CV_8UC1); cv::Mat iData(1, bufferSize, CV_8UC1);
USBCB usbcb = { GET_IMAGE,0,bufferSize }; USBCB usbcb = { GET_IMAGE,0,bufferSize };
DWORD transfer; DWORD transfer;
@ -399,8 +417,8 @@ DWORD GScn_Drv::usbmain()
try try
{ {
while (m_bRun) while (m_bRun)
{ {
if (devState==DEV_ISRUNNING) if (devState == DEV_ISRUNNING)
{ {
if (!IsConnected()) if (!IsConnected())
{ {
@ -411,60 +429,60 @@ DWORD GScn_Drv::usbmain()
switch (usbcb.u32_Data) switch (usbcb.u32_Data)
{ {
case HAVE_IMAGE: case HAVE_IMAGE:
{
int totalNum = usbcb.u32_Count;
DWORD transferCount = 0;
iNum++;
cv::Mat imgData = Get_Img_Data(totalNum);
switch (m_scannerType)
{ {
int totalNum = usbcb.u32_Count; case G100:
DWORD transferCount = 0; case G200:
iNum++; {
cv::Mat imgData = Get_Img_Data(totalNum); cv::Mat bufferF = imgData.clone();
switch(m_scannerType) cv::Mat bufferB = imgData.clone();
int j = 0;
int k = 0;
for (int i = 0; i < totalNum / 1024; i++)
{ {
case G100: if (imgData.data[1023 + i * 1024] == 0)
case G200:
{ {
cv::Mat bufferF = imgData.clone(); j++;
cv::Mat bufferB = imgData.clone(); memcpy(&(bufferB.data[(j - 1) * 1023]), &(imgData.data[(j + k - 1) * 1024]), 1023);
int j = 0; }
int k = 0; else if (imgData.data[1023 + i * 1024] == 255)
for (int i = 0; i < totalNum / 1024; i++)
{ {
if (imgData.data[1023 + i * 1024] == 0) k++;
{ memcpy(&(bufferF.data[(k - 1) * 1023]), &(imgData.data[(j + k - 1) * 1024]), 1023);
j++;
memcpy(&(bufferB.data[(j - 1) * 1023]), &(imgData.data[(j + k - 1) * 1024]), 1023);
}
else if (imgData.data[1023 + i * 1024] == 255)
{
k++;
memcpy(&(bufferF.data[(k - 1) * 1023]), &(imgData.data[(j + k - 1) * 1024]), 1023);
}
} }
pushMat(JpegBuffer(bufferB,m_config.g200params.color==1?TJPF_BGR:TJPF_GRAY,0,0));
pushMat(JpegBuffer(bufferF, m_config.g200params.color == 1 ? TJPF_BGR : TJPF_GRAY,1,0));
break;
}
case G300:
case G400:
case G500:
{
pushMat(JpegBuffer(imgData, m_config.g200params.color == 1 ? TJPF_BGR : TJPF_GRAY,0,0));
//auto img = fopen("inmg.jpg", "wb+");
//fwrite(imgData.data, 1, totalNum, img);
//fclose(img);
} }
break; pushMat(JpegBuffer(bufferB, m_config.g200params.color == 1 ? TJPF_BGR : TJPF_GRAY, 0, 0));
default: pushMat(JpegBuffer(bufferF, m_config.g200params.color == 1 ? TJPF_BGR : TJPF_GRAY, 1, 0));
break;
}
Pop_Image();
break; break;
} }
case G300:
case G400:
case G500:
{
pushMat(JpegBuffer(imgData, m_config.g200params.color == 1 ? TJPF_BGR : TJPF_GRAY, 0, 0));
//auto img = fopen("inmg.jpg", "wb+");
//fwrite(imgData.data, 1, totalNum, img);
//fclose(img);
}
break;
default:
break;
}
Pop_Image();
break;
}
case STOP_SCAN: case STOP_SCAN:
{ {
m_isScanning=false; m_isScanning = false;
devState = DEV_STOP; devState = DEV_STOP;
m_pImages.SetScanFlag(false); m_pImages.SetScanFlag(false);
break; break;
} }
case AUTO_FLAT_FINISHED: case AUTO_FLAT_FINISHED:
{ {
m_isScanning = false; m_isScanning = false;
@ -499,7 +517,7 @@ DWORD GScn_Drv::usbmain()
case DETECT_STAPLE: case DETECT_STAPLE:
case PAPER_SKEW: case PAPER_SKEW:
case HARDWARE_ERROR: case HARDWARE_ERROR:
case PC_SCAN_BUSY_or_ERROR:{ case PC_SCAN_BUSY_or_ERROR: {
USES_CONVERSION; USES_CONVERSION;
MessageBox(h, CString(ntcMsg[usbcb.u32_Data].c_str()), L"提示?", MB_OK | MB_ICONERROR); MessageBox(h, CString(ntcMsg[usbcb.u32_Data].c_str()), L"提示?", MB_OK | MB_ICONERROR);
devState = DEV_WRONG; devState = DEV_WRONG;
@ -567,7 +585,7 @@ void GScn_Drv::Scanner_StartScan(UINT16 count)
USBCB usbcb = { START_COMMAND,AUTO_SCAN_MODE ,0 }; USBCB usbcb = { START_COMMAND,AUTO_SCAN_MODE ,0 };
m_usb->write_bulk(&usbcb, sizeof(usbcb)); m_usb->write_bulk(&usbcb, sizeof(usbcb));
iNum = 0; iNum = 0;
m_pImages.pixType=m_config.g200params.color; m_pImages.pixType = m_config.g200params.color;
m_pImages.SetDevModel(m_scannerType); m_pImages.SetDevModel(m_scannerType);
m_pImages.SetFilePath(csPath); m_pImages.SetFilePath(csPath);
m_pImages.run(); m_pImages.run();
@ -581,14 +599,14 @@ std::string GScn_Drv::GetFWVersion()
{ {
if (m_usb->is_connected()) if (m_usb->is_connected())
{ {
std::lock_guard<std::mutex> lck(m_imgLocker); std::lock_guard<std::mutex> lck(m_imgLocker);
std::string pFWVersion = " "; std::string pFWVersion = " ";
USBCB usbcb = { GET_FW_VERSION,0,0 }; USBCB usbcb = { GET_FW_VERSION,0,0 };
XdPrint(L"Get GetFWVersion"); XdPrint(L"Get GetFWVersion");
m_usb->write_bulk(&usbcb, sizeof(usbcb)); m_usb->write_bulk(&usbcb, sizeof(usbcb));
CString cslog; CString cslog;
cslog.Format(L"GetFWVersion Read_Data %d",usbcb.u32_Data); cslog.Format(L"GetFWVersion Read_Data %d", usbcb.u32_Data);
m_usb->read_bulk(&pFWVersion[0], 10); m_usb->read_bulk(&pFWVersion[0], 10);
return pFWVersion; return pFWVersion;
@ -619,7 +637,7 @@ void GScn_Drv::SetSerialNum(std::string pvalue)
if (m_usb->is_connected()) if (m_usb->is_connected())
{ {
std::lock_guard<std::mutex> lck(m_imgLocker); std::lock_guard<std::mutex> lck(m_imgLocker);
USBCB sercmd = { SEND_SERIAL ,0,14}; USBCB sercmd = { SEND_SERIAL ,0,14 };
m_usb->write_bulk(&sercmd, sizeof(sercmd)); m_usb->write_bulk(&sercmd, sizeof(sercmd));
m_usb->write_bulk(&pvalue, pvalue.length()); m_usb->write_bulk(&pvalue, pvalue.length());
} }
@ -640,7 +658,7 @@ int GScn_Drv::GetScanNum()
m_usb->write_bulk(&usbcb, sizeof(usbcb)); m_usb->write_bulk(&usbcb, sizeof(usbcb));
CString cslog; CString cslog;
cslog.Format(L"GetScanNum Read_Data %d",usbcb.u32_Data); cslog.Format(L"GetScanNum Read_Data %d", usbcb.u32_Data);
//WriteLog(cslog); //WriteLog(cslog);
m_usb->read_bulk(&usbcb, sizeof(usbcb)); m_usb->read_bulk(&usbcb, sizeof(usbcb));
@ -694,7 +712,7 @@ void GScn_Drv::SendFlatData(CorrectParam param, int index)
CaptureParams GScn_Drv::GetFlatData() CaptureParams GScn_Drv::GetFlatData()
{ {
CaptureParams param = {0}; CaptureParams param = { 0 };
USBCB usbcb = { GET_FLAT_DATA,0,0 }; USBCB usbcb = { GET_FLAT_DATA,0,0 };
DWORD transfer; DWORD transfer;
m_usb->write_bulk(&usbcb, sizeof(usbcb)); m_usb->write_bulk(&usbcb, sizeof(usbcb));
@ -728,7 +746,7 @@ void GScn_Drv::DevStateChange()
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
std::string GScn_Drv::GetSerialNum() std::string GScn_Drv::GetSerialNum()
{ {
if (!m_usb.get()&&!m_usb->is_connected()) if (!m_usb.get() && !m_usb->is_connected())
{ {
return ""; return "";
} }
@ -738,22 +756,22 @@ std::string GScn_Drv::GetSerialNum()
str.resize(14); str.resize(14);
USBCB usbcb = { GET_SERIAL,0,14 }; USBCB usbcb = { GET_SERIAL,0,14 };
m_usb->write_bulk(&usbcb, sizeof(usbcb)); m_usb->write_bulk(&usbcb, sizeof(usbcb));
XdPrint(L"GetSerialNum Read_Data %d",usbcb.u32_Data); XdPrint(L"GetSerialNum Read_Data %d", usbcb.u32_Data);
m_usb->read_bulk(&str, 14); m_usb->read_bulk(&str, 14);
return str; return str;
} }
void GScn_Drv::SetRatio(int tyepe, int ration) void GScn_Drv::SetRatio(int tyepe, int ration, int dpi)
{ {
UsbKeyWords keyword = tyepe == 0 ? SET_JUST_COF_H : SET_JUST_COF_V; UsbKeyWords keyword = tyepe == 0 ? SET_JUST_COF_H : SET_JUST_COF_V;
USBCB cmd = { keyword ,ration,0}; USBCB cmd = { keyword ,ration,dpi };
m_usb->write_bulk(&cmd, sizeof(cmd)); m_usb->write_bulk(&cmd, sizeof(cmd));
} }
void GScn_Drv::GetRatio(int type, int& ratio) void GScn_Drv::GetRatio(int type, int& ratio, int dpi)
{ {
UsbKeyWords keyword = type == 0 ? GET_JUST_COF_H : GET_JUST_COF_V; UsbKeyWords keyword = type == 0 ? GET_JUST_COF_H : GET_JUST_COF_V;
USBCB cmd = { keyword ,0,0 }; USBCB cmd = { keyword ,0,dpi };
m_usb->write_bulk(&cmd, sizeof(cmd)); m_usb->write_bulk(&cmd, sizeof(cmd));
m_usb->read_bulk(&cmd, sizeof(cmd)); m_usb->read_bulk(&cmd, sizeof(cmd));
ratio = cmd.u32_Data; ratio = cmd.u32_Data;
@ -761,7 +779,7 @@ void GScn_Drv::GetRatio(int type, int& ratio)
void GScn_Drv::Reboot(bool loader) void GScn_Drv::Reboot(bool loader)
{ {
USBCB cmd = { REBOOT,loader?1:0,0 }; USBCB cmd = { REBOOT,loader ? 1 : 0,0 };
m_usb->write_bulk(&cmd, sizeof(cmd)); m_usb->write_bulk(&cmd, sizeof(cmd));
} }
@ -783,7 +801,7 @@ USBCB GScn_Drv::Get_Scanner_Status()
//XdPrint("Get_Scanner_Status Read_Data %d \n",usbcb.u32_Data); //XdPrint("Get_Scanner_Status Read_Data %d \n",usbcb.u32_Data);
m_usb->read_bulk(&usbcb,sizeof(usbcb)); m_usb->read_bulk(&usbcb, sizeof(usbcb));
//XdPrint("Get_Scanner_Status return usbcb \n",usbcb.u32_Data); //XdPrint("Get_Scanner_Status return usbcb \n",usbcb.u32_Data);
return usbcb; return usbcb;
@ -792,7 +810,7 @@ USBCB GScn_Drv::Get_Scanner_Status()
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
bool GScn_Drv::is_scan() bool GScn_Drv::is_scan()
{ {
return devState==DEV_ISRUNNING; return devState == DEV_ISRUNNING;
} }
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////

View File

@ -30,8 +30,8 @@ public:
virtual std::string GetMbVersion(); virtual std::string GetMbVersion();
virtual std::string GetIpAddr(); virtual std::string GetIpAddr();
virtual std::string GetKernelVersion(); virtual std::string GetKernelVersion();
virtual void SetRatio(int tyepe, int ration); virtual void SetRatio(int tyepe, int ration,int dpi=0);
virtual void GetRatio(int type, int& ratio); virtual void GetRatio(int type, int& ratio,int dpi=0);
virtual void Reboot(bool loader=false); virtual void Reboot(bool loader=false);
virtual void PowerOff() {}; virtual void PowerOff() {};
virtual bool is_scan()override; virtual bool is_scan()override;
@ -80,6 +80,7 @@ public:
virtual void SetFlatCallback(std::function<void(std::string)> func)override; virtual void SetFlatCallback(std::function<void(std::string)> func)override;
virtual void GetSpeedMode(int& speedmode, bool get)override; virtual void GetSpeedMode(int& speedmode, bool get)override;
virtual void GetOrSetVIDPID(int& value, bool get) override; virtual void GetOrSetVIDPID(int& value, bool get) override;
virtual std::string GetSysInfo() override;
private: private:
volatile int devState; volatile int devState;
volatile bool m_bRun; volatile bool m_bRun;