Skip to content

Commit 4d5d26c

Browse files
Merge pull request #210 from pixxelhq/feat/pus9_impl
feat: Add PUS simulator code
2 parents f6de2ac + f531147 commit 4d5d26c

23 files changed

Lines changed: 2564 additions & 618 deletions

File tree

examples/pus/src/main/yamcs/etc/processor.yaml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,14 @@ realtime:
1616
implicitPfield: false
1717
pfield: 0x2f
1818
handlers:
19-
- serviceType: 5
20-
class: org.yamcs.pus.Pus5Service
19+
# ST[05] is ground-station only: no on-board handler is registered, so
20+
# TC[5,5/6/7] fall through to the TC stream and are radiated to the
21+
# spacecraft. TM[5,1-4] are turned into Yamcs events by PusEventDecoder
22+
# (see yamcs.<instance>.yaml services); TM[5,8] is decoded purely by XTCE.
23+
- serviceType: 9
24+
class: org.yamcs.pus.Pus9Service
2125
args:
22-
eventIdParameter: /PUS5/event_id
26+
defaultRateExponent: 2
2327
- class: org.yamcs.tctm.StreamParameterProvider
2428
- class: org.yamcs.algorithms.AlgorithmManager
2529
# implements provider of parameters from sys_param stream (these are collected and sent on this stream by SystemParametersService)

examples/pus/src/main/yamcs/etc/yamcs.pus.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,12 @@ mdb:
9898
spec: "mdb/dt.xml"
9999
- type: "xtce"
100100
spec: "mdb/pus.xml"
101+
- type: "xtce"
102+
spec: "mdb/pus2.xml"
101103
- type: "xtce"
102104
spec: "mdb/pus5.xml"
105+
- type: "xtce"
106+
spec: "mdb/pus9.xml"
103107
- type: "xtce"
104108
spec: "mdb/pus11.xml"
105109
- type: "xtce"

examples/pus/src/main/yamcs/mdb/pus.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@
1111
<Enumeration label="INVALID_PUS_SUBTYPE" value="1" />
1212
<Enumeration label="NOT_IMPLEMENTED" value="2" />
1313
<Enumeration label="INVALID_EVENT_ID" value="3" />
14+
<Enumeration label="UNKNOWN_PHYSICAL_DEVICE" value="10" />
15+
<Enumeration label="UNKNOWN_LOGICAL_DEVICE" value="11" />
16+
<Enumeration label="UNKNOWN_DEVICE_COMMAND" value="12" />
17+
<Enumeration label="UNKNOWN_DEVICE_PARAMETER" value="13" />
1418
<Enumeration label="INVALID_VOLTAGE_NUM" value="100" />
1519
</EnumerationList>
1620
</EnumeratedParameterType>

examples/pus/src/main/yamcs/mdb/pus11.xml

