From e9785c888dddb7449e741ed53796e995f0efa9f7 Mon Sep 17 00:00:00 2001 From: Iztok Jeras <iztok.jeras@redpitaya.com> Date: ćšć, 08 10æ 2015 03:00:33 +0800 Subject: [PATCH] added most new function declarations, replaced all usecases for old functions, missing are most new implementations --- libscpi/src/parser.c | 214 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 182 insertions(+), 32 deletions(-) diff --git a/libscpi/src/parser.c b/libscpi/src/parser.c index c9d63f4..dbba29e 100644 --- a/libscpi/src/parser.c +++ b/libscpi/src/parser.c @@ -317,13 +317,43 @@ } /** - * Write integer value to the result + * Write signed 32 bit integer value to the result * @param context * @param val * @return */ -size_t SCPI_ResultInt(scpi_t * context, int32_t val) { - return SCPI_ResultIntBase(context, val, 10); +size_t SCPI_ResultInt32(scpi_t * context, int32_t val) { + return SCPI_ResultInt32Base(context, val, 10); +} + +/** + * Write unsigned 32 bit integer value to the result + * @param context + * @param val + * @return + */ +size_t SCPI_ResultUInt32(scpi_t * context, uint32_t val) { + return SCPI_ResultUInt32Base(context, val, 10); +} + +/** + * Write signed 64 bit integer value to the result + * @param context + * @param val + * @return + */ +size_t SCPI_ResultInt64(scpi_t * context, int64_t val) { + return SCPI_ResultInt64Base(context, val, 10); +} + +/** + * Write unsigned 64 bit integer value to the result + * @param context + * @param val + * @return + */ +size_t SCPI_ResultUInt64(scpi_t * context, uint64_t val) { + return SCPI_ResultUInt64Base(context, val, 10); } /** @@ -341,19 +371,19 @@ } /** - * Write integer value in specific base to the result + * Write signed 32 bit integer value in specific base to the result * @param context * @param val * @param base * @return */ -size_t SCPI_ResultIntBase(scpi_t * context, int32_t val, int8_t base) { +size_t SCPI_ResultInt32Base(scpi_t * context, int32_t val, int8_t base) { char buffer[33]; const char * basePrefix; size_t result = 0; size_t len; - len = SCPI_LongToStr(val, buffer, sizeof (buffer), base); + len = SCPI_Int32ToStr(val, buffer, sizeof (buffer), base); basePrefix = getBasePrefix(base); result += writeDelimiter(context); @@ -366,7 +396,82 @@ } /** - * Write double walue to the result + * Write unsigned 32 bit integer value in specific base to the result + * @param context + * @param val + * @param base + * @return + */ +size_t SCPI_ResultUInt32Base(scpi_t * context, uint32_t val, int8_t base) { + char buffer[33]; + const char * basePrefix; + size_t result = 0; + size_t len; + + len = SCPI_UInt32ToStr(val, buffer, sizeof (buffer), base); + basePrefix = getBasePrefix(base); + + result += writeDelimiter(context); + if (basePrefix != NULL) { + result += writeData(context, basePrefix, 2); + } + result += writeData(context, buffer, len); + context->output_count++; + return result; +} + +/** + * Write signed 64 bit integer value in specific base to the result + * @param context + * @param val + * @param base + * @return + */ +size_t SCPI_ResultInt64Base(scpi_t * context, int64_t val, int8_t base) { + char buffer[33]; //TODO + const char * basePrefix; + size_t result = 0; + size_t len; + + len = SCPI_Int64ToStr(val, buffer, sizeof (buffer), base); + basePrefix = getBasePrefix(base); + + result += writeDelimiter(context); + if (basePrefix != NULL) { + result += writeData(context, basePrefix, 2); + } + result += writeData(context, buffer, len); + context->output_count++; + return result; +} + +/** + * Write unsigned 64 bit integer value in specific base to the result + * @param context + * @param val + * @param base + * @return + */ +size_t SCPI_ResultUInt64Base(scpi_t * context, uint64_t val, int8_t base) { + char buffer[33]; //TODO + const char * basePrefix; + size_t result = 0; + size_t len; + + len = SCPI_UInt64ToStr(val, buffer, sizeof (buffer), base); + basePrefix = getBasePrefix(base); + + result += writeDelimiter(context); + if (basePrefix != NULL) { + result += writeData(context, basePrefix, 2); + } + result += writeData(context, buffer, len); + context->output_count++; + return result; +} + +/** + * Write double value to the result * @param context * @param val * @return @@ -411,7 +516,7 @@ char block_header[12]; size_t header_len; block_header[0] = '#'; - SCPI_LongToStr(len, block_header + 2, 10, 10); + SCPI_Int32ToStr(len, block_header + 2, 10, 10); header_len = strlen(block_header + 2); block_header[1] = (char)(header_len + '0'); @@ -430,7 +535,7 @@ * @return */ size_t SCPI_ResultBool(scpi_t * context, scpi_bool_t val) { - return SCPI_ResultIntBase(context, val ? 1 : 0, 10); + return SCPI_ResultInt32Base(context, val ? 1 : 0, 10); } /* parsing parameters */ @@ -526,13 +631,13 @@ } /** - * Convert parameter to integer + * Convert parameter to signed/unsigned 32 bit integer * @param context * @param parameter * @param value result * @return TRUE if succesful */ -static scpi_bool_t ParamToInt(scpi_t * context, scpi_parameter_t * parameter, int32_t * value, scpi_bool_t sign) { +static scpi_bool_t ParamToInt32(scpi_t * context, scpi_parameter_t * parameter, int32_t * value, scpi_bool_t sign) { if (!value) { SCPI_ErrorPush(context, SCPI_ERROR_SYSTEM_ERROR); @@ -541,44 +646,75 @@ switch (parameter->type) { case SCPI_TOKEN_HEXNUM: - return strToULong(parameter->ptr, (uint32_t *)value, 16) > 0 ? TRUE : FALSE; + return strToUInt32(parameter->ptr, (uint32_t *)value, 16) > 0 ? TRUE : FALSE; case SCPI_TOKEN_OCTNUM: - return strToULong(parameter->ptr, (uint32_t *)value, 8) > 0 ? TRUE : FALSE; + return strToUInt32(parameter->ptr, (uint32_t *)value, 8) > 0 ? TRUE : FALSE; case SCPI_TOKEN_BINNUM: - return strToULong(parameter->ptr, (uint32_t *)value, 2) > 0 ? TRUE : FALSE; + return strToUInt32(parameter->ptr, (uint32_t *)value, 2) > 0 ? TRUE : FALSE; case SCPI_TOKEN_DECIMAL_NUMERIC_PROGRAM_DATA: case SCPI_TOKEN_DECIMAL_NUMERIC_PROGRAM_DATA_WITH_SUFFIX: if (sign) { - return strToLong(parameter->ptr, value, 10) > 0 ? TRUE : FALSE; + return strToInt32(parameter->ptr, value, 10) > 0 ? TRUE : FALSE; } else { - return strToULong(parameter->ptr, (uint32_t *)value, 10) > 0 ? TRUE : FALSE; + return strToUInt32(parameter->ptr, (uint32_t *)value, 10) > 0 ? TRUE : FALSE; } default: return FALSE; } } - /** - * Convert parameter to integer + * Convert parameter to signed 32 bit integer * @param context * @param parameter * @param value result * @return TRUE if succesful */ -scpi_bool_t SCPI_ParamToInt(scpi_t * context, scpi_parameter_t * parameter, int32_t * value) { - return ParamToInt(context, parameter, value, TRUE); +scpi_bool_t SCPI_ParamToInt32(scpi_t * context, scpi_parameter_t * parameter, int32_t * value) { + return ParamToInt32(context, parameter, value, TRUE); } /** - * Convert parameter to unsigned integer + * Convert parameter to unsigned 32 bit integer * @param context * @param parameter * @param value result * @return TRUE if succesful */ -scpi_bool_t SCPI_ParamToUnsignedInt(scpi_t * context, scpi_parameter_t * parameter, uint32_t * value) { - return ParamToInt(context, parameter, (int32_t *)value, FALSE); +static scpi_bool_t ParamToUInt32(scpi_t * context, scpi_parameter_t * parameter, uint32_t * value, scpi_bool_t sign) { + + if (!value) { + SCPI_ErrorPush(context, SCPI_ERROR_SYSTEM_ERROR); + return FALSE; + } + + switch (parameter->type) { + case SCPI_TOKEN_HEXNUM: + return strToUInt32(parameter->ptr, (uint32_t *)value, 16) > 0 ? TRUE : FALSE; + case SCPI_TOKEN_OCTNUM: + return strToUInt32(parameter->ptr, (uint32_t *)value, 8) > 0 ? TRUE : FALSE; + case SCPI_TOKEN_BINNUM: + return strToUInt32(parameter->ptr, (uint32_t *)value, 2) > 0 ? TRUE : FALSE; + case SCPI_TOKEN_DECIMAL_NUMERIC_PROGRAM_DATA: + case SCPI_TOKEN_DECIMAL_NUMERIC_PROGRAM_DATA_WITH_SUFFIX: + if (sign) { + return strToInt32(parameter->ptr, value, 10) > 0 ? TRUE : FALSE; + } else { + return strToUInt32(parameter->ptr, (uint32_t *)value, 10) > 0 ? TRUE : FALSE; + } + } + return FALSE; +} + +/** + * Convert parameter to unsigned 32 bit integer + * @param context + * @param parameter + * @param value result + * @return TRUE if succesful + */ +scpi_bool_t SCPI_ParamToUInt32(scpi_t * context, scpi_parameter_t * parameter, uint32_t * value) { + return ParamToInt32(context, parameter, (int32_t *)value, FALSE); } /** @@ -602,7 +738,7 @@ case SCPI_TOKEN_HEXNUM: case SCPI_TOKEN_OCTNUM: case SCPI_TOKEN_BINNUM: - result = SCPI_ParamToUnsignedInt(context, parameter, &valint); + result = SCPI_ParamToUInt32(context, parameter, &valint); *value = valint; break; case SCPI_TOKEN_DECIMAL_NUMERIC_PROGRAM_DATA: @@ -647,13 +783,13 @@ } /** - * Read integer parameter + * Read signed/unsigned 32 bit integer parameter * @param context * @param value * @param mandatory * @return */ -static scpi_bool_t ParamInt(scpi_t * context, int32_t * value, scpi_bool_t mandatory, scpi_bool_t sign) { +static scpi_bool_t ParamInt32(scpi_t * context, int32_t * value, scpi_bool_t mandatory, scpi_bool_t sign) { scpi_bool_t result; scpi_parameter_t param; @@ -665,7 +801,7 @@ result = SCPI_Parameter(context, ¶m, mandatory); if (result) { if (SCPI_ParamIsNumber(¶m, FALSE)) { - result = ParamToInt(context, ¶m, value, sign); + result = ParamToInt32(context, ¶m, value, sign); } else if (SCPI_ParamIsNumber(¶m, TRUE)) { SCPI_ErrorPush(context, SCPI_ERROR_SUFFIX_NOT_ALLOWED); result = FALSE; @@ -677,12 +813,26 @@ return result; } -scpi_bool_t SCPI_ParamInt(scpi_t * context, int32_t * value, scpi_bool_t mandatory) { - return ParamInt(context, value, mandatory, TRUE); +/** + * Read signed 32 bit integer parameter + * @param context + * @param value + * @param mandatory + * @return + */ +scpi_bool_t SCPI_ParamInt32(scpi_t * context, int32_t * value, scpi_bool_t mandatory) { + return ParamInt32(context, value, mandatory, TRUE); } -scpi_bool_t SCPI_ParamUnsignedInt(scpi_t * context, uint32_t * value, scpi_bool_t mandatory) { - return ParamInt(context, (int32_t *)value, mandatory, FALSE); +/** + * Read unsigned 32 bit integer parameter + * @param context + * @param value + * @param mandatory + * @return + */ +scpi_bool_t SCPI_ParamUInt32(scpi_t * context, uint32_t * value, scpi_bool_t mandatory) { + return ParamInt32(context, (int32_t *)value, mandatory, FALSE); } /** @@ -879,7 +1029,7 @@ if (result) { if (param.type == SCPI_TOKEN_DECIMAL_NUMERIC_PROGRAM_DATA) { - SCPI_ParamToInt(context, ¶m, &intval); + SCPI_ParamToInt32(context, ¶m, &intval); *value = intval ? TRUE : FALSE; } else { result = SCPI_ParamToChoice(context, ¶m, bool_options, &intval); -- Gitblit v1.9.1