Protocol Documentation
channel.proto
Channel
Channel is a sample of a channel at an instance in time from a independent AVAPS II Style Receiver, which is constructed from analog components. These style receivers have been in use since 1996, and have served the community well for a long time.
The
Field | Type | Label | Description |
---|---|---|---|
id | int32 | required | Database Index - should be unique across a flight and perhaps a project |
created_at | google.protobuf.Timestamp | required | CreatedAt is the timestamp when the database inserted this item |
updated_at | google.protobuf.Timestamp | required | UpdatedAt is the timestamp when the database may have updated this item. |
deleted_at | google.protobuf.Timestamp | optional | DeletedAt is the timestamp when this item was maked as deleted. This field is not currently used in ACS |
instance_id | int32 | required | InstanceID is a unique instance ID assigned at start time to every frame recorded during a particular application instance |
cid | int32 | required | CID is the channel ID, starting from 0 to N-1, where N is the number of channels. |
sample_time | google.protobuf.Timestamp | required | SampleTime is the timestamp when this sample was measured. |
start_time | google.protobuf.Timestamp | required | StartTime is when the channel started. This is constant over the life of a sounding |
launch_detect | google.protobuf.Timestamp | optional | LaunchDetect, if not null, is the crude timestamp when the channel detected the launch detect bit was set. This value, if not empty, is the first ACS system time when the Launch Detect value transmitted by the sonde was non-zero as well as the associated checksum fields around the LaunchDetect value prove a matching checksum. Because of these criteria, the actual launch detect might have occur sooner than the time stored here. |
uuid | string | required | UUID is the sounding UUID. This UUID is unique over a sounding. |
run_state | RunState | required | RunState is the operational run state or health index of the channel. It should be one of the following values. 0 - Invalid Runstate 1 - Channel is operating (recording data) 2 - Channel stopped due to running longer than the maximum time set 3 - Channel stopped due to running longer than the sounding time: that is once launcher detect was triggered, it ran the maximum time. 4 - Channel stopped because it had not received data in some set amount of maximum time 5 - Channel stopped because it could not reconnect to the data stream after some maximal amount of time 6 - Channel stopped because it could not reconnect to the status stream after some maximal amount of time 7 - Channel was manually stopped. |
stream_type | Type | required | StreamType is the type of data stream this channel is decoding as. This should match to the different Telemetry stream types the sonde emits |
human_name | string | required | HumanName is the assigned human readable name associated in a 1:1 relationship with the UUID. This name exists so that soundings can be referred to easily during operations. |
record_time | double | optional | RecordTime is the duration, in fractional seconds, the channel has been running and recording data. |
pll_lock_detect | bool | optional | PllLockDetect is set (to True) if the PLL on the receiver hardware is currently tracking, or locked onto the sonde’s transmit signal. If empty or missing, this indicates the data frame that contained this value was mangled and not properly parsed. |
rssi_power_level | double | optional | RssiPowerLevel is the course signal strength of the sonde in dBm. If this value is missing or empty, it implies the parsing message was garbled |
fm_deviation | double | optional | FmDeviation is the sampled FM deviation of the channel in kHz. If this value is missing or empty, it implies the parsing message was garbled |
frequency_error | double | optional | FrequencyError is the RF frequency error, in Hz If this value is missing or empty, it implies the parsing message was garbled |
RunState
RunState represents the current and final runstate of a channel. Values outside the defined values are errors
Name | Number | Description |
---|---|---|
INVALID_STATE | 0 | |
CHANNEL_RUNNING | 1 | |
CHANNEL_STOPPED_MAX_TIME | 2 | |
CHANNEL_STOPPED_SOUNDING | 3 | |
CHANNEL_STOPPED_NO_DATA | 4 | |
CHANNEL_STOPPED_DATA_RECONNECT | 5 | |
CHANNEL_STOPPED_RCVR_RECONNECT | 6 | |
CHANNEL_STOPPED_MANUAL | 7 |
Type
Type is a channel type (only one type currently)
Name | Number | Description |
---|---|---|
TESTING_TYPE | 0 | |
INVALID_TYPE | 1 | |
TYPE_A | 2 |
chassis.proto
Chassis
Chassis is a sample of a AVAPS II style chassis hardware health
This message is created for AVAPS I and II Style chassis where the sonde interfaces provides some basic PCB temperature and voltage monitoring
Field | Type | Label | Description |
---|---|---|---|
id | int32 | required | Database ID - should be unique across a flight |
created_at | google.protobuf.Timestamp | required | CreatedAt is the timestamp when the database inserted this item |
updated_at | google.protobuf.Timestamp | required | UpdatedAt is the timestamp when the database may have updated this item. |
deleted_at | google.protobuf.Timestamp | optional | DeletedAt is the timestamp when this item was maked as deleted. This field is not currently used in ACS |
instance_id | int32 | required | InstanceID is a unique instance ID assigned at start time to every frame recorded during a particular application instance |
sample_time | google.protobuf.Timestamp | required | SampleTime is the timestamp when this sample was collected*/ |
raw_voltages | bytes | optional | RawVoltages is the raw byte slice read from the chassis monitor for the voltage data |
raw_temps | bytes | optional | RawTemps is the raw byte slice read from the chassis monitor for the temperature data |
v15 | double | optional | V15 if the measured voltage of the 15 volt rail |
v5 | double | optional | V5 is the measured voltage of the 5 volt rail |
temperature | double | optional | Temperature is the sonde interface card’s measured PCB temperature |
control.proto
Control
Control is a representation of a Control-Response sequence issued to some piece of hardware.
Field | Type | Label | Description |
---|---|---|---|
id | int32 | required | Database ID - should be unique across a flight |
created_at | google.protobuf.Timestamp | required | CreatedAt is the timestamp when the database inserted this item |
updated_at | google.protobuf.Timestamp | required | UpdatedAt is the timestamp when the database may have updated this item. |
deleted_at | google.protobuf.Timestamp | optional | DeletedAt is the timestamp when this item was maked as deleted. This field is not currently used in ACS |
instance_id | int32 | required | InstanceID is a unique instance ID assigned at start time to every frame recorded during a particular application instance |
parent | string | required | Parent functions as the name or UUID of the parent command issued. |
Parent is always a UUID, but is either a UUID of a sounding, or a ‘master’ command. If Parent points to any Control.UUID, then this command should be understood as a sub command which was issued as part of some sequence or repeated command. For example, given the following list of commands (P1…Pn and Ua…Ub are actually UUIDs, not abbreviated strings):
ID | Parent | UUID |
1 | "P1" | "Ua" |
2 | "P2" | "Ub" |
3 | "Ua" | "Uc" |
4 | "Ua" | "Ud" |
5 | "P1" | "Ue" |
6 | "Ud" | "Uf" |
If you reformed the above commands into a tree explicitly showing heirarchy, you would end up with something like below:
- P1
- Ua
- Uc
- Ud
- Uf
- Ue
- Ua
- P2
- Ub
This implies that in order to gather all commands associated with a sounding, one must troll the database. | ||||
issued_at | google.protobuf.Timestamp | required | IssuedAt is the timestamp the command was originally issued. This is assigned when the command is issued to the hardware | |
completed_at | google.protobuf.Timestamp | optional | CompletedAt is the timestamp the command completed, and is nil/null if this didn’t complete | |
uuid | string | required | Uuid is the UUID for this single command. This should always be Unique | |
user_id | int32 | required | UserId is the ID of the user responsible for issuing this command. Most often this is the system user, meaning this command was automatically sent as a course of normal operations, but if a user manually issued a command, that user ID will be here. One will need to reference data stored in the .ID portion of the Users data slice to query the details on that user | |
command | bytes | optional | Command is the raw bytes sent down the wire, or if this is a master command, it may be a string prefixed with “master-“. | |
prototype | bytes | optional | Prototype is is part of how the command was formed. Prototype + args = command. Usually, a value of “master” is used if this is command sequence rather than a single command | |
args | bytes | optional | Args is a textual form of the arguments pass to prototype | |
error | string | optional | Error is the returned error from attempting to issue the command. If empty, and .Completed is not nil/null, then there was no error issuing this command | |
response | bytes | optional | Response is the raw bytes returned from the command. For a master command, this is a comma separated list of UUIDs issued on behalf of the sequence. | |
duration | double | optional | Duration is how long the command took to complete in seconds | |
completed | bool | optional | completed is true if the command completed |
gps.proto
Gps
Gps is a representation of an stored and partially decoded GPS message
Field | Type | Label | Description |
---|---|---|---|
id | int32 | required | Database ID - should be unique across a flight |
created_at | google.protobuf.Timestamp | required | CreatedAt is the timestamp when the database inserted this item |
updated_at | google.protobuf.Timestamp | required | UpdatedAt is the timestamp when the database may have updated this item. |
deleted_at | google.protobuf.Timestamp | optional | DeletedAt is the timestamp when this item was maked as deleted. This field is not currently used in ACS |
instance_id | int32 | required | InstanceID is a unique instance ID assigned at start time to every frame recorded during a particular application instance |
sample_time | google.protobuf.Timestamp | required | SampleTime is the timestamp when this message was parsed. |
raw | bytes | required | Raw is the raw byte slice representing the GPS message |
message_type | string | required | MessageType is a human readable string representing the type of message unpacked, The raw message is most likely binary, so this gives hints as to what is encoded. This often a string like “Aid::Eph” or “NMEA::GGA” |
longitude | double | optional | Longitude in decimal degrees, or nil/null if message does not contain this value |
latitude | double | optional | Latitude is the decimal degrees latitude, or nil/null if message does not contain this value |
altitude | double | optional | Altitude is the MSL altitude in meters, or nil/null if message does not contain this value |
speed | double | optional | Speed is the reported speed in m/s, or nil/null if message does not contain this value |
heading | double | optional | Heading is the decimal degrees the message is indicating, or nil/null if message does not contain this value |
gpsfix | int64 | optional | Gpsfix is the fix type the RCVR is in. This is usually some bitmapped int, but the bitmasked value are not defined, or nil/null if message does not contain this value |
nsats | int64 | optional | nsats is the number of SV in track, if known, or nil/null if message does not contain this value |
gps_time | google.protobuf.Timestamp | optional | GpsTime is the derived GPS time, if known, or nil/null if message does not contain this value |
utc_time | google.protobuf.Timestamp | optional | UtcTime is the corrected UTC time, if known, or nil/null if message does not contain this value |
gvlnchr.proto
GvLnchrState
GvLnchrState is snapshot in time of the state of the GV launcher.
Field | Type | Label | Description |
---|---|---|---|
id | int32 | required | Database ID - should be unique across a flight |
created_at | google.protobuf.Timestamp | required | CreatedAt is the timestamp when the database inserted this item |
updated_at | google.protobuf.Timestamp | required | UpdatedAt is the timestamp when the database may have updated this item. |
deleted_at | google.protobuf.Timestamp | optional | DeletedAt is the timestamp when this item was maked as deleted. This field is not currently used in ACS |
instance_id | int32 | required | InstanceID is a unique instance ID assigned at start time to every frame recorded during a particular application instance |
sample_time | google.protobuf.Timestamp | required | SampleTime is the timestamp when this sample was collected*/ |
raw_data | bytes | required | RawData is whatever was read off the wire that decomposes in the rest of the following data. |
Generally, the message is formed as a comma separated value set, where some of the values have special meanings
Item | # Bytes | Value, Range & Description |
1 | 2 | 00= No launcher Action system is healthy, other codes TBD |
2 | 1 | 0 or 1 (0 = Pilot Interlock enabled, 1 = Pilot interlock disabled, OK to launch sonde) Pilot Safety Interlock - STATUS |
3 | 1 | Carriage Motor Status, 1= Static, (note: 2 is undefined), 3= motor active |
4 | 1 | SGV status 1=OPEN, 2= CLOSED, 3=Motor active, 4=Undetermined location |
5 | 1 | EGV Motor Running, 1= Home position, (note: 2 is undefined), 3= Motor active, 4=Undetermined location |
6 | 1 | Trigger Lock Actuator, 1=locked, 2=unlocked, 3=Motor Active, 4=Undetermined location |
7 | 1 | EGV status, 1=OPEN, 2=CLOSED |
8 | 1 | 0 or 1 (0= No sonde, 1= sonde present) sonde in launch tube Sonde Proximity sensor in Bin 1 |
9 | 1 | 0 or 1 (0= No sonde, 1= sonde present) bin column #1 Sonde Proximity sensor in Bin 2 |
10 | 1 | 0 or 1 (0= No sonde, 1= sonde present) bin column #2 Sonde Proximity sensor in Bin 3 |
11 | 1 | 0 or 1 (0= No sonde, 1= sonde present) bin column #3 Sonde Proximity sensor in Bin 4 |
12 | 1 | 0 or 1 (0= No sonde, 1= sonde present) bin column #4 Sonde Proximity sensor in Bin 5 |
13 | 1 | 0 or 1 (0= No sonde, 1= sonde present) bin column #5 Sonde Proximity sensor in Launch Tube |
14 | 2 | Carriage Bin Position ( 00..05) |
15 | 1 | 0 or 1 (0 = OK, 1 = IR Communications ERROR during LDS) Reset to 0 by PN1 command, or at start of LDS command-ERROR |
16 | 1 | 0 or 1 (0 = OK, 1 = timeout ERROR, Carriage Motor) Timeout error of carriage motor-ERROR |
17 | 1 | 0 or 1 (0 = OK, 1 = timeout ERROR, SGV Motor ) Timeout error of SGV motor-ERROR |
18 | 1 | 0 or 1 (0 = OK, 1 = timeout ERROR, EGV Reset Motor) Timeout error of EGV Reset motor-ERROR |
19 | 1 | 0 or 1 (0 = OK, 1 = timeout ERROR, Trigger Lock Actuator) Timeout error of safety servo-ERROR |
20 | 1 | 0 or 1 (0 = OK, 1 = Thermal ERROR, Carriage Motor) Thermal error of carriage motor from Driver IC-ERROR |
21 | 1 | 0 or 1 (0 = OK, 1 = Thermal ERROR, SGV Motor) Thermal error of Launcher motor from Driver IC-ERROR |
22 | 4 | Position pot for Carriage location, 0 to 1023, A/D count value Count position of carriage |
23 | 4 | Trigger Lock Actuator, 0 to 1023 A/D count value Safety Servo position |
24 | 6 | Pressure in units of mb, error response= 9999.0 Pressure sensor on Launcher electronics PCB |
25 | 3 | Humidity in %, error response= 999 SHT75 RH sensor on Launcher electronics PCB |
26 | 5 | -99.0 to +99.0, units are Celsius, error response= 999.0 SHT75 Air Temperature sensor on Launcher electronics PCB |
27 | 5 | -99.0 to +99.0, units are Celsius, error response= 999.0 LM92 Temperature sensor on Launcher electronics PCB |
28 | 5 | -99.0 to +99.0, units are Celsius, error response= 999.0 DS1820 Temperature sensor #1 in Sonde Bin, location Ejection unit |
29 | 5 | -99.0 to +99.0, units are Celsius, error response= 999.0 DS1820 Temperature sensor #2 in Sonde Bin, location Ejection unit |
30 | 5 | -99.0 to +99.0, units are Celsius, error response= 999.0 OptionalL, DS1820 Temperature sensor in Sonde Bin, location TBD |
31 | 5 | -99.0 to +99.0, units are Celsius, error response= 999.0 OptionalL, DS1820 Temperature sensor in Sonde Bin, location TBD |
32 | 5 | -99.0 to +99.0, units are Celsius, error response= 999.0 OptionalL, DS1820 Temperature sensor in Sonde Bin, location TBD |
33 | 4 | ex. format, units in volts, range 00.0 to 50.0, A/D Error = 99.0 +24Vdc System Power Supply |
34 | 4 | ex. format, units in volts, range 00.0 to 50.0, A/D Error = 99.0 +12V Carriage motor supply voltage |
35 | 4 | xx.x format, units in volts, range 00.0 to 50.0, A/D Error = 99.0 +12V DC-DC power supply for Optical proximity sensors |
36 | 4 | xx.x format, units in volts, range 00.0 to 50.0, A/D Error = 99.0 +5V PIC power supply voltage |
37 | 4 | xx.x format, units in volts, range 00.0 to 50.0, A/D Error = 99.0 +44v Solenoid Power Supply |
38 | 4 | xx.x format, units in Amps, range 00.0 to 05.0, A/D Error = 99.0 System Electronics Current |
39 | 4 | xx.x format, units in Amps, range 00.0 to 05.0, A/D Error = 99.0 SGV and EGV Motor Currents |
40 | 1 | 0 or 1 (0 = GPS Re-radiation OFF, 1= GPS Re-radiation ON) Byte flag indicating GPS re-radiation amplifier power is OFF or ON |
Generally the parser should be consulted for exact details | ||||
launcher_health | GvLnchrHealth | optional | LauncherHealth is a self-reported launcher health value. | |
pilot_interlock_armed | bool | optional | PilotInterlockArmed is set to “true” if the pilot controlled interlock is ‘armed’ in that the AVAPS operator can utilize the launcher. | |
carriage_state | GvCarriageState | optional | CarriageState is the state of the GV Launcher Carriage State. | |
safety_gate_valve | GvSafetyGateState | optional | SafetyGateValve is the state of the safety gate valve | |
ejection_gate_valve | GvEjectionGateState | optional | GvEjectionGateValve is the state of the Ejection Gate Value | |
trigger_lock | GvTriggerLockState | optional | TrigerLock is the state of the trigger lock motor assembly | |
egv_opened | bool | optional | EgvOpened is the state of the EGV motor. True indicates it is opened. | |
sonde_in_launcher | bool | optional | SondeInLauncher is true if there is a sonde in the launcher | |
sonde_in_bin1 | bool | optional | SondeInBin1 is true if there is a sonde in a bin1 | |
sonde_in_bin2 | bool | optional | SondeInBin2 is true if there is a sonde in a bin2 | |
sonde_in_bin3 | bool | optional | SondeInBin3 is true if there is a sonde in a bin3 | |
sonde_in_bin4 | bool | optional | SondeInBin4 is true if there is a sonde in a bin4 | |
sonde_in_bin5 | bool | optional | SondeInBin5 is true if there is a sonde in a bin5 | |
carriage_position | GvCarriagePosition | optional | CarriagePosition is the position of the carriage | |
ir_error | bool | optional | IrError is true if there is an IR Error | |
carriage_error | bool | optional | CarriageError is true if there is a carriage error | |
sgv_error | bool | optional | SgvError is true if the SGV motor is in an error condition | |
egv_error | bool | optional | EgvError is true if the EGC motor is in an error condition | |
trigger_lock_error | bool | optional | TriggerLockError is true if there are errors with the trigger lock motor | |
carriage_too_hot | bool | optional | CarriageToHot is true if the SGV motor is in thermal overload | |
sgv_too_hot | bool | optional | SgvTooHot is true if the SGV motor is in thermal overload | |
carriage_adc | int64 | optional | CarriageAdc is the ADC counts that is used to look up the position of the Carriage motor | |
trigger_lock_adc | int64 | optional | TriggerLockAdc is the counts associated with the Trigger Lock | |
pressure | double | optional | Pressure is the value emitted by the onboard barometer | |
humidity | double | optional | Humidity is the humidity in the electronics box | |
air_temperature | double | optional | AirTemperature is the ambient air temperature IN THE ELECTRONICS BOX | |
pcb_temperature | double | optional | PcbTemperature is the PCB (circuit board) temperature | |
optional_temp1 | double | optional | OptionalTemp1 is an arbitrarily placed DS1820B sensor that may not be plugged in | |
optional_temp2 | double | optional | OptionalTemp2 is an arbitrarily placed DS1820B sensor that may not be plugged in | |
optional_temp3 | double | optional | OptionalTemp3 is an arbitrarily placed DS1820B sensor that may not be plugged in | |
optional_temp4 | double | optional | OptionalTemp4 is an arbitrarily placed DS1820B sensor that may not be plugged in | |
optional_temp5 | double | optional | OptionalTemp5 is an arbitrarily placed DS1820B sensor that may not be plugged in | |
v24_mains | double | optional | V24Mains is the 24V Mains input | |
v12_carriage | double | optional | V12Carriage is the 12V input to the carriage motor | |
v12_proximity | double | optional | V12Proximity is the 123V input to the proximity sensors | |
v5_controller | double | optional | V5Controller is the 5V mains to the microcontrollers | |
v44_solenoid | double | optional | V44Solenoid is the 44V input to the solenoids | |
mains_current | double | optional | MainsCurrent is the current draw utilized by the whole system on the 24V lines | |
motor_current | double | optional | MotorCurrent is the current draw utilized by the SGV, EGV, and Trigger lock. Nominally 0.0 amps, but spikes during usage | |
gps_coupling | bool | optional | GpsCoupling is true if the GPS coupler is enabled, and false otherwise. |
GvCarriagePosition
GvCarriagePosition is a representation of the carriage position
These constants define the Launcher carriage position states defined in hardware and mirror constants used in the hardware. Values outside the given ones are completely unknown, undefined, and should be considered highly aberrant.
Name | Number | Description |
---|---|---|
CarriageAtHome | 0 | GvCarriageAtHome indicate the Carriage is under home position |
CarriageAtBin1 | 1 | GvCarriageAtBin1 indicate the Carriage is under bin #1 |
CarriageAtBin2 | 2 | GvCarriageAtBin2 indicate the Carriage is under bin #2 |
CarriageAtBin3 | 3 | GvCarriageAtBin3 indicate the Carriage is under bin #3 |
CarriageAtBin4 | 4 | GvCarriageAtBin4 indicate the Carriage is under bin #4 |
CarriageAtBin5 | 5 | GvCarriageAtBin5 indicate the Carriage is under bin #5 |
CarriageLost | 99 | GvCarriageLost indicate the Carriage is lost and not under a known location |
GvCarriageState
GvCarriageState is a representation of the active state of the carriage motor. Values outside the given ones are completely unknown, undefined, and should be considered highly aberrant.
Name | Number | Description |
---|---|---|
CarriageStationary | 1 | GvCarriageStationary is used when the Carriage is stationary |
CarriageUndefined | 2 | GvCarriageUndefined is used when the Carriage is in undefined state |
CarriageActive | 3 | GvCarriageActive is used when the Carriage is actively moving |
GvEjectionGateState
GvEjectionGateState is a representation of the state of the ejection gate valve, which is the guillotine valve with a revolving motor to close and cock the blade.
These constants are the defined states associated with the EGVs position states and mirror constants used in the hardware. Values outside the given ones are completely unknown, undefined, and should be considered highly aberrant.
Name | Number | Description |
---|---|---|
EjectionGateHome | 1 | GvEjectionGateHome indicates the EjectionGate is In Home / Closed |
EjectionGateMoving | 3 | GvEjectionGateMoving indicates the EjectionGate is actively moving |
EjectionGateUndefined | 4 | GvEjectionGateUndefined indicates the EjectionGate is in undetermined state |
GvLnchrHealth
GvLnchrHealth is a representation of the self-described launcher health, which is defined by the hardware. Values outside the given ones are completely unknown, undefined, and should be considered highly aberrant. These values are not a bitmask/bitmap, so do not try to treat them that way.
Name | Number | Description |
---|---|---|
HealthOk | 0 | GvHealthNominal indicates the launcher has no errors, and is ready to load a sonde |
Health1 | 1 | GvHealth1 indicates the launcher is currently loading or launching a sonde |
Health21 | 21 | GvHealth21 indicates the launcher EGV is closed, SGV is open, Trigger Lock is Unlocked |
Health22 | 22 | Health22 indicates that the GV launcher’s EGV is closed, SGV is open, and the EGV motor is NOT in the home position |
Health23 | 23 | Health23 indicates that the GV launcher’s EGV is closed, SGV is open, Trigger Lock is Unlocked, and the EGV motor is NOT in the home position |
Health24 | 24 | Health24 indicates that the GV launcher’s EGV is closed, SGV is closed, Trigger Lock is Unlocked |
Health25 | 25 | Health25 indicates that the GV launcher’s EGV is closed, SGV is closed, and the EGV motor is NOT in the home position |
Health26 | 26 | Health26 indicates that the GV launcher’s EGV is closed, SGV is closed, Trigger Lock in Unlocked, and the EGV motor not in Home position |
Health27 | 27 | Health27 indicates that the GV launcher’s EGV is open, SGV is closed, and the Trigger Lock is Unlocked |
Health28 | 28 | Health28 indicates that the GV launcher’s EGV is open, SGV is closed, Trigger Lock is Unlocked, and the EGV motor not in Home position |
Health31 | 31 | Health31 indicates that the GV launcher’s EGV is open, SGV is open, and the Trigger Lock is Locked. This should NOT be physically possible |
Health32 | 32 | Health32 indicates that the GV launcher’s EGV is open, SGV is open, and the Trigger Lock is Unlocked |
Health33 | 33 | Health33 indicates that the GV launcher’s EGV is open, SGV is open, Trigger Lock is Unlocked, and the EGV motor not in Home positionHealth33 = 33 |
GvSafetyGateState
SafetyGateState states are used to describe the current behaviour of the GV’s Safety Gate Valve (SGV) The SGV is the upper motor on the launcher’s ejector subsection These constants are the defined states associated with the SGV. These values mirror constants employed by the actual hardware. Values outside the given ones are completely unknown, undefined, and should be considered highly aberrant.
Name | Number | Description |
---|---|---|
SgvOpened | 1 | GvSgvOpened indicates that the SafetyGate is Open |
SgvClosed | 2 | GvSgvClosed indicates that the SafetyGate is Closed |
SgvMoving | 3 | GvSgvMoving indicates that the SafetyGate is actively moving |
SgvUndefined | 4 | GvSgvUndefined indicates that the SafetyGate is in undetermined state |
GvTriggerLockState
GvTriggerLockState is a representation of the trigger lock motor’s position.
These constants define the available Trigger Lock States defined in hardware and mirror constants used in the hardware. Values outside the given ones are completely unknown, undefined, and should be considered highly aberrant.
Name | Number | Description |
---|---|---|
TriggerLockLocked | 1 | GvTriggerLockLocked indicates that the TriggerLock is currently locked |
TriggerLockUnlocked | 2 | GvTriggerLockUnlocked indicates that the TriggerLock is currently unlocked (unsafe) |
TriggerLockMoving | 3 | GvTriggerLockMoving indicates that the TriggerLock is actively moving |
TriggerLockUndefined | 4 | GvTriggerLockUndefined indicates that the TriggerLock is in undetermined state |
iwgadts1.proto
Iwgadts1
Iwgadts1 is a representation of an IWGADTS1 message received over UDP The general documentation source is available at http://www.eol.ucar.edu/iwgadts/ or http://www.eol.ucar.edu/raf/Software/iwgadts/33_ISRSE_IWGADTS.pdf
The fields are somewhat open to debate as what each field means, so everyone does what is right in his own eyes: NCAR botches the timestamp, NOAA Add up to 73 extra fields, some with ‘NONE’ (rather than ,,) as a missing value, NASA does some odd crap with heights. This tries to undo it all. My understanding of IWGADTS is that GPS_MSL_ALT should be altitude, and WGS84_ALT is a correction offset, not the corrected altitude. For this particular problem, the 3 aircraft I am more familiar with, the signature of each is:
- NCAR: GPS_MSL_ALT=height, WGS84_Alt=correction, but empty
- NOAA: GPS_MSL_ALT=height, WGS84_Alt=correction
- NASA: GPS_MSL_ALT=empty, WGS84_Alt=height
Additional fields are allowed and are not unpacked.
Field | Type | Label | Description |
---|---|---|---|
id | int32 | required | Database ID - should be unique across a flight |
created_at | google.protobuf.Timestamp | required | CreatedAt is the timestamp when the database inserted this item |
updated_at | google.protobuf.Timestamp | required | UpdatedAt is the timestamp when the database may have updated this item. |
deleted_at | google.protobuf.Timestamp | optional | DeletedAt is the timestamp when this item was maked as deleted. This field is not currently used in ACS |
instance_id | int32 | required | InstanceID is a unique instance ID assigned at start time to every frame recorded during a particular application instance |
sample_time | google.protobuf.Timestamp | required | SampleTime is the local time when we received the above RawFrame |
raw_frame | bytes | required | RawF.rame is what was received off the wire prior to attempting to decode |
header | string | optional | Header thru SunAzimuthFromGround are defined fields whose meaning should be derived from http://www.eol.ucar.edu/raf/Software/iwgadts/33_ISRSE_IWGADTS.pdf. |
utc | google.protobuf.Timestamp | optional | |
latitude | double | optional | |
longitude | double | optional | |
gps_mean_sea_level | double | optional | |
wgs84_altitude | double | optional | |
pressure_altitude | double | optional | |
radar_altitude | double | optional | |
ground_speed | double | optional | |
true_airspeed | double | optional | |
indicated_airspeed | double | optional | |
mach_number | double | optional | |
vertical_velocity | double | optional | |
true_heading | double | optional | |
track_angle | double | optional | |
drift_angle | double | optional | |
pitch | double | optional | |
roll | double | optional | |
side_slip_angle | double | optional | |
angle_of_attack | double | optional | |
ambient_temperature | double | optional | |
dew_point | double | optional | |
total_temperature | double | optional | |
static_pressure | double | optional | |
dynamic_pressure | double | optional | |
cabin_pressure | double | optional | |
wind_speed | double | optional | |
wind_direction | double | optional | |
vert_wind_speed | double | optional | |
solar_zenith_angle | double | optional | |
sun_azimuth_from_aircraft | double | optional | |
sun_elevation_from_aircraft | double | optional | |
sun_azimuth_from_ground | double | optional |
metadata.proto
Metadata
Metadata is a structure that represents a pieces of metadata stored at various times. It m
Field | Type | Label | Description |
---|---|---|---|
id | int32 | required | Database ID - should be unique across a flight |
created_at | google.protobuf.Timestamp | required | CreatedAt is the timestamp when the database inserted this item |
updated_at | google.protobuf.Timestamp | required | UpdatedAt is the timestamp when the database may have updated this item. |
deleted_at | google.protobuf.Timestamp | optional | DeletedAt is the timestamp when this item was maked as deleted. This field is not currently used in ACS |
instance_id | int32 | required | InstanceID is a unique instance ID assigned at start time to every frame recorded during a particular application instance |
parent | string | required | Parent is the parent of the key:value pair metadata piece. Usually this is a UUID of a sounding, but the additional word “system” is used by ACS. Additional reserved parent words can be defined for future used (eg “aspenqc” or “postflight”) |
key | string | required | Key is a name for the metadata. If this is strictly numeric, it is a known and named metadata piece as defined in AVAPS-Metadata, and that should be consulted for the meaning otherwise, the key is some freehand pieces of text |
value | string | required | Value is a value of associated with the metadata key. The definition is not controlled other than the value must not be entirely empty. |
profile.proto
Profile
Profile is representation of an atmospheric profile
Field | Type | Label | Description |
---|---|---|---|
originator | string | required | Originator is the utility or function that created this Profile |
description | string | required | Description is some human readable explication of why this Profile exists. |
created | google.protobuf.Timestamp | required | Created is the timestamp when this profile was created. |
Profile | Profile.Layer | repeated | Profile is a collection of atmospheric measurements at various layers |
Profile.Layer
Layer is a set of measured parameters at a particular altitude
Field | Type | Label | Description |
---|---|---|---|
sample_time | google.protobuf.Timestamp | required | SampleTime is the local system UTC time when this sample was gathered |
pressure | double | optional | Pressure is the atmospheric pressure at this level, in hPa / mBar |
temperature | double | optional | Temperature is the ambient air temperature, in degrees C |
humidity | double | optional | |
sensor_humidity | double | optional | |
sensor_temp | double | optional | |
wind_speed | double | optional | |
wind_direction | double | optional | |
gps_dz_dt | double | optional | |
p_dz_dt | double | optional | |
latitude | double | optional | |
longitude | double | optional | |
geo_altitude | double | optional | |
gps_altitude | double | optional | |
gps_sats | int64 | optional | |
gps_speed_acc | double | optional | |
sst_body | double | optional | these are only present when the values are usable |
sst_sfc | double | optional | |
checksum_met | bool | optional | ChecksumMet should be true iff the PTU parameters checksum matches the transmitted value |
checksum_winds | bool | optional | ChecksumWinds should be true iff the Wind block parameters checksum matches the transmitted value |
checksum_lla | bool | optional | ChecksumLla should be true iff the Lat, Long, and Alt block parameters checksum matches the transmitted values |
raw_sample.proto
RawSample
RawSample is a representation of raw sample data
Field | Type | Label | Description |
---|---|---|---|
id | int32 | required | Database ID - should be unique across a flight |
created_at | google.protobuf.Timestamp | required | CreatedAt is the timestamp when the database inserted this item |
updated_at | google.protobuf.Timestamp | required | UpdatedAt is the timestamp when the database may have updated this item. |
deleted_at | google.protobuf.Timestamp | optional | DeletedAt is the timestamp when this item was maked as deleted. This field is not currently used in ACS |
instance_id | int32 | required | InstanceID is a unique instance ID assigned at start time to every frame recorded during a particular application instance |
uuid | string | required | Uuid is the declared UUID of the sounding |
raw | bytes | required | Raw is the raw bytes that decomposes into the values |
sample_time | google.protobuf.Timestamp | optional | SampleTime is the local system UTC time when this sample was gathered |
pressure | double | optional | |
temperature | double | optional | |
humidity | double | optional | |
sensor_humidity | double | optional | |
sensor_temp | double | optional | |
ptu_status | int64 | optional | |
ptu_error_code | int64 | optional | |
sst_surface | double | optional | |
sst_body | double | optional | |
internal_temp | double | optional | |
gps_utc_flag | int64 | optional | |
gps_latitude | double | optional | |
gps_longitude | double | optional | |
utc_time1 | double | optional | |
horz_acc | double | optional | |
vert_acc | double | optional | |
gps_speed1 | double | optional | |
gps_heading1 | double | optional | |
gps_vdown1 | double | optional | |
gps_msl_alt1 | double | optional | |
gps_num_svs1 | int64 | optional | |
gps_fix1 | int64 | optional | |
gps_speed_acc1 | double | optional | |
utc1 | google.protobuf.Timestamp | optional | |
gps_speed2 | double | optional | |
gps_heading2 | double | optional | |
gps_vdown2 | double | optional | |
gps_msl_alt2 | double | optional | |
gps_num_svs2 | int64 | optional | |
gps_fix2 | int64 | optional | |
gps_speed_acc2 | double | optional | |
utc2 | google.protobuf.Timestamp | optional | |
chksum_sensor | bool | optional | |
chksum_eng | bool | optional | |
chksum_met | bool | optional | |
chksum_gps0 | bool | optional | |
chksum_gps1 | bool | optional | |
chksum_gps2 | bool | optional | |
chksum_head | bool | optional | |
framecount | int64 | optional | |
launch_detect | int64 | optional | |
stream_type | int64 | optional | |
sonde_id | int64 | optional | |
revision | string | optional | |
battery | double | optional | |
ad_cds_sensor | int64 | optional | |
gps_reacqs | int64 | optional | |
gps_loop_speed | int64 | optional | |
gps_tracking_err | int64 | optional | GpsTrackingErr is a tracking bitmask emitted by the GPS module. The exact mapping can very |
spare_a | int64 | optional | |
spare_b | int64 | optional | |
spare_c | int64 | optional | |
spare_d | int64 | optional | |
spare_e | int64 | optional | |
spare_f | int64 | optional | |
spare_g | int64 | optional | |
spare_h | int64 | optional | |
spare_i | int64 | optional |
reference.proto
RefSample
RefSample is a sampled reference data point
Field | Type | Label | Description |
---|---|---|---|
id | int32 | required | Database ID - should be unique across a flight |
created_at | google.protobuf.Timestamp | required | CreatedAt is the timestamp when the database inserted this item |
updated_at | google.protobuf.Timestamp | required | UpdatedAt is the timestamp when the database may have updated this item. |
deleted_at | google.protobuf.Timestamp | optional | DeletedAt is the timestamp when this item was maked as deleted. This field is not currently used in ACS |
instance_id | int32 | required | InstanceID is a unique instance ID assigned at start time to every frame recorded during a particular application instance |
sample_time | google.protobuf.Timestamp | required | SampleTime is the timestamp when the data stored in this message was gathered. |
raw_data | bytes | optional | RawData is the set of raw bytes read off the wire. See above for how to decipher the data |
source | string | required | Source is the self-named reference source. Ideally this should be model number, serial number, or some sort of identifier of an ASCII instrument |
pressure | double | optional | Pressure is some referentially measured barometer value. Ideally this should be in hPa/mbar. |
temperature | double | optional | Temperature is some referentially measured thermometer value. Ideally this should be in degrees Celsius |
humidity | double | optional | Humidity is some referentially measured hygrometer value. Ideally this should be in % relative humidity |
sampled.proto
Sampled
Sampled is a representation of all the data samples during a sounding or flight
Recension, Editio Princeps
Rather than reusing some of the common words for the various states of cooked data (raw, QCd etc) I have chosen to use more particular wording such that it is easier to discuss what is happening to a sounding as various QC algorithms are systematically applied. In order to aid in basic understanding of the vernacular.
recension: n. a critical revision of a text incorporating the most plausible elements found in varying sources. editio princeps: n. a work is the first printed edition of the work, that previously had existed only in manuscripts, which could be circulated only after being copied by hand
For our uses, Recension is the corrected sounding corpus based on Editio Princeps using the expert knowledge of the instrument, surrounding metadata, to extricate a usable atmospheric profile from the murky quagmire of bytes, bits, and floats.
Writers, and Modifiers
Generally, most fields inside a Sampled structure should be considered “read-only”, in that there ins a single writer, and generally, the fields should be read rather than written. In the comments above each field, there should exist a small block of text that looks like below, which should give insight to the expected writers (which write original data) and modifiers, who may add additional data to each field. It is assumed that anyone with a data file can read whatever they want, for what would be the purpose for writing and disseminating if you could not read the data?
Writers, and Modifiers WRITER(S) : ACS MODIFIERS : None
ACS means tools from the ACS codebase, which might include tools to explicitly export data.
Field | Type | Label | Description |
---|---|---|---|
min_aspen_version | SemVer | required | MinAspenVersion is a version identifier for the requested ASPEN version required to process this data. Ideally this only changes for breaking changes, or when unforeseen data processing mayhem ensues. Not honoring this field should be considered highly dangerous and fraught with data corruption risks |
AcsCreatedVersion | SemVer | required | AcsCreatedVersion is the version of ACS that created this file. The same data is duplicated elsewhere (eg the metadata fields) |
beginning | google.protobuf.Timestamp | optional | Beginning time of Sampled data structure (if known) |
Writers, and Modifiers WRITER(S) : ACS MODIFIERS : ACS, Aspen | ||||
end | google.protobuf.Timestamp | optional | End time of Sampled data structure (if known) |
If the data encoded is a single sounding, this is usually the time when the channel was closed, otherwise this is normally the time when the data was extracted from the data store.
Writers, and Modifiers WRITER(S) : ACS MODIFIERS : ACS, Aspen | ||||
description | string | required | Description is a human readable string describing the data stored within. |
This is usually one of the following values:
A string of the form Instance (42)
generally applied this is incomplete dump of a ACS run instance.
A string of the form project::mission
is a data export from ACS containing a dump of a potentially singular data from a single flight instance related to a project named project
and a flight / mission mission
;
A string in the form EquatorialRegion-AD75A0E8-3C59-4A3B-A747-5AA224D3B0BE
indicates the data within represents a sounding with the automatically assigned name “EquatorialRegion” & UUID “AD75A0E8-3C59-4A3B-A747-5AA224D3B0BE”
A string in the form export
generally means the data within is a dump of all data recorded over multiple missions, projects, or soundings.
Writers, and Modifiers WRITER(S) : ACS MODIFIERS : ACS, Aspen, Other Tooling | ||||
samples | RawSample | repeated | Samples is the set of all data that has been received from all sondes. This essentially is a 1:1 unpacking of binary values without any sort of filtering applied. |
Writers, and Modifiers WRITER(S) : ACS MODIFIERS : None | ||||
editio_princeps | Profile | optional | EditioPrinceps is the first press of a sounding from a set of RawSample collection. |
This is the first pass non-QC’d set of data that represents an atmospheric sample. The data is unmolested in any way, and has had nothing done other than getting the samples into their natural sample frequency. This only exists if the data has been extracted as a sounding.
Writers, and Modifiers WRITER(S) : ACS MODIFIERS : None | ||||
recensions | Profile | repeated | Recensions is a slice of various Profiles that have been polished from the original EditioPrinceps |
Writers, and Modifiers WRITER(S) : Aspen MODIFIERS : Aspen | ||||
metadata | Metadata | repeated | Metadata is a snapshot of metadata related to this sounding, mission, or project. |
End users are expected to NOT overwrite values, but simply add more parameters. In this sense, multiple values with the same parent, key, and differing values indicate that the most recent (eg: higher indexes in the repeated array) should be taken as definitive.
Writers, and Modifiers WRITER(S) : ACS MODIFIERS : Aspen, Others | ||||
iwgadts | Iwgadts1 | repeated | Iwgadts is the set of all received IWGADTS1 messages received from in the time period specified by beginning and end |
Writers, and Modifiers WRITER(S) : ACS MODIFIERS : None | ||||
references | RefSample | repeated | References is a set of reference pressure, temperature, or humidity samples that are taken over the source of a sounding. These values may be missing, or only contain particular parameters given whatever reference(s) that may be attached. |
Writers, and Modifiers WRITER(S) : ACS MODIFIERS : None | ||||
gps | Gps | repeated | gps is the set of all received GPS messages received from the time period specified by beginning and end times |
Writers, and Modifiers WRITER(S) : ACS MODIFIERS : None | ||||
chassis | Chassis | repeated | chassis is a set of chassis health messages received during the time period specified |
Writers, and Modifiers WRITER(S) : ACS MODIFIERS : None | ||||
channel | Channel | repeated | Channel is the collection of channel messages gathered while a channel was running. |
Most of this information is useful only for engineering purpose, and may aid in identifying different technical issues that may occur with a sounding.
Writers, and Modifiers WRITER(S) : ACS MODIFIERS : None | ||||
commands | Control | repeated | Commands is a set of commands that were issued on behalf of, or related to, some specified time period |
Writers, and Modifiers WRITER(S) : ACS MODIFIERS : None | ||||
users | User | repeated | Users is a set of all the users that this system has seen. |
Writers, and Modifiers WRITER(S) : ACS MODIFIERS : None | ||||
syslog | Syslog | repeated | Syslog is a set of all the syslog messages this system has stored |
Writers, and Modifiers WRITER(S) : ACS MODIFIERS : Aspen | ||||
spectrum | Sweep | repeated | Spectrum is a set of spectral sweeps performed over the specified time period. |
Writers, and Modifiers WRITER(S) : ACS MODIFIERS : None | ||||
gv_state | GvLnchrState | repeated | GvState is a set of state measurements taken over the course of a sounding or flight on a NCAR G-V system. This is mostly a large group of engineering data points that can be used to aid in system performance. |
Writers, and Modifiers WRITER(S) : ACS MODIFIERS : None |
SemVer
SemVer is a Semantic Version Identifier, as per https://semver.org
Field | Type | Label | Description |
---|---|---|---|
Major | uint32 | required | MAJOR version when you make incompatible API changes, |
Minor | uint32 | required | MINOR version when you add functionality in a backwards-compatible manner, and |
Patch | uint32 | required | PATCH version when you make backwards-compatible bug fixes. |
Name | string | optional | Name is some human given release name, or version control identifier |
spectrum.proto
Sweep
Sweep is a spectral sweep taken at some point in time.
Most of this structure is metadata boilerplate. The important bits is the RawData byte slice which is a 606 byte long string that looks like the following
473F373635363536363735363636363635353636343636353636363735353538363536393C3935373F3E3A373741423A393A423D37363C3E39383E3B393837373736363736363A423A383837373735373637363C3938373637363735363636433937383739373637383637363837383737363837373839383637373637373738383837393839373637383737383737383739393838383B393739453A38393838383738373938373837373838373837383837393938373A3B393938393737383737373837363738383A3736373739383937373638383838804A3B39383939373939393838393F39383736383736373736363738373637393839394C3D383737363737373837363735353637383636353836353744463937363738393736363536363736353636363536363636000000\r\n
This is a representation of a spectral sweep of 299 points from 400.02 to 406.00MHz spaced at approximately 200KHz. There are 299 serial repetitions an analog to digital conversion (ADC) sample that is a 2 byte hex representation with an additional ignored ‘000000’ followed by a \r\n. Each 2-byte sample is expanded hex, meaning the 2-byte slice sequence of “4f” represents a measurement of 0x4f, or 79 decimal. From there, these ADC counts are converted to a RF power measurement via the following empirical formula:
RF_power_dBm = (count - 363.42) / 2.519
By way of example:
‘47’ -> 0x47 -> 71 -> RF_power_dBm(71) = -110.25 ‘3F’ -> 0x3F -> 63 -> RF_power_dBm(63) = -112.25
This operation is repeated for each of the pairs across the sweep.
The remaining 6 “0” bytes have some meaning, but as they never changes, their values can just be ignored.
Field | Type | Label | Description |
---|---|---|---|
id | int32 | required | Database ID - should be unique across a flight |
created_at | google.protobuf.Timestamp | required | CreatedAt is the timestamp when the database inserted this item |
updated_at | google.protobuf.Timestamp | required | UpdatedAt is the timestamp when the database may have updated this item. |
deleted_at | google.protobuf.Timestamp | optional | DeletedAt is the timestamp when this item was maked as deleted. This field is not currently used in ACS |
instance_id | int32 | required | InstanceID is a unique instance ID assigned at start time to every frame recorded during a particular application instance |
sample_time | google.protobuf.Timestamp | required | SampleTime is the timestamp when the data stored in this message was gathered. |
raw_data | bytes | optional | RawData is the set of raw bytes read off the wire. See above for how to decipher the data |
gaus_sweep | double | repeated | GausSweep is an array of 299 double values that represent the power level of the RF Spectrum from 400.02 to 405.98 MHz in 200kHz steps. If this is missing or there are less values, then this is an incomplete sweep and should be discarded. This is quite ugly, but given that the width (# elements) hasn’t changed in the last 30 years, this structure should be kept for now |
These values are not populated in the database but are populated and values used internally |
syslog.proto
Syslog
Syslog is a representation of an stored log message
Field | Type | Label | Description |
---|---|---|---|
id | int32 | required | Database ID - should be unique across a flight |
created_at | google.protobuf.Timestamp | required | CreatedAt is the timestamp when the database inserted this item |
updated_at | google.protobuf.Timestamp | required | UpdatedAt is the timestamp when the database may have updated this item. |
deleted_at | google.protobuf.Timestamp | optional | DeletedAt is the timestamp when this item was maked as deleted. This field is not currently used in ACS |
instance_id | int32 | required | InstanceID is a unique instance ID assigned at start time to every frame recorded during a particular application instance |
uuid | string | required | Uuid is the Users UUID, which is unique across logins, although the ID is used |
sender | string | required | Sender is the self-described name of who emitted the log message. |
message | string | required | Message is the freeform text message written by sender. There is no rhyme or reason as to what is contained within this, so don’t try to grep for values in here |
user.proto
User
User is a representation of an ACS user, as stored in the database
Field | Type | Label | Description |
---|---|---|---|
id | int32 | required | Database ID - should be unique across a flight |
created_at | google.protobuf.Timestamp | required | CreatedAt is the timestamp when the database inserted this item |
updated_at | google.protobuf.Timestamp | required | UpdatedAt is the timestamp when the database may have updated this item. |
deleted_at | google.protobuf.Timestamp | optional | DeletedAt is the timestamp when this item was maked as deleted. This field is not currently used in ACS |
instance_id | int32 | required | InstanceID is a unique instance ID assigned at start time to every frame recorded during a particular application instance |
uuid | string | required | Uuid is the Users UUID, which is unique across logins, although the ID is used |
string | required | Email is he Users email, which should conform to user@domain.tld | |
agent | string | required | Agent is the User Agent of the Browser the user logged in with. This is taken as-is from the client |
role | int32 | required | Role is the login role the user logged in as. |