54 typedef unsigned char bool;
65 typedef bool scpi_bool_t;
69 enum _scpi_reg_name_t {
84 typedef enum _scpi_reg_name_t scpi_reg_name_t;
86 enum _scpi_ctrl_name_t {
104 typedef enum _scpi_ctrl_name_t scpi_ctrl_name_t;
106 typedef uint16_t scpi_reg_val_t;
109 enum _scpi_result_t {
113 typedef enum _scpi_result_t scpi_result_t;
118 #define SCPI_CMD_LIST_END {NULL, NULL, 0}
120 #define SCPI_CMD_LIST_END {NULL, NULL}
142 typedef size_t(*scpi_write_t)(scpi_t * context,
const char * data,
size_t len);
143 typedef scpi_result_t(*scpi_write_control_t)(scpi_t * context, scpi_ctrl_name_t ctrl, scpi_reg_val_t val);
144 typedef int (*scpi_error_callback_t)(scpi_t * context, int_fast16_t error);
147 enum _scpi_token_type_t {
149 SCPI_TOKEN_SEMICOLON,
151 SCPI_TOKEN_SPECIFIC_CHARACTER,
157 SCPI_TOKEN_PROGRAM_MNEMONIC,
158 SCPI_TOKEN_DECIMAL_NUMERIC_PROGRAM_DATA,
159 SCPI_TOKEN_DECIMAL_NUMERIC_PROGRAM_DATA_WITH_SUFFIX,
160 SCPI_TOKEN_SUFFIX_PROGRAM_DATA,
161 SCPI_TOKEN_ARBITRARY_BLOCK_PROGRAM_DATA,
162 SCPI_TOKEN_SINGLE_QUOTE_PROGRAM_DATA,
163 SCPI_TOKEN_DOUBLE_QUOTE_PROGRAM_DATA,
164 SCPI_TOKEN_PROGRAM_EXPRESSION,
165 SCPI_TOKEN_COMPOUND_PROGRAM_HEADER,
166 SCPI_TOKEN_INCOMPLETE_COMPOUND_PROGRAM_HEADER,
167 SCPI_TOKEN_COMMON_PROGRAM_HEADER,
168 SCPI_TOKEN_INCOMPLETE_COMMON_PROGRAM_HEADER,
169 SCPI_TOKEN_COMPOUND_QUERY_PROGRAM_HEADER,
170 SCPI_TOKEN_COMMON_QUERY_PROGRAM_HEADER,
172 SCPI_TOKEN_ALL_PROGRAM_DATA,
176 typedef enum _scpi_token_type_t scpi_token_type_t;
179 scpi_token_type_t type;
193 enum _message_termination_t {
194 SCPI_MESSAGE_TERMINATION_NONE,
195 SCPI_MESSAGE_TERMINATION_NL,
196 SCPI_MESSAGE_TERMINATION_SEMICOLON,
198 typedef enum _message_termination_t message_termination_t;
201 scpi_token_t programHeader;
202 scpi_token_t programData;
203 int numberOfParameters;
204 message_termination_t termination;
208 typedef scpi_result_t(*scpi_command_callback_t)(scpi_t *);
221#if USE_DEVICE_DEPENDENT_ERROR_INFORMATION
222 char * device_dependent_info;
252 SCPI_UNIT_REVOLUTION,
258 SCPI_UNIT_ELECTRONVOLT,
263 SCPI_UNIT_ASTRONOMIC_UNIT,
268 SCPI_UNIT_NAUTICAL_MILE,
273 SCPI_UNIT_ATOMIC_MASS,
277 SCPI_UNIT_ATMOSPHERE,
278 SCPI_UNIT_INCH_OF_MERCURY,
279 SCPI_UNIT_MM_OF_MERCURY,
285 SCPI_UNIT_FAHRENHEIT,
293 typedef enum _scpi_unit_t scpi_unit_t;
300#define SCPI_UNITS_LIST_END {NULL, SCPI_UNIT_NONE, 0}
303 enum _scpi_special_number_t {
315 typedef enum _scpi_special_number_t scpi_special_number_t;
321#define SCPI_CHOICE_LIST_END {NULL, -1}
325 const scpi_command_t * cmd;
326 lex_state_t lex_state;
327 scpi_const_buffer_t cmd_raw;
349 typedef scpi_token_t scpi_parameter_t;
352 const char * pattern;
353 scpi_command_callback_t callback;
360 scpi_error_callback_t error;
362 scpi_write_control_t control;
363 scpi_command_callback_t flush;
364 scpi_command_callback_t reset;
368 const scpi_command_t * cmdlist;
369 scpi_buffer_t buffer;
370 scpi_param_list_t param_list;
371 scpi_interface_t * interface;
372 int_fast16_t output_count;
373 int_fast16_t input_count;
374 scpi_bool_t cmd_error;
375 scpi_fifo_t error_queue;
376#if USE_DEVICE_DEPENDENT_ERROR_INFORMATION && !USE_MEMORY_ALLOCATION_FREE
377 scpi_error_info_heap_t error_info_heap;
379 scpi_reg_val_t registers[SCPI_REG_COUNT];
380 const scpi_unit_def_t * units;
382 scpi_parser_state_t parser_state;
384 size_t arbitrary_reminding;
387 enum _scpi_array_format_t {
388 SCPI_FORMAT_ASCII = 0,
389 SCPI_FORMAT_NORMAL = 1,
390 SCPI_FORMAT_SWAPPED = 2,
391 SCPI_FORMAT_BIGENDIAN = SCPI_FORMAT_NORMAL,
392 SCPI_FORMAT_LITTLEENDIAN = SCPI_FORMAT_SWAPPED,
394 typedef enum _scpi_array_format_t scpi_array_format_t;