	PRO TM_DEFINE_STRUC, TEST=TEST
;+
; Project     : SOHO - CDS
;
; Name        : TM_DEFINE_STRUC
;
; Purpose     : Defines structures used in telemetry software.
;
; Explanation : Used to define the static structures used in the telemetry
;		parsing software.  Only needs to be called once.
;
; Use         : TM_DEFINE_STRUC
;
; Inputs      : None.
;
; Opt. Inputs : None.
;
; Outputs     : None.
;
; Opt. Outputs: None.
;
; Keywords    : TEST	= Setting this keyword signals that the telemetry
;			  format corresponds to the test environment of the CDS
;			  instrument, as opposed to operations.  There is a
;			  small difference in the structure of the packet
;			  header.
;
; Calls       : None.
;
; Common      : None.
;
; Restrictions: None.
;
; Side effects: None.
;
; Category    : Data Handling, Telemetry
;
; Prev. Hist. : Influenced by SCI_ANA.PRO by Arnulf from Spacetec.
;
; Written     : William Thompson, GSFC, 18 Mar 1993
;
; Modified    : Version 1, William Thompson, GSFC, 5 Apr 1993.
;			Modified for version 2.4 of packet format document.
;		Version 2, William Thompson, GSFC, 7 June 1993.
;			Modified for version 2.8 of packet format document.
;		Version 3, William Thompson, GSFC, 16 November 1993.
;			Modified for version 3.0 of packet format document.
;			Added keyword TEST.
;		Version 4, William Thompson, GSFC, 13 June 1994.
;			Split RASTERLENGTH into NUMMIRRORPOS and NUMSLITPOS.
;		Version 5, William Thompson, GSFC, 22 August 1994
;			Redefined DATA_WIN to be structures.
;		Version 6, William Thompson, GSFC, 30 August 1994
;			Changed ...DEF to ...DFN to avoid conflicts with other
;			software such as STM.PRO
;		Version 7, William Thompson, GSFC, 3 February 1995
;			Changed header structure to support both realtime and
;			quicklook/final-distribution formats.  Removed TEST
;			keyword.
;
; Version     : Version 7, 3 February 1995
;-
;
	ON_ERROR, 2
;
;  Realtime packets have an extra six bytes tacked on to the beginning.
;
	RTPKTHEADER = {RTPKTHDRDFN,		$
		MSGID:		FIX(0),		$
		MSGLEN:		FIX(0),		$
		MSGREQID:	FIX(0)}
;
;  General packet header structure.  Each packet starts with this.
;
	PACKETHEADER = {PACKETHDRDFN,			$
		APID:			FIX(0),		$
		SOURCEPACKETCOUNTER:	FIX(0),		$
		DATAFIELDLENGTH:	FIX(0),		$
		TIME:			BYTARR(6),	$
		ID:			BYTE(0),	$
		STREAMPACKETCOUNTER:	BYTE(0)}
;
;  General raster header structure.  Both NIS and GIS have this in common.
;
	SCIHEADER = {SCIHEADERDFN, $
		STUDYID:		BYTE(0),	$
		COMPRESSION:		BYTE(0),	$
		DATAWINDOWID:		FIX(0),		$
		SEQUENCEID:		FIX(0),		$
		NUMMIRRORPOS:		BYTE(0),	$
		NUMSLITPOS:		BYTE(0),	$
		OPSLPOSITION:		FIX(0),		$
		OPSRPOSITION:		FIX(0),		$
		SLITPOSITION:		FIX(0),		$
		SLITNUMBER:		BYTE(0),	$
		MIRRORPOSITION:		BYTE(0),	$
		EXPOSURETIME:		FIX(0),		$
		STUDYCOUNTER:		FIX(0),		$
		RASTERCOUNTER:		FIX(0),		$
		COMP_OPTION:		FIX(0),		$
		SCI_STATUS:		FIX(0)}
;
;  Note:  Below this point, the structures with names ending in PKT represent
;	  complete science packets.
;
;  GIS Window Data
;
	GISWINDOW = {GISWDW,	$
		START:  FIX(0),	$
		LENGTH: FIX(0)}
;
;  GIS raster header structure.
;
	GISRASTER = {GISRASTERDFN, $
		SCI:			{SCIHEADERDFN},	$
		SPARE:			BYTARR(12),	$
		NWINDOWS:		FIX(0),		$
		DATA_WIN:		REPLICATE(GISWINDOW,61),$
		CHKSUM:			FIX(0)}
	GISRASTER = {GISRASTERPKT, $
		HDR:			{PACKETHDRDFN},	$
		PKT:			{GISRASTERDFN}}
;
;  VDS Window Data.
;
	VDSWINDOW = {VDSWDW,	$
                STARTX:  FIX(0),$
                STARTY:  FIX(0),$
                LENGTHX: FIX(0),$
                LENGTHY: FIX(0)}
;
;  VDS raster header structure.
;
	VDSRASTER = {VDSRASTERDFN, $
		SCI:			{SCIHEADERDFN},	$
		BINNINGFACTORSXY:	BYTE(0),	$
		NWINDOWS:		BYTE(0),	$
		DATA_WIN:		REPLICATE(VDSWINDOW,32),$
		CHKSUM:			FIX(0)}
	VDSRASTER = {VDSRASTERPKT, $
		HDR:			{PACKETHDRDFN},	$
		PKT:			{VDSRASTERDFN}}
;
;  Exposure header structure.
;
	EXPHEADER= {EXPHEADERDFN, $
		PACKETCOUNTER:		FIX(0),		$
		SOLAR_X:		FIX(0),		$
		STARTTIME:		BYTARR(6),	$
		EXPOSURENUMBER:		FIX(0),		$
		OPSLPOSITION:		FIX(0),		$
		OPSRPOSITION:		FIX(0),		$
		SLITPOSITION:		FIX(0),		$
		SUNSENSORPITCH:		FIX(0),		$
		SUNSENSORYAW:		FIX(0),		$
		SOLAR_Y:		FIX(0),		$
		MIRRORPOSITION:		BYTE(0),	$
		EVENT_STATUS:		BYTE(0),	$
		EVENT_LEVEL:		FIX(0),		$
		STUDYCOUNTER:		FIX(0),		$
		RASTERCOUNTER:		FIX(0),		$
		SCIENCE:		BYTARR(252),	$
		CHKSUM:			FIX(0)}
	EXPHEADER = {EXPHEADERPKT, $
		HDR:			{PACKETHDRDFN},	$
		PKT:			{EXPHEADERDFN}}
;
;  Science packet structure.
;
	SCIPACKET = {SCIPACKETDFN, $
		PACKETCOUNTER:		FIX(0),		$
		EXPOSURENUMBER:		FIX(0),		$
		STUDYCOUNTER:		FIX(0),		$
		RASTERCOUNTER:		FIX(0),		$
		SCIENCE:		BYTARR(276),	$
		CHKSUM:			FIX(0)}
	SCIPACKET = {SCIPACKETPKT, $
		HDR:			{PACKETHDRDFN},	$
		PKT:			{SCIPACKETDFN}}
;
;  Dummy structure for other packets.
;
	ANYPACKET = {ANYPACKETDFN, $
		DATA:			BYTARR(284),	$
		CHKSUM:			FIX(0)}
	ANYPACKET = {ANYPACKETPKT, $
		HDR:			{PACKETHDRDFN},	$
		PKT:			{ANYPACKETDFN}}
;
	END
