Completed the initial implementation of the messaging modules, which includes (from bottom to top):
Private Key
Obtains, verifies, and provides access to the private key stored in FRAM
XOR Cipher
Decrypts messages using the previously mentioned private key as an XOR Cipher
Protobuf
Updated proto message settings to be clean and satisfy our mission and internal software requirements
Have 3 top-level services: Protocol; Telecommand; File Transfer. See below for more details
CRC
Pulled in a well-tested public domain CRC calculator (for message headers)
Message
Defines message header
Wraps and unwraps messages (all serialization, decryption, etc.)
Protocol Service
Provides API for processing/generating ACKs and NACKs
Telecommand Service -> Previously known as the Command Centre
Provides API for processing/executing Telecommands
File Transfer Service -> Previously known as the Downlink Manager
Provides API for storing/preparing frames out of telemetry (or other data to be downlinked)
Provide API for obtaining frames
In addition to the implementation of the above modues, I also tied them into the appropriate higher-level modules (i.e. the Communication Tasks and the Dosimeter subsystem module). I also modified a few settings in the protobuf compiler and suppressed a few annoying GCC warnings (don't worry, I confirmed that the warnings were due to bugs in GCC and not in our code).
A note for future work though: the telecommands currently implemented by this PR is a very basic set of essential commands. We should aim to add a lot more that provide more nuanced control of the operation of our Satellite; changing lengths of timers, changing error limits, etc. This is something that the CSA mentioned a while ago, and should still be implemented. It will not be included in this PR as this is already pretty huge.
Also, future work may need to be done regarding error handling; this is still a big can of worms that should be tackled fairly soon as we now have fairly large pieces of our software coming together.
Also (part 3): The File Transfer Service does not account for image packets (large amounts of data that we may want to be sent separately), so that feature/support will likely need to be added in a future PR.
Completed the initial implementation of the messaging modules, which includes (from bottom to top):
In addition to the implementation of the above modues, I also tied them into the appropriate higher-level modules (i.e. the Communication Tasks and the Dosimeter subsystem module). I also modified a few settings in the protobuf compiler and suppressed a few annoying GCC warnings (don't worry, I confirmed that the warnings were due to bugs in GCC and not in our code).
A note for future work though: the telecommands currently implemented by this PR is a very basic set of essential commands. We should aim to add a lot more that provide more nuanced control of the operation of our Satellite; changing lengths of timers, changing error limits, etc. This is something that the CSA mentioned a while ago, and should still be implemented. It will not be included in this PR as this is already pretty huge.
Also, future work may need to be done regarding error handling; this is still a big can of worms that should be tackled fairly soon as we now have fairly large pieces of our software coming together.
Also (part 3): The File Transfer Service does not account for image packets (large amounts of data that we may want to be sent separately), so that feature/support will likely need to be added in a future PR.