From c1e514e03ab7de4399ca12c9ae988b0707a99f8b Mon Sep 17 00:00:00 2001
From: Jan Breuer <jan.breuer@jaybee.cz>
Date: 周二, 15 9月 2015 03:13:35 +0800
Subject: [PATCH] Resolve #46: Detect missing parameter

---
 libscpi/src/error.c |   37 +++++++++++++++++++++++++++++++++----
 1 files changed, 33 insertions(+), 4 deletions(-)

diff --git a/libscpi/src/error.c b/libscpi/src/error.c
index d856db3..34735d2 100644
--- a/libscpi/src/error.c
+++ b/libscpi/src/error.c
@@ -61,6 +61,33 @@
 }
 
 /**
+ * Emit no error
+ * @param context scpi context
+ */
+static void SCPI_ErrorEmitEmpty(scpi_t * context) {
+    if ((SCPI_ErrorCount(context) == 0) && (SCPI_RegGet(context, SCPI_REG_STB) & STB_QMA)) {
+        SCPI_RegClearBits(context, SCPI_REG_STB, STB_QMA);
+
+        if (context->interface && context->interface->error) {
+            context->interface->error(context, 0);
+        }
+    }
+}
+
+/**
+ * Emit error
+ * @param context scpi context
+ * @param err Error to emit
+ */
+static void SCPI_ErrorEmit(scpi_t * context, int16_t err) {
+    SCPI_RegSetBits(context, SCPI_REG_STB, STB_QMA);
+
+    if (context->interface && context->interface->error) {
+        context->interface->error(context, err);
+    }
+}
+
+/**
  * Clear error queue
  * @param context - scpi context
  */
@@ -72,6 +99,8 @@
 
     /* basic FIFO */
     fifo_clear((scpi_fifo_t *)context->error_queue);
+
+    SCPI_ErrorEmitEmpty(context);
 }
 
 /**
@@ -91,6 +120,8 @@
 
     /* basic FIFO */
     fifo_remove((scpi_fifo_t *)context->error_queue, &result);
+
+    SCPI_ErrorEmitEmpty(context);
 
     return result;
 }
@@ -161,11 +192,9 @@
         }
     }
 
-    if (context) {
-        if (context->interface && context->interface->error) {
-            context->interface->error(context, err);
-        }
+    SCPI_ErrorEmit(context, err);
 
+    if (context) {
         context->cmd_error = TRUE;
     }
 }

--
Gitblit v1.9.1