This page defines the types used by the SimTX API game protocol, version 25: how protobuf scalars appear on the wire, the conventions for ids, times and units, every enumeration, and the messages shared by several frames. Messages that belong to a single frame are described on that frame's page.
The authoritative definitions are the .proto files. Where this page and the files disagree, the files win.
Messages use standard protobuf 3 encoding. A field is a tag (a varint holding field number × 8 + wire type) followed by its value:
| Proto type |
Wire type |
Encoding |
Python struct |
Used for
|
bool |
0 (varint) |
0 or 1 |
|
Flags
|
int32, int64 |
0 (varint) |
Two's complement as a varint. Negative values take 10 bytes. |
|
Counts, ids, Unix times
|
| enum |
0 (varint) |
The value's number |
|
Enumerations
|
fixed64 |
1 (64-bit) |
8 bytes, little-endian, unsigned |
<Q |
IqBlock.sequence
|
double |
1 (64-bit) |
IEEE 754 binary64, little-endian |
<d |
Positions, frequencies
|
float |
5 (32-bit) |
IEEE 754 binary32, little-endian |
<f |
Levels, bandwidths, angles of antennas
|
string |
2 (length-delimited) |
Varint length, then UTF-8 |
|
Names, callsigns, string enumerations
|
bytes |
2 (length-delimited) |
Varint length, then raw bytes |
|
UUIDs, sample payloads
|
| message |
2 (length-delimited) |
Varint length, then the encoded message |
|
Nested messages
|
repeated float |
2 (length-delimited) |
Packed: varint length, then the values back to back |
<nf |
Sample blocks, rasters
|
- Zero values are omitted. In proto3 a field holding its default (0, false, empty) is not written, and a missing field reads as its default. A decoder cannot tell an absent field from an explicit default: an absent
state reads as 0, SESSION_STATE_UNSPECIFIED.
- Presence. Fields marked
optional (for example ReceiverStart.noise_figure_db, the TxImperfections knobs, every TxUpdate value) do record whether they were set. Unset means "use the default", which is not the same as 0.
- Floats must be finite. Unless a field says otherwise, NaN and infinity in a request are refused.
| What |
Convention
|
| UUIDs |
16 bytes in a bytes field, big-endian, most significant half first: the 16 bytes of the canonical form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx in order. Empty means "none". Station, antenna, rig, session, account and satellite ids all use this form. In Python, uuid.UUID(bytes=value).
|
| Times |
Fields ending in _ms are Unix milliseconds (UTC). *_epoch_seconds and *_nanos pairs give nanosecond precision. Durations end in _seconds, _ms or _nanos.
|
| Frequencies |
Hz. Carrier and centre frequencies are double; bandwidths and audio frequencies are float.
|
| Angles |
Degrees. Azimuth from true north through east.
|
| Positions |
Latitude −90 to 90 (north positive), longitude −180 to 180 (east positive). Heights in metres.
|
| Units |
Every other quantity carries its unit in the field name: _db, _watts, _meters, _km, _mps, _rpm and so on.
|
| Sample bytes |
The IQ samples inside IqBlock.samples and SampleBlock.compact_iq.samples are big-endian int16 or int8, unlike protobuf's own little-endian scalars.
|
| Request ids |
Requests carry an int64 request_id chosen by the client, echoed in the response or in an Error. Use nonzero values; 0 in an Error means the whole connection.
|
| Callsigns |
Trimmed of surrounding whitespace; 1 to 64 printable characters. SimTX does not check callsigns against any licensing database.
|
Proto enums travel as their number. An omitted enum field reads as 0, and the value 0 never grants or asserts anything:
- Most enums start with an
*_UNSPECIFIED = 0 value. Where the field is required (Role, SessionState, IpModerationAction, and StationKind wherever a persistent station is meant), decoders refuse 0.
- A few have a real value at 0, the default:
AuthKind ANONYMOUS, AntennaMount FIXED, PointingMode FIXED, SpinAxis ORBIT_NORMAL, StationKind ADHOC, StationVisibility UNLISTED, SampleFormat INT16, BannerLevel INFO.
- A reader that receives a value it does not know keeps the number and treats it as unknown, as each table below says.
| Value |
Name |
Meaning
|
| 0 |
ROLE_UNSPECIFIED |
Refused.
|
| 1 |
ROLE_RECEIVER |
Receiver: an IQ stream. Anonymous for ad-hoc sites; a receiver ticket for station-bound ones.
|
| 2 |
ROLE_TX_AUDIO |
Transmitter whose samples the client streams. Ticket tx-audio, permission game.transmit.
|
| 3 |
ROLE_TX_GENERATED |
Transmitter whose source the server generates. Ticket tx-generated, permission game.transmit.
|
| 4 |
ROLE_CONTROL |
Control: station list, maps, health, catalog, ephemeris, passes, own-transmitter monitor. Anonymous, or ticket control.
|
| 5 |
ROLE_MODERATION |
Moderation. Ticket moderation, permission moderation.manage.
|
| Value |
Name |
Meaning
|
| 0 |
AUTH_KIND_ANONYMOUS |
No credential. An anonymous hello that carries a credential is refused.
|
| 1 |
AUTH_KIND_GAME_TICKET |
credential holds a game ticket.
|
| Value |
Name |
Meaning
|
| 0 |
HELLO_STATUS_UNSPECIFIED |
Not sent by servers. Treat it, and unknown values, as SERVER_UNAVAILABLE.
|
| 1 |
HELLO_STATUS_ACCEPTED |
The session may begin.
|
| 2 |
HELLO_STATUS_VERSION_UNSUPPORTED |
The preface version is not 25.
|
| 3 |
HELLO_STATUS_AUTHENTICATION_REQUIRED |
The role needs a ticket and none was sent. Typical message: This role requires a SimTX account.
|
| 4 |
HELLO_STATUS_CREDENTIAL_INVALID |
The ticket is unknown, expired, used, or minted for another server or role. Typical message: Game ticket is invalid or expired.
|
| 5 |
HELLO_STATUS_ACCOUNT_RESTRICTED |
The account is restricted.
|
| 6 |
HELLO_STATUS_ROLE_FORBIDDEN |
The account lacks the permission the role needs. Typical message: Account is not permitted to transmit.
|
| 7 |
HELLO_STATUS_SERVER_UNAVAILABLE |
The server cannot verify the ticket or take the connection now. The only status worth retrying unchanged.
|
| 8 |
HELLO_STATUS_IP_BANNED |
The client address is banned. The message gives the reason.
|
| Value |
Name |
Meaning
|
| 0 |
ERROR_CODE_UNSPECIFIED |
No specific code: an ENDED session that simply ended. Also how to treat unknown codes.
|
| 1 |
ERROR_CODE_INVALID_REQUEST |
Malformed or out-of-range request, or a frame not allowed in this session.
|
| 2 |
ERROR_CODE_UNAUTHENTICATED |
Needs an account or a valid ticket.
|
| 3 |
ERROR_CODE_FORBIDDEN |
Not allowed, or the ticket's station binding does not match the request.
|
| 4 |
ERROR_CODE_NOT_FOUND |
Unknown station, satellite, session or catalog entry.
|
| 5 |
ERROR_CODE_LIMIT_REACHED |
Server, address, account or station capacity reached.
|
| 6 |
ERROR_CODE_RATE_LIMITED |
Too many requests.
|
| 7 |
ERROR_CODE_UNAVAILABLE |
Transient condition: disabled, busy or not reachable.
|
| 8 |
ERROR_CODE_STATION_INACTIVE |
The station is deleted or deorbited, or the satellite has reentered.
|
| 9 |
ERROR_CODE_STATION_REQUIRED |
Ad-hoc transmitter refused; bind one of your stations.
|
| 10 |
ERROR_CODE_INTERNAL |
Server fault.
|
| 11 |
ERROR_CODE_CANCELLED |
Superseded by a newer request of the same kind (coverage maps).
|
| Value |
Name |
Meaning
|
| 0 |
SESSION_STATE_UNSPECIFIED |
Never sent. Decoders refuse it.
|
| 1 |
SESSION_STATE_BOUND |
Start accepted. TxQueue / TxAccept or IqStreamDescriptor follow.
|
| 2 |
SESSION_STATE_REJECTED |
Start refused. code and reason say why; the connection closes.
|
| 3 |
SESSION_STATE_ENDED |
Ended by the server: kick, ban, station deleted, reentry, access revoked. The connection closes.
|
| 4 |
SESSION_STATE_UPDATED |
The session keeps running with a changed state; see update_reason.
|
| Value |
Name |
Meaning
|
| 0 |
UPDATE_REASON_UNSPECIFIED |
Not an UPDATED status. On an UPDATED status: apply the snapshot fields.
|
| 1 |
UPDATE_REASON_POINTING |
This session's AntennaPointingUpdate was applied (request_id).
|
| 2 |
UPDATE_REASON_TRACKING |
The server changed tracking, for example because the target was deleted or reentered.
|
| 3 |
UPDATE_REASON_STATION_EDIT |
The station, its antenna or its rig was edited; revisions are bumped.
|
| 4 |
UPDATE_REASON_ORBIT_CHANGE |
The bound satellite's elements or attitude changed.
|
| 5 |
UPDATE_REASON_DEORBIT_SCHEDULED |
The bound satellite fired its deorbit burn; station.core.deorbit says when it reenters.
|
| 6 |
UPDATE_REASON_RETUNE |
This session's ReceiverRetune took effect (request_id).
|
| Value |
Name |
Meaning
|
| 0 |
SAMPLE_FORMAT_INT16 |
Big-endian int16 components; divide by 32767. The default.
|
| 1 |
SAMPLE_FORMAT_INT8 |
int8 components; divide by 127.
|
| Value |
Name |
Meaning
|
| 0 |
TX_LIVE_FIELD_UNSPECIFIED |
In a TxUpdateAck result, like an unknown value: a field this client does not know. Ignore that result.
|
| 1 |
TX_LIVE_FIELD_FREQUENCY |
frequency_hz
|
| 2 |
TX_LIVE_FIELD_POWER |
power_watts
|
| 3 |
TX_LIVE_FIELD_BANDWIDTH |
bandwidth_hz
|
| 4 |
TX_LIVE_FIELD_LOW_CUT |
audio_low_cut_hz
|
| 5 |
TX_LIVE_FIELD_FINAL_DRIVE |
final_drive_db
|
| 6 |
TX_LIVE_FIELD_PA_HEADROOM |
pa_headroom_db
|
| 7 |
TX_LIVE_FIELD_AUDIO_COMPRESSION |
audio_compression_db
|
| 8 |
TX_LIVE_FIELD_AUDIO_GAIN |
audio_gain
|
| Value |
Name |
Meaning
|
| 0 |
ANTENNA_MOUNT_FIXED |
No rotator. The default.
|
| 1 |
ANTENNA_MOUNT_AZ |
Azimuth rotator. Elevation stays at the pointing's elevation.
|
| 2 |
ANTENNA_MOUNT_AZEL |
Azimuth and elevation rotator.
|
| Value |
Name |
Meaning
|
| 0 |
POINTING_MODE_FIXED |
Hold the given azimuth and elevation. The default.
|
| 1 |
POINTING_MODE_TRACK |
Follow a target station.
|
| Value |
Name |
Meaning
|
| 0 |
SPIN_AXIS_ORBIT_NORMAL |
Spin about the orbit normal. The default.
|
| 1 |
SPIN_AXIS_NADIR |
Spin about the nadir direction.
|
| 2 |
SPIN_AXIS_VELOCITY |
Spin about the along-track direction.
|
| Value |
Name |
Meaning
|
| 0 |
STATION_KIND_ADHOC |
No persistent station. Only in StationList entries; refused wherever a persistent station is meant.
|
| 1 |
STATION_KIND_GROUND |
Ground station.
|
| 2 |
STATION_KIND_SATELLITE |
User-launched satellite.
|
| Value |
Name |
Meaning
|
| 0 |
STATION_VISIBILITY_UNLISTED |
Private. Other accounts see only the callsign, as an ad-hoc-style entry. The default.
|
| 1 |
STATION_VISIBILITY_PUBLIC |
Listed with id and placement; any signed-in account may receive through it.
|
| Value |
Name |
Meaning
|
| 0 |
SESSION_ROLE_UNSPECIFIED |
Unknown role; show the session without one.
|
| 1 |
SESSION_ROLE_TX |
Transmitter.
|
| 2 |
SESSION_ROLE_RX |
Receiver.
|
| Value |
Name |
Meaning
|
| 0 |
BANNER_LEVEL_INFO |
Information. The default; also how to show unknown levels.
|
| 1 |
BANNER_LEVEL_BAN_NOTICE |
Sent to control sessions of an address that has just been banned. The text explains the ban.
|
| Value |
Name |
Meaning
|
| 0 |
IP_MODERATION_ACTION_UNSPECIFIED |
Refused, so an omitted action never bans.
|
| 1 |
IP_MODERATION_ACTION_UNBAN |
Lift a ban.
|
| 2 |
IP_MODERATION_ACTION_BAN |
Ban an address.
|
Modulations, sources, antenna types, weather layers, duct types and catalog types travel as upper-case ASCII names in string fields and are compared exactly. Servers may add names without a schema change. A server that does not know a name refuses the request with Error or SessionStatus INVALID_REQUEST naming the value. Clients accept names they do not know in server messages and display them as they are.
Used by TransmitterStart.modulation, CoverageMapRequest.modulation, LiveSession.modulation (empty for receivers), TransmitterHealth.modulation and TransmitterImpact.modulation.
| Name |
Description |
Typical bandwidth
|
AM_DSB_FC |
AM, double sideband, full carrier |
10 kHz
|
AM_DSB_SC |
AM, double sideband, suppressed carrier |
6 kHz
|
USB |
Upper sideband |
2.7 kHz
|
LSB |
Lower sideband |
2.7 kHz
|
CW |
Continuous wave (Morse) |
150 Hz
|
NFM |
Narrow FM |
12.5 kHz
|
WFM |
Wide FM |
180 kHz
|
IQ |
External complex baseband supplied by the client |
As declared
|
WSPR |
Weak Signal Propagation Reporter |
6 Hz
|
FT8 |
FT8 |
50 Hz
|
See Modulation Modes for how each mode behaves on air.
Used by TransmitterStart.source_type and TransmitterHealth.source_type.
| Name |
Meaning
|
AUDIO_STREAM |
Mono audio streamed by the client, for example a file or a network stream.
|
MICROPHONE |
Mono audio from a microphone. Identical to AUDIO_STREAM on the wire.
|
WHITE_NOISE |
Generated by the server. Only valid for ROLE_TX_GENERATED.
|
PIPEWIRE |
Mono audio from a desktop audio graph. Identical to AUDIO_STREAM on the wire.
|
GNU_RADIO_IQ |
Complex baseband streamed by the client. Use with modulation IQ.
|
The three audio types differ only in how they are labelled. A third-party client normally uses AUDIO_STREAM or GNU_RADIO_IQ.
Used by AntennaConfig.type.
| Name |
Antenna |
Notes
|
DIPOLE |
Half-wave dipole |
See Dipole Antenna.
|
VERTICAL |
Vertical monopole over ground |
See Vertical Antenna.
|
YAGI_3EL |
Three-element Yagi |
See Yagi Antenna.
|
YAGI_5EL |
Five-element Yagi |
See Yagi Antenna.
|
LOOP |
Full-wave loop |
See Full-Wave Loop Antenna.
|
BEVERAGE |
Beverage receiving antenna |
See Beverage Antenna.
|
LONGWIRE |
Long wire |
See Longwire Antenna.
|
INVERTED_V |
Inverted-V dipole |
See Inverted-V Antenna.
|
EFHW_32M_49_1 |
End-fed half-wave, 32 m, 49:1 transformer |
See End-Fed Half-Wave Antenna.
|
MONOPOLE |
Monopole |
Satellite type; free space.
|
TURNSTILE |
Turnstile (crossed dipoles), circular polarisation |
Satellite and ground station type.
|
CROSSED_YAGI |
Crossed Yagi, circular polarisation |
Steerable ground station type.
|
HELIX |
Axial-mode helix, circular polarisation |
Steerable ground station and satellite type.
|
Satellite antennas are modelled in free space. A NEC deck in nec_deck replaces any template.
Used by WeatherMapRequest.type and WeatherMapResponse.type.
| Name |
Quantity |
Unit
|
DUCT_STRENGTH |
Strength of the strongest tropospheric duct; 0 where there is none |
M-units
|
RAIN_RATE |
Rain rate |
mm/h
|
CLOUD_WATER |
Cloud liquid water content |
g/m³
|
SURFACE_TEMPERATURE |
Air temperature at the surface |
°C
|
LIGHTNING_RATE |
Lightning flash rate |
flashes/min
|
Used by WeatherMapResponse.duct_type.
| Name |
Meaning
|
NONE |
No duct.
|
SURFACE |
Surface duct.
|
ELEVATED |
Elevated duct.
|
Used by CatalogEntrySummary.types.
| Name |
Display name
|
MODULATION |
Modulation
|
AUDIO_ADDON |
Audio add-on
|
THEME |
Theme
|
ACTION |
Tool / action
|
LIBRARY |
Library
|
PRESET |
Preset
|
A geographic position.
message GeoPoint {
double latitude_deg = 1;
double longitude_deg = 2;
double altitude_meters = 3;
}
| # |
Field |
Type |
Description
|
| 1 |
latitude_deg |
double |
Latitude in degrees, −90 to 90. North is positive.
|
| 2 |
longitude_deg |
double |
Longitude in degrees, −180 to 180. East is positive.
|
| 3 |
altitude_meters |
double |
Height in metres. For a ground site, the height of the ground at the site; the antenna height is separate (AntennaConfig.height_meters). For a sub-satellite point or an ephemeris sample, the height above the 6,371 km reference sphere.
|
An antenna: a built-in type or a NEC-2 deck, with its height, bearing, feed line loss and, for steerable antennas, its pointing.
message AntennaConfig {
string type = 1; // antenna type (string enum, see the top of this file)
float height_meters = 2;
float azimuth_deg = 3;
float feedline_loss_db = 4;
float wire_length_meters = 5;
// NEC-2 card deck (UTF-8, <= 262144 bytes). Empty = built-in template for `type`.
string nec_deck = 6;
AntennaPointing pointing = 7;
}
| # |
Field |
Type |
Description
|
| 1 |
type |
string |
Antenna type name, for example DIPOLE. Required, also when nec_deck is set.
|
| 2 |
height_meters |
float |
Height of the antenna above ground in metres, ≥ 0. Satellite antennas use 0.
|
| 3 |
azimuth_deg |
float |
Bearing of the main lobe, or of the wire, in degrees from true north.
|
| 4 |
feedline_loss_db |
float |
Feed line loss in dB, ≥ 0.
|
| 5 |
wire_length_meters |
float |
Wire or element length in metres, ≥ 0. 0 sizes the built-in template for the operating frequency.
|
| 6 |
nec_deck |
string |
NEC-2 card deck in UTF-8, at most 262,144 bytes. Empty selects the built-in template for type. A deck replaces the template: the server solves the geometry itself. Satellite antennas are in free space, so their decks must not contain a GN card. See NEC File Import.
|
| 7 |
pointing |
AntennaPointing |
Pointing of a steerable antenna. In a BoundStation, the antenna's stored default pointing. Unset for a FIXED mount.
|
When nec_deck is not empty it replaces the built-in antenna model: the server solves the geometry itself and derives the feed-point impedance, SWR and radiation pattern. The type field must still contain a valid name. Supported cards and limits are described in NEC File Import. There is no way to upload a precomputed radiation pattern.
The pointing of a steerable antenna. See SimTX API/Tracking and pointing.
message AntennaPointing {
AntennaMount mount = 1;
PointingMode mode = 2;
float azimuth_deg = 3;
float elevation_deg = 4;
bytes target_station_id = 5;
float azimuth_rate_deg_per_sec = 6;
float elevation_rate_deg_per_sec = 7;
}
| # |
Field |
Type |
Description
|
| 1 |
mount |
AntennaMount |
Rotator fitted to the antenna. A FIXED mount has no pointing; the other fields are then unused.
|
| 2 |
mode |
PointingMode |
FIXED: hold azimuth_deg / elevation_deg. TRACK: follow target_station_id.
|
| 3 |
azimuth_deg |
float |
Azimuth in degrees from true north through east. In TRACK mode, the park position the rotator starts from.
|
| 4 |
elevation_deg |
float |
Elevation above the horizon in degrees. An AZ mount keeps this elevation in every mode.
|
| 5 |
target_station_id |
bytes |
TRACK mode: 16-byte UUID of the station to follow, usually a satellite. Empty in FIXED mode.
|
| 6 |
azimuth_rate_deg_per_sec |
float |
Rotator slew rate in azimuth, °/s. 0 selects the default: 6 °/s on an AZEL mount, 3 °/s on an AZ mount.
|
| 7 |
elevation_rate_deg_per_sec |
float |
Rotator slew rate in elevation, °/s. 0 selects the default of 4 °/s.
|
Where a session's antenna points when the session starts: ReceiverStart.aim and TransmitterStart.aim. Unset means the antenna's stored heading. A FIXED mount ignores it, and an AZ mount ignores the elevation; the pointing of SessionStatus BOUND reports the pointing in effect. With tracking.point_antenna set, the aim is the rotator's position when the session starts, and it slews from there towards the target.
message AntennaAim {
float azimuth_deg = 1;
float elevation_deg = 2;
}
| # |
Field |
Type |
Description
|
| 1 |
azimuth_deg |
float |
Azimuth in degrees from true north through east. Finite; normalised to 0 to 360.
|
| 2 |
elevation_deg |
float |
Elevation in degrees, −90 to 90. Ignored by an AZ mount.
|
Where a session, or a coverage prediction, sits: one of the account's persistent stations, or an inline ad-hoc site. Used by ReceiverStart, TransmitterStart and CoverageMapRequest. Exactly one member must be set; a site with neither is refused.
message SessionSite {
oneof site {
StationBinding station = 1; // one of your persistent stations; needs a game ticket
AdhocStation adhoc = 2; // inline site; anonymous OK (TX: see the ad-hoc policy)
}
}
| # |
Field |
Type |
Description
|
| 1 |
station |
StationBinding |
Member of oneof site. One of your persistent stations, or a PUBLIC station of another account for a receiver. Needs a game ticket minted for it.
|
| 2 |
adhoc |
AdhocStation |
Member of oneof site. An inline site. Receivers may use it anonymously; transmitters only under the ad-hoc policy.
|
Which persistent station, antenna and rig a session uses. The binding must match the game ticket of the connection. See Binding a session.
message StationBinding {
bytes station_id = 1;
bytes antenna_id = 2; // empty = the station's first antenna
bytes rig_id = 3; // empty = the station's first rig (by ordinal); rig-less only when it has no rig
}
| # |
Field |
Type |
Description
|
| 1 |
station_id |
bytes |
16-byte UUID of the station. Must be the station the game ticket was minted for.
|
| 2 |
antenna_id |
bytes |
16-byte UUID of the antenna. Empty: the station's first antenna, or the antenna the ticket was minted for if its request named one.
|
| 3 |
rig_id |
bytes |
16-byte UUID of the rig. Empty: the station's first rig by ordinal, or the rig the ticket was minted for if its request named one. The session is rig-less only when the station has no rig.
|
An inline station for anonymous and ad-hoc sessions.
message AdhocStation {
string callsign = 1;
GeoPoint location = 2;
AntennaConfig antenna = 3;
}
| # |
Field |
Type |
Description
|
| 1 |
callsign |
string |
Callsign shown in station lists. Trimmed; 1 to 64 printable characters.
|
| 2 |
location |
GeoPoint |
Site of the station. Required.
|
| 3 |
antenna |
AntennaConfig |
Antenna. Required.
|
Follow a target station, usually a satellite, with the antenna and with Doppler correction. See SimTX API/Tracking and pointing.
message Tracking {
bytes target_station_id = 1;
bool point_antenna = 2; // drive the antenna's rotator toward the target
bool doppler_correct = 3; // RX: shift tuning by the target's Doppler; TX: pre-correct so it arrives on frequency
// Simulation time at which the rotator began slewing toward this target (point_antenna only; both 0 =
// not known). Servers set it in SessionStatus; with the antenna's slew rate it gives the rotator position.
// Ignored in a client's start or AntennaPointingUpdate.
int64 since_epoch_seconds = 4;
int32 since_nanos = 5;
}
| # |
Field |
Type |
Description
|
| 1 |
target_station_id |
bytes |
16-byte UUID of the station to track, usually a satellite.
|
| 2 |
point_antenna |
bool |
Drive the antenna's rotator towards the target. Needs an AZ or AZEL mount.
|
| 3 |
doppler_correct |
bool |
Receiver: shift the tuning by the target's Doppler. Transmitter: pre-correct the carrier so that the signal arrives on frequency at the target.
|
| 4 |
since_epoch_seconds |
int64 |
Simulation time at which the rotator began slewing towards this target, Unix seconds (point_antenna only). Set by servers in SessionStatus BOUND and UPDATED; with the antenna's slew rates it gives the rotator's position for display. Clients leave it unset; servers ignore it in a client's start or AntennaPointingUpdate. 0 together with since_nanos 0: not known.
|
| 5 |
since_nanos |
int32 |
Nanoseconds added to since_epoch_seconds.
|
The fields every view of a persistent station shares. Embedded as core by BoundStation (in session status) and by Station (in the station list).
message StationCore {
bytes station_id = 1; // empty only for ad-hoc StationList entries
int64 revision = 2; // bumped on every edit of the station
StationKind kind = 3;
string name = 4;
string callsign = 5;
string owner_handle = 6;
StationVisibility visibility = 7;
GeoPoint location = 8; // ground: the site; satellite: the sub-satellite point (see the embedding message)
OrbitalElements orbit = 9; // satellites
Attitude attitude = 10; // satellites
Deorbit deorbit = 11; // satellites with a deorbit burn scheduled or done
}
| # |
Field |
Type |
Description
|
| 1 |
station_id |
bytes |
16-byte station UUID. Empty only for the ad-hoc entries of a StationList.
|
| 2 |
revision |
int64 |
Station revision. Bumped on every edit of the station.
|
| 3 |
kind |
StationKind |
GROUND or SATELLITE; ADHOC only in a StationList.
|
| 4 |
name |
string |
Station name, 1 to 64 characters.
|
| 5 |
callsign |
string |
Callsign, 1 to 64 characters.
|
| 6 |
owner_handle |
string |
Handle of the account that owns the station. Empty for ad-hoc entries.
|
| 7 |
visibility |
StationVisibility |
PUBLIC or UNLISTED.
|
| 8 |
location |
GeoPoint |
Ground: the station site. Satellite: the sub-satellite point at the time the containing message was captured.
|
| 9 |
orbit |
OrbitalElements |
Satellites: the current element set. After a deorbit burn, the post-burn elements.
|
| 10 |
attitude |
Attitude |
Satellites: the attitude law.
|
| 11 |
deorbit |
Deorbit |
Satellites whose deorbit burn has fired. Unset otherwise.
|
The station a session is attached to, as the server resolved it. Sent in SessionStatus BOUND, and in UPDATED when the station changed. core.kind is GROUND or SATELLITE. core.location is the site of a ground station, or the sub-satellite point when the status was sent.
message BoundStation {
StationCore core = 1;
bytes antenna_id = 2;
int64 antenna_revision = 3;
bytes rig_id = 4; // empty = rig-less (the station has no rig)
int64 rig_revision = 5;
float pa_cap_watts = 6; // effective PA cap; 0 = uncapped
AntennaConfig antenna = 7; // pointing = the antenna's default pointing
}
| # |
Field |
Type |
Description
|
| 1 |
core |
StationCore |
The station: id, revision, kind, name, callsign, owner, visibility, placement and deorbit state. kind is GROUND or SATELLITE; decoders refuse ADHOC here.
|
| 2 |
antenna_id |
bytes |
16-byte UUID of the bound antenna.
|
| 3 |
antenna_revision |
int64 |
Revision of the bound antenna.
|
| 4 |
rig_id |
bytes |
16-byte UUID of the bound rig. Empty: no rig.
|
| 5 |
rig_revision |
int64 |
Revision of the bound rig; 0 without a rig.
|
| 6 |
pa_cap_watts |
float |
Effective PA cap in watts: the smaller of the rig's cap and the account's tx.pa_limit. 0 = uncapped.
|
| 7 |
antenna |
AntennaConfig |
The bound antenna as the server models it. pointing is the antenna's stored default.
|
The mean orbital elements of a satellite in the simtx-j2-v1 model. See Orbit model.
message OrbitalElements {
string model = 1; // "simtx-j2-v1"
int64 epoch_seconds = 2; // Unix seconds of the element epoch
int32 epoch_nanos = 3;
double semi_major_axis_km = 4;
double eccentricity = 5;
double inclination_deg = 6;
double raan_deg = 7;
double argument_of_perigee_deg = 8;
double mean_anomaly_deg = 9;
}
| # |
Field |
Type |
Description
|
| 1 |
model |
string |
Orbit model. Always simtx-j2-v1; see Orbit model.
|
| 2 |
epoch_seconds |
int64 |
Element epoch, Unix seconds. Set by the account service to the launch instant, or to the burn time after a deorbit burn.
|
| 3 |
epoch_nanos |
int32 |
Nanoseconds added to epoch_seconds, 0 to 999,999,999.
|
| 4 |
semi_major_axis_km |
double |
Mean semi-major axis a in km.
|
| 5 |
eccentricity |
double |
Mean eccentricity e, 0 ≤ e < 1.
|
| 6 |
inclination_deg |
double |
Mean inclination i in degrees, 0 to 180.
|
| 7 |
raan_deg |
double |
Right ascension of the ascending node Ω at the epoch, degrees.
|
| 8 |
argument_of_perigee_deg |
double |
Argument of perigee ω at the epoch, degrees.
|
| 9 |
mean_anomaly_deg |
double |
Mean anomaly M0 at the epoch, degrees.
|
How a satellite's body is oriented. No mode set means nadir pointing with yaw 0. The frames are defined on Satellites.
message Attitude {
message Nadir { double yaw_deg = 1; }
message Inertial { double right_ascension_deg = 1; double declination_deg = 2; double roll_deg = 3; }
message Spin { SpinAxis axis = 1; double rate_rpm = 2; double phase_deg = 3; }
oneof mode {
Nadir nadir = 1;
Inertial inertial = 2;
Spin spin = 3;
}
}
| # |
Field |
Type |
Description
|
| 1 |
nadir |
Nadir |
Member of oneof mode. Nadir pointing with a yaw angle.
|
| 2 |
inertial |
Inertial |
Member of oneof mode. The body z axis held fixed in the inertial frame.
|
| 3 |
spin |
Spin |
Member of oneof mode. Spin about an axis of the orbiting frame.
|
Nadir
| # |
Field |
Type |
Description
|
| 1 |
yaw_deg |
double |
Rotation about the body z axis (nadir), degrees.
|
Inertial
| # |
Field |
Type |
Description
|
| 1 |
right_ascension_deg |
double |
Right ascension α of the body z axis, degrees.
|
| 2 |
declination_deg |
double |
Declination δ of the body z axis, degrees, −90 to 90.
|
| 3 |
roll_deg |
double |
Rotation about the body z axis, degrees. At 0 the body x axis points towards increasing right ascension.
|
Spin
| # |
Field |
Type |
Description
|
| 1 |
axis |
SpinAxis |
Spin axis in the orbiting frame. 0 = ORBIT_NORMAL.
|
| 2 |
rate_rpm |
double |
Spin rate in revolutions per minute, 0 to 60, relative to the orbiting frame.
|
| 3 |
phase_deg |
double |
Spin phase φ0 at the orbit epoch, degrees.
|
The deorbit burn of a satellite, once it has fired. See Deorbit.
message Deorbit {
int64 burn_at_ms = 1;
int64 reentry_at_ms = 2;
GeoPoint reentry_point = 3;
double delta_v_mps = 4;
}
| # |
Field |
Type |
Description
|
| 1 |
burn_at_ms |
int64 |
When the retrograde burn fired, Unix ms.
|
| 2 |
reentry_at_ms |
int64 |
When the satellite reaches 80 km and burns up, Unix ms. Its sessions end at this time.
|
| 3 |
reentry_point |
GeoPoint |
Sub-satellite point at reentry_at_ms; altitude_meters is 80,000.
|
| 4 |
delta_v_mps |
double |
Velocity change of the burn, m/s.
|
The fifteen transmitter imperfection knobs of TransmitterStart. Every knob is optional; an unset knob takes the bound rig's value, or the generic HF preset without a rig. They are rendered in-band, around the carrier. Advanced Transmitter Settings explains what each one does.
message TxImperfections {
optional float final_drive_db = 1;
optional float pa_headroom_db = 2;
optional float audio_compression_db = 3;
optional float pa_softness = 4;
optional float pa_am_pm_deg = 5;
optional float carrier_leak_db = 6;
optional float opposite_sideband_suppression_db = 7;
optional float frequency_offset_hz = 8;
optional float mains_hum_db = 9;
optional float mains_hum_hz = 10;
optional float am_modulation_index = 11;
optional float pa_supply_sag_db = 12;
optional float tx_noise_floor_db = 13;
optional float oscillator_phase_noise_db = 14;
optional float cw_key_rise_ms = 15;
}
| # |
Field |
Type |
Description
|
| 1 |
final_drive_db |
optional float |
Drive level into the final amplifier, dB. −40 to 40; generic default 0.
|
| 2 |
pa_headroom_db |
optional float |
Amplifier headroom above the nominal output, dB. 0.1 to 40; default 12.
|
| 3 |
audio_compression_db |
optional float |
Audio compression, dB. 0 to 30; default 1.5.
|
| 4 |
pa_softness |
optional float |
Softness of the amplifier's saturation curve. 0.5 to 10; default 2.8.
|
| 5 |
pa_am_pm_deg |
optional float |
AM-to-PM conversion at saturation, degrees. 0 to 45; default 6.
|
| 6 |
carrier_leak_db |
optional float |
Carrier suppression, dB below the carrier. 0 to 120; default 60.
|
| 7 |
opposite_sideband_suppression_db |
optional float |
Suppression of the unwanted sideband, dB. 0 to 120; default 60.
|
| 8 |
frequency_offset_hz |
optional float |
Frequency error, Hz; the RF frequency is frequency_hz + offset. −10,000 to 10,000; default 0.
|
| 9 |
mains_hum_db |
optional float |
Mains hum level, dB down. 0 to 120; default 120.
|
| 10 |
mains_hum_hz |
optional float |
Mains hum frequency, Hz. 0 to 400; default 0.
|
| 11 |
am_modulation_index |
optional float |
AM modulation index. 0 to 1.2; default 0.85.
|
| 12 |
pa_supply_sag_db |
optional float |
Supply sag under load, dB. 0 to 30; default 0.
|
| 13 |
tx_noise_floor_db |
optional float |
Broadband transmitter noise, dB down. 0 to 160; default 120.
|
| 14 |
oscillator_phase_noise_db |
optional float |
Oscillator phase noise, dB down. 0 to 160; default 120.
|
| 15 |
cw_key_rise_ms |
optional float |
CW keying rise time, ms. 0 to 50; default 5.
|
One file of an extension catalog entry. Used by CatalogEntry and CatalogUpload.
message CatalogFile {
string path = 1;
string content = 2;
}
| # |
Field |
Type |
Description
|
| 1 |
path |
string |
Relative path, at most 128 characters, / separators, no empty, . or .. segments.
|
| 2 |
content |
string |
Full text of the file, at most 60,000 bytes of UTF-8.
|