GLAST / LAT > DAQ and FSW > FSW > Doxygen Index> CTDB / V5-5-6 > sumt_rt_sib / rad750
#include <stdlib.h>
#include <string.h>
#include <CTDB/CO1553_rt.h>
#include <CTDB/CO1553_util.h>
#include <CCSDS/CCSDS_pkt.h>
#include <PBS/LI.h>
#include <PBS/FPA.h>
#include <PBS/L.h>
#include <PBS/RW.h>
#include <PBS/MBA.h>
#include <MSG/MSG_pubdefs.h>
Defines | |
#define | MEM_ALLOC(_size) MBA_alloc((_size)) |
#define | MEM_FREE(_mem) MBA_free((_mem)) |
Functions | |
static unsigned int | CO1553_rtTelemHkpProc (CO1553_RT_Telem *telem, void *pktPtr, int *hkpSize, CO1553_RT_Diag *diag, RW_ctl *lock) |
Telemtry Interface Functions | |
unsigned int | CO1553_rtTelemSizeof (void) |
Get the size of a telemetry interface descriptor. | |
unsigned int | CO1553_rtTelemInit (CO1553_RT_Telem *telem, unsigned int msgCount, unsigned int queueSizeHigh, unsigned int queueSizeLow, unsigned int telemPktSize, unsigned int hkpPktSize, CO1553_RT_Hkp_Handler *hkpHandler, void *hkpArg) |
Initialize a telemetry interface descriptor. | |
unsigned int | CO1553_rtTelemExit (CO1553_RT_Telem *telem) |
Destroy a telemetry interface descriptor. | |
unsigned int | CO1553_rtTelemMsg (CO1553_RT_Telem *telem, unsigned int *devPtr, CO1553_RT_Mem_Copy *copyFunc, unsigned int wordSize, CO1553_RT_Diag *diag, RW_ctl *lock) |
Process a 1553 message transmit for the telemetry interface. | |
unsigned int | CO1553_rtTelemPktSend (CO1553_RT_Telem *telem, void *pkt, CO1553_RT_Pkt_Free *freeHandler, void *freeArg, CO1553_RT_Priority priority, const TOC *timeout) |
Send a CCSDS telmetry packet to the 1553 telemtry interface. | |
unsigned int | CO1553_rtTelemHkpSet (CO1553_RT_Telem *telem, CO1553_RT_Hkp_Handler *hkpHandler, void *hkpArg) |
Change the HKP application callback. | |
unsigned int | CO1553_rtTelemHkpGet (CO1553_RT_Telem *telem, CO1553_RT_Hkp_Handler **hkpHandler, void **hkpArg) |
Get current HKP application callback information. |
The functions are for use by a remote terminal 1553 controller device driver.
#define MEM_ALLOC | ( | _size | ) | MBA_alloc((_size)) |
Helper macro to call user defined memory allocator.
_size | The size in bytes of memory to allocate. |
Referenced by CO1553_rtCmdRxInit(), CO1553_rtCmdTxInit(), CO1553_rtTelemInit(), and SUMT_rtInit().
#define MEM_FREE | ( | _mem | ) | MBA_free((_mem)) |
Helper macro to call user defined memory allocator.
_mem | A pointer to the memory to free. |
Referenced by CO1553_rtCmdRxExit(), CO1553_rtCmdTxExit(), CO1553_rtTelemExit(), SUMT_rtExit(), and SUMT_rtTerminate().
unsigned int CO1553_rtTelemExit | ( | CO1553_RT_Telem * | telem | ) |
Destroy a telemetry interface descriptor.
Release resources from a 1553 CCSDS telemetry interface.
telem | A telemetry interface descriptor. |
References _CO1553_RT_Telem::blk_buf, _CO1553_RT_Telem::hkp_lock, MEM_FREE, _CO1553_RT_Telem::pkt_fpa_high, _CO1553_RT_Telem::pkt_fpa_low, _CO1553_RT_Telem::pkt_list, _CO1553_RT_Telem::pkt_pool_high, _CO1553_RT_Telem::pkt_pool_low, _CO1553_RT_Telem::pkt_queue_high, and _CO1553_RT_Telem::pkt_queue_low.
Referenced by SUMT_rtTerminate().
unsigned int CO1553_rtTelemHkpGet | ( | CO1553_RT_Telem * | telem, | |
CO1553_RT_Hkp_Handler ** | hkpHandler, | |||
void ** | hkpArg | |||
) |
Get current HKP application callback information.
Retrieves the HKP application callback function and arguments current values.
telem | A telemetry interface descriptor. | |
hkpHandler | Stores the pointer to the application HKP function. | |
hkpArg | Stores user argument for hkpHandler. |
References _CO1553_RT_Telem::hkp_arg, _CO1553_RT_Telem::hkp_handler, and _CO1553_RT_Telem::hkp_lock.
Referenced by SUMT_rtHkpGet().
static unsigned int CO1553_rtTelemHkpProc | ( | CO1553_RT_Telem * | telem, | |
void * | pktPtr, | |||
int * | hkpSize, | |||
CO1553_RT_Diag * | diag, | |||
RW_ctl * | lock | |||
) | [static] |
Attempts to insert a real-time houskeeping packet at the head of the telemetry packet block. Calls the user handler to insert packet. Verifies packet header contents once complete.
telem | A telemetry interface descriptor. | |
pktPtr | A buffer where the HKP packet should be placed. | |
hkpSize | If successful, holds number of bytes out of the telemetry packet block occupied by the inserted HKP packet. | |
diag | A pointer to a RT diagnostics structure for update. | |
lock | A RW lock to protect the diag structure updates. |
References _CO1553_RT_Diag::error_count, _CO1553_RT_Telem::hdr_size, _CO1553_RT_Telem::hkp_arg, _CO1553_RT_Telem::hkp_handler, _CO1553_RT_Telem::hkp_lock, and _CO1553_RT_Telem::hkp_pkt_size.
Referenced by CO1553_rtTelemMsg().
unsigned int CO1553_rtTelemHkpSet | ( | CO1553_RT_Telem * | telem, | |
CO1553_RT_Hkp_Handler * | hkpHandler, | |||
void * | hkpArg | |||
) |
Change the HKP application callback.
Changes the HKP application callback function and arguments to new values. The old values, set either in CO1553_rtTelemInit() or in the last call to this function, are replaced.
telem | A telemetry interface descriptor. | |
hkpHandler | The synchronous callback to handle insertion of HKP telemety packets into the telemetry blocks. | |
hkpArg | A user argument for hkpHandler. |
References _CO1553_RT_Telem::hkp_arg, _CO1553_RT_Telem::hkp_handler, and _CO1553_RT_Telem::hkp_lock.
Referenced by SUMT_rtHkpSet().
unsigned int CO1553_rtTelemInit | ( | CO1553_RT_Telem * | telem, | |
unsigned int | msgCount, | |||
unsigned int | queueSizeHigh, | |||
unsigned int | queueSizeLow, | |||
unsigned int | telemPktSize, | |||
unsigned int | hkpPktSize, | |||
CO1553_RT_Hkp_Handler * | hkpHandler, | |||
void * | hkpArg | |||
) |
Initialize a telemetry interface descriptor.
Initializes a 1553 CCSDS telemetry packet interface. The telemetry packet output queue is created.
telem | A telemetry interface descriptor. | |
msgCount | The number of 1553 telemetry messages expected each frame. | |
queueSizeHigh | The maximum number of telemetry packets to allow on the CCSDS high priority output queue. | |
queueSizeLow | The maximum number of telemetry packets to allow on the CCSDS low priority output queue. | |
telemPktSize | The maximum size in bytes, including header, of a telemetry packet on this subaddress interface (not HKP packet). | |
hkpPktSize | The maximum size in bytes, including header, of a HKP telemetry packet on this subaddress interface. | |
hkpHandler | The synchronous callback to handle insertion of HKP telemety packets into the telemetry blocks. | |
hkpArg | A user argument for hkpHandler. |
References _CO1553_RT_Telem::blk_buf, CO1553_MSG_SIZE, _CO1553_RT_Telem::hdr_size, _CO1553_RT_Telem::hkp_arg, _CO1553_RT_Telem::hkp_handler, _CO1553_RT_Telem::hkp_lock, _CO1553_RT_Telem::hkp_pkt_size, MEM_ALLOC, _CO1553_RT_Telem::msg_count, _CO1553_RT_Telem::pkt_fpa_high, _CO1553_RT_Telem::pkt_fpa_low, _CO1553_RT_Telem::pkt_list, _CO1553_RT_Telem::pkt_pool_high, _CO1553_RT_Telem::pkt_pool_low, _CO1553_RT_Telem::pkt_prev, _CO1553_RT_Telem::pkt_queue_high, _CO1553_RT_Telem::pkt_queue_low, _CO1553_RT_Telem::telem_pkt_size, and _CO1553_RT_Telem::xfer_counter.
Referenced by SUMT_rtInit().
unsigned int CO1553_rtTelemMsg | ( | CO1553_RT_Telem * | telem, | |
unsigned int * | devPtr, | |||
CO1553_RT_Mem_Copy * | copyFunc, | |||
unsigned int | wordSize, | |||
CO1553_RT_Diag * | diag, | |||
RW_ctl * | lock | |||
) |
Process a 1553 message transmit for the telemetry interface.
Announces to the 1553 telemetry packet interface the transmission of the last 1553 telemety message of a telemetry transfer block (GT_PDU). This function is called by a 1553 controller driver when the previous 1553 telemetry messages in a frame have been sent by the 1553 device.
The CCSDS telemetry packet output queue is checked for any pending data. The function tries to fill a complete telemetry block with packets from the queue for transmission on the next frame.
telem | A telemetry interface descriptor. | |
devPtr | An array of pointers to the 1553 device memory where the 1553 telemetry messages should be copied to. | |
copyFunc | A device specific memory copy function for accessing 1553 device memory. | |
wordSize | The size in terms of 16-bit words between successive device locations. | |
diag | A pointer to a RT diagnostics structure for update. | |
lock | A RW lock to protect the diag structure updates. |
References _CO1553_RT_Telem::blk_buf, CO1553_MSG_SIZE, CO1553_MSG_WORDS, CO1553_rtTelemHkpProc(), _CO1553_RT_Pkt_Desc::desc_fpa, _CO1553_RT_Pkt_Desc::free_arg, _CO1553_RT_Pkt_Desc::free_handler, _CO1553_RT_Diag::hkp_byte_count, _CO1553_RT_Diag::hkp_pkt_count, _CO1553_RT_Telem::msg_count, _CO1553_RT_Pkt_Desc::node, _CO1553_RT_Telem::pkt_list, _CO1553_RT_Telem::pkt_prev, _CO1553_RT_Pkt_Desc::pkt_ptr, _CO1553_RT_Telem::pkt_queue_high, _CO1553_RT_Telem::pkt_queue_low, _CO1553_RT_Pkt_Desc::pkt_size, _CO1553_RT_Diag::telem_byte_count, _CO1553_RT_Diag::telem_pkt_count, and _CO1553_RT_Telem::xfer_counter.
Referenced by SUMT_rtMsg().
unsigned int CO1553_rtTelemPktSend | ( | CO1553_RT_Telem * | telem, | |
void * | pkt, | |||
CO1553_RT_Pkt_Free * | freeHandler, | |||
void * | freeArg, | |||
CO1553_RT_Priority | priority, | |||
const TOC * | timeout | |||
) |
Send a CCSDS telmetry packet to the 1553 telemtry interface.
Places a CCSDS telemetry packet on the remote terminal telemetry output queue. The telemetry packet state machine will remove packets from this queue and transmit them as fast as 1553 telemetry message bandwidth allows.
The packet buffer memory remains allocated as long as the packet is on the output queue. After the packet has been transmitted, a user supplied callback freeHandler will be called to release the packet memory.
telem | A telemetry interface descriptor. | |
pkt | A pointer to the CCSDS packet header of the packet to send. | |
freeHandler | The packet buffer memory free callback. | |
freeArg | The argument passed to the freeHandler callback. | |
priority | The packet priority level, CO1553_RT_PRIORITY_HIGH or CO1553_RT_PRIORITY_LOW. | |
timeout | The time to wait for space on the queue. |
References CO1553_RT_PRIORITY_HIGH, CO1553_RT_PRIORITY_LOW, _CO1553_RT_Pkt_Desc::desc_fpa, _CO1553_RT_Pkt_Desc::free_arg, _CO1553_RT_Pkt_Desc::free_handler, _CO1553_RT_Telem::hdr_size, _CO1553_RT_Pkt_Desc::node, _CO1553_RT_Telem::pkt_fpa_high, _CO1553_RT_Telem::pkt_fpa_low, _CO1553_RT_Pkt_Desc::pkt_ptr, _CO1553_RT_Telem::pkt_queue_high, _CO1553_RT_Telem::pkt_queue_low, _CO1553_RT_Pkt_Desc::pkt_size, and _CO1553_RT_Telem::telem_pkt_size.
Referenced by SUMT_rtPktTelemSend().
unsigned int CO1553_rtTelemSizeof | ( | void | ) |
Get the size of a telemetry interface descriptor.