From b97d4493b3c997477b85a35de0a4ffa15cf742eb Mon Sep 17 00:00:00 2001 From: Jan Breuer <jan.breuer@jaybee.cz> Date: 周三, 23 10月 2013 22:46:57 +0800 Subject: [PATCH] Correct optional command pattern matching --- libscpi/inc/scpi/types.h | 44 +++++++++++++++++++++++++++++++++----------- 1 files changed, 33 insertions(+), 11 deletions(-) diff --git a/libscpi/inc/scpi/types.h b/libscpi/inc/scpi/types.h index 7dcca59..3791c9d 100644 --- a/libscpi/inc/scpi/types.h +++ b/libscpi/inc/scpi/types.h @@ -47,8 +47,12 @@ extern "C" { #endif -#define FALSE false -#define TRUE true +#ifndef FALSE + #define FALSE 0 +#endif +#ifndef TRUE + #define TRUE (!FALSE) +#endif /* basic data types */ typedef bool bool_t; @@ -101,13 +105,7 @@ typedef struct _scpi_command_t scpi_command_t; - struct _scpi_param_list_t { - const scpi_command_t * cmd; - const char * parameters; - size_t length; - }; #define SCPI_CMD_LIST_END {NULL, NULL, } - typedef struct _scpi_param_list_t scpi_param_list_t; /* scpi interface */ typedef struct _scpi_t scpi_t; @@ -142,11 +140,14 @@ TokDoubleQuoteProgramData, TokProgramExpression, TokCompoundProgramHeader, + TokIncompleteCompoundProgramHeader, TokCommonProgramHeader, + TokIncompleteCommonProgramHeader, TokCompoundQueryProgramHeader, TokCommonQueryProgramHeader, TokWhiteSpace, TokAllProgramData, + TokInvalid, TokUnknown, }; typedef enum _token_type_t token_type_t; @@ -227,13 +228,33 @@ #define SCPI_SPECIAL_NUMBERS_LIST_END {NULL, SCPI_NUM_NUMBER} typedef struct _scpi_special_number_def_t scpi_special_number_def_t; - struct _scpi_number_t { + struct _scpi_param_list_t { + const scpi_command_t * cmd; + lex_state_t lex_state; + }; + typedef struct _scpi_param_list_t scpi_param_list_t; + + struct _scpi_number_parameter_t { double value; scpi_unit_t unit; + int8_t base; scpi_special_number_t type; }; - typedef struct _scpi_number_t scpi_number_t; + typedef struct _scpi_number_parameter_t scpi_number_parameter_t; + struct _scpi_data_parameter_t { + const char * ptr; + int32_t len; + }; + typedef struct _scpi_data_parameter_t scpi_data_parameter_t; + + struct _scpi_parameter_t { + token_type_t type; + scpi_data_parameter_t data; + scpi_number_parameter_t number; + }; + typedef struct _scpi_parameter_t scpi_parameter_t; + struct _scpi_command_t { const char * pattern; scpi_command_callback_t callback; @@ -251,7 +272,7 @@ struct _scpi_t { const scpi_command_t * cmdlist; scpi_buffer_t buffer; - scpi_param_list_t paramlist; + scpi_param_list_t param_list; scpi_interface_t * interface; int_fast16_t output_count; int_fast16_t input_count; @@ -262,6 +283,7 @@ const scpi_special_number_def_t * special_numbers; void * user_context; scpi_parser_state_t parser_state; + const char * idn[4]; }; #ifdef __cplusplus -- Gitblit v1.9.1