process_data.h 5.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #ifndef SCPI_CORE_STATE__PROCESSDATA
  2. #define SCPI_CORE_STATE__PROCESSDATA
  3. #include "app/scpi/scpi_core.h"
  4. #include "app/scpi/scpi_numeric_types.h"
  5. #include "app/nfm/nfm_base.h" // xACMGetFreqPoints_t
  6. extern const fFSeqVTable_t fsqvbl_ProcessProgramData;
  7. #ifndef SCPI_CORE_STATE__PROCESSDATA_GUARD
  8. extern void ctx_ProcessProgramData;
  9. #endif
  10. #define SCPI_STATE_PROCESSDATA\
  11. DECLARE_SCPI_STATE_ENTRY( fsqvbl_ProcessProgramData, \
  12. &ctx_ProcessProgramData )
  13. // =================================================================================
  14. // @eProcessProgramDataStatus_t
  15. typedef enum
  16. {
  17. eProgramDataRuntimeError, // Request failed (run-time, execution error)
  18. eProgramDataSyntaxError, // Request failed (syntax error)
  19. eProgramDataArgumentSyntax,// Request failed (argument syntax error), sParser.xCtxObj contains error details
  20. eProgramDataArgumentValue, // Request failed (argument data error, invalid range or value)
  21. eProgramDataArgumentType, // Request failed (argument data error, invalid data type conversion)
  22. eProgramDataArgumentRange, // Request failed (argument value range error, invalid range or value)
  23. eProgramDataIllegalArgument,//Request failed (illegal argument value)
  24. eProgramData_SpecificError,// Request failed (no error message is required to generate because it is already done by handler)
  25. eProgramDataNeedData, // Request is being processed, need more data to be written using 'eScpiEventWrite' to continue
  26. eProgramDataNeedRead, // Request processed, but the response must be read using 'eScpiEventRead'
  27. eProgramDataDone, // Request completely processed, no more call is needed
  28. }
  29. eProcessProgramDataStatus_t;
  30. // =================================================================================
  31. // @eProcessProgramHandlerEvent_t
  32. typedef enum
  33. {
  34. eProgramData_Event_Write, // First call of command/query
  35. eProgramData_Event_Read, // Second call of query
  36. eProgramData_Event_Done, // Formal code: no I/O operations shall be performed
  37. }
  38. eProcessProgramHandlerEvent_t;
  39. // =================================================================================
  40. // @sProcessProgramDataSubGlobalContext_t
  41. // Common global context for each SCPI command
  42. typedef struct
  43. {
  44. void * global_ctx;
  45. const void * handler_ctx;
  46. bool needParseEndOfCommand; // End-of-command parser indicator
  47. bool isQuery; // mirror of @sScpiParserContext_t::sMessage.bQuery
  48. sProcessNumericEntry_t numericProcessContext; // @processNumericArgument context
  49. int8_t status; // program data handler status, @eProcessProgramDataStatus_t
  50. int8_t event; // program data handler event code, @eProcessProgramHandlerEvent_t
  51. int8_t argsParserStatus; // argument parser status, @eScpiStatus_t
  52. uint8_t argEntityTypes[ SCPI_MAX_ARGS ]; // Processed argument entity types, @eScpiEntityType_t
  53. uint8_t args; // Parsed arguments count, see @parseArguments_helper
  54. uint8_t argErrIdx; // erroneous argument index, the value >=SCPI_MAX_ARGS means this value is not specified (default)
  55. sStrToken_t argTokens[ SCPI_MAX_ARGS ]; // Argument tokens for @parseArguments, see @parseArguments_helper
  56. char tempBuffer[ SCPI_MAX_CMD_TEMP_BUFFER ]; // common general purpose command buffer
  57. //sStrToken_t argArray[ SCPI_MAX_ARRAY_ARG_BUFFER ]; // Array of Argument tokens for @parseArrayArguments
  58. uint8_t argArray[SCPI_MAX_ARRAY_ARG_BUFFER];
  59. union
  60. {
  61. struct { size_t idx; } IDN;
  62. struct { size_t idx; size_t N; size_t MAX_N; } TEST;
  63. struct { int dummy; } MEM_TABLE_DATA;
  64. struct { size_t idx; bool error; } SYSTemERRor;
  65. struct { size_t idx; } SYSTemVERSion;
  66. struct { size_t idx; } ESRSTB;
  67. struct { size_t idx; } ESESRE;
  68. struct { size_t idx; } OPC;
  69. struct { size_t idx; int32_t port; int32_t bank; } MemTableCommon;
  70. struct { size_t idx; } MemTableThermoCorrCommon;
  71. struct { size_t idx; int32_t state; } MeasAndSwitch;
  72. struct { size_t idx; int32_t state; } SwitchState;
  73. struct { size_t idx; size_t nchs; int32_t bank; xNFMGetFreqPoints_t getctx; double dFreqPoints[6]; bool init; bool isdone; } MemTableFreqData;
  74. struct { size_t idx; size_t nchs; int32_t bank; size_t iSeg; size_t nSeg; bool init; bool isdone; sEcalSegment_t Segment; } MemTableFreqSegmData;
  75. struct { size_t idx; } IntSwitch;
  76. struct { size_t idx; size_t nchs; int32_t bank; int32_t comb; int32_t state; xNFMGetPointsSimplified_t getctx; sNFMChrzPoint_t dDataPoints[3]; bool init; bool isdone; } MemTableData;
  77. struct { size_t idx; size_t nchs; int32_t comb; int32_t state; xNFMGetPointsSimplified_t getctx; sNFMChrzPoint_t dDataPoints[6]; bool init; bool isdone; } MemTableThermoCorrectionData;
  78. struct { size_t idx; size_t nchs; int32_t bank; xSWGetTablePoints_t getctx; sSWTablePoint_t dTablePoints[10]; bool init; bool isdone; } MemTablePlanData;
  79. };
  80. }
  81. sProcessProgramDataCommonContext_t;
  82. // =================================================================================
  83. #endif