Flight Track provides payload tracking functionality to assist with recovery, to inform the user of recent status, and to make a record of the flight. Presently, Flight Track accepts packet data from both radios (TNC delivering APRS packets), or the APRS-IS database directly. The similarity of these two functions made for an easy design choice in polymorphism. Recently, I added another class specifically designed to evaluate the tracking functionality.
Introduction to the ICommuinicationSource Interface
The ICommunicationSource inteface describes all of the functions required for moving data from a source (a radio or the APRS-IS database) into Flight Track. These include opening and closing the communication source as well as events to notify subscribers of new data. Both the SerialPortCommSource and ServerCommSource classes implement the ICommunicationSource interface. In this manner, the tracking functionality receives packet data but does not know it receives. The benefit is the tracking functionality and subsequent processing does not have to change based on the source of the data.
The Newest Class
I have wondered how to evaluate the tracking functionality without having to wait for a Saturday morning. Last week, it occurred to me that I could use the ICommunicationSource to provide packets from a file (much like the Review functionality). I created the FileCommSource class for this purpose.
This class reads one line of packet data from the file, submits it to the Tracking functionality, and waits a specific amount of time before repeating this process. I made some specific timing enhancements to accommodate those packet formats that do not contain a time stamp.
With this class, I can review changes to the Tracking functionality at any time. Additionally, I can experiment in solving data sequence errors that sometimes occur with packet data. One specific problem is the arrival of a packet with a lower altitude than the previous. Many times this can indicate the start of the descent. Occasionally, the packet transmission was delayed and arrived out of sequence during ascent. Most notably, the aforementioned packet format without a time stamp will have Flight Track enter a “descent phase” prematurely. With this new class, I look forward to experimenting with resolutions to this error.