Convert c++ style comments // to c89 style comments /* */
| | |
| | | static scpi_result_t DMM_MeasureVoltageDcQ(scpi_t * context) { |
| | | scpi_number_t param1, param2; |
| | | char bf[15]; |
| | | fprintf(stderr, "meas:volt:dc\r\n"); // debug command name |
| | | fprintf(stderr, "meas:volt:dc\r\n"); /* debug command name */ |
| | | |
| | | // read first parameter if present |
| | | /* read first parameter if present */ |
| | | if (!SCPI_ParamNumber(context, scpi_special_numbers_def, ¶m1, FALSE)) { |
| | | // do something, if parameter not present |
| | | /* do something, if parameter not present */ |
| | | } |
| | | |
| | | // read second paraeter if present |
| | | /* read second paraeter if present */ |
| | | if (!SCPI_ParamNumber(context, scpi_special_numbers_def, ¶m2, FALSE)) { |
| | | // do something, if parameter not present |
| | | /* do something, if parameter not present */ |
| | | } |
| | | |
| | | |
| | |
| | | static scpi_result_t DMM_MeasureVoltageAcQ(scpi_t * context) { |
| | | scpi_number_t param1, param2; |
| | | char bf[15]; |
| | | fprintf(stderr, "meas:volt:ac\r\n"); // debug command name |
| | | fprintf(stderr, "meas:volt:ac\r\n"); /* debug command name */ |
| | | |
| | | // read first parameter if present |
| | | /* read first parameter if present */ |
| | | if (!SCPI_ParamNumber(context, scpi_special_numbers_def, ¶m1, FALSE)) { |
| | | // do something, if parameter not present |
| | | /* do something, if parameter not present */ |
| | | } |
| | | |
| | | // read second paraeter if present |
| | | /* read second paraeter if present */ |
| | | if (!SCPI_ParamNumber(context, scpi_special_numbers_def, ¶m2, FALSE)) { |
| | | // do something, if parameter not present |
| | | /* do something, if parameter not present */ |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | static scpi_result_t DMM_ConfigureVoltageDc(scpi_t * context) { |
| | | double param1, param2; |
| | | fprintf(stderr, "conf:volt:dc\r\n"); // debug command name |
| | | fprintf(stderr, "conf:volt:dc\r\n"); /* debug command name */ |
| | | |
| | | // read first parameter if present |
| | | /* read first parameter if present */ |
| | | if (!SCPI_ParamDouble(context, ¶m1, TRUE)) { |
| | | return SCPI_RES_ERR; |
| | | } |
| | | |
| | | // read second paraeter if present |
| | | /* read second paraeter if present */ |
| | | if (!SCPI_ParamDouble(context, ¶m2, FALSE)) { |
| | | // do something, if parameter not present |
| | | /* do something, if parameter not present */ |
| | | } |
| | | |
| | | fprintf(stderr, "\tP1=%lf\r\n", param1); |
| | |
| | | |
| | | static scpi_result_t TEST_Bool(scpi_t * context) { |
| | | scpi_bool_t param1; |
| | | fprintf(stderr, "TEST:BOOL\r\n"); // debug command name |
| | | fprintf(stderr, "TEST:BOOL\r\n"); /* debug command name */ |
| | | |
| | | // read first parameter if present |
| | | /* read first parameter if present */ |
| | | if (!SCPI_ParamBool(context, ¶m1, TRUE)) { |
| | | return SCPI_RES_ERR; |
| | | } |
| | |
| | | */ |
| | | static scpi_result_t TEST_Chanlst(scpi_t *context) { |
| | | scpi_parameter_t channel_list_param; |
| | | #define MAXROW 2 //maximum number of rows |
| | | #define MAXCOL 6 //maximum number of columns |
| | | #define MAXDIM 2 //maximum number of dimensions |
| | | scpi_channel_value_t array[MAXROW * MAXCOL]; //array which holds values in order (2D) |
| | | size_t chanlst_idx; //index for channel list |
| | | size_t arr_idx = 0; //index for array |
| | | size_t n, m = 1; //counters for row (n) and columns (m) |
| | | #define MAXROW 2 /* maximum number of rows */ |
| | | #define MAXCOL 6 /* maximum number of columns */ |
| | | #define MAXDIM 2 /* maximum number of dimensions */ |
| | | scpi_channel_value_t array[MAXROW * MAXCOL]; /* array which holds values in order (2D) */ |
| | | size_t chanlst_idx; /* index for channel list */ |
| | | size_t arr_idx = 0; /* index for array */ |
| | | size_t n, m = 1; /* counters for row (n) and columns (m) */ |
| | | |
| | | // get channel list |
| | | /* get channel list */ |
| | | if (SCPI_Parameter(context, &channel_list_param, TRUE)) { |
| | | scpi_expr_result_t res; |
| | | scpi_bool_t is_range; |
| | |
| | | int32_t values_to[MAXDIM]; |
| | | size_t dimensions; |
| | | |
| | | bool for_stop_row = false; //true if iteration for rows has to stop |
| | | bool for_stop_col = false; //true if iteration for columns has to stop |
| | | int32_t dir_row = 1; //direction of counter for rows, +/-1 |
| | | int32_t dir_col = 1; //direction of counter for columns, +/-1 |
| | | bool for_stop_row = false; /* true if iteration for rows has to stop */ |
| | | bool for_stop_col = false; /* true if iteration for columns has to stop */ |
| | | int32_t dir_row = 1; /* direction of counter for rows, +/-1 */ |
| | | int32_t dir_col = 1; /* direction of counter for columns, +/-1 */ |
| | | |
| | | // the next statement is valid usage and it gets only real number of dimensions for the first item (index 0) |
| | | /* the next statement is valid usage and it gets only real number of dimensions for the first item (index 0) */ |
| | | if (!SCPI_ExprChannelListEntry(context, &channel_list_param, 0, &is_range, NULL, NULL, 0, &dimensions)) { |
| | | chanlst_idx = 0; //call first index |
| | | arr_idx = 0; //set arr_idx to 0 |
| | | do { //if valid, iterate over channel_list_param index while res == valid (do-while cause we have to do it once) |
| | | chanlst_idx = 0; /* call first index */ |
| | | arr_idx = 0; /* set arr_idx to 0 */ |
| | | do { /* if valid, iterate over channel_list_param index while res == valid (do-while cause we have to do it once) */ |
| | | res = SCPI_ExprChannelListEntry(context, &channel_list_param, chanlst_idx, &is_range, values_from, values_to, 4, &dimensions); |
| | | if (is_range == false) { //still can have multiple dimensions |
| | | if (is_range == false) { /* still can have multiple dimensions */ |
| | | if (dimensions == 1) { |
| | | //here we have our values |
| | | //row == values_from[0] |
| | | //col == 0 (fixed number) |
| | | //call a function or something |
| | | /* here we have our values |
| | | * row == values_from[0] |
| | | * col == 0 (fixed number) |
| | | * call a function or something */ |
| | | array[arr_idx].row = values_from[0]; |
| | | array[arr_idx].col = 0; |
| | | } else if (dimensions == 2) { |
| | | //here we have our values |
| | | //row == values_fom[0] |
| | | //col == values_from[1] |
| | | //call a function or something |
| | | /* here we have our values |
| | | * row == values_fom[0] |
| | | * col == values_from[1] |
| | | * call a function or something */ |
| | | array[arr_idx].row = values_from[0]; |
| | | array[arr_idx].col = values_from[1]; |
| | | } else { |
| | | return SCPI_RES_ERR; |
| | | } |
| | | arr_idx++; //inkrement array where we want to save our values to, not neccessary otherwise |
| | | arr_idx++; /* inkrement array where we want to save our values to, not neccessary otherwise */ |
| | | if (arr_idx >= MAXROW * MAXCOL) { |
| | | return SCPI_RES_ERR; |
| | | } |
| | | } else if (is_range == true) { |
| | | if (values_from[0] > values_to[0]) { |
| | | dir_row = -1; //we have to decrement from values_from |
| | | } else { //if (values_from[0] < values_to[0]) |
| | | dir_row = +1; //default, we increment from values_from |
| | | dir_row = -1; /* we have to decrement from values_from */ |
| | | } else { /* if (values_from[0] < values_to[0]) */ |
| | | dir_row = +1; /* default, we increment from values_from */ |
| | | } |
| | | |
| | | //iterating over rows, do it once -> set for_stop_row = false |
| | | //needed if there is channel list index isn't at end yet |
| | | /* iterating over rows, do it once -> set for_stop_row = false |
| | | * needed if there is channel list index isn't at end yet */ |
| | | for_stop_row = false; |
| | | for (n = values_from[0]; for_stop_row == false; n += dir_row) { |
| | | //usual case for ranges, 2 dimensions |
| | | /* usual case for ranges, 2 dimensions */ |
| | | if (dimensions == 2) { |
| | | if (values_from[1] > values_to[1]) { |
| | | dir_col = -1; |
| | | } else if (values_from[1] < values_to[1]) { |
| | | dir_col = +1; |
| | | } |
| | | //iterating over columns, do it at least once -> set for_stop_col = false |
| | | //needed if there is channel list index isn't at end yet |
| | | /* iterating over columns, do it at least once -> set for_stop_col = false |
| | | * needed if there is channel list index isn't at end yet */ |
| | | for_stop_col = false; |
| | | for (m = values_from[1]; for_stop_col == false; m += dir_col) { |
| | | //here we have our values |
| | | //row == n |
| | | //col == m |
| | | //call a function or something |
| | | /* here we have our values |
| | | * row == n |
| | | * col == m |
| | | * call a function or something */ |
| | | array[arr_idx].row = n; |
| | | array[arr_idx].col = m; |
| | | arr_idx++; |
| | |
| | | return SCPI_RES_ERR; |
| | | } |
| | | if (m == (size_t)values_to[1]) { |
| | | //endpoint reached, stop column for-loop |
| | | /* endpoint reached, stop column for-loop */ |
| | | for_stop_col = true; |
| | | } |
| | | } |
| | | //special case for range, example: (@2!1) |
| | | /* special case for range, example: (@2!1) */ |
| | | } else if (dimensions == 1) { |
| | | //here we have values |
| | | //row == n |
| | | //col == 0 (fixed number) |
| | | //call function or sth. |
| | | /* here we have values |
| | | * row == n |
| | | * col == 0 (fixed number) |
| | | * call function or sth. */ |
| | | array[arr_idx].row = n; |
| | | array[arr_idx].col = 0; |
| | | arr_idx++; |
| | |
| | | } |
| | | } |
| | | if (n == (size_t)values_to[0]) { |
| | | //endpoint reached, stop row for-loop |
| | | /* endpoint reached, stop row for-loop */ |
| | | for_stop_row = true; |
| | | } |
| | | } |
| | |
| | | } else { |
| | | return SCPI_RES_ERR; |
| | | } |
| | | //increase index |
| | | /* increase index */ |
| | | chanlst_idx++; |
| | | } while (SCPI_EXPR_OK == SCPI_ExprChannelListEntry(context, &channel_list_param, chanlst_idx, &is_range, values_from, values_to, 4, &dimensions)); |
| | | //while checks, whether incremented index is valid |
| | | /* while checks, whether incremented index is valid */ |
| | | } |
| | | //do something at the end if needed |
| | | //array[arr_idx].row = 0; |
| | | //array[arr_idx].col = 0; |
| | | /* do something at the end if needed */ |
| | | /* array[arr_idx].row = 0; */ |
| | | /* array[arr_idx].col = 0; */ |
| | | } |
| | | |
| | | { |
| | |
| | | {.pattern = "SYSTem:ERRor:COUNt?", .callback = SCPI_SystemErrorCountQ,}, |
| | | {.pattern = "SYSTem:VERSion?", .callback = SCPI_SystemVersionQ,}, |
| | | |
| | | //{.pattern = "STATus:OPERation?", .callback = scpi_stub_callback,}, |
| | | //{.pattern = "STATus:OPERation:EVENt?", .callback = scpi_stub_callback,}, |
| | | //{.pattern = "STATus:OPERation:CONDition?", .callback = scpi_stub_callback,}, |
| | | //{.pattern = "STATus:OPERation:ENABle", .callback = scpi_stub_callback,}, |
| | | //{.pattern = "STATus:OPERation:ENABle?", .callback = scpi_stub_callback,}, |
| | | /* {.pattern = "STATus:OPERation?", .callback = scpi_stub_callback,}, */ |
| | | /* {.pattern = "STATus:OPERation:EVENt?", .callback = scpi_stub_callback,}, */ |
| | | /* {.pattern = "STATus:OPERation:CONDition?", .callback = scpi_stub_callback,}, */ |
| | | /* {.pattern = "STATus:OPERation:ENABle", .callback = scpi_stub_callback,}, */ |
| | | /* {.pattern = "STATus:OPERation:ENABle?", .callback = scpi_stub_callback,}, */ |
| | | |
| | | {.pattern = "STATus:QUEStionable[:EVENt]?", .callback = SCPI_StatusQuestionableEventQ,}, |
| | | //{.pattern = "STATus:QUEStionable:CONDition?", .callback = scpi_stub_callback,}, |
| | | /* {.pattern = "STATus:QUEStionable:CONDition?", .callback = scpi_stub_callback,}, */ |
| | | {.pattern = "STATus:QUEStionable:ENABle", .callback = SCPI_StatusQuestionableEnable,}, |
| | | {.pattern = "STATus:QUEStionable:ENABle?", .callback = SCPI_StatusQuestionableEnableQ,}, |
| | | |
| | |
| | | |
| | | scpi_result_t SCPI_SystemCommTcpipControlQ(scpi_t * context); |
| | | |
| | | #endif // __SCPI_DEF_H_ |
| | | #endif /* __SCPI_DEF_H_ */ |
| | | |
| | |
| | | buf[len] = '\0'; |
| | | break; |
| | | default: |
| | | len = 0; // stop loop |
| | | len = 0; /* stop loop */ |
| | | break; |
| | | } |
| | | } |
| | |
| | | |
| | | size_t SCPI_Write(scpi_t * context, const char * data, size_t len) { |
| | | if ((SCPI_outputBuffer_idx + len) > (SCPI_OUPUT_BUFFER_SIZE - 1)) { |
| | | len = (SCPI_OUPUT_BUFFER_SIZE - 1) - SCPI_outputBuffer_idx; // limit length to left over space |
| | | // apparently there is no mechanism to cope with buffers that are too small |
| | | len = (SCPI_OUPUT_BUFFER_SIZE - 1) - SCPI_outputBuffer_idx; /* limit length to left over space */ |
| | | /* apparently there is no mechanism to cope with buffers that are too small */ |
| | | } |
| | | memcpy(&SCPI_outputBuffer[SCPI_outputBuffer_idx], data, len); |
| | | SCPI_outputBuffer_idx += len; |
| | | |
| | | SCPI_outputBuffer[SCPI_outputBuffer_idx] = '\0'; |
| | | // return fwrite(data, 1, len, stdout); |
| | | /* return fwrite(data, 1, len, stdout); */ |
| | | return len; |
| | | } |
| | | |
| | | scpi_result_t SCPI_Flush(scpi_t * context) { |
| | | // fwrite(SCPI_outputBuffer, 1, SCPI_outputBuffer_idx, stdout); |
| | | /* fwrite(SCPI_outputBuffer, 1, SCPI_outputBuffer_idx, stdout); */ |
| | | removeTrailingEndcodes(SCPI_outputBuffer); |
| | | InsertTextBoxLine(panelHandle, PANEL_OUTPUT, -1, SCPI_outputBuffer); |
| | | SCPI_outputBuffer_idx = 0; |
| | |
| | | int SCPI_Error(scpi_t * context, int_fast16_t err) { |
| | | char buf[512]; |
| | | |
| | | // fprintf(stderr, "**ERROR: %d, \"%s\"\r\n", (int16_t) err, SCPI_ErrorTranslate(err)); |
| | | /* fprintf(stderr, "**ERROR: %d, \"%s\"\r\n", (int16_t) err, SCPI_ErrorTranslate(err)); */ |
| | | sprintf(buf, "**ERROR: %d, \"%s\"", (int16_t) err, SCPI_ErrorTranslate(err)); |
| | | InsertTextBoxLine(panelHandle, PANEL_OUTPUTERR, -1, buf); |
| | | return 0; |
| | |
| | | |
| | | scpi_result_t SCPI_Control(scpi_t * context, scpi_ctrl_name_t ctrl, scpi_reg_val_t val) { |
| | | if (SCPI_CTRL_SRQ == ctrl) { |
| | | // fprintf(stderr, "**SRQ: 0x%X (%d)\r\n", val, val); |
| | | /* fprintf(stderr, "**SRQ: 0x%X (%d)\r\n", val, val); */ |
| | | SetCtrlVal(panelHandle, PANEL_LEDSRQ, 1); |
| | | } else { |
| | | fprintf(stderr, "**CTRL %02x: 0x%X (%d)\r\n", ctrl, val, val); |
| | |
| | | |
| | | scpi_result_t SCPI_Reset(scpi_t * context) { |
| | | char buf[256]; |
| | | // fprintf(stderr, "**Reset\r\n"); |
| | | /* fprintf(stderr, "**Reset\r\n"); */ |
| | | sprintf(buf, "**Reset\r\n"); |
| | | debug_output(buf); |
| | | return SCPI_RES_OK; |
| | |
| | | struct netconn *io; |
| | | struct netconn *control_io; |
| | | xQueueHandle evtQueue; |
| | | //FILE * fio; |
| | | //fd_set fds; |
| | | /* FILE * fio; */ |
| | | /* fd_set fds; */ |
| | | } user_data_t; |
| | | |
| | | struct _queue_event_t { |
| | |
| | | |
| | | int SCPI_Error(scpi_t * context, int_fast16_t err) { |
| | | (void) context; |
| | | // BEEP |
| | | /* BEEP */ |
| | | iprintf("**ERROR: %ld, \"%s\"\r\n", (int32_t) err, SCPI_ErrorTranslate(err)); |
| | | if (err != 0) { |
| | | /* New error */ |
| | |
| | | |
| | | if (netconn_accept(user_data->io_listen, &newconn) == ERR_OK) { |
| | | if (user_data->io) { |
| | | // Close unwanted connection |
| | | /* Close unwanted connection */ |
| | | netconn_close(newconn); |
| | | netconn_delete(newconn); |
| | | } else { |
| | | // connection established |
| | | /* connection established */ |
| | | iprintf("***Connection established %s\r\n", inet_ntoa(newconn->pcb.ip->remote_ip)); |
| | | user_data->io = newconn; |
| | | } |
| | |
| | | netconn_close(newconn); |
| | | netconn_delete(newconn); |
| | | } else { |
| | | // control connection established |
| | | /* control connection established */ |
| | | iprintf("***Control Connection established %s\r\n", inet_ntoa(newconn->pcb.ip->remote_ip)); |
| | | user_data->control_io = newconn; |
| | | } |
| | |
| | | } |
| | | |
| | | static void closeIo(user_data_t * user_data) { |
| | | // connection closed |
| | | /* connection closed */ |
| | | netconn_close(user_data->io); |
| | | netconn_delete(user_data->io); |
| | | user_data->io = NULL; |
| | |
| | | } |
| | | |
| | | static void closeSrqIo(user_data_t * user_data) { |
| | | // control connection closed |
| | | /* control connection closed */ |
| | | netconn_close(user_data->control_io); |
| | | netconn_delete(user_data->control_io); |
| | | user_data->control_io = NULL; |
| | |
| | | if (buflen > 0) { |
| | | SCPI_Input(&scpi_context, buf, buflen); |
| | | } else { |
| | | //goto fail2; |
| | | /* goto fail2; */ |
| | | } |
| | | |
| | | netbuf_delete(inbuf); |
| | |
| | | netbuf_data(inbuf, (void**) &buf, &buflen); |
| | | |
| | | if (buflen > 0) { |
| | | // TODO process control |
| | | /* TODO process control */ |
| | | } else { |
| | | //goto fail2; |
| | | /* goto fail2; */ |
| | | } |
| | | |
| | | netbuf_delete(inbuf); |
| | |
| | | |
| | | user_data.evtQueue = xQueueCreate(10, sizeof (queue_event_t)); |
| | | |
| | | // user_context will be pointer to socket |
| | | /* user_context will be pointer to socket */ |
| | | SCPI_Init(&scpi_context, |
| | | scpi_commands, |
| | | &scpi_interface, |
| | |
| | | while (1) { |
| | | waitServer(&user_data, &evt); |
| | | |
| | | if (evt.cmd == SCPI_MSG_TIMEOUT) { // timeout |
| | | if (evt.cmd == SCPI_MSG_TIMEOUT) { /* timeout */ |
| | | SCPI_Input(&scpi_context, NULL, 0); |
| | | } |
| | | |
| | |
| | | scpi_input_buffer, SCPI_INPUT_BUFFER_LENGTH, |
| | | scpi_error_queue_data, SCPI_ERROR_QUEUE_SIZE); |
| | | |
| | | //printf("%.*s %s\r\n", 3, "asdadasdasdasdas", "b"); |
| | | /* printf("%.*s %s\r\n", 3, "asdadasdasdasdas", "b"); */ |
| | | printf("SCPI Interactive demo\r\n"); |
| | | char smbuffer[10]; |
| | | while (1) { |
| | |
| | | TEST_SCPI_INPUT("SYST:VERS?"); |
| | | TEST_SCPI_INPUT("\r\n*ID"); |
| | | TEST_SCPI_INPUT("N?"); |
| | | TEST_SCPI_INPUT(""); // emulate command timeout |
| | | TEST_SCPI_INPUT(""); /* emulate command timeout */ |
| | | |
| | | TEST_SCPI_INPUT("*ESE\r\n"); // cause error -109, missing parameter |
| | | TEST_SCPI_INPUT("*ESE\r\n"); /* cause error -109, missing parameter */ |
| | | TEST_SCPI_INPUT("*ESE #H20\r\n"); |
| | | |
| | | TEST_SCPI_INPUT("*SRE #HFF\r\n"); |
| | | |
| | | TEST_SCPI_INPUT("IDN?\r\n"); // cause error -113, undefined header |
| | | TEST_SCPI_INPUT("IDN?\r\n"); /* cause error -113, undefined header */ |
| | | |
| | | TEST_SCPI_INPUT("SYST:ERR?\r\n"); |
| | | TEST_SCPI_INPUT("SYST:ERR?\r\n"); |
| | |
| | | TEST_SCPI_INPUT("test:text 'aa a'\r\n"); |
| | | TEST_SCPI_INPUT("test:text 'aaa aaaa'\r\n"); |
| | | TEST_SCPI_INPUT("TEST:CHANnellist (@9!2:3!4,5!6)\r\n"); |
| | | //printf("%.*s %s\r\n", 3, "asdadasdasdasdas", "b"); |
| | | // interactive demo |
| | | //char smbuffer[10]; |
| | | //while (1) { |
| | | // fgets(smbuffer, 10, stdin); |
| | | // SCPI_Input(&scpi_context, smbuffer, strlen(smbuffer)); |
| | | //} |
| | | /* printf("%.*s %s\r\n", 3, "asdadasdasdasdas", "b"); |
| | | * interactive demo |
| | | * char smbuffer[10]; |
| | | * while (1) { |
| | | * fgets(smbuffer, 10, stdin); |
| | | * SCPI_Input(&scpi_context, smbuffer, strlen(smbuffer)); |
| | | * } |
| | | */ |
| | | |
| | | |
| | | return (EXIT_SUCCESS); |
| | |
| | | |
| | | int SCPI_Error(scpi_t * context, int_fast16_t err) { |
| | | (void) context; |
| | | // BEEP |
| | | /* BEEP */ |
| | | fprintf(stderr, "**ERROR: %d, \"%s\"\r\n", (int16_t) err, SCPI_ErrorTranslate(err)); |
| | | return 0; |
| | | } |
| | |
| | | closeSrqIo(user_data); |
| | | printf("Control Connection closed\r\n"); |
| | | } else { |
| | | // nothing to do |
| | | /* nothing to do */ |
| | | } |
| | | } |
| | | |
| | |
| | | }; |
| | | #endif |
| | | |
| | | // user_context will be pointer to socket |
| | | /* user_context will be pointer to socket */ |
| | | SCPI_Init(&scpi_context, |
| | | scpi_commands, |
| | | &scpi_interface, |
| | |
| | | while (1) { |
| | | rc = waitServer(&user_data); |
| | | |
| | | if (rc < 0) { // failed |
| | | if (rc < 0) { /* failed */ |
| | | perror("select failed"); |
| | | exit(-1); |
| | | } |
| | | |
| | | if (rc == 0) { // timeout |
| | | if (rc == 0) { /* timeout */ |
| | | SCPI_Input(&scpi_context, NULL, 0); |
| | | } |
| | | |
| | |
| | | |
| | | int SCPI_Error(scpi_t * context, int_fast16_t err) { |
| | | (void) context; |
| | | // BEEP |
| | | /* BEEP */ |
| | | fprintf(stderr, "**ERROR: %d, \"%s\"\r\n", (int16_t) err, SCPI_ErrorTranslate(err)); |
| | | return 0; |
| | | } |
| | |
| | | int listenfd; |
| | | char smbuffer[10]; |
| | | |
| | | // user_context will be pointer to socket |
| | | /* user_context will be pointer to socket */ |
| | | scpi_context.user_context = NULL; |
| | | |
| | | SCPI_Init(&scpi_context, |
| | |
| | | |
| | | while (1) { |
| | | rc = waitServer(clifd); |
| | | if (rc < 0) { // failed |
| | | if (rc < 0) { /* failed */ |
| | | perror(" recv() failed"); |
| | | break; |
| | | } |
| | | if (rc == 0) { // timeout |
| | | if (rc == 0) { /* timeout */ |
| | | SCPI_Input(&scpi_context, NULL, 0); |
| | | } |
| | | if (rc > 0) { // something to read |
| | | if (rc > 0) { /* something to read */ |
| | | rc = recv(clifd, smbuffer, sizeof (smbuffer), 0); |
| | | if (rc < 0) { |
| | | if (errno != EWOULDBLOCK) { |
| | |
| | | scpi_bool_t SCPI_CommandNumbers(scpi_t * context, int32_t * numbers, size_t len, int32_t default_value); |
| | | |
| | | #if USE_DEPRECATED_FUNCTIONS |
| | | // deprecated finction, should be removed later |
| | | /* deprecated finction, should be removed later */ |
| | | #define SCPI_ResultIntBase(context, val, base) SCPI_ResultInt32Base ((context), (val), (base), TRUE) |
| | | #define SCPI_ResultInt(context, val) SCPI_ResultInt32 ((context), (val)) |
| | | #define SCPI_ParamToInt(context, parameter, value) SCPI_ParamToInt32((context), (parameter), (value)) |
| | |
| | | |
| | | struct _scpi_error_info_heap_t { |
| | | size_t wr; |
| | | //size_t rd; |
| | | /* size_t rd; */ |
| | | size_t count; |
| | | size_t size; |
| | | char * data; |
| | |
| | | size_t SCPI_FloatToStr(float val, char * str, size_t len); |
| | | size_t SCPI_DoubleToStr(double val, char * str, size_t len); |
| | | |
| | | // deprecated finction, should be removed later |
| | | /* deprecated finction, should be removed later */ |
| | | #define SCPI_LongToStr(val, str, len, base) SCPI_Int32ToStr((val), (str), (len), (base), TRUE) |
| | | |
| | | #ifdef __cplusplus |
| | |
| | | if (i == 0) { |
| | | return SCPI_EXPR_NO_MORE; |
| | | } else { |
| | | // there was at least one number followed by !, but after ! was not another number |
| | | /* there was at least one number followed by !, but after ! was not another number */ |
| | | return SCPI_EXPR_ERROR; |
| | | } |
| | | } |
| | |
| | | lex.pos = lex.buffer; |
| | | lex.len = param->len - 2; |
| | | |
| | | // detect channel list expression |
| | | /* detect channel list expression */ |
| | | if (!scpiLex_SpecificCharacter(&lex, &token, '@')) { |
| | | SCPI_ErrorPush(context, SCPI_ERROR_EXPRESSION_PARSING_ERROR); |
| | | return SCPI_EXPR_ERROR; |
| | |
| | | |
| | | /* skip characters */ |
| | | /* 7.4.1 <PROGRAM MESSAGE UNIT SEPARATOR>*/ |
| | | // TODO: static int skipProgramMessageUnitSeparator(lex_state_t * state) |
| | | /* TODO: static int skipProgramMessageUnitSeparator(lex_state_t * state) */ |
| | | |
| | | /** |
| | | * Skip all whitespaces |
| | |
| | | } |
| | | |
| | | /* 7.4.2 <PROGRAM DATA SEPARATOR> */ |
| | | // static int skipProgramDataSeparator(lex_state_t * state) |
| | | /* static int skipProgramDataSeparator(lex_state_t * state) */ |
| | | |
| | | /* 7.5.2 <PROGRAM MESSAGE TERMINATOR> */ |
| | | // static int skipProgramMessageTerminator(lex_state_t * state) |
| | | /* static int skipProgramMessageTerminator(lex_state_t * state) */ |
| | | |
| | | /** |
| | | * Skip decimal digit |
| | |
| | | |
| | | skipChr(state, '/'); |
| | | |
| | | // TODO: strict parsing : SLASH? (ALPHA+ (MINUS? DIGIT)?) ((SLASH | DOT) (ALPHA+ (MINUS? DIGIT)?))* |
| | | /* TODO: strict parsing : SLASH? (ALPHA+ (MINUS? DIGIT)?) ((SLASH | DOT) (ALPHA+ (MINUS? DIGIT)?))* */ |
| | | if (skipAlpha(state)) { |
| | | skipChr(state, '-'); |
| | | skipDigit(state); |
| | |
| | | } |
| | | |
| | | if (someNumbers) { |
| | | token->ptr += 2; // ignore number prefix |
| | | token->ptr += 2; /* ignore number prefix */ |
| | | token->len = state->pos - token->ptr; |
| | | } else { |
| | | token->type = SCPI_TOKEN_UNKNOWN; |
| | |
| | | token->len = state->pos - token->ptr; |
| | | |
| | | if ((token->len > 0)) { |
| | | //token->ptr++; |
| | | //token->len -= 2; |
| | | /* token->ptr++; |
| | | * token->len -= 2; */ |
| | | } else { |
| | | token->type = SCPI_TOKEN_UNKNOWN; |
| | | state->pos = token->ptr; |
| | |
| | | } |
| | | |
| | | if (validData == 1) { |
| | | // valid |
| | | /* valid */ |
| | | token->type = SCPI_TOKEN_ARBITRARY_BLOCK_PROGRAM_DATA; |
| | | } else if (validData == 0) { |
| | | // incomplete |
| | | /* incomplete */ |
| | | token->type = SCPI_TOKEN_UNKNOWN; |
| | | token->len = 0; |
| | | state->pos = state->buffer + state->len; |
| | | } else { |
| | | // invalid |
| | | /* invalid */ |
| | | token->type = SCPI_TOKEN_UNKNOWN; |
| | | state->pos = token->ptr; |
| | | token->len = 0; |
| | |
| | | } |
| | | } |
| | | |
| | | // TODO: 7.7.7.2-2 recursive - any program data |
| | | /* TODO: 7.7.7.2-2 recursive - any program data */ |
| | | |
| | | /** |
| | | * Detect token Expression |
| | |
| | | if (mandatory) { |
| | | SCPI_ErrorPush(context, SCPI_ERROR_MISSING_PARAMETER); |
| | | } else { |
| | | parameter->type = SCPI_TOKEN_PROGRAM_MNEMONIC; // TODO: select something different |
| | | parameter->type = SCPI_TOKEN_PROGRAM_MNEMONIC; /* TODO: select something different */ |
| | | } |
| | | return FALSE; |
| | | } |
| | |
| | | break; |
| | | } |
| | | |
| | | // TODO: return also parameter type (ProgramMnemonic, ArbitraryBlockProgramData, SingleQuoteProgramData, DoubleQuoteProgramData |
| | | /* TODO: return also parameter type (ProgramMnemonic, ArbitraryBlockProgramData, SingleQuoteProgramData, DoubleQuoteProgramData */ |
| | | } |
| | | |
| | | return result; |
| | |
| | | break; |
| | | } |
| | | |
| | | // add sign for numbers in base 10 |
| | | /* add sign for numbers in base 10 */ |
| | | if (sign && ((int32_t) val < 0) && (base == 10)) { |
| | | uval = -val; |
| | | ADD_CHAR('-'); |
| | | } |
| | | |
| | | // remove leading zeros |
| | | /* remove leading zeros */ |
| | | while ((uval / x) == 0) { |
| | | x /= base; |
| | | } |
| | |
| | | break; |
| | | } |
| | | |
| | | // add sign for numbers in base 10 |
| | | /* add sign for numbers in base 10 */ |
| | | if (sign && ((int64_t) val < 0) && (base == 10)) { |
| | | uval = -val; |
| | | ADD_CHAR('-'); |
| | | } |
| | | |
| | | // remove leading zeros |
| | | /* remove leading zeros */ |
| | | while ((uval / x) == 0) { |
| | | x /= base; |
| | | } |
| | |
| | | |
| | | if (num) { |
| | | if (len1 == len2) { |
| | | //*num = 1; |
| | | /* *num = 1; */ |
| | | } else { |
| | | int32_t tmpNum; |
| | | i = len1 + strBaseToInt32(str2 + len1, &tmpNum, 10); |
| | |
| | | } |
| | | |
| | | /* now support optional keywords in pattern style, e.g. [:MEASure]:VOLTage:DC? */ |
| | | if (pattern_ptr[0] == '[') { // skip first '[' |
| | | if (pattern_ptr[0] == '[') { /* skip first '[' */ |
| | | SKIP_PATTERN(1); |
| | | brackets++; |
| | | } |
| | | if (pattern_ptr[0] == ':') { // skip first ':' |
| | | if (pattern_ptr[0] == ':') { /* skip first ':' */ |
| | | SKIP_PATTERN(1); |
| | | } |
| | | |
| | |
| | | if ((pattern_sep_pos > 0) && pattern_ptr[pattern_sep_pos - 1] == '#') { |
| | | if (numbers && (numbers_idx < numbers_len)) { |
| | | number_ptr = numbers + numbers_idx; |
| | | *number_ptr = default_value; // default value |
| | | *number_ptr = default_value; /* default value */ |
| | | } else { |
| | | number_ptr = NULL; |
| | | } |
| | |
| | | |
| | | /* command complete, but pattern not */ |
| | | if (cmd_len == 0) { |
| | | // verify all subsequent pattern parts are also optional |
| | | /* verify all subsequent pattern parts are also optional */ |
| | | while (pattern_len) { |
| | | pattern_sep_pos = patternSeparatorPos(pattern_ptr, pattern_len); |
| | | switch (pattern_ptr[pattern_sep_pos]) { |
| | |
| | | && (pattern_ptr[1] == cmd_ptr[0]) |
| | | && (pattern_ptr[0] == '[') |
| | | && (pattern_ptr[1] == ':')) { |
| | | SKIP_PATTERN(2); // for skip '[' in "[:" |
| | | SKIP_PATTERN(2); /* for skip '[' in "[:" */ |
| | | SKIP_CMD(1); |
| | | brackets++; |
| | | } else if ((pattern_len > 1) |
| | | && (pattern_ptr[1] == cmd_ptr[0]) |
| | | && (pattern_ptr[0] == ']') |
| | | && (pattern_ptr[1] == ':')) { |
| | | SKIP_PATTERN(2); // for skip ']' in "]:" |
| | | SKIP_PATTERN(2); /* for skip ']' in "]:" */ |
| | | SKIP_CMD(1); |
| | | brackets--; |
| | | } else if ((pattern_len > 2) |
| | |
| | | && (pattern_ptr[0] == ']') |
| | | && (pattern_ptr[1] == '[') |
| | | && (pattern_ptr[2] == ':')) { |
| | | SKIP_PATTERN(3); // for skip '][' in "][:" |
| | | SKIP_PATTERN(3); /* for skip '][' in "][:" */ |
| | | SKIP_CMD(1); |
| | | //brackets++; |
| | | //brackets--; |
| | | /* brackets++; */ |
| | | /* brackets--; */ |
| | | } else { |
| | | result = FALSE; |
| | | break; |
| | |
| | | } else { |
| | | SKIP_PATTERN(pattern_sep_pos); |
| | | if ((pattern_ptr[0] == ']') && (pattern_ptr[1] == ':')) { |
| | | SKIP_PATTERN(2); // for skip ']' in "]:" , pattern_ptr continue, while cmd_ptr remain unchanged |
| | | SKIP_PATTERN(2); /* for skip ']' in "]:" , pattern_ptr continue, while cmd_ptr remain unchanged */ |
| | | brackets--; |
| | | } else if ((pattern_len > 2) && (pattern_ptr[0] == ']') |
| | | && (pattern_ptr[1] == '[') |
| | | && (pattern_ptr[2] == ':')) { |
| | | SKIP_PATTERN(3); // for skip ']' in "][:" , pattern_ptr continue, while cmd_ptr remain unchanged |
| | | //brackets++; |
| | | //brackets--; |
| | | SKIP_PATTERN(3); /* for skip ']' in "][:" , pattern_ptr continue, while cmd_ptr remain unchanged */ |
| | | /* brackets++; */ |
| | | /* brackets--; */ |
| | | } else { |
| | | result = FALSE; |
| | | break; |
| | |
| | | return NULL; |
| | | } |
| | | |
| | | size_t len = SCPIDEFINE_strnlen(s, n) + 1; // additional '\0' at end |
| | | size_t len = SCPIDEFINE_strnlen(s, n) + 1; /* additional '\0' at end */ |
| | | if (len > heap->count) { |
| | | return NULL; |
| | | } |
| | |
| | | heap->wr += len; |
| | | heap->count -= len; |
| | | |
| | | // ensure '\0' a the end |
| | | /* ensure '\0' a the end */ |
| | | if (heap->wr > 0) { |
| | | heap->data[heap->wr - 1] = '\0'; |
| | | } else { |
| | |
| | | |
| | | #endif |
| | | |
| | | // Floating point to string conversion routines |
| | | // |
| | | // Copyright (C) 2002 Michael Ringgaard. All rights reserved. |
| | | // |
| | | // Redistribution and use in source and binary forms, with or without |
| | | // modification, are permitted provided that the following conditions |
| | | // are met: |
| | | // |
| | | // 1. Redistributions of source code must retain the above copyright |
| | | // notice, this list of conditions and the following disclaimer. |
| | | // 2. Redistributions in binary form must reproduce the above copyright |
| | | // notice, this list of conditions and the following disclaimer in the |
| | | // documentation and/or other materials provided with the distribution. |
| | | // 3. Neither the name of the project nor the names of its contributors |
| | | // may be used to endorse or promote products derived from this software |
| | | // without specific prior written permission. |
| | | // |
| | | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
| | | // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| | | // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| | | // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE |
| | | // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| | | // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| | | // OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| | | // HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| | | // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| | | // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| | | // SUCH DAMAGE. |
| | | /* |
| | | * Floating point to string conversion routines |
| | | * |
| | | * Copyright (C) 2002 Michael Ringgaard. All rights reserved. |
| | | * |
| | | * Redistribution and use in source and binary forms, with or without |
| | | * modification, are permitted provided that the following conditions |
| | | * are met: |
| | | * |
| | | * 1. Redistributions of source code must retain the above copyright |
| | | * notice, this list of conditions and the following disclaimer. |
| | | * 2. Redistributions in binary form must reproduce the above copyright |
| | | * notice, this list of conditions and the following disclaimer in the |
| | | * documentation and/or other materials provided with the distribution. |
| | | * 3. Neither the name of the project nor the names of its contributors |
| | | * may be used to endorse or promote products derived from this software |
| | | * without specific prior written permission. |
| | | * |
| | | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
| | | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| | | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| | | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE |
| | | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| | | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| | | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| | | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| | | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| | | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| | | * SUCH DAMAGE. |
| | | */ |
| | | |
| | | static char *scpi_ecvt(double arg, int ndigits, int *decpt, int *sign, char *buf, size_t bufsize) { |
| | | int r1, r2; |
| | |
| | | |
| | | |
| | | |
| | | // TODO: SCPI_ERROR_INVALID_SEPARATOR |
| | | // TODO: SCPI_ERROR_INVALID_SUFFIX |
| | | // TODO: SCPI_ERROR_SUFFIX_NOT_ALLOWED |
| | | // TODO: SCPI_ERROR_EXECUTION_ERROR |
| | | // TODO: SCPI_ERROR_ILLEGAL_PARAMETER_VALUE |
| | | /* TODO: SCPI_ERROR_INVALID_SEPARATOR |
| | | * TODO: SCPI_ERROR_INVALID_SUFFIX |
| | | * TODO: SCPI_ERROR_SUFFIX_NOT_ALLOWED |
| | | * TODO: SCPI_ERROR_EXECUTION_ERROR |
| | | * TODO: SCPI_ERROR_ILLEGAL_PARAMETER_VALUE |
| | | */ |
| | | |
| | | output_buffer_clear(); |
| | | error_buffer_clear(); |
| | |
| | | static void testSCPI_ParamInt32(void) { |
| | | TEST_ParamInt32("10", TRUE, 10, TRUE, 0); |
| | | TEST_ParamInt32("", FALSE, 0, FALSE, 0); |
| | | TEST_ParamInt32("10.5", TRUE, 10, TRUE, 0); // TODO: should be FALSE, -104 |
| | | TEST_ParamInt32("10.5", TRUE, 10, TRUE, 0); /* TODO: should be FALSE, -104 */ |
| | | TEST_ParamInt32("#B101010", TRUE, 42, TRUE, 0); |
| | | TEST_ParamInt32("#H101010", TRUE, 1052688, TRUE, 0); |
| | | TEST_ParamInt32("#Q10", TRUE, 8, TRUE, 0); |
| | | |
| | | TEST_ParamInt32("", TRUE, 0, FALSE, SCPI_ERROR_MISSING_PARAMETER); // missing parameter |
| | | TEST_ParamInt32("abcd", TRUE, 0, FALSE, SCPI_ERROR_DATA_TYPE_ERROR); // Data type error |
| | | TEST_ParamInt32("", TRUE, 0, FALSE, SCPI_ERROR_MISSING_PARAMETER); /* missing parameter */ |
| | | TEST_ParamInt32("abcd", TRUE, 0, FALSE, SCPI_ERROR_DATA_TYPE_ERROR); /* Data type error */ |
| | | TEST_ParamInt32("10.5V", TRUE, 0, FALSE, SCPI_ERROR_SUFFIX_NOT_ALLOWED); |
| | | TEST_ParamInt32("10V", TRUE, 0, FALSE, SCPI_ERROR_SUFFIX_NOT_ALLOWED); |
| | | |
| | | // test range |
| | | /* test range */ |
| | | TEST_ParamInt32("2147483647", TRUE, 2147483647, TRUE, 0); |
| | | TEST_ParamInt32("-2147483647", TRUE, -2147483647, TRUE, 0); |
| | | } |
| | |
| | | static void testSCPI_ParamUInt32(void) { |
| | | TEST_ParamUInt32("10", TRUE, 10, TRUE, 0); |
| | | TEST_ParamUInt32("", FALSE, 0, FALSE, 0); |
| | | TEST_ParamUInt32("10.5", TRUE, 10, TRUE, 0); // TODO: should be FALSE, -104 |
| | | TEST_ParamUInt32("10.5", TRUE, 10, TRUE, 0); /* TODO: should be FALSE, -104 */ |
| | | TEST_ParamUInt32("#B101010", TRUE, 42, TRUE, 0); |
| | | TEST_ParamUInt32("#H101010", TRUE, 1052688, TRUE, 0); |
| | | TEST_ParamUInt32("#Q10", TRUE, 8, TRUE, 0); |
| | | |
| | | TEST_ParamUInt32("", TRUE, 0, FALSE, SCPI_ERROR_MISSING_PARAMETER); // missing parameter |
| | | TEST_ParamUInt32("abcd", TRUE, 0, FALSE, SCPI_ERROR_DATA_TYPE_ERROR); // Data type error |
| | | TEST_ParamUInt32("", TRUE, 0, FALSE, SCPI_ERROR_MISSING_PARAMETER); /* missing parameter * |
| | | TEST_ParamUInt32("abcd", TRUE, 0, FALSE, SCPI_ERROR_DATA_TYPE_ERROR); /* Data type error */ |
| | | TEST_ParamUInt32("10.5V", TRUE, 0, FALSE, SCPI_ERROR_SUFFIX_NOT_ALLOWED); |
| | | TEST_ParamUInt32("10V", TRUE, 0, FALSE, SCPI_ERROR_SUFFIX_NOT_ALLOWED); |
| | | |
| | | // test range |
| | | /* test range */ |
| | | TEST_ParamUInt32("2147483647", TRUE, 2147483647ULL, TRUE, 0); |
| | | TEST_ParamUInt32("4294967295", TRUE, 4294967295ULL, TRUE, 0); |
| | | } |
| | |
| | | static void testSCPI_ParamInt64(void) { |
| | | TEST_ParamInt64("10", TRUE, 10, TRUE, 0); |
| | | TEST_ParamInt64("", FALSE, 0, FALSE, 0); |
| | | TEST_ParamInt64("10.5", TRUE, 10, TRUE, 0); // TODO: should be FALSE, -104 |
| | | TEST_ParamInt64("10.5", TRUE, 10, TRUE, 0); /* TODO: should be FALSE, -104 */ |
| | | TEST_ParamInt64("#B101010", TRUE, 42, TRUE, 0); |
| | | TEST_ParamInt64("#H101010", TRUE, 1052688, TRUE, 0); |
| | | TEST_ParamInt64("#Q10", TRUE, 8, TRUE, 0); |
| | | |
| | | TEST_ParamInt64("", TRUE, 0, FALSE, SCPI_ERROR_MISSING_PARAMETER); // missing parameter |
| | | TEST_ParamInt64("abcd", TRUE, 0, FALSE, SCPI_ERROR_DATA_TYPE_ERROR); // Data type error |
| | | TEST_ParamInt64("", TRUE, 0, FALSE, SCPI_ERROR_MISSING_PARAMETER); /* missing parameter */ |
| | | TEST_ParamInt64("abcd", TRUE, 0, FALSE, SCPI_ERROR_DATA_TYPE_ERROR); /* Data type error */ |
| | | TEST_ParamInt64("10.5V", TRUE, 0, FALSE, SCPI_ERROR_SUFFIX_NOT_ALLOWED); |
| | | TEST_ParamInt64("10V", TRUE, 0, FALSE, SCPI_ERROR_SUFFIX_NOT_ALLOWED); |
| | | |
| | | // test range |
| | | /* test range */ |
| | | TEST_ParamInt64("2147483647", TRUE, 2147483647LL, TRUE, 0); |
| | | TEST_ParamInt64("-2147483647", TRUE, -2147483647LL, TRUE, 0); |
| | | TEST_ParamInt64("9223372036854775807", TRUE, 9223372036854775807LL, TRUE, 0); |
| | |
| | | static void testSCPI_ParamUInt64(void) { |
| | | TEST_ParamUInt64("10", TRUE, 10, TRUE, 0); |
| | | TEST_ParamUInt64("", FALSE, 0, FALSE, 0); |
| | | TEST_ParamUInt64("10.5", TRUE, 10, TRUE, 0); // TODO: should be FALSE, -104 |
| | | TEST_ParamUInt64("10.5", TRUE, 10, TRUE, 0); /* TODO: should be FALSE, -104 */ |
| | | TEST_ParamUInt64("#B101010", TRUE, 42, TRUE, 0); |
| | | TEST_ParamUInt64("#H101010", TRUE, 1052688, TRUE, 0); |
| | | TEST_ParamUInt64("#Q10", TRUE, 8, TRUE, 0); |
| | | |
| | | TEST_ParamUInt64("", TRUE, 0, FALSE, SCPI_ERROR_MISSING_PARAMETER); // missing parameter |
| | | TEST_ParamUInt64("abcd", TRUE, 0, FALSE, SCPI_ERROR_DATA_TYPE_ERROR); // Data type error |
| | | TEST_ParamUInt64("", TRUE, 0, FALSE, SCPI_ERROR_MISSING_PARAMETER); /* missing parameter */ |
| | | TEST_ParamUInt64("abcd", TRUE, 0, FALSE, SCPI_ERROR_DATA_TYPE_ERROR); /* Data type error */ |
| | | TEST_ParamUInt64("10.5V", TRUE, 0, FALSE, SCPI_ERROR_SUFFIX_NOT_ALLOWED); |
| | | TEST_ParamUInt64("10V", TRUE, 0, FALSE, SCPI_ERROR_SUFFIX_NOT_ALLOWED); |
| | | |
| | | // test range |
| | | /* test range */ |
| | | TEST_ParamUInt64("2147483647", TRUE, 2147483647ULL, TRUE, 0); |
| | | TEST_ParamUInt64("4294967295", TRUE, 4294967295ULL, TRUE, 0); |
| | | TEST_ParamUInt64("9223372036854775807", TRUE, 9223372036854775807ULL, TRUE, 0); |
| | |
| | | TEST_ParamFloat("#Q10", TRUE, 8, TRUE, 0); |
| | | TEST_ParamFloat("#HFFFFFF", TRUE, 0xFFFFFFu, TRUE, 0); |
| | | |
| | | TEST_ParamFloat("", TRUE, 0, FALSE, SCPI_ERROR_MISSING_PARAMETER); // missing parameter |
| | | TEST_ParamFloat("abcd", TRUE, 0, FALSE, SCPI_ERROR_DATA_TYPE_ERROR); // Data type error |
| | | TEST_ParamFloat("", TRUE, 0, FALSE, SCPI_ERROR_MISSING_PARAMETER); /* missing parameter */ |
| | | TEST_ParamFloat("abcd", TRUE, 0, FALSE, SCPI_ERROR_DATA_TYPE_ERROR); /* Data type error */ |
| | | TEST_ParamFloat("10.5V", TRUE, 0, FALSE, SCPI_ERROR_SUFFIX_NOT_ALLOWED); |
| | | TEST_ParamFloat("10V", TRUE, 0, FALSE, SCPI_ERROR_SUFFIX_NOT_ALLOWED); |
| | | } |
| | |
| | | TEST_ParamDouble("#Q10", TRUE, 8, TRUE, 0); |
| | | TEST_ParamDouble("#HFFFFFFFF", TRUE, 0xFFFFFFFFu, TRUE, 0); |
| | | |
| | | TEST_ParamDouble("", TRUE, 0, FALSE, SCPI_ERROR_MISSING_PARAMETER); // missing parameter |
| | | TEST_ParamDouble("abcd", TRUE, 0, FALSE, SCPI_ERROR_DATA_TYPE_ERROR); // Data type error |
| | | TEST_ParamDouble("", TRUE, 0, FALSE, SCPI_ERROR_MISSING_PARAMETER); /* missing parameter */ |
| | | TEST_ParamDouble("abcd", TRUE, 0, FALSE, SCPI_ERROR_DATA_TYPE_ERROR); /* Data type error */ |
| | | TEST_ParamDouble("10.5V", TRUE, 0, FALSE, SCPI_ERROR_SUFFIX_NOT_ALLOWED); |
| | | TEST_ParamDouble("10V", TRUE, 0, FALSE, SCPI_ERROR_SUFFIX_NOT_ALLOWED); |
| | | } |
| | |
| | | |
| | | static void testSCPI_ParamCharacters(void) { |
| | | TEST_ParamCharacters("10", TRUE, "10", TRUE, 0); |
| | | TEST_ParamCharacters(" ABCD", TRUE, "ABCD", TRUE, 0); // TokProgramMnemonic |
| | | TEST_ParamCharacters("\"ABCD\"", TRUE, "ABCD", TRUE, 0); // TokDoubleQuoteProgramData |
| | | TEST_ParamCharacters("\'ABCD\'", TRUE, "ABCD", TRUE, 0); // TokSingleQuoteProgramData |
| | | TEST_ParamCharacters("#204ABCD", TRUE, "ABCD", TRUE, 0); // TokArbitraryBlockProgramData |
| | | TEST_ParamCharacters("#210ABCD", TRUE, "", FALSE, SCPI_ERROR_INVALID_STRING_DATA); // invalid Block Data |
| | | TEST_ParamCharacters(" ABCD", TRUE, "ABCD", TRUE, 0); /* TokProgramMnemonic */ |
| | | TEST_ParamCharacters("\"ABCD\"", TRUE, "ABCD", TRUE, 0); /* TokDoubleQuoteProgramData */ |
| | | TEST_ParamCharacters("\'ABCD\'", TRUE, "ABCD", TRUE, 0); /* TokSingleQuoteProgramData */ |
| | | TEST_ParamCharacters("#204ABCD", TRUE, "ABCD", TRUE, 0); /* TokArbitraryBlockProgramData */ |
| | | TEST_ParamCharacters("#210ABCD", TRUE, "", FALSE, SCPI_ERROR_INVALID_STRING_DATA); /* invalid Block Data */ |
| | | } |
| | | |
| | | |
| | |
| | | TEST_Result(Int32, 10, "10"); |
| | | TEST_Result(Int32, -10, "-10"); |
| | | TEST_Result(Int32, 2147483647L, "2147483647"); |
| | | //TEST_Result(Int32, -2147483648L, "-2147483648"); // bug in GCC |
| | | /* TEST_Result(Int32, -2147483648L, "-2147483648"); bug in GCC */ |
| | | TEST_Result(Int32, -2147483647L, "-2147483647"); |
| | | } |
| | | |
| | |
| | | TEST_Result(UInt32, 10, "10"); |
| | | TEST_Result(UInt32, -10, "4294967286"); |
| | | TEST_Result(UInt32, 2147483647L, "2147483647"); |
| | | //TEST_Result(UInt32, -2147483648L, "2147483648"); // bug in GCC |
| | | /* TEST_Result(UInt32, -2147483648L, "2147483648"); bug in GCC */ |
| | | TEST_Result(UInt32, -2147483647L, "2147483649"); |
| | | TEST_Result(UInt32, 4294967295UL, "4294967295"); |
| | | |
| | |
| | | TEST_Result(Int64, 32767, "32767"); |
| | | TEST_Result(Int64, -32768, "-32768"); |
| | | TEST_Result(Int64, 2147483647L, "2147483647"); |
| | | //TEST_Result(Int64, -2147483648, "-2147483648"); // bug in gcc |
| | | /* TEST_Result(Int64, -2147483648, "-2147483648"); bug in gcc */ |
| | | TEST_Result(Int64, -2147483647L, "-2147483647"); |
| | | TEST_Result(Int64, 9223372036854775807LL, "9223372036854775807"); |
| | | //TEST_Result(Int64, -9223372036854775808LL, "-9223372036854775808"); bug in GCC |
| | | /* TEST_Result(Int64, -9223372036854775808LL, "-9223372036854775808"); bug in GCC */ |
| | | TEST_Result(Int64, -9223372036854775807LL, "-9223372036854775807"); |
| | | } |
| | | |
| | |
| | | TEST_Result(UInt64, 32767, "32767"); |
| | | TEST_Result(UInt64, -32768, "18446744073709518848"); |
| | | TEST_Result(UInt64, 2147483647L, "2147483647"); |
| | | //TEST_Result(UInt64, -2147483648L, "18446744071562067968"); // bug in GCC |
| | | /* TEST_Result(UInt64, -2147483648L, "18446744071562067968"); bug in GCC */ |
| | | TEST_Result(UInt64, -2147483647L, "18446744071562067969"); |
| | | TEST_Result(UInt64, 9223372036854775807LL, "9223372036854775807"); |
| | | //TEST_Result(Int64, -9223372036854775808LL, "9223372036854775808"); bug in GCC |
| | | /* TEST_Result(Int64, -9223372036854775808LL, "9223372036854775808"); bug in GCC */ |
| | | TEST_Result(UInt64, -9223372036854775807LL, "9223372036854775809"); |
| | | TEST_Result(UInt64, 18446744073709551615ULL, "18446744073709551615"); |
| | | |
| | |
| | | TEST_Result(Float, 32767, "32767"); |
| | | TEST_Result(Float, -32768, "-32768"); |
| | | TEST_Result(Float, 2147483647L, "2.14748e+09"); |
| | | //TEST_Result(Float, -2147483648, "-2.14748e+09"); // bug in GCC |
| | | /* TEST_Result(Float, -2147483648, "-2.14748e+09"); bug in GCC */ |
| | | TEST_Result(Float, -2147483647L, "-2.14748e+09"); |
| | | TEST_Result(Float, 9223372036854775807LL, "9.22337e+18"); |
| | | TEST_Result(Float, -9223372036854775807LL, "-9.22337e+18"); |
| | |
| | | TEST_Result(Double, 32767, "32767"); |
| | | TEST_Result(Double, -32768, "-32768"); |
| | | TEST_Result(Double, 2147483647, "2147483647"); |
| | | //TEST_Result(Double, -2147483648, "-2147483648"); // bug in GCC |
| | | /* TEST_Result(Double, -2147483648, "-2147483648"); bug in GCC */ |
| | | TEST_Result(Double, -2147483647, "-2147483647"); |
| | | TEST_Result(Double, 9223372036854775807LL, "9.22337203685478e+18"); |
| | | TEST_Result(Double, -9223372036854775807LL, "-9.22337203685478e+18"); |
| | |
| | | char ref[max]; |
| | | size_t len; |
| | | |
| | | // test signed conversion to decimal numbers |
| | | /* test signed conversion to decimal numbers */ |
| | | for (i = 0; i < N; i++) { |
| | | len = SCPI_Int32ToStr(val[i], str, max); |
| | | snprintf(ref, max, "%"PRIi32, val[i]); |
| | |
| | | |
| | | int16_t val16[] = {0, 1, -1, INT16_MIN, INT16_MAX, 0x0123, 0x4567, 0x89ab, 0xcdef}; |
| | | int N16 = sizeof (val16) / sizeof (int16_t); |
| | | // test signed conversion to decimal numbers |
| | | /* test signed conversion to decimal numbers */ |
| | | for (i = 0; i < N16; i++) { |
| | | len = SCPI_Int32ToStr((int32_t) val16[i], str, max); |
| | | snprintf(ref, max, "%"PRIi16, val16[i]); |
| | |
| | | char ref[max]; |
| | | size_t len; |
| | | |
| | | // test conversion to decimal numbers |
| | | /* test conversion to decimal numbers */ |
| | | for (i = 0; i < N; i++) { |
| | | len = SCPI_UInt32ToStrBase(val[i], str, max, 10); |
| | | snprintf(ref, max, "%"PRIu32, val[i]); |
| | |
| | | CU_ASSERT_STRING_EQUAL(str, ref); |
| | | } |
| | | |
| | | // test conversion to hexadecimal numbers |
| | | /* test conversion to hexadecimal numbers */ |
| | | for (i = 0; i < N; i++) { |
| | | len = SCPI_UInt32ToStrBase(val[i], str, max, 16); |
| | | snprintf(ref, max, "%"PRIX32, val[i]); |
| | |
| | | CU_ASSERT_STRING_EQUAL(str, ref); |
| | | } |
| | | |
| | | // test conversion to octal numbers |
| | | /* test conversion to octal numbers */ |
| | | for (i = 0; i < N; i++) { |
| | | len = SCPI_UInt32ToStrBase(val[i], str, max, 8); |
| | | snprintf(ref, max, "%"PRIo32, val[i]); |
| | |
| | | CU_ASSERT_STRING_EQUAL(str, ref); |
| | | } |
| | | |
| | | // test conversion to binary numbers |
| | | /* test conversion to binary numbers */ |
| | | len = SCPI_UInt32ToStrBase(0, str, max, 2); |
| | | CU_ASSERT(len == 1); |
| | | CU_ASSERT_STRING_EQUAL(str, "0"); |
| | |
| | | char ref[max]; |
| | | size_t len; |
| | | |
| | | // test conversion to decimal numbers |
| | | /* test conversion to decimal numbers */ |
| | | for (i = 0; i < N; i++) { |
| | | len = SCPI_Int64ToStr(val[i], str, max); |
| | | snprintf(ref, max, "%"PRIi64, val[i]); |
| | |
| | | char ref[max]; |
| | | size_t len; |
| | | |
| | | // test conversion to decimal numbers |
| | | /* test conversion to decimal numbers */ |
| | | for (i = 0; i < N; i++) { |
| | | len = SCPI_UInt64ToStrBase(val[i], str, max, 10); |
| | | snprintf(ref, max, "%"PRIu64, val[i]); |
| | |
| | | CU_ASSERT_STRING_EQUAL(str, ref); |
| | | } |
| | | |
| | | // test conversion to hexadecimal numbers |
| | | /* test conversion to hexadecimal numbers */ |
| | | for (i = 0; i < N; i++) { |
| | | len = SCPI_UInt64ToStrBase(val[i], str, max, 16); |
| | | snprintf(ref, max, "%"PRIX64, val[i]); |
| | |
| | | CU_ASSERT_STRING_EQUAL(str, ref); |
| | | } |
| | | |
| | | // test conversion to octal numbers |
| | | /* test conversion to octal numbers */ |
| | | for (i = 0; i < N; i++) { |
| | | len = SCPI_UInt64ToStrBase(val[i], str, max, 8); |
| | | snprintf(ref, max, "%"PRIo64, val[i]); |
| | |
| | | CU_ASSERT_STRING_EQUAL(str, ref); |
| | | } |
| | | |
| | | // test conversion to binary numbers |
| | | /* test conversion to binary numbers */ |
| | | len = SCPI_UInt64ToStrBase(0, str, max, 2); |
| | | CU_ASSERT(len == 1); |
| | | CU_ASSERT_STRING_EQUAL(str, "0"); |
| | |
| | | CU_ASSERT_EQUAL(result, r); \ |
| | | } while(0) \ |
| | | |
| | | // TODO: extend to corner cases, use scanf as reference |
| | | /* TODO: extend to corner cases, use scanf as reference */ |
| | | TEST_STR_TO_INT32("", 0, 0, 10); |
| | | TEST_STR_TO_INT32("1", 1, 1, 10); |
| | | TEST_STR_TO_INT32("10", 2, 10, 10); |
| | |
| | | TEST_STR_TO_INT32("MHz", 0, 0, 10); |
| | | TEST_STR_TO_INT32("1.4", 1, 1, 10); |
| | | TEST_STR_TO_INT32(" 1", 2, 1, 10); |
| | | TEST_STR_TO_INT32(" +100", 5, 100, 10); // space and + |
| | | TEST_STR_TO_INT32("FF", 2, 255, 16); // hexadecimal FF |
| | | TEST_STR_TO_INT32("77", 2, 63, 8); // octal 77 |
| | | TEST_STR_TO_INT32("18", 1, 1, 8); // octal 1, 8 is ignored |
| | | TEST_STR_TO_INT32(" +100", 5, 100, 10); /* space and + */ |
| | | TEST_STR_TO_INT32("FF", 2, 255, 16); /* hexadecimal FF */ |
| | | TEST_STR_TO_INT32("77", 2, 63, 8); /* octal 77 */ |
| | | TEST_STR_TO_INT32("18", 1, 1, 8); /* octal 1, 8 is ignored */ |
| | | } |
| | | |
| | | static void test_strBaseToUInt32() { |
| | |
| | | CU_ASSERT_EQUAL(result, r); \ |
| | | } while(0) \ |
| | | |
| | | // TODO: extend to corner cases, use scanf as reference |
| | | /* TODO: extend to corner cases, use scanf as reference */ |
| | | TEST_STR_TO_UINT32("", 0, 0, 10); |
| | | TEST_STR_TO_UINT32("1", 1, 1, 10); |
| | | TEST_STR_TO_UINT32("10", 2, 10, 10); |
| | |
| | | TEST_STR_TO_UINT32("MHz", 0, 0, 10); |
| | | TEST_STR_TO_UINT32("1.4", 1, 1, 10); |
| | | TEST_STR_TO_UINT32(" 1", 2, 1, 10); |
| | | TEST_STR_TO_UINT32(" +100", 5, 100, 10); // space and + |
| | | TEST_STR_TO_UINT32("FF", 2, 255, 16); // hexadecimal FF |
| | | TEST_STR_TO_UINT32("77", 2, 63, 8); // octal 77 |
| | | TEST_STR_TO_UINT32("18", 1, 1, 8); // octal 1, 8 is ignored |
| | | TEST_STR_TO_UINT32("FFFFFFFF", 8, 0xffffffffu, 16); // octal 1, 8 is ignored |
| | | TEST_STR_TO_UINT32(" +100", 5, 100, 10); /* space and + */ |
| | | TEST_STR_TO_UINT32("FF", 2, 255, 16); /* hexadecimal FF */ |
| | | TEST_STR_TO_UINT32("77", 2, 63, 8); /* octal 77 */ |
| | | TEST_STR_TO_UINT32("18", 1, 1, 8); /* octal 1, 8 is ignored */ |
| | | TEST_STR_TO_UINT32("FFFFFFFF", 8, 0xffffffffu, 16); /* octal 1, 8 is ignored */ |
| | | } |
| | | |
| | | static void test_strBaseToInt64() { |
| | |
| | | CU_ASSERT_EQUAL(result, r); \ |
| | | } while(0) \ |
| | | |
| | | // TODO: extend to corner cases, use scanf as reference |
| | | /* TODO: extend to corner cases, use scanf as reference */ |
| | | TEST_STR_TO_INT64("", 0, 0, 10); |
| | | TEST_STR_TO_INT64("1", 1, 1, 10); |
| | | TEST_STR_TO_INT64("10", 2, 10, 10); |
| | |
| | | TEST_STR_TO_INT64("MHz", 0, 0, 10); |
| | | TEST_STR_TO_INT64("1.4", 1, 1, 10); |
| | | TEST_STR_TO_INT64(" 1", 2, 1, 10); |
| | | TEST_STR_TO_INT64(" +100", 5, 100, 10); // space and + |
| | | TEST_STR_TO_INT64("FF", 2, 255, 16); // hexadecimal FF |
| | | TEST_STR_TO_INT64("77", 2, 63, 8); // octal 77 |
| | | TEST_STR_TO_INT64("18", 1, 1, 8); // octal 1, 8 is ignored |
| | | TEST_STR_TO_INT64(" +100", 5, 100, 10); /* space and + */ |
| | | TEST_STR_TO_INT64("FF", 2, 255, 16); /* hexadecimal FF */ |
| | | TEST_STR_TO_INT64("77", 2, 63, 8); /* octal 77 */ |
| | | TEST_STR_TO_INT64("18", 1, 1, 8); /* octal 1, 8 is ignored */ |
| | | } |
| | | |
| | | static void test_strBaseToUInt64() { |
| | |
| | | CU_ASSERT_EQUAL(result, r); \ |
| | | } while(0) \ |
| | | |
| | | // TODO: extend to corner cases, use scanf as reference |
| | | /* TODO: extend to corner cases, use scanf as reference */ |
| | | TEST_STR_TO_UINT64("", 0, 0, 10); |
| | | TEST_STR_TO_UINT64("1", 1, 1, 10); |
| | | TEST_STR_TO_UINT64("10", 2, 10, 10); |
| | |
| | | TEST_STR_TO_UINT64("MHz", 0, 0, 10); |
| | | TEST_STR_TO_UINT64("1.4", 1, 1, 10); |
| | | TEST_STR_TO_UINT64(" 1", 2, 1, 10); |
| | | TEST_STR_TO_UINT64(" +100", 5, 100, 10); // space and + |
| | | TEST_STR_TO_UINT64("FF", 2, 255, 16); // hexadecimal FF |
| | | TEST_STR_TO_UINT64("77", 2, 63, 8); // octal 77 |
| | | TEST_STR_TO_UINT64("18", 1, 1, 8); // octal 1, 8 is ignored |
| | | TEST_STR_TO_UINT64("FFFFFFFF", 8, 0xffffffffu, 16); // octal 1, 8 is ignored |
| | | TEST_STR_TO_UINT64(" +100", 5, 100, 10); /* space and + */ |
| | | TEST_STR_TO_UINT64("FF", 2, 255, 16); /* hexadecimal FF */ |
| | | TEST_STR_TO_UINT64("77", 2, 63, 8); /* octal 77 */ |
| | | TEST_STR_TO_UINT64("18", 1, 1, 8); /* octal 1, 8 is ignored */ |
| | | TEST_STR_TO_UINT64("FFFFFFFF", 8, 0xffffffffu, 16); /* octal 1, 8 is ignored */ |
| | | } |
| | | |
| | | static void test_strToDouble() { |
| | |
| | | TEST_MATCH_COMMAND("A?", "A?", TRUE); |
| | | TEST_MATCH_COMMAND("A", "A?", FALSE); |
| | | TEST_MATCH_COMMAND("A?", "A", FALSE); |
| | | TEST_MATCH_COMMAND("[:ABcc]:AACddd", ":ab:aac", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("[:ABcc]:AACddd", "aac", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("[:ABcc]:AACddd", "aac?", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("[:ABcc]:AACddd?", ":ab:aac?", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("[:ABcc]:AACddd?", "aac?", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("[:ABcc]:AACddd?", "aac", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd]:CDEFGeeeee", "ab:bcc:cdefg", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd]:CDEFGeeeee", "ab:cdefg", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd]:CDEFGeeeee", "ab:cdefg?", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd]:CDEFGeeeee?", "ab:bcc:cdefg?", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd]:CDEFGeeeee?", "ab:cdefg?", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd]:CDEFGeeeee?", "ab:cdefg", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc:BCCdddd[:CDEFGeeeee]", "ab:bcc:cdefg", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc:BCCdddd[:CDEFGeeeee]", "ab:bcc", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc:BCCdddd[:CDEFGeeeee]", "ab:bcc?", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc:BCCdddd[:CDEFGeeeee]?", "ab:bcc:cdefg?", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc:BCCdddd[:CDEFGeeeee]?", "ab:bcc?", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc:BCCdddd[:CDEFGeeeee]?", "ab:bcc", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("[:ABcc]:AACddd", ":ab:aac", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("[:ABcc]:AACddd", "aac", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("[:ABcc]:AACddd", "aac?", FALSE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("[:ABcc]:AACddd?", ":ab:aac?", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("[:ABcc]:AACddd?", "aac?", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("[:ABcc]:AACddd?", "aac", FALSE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd]:CDEFGeeeee", "ab:bcc:cdefg", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd]:CDEFGeeeee", "ab:cdefg", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd]:CDEFGeeeee", "ab:cdefg?", FALSE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd]:CDEFGeeeee?", "ab:bcc:cdefg?", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd]:CDEFGeeeee?", "ab:cdefg?", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd]:CDEFGeeeee?", "ab:cdefg", FALSE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc:BCCdddd[:CDEFGeeeee]", "ab:bcc:cdefg", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc:BCCdddd[:CDEFGeeeee]", "ab:bcc", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc:BCCdddd[:CDEFGeeeee]", "ab:bcc?", FALSE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc:BCCdddd[:CDEFGeeeee]?", "ab:bcc:cdefg?", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc:BCCdddd[:CDEFGeeeee]?", "ab:bcc?", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc:BCCdddd[:CDEFGeeeee]?", "ab:bcc", FALSE); /* test optional keyword */ |
| | | |
| | | TEST_MATCH_COMMAND("[:ABcc]:BCCdddd[:CDEFGeeeee]", "ab:bcc:cdefg", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("[:ABcc]:BCCdddd[:CDEFGeeeee]", "ab:bcc", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("[:ABcc]:BCCdddd[:CDEFGeeeee]", "bcc:cdefg", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("[:ABcc]:BCCdddd[:CDEFGeeeee]", "ab:bcc?", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("[:ABcc]:BCCdddd[:CDEFGeeeee]", "bcc:cdefg?", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("[:ABcc]:BCCdddd[:CDEFGeeeee]?", "ab:bcc:cdefg?", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("[:ABcc]:BCCdddd[:CDEFGeeeee]?", "ab:bcc?", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("[:ABcc]:BCCdddd[:CDEFGeeeee]?", "bcc:cdefg?", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("[:ABcc]:BCCdddd[:CDEFGeeeee]?", "ab:bcc", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("[:ABcc]:BCCdddd[:CDEFGeeeee]?", "bcc:cdefg", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("[:ABcc]:BCCdddd[:CDEFGeeeee]", "ab:bcc:cdefg", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("[:ABcc]:BCCdddd[:CDEFGeeeee]", "ab:bcc", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("[:ABcc]:BCCdddd[:CDEFGeeeee]", "bcc:cdefg", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("[:ABcc]:BCCdddd[:CDEFGeeeee]", "ab:bcc?", FALSE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("[:ABcc]:BCCdddd[:CDEFGeeeee]", "bcc:cdefg?", FALSE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("[:ABcc]:BCCdddd[:CDEFGeeeee]?", "ab:bcc:cdefg?", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("[:ABcc]:BCCdddd[:CDEFGeeeee]?", "ab:bcc?", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("[:ABcc]:BCCdddd[:CDEFGeeeee]?", "bcc:cdefg?", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("[:ABcc]:BCCdddd[:CDEFGeeeee]?", "ab:bcc", FALSE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("[:ABcc]:BCCdddd[:CDEFGeeeee]?", "bcc:cdefg", FALSE); /* test optional keyword */ |
| | | |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee]", "ab:bcc:cdefg", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee]", "ab:bcc", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee]", "ab:cdefg", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee]", "ab:bcc?", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee]", "ab:cdefg?", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee]?", "ab:bcc:cdefg?", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee]?", "ab:bcc?", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee]?", "ab:cdefg?", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee]?", "ab:bcc", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee]?", "ab:cdefg", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee]", "ab:bcc:cdefg", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee]", "ab:bcc", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee]", "ab:cdefg", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee]", "ab:bcc?", FALSE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee]", "ab:cdefg?", FALSE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee]?", "ab:bcc:cdefg?", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee]?", "ab:bcc?", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee]?", "ab:cdefg?", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee]?", "ab:bcc", FALSE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee]?", "ab:cdefg", FALSE); /* test optional keyword */ |
| | | |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:bcc:cdefg:defffffffff", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:bcc:cdefg:deffffffffffffffffffff", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:bcc:cdefg:de", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:bcc:cdefg", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:bcc:defffffffff", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:cdefg:defffffffff", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:bcc", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:cdefg", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:defffffffff", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:bcc:cdefg?", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:bcc:defffffffff?", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:cdefg:defffffffff?", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:bcc?", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:cdefg?", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:defffffffff?", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab?", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:bcc:cdefg:defffffffff", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:bcc:cdefg:deffffffffffffffffffff", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:bcc:cdefg:de", FALSE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:bcc:cdefg", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:bcc:defffffffff", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:cdefg:defffffffff", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:bcc", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:cdefg", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:defffffffff", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:bcc:cdefg?", FALSE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:bcc:defffffffff?", FALSE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:cdefg:defffffffff?", FALSE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:bcc?", FALSE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:cdefg?", FALSE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab:defffffffff?", FALSE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]", "ab?", FALSE); /* test optional keyword */ |
| | | |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:bcc:cdefg:defffffffff?", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:bcc:cdefg?", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:bcc:defffffffff?", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:cdefg:defffffffff?", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:bcc?", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:cdefg?", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:defffffffff?", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab?", TRUE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:bcc:cdefg", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:bcc:defffffffff", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:cdefg:defffffffff", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:bcc", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:cdefg", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:defffffffff", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab", FALSE); // test optional keyword |
| | | TEST_MATCH_COMMAND("*IDN?", "idn", FALSE); // common command |
| | | TEST_MATCH_COMMAND("*IDN?", "idn?", FALSE); // common command |
| | | TEST_MATCH_COMMAND("*IDN?", "*idn", FALSE); // common command |
| | | TEST_MATCH_COMMAND("*IDN?", "*idn?", TRUE); // common command |
| | | TEST_MATCH_COMMAND("*IDN?", ":idn", FALSE); // common command |
| | | TEST_MATCH_COMMAND("*IDN?", ":idn?", FALSE); // common command |
| | | TEST_MATCH_COMMAND("*IDN?", ":*idn", FALSE); // common command |
| | | TEST_MATCH_COMMAND("*IDN?", ":*idn?", FALSE); // common command |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:bcc:cdefg:defffffffff?", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:bcc:cdefg?", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:bcc:defffffffff?", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:cdefg:defffffffff?", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:bcc?", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:cdefg?", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:defffffffff?", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab?", TRUE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:bcc:cdefg", FALSE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:bcc:defffffffff", FALSE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:cdefg:defffffffff", FALSE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:bcc", FALSE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:cdefg", FALSE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab:defffffffff", FALSE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("ABcc[:BCCdddd][:CDEFGeeeee][:DEFFFFFFFFFfffffffffff]?", "ab", FALSE); /* test optional keyword */ |
| | | TEST_MATCH_COMMAND("*IDN?", "idn", FALSE); /* common command */ |
| | | TEST_MATCH_COMMAND("*IDN?", "idn?", FALSE); /* common command */ |
| | | TEST_MATCH_COMMAND("*IDN?", "*idn", FALSE); /* common command */ |
| | | TEST_MATCH_COMMAND("*IDN?", "*idn?", TRUE); /* common command */ |
| | | TEST_MATCH_COMMAND("*IDN?", ":idn", FALSE); /* common command */ |
| | | TEST_MATCH_COMMAND("*IDN?", ":idn?", FALSE); /* common command */ |
| | | TEST_MATCH_COMMAND("*IDN?", ":*idn", FALSE); /* common command */ |
| | | TEST_MATCH_COMMAND("*IDN?", ":*idn?", FALSE); /* common command */ |
| | | |
| | | TEST_MATCH_COMMAND("MEASure[:SCALar]:CURRent[:DC]?", ":MEAS?", FALSE); |
| | | TEST_MATCH_COMMAND("MEASure[:SCALar]:CURRent[:DC]?", "MEAS?", FALSE); |
| | |
| | | TEST_MATCH_COMMAND("MEASure[:SCALar]:CURRent[:DC]", ":MEAS:CURR:DC", TRUE); |
| | | TEST_MATCH_COMMAND("MEASure[:SCALar]:CURRent[:DC]", "MEAS:CURR:DC", TRUE); |
| | | |
| | | TEST_MATCH_COMMAND("ABCdef#", "abc", TRUE); // test numeric parameter |
| | | TEST_MATCH_COMMAND("ABCdef#", "abc1324", TRUE); // test numeric parameter |
| | | TEST_MATCH_COMMAND("ABCdef#", "abcDef1324", TRUE); // test numeric parameter |
| | | TEST_MATCH_COMMAND("ABCdef#", "abcDef124b", FALSE); // test numeric parameter |
| | | TEST_MATCH_COMMAND("ABCdef#", "abc", TRUE); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND("ABCdef#", "abc1324", TRUE); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND("ABCdef#", "abcDef1324", TRUE); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND("ABCdef#", "abcDef124b", FALSE); /* test numeric parameter */ |
| | | |
| | | TEST_MATCH_COMMAND("OUTPut#:MODulation#:FM#", "abc", FALSE); // test numeric parameter |
| | | TEST_MATCH_COMMAND("OUTPut#:MODulation#:FM#", "outp1:mod10:fm", TRUE); // test numeric parameter |
| | | TEST_MATCH_COMMAND("OUTPut#:MODulation#:FM#", "output1:mod10:fm", TRUE); // test numeric parameter |
| | | TEST_MATCH_COMMAND("OUTPut#:MODulation#:FM#", "outp1:modulation:fm5", TRUE); // test numeric parameter |
| | | TEST_MATCH_COMMAND("OUTPut#:MODulation#:FM#", "output:mod:fm", TRUE); // test numeric parameter |
| | | TEST_MATCH_COMMAND("OUTPut#:MODulation#:FM#", "outp1:mod10a:fm", FALSE); // test numeric parameter |
| | | TEST_MATCH_COMMAND("OUTPut#[:MODulation#]:FM#", "outp1:fm", TRUE); // test numeric parameter |
| | | TEST_MATCH_COMMAND("OUTPut#[:MODulation#]:FM#", "outp1:mod10:fm", TRUE); // test numeric parameter |
| | | TEST_MATCH_COMMAND("OUTPut#[:MODulation#]:FM#", "outp1:fm2", TRUE); // test numeric parameter |
| | | TEST_MATCH_COMMAND("OUTPut#[:MODulation#]:FM#", "output:fm", TRUE); // test numeric parameter |
| | | TEST_MATCH_COMMAND("OUTPut#:MODulation#:FM#", "abc", FALSE); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND("OUTPut#:MODulation#:FM#", "outp1:mod10:fm", TRUE); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND("OUTPut#:MODulation#:FM#", "output1:mod10:fm", TRUE); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND("OUTPut#:MODulation#:FM#", "outp1:modulation:fm5", TRUE); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND("OUTPut#:MODulation#:FM#", "output:mod:fm", TRUE); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND("OUTPut#:MODulation#:FM#", "outp1:mod10a:fm", FALSE); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND("OUTPut#[:MODulation#]:FM#", "outp1:fm", TRUE); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND("OUTPut#[:MODulation#]:FM#", "outp1:mod10:fm", TRUE); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND("OUTPut#[:MODulation#]:FM#", "outp1:fm2", TRUE); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND("OUTPut#[:MODulation#]:FM#", "output:fm", TRUE); /* test numeric parameter */ |
| | | |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM#", "outp3:mod10:fm", TRUE, (3, 10, -1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM#", "output3:mod10:fm", TRUE, (3, 10, -1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM#", "outp30:modulation:fm5", TRUE, (30, -1, 5)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM#", "output:mod:fm", TRUE, (-1, -1, -1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM#", "outp3:fm", TRUE, (3, -1, -1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM#", "outp3:mod10:fm", TRUE, (3, 10, -1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM#", "outp3:fm2", TRUE, (3, -1, 2)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM#", "output:fm", TRUE, (-1, -1, -1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM#", "outp3:mod10:fm", TRUE, (3, 10, -1)); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM#", "output3:mod10:fm", TRUE, (3, 10, -1)); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM#", "outp30:modulation:fm5", TRUE, (30, -1, 5)); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM#", "output:mod:fm", TRUE, (-1, -1, -1)); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM#", "outp3:fm", TRUE, (3, -1, -1)); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM#", "outp3:mod10:fm", TRUE, (3, 10, -1)); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM#", "outp3:fm2", TRUE, (3, -1, 2)); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM#", "output:fm", TRUE, (-1, -1, -1)); /* test numeric parameter */ |
| | | |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation:FM#", "outp3:mod:fm", TRUE, (3, -1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation:FM#", "output3:mod:fm", TRUE, (3, -1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation:FM#", "outp30:modulation:fm5", TRUE, (30, 5)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation:FM#", "output:mod:fm", TRUE, (-1, -1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation]:FM#", "outp3:fm", TRUE, (3, -1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation]:FM#", "outp3:mod:fm", TRUE, (3, -1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation]:FM#", "outp3:fm2", TRUE, (3, 2)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation]:FM#", "output:fm", TRUE, (-1, -1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation:FM#", "outp3:mod:fm", TRUE, (3, -1)); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation:FM#", "output3:mod:fm", TRUE, (3, -1)); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation:FM#", "outp30:modulation:fm5", TRUE, (30, 5)); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation:FM#", "output:mod:fm", TRUE, (-1, -1)); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation]:FM#", "outp3:fm", TRUE, (3, -1)); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation]:FM#", "outp3:mod:fm", TRUE, (3, -1)); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation]:FM#", "outp3:fm2", TRUE, (3, 2)); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation]:FM#", "output:fm", TRUE, (-1, -1)); /* test numeric parameter */ |
| | | |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM", "outp3:mod10:fm", TRUE, (3, 10)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM", "output3:mod10:fm", TRUE, (3, 10)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM", "outp30:modulation:fm", TRUE, (30, -1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM", "output:mod:fm", TRUE, (-1, -1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM", "outp3:fm", TRUE, (3, -1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM", "outp3:mod10:fm", TRUE, (3, 10)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM", "outp3:fm", TRUE, (3, -1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM", "output:fm", TRUE, (-1, -1)); // test numeric parameter |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM", "outp3:mod10:fm", TRUE, (3, 10)); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM", "output3:mod10:fm", TRUE, (3, 10)); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM", "outp30:modulation:fm", TRUE, (30, -1)); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND2("OUTPut#:MODulation#:FM", "output:mod:fm", TRUE, (-1, -1)); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM", "outp3:fm", TRUE, (3, -1)); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM", "outp3:mod10:fm", TRUE, (3, 10)); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM", "outp3:fm", TRUE, (3, -1)); /* test numeric parameter */ |
| | | TEST_MATCH_COMMAND2("OUTPut#[:MODulation#]:FM", "output:fm", TRUE, (-1, -1)); /* test numeric parameter */ |
| | | } |
| | | |
| | | static void test_composeCompoundCommand(void) { |