Custom Packet Specification and Serialization Strategy #92
Labels
No Label
api
b-api
bug
concepts
duplicate
enhancement
help wanted
invalid
question
wontfix
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: rust/sat-rs#92
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
There is a huge information duplication between ground and on-board software systems because of the need to transport a large number of custom data chunks with various custom formats "over the wire". For regular software systems, a lot of solutions were invented to solve this issue in an efficient manner. Some analysis was conducted on serialization strategies:
serde
which make serialization trivial (and with trivial, I really mean REALLY fucking easy). It is even human-readable. It probably has the most awful memory footprint of all formats. However,gziped JSON strings could be a really nice solution, especially when a lot of memory bandwith is available. Alternatively, formats like MessagePack or BSON could be used to solve the memory bandwidth issue.
protobuf
. This is still a binary serialization format, but there is an external description language to describe the data being exchanged. This could be an especially nice solution if a full standard runtime is available.Another issue which is also related is the information duplication between ground data systems and the on-board software. The ground system oftentimes needs some high-level information of the data being processed, independently of the used serialization format. It might use this information to submit the received data to a database using an ORM system. One possible approach would be to use Rust macros capabilities to attach necessary metadata to Rust structures.
For example the following structure for MGM data is shown, with some added metadata for MIB purposes:
This could for example generate special (static) output structure like this:
These output structures could be used to generate the data format that the ground system requires automatically.. This would be an approach where we don't need auto-generation and the OBSW programmer can still write the data structures however they see fit.
Generating Mission Information Base (MIB) informationto Mission Information Base (MIB) information and Custom Packet SpecificationMission Information Base (MIB) information and Custom Packet Specificationto Custom Packet SpecificationCustom Packet Specificationto Custom Packet Specification and Serialization Strategy