Lines changed: 212 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,42 @@
4040
<Member typeRef="/dt/uint16" name="seq"/>
4141
</MemberList>
4242
</AggregateParameterType>
43-
43+
<IntegerParameterType name="GroupIdType" signed="false">
44+
<IntegerDataEncoding sizeInBits="8"/>
45+
</IntegerParameterType>
46+
<EnumeratedParameterType name="GroupStatusType">
47+
<IntegerDataEncoding sizeInBits="8"/>
48+
<EnumerationList>
49+
<Enumeration value="0" label="disabled"/>
50+
<Enumeration value="1" label="enabled"/>
51+
</EnumerationList>
52+
</EnumeratedParameterType>
53+
<AggregateParameterType name="GroupStatusElementType">
54+
<MemberList>
55+
<Member typeRef="GroupIdType" name="group_id"/>
56+
<Member typeRef="GroupStatusType" name="group_status"/>
57+
</MemberList>
58+
</AggregateParameterType>
59+
<ArrayParameterType arrayTypeRef="GroupStatusElementType" name="GroupStatusReportType">
60+
<DimensionList>
61+
<Dimension>
62+
<StartingIndex><FixedValue>0</FixedValue></StartingIndex>
63+
<EndingIndex>
64+
<DynamicValue>
65+
<ParameterInstanceRef parameterRef="group_report_n"/>
66+
<LinearAdjustment intercept="-1"/>
67+
</DynamicValue>
68+
</EndingIndex>
69+
</Dimension>
70+
</DimensionList>
71+
</ArrayParameterType>
4472
</ParameterTypeSet>
4573
<ParameterSet>
4674
<Parameter parameterTypeRef="/dt/uint32" name="status_report_n"/>
4775
<Parameter parameterTypeRef="/dt/uint32" name="summary_report_n"/>
4876
<Parameter parameterTypeRef="StatusReportType" name="status_report" shortDescription="Contains the status (enable/disable) of the sub-schedules."/>
77+
<Parameter parameterTypeRef="/dt/uint32" name="group_report_n"/>
78+
<Parameter parameterTypeRef="GroupStatusReportType" name="group_report"/>
4979
</ParameterSet>
5080
<ContainerSet>
5181
<SequenceContainer name="pus11-tm">
@@ -69,7 +99,17 @@
6999
</RestrictionCriteria>
70100
</BaseContainer>
71101
</SequenceContainer>
72-
102+
<SequenceContainer name="GROUP_STATUS_REPORT" shortDescription="TM[11,27] time-based scheduling group status report">
103+
<EntryList>
104+
<ParameterRefEntry parameterRef="group_report_n"/>
105+
<ArrayParameterRefEntry parameterRef="group_report"/>
106+
</EntryList>
107+
<BaseContainer containerRef="pus11-tm">
108+
<RestrictionCriteria>
109+
<Comparison parameterRef="/PUS/subtype" comparisonOperator="==" value="27"/>
110+
</RestrictionCriteria>
111+
</BaseContainer>
112+
</SequenceContainer>
73113
</ContainerSet>
74114
</TelemetryMetaData>
75115
<CommandMetaData>
@@ -115,6 +155,66 @@
115155
</Dimension>
116156
</DimensionList>
117157
</ArrayArgumentType>
158+
<!-- TC[11,4] INSERT_ACTIVITIES types — tc_packet size fixed at 128 bits (16 bytes); adjust for mission TC size -->
159+
<BinaryArgumentType name="TcPacketType">
160+
<BinaryDataEncoding>
161+
<SizeInBits><FixedValue>128</FixedValue></SizeInBits>
162+
</BinaryDataEncoding>
163+
</BinaryArgumentType>
164+
<AggregateArgumentType name="ActivityEntryType">
165+
<MemberList>
166+
<Member name="release_time" typeRef="/PUS/PusTimeType"/>
167+
<Member name="tc_packet" typeRef="TcPacketType"/>
168+
</MemberList>
169+
</AggregateArgumentType>
170+
<ArrayArgumentType arrayTypeRef="ActivityEntryType" name="ActivityArrayType">
171+
<DimensionList>
172+
<Dimension>
173+
<StartingIndex><FixedValue>0</FixedValue></StartingIndex>
174+
<EndingIndex>
175+
<DynamicValue>
176+
<ArgumentInstanceRef argumentRef="n"/>
177+
<LinearAdjustment intercept="-1"/>
178+
</DynamicValue>
179+
</EndingIndex>
180+
</Dimension>
181+
</DimensionList>
182+
</ArrayArgumentType>
183+
<!-- TC[11,22–25] group management types -->
184+
<IntegerArgumentType name="NumGroupsType" baseType="/dt/uint8"/>
185+
<IntegerArgumentType name="GroupIdType" baseType="/dt/uint8"/>
186+
<AggregateArgumentType name="GroupElementType">
187+
<MemberList>
188+
<Member typeRef="GroupIdType" name="group_id"/>
189+
<Member typeRef="/dt/uint8" name="group_status"/>
190+
</MemberList>
191+
</AggregateArgumentType>
192+
<ArrayArgumentType arrayTypeRef="GroupElementType" name="GroupArrayType">
193+
<DimensionList>
194+
<Dimension>
195+
<StartingIndex><FixedValue>0</FixedValue></StartingIndex>
196+
<EndingIndex>
197+
<DynamicValue>
198+
<ArgumentInstanceRef argumentRef="num_groups"/>
199+
<LinearAdjustment intercept="-1"/>
200+
</DynamicValue>
201+
</EndingIndex>
202+
</Dimension>
203+
</DimensionList>
204+
</ArrayArgumentType>
205+
<ArrayArgumentType arrayTypeRef="GroupIdType" name="GroupIdArrayType">
206+
<DimensionList>
207+
<Dimension>
208+
<StartingIndex><FixedValue>0</FixedValue></StartingIndex>
209+
<EndingIndex>
210+
<DynamicValue>
211+
<ArgumentInstanceRef argumentRef="num_groups"/>
212+
<LinearAdjustment intercept="-1"/>
213+
</DynamicValue>
214+
</EndingIndex>
215+
</Dimension>
216+
</DimensionList>
217+
</ArrayArgumentType>
118218
</ArgumentTypeSet>
119219
<MetaCommandSet>
120220
<MetaCommand name="pus11-tc" abstract="true">
@@ -161,7 +261,26 @@
161261
<BaseContainer containerRef="pus11-tc" />
162262
</CommandContainer>
163263
</MetaCommand>
164-
264+
<MetaCommand name="INSERT_ACTIVITIES" shortDescription="TC[11,4] insert activities into the time-based schedule">
265+
<BaseMetaCommand metaCommandRef="pus11-tc">
266+
<ArgumentAssignmentList>
267+
<ArgumentAssignment argumentName="subtype" argumentValue="4"/>
268+
</ArgumentAssignmentList>
269+
</BaseMetaCommand>
270+
<ArgumentList>
271+
<Argument argumentTypeRef="/dt/uint8" name="subschedule_id"/>
272+
<Argument argumentTypeRef="/dt/uint8" name="n"/>
273+
<Argument argumentTypeRef="ActivityArrayType" name="activities"/>
274+
</ArgumentList>
275+
<CommandContainer name="INSERT_ACTIVITIES">
276+
<EntryList>
277+
<ArgumentRefEntry argumentRef="subschedule_id"/>
278+
<ArgumentRefEntry argumentRef="n"/>
279+
<ArgumentRefEntry argumentRef="activities"/>
280+
</EntryList>
281+
<BaseContainer containerRef="pus11-tc"/>
282+
</CommandContainer>
283+
</MetaCommand>
165284
<MetaCommand name="DELETE_ACTIVITIES_BY_ID" shortDescription="TC[11,5] delete time-based scheduled activities identified by request identifier">
166285
<BaseMetaCommand metaCommandRef="pus11-tc">
167286
<ArgumentAssignmentList>
@@ -211,11 +330,13 @@
211330
</ArgumentAssignmentList>
212331
</BaseMetaCommand>
213332
<ArgumentList>
333+
<Argument argumentTypeRef="/dt/uint32" name="time_offset_ms"/>
214334
<Argument argumentTypeRef="NumRequestsType" name="num_requests"></Argument>
215335
<Argument argumentTypeRef="RequestArrayType" name="requests"></Argument>
216336
</ArgumentList>
217337
<CommandContainer name="TIME_SHIFT_ACTIVITIES_BY_ID">
218338
<EntryList>
339+
<ArgumentRefEntry argumentRef="time_offset_ms"/>
219340
<ArgumentRefEntry argumentRef="num_requests" />
220341
<ArgumentRefEntry argumentRef="requests" />
221342
</EntryList>
@@ -229,13 +350,15 @@
229350
</ArgumentAssignmentList>
230351
</BaseMetaCommand>
231352
<ArgumentList>
353+
<Argument argumentTypeRef="/dt/uint32" name="time_offset_ms"/>
232354
<Argument argumentTypeRef="/PUS/PusTimeType" name="start_time"></Argument>
233355
<Argument argumentTypeRef="/PUS/PusTimeType" name="end_time"></Argument>
234356
<Argument argumentTypeRef="NumSchedulesType" name="num_schedules"></Argument>
235357
<Argument argumentTypeRef="ScheduleIdArrayType" name="schedules"></Argument>
236358
</ArgumentList>
237359
<CommandContainer name="TIME_SHIFT_ACTIVITIES_BY_FILTER">
238360
<EntryList>
361+
<ArgumentRefEntry argumentRef="time_offset_ms"/>
239362
<FixedValueEntry binaryValue="01" sizeInBits="8" name="filter_type"/>
240363
<ArgumentRefEntry argumentRef="start_time" />
241364
<ArgumentRefEntry argumentRef="end_time" />
@@ -330,20 +453,18 @@
330453
</CommandContainer>
331454
</MetaCommand>
332455

