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, 118 insertions(+), 42 deletions(-) diff --git a/scpi/scpi_error.c b/scpi/scpi_error.c index 8b2aa9e..2cc1620 100644 --- a/scpi/scpi_error.c +++ b/scpi/scpi_error.c @@ -34,52 +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_t * context) { - (void) context; - scpi_err = 0; -} - -/** - * Push error to queue - * @param context - scpi context - * @param err - error number - */ -void SCPI_ErrorPush(scpi_t * context, int16_t err) { - scpi_err = err; - - // 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) { - if (context->interface && context->interface->error) { - context->interface->error(context, err); - } - - context->error = TRUE; - } + //// FreeRTOS + //xQueueReset((xQueueHandle)context->error_queue); + + // basic FIFO + fifo_clear((fifo_t *)context->error_queue); } /** @@ -88,10 +73,99 @@ * @return error number */ int16_t SCPI_ErrorPop(scpi_t * context) { - (void) context; - int16_t result = scpi_err; - scpi_err = 0; + 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; + } } /** @@ -111,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