diff --git a/app/scanner2/device_user.cpp b/app/scanner2/device_user.cpp index 0117e42d..1e6fffa8 100644 --- a/app/scanner2/device_user.cpp +++ b/app/scanner2/device_user.cpp @@ -260,7 +260,14 @@ HGResult DeviceUser::Open() } else { - return HGSane_OpenSelectedDevice(m_source, m_wnd, &m_saneDev); + HGChar errInfo[256]; + HGResult ret = HGSane_OpenSelectedDevice(m_source, m_wnd, &m_saneDev, errInfo, 256); + if (HGBASE_ERR_OK != ret) + { + QMessageBox::information(m_wnd, tr("Prompt"), errInfo); + } + + return ret; } } @@ -281,7 +288,13 @@ HGResult DeviceUser::OpenDefault() else { HGChar errInfo[256]; - return HGSane_OpenDevice(m_source, 0, &m_saneDev, errInfo, 256); + HGResult ret = HGSane_OpenDevice(m_source, 0, &m_saneDev, errInfo, 256); + if (HGBASE_ERR_OK != ret) + { + QMessageBox::information(m_wnd, tr("Prompt"), errInfo); + } + + return ret; } } diff --git a/modules/sane_user/HGSane.cpp b/modules/sane_user/HGSane.cpp index e5d4ba2e..7cfa255e 100644 --- a/modules/sane_user/HGSane.cpp +++ b/modules/sane_user/HGSane.cpp @@ -180,7 +180,7 @@ HGResult HGAPI HGSane_OpenDevice(HGSaneSource source, HGUInt index, HGSaneDevice return HGBASE_ERR_OK; } -HGResult HGAPI HGSane_OpenSelectedDevice(HGSaneSource source, HGWindow parent, HGSaneDevice* dev) +HGResult HGAPI HGSane_OpenSelectedDevice(HGSaneSource source, HGWindow parent, HGSaneDevice* dev, HGChar* errInfo, HGUInt errInfoLen) { if (NULL == source) { @@ -189,7 +189,7 @@ HGResult HGAPI HGSane_OpenSelectedDevice(HGSaneSource source, HGWindow parent, H HGSaneSourceImpl* saneSourceImpl = (HGSaneSourceImpl*)source; class HGSaneDeviceImpl* saneDeviceImpl = NULL; - HGResult ret = saneSourceImpl->OpenSelectedDevice(parent, &saneDeviceImpl); + HGResult ret = saneSourceImpl->OpenSelectedDevice(parent, &saneDeviceImpl, errInfo, errInfoLen); if (HGBASE_ERR_OK != ret) { return ret; diff --git a/modules/sane_user/HGSane.h b/modules/sane_user/HGSane.h index 411de9af..6c3ce585 100644 --- a/modules/sane_user/HGSane.h +++ b/modules/sane_user/HGSane.h @@ -71,7 +71,7 @@ HGEXPORT HGResult HGAPI HGSane_GetDeviceNameWithIndex(HGSaneSource source, HGUIn HGEXPORT HGResult HGAPI HGSane_OpenDevice(HGSaneSource source, HGUInt index, HGSaneDevice *dev, HGChar *errInfo, HGUInt errInfoLen); -HGEXPORT HGResult HGAPI HGSane_OpenSelectedDevice(HGSaneSource source, HGWindow parent, HGSaneDevice* dev); +HGEXPORT HGResult HGAPI HGSane_OpenSelectedDevice(HGSaneSource source, HGWindow parent, HGSaneDevice* dev, HGChar* errInfo, HGUInt errInfoLen); HGEXPORT HGResult HGAPI HGSane_CloseDevice(HGSaneDevice dev); diff --git a/modules/sane_user/HGSaneImpl.cpp b/modules/sane_user/HGSaneImpl.cpp index 0e992fd3..70f5e9bf 100644 --- a/modules/sane_user/HGSaneImpl.cpp +++ b/modules/sane_user/HGSaneImpl.cpp @@ -507,7 +507,7 @@ HGResult HGSaneSourceImpl::OpenDevice(HGUInt index, HGSaneDeviceImpl** deviceImp return HGBASE_ERR_OK; } -HGResult HGSaneSourceImpl::OpenSelectedDevice(HGWindow parent, class HGSaneDeviceImpl** deviceImpl) +HGResult HGSaneSourceImpl::OpenSelectedDevice(HGWindow parent, class HGSaneDeviceImpl** deviceImpl, HGChar* errInfo, HGUInt errInfoLen) { if (NULL == deviceImpl) { @@ -524,7 +524,22 @@ HGResult HGSaneSourceImpl::OpenSelectedDevice(HGWindow parent, class HGSaneDevic GetDeviceName(i, name, 256); SANE_Handle handle = NULL; - m_saneApi.sane_open_api(name, &handle); + SANE_Status stat = m_saneApi.sane_open_api(name, &handle); + if (SANE_STATUS_GOOD != stat) + { + if (NULL != errInfo) + { + const char* err = m_saneApi.sane_strstatus_api(stat); + if (NULL != err && errInfoLen >= strlen(err) + 1) + { + strcpy(errInfo, err); + } + } + + if (1 == count) + return HGBASE_ERR_FAIL; + } + if (NULL != handle) { HGChar sn[256] = {0}; @@ -553,7 +568,18 @@ HGResult HGSaneSourceImpl::OpenSelectedDevice(HGWindow parent, class HGSaneDevic if (devs[i].id == id) { strcpy(devName, devs[i].name.c_str()); - m_saneApi.sane_open_api(devs[i].name.c_str(), &handle); + SANE_Status stat = m_saneApi.sane_open_api(devs[i].name.c_str(), &handle); + if (SANE_STATUS_GOOD != stat) + { + if (NULL != errInfo) + { + const char* err = m_saneApi.sane_strstatus_api(stat); + if (NULL != err && errInfoLen >= strlen(err) + 1) + { + strcpy(errInfo, err); + } + } + } break; } } diff --git a/modules/sane_user/HGSaneImpl.hpp b/modules/sane_user/HGSaneImpl.hpp index c53623a0..dfbcbd8e 100644 --- a/modules/sane_user/HGSaneImpl.hpp +++ b/modules/sane_user/HGSaneImpl.hpp @@ -51,7 +51,7 @@ public: HGResult GetDeviceCount(HGUInt *count); HGResult GetDeviceName(HGUInt index, HGChar* name, HGUInt maxLen); HGResult OpenDevice(HGUInt index, class HGSaneDeviceImpl **deviceImpl, HGChar* errInfo, HGUInt errInfoLen); - HGResult OpenSelectedDevice(HGWindow parent, class HGSaneDeviceImpl** deviceImpl); + HGResult OpenSelectedDevice(HGWindow parent, class HGSaneDeviceImpl** deviceImpl, HGChar* errInfo, HGUInt errInfoLen); private: static HGResult FindFunctions(HGDll dll, const HGChar* saneManu, SANEAPI *saneAPI);