333-
<MetaCommand name="TIME_SHIFT_ACTIVITIES" shortDescription="5 TC[11,15] time-shift all scheduled activities">
456+
<MetaCommand name="TIME_SHIFT_ACTIVITIES" shortDescription="TC[11,15] time-shift all scheduled activities">
334457
<BaseMetaCommand metaCommandRef="pus11-tc">
335458
<ArgumentAssignmentList>
336459
<ArgumentAssignment argumentName="subtype" argumentValue="15" />
337460
</ArgumentAssignmentList>
338461
</BaseMetaCommand>
339462
<ArgumentList>
340-
<Argument argumentTypeRef="NumRequestsType" name="num_requests"></Argument>
341-
<Argument argumentTypeRef="RequestArrayType" name="requests"></Argument>
463+
<Argument argumentTypeRef="/dt/uint32" name="time_offset_ms"/>
342464
</ArgumentList>
343465
<CommandContainer name="TIME_SHIFT_ACTIVITIES">
344466
<EntryList>
345-
<ArgumentRefEntry argumentRef="num_requests" />
346-
<ArgumentRefEntry argumentRef="requests" />
467+
<ArgumentRefEntry argumentRef="time_offset_ms"/>
347468
</EntryList>
348469
<BaseContainer containerRef="pus11-tc" />
349470
</CommandContainer>
@@ -422,6 +543,89 @@
422543
<BaseContainer containerRef="pus11-tc" />
423544
</CommandContainer>
424545
</MetaCommand>
546+
<MetaCommand name="CREATE_SCHEDULING_GROUPS" shortDescription="TC[11,22] create time-based scheduling groups">
547+
<BaseMetaCommand metaCommandRef="pus11-tc">
548+
<ArgumentAssignmentList>
549+
<ArgumentAssignment argumentName="subtype" argumentValue="22"/>
550+
</ArgumentAssignmentList>
551+
</BaseMetaCommand>
552+
<ArgumentList>
553+
<Argument argumentTypeRef="NumGroupsType" name="num_groups"/>
554+
<Argument argumentTypeRef="GroupArrayType" name="groups"/>
555+
</ArgumentList>
556+
<CommandContainer name="CREATE_SCHEDULING_GROUPS">
557+
<EntryList>
558+
<ArgumentRefEntry argumentRef="num_groups"/>
559+
<ArgumentRefEntry argumentRef="groups"/>
560+
</EntryList>
561+
<BaseContainer containerRef="pus11-tc"/>
562+
</CommandContainer>
563+
</MetaCommand>
564+
<MetaCommand name="DELETE_SCHEDULING_GROUPS" shortDescription="TC[11,23] delete time-based scheduling groups">
565+
<BaseMetaCommand metaCommandRef="pus11-tc">
566+
<ArgumentAssignmentList>
567+
<ArgumentAssignment argumentName="subtype" argumentValue="23"/>
568+
</ArgumentAssignmentList>
569+
</BaseMetaCommand>
570+
<ArgumentList>
571+
<Argument argumentTypeRef="NumGroupsType" name="num_groups"/>
572+
<Argument argumentTypeRef="GroupIdArrayType" name="group_ids"/>
573+
</ArgumentList>
574+
<CommandContainer name="DELETE_SCHEDULING_GROUPS">
575+
<EntryList>
576+
<ArgumentRefEntry argumentRef="num_groups"/>
577+
<ArgumentRefEntry argumentRef="group_ids"/>
578+
</EntryList>
579+
<BaseContainer containerRef="pus11-tc"/>
580+
</CommandContainer>
581+
</MetaCommand>
582+
<MetaCommand name="ENABLE_SCHEDULING_GROUPS" shortDescription="TC[11,24] enable time-based scheduling groups">
583+
<BaseMetaCommand metaCommandRef="pus11-tc">
584+
<ArgumentAssignmentList>
585+
<ArgumentAssignment argumentName="subtype" argumentValue="24"/>
586+
</ArgumentAssignmentList>
587+
</BaseMetaCommand>
588+
<ArgumentList>
589+
<Argument argumentTypeRef="NumGroupsType" name="num_groups"/>
590+
<Argument argumentTypeRef="GroupIdArrayType" name="group_ids"/>
591+
</ArgumentList>
592+
<CommandContainer name="ENABLE_SCHEDULING_GROUPS">
593+
<EntryList>
594+
<ArgumentRefEntry argumentRef="num_groups"/>
595+
<ArgumentRefEntry argumentRef="group_ids"/>
596+
</EntryList>
597+
<BaseContainer containerRef="pus11-tc"/>
598+
</CommandContainer>
599+
</MetaCommand>
600+
<MetaCommand name="DISABLE_SCHEDULING_GROUPS" shortDescription="TC[11,25] disable time-based scheduling groups">
601+
<BaseMetaCommand metaCommandRef="pus11-tc">
602+
<ArgumentAssignmentList>
603+
<ArgumentAssignment argumentName="subtype" argumentValue="25"/>
604+
</ArgumentAssignmentList>
605+
</BaseMetaCommand>
606+
<ArgumentList>
607+
<Argument argumentTypeRef="NumGroupsType" name="num_groups"/>
608+
<Argument argumentTypeRef="GroupIdArrayType" name="group_ids"/>
609+
</ArgumentList>
610+
<CommandContainer name="DISABLE_SCHEDULING_GROUPS">
611+
<EntryList>
612+
<ArgumentRefEntry argumentRef="num_groups"/>
613+
<ArgumentRefEntry argumentRef="group_ids"/>
614+
</EntryList>
615+
<BaseContainer containerRef="pus11-tc"/>
616+
</CommandContainer>
617+
</MetaCommand>
618+
<MetaCommand name="REPORT_GROUP_STATUS" shortDescription="TC[11,26] report the status of each time-based scheduling group">
619+
<BaseMetaCommand metaCommandRef="pus11-tc">
620+
<ArgumentAssignmentList>
621+
<ArgumentAssignment argumentName="subtype" argumentValue="26"/>
622+
</ArgumentAssignmentList>
623+
</BaseMetaCommand>
624+
<CommandContainer name="REPORT_GROUP_STATUS">
625+
<EntryList/>
626+
<BaseContainer containerRef="pus11-tc"/>
627+
</CommandContainer>
628+
</MetaCommand>
425629
</MetaCommandSet>
426630
</CommandMetaData>
427631
<!-- we added the detailed report into its own subsystem to allow nicer names in the parameter list on yamcs-web-->

0 commit comments

Comments
 (0)