Add support for Boolean program data
New file |
| | |
| | | all: |
| | | $(MAKE) -C libscpi |
| | | $(MAKE) -C examples |
| | | |
| | | clean: |
| | | $(MAKE) clean -C libscpi |
| | | $(MAKE) clean -C examples |
New file |
| | |
| | | |
| | | all: |
| | | $(MAKE) -C test-interactive |
| | | $(MAKE) -C test-parser |
| | | $(MAKE) -C test-tcp |
| | | $(MAKE) -C test-tcp-srq |
| | | |
| | | |
| | | clean: |
| | | $(MAKE) clean -C test-interactive |
| | | $(MAKE) clean -C test-parser |
| | | $(MAKE) clean -C test-tcp |
| | | $(MAKE) clean -C test-tcp-srq |
| | | |
| | | |
| | |
| | | return SCPI_RES_OK; |
| | | } |
| | | |
| | | scpi_result_t SCPI_TestBool(scpi_t * context) { |
| | | scpi_parameter_t param1; |
| | | fprintf(stderr, "TEST:BOOL\r\n"); // debug command name |
| | | |
| | | // read first parameter if present |
| | | if (!SCPI_Parameter(context, ¶m1, true)) { |
| | | return SCPI_RES_ERR; |
| | | } |
| | | |
| | | fprintf(stderr, "\tP1=%d\r\n", SCPI_ParamGetBoolVal(context, ¶m1)); |
| | | |
| | | return SCPI_RES_OK; |
| | | } |
| | | |
| | | |
| | | static const scpi_command_t scpi_commands[] = { |
| | | /* IEEE Mandated Commands (SCPI std V1999.0 4.1.1) */ |
| | | { .pattern = "*CLS", .callback = SCPI_CoreCls,}, |
| | |
| | | |
| | | {.pattern = "SYSTem:COMMunication:TCPIP:CONTROL?", .callback = SCPI_SystemCommTcpipControlQ,}, |
| | | |
| | | {.pattern = "TEST:BOOL", .callback = SCPI_TestBool,}, |
| | | |
| | | SCPI_CMD_LIST_END |
| | | }; |
| | | |
| | |
| | | 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); |
| | | |
| | | 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); |
| | | |
| | | bool_t SCPI_Parameter(scpi_t * context, scpi_parameter_t * parameter, bool_t mandatory); |
| | | |
| | |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * Write boolean value to the result |
| | | * @param context |
| | | * @param val |
| | | * @return |
| | | */ |
| | | size_t SCPI_ResultBool(scpi_t * context, 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) { |
| | |
| | | *len = parameter->data.len; |
| | | } |
| | | |
| | | /* SCPI-99 7.3 Boolean Program Data */ |
| | | bool_t SCPI_ParamGetBoolVal(scpi_t * context, scpi_parameter_t * parameter) { |
| | | switch (parameter->type) { |
| | | case TokDecimalNumericProgramData: |
| | | return parameter->number.value ? 1 : 0; |
| | | case TokProgramMnemonic: |
| | | if (compareStr("ON", 2, parameter->data.ptr, parameter->data.len)) { |
| | | return TRUE; |
| | | } else if (compareStr("OFF", 3, parameter->data.ptr, parameter->data.len)) { |
| | | return FALSE; |
| | | } else { |
| | | SCPI_ErrorPush(context, SCPI_ERROR_INVALID_PARAMETER); |
| | | return FALSE; |
| | | } |
| | | default: |
| | | SCPI_ErrorPush(context, SCPI_ERROR_INVALID_PARAMETER); |
| | | return FALSE; |
| | | } |
| | | } |
| | | |
| | | int SCPI_ParseProgramData(lex_state_t * state, token_t * token) { |
| | | token_t tmp; |
| | | int result = 0; |
| | |
| | | TEST_DETECT("[\r\n", 0, 1, TokInvalid, 0, 0, PmutNone); |
| | | } |
| | | |
| | | void testBoolParameter(void) { |
| | | TEST_TOKEN(" 1", SCPI_ParseProgramData, 1, 1, TokDecimalNumericProgramData); |
| | | TEST_TOKEN(" 0", SCPI_ParseProgramData, 1, 1, TokDecimalNumericProgramData); |
| | | TEST_TOKEN(" ON", SCPI_ParseProgramData, 1, 2, TokProgramMnemonic); |
| | | TEST_TOKEN("OFF ", SCPI_ParseProgramData, 0, 3, TokProgramMnemonic); |
| | | |
| | | // TODO: finish bool test |
| | | } |
| | | |
| | | // TODO: SCPI_Parameter test |
| | | |
| | | int main() { |
| | | CU_pSuite pSuite = NULL; |
| | | |
| | |
| | | || (NULL == CU_add_test(pSuite, "ProgramData", testProgramData)) |
| | | || (NULL == CU_add_test(pSuite, "AllProgramData", testAllProgramData)) |
| | | || (NULL == CU_add_test(pSuite, "DetectProgramMessageUnit", testDetectProgramMessageUnit)) |
| | | || (NULL == CU_add_test(pSuite, "BoolParameter", testBoolParameter)) |
| | | ) { |
| | | CU_cleanup_registry(); |
| | | return CU_get_error(); |