/****************************************************************************/
/* Summary  : Definitions for file I/O for BEDS				    */
/* Filename : file.h							    */
/* Author   : Robert Herlien (rah)					    */
/* Project  : BEDS (Benthic Event Detection System)			    */
/* Revision : 1.0							    */
/* Created  : 10/02/2012						    */
/****************************************************************************/
/* Modification History:						    */
/* 02oct2012 rah - created						    */
/* $Log$
 */
/****************************************************************************/

#ifndef INCfileh
#define INCfileh

#include <stdio.h>
#include <time.h>

#define CFM_DRV		2

#define FMT_VERSION	0x01
#define PPB_SIZE	32768
#define QUAT_SIZE	2		/* 2 or 3 bytes for one quaternion component?*/

typedef enum
{
    FileHdrType, SecMarkerType, InertialDataType, PressureType, IndexType, SysRecType
} FileRcdType;

//typedef enum {WatchFile, EventFile} DataFileType;

typedef struct				/****************************************/
{					/* FileHdr - File Header Record		*/
    Byte	recType;		/* Record Type = 0 for File Header	*/
    Byte	rsvd;			/* Reserved				*/
    Nat16	fmtVersion;		/* File Format version			*/
    Nat16	platformID;		/* Platform ID				*/
    Nat16	dataRate;		/* Rate primary data sample, samples/min*/
    time_t	startTime;		/* Time record started			*/
    Nat16	startMs;		/* Millisecond offset of start time	*/
    Nat32	duration;		/* Duration of event/cycle, milliseconds*/
} FileHdr;				/****************************************/

typedef struct				/****************************************/
{					/* SecondMarker - New second in data stream*/
    Byte	recType;		/* Record Type				*/
    Byte	rsvd;			/* Reserved				*/
    time_t	rcdTime;		/* Time 				*/
} SecondMarker;				/****************************************/

typedef struct				/****************************************/
{					/* InertialRcd - Inertial Data Record	*/
    Byte	recType;		/* Record Type				*/
    Byte	accel[3][3];		/* XYZ accelerations, 3 bytes each	*/
    Byte	quat[4][QUAT_SIZE];	/* 4 quaternion values, 2 or 3 bytes each*/
} InertialRcd;				/****************************************/

typedef struct				/****************************************/
{					/* PressureRcd - Record for external pressure*/
    Byte	recType;		/* Record Type				*/
    Byte	rsvd;			/* Reserved				*/
    Nat16	pressure;		/* 16 bit A/D value of external pressure*/
} PressureRcd;				/****************************************/

typedef struct				/****************************************/
{					/* IdxRcd - Index Record		*/
    Byte	recType;		/* Record Type				*/
    Byte	rsvd;			/* Reserved				*/
    time_t	startTime;		/* Start time of event or cycle		*/
    Nat16	startMs;		/* Millisecond offset of start time	*/
    Nat32	duration;		/* Duration of event/cycle, milliseconds*/
    Int32	maxVal;			/* Max value of one accel component	*/
    char	fileName[16];		/* Name of file containing event or cycle*/
} IdxRcd;				/****************************************/

typedef struct				/****************************************/
{					/* SystemRcd - System parameters	*/
    Byte	recType;		/* Record Type				*/
    Byte	rsvd;			/* Reserved				*/
    time_t	rcdTime;		/* Time record was collected		*/
    Nat16	battVoltage;		/* 16 bit A/D value of battery voltage	*/
    Nat16	minModemBatt;		/* Minimum voltage to modem since last SystemRcd*/
    Nat16	extPressure;		/* 16 bit A/D value of external pressure*/
    Nat16	intPressure;		/* 16 bit A/D value of internal pressure*/
    Nat16	intTemp;		/* 16 bit A/D value of internal temperature*/
    Nat16	intHumidity;		/* 16 bit A/D value of internal humidity*/
} SystemRcd;				/****************************************/

typedef struct				/****************************************/
{					/* DataFileStruct - Holds inertial data pts*/
    char	*fileSuffix;		/* File suffix: "EVT" or "WAT"		*/
    char	*indexFile;		/* Name of index file			*/
    Nat32	fileIndex;		/* File number: BEDSnnnnn.{EVT,WAT}	*/
    Nat16	dataRate;		/* Data rate for file header		*/
    char	*ppbBuf;		/* Buffer for Ping-pong buffer		*/
    Void	*ppb;			/* Open Ping-pong buffer		*/
    Nat32	indexRecOffset;		/* Offset of index rcd in index file	*/
    Int32	maxVal;			/* Maximum accel val for event		*/
    char	fileName[16];		/* Name of file containing event or cycle*/
} DataFileStruct;			/****************************************/


#endif /* INCfileh */
