From d879bb1fe7dad3306ca3beab39a117db302dcf12 Mon Sep 17 00:00:00 2001 From: yangjiaxuan <171295266@qq.com> Date: Wed, 17 May 2023 16:45:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8D=95=E5=BC=A0=E6=89=AB?= =?UTF-8?q?=E6=8F=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/scanner/mainwindow.cpp | 18 ++--- modules/twain_user/HGTwainImpl.cpp | 123 +++++++++++++++++++++-------- modules/twain_user/HGTwainImpl.hpp | 6 +- 3 files changed, 103 insertions(+), 44 deletions(-) diff --git a/app/scanner/mainwindow.cpp b/app/scanner/mainwindow.cpp index 409ad480..df880fc6 100644 --- a/app/scanner/mainwindow.cpp +++ b/app/scanner/mainwindow.cpp @@ -394,7 +394,6 @@ MainWindow::~MainWindow() if (nullptr != m_devUser) { disconnect(m_devUser, SIGNAL(newImage(void*)), this, SLOT(on_newImage(void*))); - disconnect(m_devUser, SIGNAL(finishScan()), this, SLOT(on_finishScan())); delete m_devUser; m_devUser = nullptr; } @@ -663,9 +662,9 @@ void MainWindow::on_AcquireInto2() } else { - m_isScanning = true; +// m_isScanning = true; m_thumb->setAcceptDrops(false); - updateActionStatus(); +// updateActionStatus(); } } } @@ -2874,9 +2873,9 @@ void MainWindow::on_act_acquireSingle_triggered() } else { - m_isScanning = true; +// m_isScanning = true; m_thumb->setAcceptDrops(false); - updateActionStatus(); +// updateActionStatus(); } } @@ -2939,9 +2938,9 @@ void MainWindow::on_act_acquireInto_triggered() } else { - m_isScanning = true; +// m_isScanning = true; m_thumb->setAcceptDrops(false); - updateActionStatus(); +// updateActionStatus(); } } } @@ -3000,9 +2999,9 @@ void MainWindow::on_act_insertFromScanner_triggered() } else { - m_isScanning = true; +// m_isScanning = true; m_thumb->setAcceptDrops(false); - updateActionStatus(); +// updateActionStatus(); } } } @@ -3769,6 +3768,5 @@ void MainWindow::on_act_selectDevice_triggered() m_devUser = devUser; m_wndStatusBar->setDeviceStatusInfo(tr("Device %1 is open").arg(m_devUser->GetName()), false); connect(m_devUser, SIGNAL(newImage(void*)), this, SLOT(on_newImage(void*))); - connect(m_devUser, SIGNAL(finishScan()), this, SLOT(on_finishScan())); } } diff --git a/modules/twain_user/HGTwainImpl.cpp b/modules/twain_user/HGTwainImpl.cpp index 8eef4a42..99bd208e 100644 --- a/modules/twain_user/HGTwainImpl.cpp +++ b/modules/twain_user/HGTwainImpl.cpp @@ -416,8 +416,8 @@ HGResult HGTwainDSImpl::GetDeviceCustomInfo(HGTwainDeviceCustomInfo *info) memset(info, 0, sizeof(HGTwainDeviceCustomInfo)); - GetCapInt32(0x8852, &info->vid); - GetCapInt32(0x8853, &info->pid); + GetCapInt(0x8852, &info->vid); + GetCapInt(0x8853, &info->pid); GetCapStr255(0x8856, info->sn, 32); GetCapStr255(0x8855, info->type, 32); GetCapStr255(0x8857, info->fwVer, 32); @@ -430,8 +430,8 @@ HGResult HGTwainDSImpl::GetDeviceCustomInfo(HGTwainDeviceCustomInfo *info) GetCapStr255(0x884E, info->comTel, 32); GetCapStr255(0x884F, info->comAddr, 256); GetCapStr255(0x8850, info->comGps, 256); - GetCapInt32(0x9902, &info->rollerCount); - GetCapInt32(0x8849, &info->totalCount); + GetCapInt(0x9902, &info->rollerCount); + GetCapInt(0x8849, &info->totalCount); return HGBASE_ERR_OK; } @@ -502,7 +502,7 @@ HGResult HGTwainDSImpl::Logout() HGResult HGTwainDSImpl::ClearRollerCount() { - return ResetCapInt32(0x9902); + return ResetCapInt(0x9902, TWTY_INT32); } HGResult HGTwainDSImpl::GetDriverLogPath(HGChar *path, HGUInt maxLen) @@ -570,13 +570,13 @@ HGResult HGTwainDSImpl::EnableWithSingleScan(HGDSCloseReqFunc eventFunc, HGPoint HGDSImageFunc imageFunc, HGPointer imageParam) { HGInt oldXferCount = -1; - HGResult ret = GetCapInt32(CAP_XFERCOUNT, &oldXferCount); + HGResult ret = GetCapInt(CAP_XFERCOUNT, &oldXferCount); if (HGBASE_ERR_OK != ret) { return ret; } - ret = SetCapInt32(CAP_XFERCOUNT, 1); + ret = SetCapInt(CAP_XFERCOUNT, TWTY_INT16, 1); if (HGBASE_ERR_OK != ret) { return ret; @@ -610,22 +610,32 @@ HGResult HGTwainDSImpl::Disable() if (m_singleScan) { - SetCapInt32(CAP_XFERCOUNT, m_oldXferCount); + SetCapInt(CAP_XFERCOUNT, TWTY_INT16, m_oldXferCount); } m_singleScan = FALSE; m_oldXferCount = -1; - m_showUI = HGFALSE; - m_parent = NULL; - m_eventFunc = NULL; - m_eventParam = NULL; - m_imageFunc = NULL; - m_imageParam = NULL; - return HGBASE_ERR_OK; + m_showUI = HGFALSE; + m_parent = NULL; + m_eventFunc = NULL; + m_eventParam = NULL; + m_imageFunc = NULL; + m_imageParam = NULL; + return HGBASE_ERR_OK; } #pragma pack(push) #pragma pack(1) +struct CapInt8Type +{ + TW_UINT16 ItemType; + TW_INT8 Value; +}; +struct CapInt16Type +{ + TW_UINT16 ItemType; + TW_INT16 Value; +}; struct CapInt32Type { TW_UINT16 ItemType; @@ -633,21 +643,39 @@ struct CapInt32Type }; #pragma pack(pop) -HGResult HGTwainDSImpl::SetCapInt32(HGUInt cap, HGInt value) +HGResult HGTwainDSImpl::SetCapInt(HGUInt cap, TW_UINT16 itemType, HGInt value) { TW_CAPABILITY twCap; twCap.Cap = (TW_UINT16)cap; twCap.ConType = TWON_ONEVALUE; - twCap.hContainer = GlobalAlloc(GHND, sizeof(CapInt32Type)); + DWORD size = sizeof(CapInt32Type); + if (itemType == TWTY_INT8) + size = sizeof(CapInt8Type); + else if (itemType == TWTY_INT16) + size = sizeof(CapInt16Type); + twCap.hContainer = GlobalAlloc(GHND, size); if (NULL == twCap.hContainer) { return HGBASE_ERR_FAIL; } - CapInt32Type* pVal = (CapInt32Type*)GlobalLock(twCap.hContainer); + void* pVal = GlobalLock(twCap.hContainer); assert(NULL != pVal); - pVal->ItemType = TWTY_INT32; - pVal->Value = value; + if (itemType == TWTY_INT8) + { + ((CapInt8Type*)pVal)->ItemType = TWTY_INT8; + ((CapInt8Type*)pVal)->Value = (TW_INT8)value; + } + else if (itemType == TWTY_INT16) + { + ((CapInt16Type*)pVal)->ItemType = TWTY_INT16; + ((CapInt16Type*)pVal)->Value = (TW_INT16)value; + } + else + { + ((CapInt32Type*)pVal)->ItemType = TWTY_INT32; + ((CapInt32Type*)pVal)->Value = (TW_INT32)value; + } GlobalUnlock(twCap.hContainer); USHORT ret = m_dsmImpl->m_pDSMProc(&m_dsmImpl->m_AppId, &m_iden, DG_CONTROL, DAT_CAPABILITY, MSG_SET, &twCap); @@ -655,21 +683,39 @@ HGResult HGTwainDSImpl::SetCapInt32(HGUInt cap, HGInt value) return (TWRC_SUCCESS == ret) ? HGBASE_ERR_OK : HGTWAIN_ERR_FAIL; } -HGResult HGTwainDSImpl::ResetCapInt32(HGUInt cap) +HGResult HGTwainDSImpl::ResetCapInt(HGUInt cap, TW_UINT16 itemType) { TW_CAPABILITY twCap; twCap.Cap = (TW_UINT16)cap; twCap.ConType = TWON_ONEVALUE; - twCap.hContainer = GlobalAlloc(GHND, sizeof(CapInt32Type)); + DWORD size = sizeof(CapInt32Type); + if (itemType == TWTY_INT8) + size = sizeof(CapInt8Type); + else if (itemType == TWTY_INT16) + size = sizeof(CapInt16Type); + twCap.hContainer = GlobalAlloc(GHND, size); if (NULL == twCap.hContainer) { return HGBASE_ERR_FAIL; } - CapInt32Type* pVal = (CapInt32Type*)GlobalLock(twCap.hContainer); + void* pVal = GlobalLock(twCap.hContainer); assert(NULL != pVal); - pVal->ItemType = TWTY_INT32; - pVal->Value = 0; + if (itemType == TWTY_INT8) + { + ((CapInt8Type*)pVal)->ItemType = TWTY_INT8; + ((CapInt8Type*)pVal)->Value = 0; + } + else if (itemType == TWTY_INT16) + { + ((CapInt16Type*)pVal)->ItemType = TWTY_INT16; + ((CapInt16Type*)pVal)->Value = 0; + } + else + { + ((CapInt32Type*)pVal)->ItemType = TWTY_INT32; + ((CapInt32Type*)pVal)->Value = 0; + } GlobalUnlock(twCap.hContainer); USHORT ret = m_dsmImpl->m_pDSMProc(&m_dsmImpl->m_AppId, &m_iden, DG_CONTROL, DAT_CAPABILITY, MSG_RESET, &twCap); @@ -677,7 +723,7 @@ HGResult HGTwainDSImpl::ResetCapInt32(HGUInt cap) return (TWRC_SUCCESS == ret) ? HGBASE_ERR_OK : HGTWAIN_ERR_FAIL; } -HGResult HGTwainDSImpl::GetCapInt32(HGUInt cap, HGInt* value) +HGResult HGTwainDSImpl::GetCapInt(HGUInt cap, HGInt* value) { if (NULL == value) { @@ -695,13 +741,28 @@ HGResult HGTwainDSImpl::GetCapInt32(HGUInt cap, HGInt* value) HGResult ret = HGBASE_ERR_FAIL; assert(NULL != twCap.hContainer); - CapInt32Type* pVal = (CapInt32Type*)GlobalLock(twCap.hContainer); - if (NULL != pVal && pVal->ItemType == TWTY_INT32) + void* pVal = GlobalLock(twCap.hContainer); + if (NULL != pVal) { - *value = pVal->Value; - ret = HGBASE_ERR_OK; + TW_UINT16 ItemType = *(TW_UINT16*)pVal; + if (ItemType == TWTY_INT8) + { + *value = ((CapInt8Type*)pVal)->Value; + ret = HGBASE_ERR_OK; + } + else if (ItemType == TWTY_INT16) + { + *value = ((CapInt16Type*)pVal)->Value; + ret = HGBASE_ERR_OK; + } + else if (ItemType == TWTY_INT32) + { + *value = ((CapInt32Type*)pVal)->Value; + ret = HGBASE_ERR_OK; + } + + GlobalUnlock(twCap.hContainer); } - GlobalUnlock(twCap.hContainer); GlobalFree(twCap.hContainer); return ret; diff --git a/modules/twain_user/HGTwainImpl.hpp b/modules/twain_user/HGTwainImpl.hpp index eb2ebf89..6ddb8a41 100644 --- a/modules/twain_user/HGTwainImpl.hpp +++ b/modules/twain_user/HGTwainImpl.hpp @@ -70,9 +70,9 @@ public: HGResult Disable(); private: - HGResult SetCapInt32(HGUInt cap, HGInt value); - HGResult ResetCapInt32(HGUInt cap); - HGResult GetCapInt32(HGUInt cap, HGInt* value); + HGResult SetCapInt(HGUInt cap, TW_UINT16 itemType, HGInt value); + HGResult ResetCapInt(HGUInt cap, TW_UINT16 itemType); + HGResult GetCapInt(HGUInt cap, HGInt* value); HGResult SetCapStr255(HGUInt cap, const HGChar *value); HGResult ResetCapStr255(HGUInt cap); HGResult GetCapStr255(HGUInt cap, HGChar *value, HGUInt maxLen);