Hej folks! I developed and released open-source implementations of CCSDS 124.0-B-1, the lossless compression standard for satellite housekeeping telemetry. They are MIT-licensed and available in six languages: C, C++, Python, Go, Rust, and Java. Check them out at Tanagra Space.
What is CCSDS 124.0-B-1?
Satellites continuously downlink housekeeping telemetry: fixed-length packets of parameters (e.g. temperatures, voltages, and status flags) that barely change from one packet to the next. The standard exploits that redundancy with nothing more than bitwise operations (OR, XOR, and AND), which makes it a good fit for constrained flight processors with real-time demands. It is based on POCKET+, an algorithm designed by the European Space Agency. I wrote about presenting our OPS-SAT-1 implementation at SmallSat 2022 in an earlier post.
From OPS-SAT-1 to Standard
I implemented an earlier version in embedded C for the satellite’s Nanomind 3200 flight computer when I was a spacecraft operations engineer with the European Space Agency’s OPS-SAT-1 mission. We also ran it on the spacecraft’s payload computer. Validating the algorithm and making it flight-proven was quite the adventure that led to its standardization by the Consultative Committee for Space Data Systems (CCSDS):
Evans, D., Labrèche, G., Marszk, D., Bammens, S., Hernández-Cabronero, M., Zelenevskiy, V., Shiradhonkar, V., Starcik, M., & Henkel, M. (2022). Implementing the New CCSDS Housekeeping Data Compression Standard 124.0-B-1 (based on POCKET+) on OPS-SAT-1. Proceedings of the 36th Annual Small Satellite Conference. https://digitalcommons.usu.edu/smallsat/2022/all2022/133/
Releasing these implementations as open source for everyone is a fitting wrap-up to that adventure.
Validation
Every implementation produces byte-identical output to the ESA reference implementation, passes the UAB/CNES cross-validation suite of 24,900 test vectors, and matches the other five languages bit for bit.
The C implementation is of particular interest for flight software because it is MISRA-C:2012 compliant. MISRA C is the de facto coding standard for safety-critical embedded systems, so the library steers clear of the undefined and error-prone corners of the C language. It is also embedded-friendly by design: C99 standard library only, no dependencies, and static allocation throughout, so no malloc and no free. There are no memory leaks: the test-vector, malformed-input, and robustness suites all pass Valgrind checks.