Operations Reference Manual
01 System Overview
This document describes the communication protocol, message formats, and system properties of the simulated satellite in this lab. It is a specification, not a walkthrough: it tells you how the system is built, not how to defeat it.
The simulated vehicle (callsign ZARYA, NORAD catalog number 25544) communicates using the CCSDS Space Packet Protocol (CCSDS 133.0-B-2), the same packet format used by real NASA, ESA, and NOAA missions. A telemetry downlink continuously broadcasts vehicle health and position; a telecommand uplink accepts control packets. Everything in this manual reflects the exact byte layout implemented by the simulator.
02 Network Interfaces
| Interface | Protocol | Port | Direction | Purpose |
|---|---|---|---|---|
| Telemetry downlink | UDP | 7000 | Satellite → Ground | Continuous broadcast of housekeeping, position, and attitude telemetry |
| Telecommand uplink | UDP | 7001 | Ground → Satellite | Accepts CCSDS telecommand packets |
| Mission Control service | TCP (HTTP / WebSocket) | 8080 | Bidirectional | Dashboard UI, live-state query, WebSocket telemetry stream, command-injection interface |
03 CCSDS Packet Structure
Every packet on the wire, telemetry or telecommand, has the same three-part structure:
Primary Header (6 bytes)
Secondary Header
An 8-byte millisecond timestamp, present on every packet type in this system.
Trailer
Every packet ends with a 2-byte CRC-16 (CCITT-FALSE variant: polynomial 0x1021,
initial value 0xFFFF) computed over everything preceding it.
04 APID Assignments
The Application Process ID (APID) field in the primary header identifies what kind of packet it is.
| APID | Direction | Contents |
|---|---|---|
0x001 | TM | Housekeeping: mode, battery, temperature, bus voltage/current, solar status, power rails |
0x002 | TM | Position: latitude, longitude, altitude, velocity vector |
0x003 | TM | Attitude: roll, pitch, yaw |
0x064 | TC | Telecommand: function code + arguments |
05 Telecommand Reference
A telecommand's payload is a single function-code byte followed immediately by its arguments,
wrapped in the packet structure above (APID 0x064).
| Code | Name | Arguments |
|---|---|---|
0x01 | SWITCH_POWER | rail (1 byte, 0–2), state (1 byte: 0 = OFF, 1 = ON) |
0x02 | SET_MODE | mode (1 byte: 0 = NOMINAL, 1 = SAFE, 2 = EMERGENCY) |
0x03 | RESET | none |
0x04 | MEMORY_DUMP | address (4 bytes, big-endian), length (2 bytes) |
0x05 | DISABLE_SAFE_MODE | none |
06 Operating Modes
| Value | Name | Meaning |
|---|---|---|
0 | NOMINAL | Normal operation, all systems active |
1 | SAFE | Non-essential systems disabled to conserve power and protect the vehicle |
2 | EMERGENCY | Only the most essential systems remain active |
07 Telemetry Fields (Housekeeping)
| Field | Unit | Description |
|---|---|---|
mode | enum | Current operating mode, see Section 6 |
battery_soc | % | Battery state of charge |
battery_voltage | V | Battery terminal voltage |
temperature | °C | Onboard electronics temperature |
bus_voltage | V | Main power bus voltage |
bus_current | A | Main power bus current draw |
in_sunlight | bool | Whether the vehicle is currently in direct sunlight |
solar_power | W | Instantaneous solar panel output |
power_rails | 3 × bool | Live/dead state of each of the three independent power circuits |
08 Mission Control Interface
The mission control service (port 8080) exposes the live dashboard plus a small HTTP/WebSocket interface layered on top of the raw UDP protocol above:
| Interface | Method | Purpose |
|---|---|---|
/ws | WebSocket | Streams the current satellite state once per second |
/api/state | GET | Returns the current satellite state as JSON |
/api/attack/inject | POST | Builds and sends a telecommand packet on your behalf: accepts a satellite name, a function code (Section 5), and hex-encoded arguments, so you do not have to hand-assemble the raw packet bytes yourself |
Both this HTTP interface and raw UDP packets sent directly to port 7001 reach the same telecommand listener: they are two ways to speak the same protocol, not two different systems.