mirror of http://192.168.1.51:8099/lmh188/twain3.0
parent
bbb5c44a6e
commit
a778e653c7
|
@ -49,6 +49,12 @@ BOOL CAboutDlg::OnInitDialog()
|
|||
SetDlgItemText(IDC_LBSERIALNUMVALUE, serialnum);
|
||||
|
||||
SetDlgItemText(IDC_LBDERIVERVERSON, HG_VERSION_INFO);
|
||||
SetDlgItemText(IDC_LBCOMPANY, LIMIT_INFO);
|
||||
#ifndef MAKEHUAGAO
|
||||
GetDlgItem(IDC_PICABOUTHUAGO)->ShowWindow(FALSE);
|
||||
#endif
|
||||
SetDlgItemText(IDC_LBDESIGNERVALUE, COMPANY_NAME);
|
||||
SetDlgItemText(IDC_LBCOMPANYADDRESS, COMPANY_ADDRESS);
|
||||
return TRUE; // return TRUE unless you set the focus to a control
|
||||
// 异常: OCX 属性页应返回 FALSE
|
||||
}
|
||||
|
|
|
@ -46,7 +46,7 @@ BOOL CTwainUI::OnInitDialog()
|
|||
{
|
||||
CDialogEx::OnInitDialog();
|
||||
// Setup the tab control
|
||||
int nPageID = 0;
|
||||
this->SetWindowText(TWAIN_NAME);
|
||||
|
||||
auto dataChangeFunction = [this]() {
|
||||
m_pageImageProc->ImageProcPageUpdate(m_pageBasic->m_cmBoxColorMode->GetCurSel());
|
||||
|
@ -56,6 +56,7 @@ BOOL CTwainUI::OnInitDialog()
|
|||
UpdateUi();
|
||||
};
|
||||
|
||||
int nPageID = 0;
|
||||
m_pageBasic.reset(new CBasicPage(dataChangeFunction));
|
||||
m_pageBasic->Create(IDD_PAGEBASIC, this);
|
||||
m_pageBasic->SetScannerInfo(m_hardwareVersion, m_serialnum);
|
||||
|
|
|
@ -14,8 +14,6 @@ class CBasicPage;
|
|||
class CFeedPaperPage;
|
||||
class CBrightnessPage;
|
||||
|
||||
/*帮助文档存储路径*/
|
||||
#define DOCHELPPATH "C:/Windows/twain_32/HuagaoT/HuaGoScan TWAIN_Cs.chm"
|
||||
/*配置文件默认索引号*/
|
||||
#define SUPPORTRESNUMS 5
|
||||
static int Resolutions[SUPPORTRESNUMS] = {100,150,200,240,300};
|
||||
|
|
|
@ -103,19 +103,6 @@ public:
|
|||
void DoEvents() {
|
||||
MSG msg;
|
||||
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
|
||||
//if (msg.message != WM_LBUTTONUP)
|
||||
//{
|
||||
// DispatchMessage(&msg);
|
||||
// TranslateMessage(&msg);
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// if (!((msg.pt.x >= 240 && msg.pt.x <= 340) && (msg.pt.y >= 170 && msg.pt.y <= 240)))
|
||||
// {
|
||||
// DispatchMessage(&msg);
|
||||
// TranslateMessage(&msg);
|
||||
// }
|
||||
//}
|
||||
if (msg.message != WM_LBUTTONUP && bFilterMsg)
|
||||
{
|
||||
bFilterMsg = false;
|
||||
|
@ -123,7 +110,6 @@ public:
|
|||
}
|
||||
DispatchMessage(&msg);
|
||||
TranslateMessage(&msg);
|
||||
|
||||
}
|
||||
}
|
||||
protected:
|
||||
|
|
|
@ -154,8 +154,9 @@ GScanO200::~GScanO200()
|
|||
devState = DEV_STOP;
|
||||
m_threadUsb->join();
|
||||
m_threadUsb.reset();
|
||||
//writelog("~GScanO200");
|
||||
}
|
||||
if(m_usb.get())
|
||||
m_usb.reset();
|
||||
|
||||
}
|
||||
|
||||
|
@ -339,7 +340,6 @@ void GScanO200::config_params(GScanCap& params)
|
|||
|
||||
void GScanO200::Scanner_StartScan(UINT16 count)
|
||||
{
|
||||
if (m_usb.get() && m_usb->is_connected()) {
|
||||
std::lock_guard<std::mutex> lck(m_imgLocker);
|
||||
if (m_threadUsb && m_threadUsb->joinable()) {
|
||||
devState = DEV_STOP;
|
||||
|
@ -347,8 +347,11 @@ void GScanO200::Scanner_StartScan(UINT16 count)
|
|||
}
|
||||
|
||||
USBCB status = { GET_DSP_STATUS ,0,0 };
|
||||
m_usb->write_bulk(&status, sizeof(status));
|
||||
m_usb->read_bulk(&status, sizeof(status));
|
||||
if (m_usb.get() && m_usb->is_connected())
|
||||
m_usb->write_bulk(&status, sizeof(status));
|
||||
|
||||
if (m_usb.get() && m_usb->is_connected())
|
||||
m_usb->read_bulk(&status, sizeof(status));
|
||||
|
||||
switch (status.u32_Data)
|
||||
{
|
||||
|
@ -372,8 +375,10 @@ void GScanO200::Scanner_StartScan(UINT16 count)
|
|||
|
||||
#ifndef G200
|
||||
USBCB paperstatus = { GET_PAPER_STATUS ,0,0 };
|
||||
m_usb->write_bulk(&paperstatus, sizeof(paperstatus));
|
||||
m_usb->read_bulk(&paperstatus, sizeof(paperstatus));
|
||||
if (m_usb.get() && m_usb->is_connected())
|
||||
m_usb->write_bulk(&paperstatus, sizeof(paperstatus));
|
||||
if (m_usb.get() && m_usb->is_connected())
|
||||
m_usb->read_bulk(&paperstatus, sizeof(paperstatus));
|
||||
if (paperstatus.u32_Data == 0) {
|
||||
m_pImages->setscanflags(false);
|
||||
devState = DEV_WRONG;
|
||||
|
@ -385,27 +390,24 @@ void GScanO200::Scanner_StartScan(UINT16 count)
|
|||
if (gcap.is_duplex)
|
||||
count = count == 65535 ? 65535 : count / 2;
|
||||
USBCB usbcb = { START_COMMAND,(UINT32)count ,0 };
|
||||
m_usb->write_bulk(&usbcb, sizeof(usbcb));
|
||||
if (m_usb.get() && m_usb->is_connected())
|
||||
m_usb->write_bulk(&usbcb, sizeof(usbcb));
|
||||
this_thread::sleep_for(std::chrono::milliseconds(200));
|
||||
m_pImages->setscanflags(true);
|
||||
m_threadUsb.reset(new std::thread(&GScanO200::usbmain, this));
|
||||
m_pImages->run();
|
||||
}
|
||||
else
|
||||
{
|
||||
devState = DEV_WRONG;
|
||||
Set_ErrorCode(USB_DISCONNECTED);
|
||||
}
|
||||
if (m_usb.get() && m_usb->is_connected())
|
||||
{
|
||||
m_pImages->setscanflags(true);
|
||||
m_threadUsb.reset(new std::thread(&GScanO200::usbmain, this));
|
||||
m_pImages->run();
|
||||
}
|
||||
}
|
||||
|
||||
void GScanO200::Stop_scan()
|
||||
{
|
||||
if (m_usb.get() && !m_usb->is_connected()) {
|
||||
return;
|
||||
}
|
||||
std::lock_guard<std::mutex> lck(m_imgLocker);
|
||||
USBCB usbcb = { STOP ,0,0 };
|
||||
m_usb->write_bulk(&usbcb, sizeof(usbcb));
|
||||
if (m_usb.get() && m_usb->is_connected())
|
||||
m_usb->write_bulk(&usbcb, sizeof(usbcb));
|
||||
|
||||
#ifdef G200
|
||||
//m_pImages->setscanflags(false);
|
||||
//devState = DEV_STOP;
|
||||
|
@ -419,7 +421,8 @@ void GScanO200::ResetScanner()
|
|||
|
||||
std::lock_guard<std::mutex> lck(m_imgLocker);
|
||||
USBCB usbcb = { INIT_HARDWARE_SYS ,0,0 };
|
||||
m_usb->write_bulk(&usbcb, sizeof(usbcb));
|
||||
if(m_usb.get() && m_usb->is_connected())
|
||||
m_usb->write_bulk(&usbcb, sizeof(usbcb));
|
||||
}
|
||||
|
||||
bool GScanO200::Get_IsImageQueueEmpty()
|
||||
|
@ -450,24 +453,21 @@ void GScanO200::Set_ErrorCode(UINT32 value)
|
|||
|
||||
int GScanO200::get_scanned_num()
|
||||
{
|
||||
if (m_usb.get() && !m_usb->is_connected())
|
||||
return -1;
|
||||
|
||||
std::lock_guard<std::mutex> lck(m_imgLocker);
|
||||
USBCB usbcb = { GET_SCANN_NUM ,0,0 };
|
||||
m_usb->write_bulk(&usbcb, sizeof(usbcb));
|
||||
if (m_usb.get() && m_usb->is_connected())
|
||||
m_usb->write_bulk(&usbcb, sizeof(usbcb));
|
||||
|
||||
return usbcb.u32_Count;
|
||||
}
|
||||
|
||||
void GScanO200::clear_hwerror()
|
||||
{
|
||||
#ifndef G200
|
||||
if (m_usb.get() && !m_usb->is_connected())
|
||||
return;
|
||||
|
||||
std::lock_guard<std::mutex> lck(m_imgLocker);
|
||||
USBCB usbcb = { CLEAR_HWERROR ,0,0 };
|
||||
m_usb->write_bulk(&usbcb, sizeof(usbcb));
|
||||
if (m_usb.get() && m_usb->is_connected())
|
||||
m_usb->write_bulk(&usbcb, sizeof(usbcb));
|
||||
#endif // !G200
|
||||
|
||||
}
|
||||
|
@ -481,10 +481,13 @@ void GScanO200::usbhotplug_callback(bool isconnect, void* userdata)
|
|||
void GScanO200::usbhotplug(bool isleft)
|
||||
{
|
||||
if (isleft) {
|
||||
//std::lock_guard<std::mutex> lck(m_Locker);
|
||||
//FileTools::write_log("D:\\1.txt", "usbhotplug left");
|
||||
devState = DEV_WRONG;
|
||||
Error_Code = USB_DISCONNECTED;
|
||||
m_pImages->setscanflags(false);
|
||||
m_usb.reset();
|
||||
if (m_usb.get())
|
||||
m_usb.reset();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -511,89 +514,102 @@ void GScanO200::usbmain()
|
|||
std::shared_ptr<std::vector<char>> imgData;
|
||||
devState = DEV_ISRUNNING;
|
||||
bool haveError = false;
|
||||
while (devState == DEV_ISRUNNING) {
|
||||
if ((m_usb.get() && !m_usb->is_connected())) {
|
||||
this_thread::sleep_for(chrono::milliseconds(200));
|
||||
continue;
|
||||
}
|
||||
|
||||
//if (gcap.resolution_dst == 300.0f && gcap.en_fold) {
|
||||
// if (m_pImages->orginimgcount() > 1)
|
||||
// {
|
||||
// this_thread::sleep_for(chrono::milliseconds(100));
|
||||
// continue;
|
||||
// }
|
||||
//}
|
||||
|
||||
if (gcap.resolution_dst >= 300.0f)
|
||||
{
|
||||
if (m_pImages->orginimgcount() > 2)
|
||||
{
|
||||
this_thread::sleep_for(chrono::milliseconds(10));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
USBCB usbcb = Get_Scanner_Status();
|
||||
switch (usbcb.u32_Data) {
|
||||
case HAVE_IMAGE:
|
||||
{
|
||||
int totalNum = usbcb.u32_Count;
|
||||
m_usb->set_timeout(2000);
|
||||
imgData = Get_Img_Data(totalNum);
|
||||
if (!imgData->size()) {
|
||||
Stop_scan();
|
||||
writelog("imgData->size() error");
|
||||
////FileTools::write_log("D:\\1.txt", "thread usb start");
|
||||
try
|
||||
{
|
||||
while (devState == DEV_ISRUNNING) {
|
||||
if ((m_usb.get() && !m_usb->is_connected())) {
|
||||
this_thread::sleep_for(chrono::milliseconds(200));
|
||||
//FileTools::write_log("D:\\1.txt", "thread usb loop disconnect");
|
||||
break;
|
||||
}
|
||||
m_pImages->pushMat(std::shared_ptr<IDecode>(new G200Decode(imgData)));
|
||||
//static int rawdataindex = 0;
|
||||
//writelog("origin rawbuffer index " + std::to_string(++rawdataindex));
|
||||
#ifdef LOG_NORMAL
|
||||
static int rawdataindex = 0;
|
||||
FileTools::write_log("out.txt", "Enquque rawbuffer index " + std::to_string(++rawdataindex));
|
||||
#endif // LOG
|
||||
m_usb->set_timeout(200);
|
||||
Pop_Image();
|
||||
break;
|
||||
}
|
||||
case STOP_SCAN:
|
||||
m_pImages->setscanflags(false);
|
||||
devState = haveError ? DevState::DEV_WRONG : DevState::DEV_STOP;
|
||||
//m_pImages->setscanflags(false);
|
||||
//devState = DEV_STOP;
|
||||
break;
|
||||
case COUNT_MODE:
|
||||
case NO_FEED:
|
||||
case OPEN_COVER:
|
||||
case FEED_IN_ERROR:
|
||||
case PAPER_JAM:
|
||||
case DETECT_DOUBLE_FEED:
|
||||
case DETECT_STAPLE:
|
||||
case PAPER_SKEW:
|
||||
case HARDWARE_ERROR:
|
||||
case PC_SCAN_BUSY_or_ERROR:
|
||||
#ifdef G200
|
||||
Set_ErrorCode(usbcb.u32_Data);
|
||||
m_pImages->setscanflags(false);
|
||||
devState = DEV_WRONG;
|
||||
#else
|
||||
if (!haveError)
|
||||
////FileTools::write_log("D:\\1.txt", "thread usb start1");
|
||||
|
||||
//if (gcap.resolution_dst == 300.0f && gcap.en_fold) {
|
||||
// if (m_pImages->orginimgcount() > 1)
|
||||
// {
|
||||
// this_thread::sleep_for(chrono::milliseconds(100));
|
||||
// continue;
|
||||
// }
|
||||
//}
|
||||
|
||||
if (gcap.resolution_dst >= 300.0f)
|
||||
{
|
||||
haveError = true;
|
||||
Set_ErrorCode(usbcb.u32_Data);
|
||||
if (m_pImages->orginimgcount() > 2)
|
||||
{
|
||||
this_thread::sleep_for(chrono::milliseconds(10));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
USBCB usbcb = Get_Scanner_Status();
|
||||
switch (usbcb.u32_Data) {
|
||||
case HAVE_IMAGE:
|
||||
{
|
||||
int totalNum = usbcb.u32_Count;
|
||||
m_usb->set_timeout(2000);
|
||||
imgData = Get_Img_Data(totalNum);
|
||||
if (!imgData->size()) {
|
||||
Stop_scan();
|
||||
writelog("imgData->size() error");
|
||||
break;
|
||||
}
|
||||
m_pImages->pushMat(std::shared_ptr<IDecode>(new G200Decode(imgData)));
|
||||
//static int rawdataindex = 0;
|
||||
//writelog("origin rawbuffer index " + std::to_string(++rawdataindex));
|
||||
#ifdef LOG_NORMAL
|
||||
static int rawdataindex = 0;
|
||||
//FileTools::write_log("out.txt", "Enquque rawbuffer index " + std::to_string(++rawdataindex));
|
||||
#endif // LOG
|
||||
m_usb->set_timeout(200);
|
||||
Pop_Image();
|
||||
break;
|
||||
}
|
||||
case STOP_SCAN:
|
||||
m_pImages->setscanflags(false);
|
||||
devState = haveError ? DevState::DEV_WRONG : DevState::DEV_STOP;
|
||||
//m_pImages->setscanflags(false);
|
||||
//devState = DEV_STOP;
|
||||
break;
|
||||
case COUNT_MODE:
|
||||
case NO_FEED:
|
||||
case OPEN_COVER:
|
||||
case FEED_IN_ERROR:
|
||||
case PAPER_JAM:
|
||||
case DETECT_DOUBLE_FEED:
|
||||
case DETECT_STAPLE:
|
||||
case PAPER_SKEW:
|
||||
case HARDWARE_ERROR:
|
||||
case PC_SCAN_BUSY_or_ERROR:
|
||||
#ifdef G200
|
||||
Set_ErrorCode(usbcb.u32_Data);
|
||||
m_pImages->setscanflags(false);
|
||||
devState = DEV_WRONG;
|
||||
#else
|
||||
if (!haveError)
|
||||
{
|
||||
haveError = true;
|
||||
Set_ErrorCode(usbcb.u32_Data);
|
||||
}
|
||||
|
||||
#endif
|
||||
break;
|
||||
case NORMAL:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
break;
|
||||
case NORMAL:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
this_thread::sleep_for(chrono::milliseconds(10));
|
||||
}
|
||||
this_thread::sleep_for(chrono::milliseconds(20));
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
writelog(e.what());
|
||||
}
|
||||
|
||||
////FileTools::write_log("D:\\1.txt", "thread usb exit");
|
||||
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
@ -602,9 +618,14 @@ USBCB GScanO200::Get_Scanner_Status()
|
|||
if (m_usb.get() && !m_usb->is_connected()) {
|
||||
return { NO_COMMAND ,PC_SCAN_BUSY_or_ERROR ,0 };
|
||||
}
|
||||
|
||||
USBCB usbcb = { GET_DSP_STATUS ,0,0 };
|
||||
m_usb->write_bulk(&usbcb, sizeof(usbcb));
|
||||
m_usb->read_bulk(&usbcb, sizeof(usbcb));
|
||||
if (m_usb.get() && m_usb->is_connected())
|
||||
m_usb->write_bulk(&usbcb, sizeof(usbcb));
|
||||
|
||||
if (m_usb.get() && m_usb->is_connected())
|
||||
m_usb->read_bulk(&usbcb, sizeof(usbcb));
|
||||
|
||||
return usbcb;
|
||||
}
|
||||
|
||||
|
|
|
@ -67,11 +67,6 @@ int ImageMatQueue::orginimgcount()
|
|||
return atm_orgin_image_remains;
|
||||
}
|
||||
|
||||
float ImageMatQueue::getdpi()
|
||||
{
|
||||
return scanParam.resolution_dst;
|
||||
}
|
||||
|
||||
void ImageMatQueue::updatefixratio(float& hratio, float& vratio)
|
||||
{
|
||||
if (hratio > 0.80f && hratio < 1.2f && vratio >0.80f && vratio < 1.2f) {
|
||||
|
@ -294,7 +289,7 @@ void ImageMatQueue::proc()
|
|||
mat.release();
|
||||
#else // G200
|
||||
//resize(mat, mat, cv::Size(), 1.001, 1.0070);//用于修正与佳能机器幅面大小不匹配问题 此系数请勿轻易动
|
||||
//cv::imwrite("D:\\org"+to_string(index)+".jpg", mat);
|
||||
//cv::imwrite("D:\\org"+to_string(++index)+".jpg", mat);
|
||||
Mat front = mat(Rect(0, 0, mat.cols / 2, mat.rows));
|
||||
Mat back = mat(Rect(mat.cols / 2, 0, mat.cols / 2, mat.rows));
|
||||
if (scanParam.imageRotateDegree != 0.0&&scanParam.imageRotateDegree!=180.0) {
|
||||
|
|
|
@ -163,7 +163,6 @@ public:
|
|||
void run();
|
||||
int orginimgcount();
|
||||
void setscanflags(const bool flags) { is_scanning = flags; }
|
||||
float getdpi();
|
||||
void updatefixratio(float& hratio, float& vratio);
|
||||
private:
|
||||
void proc();
|
||||
|
|
|
@ -11,14 +11,14 @@ UsbScanEx::UsbScanEx(int index)
|
|||
memset(ov, 0, sizeof(ov));
|
||||
CTRL_IN_OUT = 3;
|
||||
for (int i = 0; i < (sizeof(ov) / sizeof(ov[0])); i++)
|
||||
ov[i].hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||
ov[i].hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||
}
|
||||
|
||||
UsbScanEx::~UsbScanEx()
|
||||
{
|
||||
if (m_h_dev != INVALID_HANDLE_VALUE)
|
||||
close();
|
||||
|
||||
|
||||
for (int i = 0; i < (sizeof(ov) / sizeof(ov[0])); i++)
|
||||
CloseHandle(ov[i].hEvent);
|
||||
}
|
||||
|
@ -49,6 +49,7 @@ bool UsbScanEx::open()
|
|||
&cbRet, NULL);
|
||||
if (b_ret && m_usbscan_config.NumberOfPipes > 0) {
|
||||
for (int by_i = 0x00; (ULONG)by_i < m_usbscan_config.NumberOfPipes; by_i++) {
|
||||
|
||||
TCHAR szPipePath[MAX_PATH] = { 0 };
|
||||
_stprintf(szPipePath, TEXT("\\\\.\\Usbscan%d\\%d"), m_h_index, by_i);
|
||||
m_usb_pipes[by_i].pipe_info = m_usbscan_config.PipeInfo[by_i];
|
||||
|
@ -67,7 +68,7 @@ bool UsbScanEx::open()
|
|||
BULK_IN = by_i;
|
||||
}
|
||||
else {
|
||||
BULK_OUT = by_i;
|
||||
BULK_OUT = by_i;
|
||||
}
|
||||
}
|
||||
b_ret = DeviceIoControl(m_usb_pipes[by_i].h_pipe, IOCTL_SET_TIMEOUT, &ut, sizeof(ut), NULL, 0, &cbRet, NULL);
|
||||
|
@ -106,7 +107,7 @@ bool UsbScanEx::close()
|
|||
NULL); // pointer to the event-object name
|
||||
bState =
|
||||
DeviceIoControl(m_h_dev,
|
||||
(DWORD)IOCTL_CANCEL_IO,
|
||||
(DWORD)IOCTL_CANCEL_IO,
|
||||
(LPVOID)&pipeType,
|
||||
sizeof(PIPE_TYPE),
|
||||
NULL,
|
||||
|
@ -117,12 +118,12 @@ bool UsbScanEx::close()
|
|||
CloseHandle(overlapped.hEvent);
|
||||
|
||||
for (by_i = 0x00; by_i < m_usbscan_config.NumberOfPipes; by_i++) {
|
||||
CancelIo(m_usb_pipes[by_i].h_pipe);
|
||||
CancelIo(m_usb_pipes[by_i].h_pipe);
|
||||
CloseHandle(m_usb_pipes[by_i].h_pipe);
|
||||
m_usb_pipes[by_i].h_pipe = INVALID_HANDLE_VALUE;
|
||||
}
|
||||
|
||||
CancelIo(m_h_dev);
|
||||
CancelIo(m_h_dev);
|
||||
b_ret = CloseHandle(m_h_dev);
|
||||
if (b_ret) {
|
||||
m_h_dev = INVALID_HANDLE_VALUE;
|
||||
|
@ -143,7 +144,7 @@ int UsbScanEx::read_bulk(void* data, int len)
|
|||
BOOL b_ret = FALSE;
|
||||
HANDLE h_pipe = m_usb_pipes[BULK_IN].h_pipe;
|
||||
unsigned long pdw_ret = len;
|
||||
LPOVERLAPPED lp_overlap = ov+BULK_IN;
|
||||
LPOVERLAPPED lp_overlap = ov + BULK_IN;
|
||||
lp_overlap->Internal = 0;
|
||||
lp_overlap->InternalHigh = 0;
|
||||
lp_overlap->Offset = 0;
|
||||
|
@ -152,7 +153,7 @@ int UsbScanEx::read_bulk(void* data, int len)
|
|||
|
||||
if (m_h_dev != NULL) {
|
||||
b_ret = ReadFile(h_pipe, data, len, &pdw_ret, lp_overlap);
|
||||
|
||||
|
||||
if (b_ret) {
|
||||
return pdw_ret;
|
||||
}
|
||||
|
|
|
@ -64,15 +64,20 @@ using namespace std::placeholders;
|
|||
TWPP_ENTRY_MFC(HuagaoDs)
|
||||
|
||||
static constexpr const Identity srcIdent(
|
||||
Version(3, 3, Language::English, Country::China, "v3.3.2.3"),
|
||||
Version(3, 3, Language::English, Country::China, "v3.3.2.4"),
|
||||
DataGroup::Image,
|
||||
#ifdef MAKEHUAGAO
|
||||
"HUAGO",
|
||||
#ifdef G200
|
||||
#ifdef ISG100
|
||||
"G100 Series",
|
||||
#else // ISG100
|
||||
"G200 Series",
|
||||
#else // MAKEHUAGAO
|
||||
"ZHIBEN",
|
||||
#endif
|
||||
|
||||
#ifdef G200
|
||||
#ifdef ISG100
|
||||
"G100 Series",
|
||||
#else // ISG100
|
||||
"G200 Series",
|
||||
#endif
|
||||
#elif defined(G300) // G200
|
||||
"G300 Series",
|
||||
#elif defined(G400) // G200
|
||||
|
@ -80,16 +85,33 @@ static constexpr const Identity srcIdent(
|
|||
#endif
|
||||
|
||||
#ifdef G200
|
||||
#ifdef ISG100
|
||||
"HUAGOSCAN G100 TWAIN"
|
||||
#else // ISG100
|
||||
"HUAGOSCAN G200 TWAIN"
|
||||
#ifdef ISG100
|
||||
#ifndef MAKEHUAGAO
|
||||
"ZhibenScan G100 TWAIN"
|
||||
#else // !MAKEHUAGAO
|
||||
"HUAGOSCAN G100 TWAIN"
|
||||
#endif
|
||||
#else // ISG100
|
||||
#ifndef MAKEHUAGAO
|
||||
"ZhibenScan G200 TWAIN"
|
||||
#else // !MAKEHUAGAO
|
||||
"HUAGOSCAN G200 TWAIN"
|
||||
#endif
|
||||
#endif
|
||||
#elif defined(G300) // G200
|
||||
"HUAGOSCAN G300 TWAIN"
|
||||
#ifndef MAKEHUAGAO
|
||||
"ZhibenScan G300 TWAIN"
|
||||
#else // !MAKEHUAGAO
|
||||
"HUAGOSCAN G300 TWAIN"
|
||||
#endif
|
||||
#elif defined(G400) // G200
|
||||
"HUAGOSCAN G400 TWAIN"
|
||||
#ifndef MAKEHUAGAO
|
||||
"ZhibenScan G400 TWAIN"
|
||||
#else // !MAKEHUAGAO
|
||||
"HUAGOSCAN G400 TWAIN"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
""
|
||||
#elif defined(__GNUC__)
|
||||
|
@ -144,9 +166,6 @@ static std::unique_ptr<IScanner> scanner(new GScanO200());
|
|||
#else
|
||||
static std::unique_ptr<IScanner> scanner(new GScanVirtual());
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
HuagaoDs::HuagaoDs()
|
||||
: m_scanparam(new GScanCap)
|
||||
, hMutex(NULL)
|
||||
|
@ -162,6 +181,8 @@ HuagaoDs::HuagaoDs()
|
|||
|
||||
HuagaoDs::~HuagaoDs()
|
||||
{
|
||||
if(scanner.get())
|
||||
scanner.reset();
|
||||
}
|
||||
|
||||
const Identity& HuagaoDs::defaultIdentity() noexcept {
|
||||
|
@ -1837,6 +1858,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) {
|
|||
Result HuagaoDs::identityCloseDs(const Identity&) {
|
||||
// no need to explicitly release any resources if using RAII
|
||||
// TWPP will free the whole source on its own after this method
|
||||
//FileTools::write_log("D:\\1.txt", "identityCloseDs enter");
|
||||
|
||||
if (guiIndicator.get())
|
||||
guiIndicator.reset();
|
||||
|
@ -1845,8 +1867,10 @@ Result HuagaoDs::identityCloseDs(const Identity&) {
|
|||
|
||||
if (guiBridge.get())
|
||||
guiBridge.reset();
|
||||
//FileTools::write_log("D:\\1.txt", "identityCloseDs enter1");
|
||||
|
||||
scanner.reset();
|
||||
//FileTools::write_log("D:\\1.txt", "identityCloseDs enter2");
|
||||
|
||||
if (hMutex)
|
||||
{
|
||||
|
@ -1854,6 +1878,7 @@ Result HuagaoDs::identityCloseDs(const Identity&) {
|
|||
CloseHandle(hMutex);
|
||||
}
|
||||
//saveGscanCapSetting();
|
||||
//FileTools::write_log("D:\\1.txt", "identityCloseDs exit");
|
||||
return success();
|
||||
}
|
||||
|
||||
|
@ -1897,11 +1922,20 @@ Result HuagaoDs::pendingXfersEnd(const Identity&, PendingXfers& data) {
|
|||
}
|
||||
|
||||
Result HuagaoDs::pendingXfersReset(const Identity&, PendingXfers& data) {
|
||||
//FileTools::write_log("D:\\1.txt", "pendingXfersReset enter");
|
||||
data.setCount(0);
|
||||
scanner->Stop_scan();
|
||||
scanner->reset();
|
||||
scanner->ResetScanner();
|
||||
if (scanner.get())
|
||||
{
|
||||
//FileTools::write_log("D:\\1.txt", "pendingXfersReset enter0");
|
||||
scanner->Stop_scan();
|
||||
//FileTools::write_log("D:\\1.txt", "pendingXfersReset enter1");
|
||||
scanner->reset();
|
||||
//FileTools::write_log("D:\\1.txt", "pendingXfersReset enter2");
|
||||
scanner->ResetScanner();
|
||||
//FileTools::write_log("D:\\1.txt", "pendingXfersReset enter4");
|
||||
}
|
||||
guiIndicator.reset();
|
||||
//FileTools::write_log("D:\\1.txt", "pendingXfersReset exit");
|
||||
return success();
|
||||
}
|
||||
|
||||
|
@ -1916,11 +1950,15 @@ Result HuagaoDs::setupMemXferGet(const Identity&, SetupMemXfer& data) {
|
|||
}
|
||||
|
||||
Result HuagaoDs::userInterfaceDisable(const Identity&, UserInterface& ui) {
|
||||
//FileTools::write_log("D:\\1.txt", "userInterfaceDisable enter");
|
||||
|
||||
guiTwain.reset();
|
||||
|
||||
#if TWPP_DETAIL_OS_WIN
|
||||
guiBridge.reset();
|
||||
#endif
|
||||
//FileTools::write_log("D:\\1.txt", "userInterfaceDisable exit");
|
||||
|
||||
return success();
|
||||
}
|
||||
Result HuagaoDs::userInterfaceEnable(const Identity&, UserInterface& ui) {
|
||||
|
@ -2092,7 +2130,7 @@ Result HuagaoDs::imageNativeXferGet(const Identity& id, ImageNativeXfer& data) {
|
|||
data = ImageNativeXfer(bmpSize());
|
||||
std::copy(bmpBegin(), bmpEnd(), data.data<char>().data());
|
||||
#ifdef LOG_NORMAL
|
||||
FileTools::write_log("out.txt", "imageNativeXferGet " + std::to_string(++xtfer));
|
||||
//FileTools::write_log("out.txt", "imageNativeXferGet " + std::to_string(++xtfer));
|
||||
#endif // LOG
|
||||
|
||||
return { ReturnCode::XferDone, ConditionCode::Success };
|
||||
|
@ -2100,6 +2138,7 @@ Result HuagaoDs::imageNativeXferGet(const Identity& id, ImageNativeXfer& data) {
|
|||
|
||||
Twpp::Result HuagaoDs::pendingXfersStopFeeder(const Identity& origin, PendingXfers& data)
|
||||
{
|
||||
//FileTools::write_log("D:\\1.txt", "pendingXfersStopFeeder enter");
|
||||
if (!scanner.get())
|
||||
return seqError();
|
||||
if (scanner->IsConnected()) {
|
||||
|
@ -2107,6 +2146,7 @@ Twpp::Result HuagaoDs::pendingXfersStopFeeder(const Identity& origin, PendingXfe
|
|||
}
|
||||
|
||||
data.setCount(scanner->Get_IsImageQueueEmpty() ? 0 : 1);
|
||||
//FileTools::write_log("D:\\1.txt", "pendingXfersStopFeeder exit");
|
||||
return success();
|
||||
}
|
||||
|
||||
|
|
Binary file not shown.
Binary file not shown.
BIN
huagao/stdafx.h
BIN
huagao/stdafx.h
Binary file not shown.
Loading…
Reference in New Issue