Kaynağa Gözat

Add status code debugging

Alexey Edelev 4 yıl önce
ebeveyn
işleme
8f50499d7d
3 değiştirilmiş dosya ile 52 ekleme ve 8 silme
  1. 48 7
      src/qtwaincontext.cpp
  2. 3 0
      src/qtwaincontext_p.h
  3. 1 1
      src/qtwaineventfilter.cpp

+ 48 - 7
src/qtwaincontext.cpp

@@ -34,6 +34,7 @@ using namespace QtTWAIN;
 
 QTWAINContext::QTWAINContext() : m_dsm(QDSMInterface::instance())
   , m_state(Initial)
+  , m_windowHandle(nullptr)
 {
     //TODO: refactor app identity initialization to real app name read from QApplication
     //Ok for now
@@ -49,6 +50,8 @@ QTWAINContext::QTWAINContext() : m_dsm(QDSMInterface::instance())
     memcpy(m_appIdentity.Manufacturer, "QtTWAIN", sizeof(m_appIdentity.Manufacturer) > strlen("QtTWAIN") ? strlen("QtTWAIN") : sizeof(m_appIdentity.Manufacturer));
     memcpy(m_appIdentity.ProductFamily, "QtTWAIN", sizeof(m_appIdentity.ProductFamily) > strlen("QtTWAIN") ? strlen("QtTWAIN") : sizeof(m_appIdentity.ProductFamily));
     memcpy(m_appIdentity.ProductName, "QtTWAIN", sizeof(m_appIdentity.ProductName) > strlen("QtTWAIN") ? strlen("QtTWAIN") : sizeof(m_appIdentity.ProductName));
+
+    memset(&m_status, 0, sizeof(m_status));
 }
 
 QTWAINContext::~QTWAINContext()
@@ -67,7 +70,8 @@ void QTWAINContext::openDSM(const WId winId)
     m_windowHandle = reinterpret_cast<TW_HANDLE>(winId);
     if (m_windowHandle != nullptr) {
         if (TWRC_SUCCESS != m_dsm->entry(&m_appIdentity, nullptr, DG_CONTROL, DAT_PARENT, MSG_OPENDSM, &m_windowHandle)) {
-            qCritical() << "Unable to open DSM";
+            QtTWAIN::QDSMInterface::instance()->entry(&m_appIdentity, nullptr, DG_CONTROL, DAT_STATUS, MSG_GET, &m_status);
+            qCritical() << "Unable to open DSM: " << m_status.ConditionCode;
             return;
         }
         m_state = DSMOpen;
@@ -111,6 +115,8 @@ void QTWAINContext::fetchScannerList()
         if (result == TWRC_SUCCESS) {
             m_scannerList[QString(m_appIdentity.ProductName)] = std::shared_ptr<QTWAINScanner>(new QTWAINScanner(scanner_p));
         } else {
+            updateStatus();
+            qDebug() << "Unable to add scanner: " << m_status.ConditionCode;
             delete scanner_p;
         }
         scanner_p = new QTWAINScannerPrivate(this);
@@ -120,12 +126,21 @@ void QTWAINContext::fetchScannerList()
 
 bool QTWAINContext::openDS(TW_IDENTITY *dataSource)
 {
-    return TWRC_SUCCESS == m_dsm->entry(&m_appIdentity, nullptr, DG_CONTROL, DAT_IDENTITY, MSG_OPENDS, dataSource);
+    if (TWRC_SUCCESS != m_dsm->entry(&m_appIdentity, nullptr, DG_CONTROL, DAT_IDENTITY, MSG_OPENDS, dataSource)) {
+        updateStatus();
+        qDebug() << "Unable to open scanner: " << m_status.ConditionCode;
+        return false;
+    }
+
+    return true;
 }
 
 void QTWAINContext::closeDS(TW_IDENTITY *dataSource)
 {
-    m_dsm->entry(&m_appIdentity, nullptr, DG_CONTROL, DAT_IDENTITY, MSG_CLOSEDS, dataSource);
+    if (TWRC_SUCCESS != m_dsm->entry(&m_appIdentity, nullptr, DG_CONTROL, DAT_IDENTITY, MSG_CLOSEDS, dataSource)) {
+        updateStatus();
+        qDebug() << "Unable to close scanner: " << m_status.ConditionCode;
+    }
 }
 
 bool QTWAINContext::enableDS(TW_IDENTITY *dataSource)
@@ -134,14 +149,25 @@ bool QTWAINContext::enableDS(TW_IDENTITY *dataSource)
     memset(&uiSettings, 0, sizeof(uiSettings));
     uiSettings.ShowUI = true;
     uiSettings.hParent = m_windowHandle;
-    return TWRC_SUCCESS == m_dsm->entry(&m_appIdentity, dataSource, DG_CONTROL, DAT_USERINTERFACE, MSG_ENABLEDS, &uiSettings);
+    if (TWRC_SUCCESS != m_dsm->entry(&m_appIdentity, dataSource, DG_CONTROL, DAT_USERINTERFACE, MSG_ENABLEDS, &uiSettings)) {
+        updateStatus();
+        qDebug() << "Unable to enable scanner: " << m_status.ConditionCode;
+        return false;
+    }
+    return true;
 }
 
 bool QTWAINContext::disableDS(TW_IDENTITY *dataSource)
 {
     TW_USERINTERFACE uiSettings;
     memset(&uiSettings, 0, sizeof(uiSettings));
-    return TWRC_SUCCESS == m_dsm->entry(&m_appIdentity, dataSource, DG_CONTROL, DAT_USERINTERFACE, MSG_DISABLEDS, &uiSettings);
+    if (TWRC_SUCCESS != m_dsm->entry(&m_appIdentity, dataSource, DG_CONTROL, DAT_USERINTERFACE, MSG_DISABLEDS, &uiSettings)) {
+        updateStatus();
+        qDebug() << "Unable to disable scanner: " << m_status.ConditionCode;
+        return false;
+    }
+
+    return true;
 }
 
 
