From 11f2f2e329ef404d0e9c022cb2f9fbbb45bae285 Mon Sep 17 00:00:00 2001 From: nancy.liao <huihui.liao@greentest.com.cn> Date: 周日, 27 4月 2025 17:33:31 +0800 Subject: [PATCH] 完成了SCPI命令语法分析器的完整规则 --- libscpi/inc/scpi/types.h | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 54 insertions(+), 5 deletions(-) diff --git a/libscpi/inc/scpi/types.h b/libscpi/inc/scpi/types.h index 75d187f..d2fe6d2 100644 --- a/libscpi/inc/scpi/types.h +++ b/libscpi/inc/scpi/types.h @@ -40,8 +40,7 @@ #include <stddef.h> #include <stdint.h> -#include "scpi/config.h" - +#include <scpi/config.h> #if HAVE_STDBOOL #include <stdbool.h> #endif @@ -78,7 +77,13 @@ SCPI_REG_QUESE, /* QUEStionable status Enable Register */ SCPI_REG_QUESC, /* QUEStionable status Condition Register */ - /* Add device specific registers here*/ +#if USE_CUSTOM_REGISTERS +#ifndef USER_REGISTERS +#error "No user registers defined" +#else + USER_REGISTERS +#endif +#endif /* number of registers */ SCPI_REG_COUNT, @@ -126,7 +131,13 @@ SCPI_REG_GROUP_OPER, SCPI_REG_GROUP_QUES, - /* Add device specific register groups here*/ +#if USE_CUSTOM_REGISTERS +#ifndef USER_REGISTER_GROUPS +#error "No user register groups defined" +#else + USER_REGISTER_GROUPS +#endif +#endif /* last definition - number of register groups */ SCPI_REG_GROUP_COUNT @@ -357,6 +368,20 @@ SCPI_NUM_NINF, SCPI_NUM_AUTO }; + + enum SCPIRError + { + RETURN_TRUE = 0, + //鍛戒护鏈畾涔� + RETURN_UnDefine = -1, + //闀垮害婧㈠嚭 + RETURN_LengthOverFlow = -2, + //鍛戒护闈炴硶 + RETURN_IllegalCommand = -3, + //鍥炶皟鍑芥暟娌℃湁鎵惧埌 + RETURN_NotFind = -4 + + }; typedef enum _scpi_special_number_t scpi_special_number_t; struct _scpi_choice_def_t { @@ -409,24 +434,48 @@ scpi_command_callback_t reset; }; + + struct _scpi_t { + //鍛戒护琛ㄧ殑鎸囬拡 const scpi_command_t * cmdlist; + //杈撳叆鐨勬暟鎹� scpi_buffer_t buffer; + //瑙f瀽鍛戒护鐨勫弬鏁板垪琛� scpi_param_list_t param_list; + //SCPI鐨勫閮ㄦ帴鍙o紝鍒锋柊 閲嶇疆 鍐欏叆 鎶ラ敊 scpi_interface_t * interface; + //杈撳嚭鏁版嵁鐨勪釜鏁� int_fast16_t output_count; + //杈撳叆鏁版嵁鐨勪釜鏁� 鐢ㄤ簬妫�楠屽弬鏁版槸鍚﹀悎娉� int_fast16_t input_count; + //鏄惁涓虹涓�涓緭鍑洪」 + scpi_bool_t first_output; + //鍛戒护鏄惁鍑洪敊 scpi_bool_t cmd_error; + //閿欒淇℃伅闃熷垪 scpi_fifo_t error_queue; #if USE_DEVICE_DEPENDENT_ERROR_INFORMATION && !USE_MEMORY_ALLOCATION_FREE + //璇︾粏閿欒淇℃伅 scpi_error_info_heap_t error_info_heap; #endif + //SCPI瀵勫瓨鍣� scpi_reg_val_t registers[SCPI_REG_COUNT]; + //鍗曚綅琛ㄧ殑鎸囬拡 const scpi_unit_def_t * units; + void * user_context; + //瑙f瀽鍣ㄧ殑鐘舵�� scpi_parser_state_t parser_state; + //*IDN?鏌ヨ鐨勫搷搴斿瓧娈� const char * idn[4]; - size_t arbitrary_reminding; + //鍓╀綑寰呬紶杈撶殑瀛楄妭 + size_t arbitrary_remaining; + + int SCPIerror; + //澧炲姞浜嗕竴涓懡浠ゅ垪琛ㄧ殑闀垮害 闃叉闈炴硶瓒婄晫 + int cmdlistSize; + }; enum _scpi_array_format_t { -- Gitblit v1.9.1