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