App: Command Ingest Lab

Note 1: We're working on updating our videos. In the meantime, go ahead and turn up your volume.

Note 2: This video covers a few of the most popular apps. You can skip around to the ones you care about.

 

Motivation

When your system is out flying or swimming around, you'll probably use some sort of radio to talk with it. But when your system is on the ground, you'll probably want to plug in a cable to talk with it. (Cables usually let you talk faster and get more data back and forth than a radio.) Whether you're sending commands or asking for data, something needs to be listening to that port and interacting with your avionics.

This is functionality every system needs, so NASA went ahead and created a "Lab App" for you that lets you do ground testing. When you're operating in your real mission, you don't need Lab Apps anymore so you'll either remove it from the flight software or you'll turn it off.

 

The Command Ingest "Lab" App

NASA provides a few Lab apps in the cFS package so you can get up and running. The Command Ingest Lab App is the one that lets you plug a cable into your avionics and send commands via UDP or IP. Note that it does not receive telemetry or data; the "Telemetry Output Lab" app handles that for you. (If you're new to programming flight software you might wonder why they're different apps but there are lots of times when you want to send commands without getting data back and there are times when you ask your system to send data back every few seconds without sending a command.)

Your system likely has special apps that you write for your mission, so you'll need to update the Command Ingest Lab app to talk with your special apps. The C code is fairly well documented with explanations of what the functions do. If you have questions, don't hesitate to reach out to the community for help.

The App uses the "Consultive Committee for Space Data System" (CCSDS) rules for formatting packets. You don't have to stick with the standards but we highly recommend it since it will make your hard work more likely to succeed and make it easier to use in other systems.

Also worth noting: NASA wrote a special "Ground System GUI" tool in Python to help you use the Command Ingest Lab App right from the start. (The tool receives data from your system via the Telemetry Output Lab app.) The link for that tool is https://github.com/nasa/cFS-GroundSystem. When you use the tool, you'll have to update it if you create any new message packets so it knows how to send them.

 

Quick Notes

- The "Command Ingest Lab" app is not the same as the "Command Ingest" app. The "Lab" app is meant for ground testing when you want to plug a network cable into your system instead of communicating with it over the radio. The "non-Lab" version is meant for flight command processing over radios. 

- The "Lab version is hosted here: https://github.com/nasa/to_lab

- The flight version of "Command Ingest" has not been updated by NASA in a while. You can find it here, though: https://github.com/nasa/CFS_CI. It's unlikely you can use it "as is" but there are lessons to be learned from understanding it. You can also learn from the "Lab" version, which is kept up to date.

- Because every system is unique with its own special mission apps, your Command Ingest app is always going to be special. This is one reason why NASA can't just give you a complete app for it... it's not possible for them to know what your system needs to command.

- In the code, "Command Ingest Lab" is abbreviated to "CI_LAB". Note that the non-lab version is known as "CI".