200 likes | 301 Views
Marty Olevitch Washington U. in St Louis April 8, 2005. Low level telemetry software. Flight software big picture. WU SIP software goes here. WU LOS software goes here. Data flow big picture. Data high-rate TDRSS low-rate TDRSS low-rate Iridium. TDRSS Iridium. ANITA. SIP.
E N D
Marty Olevitch Washington U. in St Louis April 8, 2005 Low level telemetry software
Flight software big picture WU SIP software goes here WU LOS software goes here
Data flow big picture Data high-rate TDRSS low-rate TDRSS low-rate Iridium TDRSS Iridium ANITA SIP NSBF Palestine Commands data requests altitude/pressure GPS commands data LOS ANITA GSE McMurdo GSE
Data flow big picture Data high-rate TDRSS low-rate TDRSS low-rate Iridium TDRSS Iridium ANITA SIP NSBF Palestine Commands data requests altitude/pressure GPS commands data LOS ANITA GSE McMurdo GSE
LOS interface Board currently being designed by Paul D. Uses the ANITA standard PX cPCI 9030 board Tested basic write function with raw board. Wrote from program buffer to board buffer. Write rate was 24 Mb/sec. Don’t know how fast actual end-to-end rate will be. Plan to transfer up to ~8,000 bytes at a shot.
LOS interface Programming interface for our driver: 3 simple functions int los_init(void); Initialize the driver. Returns 0 if all went well, else a negative value. char *los_sterror(void); Returns a hopefully informative error message. int los_write(unsigned char *buf, short nbytes); buf – data to transfer nbytes – number of bytes to transfer (max 8000) Returns 0 if all went well -1 if no buffer available (try again) other negative values for errors.
Data flow big picture Data high-rate TDRSS low-rate TDRSS low-rate Iridium TDRSS Iridium ANITA SIP NSBF Palestine Commands data requests altitude/pressure GPS commands data LOS ANITA GSE McMurdo GSE
SIP overview SIP is more complex than LOS Send high-rate TDRSS data to ground • (6,000 bits/sec max) Receive commands from ground. Send low-rate TDRSS data (255 bytes every 30 seconds) The SIP will also provide: Receive MKS pressure/altitude Receive GPS time and position
SIP high rate TDRSS data 6,000 bits/second max. We must throttle the rate at which we write! Annoying, but no alternative. SIP provides no handshaking. SIP has limited buffering. Write too fast and SIP loses entire buffers of data! Maintain moving average of our SIP write rate: If too high, don’t write. Either pause or return an error code. until average rate goes back down.
SIP high-rate TDRSS interface int write_fast_tdrss(unsigned char* buf, int nbytes); buf – data to be transferred nbytes – number of bytes to transfer pseudo-code: Add header to start of data. Add ender to end of data. while (data remaining) { Check moving average; get no. of bytes N to write. Write N bytes. if (fatal error) return error code. } return OK
Handling SIP COMM1 and COMM2 SIP has 2 bidirectional serial lines Input to ANITA Commands from ground Request for up to 255 bytes of low-rate data. MKS pressure/altitude GPS time and position Output from ANITA Slow TDRSS Slow Iridium
Parsing COMM1 and COMM2 input Threads for reading each of COMM1 and COMM2 Thread code will be written by WU, but must be launched by Jim & Ryan's code (WU supplies launch function) Will recognize all of the various input items After each command, data request, etc is recognized, appropriate callback function is executed. Callback must be supplied by client code and registered. Client code should call these functions at start-up: int start_comm1_thread(); int start_comm2_thread();
Handling ground commands (part 1) Command is identified by single ID byte followed by any number of data bytes data ....... ID byte data data data Initialization For each command, tell system: ID byte total number of bytes int set_cmd_length(unsigned char id, unsigned char length);
Handling ground commands (part 2) Callback function Supplied by Jim & Ryan. Callback function signature void cbf(unsigned char *cmdbuf); typedef void (*cmdcb)(unsigned char *); Using the function: int set_cmd_callback(cmdcb f); Every time a command is parsed f will be executed passing it pointer to command bytes.
Handling data requests (part 1) SIP issues data request For low-rate data. For each of COMM1 (TDRSS) and COMM2 (Iridium) Every 30 seconds. Not applicable to high-rate data. After request can send up to 255 bytes of data. Upon parsing request, thread will: Execute client-supplied callback Which should in turn run write_slow_data_comm1() or write_slow_data_comm2()
Handling data requests (part 2) Slow data request callback signature: void f(void) typedef void (*slow_data_cb)(void); Callback registration function: int set_slow_data_callback(slow_data_cb f); GPS position and time, and MKS pressure/altitude will also be handled with a similar callback method.
Data flow big picture Data high-rate TDRSS low-rate TDRSS low-rate Iridium TDRSS Iridium ANITA SIP NSBF Palestine Commands data requests altitude/pressure GPS commands data LOS ANITA GSE McMurdo GSE
Receiving TDRSS data on the ground All data comes into the same serial line datad parses the incoming data Sorts out high-rate TDRSS, low-rate TDRSS and Iridium Stores data in files on local disk Other software (not necessarily written by WU) can then further process these files. Semi-realtime housekeeping updates. Monitoring various problem situations. Checksums Event counts Etc. Transfer to collaborators (WU) Very similar to TIGER code.
Sending commands In a nutshell, just like TIGER Simple text-based interface on our Palestine GSE Used by ANITA operators on the Ice on the Slush on the Surf Batch command system email notification
Data high-rate TDRSS low-rate TDRSS low-rate Iridium TDRSS Iridium ANITA SIP NSBF Palestine Commands data requests altitude/pressure GPS commands data LOS ANITA GSE McMurdo GSE Status summary LOS -- new code, not yet written, waiting on hardware design SIP –-- not yet written, based on TIGER software & experience GSE -- data -- modified TIGER code commands -- TIGER code with new command definitions