#ifndef FRAME_DCM_H #define FRAME_DCM_H #include "defs.h" #include "wind_pk.h" enum FILE_TYPE { FILE_INVALID, FILE_GSE_HKP, /* no longer supported */ FILE_GSE_RAW, /* Oldest supported format no thermister bytes */ FILE_GSE_THERM, /* Includes thermister bytes */ FILE_GSE_FLT, /* Flight files */ FILE_GSE_ENG, /* Engineering model files (no thermister) */ FILE_MASTER, /* Text file containing list of data files */ FILE_NRT_LZ = 8, FILE_NASA_LZ }; enum SPC_MODE { SPC_MODE_INVALID, SPC_MODE_SCI1x, SPC_MODE_ENG1x, SPC_MODE_MAN1x, SPC_MODE_CON1x, SPC_MODE_SCI2x, SPC_MODE_ENG2x, SPC_MODE_MAN2x, SPC_MODE_CON2x, SPC_MODE_TRANS = 128, SPC_MODE_UNKNOWN = 256 }; #define ERROR_FRAME_GAP 0x0001 #define ERROR_OFFSET_MISMATCH 0x0002 #define ERROR_NON_CONSEC_FRAMES 0x0004 #define ERROR_ZERO_BYTES 0x0008 #define ERROR_PACKET_LENGTH 0x0010 #define ERROR_INVALID_PACKET 0x0020 #define ERROR_FRAME_SHIFT 0x0040 #define ERROR_MODE_INVALID 0x0080 #define ERROR_BAD_FRAME_SPIN 0x0100 #define ERROR_SPIN_ROLLOVER 0x0200 #define ERROR_SPIN_RESET 0x0400 #define ERROR_NEW_SPIN0_TIME 0x0800 #define ERROR_FILL_BYTES 0x1000 #define ERROR_FRAME_SYNC 0x2000 #define ERROR_DIFFERENT_MODES 0x4000 #define ERROR_GSE_TIME_CORRECT 0x8000 #define ERROR_STRING "GDSFTROSMFULZNOG" #define ERROR_TELEM (ERROR_FILL_BYTES|ERROR_FRAME_SYNC|ERROR_DIFFERENT_MODES) #define MAX_TELEM_TYPES 50 struct frameinfo_def { double time; /* (P) frame start time */ double spin_period; /* (P) spin period in seconds */ double spin0_time; /* time for spin number 0 */ double fspin; /* (P) spin with fractional rotation */ double dspin; /* number of spins in prev frame */ double creep; /* (P) creep in time since last reset */ uint4 counter; /* frame_counter */ uint4 errors; /* (P) error flags (bit-coded) */ uint2 npkts; /* (P) number of packets in frame */ uint2 main_packet_types; /* (P) packets observed (bit-coded) */ uint2 eesa_packet_types; /* (P) packets observed (bit-coded) */ uint2 pesa_packet_types; /* (P) packets observed (bit-coded) */ /* level-zero decomutation errors: */ uint2 num_fill_bytes; uint2 num_sync_errors; uchar minor_frame_quality[250]; /* telemetry percentages: */ #if 0 float main_telem; /* (P) */ float pesa_telem; /* (P) */ float eesa_telem; /* (P) */ float fpc_telem; /* (P) */ #endif float telem[MAX_TELEM_TYPES]; float used_telem; /* (P) Sum of above */ float bad_telem; /* (P) */ float unused_telem; /* (P) */ float lost_telem; /* (P) */ /* data for future statistics purposes: */ uint2 good; /* number of good bytes */ uint2 bad; /* number of bad (zero) bytes */ uint2 ugly; /* unused telemetry bytes */ uint2 lost; /* lost bytes */ /* data determined from housekeeping bytes: */ uint2 offset; /* position of first science data */ int4 spin; /* spin number at start of frame */ uchar inst_mode; /* instrument mode */ uchar phase; /* spin phase at start of frame */ uchar seq; /* sequence number */ /* data used to comunicate between sort_frame() and sort_packets(): */ uint2 nsci; /* number of 3DP science bytes */ uint2 nhkp; /* number of 3DP housekeeping bytes */ uint2 nkpd; /* number of 3DP key_parameter bytes */ uint2 nthm; /* number of 3DP thermister bytes */ /* uint2 sci_shift; /* byte shift (determined from previous frame) */ /* file specific data */ #if 0 /* enum FILE_TYPE file_type; /* ie. gsehkp gseraw gsetherm nasa */ enum SPC_MODE spc_mode; /* Spacecraft mode 1:sci 2:eng 3:man 4:cont*/ #else /* int file_type; /* type of file */ uint4 spc_mode; /* Spacecraft mode */ #endif /* uint2 hdr_size; /* size of header (in bytes) */ /* uint2 rcd_size; /* size of frame record (header+data) */ /* uint2 file_hdr_size; /* size of file header */ uint2 nbytes; /* number of data bytes per frame */ uint2 burst_num; /* current burst counter value */ }; typedef struct frameinfo_def frameinfo; #define FRAME_INFO_SIZE ((uint)(sizeof(struct frameinfo_def))) struct file_info_def { #if 0 enum FILE_TYPE file_type; /* ie. gsehkp gseraw gsetherm nasa */ #else int file_type; /* type of file */ #endif uint2 hdr_size; /* size of header (in bytes) */ uint2 rcd_size; /* size of frame record (header+data) */ uint2 file_hdr_size; /* size of file header */ }; typedef struct file_info_def file_info; /***** Function Prototypes ******/ /* returns 0 if unsuccessful */ /* returns 1 if successful */ int get_next_frame_struct(packet_selector *pks, struct frameinfo_def *frm); int number_of_frame_samples(double t1,double t2); #endif