Hardware: https://github.com/UCI-Rocket-Project/rocket2-afs-hardware
Firmware: https://github.com/UCI-Rocket-Project/rocket2-afs-firmware
Hardware: https://github.com/UCI-Rocket-Project/rocket2-ecu-hardware
Firmware: https://github.com/UCI-Rocket-Project/rocket2-ecu-firmware
Hardware: https://github.com/UCI-Rocket-Project/rocket2-gse-hardware
Firmware: https://github.com/UCI-Rocket-Project/rocket2-gse-firmware
Hardware: https://github.com/UCI-Rocket-Project/rocket2-trs-hardware
Firmware: https://github.com/UCI-Rocket-Project/rocket2-trs-firmware
https://github.com/UCI-Rocket-Project/rocket2-webservice-gui
https://github.com/UCI-Rocket-Project/rocket2-database
https://github.com/UCI-Rocket-Project/rocket-tracker
https://github.com/UCI-Rocket-Project/rocket2-cli
Key | Short Key | Connector | Description |
---|---|---|---|
solenoidGn2Fill | GC-GN2-F | GX-16 | Nitrogen vehicle fill, normally closed |
solenoidGn2Vent | GC-GN2-V | GX-16 | Nitrogen GSE panel vent, normally closed |
solenoidGn2Disconnect | GC-GN2-Q | GX-16 | Actuate nitrogen quick disconnect |
solenoidMvasFill | GC-MVS-F | GX-16 | MVAS line fill, normally closed |
solenoidMvasVent | GC-MVS-V | GX-16 | MVAS line vent, normally closed |
solenoidMvasOpen | GC-MVS-O | GX-16 | Open MVAS, normally closed |
solenoidMvasClose | GC-MVS-C | GX-16 | Close MVAS, normally closed |
solenoidLoxVent | GC-LOX-V | GX-16 | Liquid oxygen GSE panel vent, normally open |
solenoidLngVent | GC-LNG-V | GX-16 | Liquid methane GSE panel vent, normally open |
pressureGn2 | GS-GN2 | GX-12 | Nitrogen bottle pressure, max range 5000 psi |
Key | Short Key | Connector | Description |
---|---|---|---|
solenoidCopvVent | EC-CPV-V | GX-16 | COPV vent, normally closed |
solenoidPv1 | EC-PV1 | GX-16 | DLPR Dome fill, normally closed |
solenoidPv2 | EC-PV2 | GX-16 | DLPR Dome vent, normally open |
solenoidVent | EC-VNT | GX-16 | LOX & LNG vent, normally closed |
pressureCopv | ES-CPV | GX-12 | COPV pressure, max range 5000 psi |
pressureLox | ES-LOX-T | GX-12 | Liquid oxygen tank pressure, max range 1000 psi |
pressureLng | ES-LNG-T | GX-12 | Liquid methane tank pressure, max range 1000 psi |
pressureInjectorLox | ES-LOX-I | GX-12 | Injector liquid oxygen pressure, max range 1000 psi |
pressureInjectorLng | ES-LNG-I | GX-12 | Injector methane pressure, max range 1000 psi |
Note: solenoidVent is normally closed, while the vents for the tanks itself is normally open.
- Use
main
instead ofmaster
. - Use KiCAD 8.02.
- Use provided .gitignore. Do not include fabrication files (Gerber, BOM, etc).
- Use KiCAD standard component and footprint library for simple components (passives, transistors, standard footprints, etc). Use UCIRP-KiCAD-Lib as Git submodule for complex and non-standard components. Do not import and use any other online library such as Adafruit, create new symbols and footprints if required and contribute to the shared library.
- Make changes directly on the
main
branch. Ensure local files are up to date before making changes. Merge conflicts are practically irreconcilable, do not attempt to merge. - Hierarchical sheets may be used for repeated schematics.
- Use
main
instead ofmaster
. - Use pre-commit. Copy provided .pre-commit-config.yaml to project repository root and install.
- Python files are formatted with Black. Uncomment relevant section in
.pre-commit-config.yaml
. - C/C++ files are formatted with clang-format. Copy provided .clang-format to project repository root and uncomment relevant section in
.pre-commit-config.yaml
. - Javascript, Typescript, and web-related files are formatted with Prettier. Copy provided .prettierrc to repository root and uncomment relevant section in
.pre-commit-config.yaml
.
- Python files are formatted with Black. Uncomment relevant section in
- Each software module (each repository) shall have a singular command or script that enables the whole module.
- Naming conventions are as follows:
- Files:
snake_case.c
- Variables:
camelCase
- Constant variables:
UPPER_SNAKE_CASE
- Functions:
PascalCase
- Types:
PascalCase
- Private variables within classes:
_camelCaseWithUnderscorePrefix
- Files:
- Follow all items in Software Contributing Guidelines.
- Use PlatformIO.
All ground communication will be over TCP/IP Ethernet and use the standardized packet format sent via raw bytes. All packets are packed little-endian.
Checksums are CRC-32 (polynomial 0x04C11DB7
). See files for CRC implementation in C++, this CRC is consistent with Python binascii.crc32()
. This additional layer of checksum is added to ensure data integrity over embedded serial busses.
Subnet 10.0.0.1/16
. DHCP Range 10.0.255.0/24
. All other IPs reserved.
IP: 10.0.2.0
.
Open ports 10001-10002
for commands and data. See below for packet format.
IP: 10.0.2.1
.
Open ports 10001-10002
for commands and data. See below for packet format.
struct gseCommand {
bool igniter0Fire;
bool igniter1Fire;
bool alarm;
bool solenoidStateGn2Fill;
bool solenoidStateGn2Vent;
bool solenoidStateGn2Disconnect;
bool solenoidStateMvasFill;
bool solenoidStateMvasVent;
bool solenoidStateMvasOpen;
bool solenoidStateMvasClose;
bool solenoidStateLoxVent;
bool solenoidStateLngVent;
uint32_t crc;
};
Key | Data Type | Description |
---|---|---|
igniter0Fire | bool |
Fire igniter 0 |
igniter1Fire | bool |
Fire igniter 1 |
alarm | bool |
Sound alarm |
solenoidStateGn2Fill | bool |
Nitrogen vehicle fill, normally closed |
solenoidStateGn2Vent | bool |
Nitrogen GSE panel vent, normally closed |
solenoidStateGn2Disconnect | bool |
Actuate nitrogen quick disconnect |
solenoidStateMvasFill | bool |
MVAS line fill, normally closed |
solenoidStateMvasVent | bool |
MVAS line vent, normally closed |
solenoidStateMvasOpen | bool |
Open MVAS, normally closed |
solenoidStateMvasClose | bool |
Close MVAS, normally closed |
solenoidStateLoxVent | bool |
Liquid oxygen GSE panel vent, normally open |
solenoidStateLngVent | bool |
Liquid methane GSE panel vent, normally open |
All fields shall be filled with valid command. For solenoids, a value of
1
ortrue
always corresponds to an energized value. A value of0
orfalse
always corresponds to a non-energized valve, regardless of solenoid type.
struct gseData {
uint32_t timestamp;
bool igniterArmed;
bool igniter0Continuity;
bool igniter1Continuity;
bool igniterInternalState0;
bool igniterInternalState1;
bool alarmInternalState;
bool solenoidInternalStateGn2Fill;
bool solenoidInternalStateGn2Vent;
bool solenoidInternalStateGn2Disconnect;
bool solenoidInternalStateMvasFill;
bool solenoidInternalStateMvasVent;
bool solenoidInternalStateMvasOpen;
bool solenoidInternalStateMvasClose;
bool solenoidInternalStateLoxVent;
bool solenoidInternalStateLngVent;
float supplyVoltage0 = std::nanf("");
float supplyVoltage1 = std::nanf("");
float solenoidCurrentGn2Fill = std::nanf("");
float solenoidCurrentGn2Vent = std::nanf("");
float solenoidCurrentGn2Disconnect = std::nanf("");
float solenoidCurrentMvasFill = std::nanf("");
float solenoidCurrentMvasVent = std::nanf("");
float solenoidCurrentMvasOpen = std::nanf("");
float solenoidCurrentMvasClose = std::nanf("");
float solenoidCurrentLoxVent = std::nanf("");
float solenoidCurrentLngVent = std::nanf("");
float temperatureLox = std::nanf("");
float temperatureLng = std::nanf("");
float pressureGn2 = std::nanf("");
uint32_t crc;
};
Key | Data Type | Units | Description |
---|---|---|---|
timestamp | unsigned long |
Milliseconds since Unix Epoch | |
igniterArmed | bool |
Igniter arming key state, 1 for armed |
|
igniter0Continuity | bool |
Igniter 0 continuity, 1 for continuity detected |
|
igniter1Continuity | bool |
Igniter 1 continuity, 1 for continuity detected |
|
igniterInternalState0 | bool |
Igniter 0 fire state feedback | |
igniterInternalState1 | bool |
Igniter 1 fire state feedback | |
alarmInternalState1 | bool |
Alarm state feedback | |
solenoidInternalStateGn2Fill | bool |
Nitrogen vehicle fill solenoid state feedback | |
solenoidInternalStateGn2Vent | bool |
Nitrogen GSE panel vent solenoid state feedback | |
solenoidInternalStateGn2Disconnect | bool |
Nitrogen quick disconnect solenoid state feedback | |
solenoidInternalStateMvasFill | bool |
MVAS line fill solenoid state feedback | |
solenoidInternalStateMvasVent | bool |
MVAS line vent solenoid state feedback | |
solenoidInternalStateMvasOpen | bool |
MVAS open solenoid state feedback | |
solenoidInternalStateMvasClose | bool |
MVAS close solenoid state feedback | |
solenoidInternalStateLoxVent | bool |
Liquid oxygen GSE panel vent solenoid state feedback | |
solenoidInternalStateLngVent | bool |
Liquid methane GSE panel vent solenoid state feedback | |
supplyVoltage0 | float |
Power supply 0 voltage | |
supplyVoltage1 | float |
Power supply 1 voltage | |
solenoidCurrentGn2Fill | float |
Nitrogen vehicle fill solenoid current feedback | |
solenoidCurrentGn2Vent | float |
Nitrogen GSE panel vent solenoid current feedback | |
solenoidCurrentGn2Disconnect | float |
Nitrogen quick disconnect solenoid current feedback | |
solenoidCurrentMvasFill | float |
MVAS line fill solenoid current feedback | |
solenoidCurrentMvasVent | float |
MVAS line vent solenoid current feedback | |
solenoidCurrentMvasOpen | float |
MVAS open solenoid current feedback | |
solenoidCurrentMvasClose | float |
MVAS close solenoid current feedback | |
solenoidCurrentLoxVent | float |
Liquid oxygen GSE panel vent solenoid current feedback | |
solenoidCurrentLngVent | float |
Liquid methane GSE panel vent solenoid current feedback | |
temperatureLox | float |
Liquid oxygen temperature | |
temperatureLng | float |
Liquid methane temperature | |
pressureGn2 | float |
Nitrogen bottle pressure, max range 5000 psi |
timestamp
,igniterArmed
,igniterContinuity
, andsolenoidInternalState*
fields are required. All other fields are optional and shall remain its default value to indicate no data.
Pressure data is reported in Volts, calibrated for device frontend and ADC, conversion to pressure shall be handled by ground systems.
struct ecuCommand {
bool solenoidStateCopvVent;
bool solenoidStatePv1;
bool solenoidStatePv2;
bool solenoidStateVent;
uint32_t crc;
};
Key | Data Type | Description |
---|---|---|
solenoidStateCopvVent | bool |
COPV vent, normally closed |
solenoidStatePv1 | bool |
DLPR Dome fill, normally closed |
solenoidStatePv2 | bool |
DLPR Dome vent, normally open |
solenoidStateVent | bool |
LOX & LNG vent, normally closed |
All fields shall be filled with valid command. For solenoids, a value of
1
ortrue
always corresponds to an energized value. A value of0
orfalse
always corresponds to a non-energized valve, regardless of solenoid type.
struct ecuData {
uint32_t timestamp;
float packetRssi;
float packetLoss;
bool solenoidInternalStateCopvVent;
bool solenoidInternalStatePv1;
bool solenoidInternalStatePv2;
bool solenoidInternalStateVent;
float supplyVoltage = std::nanf("");
float batteryVoltage = std::nanf("");
float solenoidCurrentCopvVent = std::nanf("");
float solenoidCurrentPv1 = std::nanf("");
float solenoidCurrentPv2 = std::nanf("");
float solenoidCurrentVent = std::nanf("");
float temperatureCopv = std::nanf("");
float pressureCopv = std::nanf("");
float pressureLox = std::nanf("");
float pressureLng = std::nanf("");
float pressureInjectorLox = std::nanf("");
float pressureInjectorLng = std::nanf("");
float angularVelocityX = std::nanf("");
float angularVelocityY = std::nanf("");
float angularVelocityZ = std::nanf("");
float accelerationX = std::nanf("");
float accelerationY = std::nanf("");
float accelerationZ = std::nanf("");
float magneticFieldX = std::nanf("");
float magneticFieldY = std::nanf("");
float magneticFieldZ = std::nanf("");
float temperature = std::nanf("");
float altitude = std::nanf("");
float ecefPositionX = std::nanf("");
float ecefPositionY = std::nanf("");
float ecefPositionZ = std::nanf("");
float ecefPositionAccuracy = std::nanf("");
float ecefVelocityX = std::nanf("");
float ecefVelocityY = std::nanf("");
float ecefVelocityZ = std::nanf("");
float ecefVelocityAccuracy = std::nanf("");
uint32_t crc;
};
Key | Data Type | Units | Description |
---|---|---|---|
timestamp | unsigned long |
Milliseconds since Unix Epoch | |
packetRssi | float |
Radio packet receive signal strength indicator | |
packetLoss | float |
Radio packet loss rate ratio | |
solenoidInternalStateCopvVent | bool |
COPV vent solenoid state feedback | |
solenoidInternalStatePv1 | bool |
DLPR Dome fill solenoid state feedback | |
solenoidInternalStatePv2 | bool |
DLPR Dome vent solenoid state feedback | |
solenoidInternalStateVent | bool |
LOX & LNG vent solenoid state feedback | |
supplyVoltage | float |
Power supply voltage | |
batteryVoltage | float |
Battery supply voltage | |
solenoidCurrentCopvVent | float |
COPV vent solenoid current feedback | |
solenoidCurrentPv1 | float |
DLPR Dome fill solenoid current feedback | |
solenoidCurrentPv2 | float |
DLPR Dome vent solenoid current feedback | |
solenoidCurrentVent | float |
LOX & LNG vent solenoid current feedback | |
temperatureCopv | float |
COPV temperature | |
pressureCopv | float |
COPV pressure, max range 5000 psi | |
pressureLox | float |
Liquid oxygen tank pressure, max range 1000 psi | |
pressureLng | float |
Liquid methane tank pressure, max range 1000 psi | |
pressureInjectorLox | float |
Injector liquid oxygen pressure, max range 1000 psi | |
pressureInjectorLng | float |
Injector methane pressure, max range 1000 psi | |
angularVelocityX | float |
Angular velocity counterclockwise along x-axis, launch vehicle frame | |
angularVelocityY | float |
Angular velocity counterclockwise along y-axis, launch vehicle frame | |
angularVelocityZ | float |
Angular velocity counterclockwise along z-axis, launch vehicle frame | |
accelerationX | float |
Acceleration along x-axis, launch vehicle frame | |
accelerationY | float |
Acceleration along y-axis, launch vehicle frame | |
accelerationZ | float |
Acceleration along z-axis, launch vehicle frame | |
magneticFieldX | float |
Magnetic field along x-axis, launch vehicle frame | |
magneticFieldY | float |
Magnetic field along y-axis, launch vehicle frame | |
magneticFieldZ | float |
Magnetic field along z-axis, launch vehicle frame | |
temperature | float |
Environment temperature | |
altitude | float |
Mean sea level altitude | |
ecefPositionX | float |
GNSS Earth-Centered Earth-Fixed x position | |
ecefPositionY | float |
GNSS Earth-Centered Earth-Fixed y position | |
ecefPositionZ | float |
GNSS Earth-Centered Earth-Fixed z position | |
ecefPositionAccuracy | float |
GNSS estimated position accuracy | |
ecefVelocityX | float |
GNSS Earth-Centered Earth-Fixed x velocity | |
ecefVelocityY | float |
GNSS Earth-Centered Earth-Fixed y velocity | |
ecefVelocityZ | float |
GNSS Earth-Centered Earth-Fixed z velocity | |
ecefVelocityAccuracy | float |
GNSS estimated velocity accuracy |
timestamp
field is required. All other fields are optional and shall remain its default value to indicate no data.
Pressure data is reported in Volts, calibrated for device frontend and ADC, conversion to pressure shall be handled by ground systems.
All data stored into onboard memory will use the standardized packet. All packets are 64 bytes aligned and packed little-endian. Checksums are IBM CRC-16 (polynomial 0x8005
). See files for CRC implementation in C++.
struct afsTelemetryData {
uint8_t type = 0x00;
uint32_t timestamp;
uint8_t state;
int16_t angularVelocityX = 0xFFFF;
int16_t angularVelocityY = 0xFFFF;
int16_t angularVelocityZ = 0xFFFF;
int16_t accelerationX = 0xFFFF;
int16_t accelerationY = 0xFFFF;
int16_t accelerationZ = 0xFFFF;
int16_t magneticFieldX = 0xFFFF;
int16_t magneticFieldY = 0xFFFF;
int16_t magneticFieldZ = 0xFFFF;
int16_t temperature = 0xFFFF;
int32_t altitude = 0xFFFFFFFF;
int32_t ecefPositionX = 0xFFFFFFFF;
int32_t ecefPositionY = 0xFFFFFFFF;
int32_t ecefPositionZ = 0xFFFFFFFF;
uint32_t ecefPositionAccuracy = 0xFFFFFFFF;
int32_t ecefVelocityX = 0xFFFFFFFF;
int32_t ecefVelocityY = 0xFFFFFFFF;
int32_t ecefVelocityZ = 0xFFFFFFFF;
uint32_t ecefVelocityAccuracy = 0xFFFFFFFF;
uint16_t crc = 0x0000;
};
Key | Data Type | Units | Description |
---|---|---|---|
timestamp | unsigned long |
Milliseconds since Unix Epoch | |
state | unsigned char |
System state, see AfsState struct below |
|
angularVelocityX | signed short |
Angular velocity counterclockwise along x-axis, launch vehicle frame | |
angularVelocityY | signed short |
Angular velocity counterclockwise along y-axis, launch vehicle frame | |
angularVelocityZ | signed short |
Angular velocity counterclockwise along z-axis, launch vehicle frame | |
accelerationX | signed short |
Acceleration along x-axis, launch vehicle frame | |
accelerationY | signed short |
Acceleration along y-axis, launch vehicle frame | |
accelerationZ | signed short |
Acceleration along z-axis, launch vehicle frame | |
magneticFieldX | signed short |
Magnetic field along x-axis, launch vehicle frame | |
magneticFieldY | signed short |
Magnetic field along y-axis, launch vehicle frame | |
magneticFieldZ | signed short |
Magnetic field along z-axis, launch vehicle frame | |
temperature | signed short |
Magnetic field along z-axis, launch vehicle frame | |
altitude | signed long |
Mean sea level altitude | |
ecefPositionX | signed long |
GNSS Earth-Centered Earth-Fixed x position | |
ecefPositionY | signed long |
GNSS Earth-Centered Earth-Fixed y position | |
ecefPositionZ | signed long |
GNSS Earth-Centered Earth-Fixed z position | |
ecefPositionAccuracy | unsigned long |
GNSS estimated position accuracy | |
ecefVelocityX | signed long |
GNSS Earth-Centered Earth-Fixed x velocity | |
ecefVelocityY | signed long |
GNSS Earth-Centered Earth-Fixed y velocity | |
ecefVelocityZ | signed long |
GNSS Earth-Centered Earth-Fixed z velocity | |
ecefVelocityAccuracy | unsigned long |
GNSS estimated velocity accuracy |
struct AfsState {
bool armPinState : 1; // 0: unarmed, 1: armed
bool drogueContinuity : 1; // 0: no continuity, 1: continuity
bool mainContinuity : 1; // 0: no continuity, 1: continuity
uint16_t : 1; // reserved
/**
* 0x0: standby
* 0x1: armed
* 0x2: boost
* 0x3: coast
* 0x4: apogee
* 0x5: drogue fired
* 0x6: drogue opened
* 0x7 drogue failure
* 0x8: main fired
* 0x9: main opened
* 0xA: main failure
* 0xB: land
*/
uint8_t state : 4;
};
timestamp
andstate
fields are required. All other fields are optional and shall remain its default value to indicate no data.
struct ecuTelemetryData {
uint8_t type = 0x10;
uint32_t timestamp;
uint64_t : 8;
int16_t angularVelocityX = 0xFFFF;
int16_t angularVelocityY = 0xFFFF;
int16_t angularVelocityZ = 0xFFFF;
int16_t accelerationX = 0xFFFF;
int16_t accelerationY = 0xFFFF;
int16_t accelerationZ = 0xFFFF;
int16_t magneticFieldX = 0xFFFF;
int16_t magneticFieldY = 0xFFFF;
int16_t magneticFieldZ = 0xFFFF;
int16_t temperature = 0xFFFF;
int32_t altitude = 0xFFFFFFFF;
int32_t ecefPositionX = 0xFFFFFFFF;
int32_t ecefPositionY = 0xFFFFFFFF;
int32_t ecefPositionZ = 0xFFFFFFFF;
uint32_t ecefPositionAccuracy = 0xFFFFFFFF;
int32_t ecefVelocityX = 0xFFFFFFFF;
int32_t ecefVelocityY = 0xFFFFFFFF;
int32_t ecefVelocityZ = 0xFFFFFFFF;
uint32_t ecefVelocityAccuracy = 0xFFFFFFFF;
uint16_t crc = 0x0000;
};
Key | Data Type | Units | Description |
---|---|---|---|
timestamp | unsigned long |
Milliseconds since Unix Epoch | |
angularVelocityX | signed short |
Angular velocity counterclockwise along x-axis, launch vehicle frame | |
angularVelocityY | signed short |
Angular velocity counterclockwise along y-axis, launch vehicle frame | |
angularVelocityZ | signed short |
Angular velocity counterclockwise along z-axis, launch vehicle frame | |
accelerationX | signed short |
Acceleration along x-axis, launch vehicle frame | |
accelerationY | signed short |
Acceleration along y-axis, launch vehicle frame | |
accelerationZ | signed short |
Acceleration along z-axis, launch vehicle frame | |
magneticFieldX | signed short |
Magnetic field along x-axis, launch vehicle frame | |
magneticFieldY | signed short |
Magnetic field along y-axis, launch vehicle frame | |
magneticFieldZ | signed short |
Magnetic field along z-axis, launch vehicle frame | |
temperature | signed short |
Magnetic field along z-axis, launch vehicle frame | |
altitude | signed long |
Mean sea level altitude | |
ecefPositionX | signed long |
GNSS Earth-Centered Earth-Fixed x position | |
ecefPositionY | signed long |
GNSS Earth-Centered Earth-Fixed y position | |
ecefPositionZ | signed long |
GNSS Earth-Centered Earth-Fixed z position | |
ecefPositionAccuracy | unsigned long |
GNSS estimated position accuracy | |
ecefVelocityX | signed long |
GNSS Earth-Centered Earth-Fixed x velocity | |
ecefVelocityY | signed long |
GNSS Earth-Centered Earth-Fixed y velocity | |
ecefVelocityZ | signed long |
GNSS Earth-Centered Earth-Fixed z velocity | |
ecefVelocityAccuracy | unsigned long |
GNSS estimated velocity accuracy |
timestamp
field is required. All other fields are optional and shall remain its default value to indicate no data.
struct ecuFluidSystemData {
uint8_t type = 0x11;
uint32_t timestamp = 0xFFFFFFFF;
uint16_t supplyVoltage = 0xFFFF;
uint16_t batteryVoltage = 0xFFFF;
uint64_t : 4;
bool solenoidStateCopvVent : 1;
bool solenoidStatePv1 : 1;
bool solenoidStatePv2 : 1;
bool solenoidStateVent : 1;
uint16_t solenoidCurrentCopvVent = 0xFFFF;
uint16_t solenoidCurrentPv1 = 0xFFFF;
uint16_t solenoidCurrentPv2 = 0xFFFF;
uint16_t solenoidCurrentVent = 0xFFFF;
int16_t temperatureCopv = 0xFFFF;
uint16_t pressureCopv = 0xFFFF;
uint16_t pressureLox = 0xFFFF;
uint16_t pressureLng = 0xFFFF;
uint16_t pressureInjectorLox = 0xFFFF;
uint16_t pressureInjectorLng = 0xFFFF;
uint64_t : 64;
uint64_t : 64;
uint64_t : 64;
uint64_t : 64;
uint16_t crc = 0x0000;
};
Key | Data Type | Units | Description |
---|---|---|---|
timestamp | unsigned long |
Milliseconds since Unix Epoch | |
supplyVoltage | unsigned short |
Power supply voltage | |
batteryVoltage | unsigned short |
Battery supply voltage | |
solenoidStateCopvVent | bool |
COPV vent solenoid state | |
solenoidStatePv1 | bool |
DLPR Dome fill solenoid state | |
solenoidStatePv2 | bool |
DLPR Dome vent solenoid state | |
solenoidStateVent | bool |
LOX & LNG vent solenoid state | |
solenoidCurrentCopvVent | unsigned short |
COPV vent solenoid current feedback | |
solenoidCurrentPv1 | unsigned short |
DLPR Dome fill solenoid current feedback | |
solenoidCurrentPv2 | unsigned short |
DLPR Dome vent solenoid current feedback | |
solenoidCurrentVent | unsigned short |
LOX & LNG vent solenoid current feedback | |
temperatureCopv | signed short |
COPV temperature | |
pressureCopv | unsigned short |
COPV pressure, max range 5000 psi | |
pressureLox | unsigned short |
Liquid oxygen tank pressure, max range 1000 psi | |
pressureLng | unsigned short |
Liquid methane tank pressure, max range 1000 psi | |
pressureInjectorLox | unsigned short |
Injector oxygen pressure, max range 1000 psi | |
pressureInjectorLng | unsigned short |
Injector methane pressure, max range 1000 psi |
timestamp
field is required. All other fields are optional and shall remain its default value to indicate no data.
- Data types are organized little-endian in memory.
- Packets are sent as raw bytes, least significant byte first, most significant bit first (unless superseded by protocol convention).
A sample transmission sequence is as follows:
void SendData(DataType *data) {
for (int i = 0; i < sizeof(DataType); i++) {
SendByte(*((uint8_t *)data + i));
}
}
void SendByte(uint8_t byte) {
for (int i = 7; i >= 0; i--) {
SendBit((byte & (1 << i)) >> i);
}
}
A sample struct like so,
struct DataType {
uint8_t a = 0xAA;
uint16_t b = 0x00BB;
};
would be sent as follows (leftmost bit first, spaces added for readability): 1010 1010 1011 1011 0000 0000
GX16 Connector
1: +24V
2: GND
XT60 Connector
1 (Square): +24V
2 (Round): GND
GX16 Connector
1: +24V
2: Control
3: GND
GX12 Connector
1: +24V
2: Signal
3: GND
ANSI Miniature Thermocouple Connector (K Type, Yellow)
+: Nickel-Chromium
-: Nickel-Alumel
GX12 Connector
1: +24V
2: CAN High
3: CAN Low
4: GND