// GPS Tracker constants
// TSIP Version 1

constant kAboutTitle := "GPS Tracker (TSIP V1.5)";

constant kBaseCapabilities := kSupportsPosition + kSupportsPseudoRange + kSupportsECEF + kSupportsElevMask + kSupportsStaticFilter;

constant kDefaultBaud := 2;

// view containing the GPS comms stuff: theEndPoint, theCommandHandler & theReportHandler
constant kEPlayout := "EP_TSIP";

DefConst ( 'kDefaultPrefs, {
		coordSel:		kPosOSG,		// index into kCoordDisplay array
		datumSel:		kDatumOSGB,		// index into kDatumList array
		altSel:			kAltMSL,		// index into kAltList array
		velocitySel:	kVelSoGmps,		// index into kVelocityDisplay array
		timeSel:		kShowUTCTime,	// index into kTimeDisplay array
		clockSetSel:	0,				// index into kClockSetList array
		fixIntSel:		3,				// index into kFixIntervalList array
		serialSrcSel:	0,				// index into kSerialSrcList array
		serialBaudSel:	kDefaultBaud,	// index into kSerialBaudList array
//		elevMaskSel:	1,				// index into kElevMaskList array
		doublePrec:		nil,
		svData:			nil,
		rawData:		true,
		staticFilter:	nil,			// Trimble static filter
		displayTime:	nil,
		displayDOP:		true,
		displaySVs:		true,
		displayVel:		nil,
});

// Trimble receiver type
constant kRcvrCM3 := 27;
constant kRcvrSK8 := 90;

constant kRpt46StatusMsg :=	'["Doing position fixes",
							  "No GPS time yet",
							  "Waiting for almanac",
							  "PDOP too high",
							  "No SVs available",
							  "1 SV available",
							  "2 SVs available",
							  "3 SVs available",
							  "No usable SVs",
							  "1 1SV usable",
							  "2 SVs usable",
							  "3 SVs usable",
							  "SV is unusable"];

// packet buffer size
constant kPktBufLen := 256;
constant kLastFixInfoLen := 56;

// TSIP report packets
constant kRptPkt3D := 0x3D;		// Primary port config
constant kRptPkt40 := 0x40;		// Almanac page
constant kRptPkt41 := 0x41;		// GPS Time
constant kRptPkt42 := 0x42;		// ECEF XYZ position, single prec
constant kRptPkt43 := 0x43;		// ECEF Velocity fix
constant kRptPkt44 := 0x44;		// Best 4 satellites
constant kRptPkt45 := 0x45;		// Receiver software versions
constant kRptPkt46 := 0x46;		// Receiver health
constant kRptPkt47 := 0x47;		// SV signal levels
constant kRptPkt48 := 0x48;		// GPS system msg
constant kRptPkt49 := 0x49;		// Almanac health page
constant kRptPkt4A := 0x4A;		// LLA position, single precision
constant kRptPkt4B := 0x4B;		// Machine status
constant kRptPkt4C := 0x4C;		// Operating parameters
constant kRptPkt4D := 0x4D;		// Oscillator offset
constant kRptPkt4E := 0x4E;		// Response to set GPS time
constant kRptPkt4F := 0x4F;		// UTC parameters
constant kRptPkt54 := 0x54;		// 1 SV Bias
constant kRptPkt55 := 0x55;		// Current I/O options
constant kRptPkt56 := 0x56;		// ENU Velocity fix
constant kRptPkt57 := 0x57;		// Last computed fix
constant kRptPkt58 := 0x58;		// Sytem data/acknowledge
constant kRptPkt59 := 0x59;		// Disable/Ignore status
constant kRptPkt5A := 0x5A;		// Raw measurement data
constant kRptPkt5B := 0x5B;		// Ephemeris data
constant kRptPkt5C := 0x5C;		// Tracking status
constant kRptPkt5E := 0x5E;		// Additional fix status
constant kRptPkt6D := 0x6D;		// All in view
constant kRptPkt6E := 0x6E;		// Carrier phase params
constant kRptPkt6F := 0x6F;		// Carrier phase measurements
constant kRptPkt72 := 0x72;		// Position filter parameters
constant kRptPkt74 := 0x74;		// Altitude filter parameter
constant kRptPkt76 := 0x76;		// High-8-Best-4/High-6
constant kRptPkt78 := 0x78;		// Max age of diff corrections
constant kRptPkt7B := 0x7B;		// NMEA output settings
constant kRptPkt82 := 0x82;		// Differential mode
constant kRptPkt83 := 0x83;		// ECEF XYZ position, double prec
constant kRptPkt84 := 0x84;		// LLA position, double prec
constant kRptPkt85 := 0x85;		// Differential correction status
constant kRptPkt8F := 0x8F;		// SuperPackets
constant kRptPkt8F01 := 0x01;		// Last fix ASCII
constant kRptPkt8F02 := 0x02;		// last fix binary
constant kRptPkt8F03 := 0x03;		// Port B config
constant kRptPkt8F15 := 0x15;		// Current datum values
constant kRptPkt8F17 := 0x17;		// UTM position, single precision
constant kRptPkt8F18 := 0x18;		// UTM position, double precision
constant kRptPkt8F19 := 0x19;		// UTM enabled
constant kRptPkt8F20 := 0x20;		// last fix binary fixed point
constant kRptPktBB := 0xBB;
constant kRptPktBC := 0xBC;

