From 88555e51eb5653625173c36e468579c1b112b598 Mon Sep 17 00:00:00 2001 From: luoliangyi <87842688@qq.com> Date: Fri, 7 Apr 2023 15:08:56 +0800 Subject: [PATCH] =?UTF-8?q?sane=5Fuser=E5=AE=9E=E7=8E=B0=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E4=BF=A1=E6=81=AF=E7=9A=84=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/sane_user/HGSane.h | 2 +- modules/sane_user/HGSaneImpl.cpp | 97 +++++++++++++++++++++++++++--- modules/sane_user/HGSaneImpl.hpp | 5 +- modules/twain_user/HGTwain.h | 2 +- modules/twain_user/HGTwainImpl.cpp | 17 +++--- 5 files changed, 102 insertions(+), 21 deletions(-) diff --git a/modules/sane_user/HGSane.h b/modules/sane_user/HGSane.h index f8f995eb..4f67334a 100644 --- a/modules/sane_user/HGSane.h +++ b/modules/sane_user/HGSane.h @@ -25,7 +25,7 @@ typedef struct HGChar ip[32]; HGChar mac[32]; HGUInt rollerCount; - HGUInt histroyCount; + HGUInt totalCount; }HGSaneCustomInfo; #pragma pack(pop) diff --git a/modules/sane_user/HGSaneImpl.cpp b/modules/sane_user/HGSaneImpl.cpp index 7d205420..8f8cc4d6 100644 --- a/modules/sane_user/HGSaneImpl.cpp +++ b/modules/sane_user/HGSaneImpl.cpp @@ -643,7 +643,46 @@ HGResult HGSaneDeviceImpl::GetName(HGChar* name, HGUInt maxLen) HGResult HGSaneDeviceImpl::GetCustomInfo(HGSaneCustomInfo *info) { - return HGBASE_ERR_NOTIMPL; + if (NULL == info) + { + return HGBASE_ERR_INVALIDARG; + } + + memset(info, 0, sizeof(HGSaneCustomInfo)); + + HGInt intValue = 0; + GetValue("dev-vid", &intValue); + info->vid = (HGUShort)intValue; + intValue = 0; + GetValue("dev-pid", &intValue); + info->pid = (HGUShort)intValue; + intValue = 0; + GetValue("roll-cnt", &intValue); + info->rollerCount = (HGUInt)intValue; + intValue = 0; + GetValue("total-cnt", &intValue); + info->totalCount = (HGUInt)intValue; + + HGChar strValue[256] = {0}; + GetValue("dev-model", strValue, 256); + strcpy(info->model, strValue); + strValue[0] = 0; + GetValue("dev-type", strValue, 256); + strcpy(info->type, strValue); + strValue[0] = 0; + GetValue("dev-sn", strValue, 256); + strcpy(info->sn, strValue); + strValue[0] = 0; + GetValue("dev-ver", strValue, 256); + strcpy(info->fwVer, strValue); + strValue[0] = 0; + GetValue("ip-addr", strValue, 256); + strcpy(info->ip, strValue); + strValue[0] = 0; + GetValue("mac-addr", strValue, 256); + strcpy(info->mac, strValue); + + return HGBASE_ERR_OK; } HGResult HGSaneDeviceImpl::ShowSettingDlg(HGWindow parent) @@ -693,7 +732,7 @@ HGResult HGSaneDeviceImpl::Start(HGSane_DeviceEventFunc eventFunc, HGPointer eve return HGBASE_ERR_OUTOFMEMORY; } - m_dpi = GetDpi(); + GetValue("resolution", &m_dpi); stat = m_sourceImpl->m_saneApi.sane_start_api(m_devHandle); if (SANE_STATUS_GOOD != stat) { @@ -752,7 +791,7 @@ HGResult HGSaneDeviceImpl::StartWithUI(HGWindow parent, HGSane_DeviceImageFunc i return HGBASE_ERR_FAIL; } - m_dpi = GetDpi(); + GetValue("resolution", &m_dpi); m_imageFunc = imageFunc; m_imageParam = imageParam; @@ -764,9 +803,12 @@ HGResult HGSaneDeviceImpl::StartWithUI(HGWindow parent, HGSane_DeviceImageFunc i return HGBASE_ERR_OK; } -HGUInt HGSaneDeviceImpl::GetDpi() +HGResult HGSaneDeviceImpl::GetValue(const HGChar *name, HGInt *value) { - HGUInt dpi = 0; + assert(NULL != name && 0 != *name); + assert(NULL != value); + + HGResult ret = HGBASE_ERR_FAIL; SANE_Int num_dev_options = 0; m_sourceImpl->m_saneApi.sane_control_option_api(m_devHandle, 0, SANE_ACTION_GET_VALUE, &num_dev_options, NULL); for (int i = 1; i < num_dev_options; ++i) @@ -777,17 +819,52 @@ HGUInt HGSaneDeviceImpl::GetDpi() if (SANE_TYPE_INT == desp->type) { - SANE_Int value = 0; - m_sourceImpl->m_saneApi.sane_control_option_api(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL); - if (0 == strcmp(desp->name, "resolution")) + SANE_Int v = 0; + m_sourceImpl->m_saneApi.sane_control_option_api(m_devHandle, i, SANE_ACTION_GET_VALUE, &v, NULL); + if (0 == strcmp(desp->name, name)) { - dpi = (HGUInt)value; + *value = (HGInt)v; + ret = HGBASE_ERR_OK; break; } } } - return dpi; + return ret; +} + +HGResult HGSaneDeviceImpl::GetValue(const HGChar *name, HGChar *value, HGUInt maxLen) +{ + assert(NULL != name && 0 != *name); + assert(NULL != value); + + HGResult ret = HGBASE_ERR_FAIL; + SANE_Int num_dev_options = 0; + m_sourceImpl->m_saneApi.sane_control_option_api(m_devHandle, 0, SANE_ACTION_GET_VALUE, &num_dev_options, NULL); + for (int i = 1; i < num_dev_options; ++i) + { + const SANE_Option_Descriptor* desp = m_sourceImpl->m_saneApi.sane_get_option_descriptor_api(m_devHandle, i); + if (nullptr == desp) + continue; + + if (SANE_TYPE_STRING == desp->type) + { + char v[256] = { 0 }; + m_sourceImpl->m_saneApi.sane_control_option_api(m_devHandle, i, SANE_ACTION_GET_VALUE, v, NULL); + if (0 == strcmp(desp->name, name)) + { + if (maxLen > strlen(v)) + { + strcpy(value, v); + ret = HGBASE_ERR_OK; + } + + break; + } + } + } + + return ret; } void HGAPI HGSaneDeviceImpl::ThreadFunc(HGThread thread, HGPointer param) diff --git a/modules/sane_user/HGSaneImpl.hpp b/modules/sane_user/HGSaneImpl.hpp index ee437afa..a7ddf98a 100644 --- a/modules/sane_user/HGSaneImpl.hpp +++ b/modules/sane_user/HGSaneImpl.hpp @@ -80,7 +80,8 @@ public: HGResult StartWithUI(HGWindow parent, HGSane_DeviceImageFunc imageFunc, HGPointer imageParam); private: - HGUInt GetDpi(); + HGResult GetValue(const HGChar *name, HGInt *value); + HGResult GetValue(const HGChar *name, HGChar *value, HGUInt maxLen); static void HGAPI ThreadFunc(HGThread thread, HGPointer param); static void ShowScanImageCallback(const SANE_Parameters* imageFormat, const SANE_Byte* imageData, void* callbackParam); @@ -90,7 +91,7 @@ private: SANE_Handle m_devHandle; HGByte* m_buffer; HGInt m_bufferSize; - HGUInt m_dpi; + HGInt m_dpi; HGSane_DeviceEventFunc m_eventFunc; HGPointer m_eventParam; HGSane_DeviceImageFunc m_imageFunc; diff --git a/modules/twain_user/HGTwain.h b/modules/twain_user/HGTwain.h index f0e03d98..5a5ed809 100644 --- a/modules/twain_user/HGTwain.h +++ b/modules/twain_user/HGTwain.h @@ -21,7 +21,7 @@ typedef struct HGChar ip[32]; HGChar mac[32]; HGUInt rollerCount; - HGUInt histroyCount; + HGUInt totalCount; }HGTwainDeviceCustomInfo; #pragma pack(pop) diff --git a/modules/twain_user/HGTwainImpl.cpp b/modules/twain_user/HGTwainImpl.cpp index 79ad98cd..d733a865 100644 --- a/modules/twain_user/HGTwainImpl.cpp +++ b/modules/twain_user/HGTwainImpl.cpp @@ -405,15 +405,18 @@ HGResult HGTwainDSImpl::GetDeviceCustomInfo(HGTwainDeviceCustomInfo *info) return HGBASE_ERR_INVALIDARG; } - HGChar value[256] = {0}; memset(info, 0, sizeof(HGTwainDeviceCustomInfo)); - GetCap(CAP_SERIALNUMBER, value, 256); - strcpy(info->sn, value); - GetCap(0x8025, value, 256); - strcpy(info->fwVer, value); - GetCap(0x8200, value, 256); - strcpy(info->ip, value); + HGChar strValue[256] = {0}; + GetCap(CAP_SERIALNUMBER, strValue, 256); + strcpy(info->sn, strValue); + strValue[0] = 0; + GetCap(0x8025, strValue, 256); + strcpy(info->fwVer, strValue); + strValue[0] = 0; + GetCap(0x8200, strValue, 256); + strcpy(info->ip, strValue); + return HGBASE_ERR_OK; }