Refactor bool_t to scpi_bool_t
| | |
| | | #define SCPI_DEBUG_COMMAND(a) |
| | | |
| | | |
| | | bool_t SCPI_DebugCommand(scpi_t * context); |
| | | scpi_bool_t SCPI_DebugCommand(scpi_t * context); |
| | | |
| | | |
| | | #ifdef __cplusplus |
| | |
| | | size_t SCPI_ResultDouble(scpi_t * context, double val); |
| | | size_t SCPI_ResultText(scpi_t * context, const char * data); |
| | | size_t SCPI_ResultArbitraryBlock(scpi_t * context, const char * data, size_t len); |
| | | size_t SCPI_ResultBool(scpi_t * context, bool_t val); |
| | | size_t SCPI_ResultBool(scpi_t * context, scpi_bool_t val); |
| | | |
| | | int32_t SCPI_ParamGetIntVal(scpi_t * context, scpi_parameter_t * parameter); |
| | | double SCPI_ParamGetDoubleVal(scpi_t * context, scpi_parameter_t * parameter); |
| | | void SCPI_ParamGetTextVal(scpi_t * context, scpi_parameter_t * parameter, const char ** data, int32_t * len); |
| | | #define SCPI_ParamGetCharactersVal SCPI_ParamGetTextVal |
| | | #define SCPI_ParamGetArbitraryBlockVal SCPI_ParamGetTextVal |
| | | bool_t SCPI_ParamGetBoolVal(scpi_t * context, scpi_parameter_t * parameter); |
| | | scpi_bool_t SCPI_ParamGetBoolVal(scpi_t * context, scpi_parameter_t * parameter); |
| | | int32_t SCPI_ParamGetChoiceVal(scpi_t * context, scpi_parameter_t * parameter, const char * options[]); |
| | | |
| | | bool_t SCPI_Parameter(scpi_t * context, scpi_parameter_t * parameter, bool_t mandatory); |
| | | scpi_bool_t SCPI_Parameter(scpi_t * context, scpi_parameter_t * parameter, scpi_bool_t mandatory); |
| | | |
| | | #ifdef __cplusplus |
| | | } |
| | |
| | | #endif |
| | | |
| | | /* basic data types */ |
| | | typedef bool bool_t; |
| | | /* typedef enum { FALSE = 0, TRUE } bool_t; */ |
| | | typedef bool scpi_bool_t; |
| | | /* typedef enum { FALSE = 0, TRUE } scpi_bool_t; */ |
| | | |
| | | /* IEEE 488.2 registers */ |
| | | enum _scpi_reg_name_t { |
| | |
| | | scpi_interface_t * interface; |
| | | int_fast16_t output_count; |
| | | int_fast16_t input_count; |
| | | bool_t cmd_error; |
| | | scpi_bool_t cmd_error; |
| | | scpi_error_queue_t error_queue; |
| | | scpi_reg_val_t * registers; |
| | | const scpi_unit_def_t * units; |
| | |
| | | extern const scpi_unit_def_t scpi_units_def[]; |
| | | extern const scpi_special_number_def_t scpi_special_numbers_def[]; |
| | | |
| | | bool_t SCPI_ParamTranslateNumberVal(scpi_t * context, scpi_parameter_t * parameter); |
| | | scpi_bool_t SCPI_ParamTranslateNumberVal(scpi_t * context, scpi_parameter_t * parameter); |
| | | size_t SCPI_NumberToStr(scpi_t * context, scpi_number_parameter_t * value, char * str, size_t len); |
| | | |
| | | #ifdef __cplusplus |
| | |
| | | * @param context |
| | | * @return |
| | | */ |
| | | bool_t SCPI_DebugCommand(scpi_t * context) { |
| | | scpi_bool_t SCPI_DebugCommand(scpi_t * context) { |
| | | size_t res; |
| | | printf("**DEBUG: %s (\"", context->param_list.cmd->pattern); |
| | | res = fwrite(context->param_list.lex_state.buffer, 1, context->param_list.lex_state.len, stdout); |
| | |
| | | fifo->rd = 0; |
| | | } |
| | | |
| | | bool_t fifo_add(fifo_t * fifo, int16_t value) { |
| | | scpi_bool_t fifo_add(fifo_t * fifo, int16_t value) { |
| | | /* FIFO full? */ |
| | | if (fifo->wr == ((fifo->rd + fifo->size) % (fifo->size + 1))) { |
| | | fifo_remove(fifo, NULL); |
| | |
| | | return TRUE; |
| | | } |
| | | |
| | | bool_t fifo_remove(fifo_t * fifo, int16_t * value) { |
| | | scpi_bool_t fifo_remove(fifo_t * fifo, int16_t * value) { |
| | | /* FIFO empty? */ |
| | | if (fifo->wr == fifo->rd) { |
| | | return FALSE; |
| | |
| | | return TRUE; |
| | | } |
| | | |
| | | bool_t fifo_count(fifo_t * fifo, int16_t * value) { |
| | | scpi_bool_t fifo_count(fifo_t * fifo, int16_t * value) { |
| | | *value = fifo->wr - fifo->rd; |
| | | if (*value < 0) { |
| | | *value += (fifo->size + 1); |
| | |
| | | |
| | | void fifo_init(fifo_t * fifo) LOCAL; |
| | | void fifo_clear(fifo_t * fifo) LOCAL; |
| | | bool_t fifo_add(fifo_t * fifo, int16_t value) LOCAL; |
| | | bool_t fifo_remove(fifo_t * fifo, int16_t * value) LOCAL; |
| | | bool_t fifo_count(fifo_t * fifo, int16_t * value) LOCAL; |
| | | scpi_bool_t fifo_add(fifo_t * fifo, int16_t value) LOCAL; |
| | | scpi_bool_t fifo_remove(fifo_t * fifo, int16_t * value) LOCAL; |
| | | scpi_bool_t fifo_count(fifo_t * fifo, int16_t * value) LOCAL; |
| | | |
| | | #ifdef __cplusplus |
| | | } |
| | |
| | | * @param val - new value |
| | | */ |
| | | void SCPI_RegSet(scpi_t * context, scpi_reg_name_t name, scpi_reg_val_t val) { |
| | | bool_t srq = FALSE; |
| | | scpi_bool_t srq = FALSE; |
| | | scpi_reg_val_t mask; |
| | | scpi_reg_val_t old_val; |
| | | |
| | |
| | | * @param context |
| | | * @result TRUE if context->paramlist is filled with correct values |
| | | */ |
| | | static bool_t findCommandHeader(scpi_t * context, const char * header, int len) { |
| | | static scpi_bool_t findCommandHeader(scpi_t * context, const char * header, int len) { |
| | | int32_t i; |
| | | const scpi_command_t * cmd; |
| | | |
| | |
| | | * @param val |
| | | * @return |
| | | */ |
| | | size_t SCPI_ResultBool(scpi_t * context, bool_t val) { |
| | | size_t SCPI_ResultBool(scpi_t * context, scpi_bool_t val) { |
| | | return SCPI_ResultIntBase(context, val ? 1 : 0, 10); |
| | | } |
| | | |
| | | |
| | | /* parsing parameters */ |
| | | |
| | | bool_t SCPI_Parameter(scpi_t * context, scpi_parameter_t * parameter, bool_t mandatory) { |
| | | scpi_bool_t SCPI_Parameter(scpi_t * context, scpi_parameter_t * parameter, scpi_bool_t mandatory) { |
| | | token_t token; |
| | | lex_state_t * state; |
| | | int32_t value; |
| | |
| | | } |
| | | |
| | | /* SCPI-99 7.3 Boolean Program Data */ |
| | | bool_t SCPI_ParamGetBoolVal(scpi_t * context, scpi_parameter_t * parameter) { |
| | | scpi_bool_t SCPI_ParamGetBoolVal(scpi_t * context, scpi_parameter_t * parameter) { |
| | | switch (parameter->type) { |
| | | case TokDecimalNumericProgramData: |
| | | return parameter->number.value ? 1 : 0; |
| | |
| | | * @param value resultin value |
| | | * @return TRUE if str matches one of specs patterns |
| | | */ |
| | | static bool_t translateSpecialNumber(const scpi_special_number_def_t * specs, const char * str, size_t len, scpi_number_parameter_t * value) { |
| | | static scpi_bool_t translateSpecialNumber(const scpi_special_number_def_t * specs, const char * str, size_t len, scpi_number_parameter_t * value) { |
| | | int i; |
| | | |
| | | value->value = 0.0; |
| | |
| | | * @param value preparsed numeric value |
| | | * @return TRUE if value parameter was converted to base units |
| | | */ |
| | | static bool_t transformNumber(scpi_t * context, const char * unit, size_t len, scpi_number_parameter_t * value) { |
| | | static scpi_bool_t transformNumber(scpi_t * context, const char * unit, size_t len, scpi_number_parameter_t * value) { |
| | | size_t s; |
| | | const scpi_unit_def_t * unitDef; |
| | | s = skipWhitespace(unit, len); |
| | |
| | | * @param mandatory if the parameter is mandatory |
| | | * @return |
| | | */ |
| | | bool_t SCPI_ParamTranslateNumberVal(scpi_t * context, scpi_parameter_t * parameter) { |
| | | scpi_bool_t SCPI_ParamTranslateNumberVal(scpi_t * context, scpi_parameter_t * parameter) { |
| | | token_t token; |
| | | lex_state_t state; |
| | | |
| | |
| | | * @param len2 |
| | | * @return TRUE if len1==len2 and "len" characters of both strings are equal |
| | | */ |
| | | bool_t compareStr(const char * str1, size_t len1, const char * str2, size_t len2) { |
| | | scpi_bool_t compareStr(const char * str1, size_t len1, const char * str2, size_t len2) { |
| | | if (len1 != len2) { |
| | | return FALSE; |
| | | } |
| | |
| | | * @param str_len |
| | | * @return |
| | | */ |
| | | bool_t matchPattern(const char * pattern, size_t pattern_len, const char * str, size_t str_len) { |
| | | scpi_bool_t matchPattern(const char * pattern, size_t pattern_len, const char * str, size_t str_len) { |
| | | int pattern_sep_pos_short = patternSeparatorShortPos(pattern, pattern_len); |
| | | return compareStr(pattern, pattern_len, str, str_len) || |
| | | compareStr(pattern, pattern_sep_pos_short, str, str_len); |
| | |
| | | * @param len - max search length |
| | | * @return TRUE if pattern matches, FALSE otherwise |
| | | */ |
| | | bool_t matchCommand(const char * pattern, const char * cmd, size_t len) { |
| | | bool_t result = FALSE; |
| | | scpi_bool_t matchCommand(const char * pattern, const char * cmd, size_t len) { |
| | | scpi_bool_t result = FALSE; |
| | | int leftFlag = 0; // flag for '[' on left |
| | | int rightFlag = 0; // flag for ']' on right |
| | | int cmd_sep_pos = 0; |
| | |
| | | #endif |
| | | |
| | | char * strnpbrk(const char *str, size_t size, const char *set) LOCAL; |
| | | bool_t compareStr(const char * str1, size_t len1, const char * str2, size_t len2) LOCAL; |
| | | scpi_bool_t compareStr(const char * str1, size_t len1, const char * str2, size_t len2) LOCAL; |
| | | size_t longToStr(int32_t val, char * str, size_t len, int8_t base) LOCAL; |
| | | size_t doubleToStr(double val, char * str, size_t len) LOCAL; |
| | | size_t strToLong(const char * str, int32_t * val, int8_t base) LOCAL; |
| | | size_t strToDouble(const char * str, double * val) LOCAL; |
| | | bool_t locateText(const char * str1, size_t len1, const char ** str2, size_t * len2) LOCAL; |
| | | bool_t locateStr(const char * str1, size_t len1, const char ** str2, size_t * len2) LOCAL; |
| | | scpi_bool_t locateText(const char * str1, size_t len1, const char ** str2, size_t * len2) LOCAL; |
| | | scpi_bool_t locateStr(const char * str1, size_t len1, const char ** str2, size_t * len2) LOCAL; |
| | | size_t skipWhitespace(const char * cmd, size_t len) LOCAL; |
| | | bool_t matchPattern(const char * pattern, size_t pattern_len, const char * str, size_t str_len) LOCAL; |
| | | bool_t matchCommand(const char * pattern, const char * cmd, size_t len) LOCAL; |
| | | scpi_bool_t matchPattern(const char * pattern, size_t pattern_len, const char * str, size_t str_len) LOCAL; |
| | | scpi_bool_t matchCommand(const char * pattern, const char * cmd, size_t len) LOCAL; |
| | | |
| | | #if !HAVE_STRNLEN |
| | | size_t BSD_strnlen(const char *s, size_t maxlen); |
| | |
| | | } |
| | | |
| | | void test_matchPattern() { |
| | | bool_t result; |
| | | scpi_bool_t result; |
| | | |
| | | #define TEST_MATCH_PATTERN(p, s, r) \ |
| | | do { \ |
| | |
| | | } |
| | | |
| | | void test_matchCommand() { |
| | | bool_t result; |
| | | scpi_bool_t result; |
| | | |
| | | #define TEST_MATCH_COMMAND(p, s, r) \ |
| | | do { \ |