From a778e653c7eddee4f974f7f9331dd1a8a9c3f074 Mon Sep 17 00:00:00 2001 From: lovelyyoung <1002639516@qq.com> Date: Mon, 20 Jul 2020 10:29:10 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8DUSB=E6=8B=94=E6=8F=92?= =?UTF-8?q?=E5=9B=9E=E8=B0=83Bug=202.=E5=A2=9E=E5=8A=A0=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E7=BC=96=E8=AF=91=E4=BB=A5=E6=94=AF=E6=8C=81=E6=99=BA=E6=9C=AC?= =?UTF-8?q?=E7=89=88=E6=9C=AC=203.=E5=A2=9E=E5=8A=A0=E9=80=9A=E4=BF=A1?= =?UTF-8?q?=E5=BF=85=E8=A6=81=E5=88=A4=E6=96=AD=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- huagao/CAboutDlg.cpp | 6 + huagao/CTwainUI.cpp | 3 +- huagao/CTwainUI.h | 2 - huagao/Device/GScan.h | 14 -- huagao/Device/GScanO200.cpp | 235 +++++++++++++++++--------------- huagao/Device/ImageMatQueue.cpp | 7 +- huagao/Device/ImageMatQueue.h | 1 - huagao/Device/UsbScanEx.cpp | 17 +-- huagao/huagaods.cpp | 78 ++++++++--- huagao/huagaotwds.rc | Bin 36058 -> 36078 bytes huagao/resource.h | Bin 11078 -> 11170 bytes huagao/stdafx.h | Bin 5088 -> 7704 bytes 12 files changed, 205 insertions(+), 158 deletions(-) diff --git a/huagao/CAboutDlg.cpp b/huagao/CAboutDlg.cpp index 7bea8dbe..e202e554 100644 --- a/huagao/CAboutDlg.cpp +++ b/huagao/CAboutDlg.cpp @@ -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 } diff --git a/huagao/CTwainUI.cpp b/huagao/CTwainUI.cpp index ccbe3bc8..f56c077e 100644 --- a/huagao/CTwainUI.cpp +++ b/huagao/CTwainUI.cpp @@ -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); diff --git a/huagao/CTwainUI.h b/huagao/CTwainUI.h index f06b5dc1..c3ddb044 100644 --- a/huagao/CTwainUI.h +++ b/huagao/CTwainUI.h @@ -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}; diff --git a/huagao/Device/GScan.h b/huagao/Device/GScan.h index 8b99fe44..f6613481 100644 --- a/huagao/Device/GScan.h +++ b/huagao/Device/GScan.h @@ -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: diff --git a/huagao/Device/GScanO200.cpp b/huagao/Device/GScanO200.cpp index 34626314..4642445b 100644 --- a/huagao/Device/GScanO200.cpp +++ b/huagao/Device/GScanO200.cpp @@ -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 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 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 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 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 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 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> 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(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(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; } diff --git a/huagao/Device/ImageMatQueue.cpp b/huagao/Device/ImageMatQueue.cpp index 0369feb7..cd16ff76 100644 --- a/huagao/Device/ImageMatQueue.cpp +++ b/huagao/Device/ImageMatQueue.cpp @@ -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) { diff --git a/huagao/Device/ImageMatQueue.h b/huagao/Device/ImageMatQueue.h index 3d975505..5ce773b6 100644 --- a/huagao/Device/ImageMatQueue.h +++ b/huagao/Device/ImageMatQueue.h @@ -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(); diff --git a/huagao/Device/UsbScanEx.cpp b/huagao/Device/UsbScanEx.cpp index 83572de4..5ee6ff19 100644 --- a/huagao/Device/UsbScanEx.cpp +++ b/huagao/Device/UsbScanEx.cpp @@ -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; } diff --git a/huagao/huagaods.cpp b/huagao/huagaods.cpp index 8fb22fef..d737f737 100644 --- a/huagao/huagaods.cpp +++ b/huagao/huagaods.cpp @@ -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 scanner(new GScanO200()); #else static std::unique_ptr 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().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(); } diff --git a/huagao/huagaotwds.rc b/huagao/huagaotwds.rc index b75a360f22cf3505ecbdeff686f6a225dac0d3d8..58c5d63ade84390d9f3c3c71f7ba47d85b5ddd5f 100644 GIT binary patch delta 82 zcmcaLlj+?|rVUallci#X6df5{fG~)`l_3}ibr>ud41uH}khTQUMhr%i1+9fAD`+WA c&Pxg61o9coK&mD)wn$Ij)y%c|UCJAE02+%FHvj+t delta 64 zcmaDilj+t>rVUalllzkR_$?R=8FYZyg256*PY#R}ot%(T!fD80z+eg#v6x(#CO!FF QGuPxPJaU^AQqQRa08;)EasU7T diff --git a/huagao/resource.h b/huagao/resource.h index c7b8ab22d72ebce76c0506185d0590348920273f..3eac49995ad059e382c82739fed1efde2cd9e452 100644 GIT binary patch delta 48 zcmV-00MGx%R-#w1t^|`l0|=A8APSSNBqo!;x8*fGQM| G@G4frMiMUo delta 32 ocmZ1!ek^RmI+n@j7`Z0Lun28dWBsE#c>;^rp$v)a)0M^M1)Bpeg diff --git a/huagao/stdafx.h b/huagao/stdafx.h index 4fc771f3052588266563c5dab1f92a4eb9a7218f..03b9d75b816bae16842f5db4606916c11d36cdcc 100644 GIT binary patch literal 7704 zcmds6&2Jk;6o0KmseuY{>45`mn**h&P2+xr0F~U>Nkf};;&qayapNYA?SwjZNSuU- zs--9r2Pi5aRkYlJ|D%W_rMF)AC=wDX5z#QYzxUp} z_h!8IcRRI{K?_u;DVm@Xy+wOz8gIIAJwE;Q;9uu{IRBXSQue*#J#%$QK0URzjh+A{ z({7(^FWorbIesC%Yq2N2&Fmciqx5odb;+5rGJkFCLv!WR-Jjz!a&Cxt0muVK? z2Gyua1uEKOVtfW#RiRxGcY}thoAQ*Rla!?lCFlg66J$1ciCHt4UksURV9f6$@O)z$ zG(yZ{3fe5gHU=FS-D7@Sn7VSY{7jBk1**`Zt+zotVc!Yh zEJLq4E#Z6Kw)0MfM%O(LR9T?Q1FvOc?E}i*2KE7r^kJkABRnIGF)?chzq0t9!EY6# z!1itVGoWLRb!fm^mN9F!Y+QagI9J?~YcCxsJ)IZ6lh)UfyxNG8Wt*B~<%lLn$Q080 zsRyzQ>YTow|LXib^Mfo$6hDRYE+Pu+wtbrOo|zoVsdiUmg>Be_NXf%GX?&;cXvqWp z5DnnNR?0Ra$L%qRvj#5~BkCgf8}#Ip4YXWoEl2IXY2nG}d)=>q)d>wolSgc%T)_Ptjxm4mGab&pO65v0RS9xni~O z$#`_MLHb6+ny}-oHMA4RHvWEdV|0G&Xp@Nd^oFno=^F*@Mpo4n)^`C{B^0ra?!lOW zd{+e(XHU-Xbzn^)SImJ=4e$6pay72X;G2VA6u4rw7dI6I3May&pc0v*oBEMET8rBP zDp@rYm*YR@$&1xpgTgTdt=f&_P&2%=n13xO*j1Y=3TMknyVA+r_U|YKwO$!};o*Jw z@R;OYTJH~fDZW0+Hf?K+aDL~Wpbt5ympazxv>{_U)ZS5DwuM~6-G+&{%iueK_(*}P z{G33gm)u2dZ-dkdaj~JOvzb?~pjpy)Ze0i9VXhydqv9SycsqukLG+)y;O$%2p1*u{ z@*A5uQ;v)(37nz^-!P1YI3@DNB2Cv z4opI)0oWl6tSY7C=0+9Hfvw~CB1buJT}1xr#Z`lbS>Pz3N3GhKsfM0w1#@zWP5D<6 zvr3>?#7gD9^9>+p-0V?9)6%`#q}D1Dw+*_XQ$IYBgr+?}J_Jv5*WQX1n(@%>&<+&K zz{5E&55L8c2c=zV@InD&Ro{1NwDG=zvpCyt*0zO?QqMb4EFq&?b{itXRj!hYI|}?M zb=1+k?_H%j4pkesCwb4+kBhy>>zLP-IzLEzKRR9aZp7OhVw2Zk8TRJRMq*ZTfs~rD zV><;89m5mv|1yXtUZ49=+YX0%OLhu7>^-C(9u`!Ny;vG$RCGEA z9pmV1zOreVk!~J;?xXKdcUh&eUr*k>bchb(bKly!b~}A@<%QADt=L*OJvkkRS34ql zHOvBfHxl!7M;onqUQTM>mN6nN$9Jwnrx58g=ofhf%B;k8((9d^Pd-Kv-%_K<3-zyPRHw4xBT$82U3sCOkXdBS7$jVn#OXru0u1;`DBE5&Y2c;_oMM@@60*@{=M))Zau=hwl`>p;v@dg z$X~Bk@Cdnj*Bj;&Ri>L($H)6^K0lkc&oayC2D@4V7w_`<>~1Dtc|K__Vf-jg1xomcv*p(?BaROJ5WV7?KMX|WQS6KOR6_j!#wU%3u?Ihl vbCVA01T~*ei&F)6BxNQiNXu+?kS=1JY{n`uIe|xM r@&=%wgACW?9Xth-H*pGqR8Q6rQ2~kr