Files
marte_dev_tools/internal/schema/marte.cue
2026-01-28 01:18:26 +01:00

448 lines
8.9 KiB
CUE

package schema
#Classes: {
RealTimeApplication: {
Functions!: {
Class: "ReferenceContainer"
[_= !~"^Class$"]: {
#meta: type: "gam"
...
}
} // type: node
Data!: {
Class: "ReferenceContainer"
DefaultDataSource: string
[_= !~"^(Class|DefaultDataSource)$"]: {
#meta: type: "datasource"
...
}
}
States!: {
Class: "ReferenceContainer"
[_= !~"^Class$"]: {
Class: "RealTimeState"
...
}
} // type: node
Scheduler!: {
...
#meta: type: "scheduler"
}
...
}
Message: {
...
}
StateMachineEvent: {
NextState!: string
NextStateError!: string
Timeout?: uint32
[_= !~"^(Class|NextState|Timeout|NextStateError|[#_$].+)$"]: Message
...
}
_State: {
Class: "ReferenceContainer"
ENTER?: {
Class: "ReferenceContainer"
...
}
[_ = !~"^(Class|ENTER|EXIT)$"]: StateMachineEvent
...
}
StateMachine: {
[_ = !~"^(Class|[$].*)$"]: _State
...
}
RealTimeState: {
Threads: {...} // type: node
...
}
RealTimeThread: {
Functions: [...] // type: array
...
}
GAMScheduler: {
TimingDataSource: string // type: reference
#meta: type: "scheduler"
...
}
TimingDataSource: {
#meta: multithreaded: bool | *false
#meta: direction: "IN"
#meta: type: "datasource"
...
}
IOGAM: {
InputSignals?: {...} // type: node
OutputSignals?: {...} // type: node
#meta: type: "gam"
...
}
ReferenceContainer: {
...
}
ConstantGAM: {
...
#meta: type: "gam"
}
PIDGAM: {
Kp: float | int // type: float (allow int as it promotes)
Ki: float | int
Kd: float | int
#meta: type: "gam"
...
}
FileDataSource: {
Filename: string
Format?: string
#meta: multithreaded: bool | *false
#meta: direction: "INOUT"
#meta: type: "datasource"
...
}
LoggerDataSource: {
#meta: multithreaded: bool | *false
#meta: direction: "OUT"
#meta: type: "datasource"
...
}
DANStream: {
Timeout?: int
#meta: multithreaded: bool | *false
#meta: direction: "OUT"
#meta: type: "datasource"
...
}
EPICSCAInput: {
#meta: multithreaded: bool | *false
#meta: direction: "IN"
#meta: type: "datasource"
...
}
EPICSCAOutput: {
#meta: multithreaded: bool | *false
#meta: direction: "OUT"
#meta: type: "datasource"
...
}
EPICSPVAInput: {
#meta: multithreaded: bool | *false
#meta: direction: "IN"
#meta: type: "datasource"
...
}
EPICSPVAOutput: {
#meta: multithreaded: bool | *false
#meta: direction: "OUT"
#meta: type: "datasource"
...
}
SDNSubscriber: {
ExecutionMode?: *"IndependentThread" | "RealTimeThread"
Topic!: string
Address?: string
Interface!: string
CPUs?: uint32
InternalTimeout?: uint32
Timeout?: uint32
IgnoreTimeoutError?: 0 | 1
#meta: multithreaded: bool | *false
#meta: direction: "IN"
#meta: type: "datasource"
...
}
SDNPublisher: {
Address: string
Port: int
Interface?: string
#meta: multithreaded: bool | *false
#meta: direction: "OUT"
#meta: type: "datasource"
...
}
UDPReceiver: {
Port: int
Address?: string
#meta: multithreaded: bool | *false
#meta: direction: "IN"
#meta: type: "datasource"
...
}
UDPSender: {
Destination: string
#meta: multithreaded: bool | *false
#meta: direction: "OUT"
#meta: type: "datasource"
...
}
FileReader: {
Filename: string
Format?: string
Interpolate?: string
#meta: multithreaded: bool | *false
#meta: direction: "IN"
#meta: type: "datasource"
...
}
FileWriter: {
Filename: string
Format?: string
StoreOnTrigger?: int
#meta: multithreaded: bool | *false
#meta: direction: "OUT"
#meta: type: "datasource"
...
}
OrderedClass: {
First: int
Second: string
...
}
BaseLib2GAM: {
#meta: type: "gam"
...
}
ConversionGAM: {
#meta: type: "gam"
...
}
DoubleHandshakeGAM: {
#meta: type: "gam"
...
}
FilterGAM: {
Num: [...]
Den: [...]
ResetInEachState?: _
InputSignals?: {...}
OutputSignals?: {...}
#meta: type: "gam"
...
}
HistogramGAM: {
BeginCycleNumber?: int
StateChangeResetName?: string
InputSignals?: {...}
OutputSignals?: {...}
#meta: type: "gam"
...
}
Interleaved2FlatGAM: {
#meta: type: "gam"
...
}
FlattenedStructIOGAM: {
#meta: type: "gam"
...
}
MathExpressionGAM: {
Expression: string
InputSignals?: {...}
OutputSignals?: {...}
#meta: type: "gam"
...
}
MessageGAM: {
#meta: type: "gam"
...
}
MuxGAM: {
#meta: type: "gam"
...
}
SimulinkWrapperGAM: {
#meta: type: "gam"
...
}
SSMGAM: {
#meta: type: "gam"
...
}
StatisticsGAM: {
#meta: type: "gam"
...
}
TimeCorrectionGAM: {
#meta: type: "gam"
...
}
TriggeredIOGAM: {
#meta: type: "gam"
...
}
WaveformGAM: {
#meta: type: "gam"
...
}
DAN: {
#meta: multithreaded: bool | *false
#meta: direction: "OUT"
...
}
LinuxTimer: {
ExecutionMode?: string
SleepNature?: string
SleepPercentage?: _
Phase?: int
CPUMask?: int
TimeProvider?: {...}
Signals: {...}
#meta: multithreaded: bool | *false
#meta: direction: "IN"
#meta: type: "datasource"
...
}
LinkDataSource: {
#meta: multithreaded: bool | *false
#meta: direction: "INOUT"
#meta: type: "datasource"
...
}
MDSReader: {
TreeName: string
ShotNumber: int
Frequency: float | int
Signals: {...}
#meta: multithreaded: bool | *false
#meta: direction: "IN"
#meta: type: "datasource"
...
}
MDSWriter: {
NumberOfBuffers: int
CPUMask: int
StackSize: int
TreeName: string
PulseNumber?: int
StoreOnTrigger: int
EventName: string
TimeRefresh: float | int
NumberOfPreTriggers?: int
NumberOfPostTriggers?: int
Signals: {...}
Messages?: {...}
#meta: multithreaded: bool | *false
#meta: direction: "OUT"
#meta: type: "datasource"
...
}
NI1588TimeStamp: {
#meta: multithreaded: bool | *false
#meta: direction: "IN"
#meta: type: "datasource"
...
}
NI6259ADC: {
#meta: multithreaded: bool | *false
#meta: direction: "IN"
#meta: type: "datasource"
...
}
NI6259DAC: {
#meta: multithreaded: bool | *false
#meta: direction: "OUT"
#meta: type: "datasource"
...
}
NI6259DIO: {
#meta: multithreaded: bool | *false
#meta: direction: "INOUT"
#meta: type: "datasource"
...
}
NI6368ADC: {
#meta: multithreaded: bool | *false
#meta: direction: "IN"
#meta: type: "datasource"
...
}
NI6368DAC: {
#meta: multithreaded: bool | *false
#meta: direction: "OUT"
#meta: type: "datasource"
...
}
NI6368DIO: {
#meta: multithreaded: bool | *false
#meta: direction: "INOUT"
#meta: type: "datasource"
...
}
NI9157CircularFifoReader: {
#meta: multithreaded: bool | *false
#meta: direction: "IN"
#meta: type: "datasource"
...
}
NI9157MxiDataSource: {
#meta: multithreaded: bool | *false
#meta: direction: "INOUT"
#meta: type: "datasource"
...
}
OPCUADSInput: {
#meta: multithreaded: bool | *false
#meta: direction: "IN"
#meta: type: "datasource"
...
}
OPCUADSOutput: {
#meta: multithreaded: bool | *false
#meta: direction: "OUT"
#meta: type: "datasource"
...
}
RealTimeThreadAsyncBridge: {
#meta: direction: "INOUT"
#meta: multithreaded: bool | true
#meta: type: "datasource"
...
}
RealTimeThreadSynchronisation: {...}
UARTDataSource: {
#meta: multithreaded: bool | *false
#meta: direction: "INOUT"
#meta: type: "datasource"
...
}
BaseLib2Wrapper: {...}
EPICSCAClient: {...}
EPICSPVA: {...}
MemoryGate: {...}
OPCUA: {...}
SysLogger: {...}
GAMDataSource: {
#meta: multithreaded: bool | *false
#meta: direction: "INOUT"
#meta: type: "datasource"
...
}
}
#Meta: {
direction?: "IN" | "OUT" | "INOUT"
multithreaded?: bool
...
}
// Definition for any Object.
// It must have a Class field.
// Based on Class, it validates against #Classes.
#Object: {
Class: string
"#meta"?: #Meta
// Allow any other field by default (extensibility),
// unless #Classes definition is closed.
// We allow open structs now.
...
// Unify if Class is known.
// If Class is NOT in #Classes, this might fail or do nothing depending on CUE logic.
// Actually, `#Classes[Class]` fails if key is missing.
// This ensures we validate against known classes.
// If we want to allow unknown classes, we need a check.
// But spec implies validation should check known classes.
#Classes[Class]
}