Software Planned Features, Upgrades and TODOs

Priority Key:

  1. Mission Required
  2. Mission Convenience
  3. Future Opportunities

Flight Software

FeaturePriorityHardware UsagesExpected Due DateStatusDescription
W25Q1AllSoonTMIn ProgressNeeded for storing data on modules. Although only W25Q128 chips are used, driver should be able to dynamically support chips of different storage sizes.
Filesystem1AllSoonTMIn ProgressManage the storage and organization of data on a storage chip (W25Q)
RFM95W Driver1RadioDec 2023In ProgressRFM95W driver capable of transmitting and receiving radio frames. Should also support functionality for easily configuring software
KISS Protocol1RadioDec 2023In ReviewSimple packet format protocol for data commonly used with AX.25 and IPv4. 
AX.25 Protocol1RadioMay 2024
Data link protocol for radios. (ong whats with all these standards)
APRS Protocol1Radio

Another packet format mostly for transmitting GPS data.
TFTP Protocol2All

Transport Layer Protocol capable of basic file transfer. Useful if we want to send configuration files
Distributed Time Sync2Radio/All

Synchronize each module's time. Maybe Network Time Protocol?
ICMP Protocol2All

pls ping
VLAN2All

Virtual Local Area Network as a solution for redundant modules
IPv4 Routing2


Forward data packets across devices
RFC11491


Pigeons. 'Nuff said
Configuration Uploads2Radio/AllMay 2024
Support uploading configurations on the fly through GSW. Most device drivers will have functions for changing settings already, but there should be a more standardized way of configuring them. Uplinks should be ignored when rocket is in the air. 
Kalman Filter - Altitude3Autopilot

Reduce noisy data from sensors for improved altitude determinations.
More Sensor Fusion3Autopilot

More sensor fusion algorithms for getting more accurate flight data
Boost Detection1Autopilot/SensorDec 2023In ReviewDetect boost through sensor measurements. Useful for toggling data logging to save storage.
Landing Detection1Autopilot/SensorDec 2023In ReviewDetect landing through sensor measurements. Useful for toggling data logging to save storage.
Platform Support - Linux1AutopilotDec 2023In ReviewLinux Platform Support. MVP is GPIO for handling things like charge deployment.
Platform Support - Arduino3N/A

Arduino Platform Support. Nice to have for training new software people on our software stack due to reduced barrier for entry. Useful for teaching Space Race members interested in doing coding and they happen to be using Arduinos.
Platform Support - ESP323N/A

ESP32s can use Arduino platform, but native support would be good.
Static Code Analysis2All SoonTM
Static code analysis for detecting possible code defects (clangtidy, NASA IKOS)
Unit Testing3AllForever
Most software should be unit tested to reduce errors when modifying pre-existing code
CI/CD2AllSoonTM
GitHub Actions for doing compile checks, running unit tests, linting and auto-formatting to coding standards 

Ground Software

FeaturePriorityExpected Due DateStatusDescription
Flight Computer Uplinking2May 2024
Support uplinks to flight computers given a config file. Commands expected to be sent to ground radio equipment which then sends to the flight computer.
User Interface Improvements3Never
Find a UI person to make Grafana widgets (because UI is not my passion). Or port to another UI (OpenMCT). 
CMake3SoonTM
Nested Makefile PTSD
C++ Feature Spam3SoonTM

Use more modern C++ practices. AKA spam every C++ feature possible into the software, because that's totally not a horrible idea.

Smart pointers and compile time programming would be baller though. 

Simulations

FeaturePriorityExpected Due DateStatusDescription
RocketPy2Sep 2023Sort of DoneRocketPy code for more accurate flight performance predictions. Joy should have the code
Backplane HITL2May 2024
Need to make determinations on implementation. Telemetry Simulator could be repurposed for this.

Other

  • Move Confluence software documentation to GitHub Wiki
  • Onboarding project so I don't need to spend hours teaching noobs to write software
    • C/C++ - 
      • Basic C
      • OOP C++
    • Memory - A uint8_t is an unsigned 8 byte integer
      • Intro To Memory
      • Bit Manipulation
    • Embedded Systems -  Introduce communication protocols and using launch-core
      • GPIO
      • UART
      • I2C
      • SPI
      • Launch-Core Abstractions
    • Scheduling - Mostly how to use launch-core macros. Explain idea of a scheduler. 
    • Networking - Introduce networking concepts. Explain how our infrastructure is setup
      • TCP/IP Model
      • IPv4
      • UDP
  • Doxygen comments + ReadTheDocs would be nice to have at some point