I was a member of a team of interns developing all aspects of a generalized satellite design including mechanical, electrical, computer hardware, embedded software, and groundstation control software components. I developed a set of libraries that interfaced with the chip components selected to perform various functions on the satellite (ADC's, DAC's, radios, thermocouples, GPS, voltage monitors, etc). I also assisted in modifying a MATLAB prototype groundstation interface to command the satellite. At the end of the project we delivered a working prototype into which various payloads were integrated to perform mission specific functions.
The physical form factor of the satellite is a "6U" CubeSat which is a standard size that can be launched from NASA and SpaceX rockets, as well as China and other national space programs. The only difference between the prototype we provided and a space ready version is the onboard radio, and quality rating of the materials used.
A major design problem we encountered was the use of the radio. By the time I began to write software for the radio it quickly became apparent that it was an unwise decision to run the radio through a hardware multiplexer. In order to control any other components connected to the multiplexer we had to go blind to all ground communications. After meeting with a satellite design team from JPL we learned that they had made a similar mistake in their first design many years ago, and suggested that for the next iteration we added a dedicated microcontroller to handle the radio. That way the radio's microcontroller can buffer all communication, and when the multiplexer try's to pull new information from the ground it is actually reading from safe data passed from the dedicated controller. This is a large sacrifice in terms of power consumption, but well worth it because of how critical communication is.
Unfortunately the source code and design documents for this project are owned by the Air Force, but below you will find some pictures from the project.