diff --git a/build/windows/HGScannerLib/HGScannerLib.def b/build/windows/HGScannerLib/HGScannerLib.def index 7cf89645..ffe40ebe 100644 --- a/build/windows/HGScannerLib/HGScannerLib.def +++ b/build/windows/HGScannerLib/HGScannerLib.def @@ -27,4 +27,5 @@ HGLib_DeviceRestart HGLib_DeviceShutDown HGLib_StartDeviceScan HGLib_StopDeviceScan -HGLib_StopDeviceScanAsyn \ No newline at end of file +HGLib_StopDeviceScanAsyn +HGLib_GetDeviceOperateCode \ No newline at end of file diff --git a/doc/scannerlib/新版SDK接口说明.doc b/doc/scannerlib/新版SDK接口说明.doc index 5046f9d9..2c8f6f7f 100644 Binary files a/doc/scannerlib/新版SDK接口说明.doc and b/doc/scannerlib/新版SDK接口说明.doc differ diff --git a/doc/scannerlib/新版SDK接口说明.pdf b/doc/scannerlib/新版SDK接口说明.pdf index ab04f832..54eb1862 100644 Binary files a/doc/scannerlib/新版SDK接口说明.pdf and b/doc/scannerlib/新版SDK接口说明.pdf differ diff --git a/sdk/scannerlib/HGLibDeviceImpl.cpp b/sdk/scannerlib/HGLibDeviceImpl.cpp index e3a24a9c..0e0f9978 100644 --- a/sdk/scannerlib/HGLibDeviceImpl.cpp +++ b/sdk/scannerlib/HGLibDeviceImpl.cpp @@ -227,6 +227,7 @@ HGLibDeviceImpl::HGLibDeviceImpl() m_eventParam = NULL; m_imageFunc = NULL; m_imageParam = NULL; + m_statusCode = SANE_STATUS_GOOD; } HGLibDeviceImpl::~HGLibDeviceImpl() @@ -384,11 +385,11 @@ HGBool HGLibDeviceImpl::GetSN(HGChar* sn, HGUInt maxLen) std::string serialNum; unsigned int serialNumLen = 0; - if (SANE_STATUS_NO_MEM == sane_io_control(m_devHandle, IO_CTRL_CODE_GET_SERIAL, NULL, &serialNumLen) - && serialNumLen) + m_statusCode = sane_io_control(m_devHandle, IO_CTRL_CODE_GET_SERIAL, NULL, &serialNumLen); + if (SANE_STATUS_NO_MEM == m_statusCode && serialNumLen) { serialNum.resize(serialNumLen); - sane_io_control(m_devHandle, IO_CTRL_CODE_GET_SERIAL, &serialNum[0], &serialNumLen); + m_statusCode = sane_io_control(m_devHandle, IO_CTRL_CODE_GET_SERIAL, &serialNum[0], &serialNumLen); } if (serialNum.empty() || maxLen < serialNum.size() + 1) @@ -411,11 +412,11 @@ HGBool HGLibDeviceImpl::GetFWVersion(HGChar* fwVersion, HGUInt maxLen) std::string versionNum; unsigned int versionNumLen = 0; - if (SANE_STATUS_NO_MEM == sane_io_control(m_devHandle, IO_CTRL_CODE_GET_HARDWARE_VERSION, NULL, &versionNumLen) - && versionNumLen) + m_statusCode = sane_io_control(m_devHandle, IO_CTRL_CODE_GET_HARDWARE_VERSION, NULL, &versionNumLen); + if (SANE_STATUS_NO_MEM == m_statusCode && versionNumLen) { versionNum.resize(versionNumLen); - sane_io_control(m_devHandle, IO_CTRL_CODE_GET_HARDWARE_VERSION, &versionNum[0], &versionNumLen); + m_statusCode = sane_io_control(m_devHandle, IO_CTRL_CODE_GET_HARDWARE_VERSION, &versionNum[0], &versionNumLen); } if (versionNum.empty() || maxLen < versionNum.size() + 1) @@ -439,7 +440,7 @@ HGBool HGLibDeviceImpl::SetParam(HGUInt option, const HGVoid* data) HGBool ret = HGFALSE; SANE_Int num_dev_options = 0; - sane_control_option(m_devHandle, 0, SANE_ACTION_GET_VALUE, &num_dev_options, NULL); + m_statusCode = sane_control_option(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 = sane_get_option_descriptor(m_devHandle, i); @@ -457,26 +458,30 @@ HGBool HGLibDeviceImpl::SetParam(HGUInt option, const HGVoid* data) SANE_Char* value = (SANE_Char*)GetOptionEnumValue(*(HGUInt*)data); if (NULL != value) { - if (SANE_STATUS_GOOD == sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, value, NULL)) + m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, value, NULL); + if (SANE_STATUS_GOOD == m_statusCode) ret = HGTRUE; } } else if (SANE_TYPE_INT == desp->type) { SANE_Int value = (SANE_Int)(*(HGInt*)data); - if (SANE_STATUS_GOOD == sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, &value, NULL)) + m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, &value, NULL); + if (SANE_STATUS_GOOD == m_statusCode) ret = HGTRUE; } else if (SANE_TYPE_FIXED == desp->type) { SANE_Fixed value = SANE_FIX(*(HGDouble*)data); - if (SANE_STATUS_GOOD == sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, &value, NULL)) + m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, &value, NULL); + if (SANE_STATUS_GOOD == m_statusCode) ret = HGTRUE; } else if (SANE_TYPE_BOOL == desp->type) { SANE_Bool value = (SANE_Bool)(*(HGBool*)data); - if (SANE_STATUS_GOOD == sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, &value, NULL)) + m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, &value, NULL); + if (SANE_STATUS_GOOD == m_statusCode) ret = HGTRUE; } @@ -496,7 +501,7 @@ HGLibDeviceParamGroup* HGLibDeviceImpl::GetParamGroupList(HGUInt* count) std::vector devParams; SANE_Int num_dev_options = 0; - sane_control_option(m_devHandle, 0, SANE_ACTION_GET_VALUE, &num_dev_options, NULL); + m_statusCode = sane_control_option(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 = sane_get_option_descriptor(m_devHandle, i); @@ -516,7 +521,7 @@ HGLibDeviceParamGroup* HGLibDeviceImpl::GetParamGroupList(HGUInt* count) else if (SANE_TYPE_STRING == desp->type) { char value[256] = { 0 }; - sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, value, NULL); + m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, value, NULL); DeviceParam devParam; devParam.option = name; @@ -539,7 +544,7 @@ HGLibDeviceParamGroup* HGLibDeviceImpl::GetParamGroupList(HGUInt* count) else if (SANE_TYPE_INT == desp->type) { SANE_Int value = 0; - sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL); + m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL); DeviceParam devParam; devParam.option = name; @@ -568,7 +573,7 @@ HGLibDeviceParamGroup* HGLibDeviceImpl::GetParamGroupList(HGUInt* count) else if (SANE_TYPE_FIXED == desp->type) { SANE_Word value = 0; - sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL); + m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL); DeviceParam devParam; devParam.option = name; @@ -597,7 +602,7 @@ HGLibDeviceParamGroup* HGLibDeviceImpl::GetParamGroupList(HGUInt* count) else if (SANE_TYPE_BOOL == desp->type) { SANE_Bool value = 0; - sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL); + m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL); DeviceParam devParam; devParam.option = name; @@ -702,7 +707,7 @@ HGLibDeviceParam* HGLibDeviceImpl::GetParam(HGUInt option) HGLibDeviceParam* param = NULL; SANE_Int num_dev_options = 0; - sane_control_option(m_devHandle, 0, SANE_ACTION_GET_VALUE, &num_dev_options, NULL); + m_statusCode = sane_control_option(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 = sane_get_option_descriptor(m_devHandle, i); @@ -721,7 +726,7 @@ HGLibDeviceParam* HGLibDeviceImpl::GetParam(HGUInt option) if (SANE_TYPE_STRING == desp->type) { char value[256] = { 0 }; - sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, value, NULL); + m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, value, NULL); devParam.valueType = HGLIB_OPTION_VALUETYPE_ENUM; devParam.stringValue = value; @@ -739,7 +744,7 @@ HGLibDeviceParam* HGLibDeviceImpl::GetParam(HGUInt option) else if (SANE_TYPE_INT == desp->type) { SANE_Int value = 0; - sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL); + m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL); devParam.valueType = HGLIB_OPTION_VALUETYPE_INT; devParam.intValue = (int)value; @@ -763,7 +768,7 @@ HGLibDeviceParam* HGLibDeviceImpl::GetParam(HGUInt option) else if (SANE_TYPE_FIXED == desp->type) { SANE_Word value = 0; - sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL); + m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL); devParam.valueType = HGLIB_OPTION_VALUETYPE_DOUBLE; devParam.doubleValue = SANE_UNFIX(value); @@ -787,7 +792,7 @@ HGLibDeviceParam* HGLibDeviceImpl::GetParam(HGUInt option) else if (SANE_TYPE_BOOL == desp->type) { SANE_Bool value = 0; - sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL); + m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL); devParam.valueType = HGLIB_OPTION_VALUETYPE_BOOL; devParam.boolValue = (bool)value; @@ -916,7 +921,7 @@ HGBool HGLibDeviceImpl::ResetParam() HGBool ret = HGFALSE; SANE_Int num_dev_options = 0; - sane_control_option(m_devHandle, 0, SANE_ACTION_GET_VALUE, &num_dev_options, NULL); + m_statusCode = sane_control_option(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 = sane_get_option_descriptor(m_devHandle, i); @@ -929,7 +934,8 @@ HGBool HGLibDeviceImpl::ResetParam() if (0 == strcmp(SANE_STD_OPT_NAME_RESTORE, name) && SANE_TYPE_BUTTON == desp->type) { - if (SANE_STATUS_GOOD == sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, NULL, NULL)) + m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, NULL, NULL); + if (SANE_STATUS_GOOD == m_statusCode) ret = HGTRUE; break; } @@ -942,8 +948,8 @@ HGBool HGLibDeviceImpl::IsPaperOn() { SANE_Bool isOn = SANE_FALSE; unsigned int len = sizeof(SANE_Bool); - SANE_Status status = sane_io_control(m_devHandle, IO_CTRL_CODE_GET_PAPER_ON, &isOn, &len); - if (SANE_STATUS_GOOD == status && isOn) + m_statusCode = sane_io_control(m_devHandle, IO_CTRL_CODE_GET_PAPER_ON, &isOn, &len); + if (SANE_STATUS_GOOD == m_statusCode && isOn) return HGTRUE; return HGFALSE; } @@ -952,8 +958,8 @@ HGInt HGLibDeviceImpl::GetStatus() { SANE_Bool isOn = SANE_FALSE; unsigned int len = sizeof(SANE_Bool); - SANE_Status status = sane_io_control(m_devHandle, IO_CTRL_CODE_GET_PAPER_ON, &isOn, &len); - if (SANE_STATUS_GOOD == status) + m_statusCode = sane_io_control(m_devHandle, IO_CTRL_CODE_GET_PAPER_ON, &isOn, &len); + if (SANE_STATUS_GOOD == m_statusCode) return isOn ? 1 : 0; return -1; } @@ -962,8 +968,8 @@ HGBool HGLibDeviceImpl::Restart() { SANE_Power stat = SANE_POWER_RESTART; unsigned int len = sizeof(SANE_Power); - SANE_Status status = sane_io_control(m_devHandle, IO_CTRL_CODE_SET_POWER_LEVEL, &stat, &len); - if (SANE_STATUS_GOOD == status) + m_statusCode = sane_io_control(m_devHandle, IO_CTRL_CODE_SET_POWER_LEVEL, &stat, &len); + if (SANE_STATUS_GOOD == m_statusCode) return HGTRUE; return HGFALSE; } @@ -972,8 +978,8 @@ HGBool HGLibDeviceImpl::ShutDown() { SANE_Power stat = SANE_POWER_SHUTDOWN; unsigned int len = sizeof(SANE_Power); - SANE_Status status = sane_io_control(m_devHandle, IO_CTRL_CODE_SET_POWER_LEVEL, &stat, &len); - if (SANE_STATUS_GOOD == status) + m_statusCode = sane_io_control(m_devHandle, IO_CTRL_CODE_SET_POWER_LEVEL, &stat, &len); + if (SANE_STATUS_GOOD == m_statusCode) return HGTRUE; return HGFALSE; } @@ -1001,8 +1007,8 @@ HGBool HGLibDeviceImpl::StartScan(HGLibDeviceScanEventFunc eventFunc, HGPointer m_imageParam = imageParam; m_scanning = HGTRUE; - SANE_Status status = sane_start(m_devHandle); - if (SANE_STATUS_GOOD != status) + m_statusCode = sane_start(m_devHandle); + if (SANE_STATUS_GOOD != m_statusCode) { m_scanning = HGFALSE; m_eventFunc = NULL; @@ -1062,6 +1068,11 @@ HGBool HGLibDeviceImpl::StopScanAsyn() return ret; } +HGInt HGLibDeviceImpl::GetOperateCode() +{ + return m_statusCode; +} + const char* HGLibDeviceImpl::GetGroupName(HGUInt group) { if (group > HGLIB_GROUP_NAME_PAPERFEEDING) diff --git a/sdk/scannerlib/HGLibDeviceImpl.hpp b/sdk/scannerlib/HGLibDeviceImpl.hpp index 88c27958..c6e1ffae 100644 --- a/sdk/scannerlib/HGLibDeviceImpl.hpp +++ b/sdk/scannerlib/HGLibDeviceImpl.hpp @@ -39,6 +39,7 @@ public: HGLibDeviceScanImageFunc imageFunc, HGPointer imageParam); HGBool StopScan(); HGBool StopScanAsyn(); + HGInt GetOperateCode(); private: static const char* GetGroupName(HGUInt group); @@ -65,6 +66,7 @@ private: HGPointer m_eventParam; HGLibDeviceScanImageFunc m_imageFunc; HGPointer m_imageParam; + HGInt m_statusCode; }; #endif /* __HGLIBDEVICEIMPL_HPP__ */ \ No newline at end of file diff --git a/sdk/scannerlib/HGScannerLib.cpp b/sdk/scannerlib/HGScannerLib.cpp index 615d6936..2bd22abd 100644 --- a/sdk/scannerlib/HGScannerLib.cpp +++ b/sdk/scannerlib/HGScannerLib.cpp @@ -318,3 +318,14 @@ HGBool HGAPI HGLib_StopDeviceScanAsyn(HGLibDevice device) HGLibDeviceImpl* deviceImpl = (HGLibDeviceImpl*)device; return deviceImpl->StopScanAsyn(); } + +HGInt HGAPI HGLib_GetDeviceOperateCode(HGLibDevice device) +{ + if (NULL == device) + { + return 0; + } + + HGLibDeviceImpl* deviceImpl = (HGLibDeviceImpl*)device; + return deviceImpl->GetOperateCode(); +} diff --git a/sdk/scannerlib/HGScannerLib.h b/sdk/scannerlib/HGScannerLib.h index 516e2af2..1460368f 100644 --- a/sdk/scannerlib/HGScannerLib.h +++ b/sdk/scannerlib/HGScannerLib.h @@ -29,6 +29,20 @@ HG_DECLARE_HANDLE(HGLibDevice); #define HGLIB_TIFFCOMPRESSION_LZW 3L #define HGLIB_TIFFCOMPRESSION_JPEG 4L +/* 豸 */ +#define HGLIB_DEV_OPERATECODE_GOOD 0L +#define HGLIB_DEV_OPERATECODE_UNSUPPORTED 1L +#define HGLIB_DEV_OPERATECODE_CANCELLED 2L +#define HGLIB_DEV_OPERATECODE_BUSY 3L +#define HGLIB_DEV_OPERATECODE_INVAL 4L +#define HGLIB_DEV_OPERATECODE_EOF 5L +#define HGLIB_DEV_OPERATECODE_JAMMED 6L +#define HGLIB_DEV_OPERATECODE_NO_DOCS 7L +#define HGLIB_DEV_OPERATECODE_COVER_OPEN 8L +#define HGLIB_DEV_OPERATECODE_IO_ERROR 9L +#define HGLIB_DEV_OPERATECODE_NO_MEM 10L +#define HGLIB_DEV_OPERATECODE_ACCESS_DENIED 11L + /* 豸Ȱβ¼ */ #define HGLIB_DEVHOTPLUG_EVENT_ARRIVE 1L #define HGLIB_DEVHOTPLUG_EVENT_REMOVE 2L @@ -546,4 +560,7 @@ HGEXPORT HGBool HGAPI HGLib_StopDeviceScan(HGLibDevice device); /* ֹͣɨ-첽 */ HGEXPORT HGBool HGAPI HGLib_StopDeviceScanAsyn(HGLibDevice device); +/* ȡ豸루ڵ豸Ժ */ +HGEXPORT HGInt HGAPI HGLib_GetDeviceOperateCode(HGLibDevice device); + #endif /* __HGSCANNERLIB_H__ */ \ No newline at end of file