
// this file defines various constants

#if !defined __INC_PLX_H
#define      __INC_PLX_H

typedef enum {
	PLX_Start = 0x80,
    PLX_Stop  = 0x40,
} PLX_Header;



static const char * PLX_Obs_Names []= {
  "AFR","EGT","FluidTemp","Vac","Boost","AIT","RPM","Speed","TPS",
	"Load","FluidPressure","Timing","MAP","MAF","ShortFuel",
	"LongFuel","NBO2", "Fuel","Volts","Knock","Duty","CHT"
} ;

enum PLX_Observations 
{
	PLX_AFR =   0,      //Wideband Air/Fuel
  PLX_EGT =   1,      //EGT
  PLX_FluidTemp =2, //Fluid Temp
  PLX_Vac =   3,      //Vac
  PLX_Boost = 4,   //Boost
  PLX_AIT =   5, //AIT
  PLX_RPM =   6,
  PLX_Speed = 7, //Speed
  PLX_TPS =   8, //TPS
  PLX_Load =  9 , //Engine Load
  PLX_FluidPressure = 10, //Fluid Pressure
  PLX_Timing = 11, //Engine timing
  PLX_MAP =   12, //MAP
  PLX_MAF =   13, //MAF
  PLX_ShortFuel = 14, //Short term fuel trim
  PLX_LongFuel =15, //Long term fuel trim
  PLX_NBO2 =  16, //Narrowband O2 sensor@@@@@@@
  PLX_Fuel =  17, //Fuel level
  PLX_Volts = 18, //Volts
  PLX_Knock = 19, //Knock
  PLX_Duty  = 20, //Duty cycle
  PLX_X_CHT = 21, // Extended observations for aircooled engine 
  
};


enum PLX_AFR_Units
{
			AFR_Lambda,
		  AFR_Gasoline,
			AFR_Diesel,
			AFR_Methanol,
			AFR_Ethanol,
			AFR_LPG,
			AFR_CNG

};

enum PLX_TEMP_Units
{
		 TEMP_Celsius,
     TEMP_Fahrenheit
};

enum PLX_PRESSURE_Units
{
	PRESSURE_PSI_Fuel,
	PRESSURE_KGCM2_Fuel,
	PRESSURE_Bar_Fuel,
	PRESSURE_PSI_Oil,
	PRESSURE_KGCM2_Oil,
	PRESSURE_Bar_Oil
};

enum PLX_MAP_Units
{
	PRESSURE_kPa,
	PRESSURE_InHg
};

extern double ConveriMFDRaw2Data(int sensor, int units, int raw);

#pragma pack(push,1)
typedef struct 
{
	char AddrH;
	char AddrL;
	char Instance;
	char ReadingH;
	char ReadingL;
} PLX_SensorInfo;
#pragma pack(pop)


static inline int ConvPLX(char H, char L)
{
	return ((H & 0x3F)<<6) | (L & 0x3F);
}


#endif