// primary port config settings for cmd & rpt pkt 3D
constant kTSIPRxTxBaud50	:= 0;
constant kTSIPRxTxBaud110	:= 1;
constant kTSIPRxTxBaud300	:= 4;
constant kTSIPRxTxBaud600	:= 5;
constant kTSIPRxTxBaud1200	:= 6;
constant kTSIPRxTxBaud2400	:= 8;
constant kTSIPRxTxBaud4800	:= 9;
constant kTSIPRxTxBaud9600	:= 11;
constant kTSIPRxTxBaudValue	:= '[50,110,0,0,300,600,0,1200,0,2400,4800,0,9600];
constant kTSIPParityEven    := 0;
constant kTSIPParityOdd     := 4;
constant kTSIPParityNone    := 16;
constant kTSIPBitsPerChar7  := 2;
constant kTSIPBitsPerChar8  := 3;
constant kTSIPStopBits1     := 7;
constant kTSIPStopBits2     := 15;
constant kTSIPTxLangPkt     := 0;
constant kTSIPTxLangOff     := 1;
constant kTSIPTxLangNMEA    := 5;
constant kTSIPRxLangPkt     := 0;
constant kTSIPRxLangRTCM    := 1;

// I/O options for cmd pkt 35
constant kIOOptPosXYZ    := 0x01;	// XYZ ECEF position output
constant kIOOptPosLLA    := 0x02;	// LLA output
constant kIOOptPosAltOut := 0x04;	// Altitude output 0 HAE, 1 WGS-84 MSL
constant kIOOptPosAltIn  := 0x08;	// Altitude input 0 HAE, 1 WGS-84 MSL
constant kIOOptPosPrec   := 0x10;	// output precision: 0 single, 1 double
constant kIOOptPosSuper  := 0x20;	// Superpacket output
constant kIOOptPosSupFmt := 0x40;	// Superpacket format: 0 binary, 1 ASCII (CM3 only)

constant kIOOptVelNone   := 0x00;	// no velocity output
constant kIOOptVelXYZ    := 0x01;	// XYZ ECEF velocity output
constant kIOOptVelENU    := 0x02;	// ENU velocity output

constant kIOOptTimUTC    := 0x01;	// time output: 0 GPS, 1 UTC
constant kIOOptTimComp   := 0x02;	// fix computation time (CM3 only)
constant kIOOptTimOut    := 0x04;	// output time (CM3 only)
constant kIOOptTimSync   := 0x08;	// synchronised measurements (CM3 only)
constant kIOOptTimProj   := 0x10;	// minimise projection (CM3 only)

constant kIOOptAuxRaw    := 0x01;	// raw measurements
constant kIOOptAuxSmooth := 0x02;	// Doppler smoothed codephase
constant kIOOptAuxAdd    := 0x04;	// Additional fix status

// Data request types for cmd 0x38 and rpt 0x58
constant kDataAlmanac    := 0x02;	// Almanac
constant kDataHealth     := 0x03;	// Health page
constant kDataIonosphere := 0x04;	// Ionosphere params
constant kDataUTC        := 0x05;	// UTC params
constant kDataEphemeris  := 0x06;	// Ephemeris

// constellation mode for cmd pkt 0x75
constant kHigh8 := 0;				// High-8 (best 6) mode
constant kHigh6 := 1;				// High-6 (overdetermined) mode

// mode and dimension for rpt pkts 0x44 and 0x6D
constant kAuto      := 0;			// auto mode
constant kManual    := 1;			// manual mode
constant kDim0      := 1;			// 0D fix
constant kDim2      := 3;			// 2D fix
constant kDim3      := 4;			// 3D fix
constant kBest4     := 1;			// Best 4 SVs
constant kAllInView := 2;			// All SVs in view

// datum ids
// see also kDatumXXX constants in constants.txt
constant kDatumCodeWGS84        :=   0;	// WGS-84
constant kDatumCodeEurope1979   :=  65;	// European 1979
constant kDatumCodeEurope1950   :=  54;	// European 1950 (mean)
constant kDatumCodeEurope1950UK :=  57;	// European 1979 (UK)
constant kDatumCodeOSGB         := 125;	// Ordnance Survey 1936
constant kDatumCodeIreland1965  :=  74;	// Ireland 1965

// kDatumCode must correspond with kDatumList in constants.txt
DefConst('kDatumCode, [kDatumCodeWGS84, kDatumCodeEurope1979, kDatumCodeEurope1950, kDatumCodeEurope1950UK, kDatumCodeOSGB, kDatumCodeIreland1965]);

