#ifndef HKP_DCM_H
#define HKP_DCM_H

#include "wind_pk.h"




									      /*
Typedefs
~~~~~~~~								      */

typedef struct hkp_def 
    {
    double time;
    uint  errors;
    uchar inst_mode;			/* instrument mode (bit-coded) */ 
    uchar mode;				/* manuever/science mode stat */
    uchar burst_stat;			/* burst readout status       */
    uchar rate;				/* 2X mode (values 1 or 2)    */
    uchar frame_seq;  		        /* frame counter              */
    uint2  offset;     			/* offset to first data byte  */
    uint2  spin;
    uchar phase;
    uchar magel;
    uint2  magaz;
    uchar num_commands;
    uchar lastcmd[12];      	/* not plot-able */
    uchar main_version;
    uchar main_status;      	/* bit-coded */
    uchar main_last_error;      
    uchar main_num_errors;
    uchar main_num_resets;
    uchar main_burst_stat;	/* bit-coded */
    float fspin;
    float main_p5;
    float main_m5;
    float main_p12;
    float main_m12;
    float sst_p9;
    float sst_p5;
    float sst_m4;
    float sst_m9;
    float sst_hv;
    uchar eesa_version;
    uchar eesa_status;      	/* bit-coded */
    uchar eesa_last_error;      
    uchar eesa_num_errors;
    uchar eesa_num_resets;
    uchar eesa_burst_stat;	/* bit-coded */
    uchar eesa_swp; /* 0: eesa_swpl is valid;  1: eesa_swph is valid */
    float eesa_p5;
    float eesa_p12;
    float eesa_m12;
    float eesa_mcpl;
    float eesa_mcph;
    float eesa_pmt;
    float eesa_swpl;      /* altered only if ->eesa_swp ==0 */
    float eesa_swph;      /* altered only if ->eesa_swp ==1 */
    uchar pesa_version;
    uchar pesa_status;
    uchar pesa_last_error;      
    uchar pesa_num_errors;
    uchar pesa_num_resets;
    uchar pesa_burst_stat;	/* bit-coded */
    uchar pesa_swp; /* 0: pesa_swpl is valid;  1: pesa_swph is valid */
    float pesa_p5;
    float pesa_p12;
    float pesa_m12;
    float pesa_mcpl;
    float pesa_mcph;
    float pesa_pmt;
    float pesa_swpl;      /* altered only if ->pesa_swp ==0 */
    float pesa_swph;      /* altered only if ->pesa_swp ==1 */

	/* temperature data */
    float eesa_temp;
    float pesa_temp;
    float sst1_temp;
    float sst3_temp;
    int   valid;        /* set to 1 if data is valid  */

    } hkpPktStruct;



typedef struct {
	int num_samples;
	double *time;
	float  *magel;
	float  *magaz;
	float  *eesa_temp;
	float  *pesa_temp;
	float  *sst1_temp;
	float  *sst3_temp;
	float  *eesa_mcpl;
	float  *eesa_mcph;
	float  *pesa_mcpl;
	float  *pesa_mcph;
	float  *eesa_pmt;
	float  *pesa_pmt;
	float  *eesa_swp;
	float  *pesa_swp;
} hkp_fill_str;




/* function prototypes */

int number_of_hkp_samples(double t1,double t2);
/*  returns the number of hkpPktStruct 's between time t1 and t2  */
/*  If t2 is greater than the time of the last packet sample then the number */
/*  is estimated.   */

int get_next_hkp_struct(packet_selector *pks, hkpPktStruct *hkp);
/* Gets the next hkpPktStruct with a time greater than BUT NOT EQUAL to time */
/* *hkp remains unchanged if unsuccesful  */
/* returns 0 if unsuccessful */
/* returns 1 if successful */



int fill_hkp_data(hkp_fill_str ptr);
/*takes structure with pointers to empty data buffers and fills them with data*/



/* Miscellaneous  */

int  fill_hkp_struct(packet *pk,hkpPktStruct *hkp);

char *inst_mode_str(uchar inst_mode);


#endif