From 36f2d7dab1e65507841067073dd66d72b2dc663c Mon Sep 17 00:00:00 2001
From: Jan Breuer <jan.breuer@jaybee.cz>
Date: 周二, 04 12月 2012 17:24:30 +0800
Subject: [PATCH] Correct type refactoryng in README

---
 scpi/scpi_error.c |  160 ++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 120 insertions(+), 40 deletions(-)

diff --git a/scpi/scpi_error.c b/scpi/scpi_error.c
index 5b67c5e..2cc1620 100644
--- a/scpi/scpi_error.c
+++ b/scpi/scpi_error.c
@@ -34,48 +34,37 @@
  * 
  */
 
-#include "scpi.h"
-#include "scpi_ieee488.h"
-#include "scpi_error.h"
 #include <stdint.h>
 
-static int16_t scpi_err = 0;
+#include "scpi_parser.h"
+#include "scpi_ieee488.h"
+#include "scpi_error.h"
+#include "scpi_fifo.h"
+
+// basic FIFO
+static fifo_t local_error_queue;
+
+
+
+void SCPI_ErrorInit(scpi_t * context) {
+    //// FreeRTOS
+    // context->error_queue = (scpi_error_queue_t)xQueueCreate(100, sizeof(int16_t));
+    
+    // basic FIFO
+    context->error_queue = (scpi_error_queue_t)&local_error_queue;
+    fifo_init((fifo_t *)context->error_queue);
+}
 
 /**
  * Clear error queue
  * @param context - scpi context
  */
-void SCPI_ErrorClear(scpi_context_t * context) {
-    (void)context;
-    scpi_err = 0;
-}
-
-/**
- * Push error to queue
- * @param context - scpi context
- * @param err - error number
- */
-void SCPI_ErrorPush(scpi_context_t * context, int16_t err) {
-    scpi_err = err;
+void SCPI_ErrorClear(scpi_t * context) {
+    //// FreeRTOS
+    //xQueueReset((xQueueHandle)context->error_queue);
     
-     // Command error (e.g. syntax error)
-    if ((err < -101) && (err > -158)) {
-        SCPI_RegSetBits(SCPI_REG_ESR, ESR_CER);
-    }
-
-    // Execution Error (e.g. range error)
-    if ((err < -211) && (err > -230)) {
-        SCPI_RegSetBits(SCPI_REG_ESR, ESR_EER);
-    }
-
-    // Device Dependent Error
-    if ((err < -501) && (err > -748)) {
-        SCPI_RegSetBits(SCPI_REG_ESR, ESR_DER);
-    }  
-    
-    if (context && context->interface && context->interface->error) {
-        context->interface->error(context, err);
-    }
+    // basic FIFO
+    fifo_clear((fifo_t *)context->error_queue);
 }
 
 /**
@@ -83,11 +72,100 @@
  * @param context - scpi context
  * @return error number
  */
-int16_t SCPI_ErrorPop(scpi_context_t * context) {
-    (void)context;
-    int16_t result = scpi_err;
-    scpi_err = 0;
+int16_t SCPI_ErrorPop(scpi_t * context) {
+    int16_t result = 0;
+    
+    //// FreeRTOS
+    //if (pdFALSE == xQueueReceive((xQueueHandle)context->error_queue, &result, 0)) {
+    //    result = 0;
+    //}
+    
+    // basic FIFO
+    fifo_pop((fifo_t *)context->error_queue, &result);
+
     return result;
+}
+
+/**
+ * Return number of errors/events in the queue
+ * @param context
+ * @return 
+ */
+int32_t SCPI_ErrorCount(scpi_t * context) {
+    int16_t result = 0;
+    
+    //// FreeRTOS
+    //result = uxQueueMessagesWaiting((xQueueHandle)context->error_queue);    
+    
+    //basic FIFO
+    fifo_count((fifo_t *)context->error_queue, &result);
+    
+    
+    return result;
+}
+
+static void SCPI_ErrorPushInternal(scpi_t * context, int16_t err) {
+    //// FreeRTOS
+    //xQueueSend((xQueueHandle)context->error_queue, &err, 0);
+    
+    // basic FIFO
+    fifo_push((fifo_t *)context->error_queue, err);
+}
+/**
+ * Push error to queue
+ * @param context - scpi context
+ * @param err - error number
+ */
+void SCPI_ErrorPush(scpi_t * context, int16_t err) {
+    SCPI_ErrorPushInternal(context, err);
+    
+    // Command error (e.g. syntax error) ch 21.8.9
+    if ((err < -100) && (err > -199)) {
+        SCPI_RegSetBits(SCPI_REG_ESR, ESR_CER);
+    }
+
+    // Execution Error (e.g. range error) ch 21.8.10
+    if ((err < -200) && (err > -299)) {
+        SCPI_RegSetBits(SCPI_REG_ESR, ESR_EER);
+    }
+
+    // Device specific error -300, -399 ch 21.8.11
+    if ((err < -300) && (err > -399)) {
+        SCPI_RegSetBits(SCPI_REG_ESR, ESR_DER);
+    }
+
+    // Query error -400, -499 ch 21.8.12
+    if ((err < -400) && (err > -499)) {
+        SCPI_RegSetBits(SCPI_REG_ESR, ESR_QER);
+    }
+
+    // Power on event -500, -599 ch 21.8.13
+    if ((err < -500) && (err > -599)) {
+        SCPI_RegSetBits(SCPI_REG_ESR, ESR_PON);
+    }
+
+    // User Request Event -600, -699 ch 21.8.14
+    if ((err < -600) && (err > -699)) {
+        SCPI_RegSetBits(SCPI_REG_ESR, ESR_URQ);
+    }
+
+    // Request Control Event -700, -799 ch 21.8.15
+    if ((err < -700) && (err > -799)) {
+        SCPI_RegSetBits(SCPI_REG_ESR, ESR_REQ);
+    }
+
+    // Operation Complete Event -800, -899 ch 21.8.16
+    if ((err < -800) && (err > -899)) {
+        SCPI_RegSetBits(SCPI_REG_ESR, ESR_OPC);
+    }
+
+    if (context) {
+        if (context->interface && context->interface->error) {
+            context->interface->error(context, err);
+        }
+
+        context->cmd_error = TRUE;
+    }
 }
 
 /**
@@ -96,7 +174,7 @@
  * @return Error string representation
  */
 const char * SCPI_ErrorTranslate(int16_t err) {
-    switch(err) {
+    switch (err) {
         case 0: return "No error";
         case SCPI_ERROR_SYNTAX: return "Syntax error";
         case SCPI_ERROR_INVALID_SEPARATOR: return "Invalid separator";
@@ -107,4 +185,6 @@
         case SCPI_ERROR_SUFFIX_NOT_ALLOWED: return "Suffix not allowed";
         default: return "Unknown error";
     }
-}
\ No newline at end of file
+}
+
+

--
Gitblit v1.9.1