You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
## D. Native MCS Implementation — Java vs XTCE-only
767
+
768
+
### Verdict: XTCE-only (with one built-in exception)
769
+
770
+
ST[11] is **XTCE-only on the ground side**. No `Pus11Service.java` exists in `yamcs-core` and none is required for normal MCS operation. This is the opposite of ST[05], where `PusEventDecoder` is mandatory because TM[5,1–4] must be promoted to YAMCS native events — a conversion that cannot be expressed in XTCE.
771
+
772
+
For ST[11]:
773
+
- All **TC sends** are encoded as XTCE MetaCommands + `PusCommandPostprocessor`
774
+
- All **TM receives** (TM[11,13], TM[11,19], TM[11,27]) are ordinary XTCE parameter containers — no native event emission needed
775
+
776
+
The one "Java" piece is `PusCommandPostprocessor.buildScheduledTc()` in `yamcs-core/src/main/java/org/yamcs/pus/PusCommandPostprocessor.java` (lines 128–190), but that code already exists and requires no new implementation. It handles the `pus11ScheduleAt` command extra transparently.
| TC[11,1]| Send |**Yes**| No |`ENABLE_SCHEDULER`, no args |
785
+
| TC[11,2]| Send |**Yes**| No |`DISABLE_SCHEDULER`, no args |
786
+
| TC[11,3]| Send |**Yes**| No |`RESET_SCHEDULER`, no args |
787
+
| TC[11,4]| Send |**Partial**| No (already done) | Direct MDB limited to fixed-size TCs (Gap #1); production path uses `pus11ScheduleAt` extra handled by `PusCommandPostprocessor`|
788
+
| TC[11,5]| Send |**Yes**| No | Array of `{source_id, apid, seqcount}`|
789
+
| TC[11,6]| Send |**Yes**| No | filter_type hardcoded to 0x01 (Gap #6) |
When a TC is issued with this attribute set, `buildScheduledTc()` wraps the encoded TC binary inside a TC[11,4] packet:
818
+
- Writes `subschedule_id=1`, `N=1`
819
+
- Encodes the CUC release time
820
+
- Appends the original TC binary verbatim
821
+
- Fills CCSDS sequence count and optional CRC
822
+
823
+
This means **operators can schedule any existing TC from YAMCS Web** by setting the Schedule Time option. No MDB change or new Java is needed for this path.
| Why Java for TM? | TM[5,1–4] must be promoted to YAMCS native events (events stream) — no XTCE mechanism exists for this | TM[11,13/19/27] are parameter containers — decoded by XTCE directly |
2. Register under `PusCommandReleaser` with `serviceType: 11`
859
+
3. Implement `handleTc(PreparedCommand)` dispatching to subtypes 1–21 (groups 22–26 optional)
860
+
861
+
This mirrors `Pus11Service.java` in `simulator/` exactly, but uses `emitTm(serviceType, subtype, appData)` from `PusCommandReleaser` instead of `pusSimulator.transmitRealtimeTM(pkt)`.
Copy file name to clipboardExpand all lines: pus_analysis/pus14.md
+52Lines changed: 52 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1068,6 +1068,58 @@ All TC/TM packet structures for ST[14] are fully expressible in XTCE:
1068
1068
1069
1069
---
1070
1070
1071
+
## d) Native MCS Implementation — Java vs XTCE-only
1072
+
1073
+
### Verdict: XTCE-only
1074
+
1075
+
ST[14] is **XTCE-only on the ground side**. No Java exists or is needed in `yamcs-core` for ST[14]. This is stated in §a):
1076
+
1077
+
> *YAMCS/MCS implementation = XTCE only (`pus14.xml`). No Java changes to `yamcs-core` are needed for ST[14].*
1078
+
1079
+
All TC sends are encoded as XTCE MetaCommands. All TM receives (TM[14,4], TM[14,8], TM[14,12]) are XTCE parameter containers. The on-board forwarding control logic (APFCC/HK FCC/Diag FCC management, `shouldForward()` gate) lives **entirely in the simulator** — it emulates satellite-side behavior. YAMCS MCS only sends configuration TCs and decodes FCC dump TM reports — both purely via XTCE.
| XTCE for TM? | Partial (params decoded, events need Java) | Full | Full |
1111
+
| On-board Java (simulator only) |`Pus5Service` in simulator |`Pus11Service` in simulator |`Pus14Service` in simulator (to be created) |
1112
+
1113
+
---
1114
+
1115
+
### When would yamcs-core Java be needed?
1116
+
1117
+
Only if YAMCS itself acted as a forwarding filter — i.e., if YAMCS should gate TM packets before archiving them based on an APFCC. That is explicitly **not** the design here: the forwarding control table lives on-board (or in the simulator), and YAMCS MCS archives whatever packets the satellite chooses to downlink.
1118
+
1119
+
If a future requirement added MCS-side filtering (e.g., suppressing certain TM packets before they reach the parameter archive), a `PusTmFilter` service in `yamcs-core` would be needed. That is not a ST[14] requirement — it would be a YAMCS architectural extension.
0 commit comments