@@ -152,7 +178,12 @@ bool QTWAINContext::processEvent(TW_EVENT *event, TW_IDENTITY *dataSource)
 
 bool QTWAINContext::imageInfo(TW_IMAGEINFO *info, TW_IDENTITY *dataSource)
 {
-    return TWRC_SUCCESS == m_dsm->entry(&m_appIdentity, dataSource, DG_IMAGE, DAT_IMAGEINFO, MSG_GET, info);
+    if (TWRC_SUCCESS != m_dsm->entry(&m_appIdentity, dataSource, DG_IMAGE, DAT_IMAGEINFO, MSG_GET, info)) {
+        updateStatus();
+        qDebug() << "Unable to get information about image: " << m_status.ConditionCode;
+        return false;
+    }
+    return true;
 }
 
 quint16 QTWAINContext::imageNativeTransfer(TW_HANDLE *imgHandle, TW_IDENTITY *dataSource)
@@ -162,5 +193,15 @@ quint16 QTWAINContext::imageNativeTransfer(TW_HANDLE *imgHandle, TW_IDENTITY *da
 
 bool QTWAINContext::endTransfer(TW_PENDINGXFERS *pendingTransfers, TW_IDENTITY *dataSource)
 {
-    return TWRC_SUCCESS == m_dsm->entry(&m_appIdentity, dataSource, DG_CONTROL, DAT_PENDINGXFERS, MSG_ENDXFER, pendingTransfers);
+    if (TWRC_SUCCESS != m_dsm->entry(&m_appIdentity, dataSource, DG_CONTROL, DAT_PENDINGXFERS, MSG_ENDXFER, pendingTransfers)) {
+        updateStatus();
+        qDebug() << "Unable to complete image transfer: " << m_status.ConditionCode;
+        return false;
+    }
+    return true;
+}
+
+void QTWAINContext::updateStatus(TW_IDENTITY *dataSource)
+{
+    QtTWAIN::QDSMInterface::instance()->entry(&m_appIdentity, dataSource, DG_CONTROL, DAT_STATUS, MSG_GET, &m_status);
 }

+ 3 - 0
src/qtwaincontext_p.h

@@ -69,6 +69,8 @@ public:
     bool processEvent(TW_EVENT *event, TW_IDENTITY *dataSource);
     quint16 imageNativeTransfer(TW_HANDLE *imgHandle, TW_IDENTITY *dataSource);
     bool endTransfer(TW_PENDINGXFERS *pendingTransfers, TW_IDENTITY *dataSource);
+
+    void updateStatus(TW_IDENTITY *dataSource = nullptr);
 private:
     QTWAINContext();
     ~QTWAINContext();
@@ -84,6 +86,7 @@ private:
 
     TW_MEMREF m_windowHandle;
     TW_IDENTITY m_appIdentity; /**< current application identity */
+    TW_STATUS m_status;
 
     QHash<QString, std::shared_ptr<QtTWAIN::QTWAINScanner>> m_scannerList;
 };

+ 1 - 1
src/qtwaineventfilter.cpp

@@ -43,7 +43,7 @@ QTWAINEventFilter::~QTWAINEventFilter()
     QCoreApplication::instance()->removeNativeEventFilter(this);
 }
 
-bool QTWAINEventFilter::nativeEventFilter(const QByteArray &, void *message, long *result)
+bool QTWAINEventFilter::nativeEventFilter(const QByteArray &, void *message, long *)
 {
     return scanner->processEvent(message);
 }