From 9b43058766282733ab8c2c290f4736e2d8bd5014 Mon Sep 17 00:00:00 2001 From: Jan Breuer <jan.breuer@jaybee.cz> Date: 周日, 24 4月 2016 22:12:06 +0800 Subject: [PATCH] Add tests for Device dependent error information --- libscpi/src/parser.c | 51 ++++++++++++++++++++++++++++++++------------------- 1 files changed, 32 insertions(+), 19 deletions(-) diff --git a/libscpi/src/parser.c b/libscpi/src/parser.c index b7534cc..db6f5df 100644 --- a/libscpi/src/parser.c +++ b/libscpi/src/parser.c @@ -219,11 +219,11 @@ result &= processCommand(context); cmd_prev = state->programHeader; } else { - /* test */ /* place undefined header with error */ - data[r ? (r - 1) : r] = 0; - SCPI_ErrorPushEx(context, SCPI_ERROR_UNDEFINED_HEADER, data); - //SCPI_ErrorPush(context, SCPI_ERROR_UNDEFINED_HEADER); + /* calculate length of errornouse header and trim \r\n */ + size_t r2 = r; + while(r2 > 0 && (data[r2 - 1] == '\r' || data[r2 - 1] == '\n')) r2--; + SCPI_ErrorPushEx(context, SCPI_ERROR_UNDEFINED_HEADER, data, r2); result = FALSE; } } @@ -246,9 +246,17 @@ /** * Initialize SCPI context structure * @param context - * @param command_list - * @param buffer + * @param commands * @param interface + * @param units + * @param idn1 + * @param idn2 + * @param idn3 + * @param idn4 + * @param input_buffer + * @param input_buffer_length + * @param error_queue_data + * @param error_queue_size */ void SCPI_Init(scpi_t * context, const scpi_command_t * commands, @@ -256,8 +264,7 @@ const scpi_unit_def_t * units, const char * idn1, const char * idn2, const char * idn3, const char * idn4, char * input_buffer, size_t input_buffer_length, - scpi_error_t * error_queue_data, int16_t error_queue_size, - char * error_info_heap, size_t error_info_heap_length) { + scpi_error_t * error_queue_data, int16_t error_queue_size) { memset(context, 0, sizeof (*context)); context->cmdlist = commands; context->interface = interface; @@ -269,13 +276,22 @@ context->buffer.data = input_buffer; context->buffer.length = input_buffer_length; context->buffer.position = 0; - context->error_info_heap.data = error_info_heap; - context->error_info_heap.wr = 0; - context->error_info_heap.size = error_info_heap_length; - context->error_info_heap.count = context->error_info_heap.size; - memset(context->error_info_heap.data, 0, context->error_info_heap.size); SCPI_ErrorInit(context, error_queue_data, error_queue_size); } + +#if USE_DEVICE_DEPENDENT_ERROR_INFORMATION && !USE_MEMORY_ALLOCATION_FREE +/** + * Initialize context's + * @param context + * @param data + * @param len + * @return + */ +void SCPI_InitHeap(scpi_t * context, + char * error_info_heap, size_t error_info_heap_length) { + scpiheap_init(&context->error_info_heap, error_info_heap, error_info_heap_length); +} +#endif /** * Interface to the application. Adds data to system buffer and try to search @@ -527,8 +543,9 @@ size_t step = 0; const char * quote; - char * data[SCPIDEFINE_DESCRIPTION_MAX_PARTS]; + const char * data[SCPIDEFINE_DESCRIPTION_MAX_PARTS]; size_t len[SCPIDEFINE_DESCRIPTION_MAX_PARTS]; + size_t i; data[0] = SCPI_ErrorTranslate(error->error_code); len[0] = strlen(data[0]); @@ -546,7 +563,7 @@ result += writeDelimiter(context); result += writeData(context, "\"", 1); - for (size_t i = 0; data[i] && outputlimit && (i < SCPIDEFINE_DESCRIPTION_MAX_PARTS); i++) { + for (i = 0; (i < SCPIDEFINE_DESCRIPTION_MAX_PARTS) && data[i] && outputlimit; i++) { if (i == 1) { result += writeSemicolon(context); outputlimit -= 1; @@ -575,10 +592,6 @@ outputlimit -= len[i]; } result += writeData(context, "\"", 1); - -#if USE_DEVICE_DEPENDENT_ERROR_INFORMATION - SCPIDEFINE_free(&context->error_info_heap, error->device_dependent_info, false); -#endif return result; } -- Gitblit v1.9.1