From 06ca0ab8991fe36731ae715a072fb12cc22abcca Mon Sep 17 00:00:00 2001 From: Jan Breuer <jan.breuer@jaybee.cz> Date: 周一, 24 6月 2013 22:19:34 +0800 Subject: [PATCH] Update documentation --- libscpi/inc/scpi/types.h | 150 ++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 114 insertions(+), 36 deletions(-) diff --git a/libscpi/inc/scpi/types.h b/libscpi/inc/scpi/types.h index 295009c..cf0c696 100644 --- a/libscpi/inc/scpi/types.h +++ b/libscpi/inc/scpi/types.h @@ -1,5 +1,7 @@ /*- - * Copyright (c) 2012-2013 Jan Breuer, + * Copyright (c) 2013 Jan Breuer + * Richard.hmm + * Copyright (c) 2012 Jan Breuer * * All Rights Reserved * @@ -55,13 +57,13 @@ /* IEEE 488.2 registers */ enum _scpi_reg_name_t { SCPI_REG_STB = 0, /* Status Byte */ - SCPI_REG_SRE, /* Service Request Enable Register */ - SCPI_REG_ESR, /* Standard Event Status Register (ESR, SESR) */ - SCPI_REG_ESE, /* Event Status Enable Register */ - SCPI_REG_OPER, /* OPERation Status Register */ - SCPI_REG_OPERE, /* OPERation Status Enable Register */ - SCPI_REG_QUES, /* QUEStionable status register */ - SCPI_REG_QUESE, /* QUEStionable status Enable Register */ + SCPI_REG_SRE, /* Service Request Enable Register */ + SCPI_REG_ESR, /* Standard Event Status Register (ESR, SESR) */ + SCPI_REG_ESE, /* Event Status Enable Register */ + SCPI_REG_OPER, /* OPERation Status Register */ + SCPI_REG_OPERE, /* OPERation Status Enable Register */ + SCPI_REG_QUES, /* QUEStionable status register */ + SCPI_REG_QUESE, /* QUEStionable status Enable Register */ /* last definition - number of registers */ SCPI_REG_COUNT @@ -70,21 +72,21 @@ enum _scpi_ctrl_name_t { SCPI_CTRL_SRQ = 1, /* service request */ - SCPI_CTRL_GTL, /* Go to local */ - SCPI_CTRL_SDC, /* Selected device clear */ - SCPI_CTRL_PPC, /* Parallel poll configure */ - SCPI_CTRL_GET, /* Group execute trigger */ - SCPI_CTRL_TCT, /* Take control */ - SCPI_CTRL_LLO, /* Device clear */ - SCPI_CTRL_DCL, /* Local lockout */ - SCPI_CTRL_PPU, /* Parallel poll unconfigure */ - SCPI_CTRL_SPE, /* Serial poll enable */ - SCPI_CTRL_SPD, /* Serial poll disable */ - SCPI_CTRL_MLA, /* My local address */ - SCPI_CTRL_UNL, /* Unlisten */ - SCPI_CTRL_MTA, /* My talk address */ - SCPI_CTRL_UNT, /* Untalk */ - SCPI_CTRL_MSA /* My secondary address */ + SCPI_CTRL_GTL, /* Go to local */ + SCPI_CTRL_SDC, /* Selected device clear */ + SCPI_CTRL_PPC, /* Parallel poll configure */ + SCPI_CTRL_GET, /* Group execute trigger */ + SCPI_CTRL_TCT, /* Take control */ + SCPI_CTRL_LLO, /* Device clear */ + SCPI_CTRL_DCL, /* Local lockout */ + SCPI_CTRL_PPU, /* Parallel poll unconfigure */ + SCPI_CTRL_SPE, /* Serial poll enable */ + SCPI_CTRL_SPD, /* Serial poll disable */ + SCPI_CTRL_MLA, /* My local address */ + SCPI_CTRL_UNL, /* Unlisten */ + SCPI_CTRL_MTA, /* My talk address */ + SCPI_CTRL_UNT, /* Untalk */ + SCPI_CTRL_MSA /* My secondary address */ }; typedef enum _scpi_ctrl_name_t scpi_ctrl_name_t; @@ -99,13 +101,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; +#define SCPI_CMD_LIST_END {NULL, NULL, } /* scpi interface */ typedef struct _scpi_t scpi_t; @@ -122,6 +118,66 @@ typedef scpi_result_t(*scpi_write_control_t)(scpi_t * context, scpi_ctrl_name_t ctrl, scpi_reg_val_t val); typedef int (*scpi_error_callback_t)(scpi_t * context, int_fast16_t error); + /* scpi lexer */ + enum _token_type_t { + TokComma, + TokSemicolon, + TokQuiestion, + TokNewLine, + TokHexnum, + TokOctnum, + TokBinnum, + TokProgramMnemonic, + TokDecimalNumericProgramData, + TokDecimalNumericProgramDataWithSuffix, + TokSuffixProgramData, + TokArbitraryBlockProgramData, + TokSingleQuoteProgramData, + TokDoubleQuoteProgramData, + TokProgramExpression, + TokCompoundProgramHeader, + TokIncompleteCompoundProgramHeader, + TokCommonProgramHeader, + TokIncompleteCommonProgramHeader, + TokCompoundQueryProgramHeader, + TokCommonQueryProgramHeader, + TokWhiteSpace, + TokAllProgramData, + TokInvalid, + TokUnknown, + }; + typedef enum _token_type_t token_type_t; + + struct _token_t { + token_type_t type; + const char * ptr; + int len; + }; + typedef struct _token_t token_t; + + struct _lex_state_t { + const char * buffer; + const char * pos; + int len; + }; + typedef struct _lex_state_t lex_state_t; + + /* scpi parser */ + enum _message_termination_t { + PmutNone, + PmutNewLine, + PmutSemicolon, + }; + typedef enum _message_termination_t message_termination_t; + + struct _scpi_parser_state_t { + token_t programHeader; + token_t programData; + int numberOfParameters; + message_termination_t termination; + }; + typedef struct _scpi_parser_state_t scpi_parser_state_t; + typedef scpi_result_t(*scpi_command_callback_t)(scpi_t *); /* scpi error queue */ @@ -135,7 +191,8 @@ SCPI_UNIT_OHM, SCPI_UNIT_HERTZ, SCPI_UNIT_CELSIUS, - SCPI_UNIT_SECONDS + SCPI_UNIT_SECONDS, + SCPI_UNIT_DISTANCE }; typedef enum _scpi_unit_t scpi_unit_t; @@ -144,7 +201,7 @@ scpi_unit_t unit; double mult; }; - #define SCPI_UNITS_LIST_END {NULL, SCPI_UNIT_NONE, 0} +#define SCPI_UNITS_LIST_END {NULL, SCPI_UNIT_NONE, 0} typedef struct _scpi_unit_def_t scpi_unit_def_t; enum _scpi_special_number_t { @@ -164,16 +221,36 @@ const char * name; scpi_special_number_t type; }; - #define SCPI_SPECIAL_NUMBERS_LIST_END {NULL, SCPI_NUM_NUMBER} +#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; @@ -191,7 +268,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; @@ -201,6 +278,7 @@ const scpi_unit_def_t * units; const scpi_special_number_def_t * special_numbers; void * user_context; + scpi_parser_state_t parser_state; }; #ifdef __cplusplus -- Gitblit v1.9.1