#include "plx.h"
double ConveriMFDRaw2Data(int sensor, int units, int raw) {
double data = raw; // default assignment
switch (sensor) {
case PLX_AFR: //Wideband Air/Fuel
switch (units) {
case 0: //Lambda
data = (raw / 3.75 + 68) / 100;
break;
case 1: //Gasoline 14.7
data = (raw / 2.55 + 100) / 10;
break;
case 2: //Diesel 14.6
data = (raw / 2.58 + 100) / 10;
break;
case 3: //Methanol 6.4
data = (raw / 5.856 + 43.5) / 10;
break;
case 4: //Ethanol 9.0
data = (raw / 4.167 + 61.7) / 10;
break;
case 5: //LPG 15.5
data = (raw / 2.417 + 105.6) / 10;
break;
case 6: //CNG 17.2
data = (raw / 2.18 + 117) / 10;
break;
}
break;
case PLX_EGT: //EGT
switch (units) {
case 0: //Degrees Celsius
data = raw;
break;
case 1: //Degrees Fahrenheit
data = (raw / .555 + 32);
break;
}
break;
case PLX_FluidTemp: //Fluid Temp
switch (units) {
case 0: //Degrees Celsius Water
case 2: //Degrees Celsius Oil
data = raw;
break;
case 1: //Degrees Fahrenheit Water
case 3: //Degrees Fahrenheit Oil
data = (raw / .555 + 32);
break;
}
break;
case PLX_Vac: //Vac
switch (units) {
case 0: //in/Hg (inch Mercury)
data = -(raw / 11.39 - 29.93);
break;
case 1: //mm/Hg (millimeters Mercury)
data = -(raw * 2.23 + 760.4);
break;
}
break;
case PLX_Boost: //Boost
switch (units) {
case 0: //0-30 PSI
data = raw / 22.73;
break;
case 1: //0-2 kg/cm^2
data = raw / 329.47;
break;
case 2: //0-15 PSI
data = raw / 22.73;
break;
case 3: //0-1 kg/cm^2
data = raw / 329.47;
break;
case 4: //0-60 PSI
data = raw / 22.73;
break;
case 5: //0-4 kg/cm^2
data = raw / 329.47;
break;
}
break;
case PLX_AIT: //AIT
switch (units) {
case 0: //Celsius
data = raw;
break;
case 1: //Fahrenheit
data = (raw / .555 + 32);
break;
}
break;
case PLX_RPM: //RPM
data = raw * 19.55; //RPM
break;
case PLX_Speed: //Speed
switch (units) {
case 0: //MPH
data = raw / 6.39;
break;
case 1: //KMH
data = raw / 3.97;
break;
}
break;
case PLX_TPS: //TPS
data = raw; //Throttle Position %
break;
case PLX_Load: //Engine Load
data = raw; //Engine Load %
break;
case PLX_FluidPressure: //Fluid Pressure
switch (units) {
case 0: //PSI Fuel
case 3: //PSI Oil
data = raw / 5.115;
break;
case 1: //kg/cm^2 Fuel
case 4: //kg/cm^2 Oil
data = raw / 72.73;
break;
case 2: //Bar Fuel
case 5: //Bar Oil
data = raw / 74.22;
break;
}
break;
case PLX_Timing: //Engine timing
data = raw - 64; //Degree Timing
break;
case PLX_MAP: //MAP
switch (units) {
case 0: //kPa
data = raw;
break;
case 1: //inHg
data = raw / 3.386;
break;
}
break;
case PLX_MAF: //MAF
switch (units) {
case 0: //g/s (grams per second)
data = raw;
break;
case 1: //lb/min (pounds per minute)
data = raw / 7.54;
break;
}
break;
case PLX_ShortFuel: //Short term fuel trim
data = raw - 100; //Fuel trim %
break;
case PLX_LongFuel: //Long term fuel trim
data = raw - 100; //Fuel trim %
break;
case PLX_NBO2: //Narrowband O2 sensor
switch (units) {
case 0: //Percent
data = raw;
break;
case 1: //Volts
data = raw / 78.43;
break;
}
break;
case PLX_Fuel: //Fuel level
data = raw; //Fuel Level %
break;
case PLX_Volts: //Volts
data = raw / 51.15; //Volt Meter Volts
break;
case PLX_Knock: //Knock
data = raw / 204.6; //Knock volts 0-5
break;
case PLX_Duty: //Duty cycle
switch (units) {
case 0: //Positive Duty
data = raw / 10.23;
break;
case 1: //Negative Duty
data = 100 - (raw / 10.23);
break;
}
break;
}
return data;
}
PLX_DisplayInfo DisplayInfo[] =
{ // Name, units, min, max, scaleticks, decimal places
[PLX_AFR] = { "AFR", 1, 10, 20, 1 , 1 }, // 10 to 20 , tick every 1 unit Wideband Air/Fuel
[PLX_EGT] = { "EGT", 0, 0, 300, 100 , 0 }, //EGT
[PLX_FluidTemp] = { "Temp",0, 0, 200, 10 , 0 }, //Fluid Temp
[PLX_Vac] = { "VAC", 0, -100, 0, 10, 0 }, //Vac
[PLX_Boost] = { "Boost", 0, 0, 200, 10, 0 }, //Boost
[PLX_AIT] = { "AIT", 0, 0, 100, 10, 0 }, //AIT
[PLX_RPM] = { "RPM", 0, 0, 6000, 1000,0 }, // RPM
[PLX_Speed] = { "Speed", 0, 0, 100, 10, 0 }, //Speed
[PLX_TPS] = { "TPS", 0, 0, 100, 10, 0 }, //Throttle Position Sensor
[PLX_Load] = { "Load" , 0, 0, 100, 10, 0 }, //Engine Load
[PLX_FluidPressure] = { "Press", 0, 0, 100, 10, 0 }, //Fluid Pressure
[PLX_Timing] = { "Timin" , 0, -45, 45, 10, 0 }, //Engine timing
[PLX_MAP] = { "MAP" , 0, 0, 15, 1, 1 }, //MAP
[PLX_MAF] = { "MAF", 0 , 0, 10, 1, 0 }, //MAF
[PLX_ShortFuel] = { "ShFu", 0, 0, 100, 1, 0 }, //Short term fuel trim
[PLX_LongFuel] = { "LoFu", 0, 0, 100, 1, 0 },//Long term fuel trim
[PLX_NBO2] = { "NBO2", 0, 0, 1, 1, 2 },//Narrowband O2 sensor
[PLX_Knock] = { "Knock", 0, 0, 5, 1, 1 }, //Knock
[PLX_Fuel] = { "Fuel", 0, 0, 100, 10, 0 }, //Boost
[PLX_Duty] = { "Duty", 0, 0, 100, 10, 0 }, //Duty cycle
[PLX_Volts] = { "Volts", 0, 0, 20, 5, 2 }, //Volts
};