| | |
| | | */ |
| | | static size_t writeData(scpi_t * context, const char * data, size_t len) { |
| | | if ((len > 0) && (data != NULL)) { |
| | | return context->interface->write(context, data, len); |
| | | return 0; |
| | | // return context->interface->write(context, data, len); |
| | | } else { |
| | | return 0; |
| | | } |
| | |
| | | |
| | | //负命令回调的执行、参数处理和错误管理 |
| | | static scpi_bool_t processCommand(scpi_t * context) { |
| | | //这个地方修改为 读comdlist->pattern |
| | | const scpi_command_t * cmd = context->param_list.cmd; |
| | | //const scpi_command_t * cmd = context->cmdlist->pattern; |
| | | lex_state_t * state = &context->param_list.lex_state; |
| | | scpi_bool_t result = TRUE; |
| | | // 先检测是否为查询命令(以?结尾) |
| | |
| | | * @param context |
| | | * @result TRUE if context->paramlist is filled with correct values |
| | | */ |
| | | static scpi_bool_t findCommandHeader(scpi_t * context, const char * header, int len) { |
| | | int32_t i; |
| | | const scpi_command_t * cmd; |
| | | scpi_bool_t findCommandHeader(scpi_t * context, const char * header, int len) |
| | | { |
| | | |
| | | for (i = 0; context->cmdlist[i].pattern != NULL; i++) { |
| | | int32_t i; |
| | | const scpi_command_t * cmd = NULL; |
| | | for (i = 0; i<context->cmdlistSize; i++) { |
| | | cmd = &context->cmdlist[i]; |
| | | if (matchCommand(cmd->pattern, header, len, NULL, 0, 0)) { |
| | | context->param_list.cmd = cmd; |
| | | |
| | | bool result =test_match(cmd->pattern, header); |
| | | if(result) |
| | | { |
| | | context->param_list.cmd = &context->cmdlist[i]; |
| | | return TRUE; |
| | | } |
| | | // if (matchCommand(cmd->pattern, header, len, NULL, 0, 0)) { |
| | | // context->param_list.cmd = cmd; |
| | | // return TRUE; |
| | | // } |
| | | } |
| | | context->SCPIerror = RETURN_NotFind; |
| | | return FALSE; |
| | | } |
| | | |
| | |
| | | |
| | | if (state->programHeader.type == SCPI_TOKEN_INVALID) { |
| | | SCPI_ErrorPush(context, SCPI_ERROR_INVALID_CHARACTER); |
| | | context->SCPIerror = RETURN_IllegalCommand; |
| | | result = FALSE; |
| | | } |
| | | else if (state->programHeader.len > 0) |
| | |
| | | size_t r2 = r; |
| | | while (r2 > 0 && (data[r2 - 1] == '\r' || data[r2 - 1] == '\n')) r2--; |
| | | SCPI_ErrorPushEx(context, SCPI_ERROR_UNDEFINED_HEADER, data, r2); |
| | | context->SCPIerror = RETURN_UnDefine; |
| | | result = FALSE; |
| | | } |
| | | } |
| | |
| | | context->buffer.data = input_buffer; |
| | | context->buffer.length = input_buffer_length; |
| | | context->buffer.position = 0; |
| | | |
| | | |
| | | SCPI_ErrorInit(context, error_queue_data, error_queue_size); |
| | | } |
| | | |
| | |
| | | context->buffer.position = 0; |
| | | context->buffer.data[context->buffer.position] = 0; |
| | | SCPI_ErrorPush(context, SCPI_ERROR_INPUT_BUFFER_OVERRUN); |
| | | return FALSE; |
| | | context->SCPIerror = RETURN_LengthOverFlow; |
| | | return result; |
| | | } |
| | | memcpy(&context->buffer.data[context->buffer.position], data, len); |
| | | context->buffer.position += len; |
| | |
| | | return result; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * Read signed/unsigned 32 bit integer parameter |
| | | * @param context |
| | |
| | | */ |
| | | //识别完整的SCPI命令 |
| | | int scpiParser_detectProgramMessageUnit(scpi_parser_state_t * state, char * buffer, int len) { |
| | | lex_state_t lex_state; |
| | | scpi_token_t tmp; |
| | | lex_state_t lex_state = {}; |
| | | scpi_token_t tmp = {}; |
| | | int result = 0; |
| | | // 初始化词法分析 |
| | | lex_state.buffer = lex_state.pos = buffer; |