public override void SetRegistry(SensorRegistry registry) { base.SetRegistry(registry); try{ IdleSpeed = double.Parse(registry.VehicleParameters["idle-speed"], UnitsConverter.DefaultNumberFormat); }catch(Exception){} }
public override void SetRegistry(SensorRegistry registry) { base.SetRegistry(registry); try{ IdleSpeed = double.Parse(registry.VehicleParameters["idle-speed"], UnitsConverter.DefaultNumberFormat); }catch (Exception) {} }
public static void ReloadVehicle() { var vehicle = config.GetVehicle(config.Vehicle); if (vehicle == null) { Logger.error("HOBD", "Bad configuration: can't find vehicle " + config.Vehicle); vehicle = ConfigVehicleData.defaultVehicle; } Registry = new SensorRegistry(); Registry.VehicleParameters = vehicle.Parameters; vehicle.Sensors.ForEach((provider) => { Logger.trace("HOBD", "RegisterProvider: " + provider); try{ Registry.RegisterProvider(provider); }catch (Exception e) { Logger.error("HOBD", "bad provider", e); } }); EngineConnect(); }
public override void SetRegistry(SensorRegistry registry) { base.SetRegistry(registry); try{ this.stoich = double.Parse(registry.VehicleParameters["stoich"], UnitsConverter.DefaultNumberFormat); }catch(Exception e){ Logger.info("LitersPerHourSensor", "Using default stoich ratio", e); } }
public override void SetRegistry(SensorRegistry registry) { base.SetRegistry(registry); try{ this.correction = double.Parse(registry.VehicleParameters["speed-correction"], UnitsConverter.DefaultNumberFormat); }catch(Exception){ Logger.info("SpeedSensor", "Using default coefficient"); } }
public override void SetRegistry(SensorRegistry registry) { base.SetRegistry(registry); try{ this.stoich = double.Parse(registry.VehicleParameters["stoich"], UnitsConverter.DefaultNumberFormat); this.displacement = double.Parse(registry.VehicleParameters["liters"], UnitsConverter.DefaultNumberFormat); this.ve = double.Parse(registry.VehicleParameters["volumetric-efficiency"], UnitsConverter.DefaultNumberFormat); }catch(Exception){ Logger.info("LitersPerHourSensor", "Using default displacement and VE ratio"); } }
public void Attach(SensorRegistry registry) { if (this.Registry != null) { throw new Exception("Can't attach: Invalid State"); } this.Registry = registry; try{ var reader = new StreamReader(new FileStream(FilePath, FileMode.Open)); while (true) { var line = reader.ReadLine(); if (line == null) { break; } int vali = line.IndexOf(" "); string sname = line.Substring(0, vali); string value = line.Substring(vali + 1); // backward compat patch between 0.5 -> 0.6 if (sname == "DistanceRun" || sname == "FuelConsumed" || sname == "TripTime" || sname == "IdleTime") { sname = "Common." + sname; } var sensor = Registry.Sensor(sname); if (sensor != null && sensor is IPersistentSensor) { try{ ((IPersistentSensor)sensor).RestoreState(value); Registry.TriggerListeners(sensor); }catch (Exception e) { Logger.error("SensorStorage", "fail on RestoreState: " + sname, e); } } else { Logger.error("SensorStorage", "bad sensor: " + sname); } } reader.Close(); }catch (FileNotFoundException) { Logger.error("SensorStorage", "File not found"); }catch (Exception e) { Logger.error("SensorStorage", "error reading", e); } }
public void Activate(SensorRegistry registry) { CoreSensor s; // EngineLoadLitersPerHour s = new hobd.elm.load.LitersPerHourSensor() { ID = "EngineLoad.LitersPerHour", Name = "LitersPerHour", }; s.Units = "lphour"; registry.Add(s); }
public void Activate(SensorRegistry registry) { CoreSensor s; // InjectorLitersPerHour s = new hobd.elm.injector.LitersPerHourSensor() { ID = "Injector.LitersPerHour", Name = "LitersPerHour", }; s.Units = "lphour"; registry.Add(s); }
public void Activate(SensorRegistry registry) { CoreSensor s; // ELMBatteryVoltage s = new hobd.elm.ELMVoltageSensor() { ID = "ELM.BatteryVoltage", Name = "BatteryVoltage", }; s.Units = "V"; registry.Add(s); }
public void Activate(SensorRegistry registry) { CoreSensor s; // MAFLitersPerHour s = new hobd.elm.maf.LitersPerHourSensor() { ID = "MAF.LitersPerHour", Name = "LitersPerHour", }; s.Units = "lphour"; registry.Add(s); }
public virtual void Detach() { if (Registry == null) { return; } try{ Registry.RemoveListener(this.SensorChanged); Registry.RemovePassiveListener(this.SensorChanged); }catch (Exception e) { Logger.error("SensorTrack", "Detach fail", e); } Store(); this.Registry = null; }
public void Activate(SensorRegistry registry) { CoreSensor s; // MAPLitersPerHour s = new hobd.elm.map.LitersPerHourSensor() { ID = "MAP.LitersPerHour", Name = "LitersPerHour", }; s.Units = "lphour"; registry.Add(s); }
public virtual void Attach(SensorRegistry registry) { if (this.Registry != null) { throw new Exception("Can't attach: Invalid State"); } this.Registry = registry; Settings.Keys.ToList().ForEach((id) => { var set = Settings[id]; var sensor = Registry.Sensor(id); if (sensor == null) { return; } if (set.id != sensor.ID) { set.id = sensor.ID; Settings.Remove(id); Settings.Add(set.id, set); } Logger.trace("SensorTrack", "attach " + set.id + " period " + set.period + " length " + set.length + " gap " + set.gap); try{ Registry.AddListener(sensor, this.SensorChanged, set.period); }catch (Exception) { Logger.trace("SensorTrack", "attach failed" + sensor.ID); } }); if (this.TrackPassive) { Registry.AddPassiveListener(this.SensorChanged); } if (this.TrackAccum) { foreach (var s in Registry.Sensors.Where(s => s is IAccumulatorSensor)) { try{ Registry.AddListener(s, this.SensorChanged); }catch (Exception) { Logger.trace("SensorTrack", "attach failed" + s.ID); } } } }
public override void SetRegistry(SensorRegistry registry) { base.SetRegistry(registry); var speed = registry.Sensors.FirstOrDefault(s => s.Name == OBD2Sensors.Speed && s.ID != this.ID); // Force override base.aid = speed.ID; base.a = speed; // This is not necessary, but good? this.Units = speed.Units; try{ this.correction = double.Parse(registry.VehicleParameters[PARAM], UnitsConverter.DefaultNumberFormat); }catch (Exception) { Logger.info("SpeedCorrectionSensor", "Using default coefficient"); } }
public override void SetRegistry(SensorRegistry registry) { base.SetRegistry(registry); var speed = registry.Sensors.FirstOrDefault( s => s.Name == OBD2Sensors.Speed && s.ID != this.ID); // Force override base.aid = speed.ID; base.a = speed; // This is not necessary, but good? this.Units = speed.Units; try{ this.correction = double.Parse(registry.VehicleParameters[PARAM], UnitsConverter.DefaultNumberFormat); }catch(Exception){ Logger.info("SpeedCorrectionSensor", "Using default coefficient"); } }
public void Attach(SensorRegistry registry) { if (this.Registry != null) throw new Exception("Can't attach: Invalid State"); this.Registry = registry; try{ var reader = new StreamReader(new FileStream( FilePath, FileMode.Open)); while(true){ var line = reader.ReadLine(); if (line == null) break; int vali = line.IndexOf(" "); string sname = line.Substring(0, vali); string value = line.Substring(vali+1); // backward compat patch between 0.5 -> 0.6 if (sname == "DistanceRun" || sname == "FuelConsumed" || sname == "TripTime" || sname == "IdleTime") { sname = "Common."+sname; } var sensor = Registry.Sensor(sname); if (sensor != null && sensor is IPersistentSensor){ try{ ((IPersistentSensor)sensor).RestoreState(value); Registry.TriggerListeners(sensor); }catch(Exception e){ Logger.error("SensorStorage", "fail on RestoreState: "+sname, e); } }else{ Logger.error("SensorStorage", "bad sensor: "+sname); } } reader.Close(); }catch(FileNotFoundException){ Logger.error("SensorStorage", "File not found"); }catch(Exception e){ Logger.error("SensorStorage", "error reading", e); } }
public virtual void Attach(SensorRegistry registry) { if (this.Registry != null) throw new Exception("Can't attach: Invalid State"); this.Registry = registry; Settings.Keys.ToList().ForEach((id) => { var set = Settings[id]; var sensor = Registry.Sensor(id); if (sensor == null) return; if (set.id != sensor.ID) { set.id = sensor.ID; Settings.Remove(id); Settings.Add(set.id, set); } Logger.trace("SensorTrack", "attach " +set.id + " period " + set.period + " length " + set.length + " gap "+ set.gap); try{ Registry.AddListener(sensor, this.SensorChanged, set.period); }catch(Exception){ Logger.trace("SensorTrack", "attach failed" +sensor.ID); } }); if (this.TrackPassive) { Registry.AddPassiveListener(this.SensorChanged); } if (this.TrackAccum) { foreach(var s in Registry.Sensors.Where(s => s is IAccumulatorSensor)){ try{ Registry.AddListener(s, this.SensorChanged); }catch(Exception){ Logger.trace("SensorTrack", "attach failed" +s.ID); } } } }
public override void SetRegistry(SensorRegistry registry) { base.SetRegistry(registry); try{ this.engine_load_coeff = double.Parse(registry.VehicleParameters["engine-load-coeff"], UnitsConverter.DefaultNumberFormat); }catch(Exception){ Logger.info("LitersPerHourSensor", "Using default coefficient"); } if (registry.VehicleParameters.ContainsKey("rpm-consumption-coeff")) { default_matrix = registry.VehicleParameters["rpm-consumption-coeff"]; } if (default_matrix.Length > 1) { rpm_matrix = default_matrix .Split(new char[]{',', ' '}) .Where(v => v != "") .Select(v => double.Parse(v, UnitsConverter.DefaultNumberFormat)).ToArray(); rpm_step = 10000 / rpm_matrix.Length; } }
void init(SensorRegistry registry) { if (reader == null) { throw new Exception("Can't do double init"); } reader.ReadToFollowing("parameters"); this.Namespace = reader.GetAttribute("namespace") ?? "Default"; this.Description = reader.GetAttribute("description") ?? ""; reader.ReadStartElement("parameters"); while (reader.NodeType == XmlNodeType.Element) { if (reader.Name == "include") { var name = reader.ReadElementString().Trim(); var ecuinc = new ECUXMLSensorProvider(System.IO.Path.Combine(Path, name)); ecuinc.init(registry); continue; } if (reader.Name != "parameter") { reader.ReadElementString(); continue; } var id = reader.GetAttribute("id"); var display = reader.GetAttribute("display"); reader.ReadStartElement(); int command = 0; string clazz = null; string rawcommand = null; string basename = null; string basenameraw = null; int replyoffset = 0; string units = null; string value = null; string word = null; string wordle = null; string dword = null; string dwordle = null; bool signed = false; double scale = 1; double offset = 0; int bit = -1; int? cutlow = null; int? cuthigh = null; while (reader.NodeType == XmlNodeType.Element) { try{ switch (reader.Name) { case "class": clazz = reader.ReadElementString().Trim(); break; case "address": reader.ReadStartElement(); var hexval = reader.ReadElementString("byte").Trim(); if (hexval.StartsWith("0x")) { hexval = hexval.Substring(2); } command = int.Parse(hexval, NumberStyles.HexNumber); reader.ReadEndElement(); break; case "raw": rawcommand = reader.ReadElementString().Trim().Replace(";", "\r"); break; case "base": basename = reader.ReadElementString().Trim(); break; case "base-raw": basenameraw = reader.ReadElementString().Trim(); break; case "value": case "valuea": value = reader.ReadElementString(); scale = double.Parse(value, UnitsConverter.DefaultNumberFormat); replyoffset = 0; break; case "valueb": value = reader.ReadElementString(); scale = double.Parse(value, UnitsConverter.DefaultNumberFormat); replyoffset = 1; break; case "valuec": value = reader.ReadElementString(); scale = double.Parse(value, UnitsConverter.DefaultNumberFormat); replyoffset = 2; break; case "valued": value = reader.ReadElementString(); scale = double.Parse(value, UnitsConverter.DefaultNumberFormat); replyoffset = 3; break; case "valueab": word = reader.ReadElementString(); scale = double.Parse(word, UnitsConverter.DefaultNumberFormat); replyoffset = 0; break; case "valuebc": word = reader.ReadElementString(); scale = double.Parse(word, UnitsConverter.DefaultNumberFormat); replyoffset = 1; break; case "valuecd": word = reader.ReadElementString(); scale = double.Parse(word, UnitsConverter.DefaultNumberFormat); replyoffset = 2; break; case "signed": signed = true; reader.ReadElementString(); break; case "offset": offset = double.Parse(reader.ReadElementString(), UnitsConverter.DefaultNumberFormat); break; case "bit": bit = int.Parse(reader.ReadElementString()); break; case "cut-low": cutlow = int.Parse(reader.ReadElementString()); break; case "cut-high": cuthigh = int.Parse(reader.ReadElementString()); break; case "description": reader.ReadStartElement(); while (reader.NodeType == XmlNodeType.Element) { switch (reader.Name) { case "unit": units = reader.ReadElementString().Trim(); break; default: reader.ReadElementString(); break; } } reader.ReadEndElement(); break; default: if (reader.Name.StartsWith("value-")) { replyoffset = int.Parse(reader.Name.Replace("value-", "")); value = reader.ReadElementContentAsString(); scale = double.Parse(value, UnitsConverter.DefaultNumberFormat); } else if (reader.Name.StartsWith("word-")) { replyoffset = int.Parse(reader.Name.Replace("word-", "")); word = reader.ReadElementContentAsString(); scale = double.Parse(word, UnitsConverter.DefaultNumberFormat); } else if (reader.Name.StartsWith("wordle-")) { replyoffset = int.Parse(reader.Name.Replace("wordle-", "")); wordle = reader.ReadElementContentAsString(); scale = double.Parse(wordle, UnitsConverter.DefaultNumberFormat); } else if (reader.Name.StartsWith("dword-")) { replyoffset = int.Parse(reader.Name.Replace("dword-", "")); dword = reader.ReadElementContentAsString(); scale = double.Parse(dword, UnitsConverter.DefaultNumberFormat); } else if (reader.Name.StartsWith("dwordle-")) { replyoffset = int.Parse(reader.Name.Replace("dwordle-", "")); dwordle = reader.ReadElementContentAsString(); scale = double.Parse(dwordle, UnitsConverter.DefaultNumberFormat); } else { throw new Exception("unknown tag `" + reader.Name + "` while creating PID " + id); } break; } }catch (Exception e) { Logger.error("ECUXMLSensorProvider", "bad sensor param: " + id, e); } } Func <double, double> evaluator = (v) => { if (signed) { if (dword != null || dwordle != null) { v = (double)(int)((uint)v); } else if (word != null || wordle != null) { v = (double)(short)((ushort)v); } else { v = (double)(sbyte)((byte)v); } } var res = v * scale + offset; if (bit != -1) { res = ((int)res >> bit) & 1; } if (cutlow != null) { res = res < cutlow ? 0 : res; } if (cuthigh != null) { res = res > cuthigh ? 0 : res; } return(res); }; CoreSensor sensor = null; if (clazz != null) { sensor = (CoreSensor)registry.CreateObject(clazz); } // OBD2 derived sensor else if (basename != null) { // Custom derived sensor var s = new DerivedSensor("", basename, null); if (value != null) { s.DerivedValue = (a, b) => evaluator(a.Value); } sensor = s; } // RAW data from base sensor else if (basenameraw != null) { // Custom derived sensor var s = new DerivedSensor("", basenameraw, null); if (value != null) { s.DerivedValue = (a, b) => evaluator((a as OBD2Sensor).getraw(replyoffset)); } if (word != null) { s.DerivedValue = (a, b) => evaluator((a as OBD2Sensor).getraw_word(replyoffset)); } if (wordle != null) { s.DerivedValue = (a, b) => evaluator((a as OBD2Sensor).getraw_wordle(replyoffset)); } if (dword != null) { s.DerivedValue = (a, b) => evaluator((a as OBD2Sensor).getraw_dword(replyoffset)); } if (dwordle != null) { s.DerivedValue = (a, b) => evaluator((a as OBD2Sensor).getraw_dwordle(replyoffset)); } sensor = s; } // command / raw command else if (basename == null) { var s = new OBD2Sensor(); if (value != null) { s.obdValue = (p) => evaluator(p.get(replyoffset)); } if (word != null) { s.obdValue = (p) => evaluator(p.get_word(replyoffset)); } sensor = s; } if (sensor != null && sensor is OBD2Sensor) { if (rawcommand != null) { (sensor as OBD2Sensor).RawCommand = rawcommand; } else if (command != 0) { (sensor as OBD2Sensor).Command = command; } } if (sensor != null) { sensor.ID = this.Namespace + "." + id; sensor.Name = id; //sensor.Display = display; if (units != null) { sensor.Units = units; } registry.Add(sensor); } reader.ReadEndElement(); } reader.ReadEndElement(); reader.Close(); reader = null; }
public void Activate(SensorRegistry registry) { init(registry); }
public void Activate(SensorRegistry registry) { CoreSensor s; // CommonDistanceRun s = new hobd.DistanceSensor() { ID = "Common.DistanceRun", Name = "DistanceRun", }; s.Units = "km"; registry.Add(s); // CommonAcceleration s = new hobd.GSensor() { ID = "Common.Acceleration", Name = "Acceleration", }; s.Units = "m/s^2"; registry.Add(s); // CommonFuelConsumed s = new hobd.FuelConsumedSensor() { ID = "Common.FuelConsumed", Name = "FuelConsumed", }; s.Units = "liters"; registry.Add(s); // CommonFuelEconomy_trip s = new hobd.FuelEconomyTripSensor() { ID = "Common.FuelEconomy_trip", Name = "FuelEconomy_trip", }; s.Units = "lph"; registry.Add(s); // CommonTripTime s = new hobd.TripTime() { ID = "Common.TripTime", Name = "TripTime", }; s.Units = "seconds"; registry.Add(s); // CommonIdleTime s = new hobd.IdleTime() { ID = "Common.IdleTime", Name = "IdleTime", }; s.Units = "seconds"; registry.Add(s); // CommonSpeed s = new hobd.SpeedCorrectionSensor() { ID = "Common.Speed", Name = "Speed", }; registry.Add(s); }
/// <inheritdoc/> public virtual void DetachRegistry() { this.registry = null; }
public void Activate(SensorRegistry registry) { CoreSensor s; // ToyotaPID_A1 s = new OBD2Sensor() { ID = "Toyota.PID_A1", Name = "PID_A1", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x00); }, Command = 0xA1, }; registry.Add(s); // ToyotaPID_A2 s = new OBD2Sensor() { ID = "Toyota.PID_A2", Name = "PID_A2", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x00); }, Command = 0xA2, }; registry.Add(s); // ToyotaPID_A3 s = new OBD2Sensor() { ID = "Toyota.PID_A3", Name = "PID_A3", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x00); }, Command = 0xA3, }; registry.Add(s); // ToyotaPID_A8 s = new OBD2Sensor() { ID = "Toyota.PID_A8", Name = "PID_A8", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x00); }, Command = 0xA8, }; registry.Add(s); // ToyotaPID_A9 s = new OBD2Sensor() { ID = "Toyota.PID_A9", Name = "PID_A9", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x00); }, Command = 0xA9, }; registry.Add(s); // ToyotaPID_AA s = new OBD2Sensor() { ID = "Toyota.PID_AA", Name = "PID_AA", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x00); }, Command = 0xAA, }; registry.Add(s); // ToyotaPID_AC s = new OBD2Sensor() { ID = "Toyota.PID_AC", Name = "PID_AC", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x00); }, Command = 0xAC, }; registry.Add(s); // ToyotaPID_B1 s = new OBD2Sensor() { ID = "Toyota.PID_B1", Name = "PID_B1", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x00); }, Command = 0xB1, }; registry.Add(s); // ToyotaPID_B2 s = new OBD2Sensor() { ID = "Toyota.PID_B2", Name = "PID_B2", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x00); }, Command = 0xB2, }; registry.Add(s); // ToyotaPID_B2 s = new OBD2Sensor() { ID = "Toyota.PID_B2", Name = "PID_B2", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x01); }, Command = 0xB2, }; registry.Add(s); // ToyotaPID_B2 s = new OBD2Sensor() { ID = "Toyota.PID_B2", Name = "PID_B2", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x02); }, Command = 0xB2, }; registry.Add(s); // ToyotaPID_B2 s = new OBD2Sensor() { ID = "Toyota.PID_B2", Name = "PID_B2", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x03); }, Command = 0xB2, }; registry.Add(s); // ToyotaPID_B2 s = new OBD2Sensor() { ID = "Toyota.PID_B2", Name = "PID_B2", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x04); }, Command = 0xB2, }; registry.Add(s); // ToyotaPID_B2 s = new OBD2Sensor() { ID = "Toyota.PID_B2", Name = "PID_B2", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x05); }, Command = 0xB2, }; registry.Add(s); // ToyotaPID_B3 s = new OBD2Sensor() { ID = "Toyota.PID_B3", Name = "PID_B3", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 1); }, Command = 0xB3, }; registry.Add(s); // ToyotaPID_B3 s = new OBD2Sensor() { ID = "Toyota.PID_B3", Name = "PID_B3", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 2); }, Command = 0xB3, }; registry.Add(s); // ToyotaPID_B3 s = new OBD2Sensor() { ID = "Toyota.PID_B3", Name = "PID_B3", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 3); }, Command = 0xB3, }; registry.Add(s); // ToyotaPID_B3 s = new OBD2Sensor() { ID = "Toyota.PID_B3", Name = "PID_B3", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 4); }, Command = 0xB3, }; registry.Add(s); // ToyotaPID_B3 s = new OBD2Sensor() { ID = "Toyota.PID_B3", Name = "PID_B3", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 5); }, Command = 0xB3, }; registry.Add(s); // ToyotaPID_B3 s = new OBD2Sensor() { ID = "Toyota.PID_B3", Name = "PID_B3", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 6); }, Command = 0xB3, }; registry.Add(s); // ToyotaPID_B3 s = new OBD2Sensor() { ID = "Toyota.PID_B3", Name = "PID_B3", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x02); }, Command = 0xB3, }; registry.Add(s); // ToyotaPID_B3 s = new OBD2Sensor() { ID = "Toyota.PID_B3", Name = "PID_B3", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x03); }, Command = 0xB3, }; registry.Add(s); // ToyotaPID_B3 s = new OBD2Sensor() { ID = "Toyota.PID_B3", Name = "PID_B3", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x04); }, Command = 0xB3, }; registry.Add(s); // ToyotaPID_B3 s = new OBD2Sensor() { ID = "Toyota.PID_B3", Name = "PID_B3", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x05); }, Command = 0xB3, }; registry.Add(s); // ToyotaATFTemp s = new OBD2Sensor() { ID = "Toyota.ATFTemp", Name = "ATFTemp", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x0) - 40; }, Command = 0xB4, }; registry.Add(s); // ToyotaPID_C3 s = new OBD2Sensor() { ID = "Toyota.PID_C3", Name = "PID_C3", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x00); }, Command = 0xC3, }; registry.Add(s); // ToyotaPID_D1 s = new OBD2Sensor() { ID = "Toyota.PID_D1", Name = "PID_D1", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x00); }, Command = 0xD1, }; registry.Add(s); // ToyotaPID_DA s = new OBD2Sensor() { ID = "Toyota.PID_DA", Name = "PID_DA", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x00) * 2.5; }, Command = 0xDA, }; registry.Add(s); // ToyotaPID_DA s = new OBD2Sensor() { ID = "Toyota.PID_DA", Name = "PID_DA", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x02) * 2.5; }, Command = 0xDA, }; registry.Add(s); // ToyotaPID_DA s = new OBD2Sensor() { ID = "Toyota.PID_DA", Name = "PID_DA", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x04) * 2.5; }, Command = 0xDA, }; registry.Add(s); // ToyotaPID_E1 s = new OBD2Sensor() { ID = "Toyota.PID_E1", Name = "PID_E1", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x00); }, Command = 0xE1, }; registry.Add(s); // ToyotaPID_E2 s = new OBD2Sensor() { ID = "Toyota.PID_E2", Name = "PID_E2", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x00); }, Command = 0xE2, }; registry.Add(s); // ToyotaFuelPressureExt s = new OBD2Sensor() { ID = "Toyota.FuelPressureExt", Name = "FuelPressureExt", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x00) * 816 / 255; }, Command = 0xE3, }; registry.Add(s); // ToyotaInjectorPulseWidth s = new OBD2Sensor() { ID = "Toyota.InjectorPulseWidth", Name = "InjectorPulseWidth", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return (get(0x00) * (32.60/255)); }, Command = 0xE4, }; s.Units = "ms"; registry.Add(s); // ToyotaIdleDutyCycle s = new OBD2Sensor() { ID = "Toyota.IdleDutyCycle", Name = "IdleDutyCycle", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return (get(0x00) * (99.4/255)); }, Command = 0xE6, }; s.Units = "%"; registry.Add(s); // ToyotaPID_E7 s = new OBD2Sensor() { ID = "Toyota.PID_E7", Name = "PID_E7", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x00); }, Command = 0xE7, }; registry.Add(s); // ToyotaPID_E8 s = new OBD2Sensor() { ID = "Toyota.PID_E8", Name = "PID_E8", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 1); }, Command = 0xE8, }; registry.Add(s); // ToyotaPID_E8 s = new OBD2Sensor() { ID = "Toyota.PID_E8", Name = "PID_E8", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 2); }, Command = 0xE8, }; registry.Add(s); // ToyotaPID_E8 s = new OBD2Sensor() { ID = "Toyota.PID_E8", Name = "PID_E8", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 3); }, Command = 0xE8, }; registry.Add(s); // ToyotaAT_NP s = new OBD2Sensor() { ID = "Toyota.AT_NP", Name = "AT_NP", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 4); }, Command = 0xE8, }; registry.Add(s); // ToyotaPID_E8 s = new OBD2Sensor() { ID = "Toyota.PID_E8", Name = "PID_E8", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 5); }, Command = 0xE8, }; registry.Add(s); // ToyotaPID_E8 s = new OBD2Sensor() { ID = "Toyota.PID_E8", Name = "PID_E8", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 6); }, Command = 0xE8, }; registry.Add(s); // ToyotaPID_E8 s = new OBD2Sensor() { ID = "Toyota.PID_E8", Name = "PID_E8", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 7); }, Command = 0xE8, }; registry.Add(s); // ToyotaPID_E8 s = new OBD2Sensor() { ID = "Toyota.PID_E8", Name = "PID_E8", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x01, 0); }, Command = 0xE8, }; registry.Add(s); // ToyotaPID_E8 s = new OBD2Sensor() { ID = "Toyota.PID_E8", Name = "PID_E8", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x01, 1); }, Command = 0xE8, }; registry.Add(s); // ToyotaPID_E8 s = new OBD2Sensor() { ID = "Toyota.PID_E8", Name = "PID_E8", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x02, 0); }, Command = 0xE8, }; registry.Add(s); // ToyotaPID_E8 s = new OBD2Sensor() { ID = "Toyota.PID_E8", Name = "PID_E8", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x02, 6); }, Command = 0xE8, }; registry.Add(s); // ToyotaPID_E8 s = new OBD2Sensor() { ID = "Toyota.PID_E8", Name = "PID_E8", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x02, 7); }, Command = 0xE8, }; registry.Add(s); // ToyotaPID_EC s = new OBD2Sensor() { ID = "Toyota.PID_EC", Name = "PID_EC", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x00); }, Command = 0xEC, }; registry.Add(s); // ToyotaPID_ED s = new OBD2Sensor() { ID = "Toyota.PID_ED", Name = "PID_ED", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x00); }, Command = 0xED, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x01); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x02); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x03); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x04); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x05); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x06); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x07); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x08); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x11); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x12); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x13); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x14); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x15); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x16); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x17); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x18); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x21); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x22); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x24); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x25); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x26); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x27); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x28); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x31); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x32); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x33); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x34); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x35); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x36); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x37); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_EF s = new OBD2Sensor() { ID = "Toyota.PID_EF", Name = "PID_EF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x38); }, Command = 0xEF, }; registry.Add(s); // ToyotaPID_F7 s = new OBD2Sensor() { ID = "Toyota.PID_F7", Name = "PID_F7", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x00); }, Command = 0xF7, }; registry.Add(s); // ToyotaShiftPosition s = new OBD2Sensor() { ID = "Toyota.ShiftPosition", Name = "ShiftPosition", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x00); }, Command = 0xF8, }; registry.Add(s); // ToyotaAT_L s = new OBD2Sensor() { ID = "Toyota.AT_L", Name = "AT_L", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 1-1); }, Command = 0xF9, }; registry.Add(s); // ToyotaAT_2 s = new OBD2Sensor() { ID = "Toyota.AT_2", Name = "AT_2", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 2-1); }, Command = 0xF9, }; registry.Add(s); // ToyotaAT_R s = new OBD2Sensor() { ID = "Toyota.AT_R", Name = "AT_R", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 3-1); }, Command = 0xF9, }; registry.Add(s); // ToyotaPID_F9 s = new OBD2Sensor() { ID = "Toyota.PID_F9", Name = "PID_F9", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 4-1); }, Command = 0xF9, }; registry.Add(s); // ToyotaAT_OD s = new OBD2Sensor() { ID = "Toyota.AT_OD", Name = "AT_OD", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 5-1); }, Command = 0xF9, }; registry.Add(s); // ToyotaAT_Kickdown s = new OBD2Sensor() { ID = "Toyota.AT_Kickdown", Name = "AT_Kickdown", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 6-1); }, Command = 0xF9, }; registry.Add(s); // ToyotaStopSignals s = new OBD2Sensor() { ID = "Toyota.StopSignals", Name = "StopSignals", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 7-1); }, Command = 0xF9, }; registry.Add(s); // ToyotaPID_F9 s = new OBD2Sensor() { ID = "Toyota.PID_F9", Name = "PID_F9", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 8-1); }, Command = 0xF9, }; registry.Add(s); // ToyotaAT_3 s = new OBD2Sensor() { ID = "Toyota.AT_3", Name = "AT_3", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x01, 1-1); }, Command = 0xF9, }; registry.Add(s); // ToyotaAT_D s = new OBD2Sensor() { ID = "Toyota.AT_D", Name = "AT_D", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x01, 3-1); }, Command = 0xF9, }; registry.Add(s); // ToyotaPID_F9 s = new OBD2Sensor() { ID = "Toyota.PID_F9", Name = "PID_F9", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x01, 4-1); }, Command = 0xF9, }; registry.Add(s); // ToyotaPID_F9 s = new OBD2Sensor() { ID = "Toyota.PID_F9", Name = "PID_F9", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x01, 5-1); }, Command = 0xF9, }; registry.Add(s); // ToyotaPID_F9 s = new OBD2Sensor() { ID = "Toyota.PID_F9", Name = "PID_F9", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x01, 6-1); }, Command = 0xF9, }; registry.Add(s); // ToyotaPID_F9 s = new OBD2Sensor() { ID = "Toyota.PID_F9", Name = "PID_F9", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x01, 7-1); }, Command = 0xF9, }; registry.Add(s); // ToyotaPID_FB s = new OBD2Sensor() { ID = "Toyota.PID_FB", Name = "PID_FB", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 1-1); }, Command = 0xFB, }; registry.Add(s); // ToyotaPID_FB s = new OBD2Sensor() { ID = "Toyota.PID_FB", Name = "PID_FB", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 2-1); }, Command = 0xFB, }; registry.Add(s); // ToyotaPID_FB s = new OBD2Sensor() { ID = "Toyota.PID_FB", Name = "PID_FB", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 3-1); }, Command = 0xFB, }; registry.Add(s); // ToyotaPID_FB s = new OBD2Sensor() { ID = "Toyota.PID_FB", Name = "PID_FB", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 4-1); }, Command = 0xFB, }; registry.Add(s); // ToyotaPID_FB s = new OBD2Sensor() { ID = "Toyota.PID_FB", Name = "PID_FB", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 5-1); }, Command = 0xFB, }; registry.Add(s); // ToyotaPID_FB s = new OBD2Sensor() { ID = "Toyota.PID_FB", Name = "PID_FB", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 6-1); }, Command = 0xFB, }; registry.Add(s); // ToyotaPID_FB s = new OBD2Sensor() { ID = "Toyota.PID_FB", Name = "PID_FB", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get_bit(0x00, 7-1); }, Command = 0xFB, }; registry.Add(s); }
public void Detach() { this.Registry = null; }
public static void ReloadVehicle() { var vehicle = config.GetVehicle(config.Vehicle); if (vehicle == null){ Logger.error("HOBD", "Bad configuration: can't find vehicle " + config.Vehicle); vehicle = ConfigVehicleData.defaultVehicle; } Registry = new SensorRegistry(); Registry.VehicleParameters = vehicle.Parameters; vehicle.Sensors.ForEach((provider) => { Logger.trace("HOBD", "RegisterProvider: "+ provider); try{ Registry.RegisterProvider(provider); }catch(Exception e){ Logger.error("HOBD", "bad provider", e); } }); EngineConnect(); }
/// <inheritdoc/> public virtual void SetRegistry(SensorRegistry registry) { this.registry = registry; }
public virtual void Detach() { if (Registry == null) return; try{ Registry.RemoveListener(this.SensorChanged); Registry.RemovePassiveListener(this.SensorChanged); }catch(Exception e){ Logger.error("SensorTrack", "Detach fail", e); } Store(); this.Registry = null; }
public void Activate(SensorRegistry registry) { CoreSensor s; // OBD2DTCFRZF s = new OBD2Sensor() { ID = "OBD2.DTCFRZF", Name = "DTCFRZF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x00); }, Command = 0x02, }; registry.Add(s); // OBD2FuelSystemStatus s = new OBD2Sensor() { ID = "OBD2.FuelSystemStatus", Name = "FuelSystemStatus", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return ((int)get(0)<<8) + (p.len() > 1 ? get(1) : 0); }, Command = 0x03, }; registry.Add(s); // OBD2EngineLoad s = new OBD2Sensor() { ID = "OBD2.EngineLoad", Name = "EngineLoad", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0) * 100 / 255; }, Command = 0x04, }; s.Units = "%"; registry.Add(s); // OBD2CoolantTemp s = new OBD2Sensor() { ID = "OBD2.CoolantTemp", Name = "CoolantTemp", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0)-40; }, Command = 0x05, }; s.Units = "celsius"; registry.Add(s); // OBD2STFT1 s = new OBD2Sensor() { ID = "OBD2.STFT1", Name = "STFT1", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return (get(0)-128) * 100/128; }, Command = 0x06, }; s.Units = "%"; registry.Add(s); // OBD2LTFT1 s = new OBD2Sensor() { ID = "OBD2.LTFT1", Name = "LTFT1", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return (get(0)-128) * 100/128; }, Command = 0x07, }; s.Units = "%"; registry.Add(s); // OBD2STFT2 s = new OBD2Sensor() { ID = "OBD2.STFT2", Name = "STFT2", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return (get(0)-128) * 100/128; }, Command = 0x08, }; s.Units = "%"; registry.Add(s); // OBD2LTFT2 s = new OBD2Sensor() { ID = "OBD2.LTFT2", Name = "LTFT2", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return (get(0)-128) * 100/128; }, Command = 0x09, }; s.Units = "%"; registry.Add(s); // OBD2FuelPressure s = new OBD2Sensor() { ID = "OBD2.FuelPressure", Name = "FuelPressure", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0)*3; }, Command = 0x0A, }; s.Units = "kPa"; registry.Add(s); // OBD2IntakeManifoldPressure s = new OBD2Sensor() { ID = "OBD2.IntakeManifoldPressure", Name = "IntakeManifoldPressure", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0); }, Command = 0x0B, }; s.Units = "kPa"; registry.Add(s); // OBD2RPM s = new OBD2Sensor() { ID = "OBD2.RPM", Name = "RPM", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return (get(0)*256 + get(1)) / 4; }, Command = 0x0C, }; s.Units = "rpm"; registry.Add(s); // OBD2Speed s = new OBD2Sensor() { ID = "OBD2.Speed", Name = "Speed", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x00); }, Command = 0x0D, }; s.Units = "kph"; registry.Add(s); // OBD2TimingAdvance s = new OBD2Sensor() { ID = "OBD2.TimingAdvance", Name = "TimingAdvance", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x00)/2 - 64; }, Command = 0x0E, }; s.Units = "°"; registry.Add(s); // OBD2IntakeAirTemp s = new OBD2Sensor() { ID = "OBD2.IntakeAirTemp", Name = "IntakeAirTemp", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0x00) - 40; }, Command = 0x0F, }; s.Units = "celsius"; registry.Add(s); // OBD2MAF s = new OBD2Sensor() { ID = "OBD2.MAF", Name = "MAF", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return ((get(0)*256)+get(1)) / 100; }, Command = 0x10, }; s.Units = "gr/sec"; registry.Add(s); // OBD2ThrottlePosition s = new OBD2Sensor() { ID = "OBD2.ThrottlePosition", Name = "ThrottlePosition", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0)*100 / 255; }, Command = 0x11, }; s.Units = "%"; registry.Add(s); // OBD2Oxygen_b1s1 s = new OBD2Sensor() { ID = "OBD2.Oxygen_b1s1", Name = "Oxygen_b1s1", obdValue = (p) => { return p.get(0)*0.005; }, Command = 0x14, }; s.Units = "V"; registry.Add(s); // OBD2Oxygen_b1s1_stft s = new OBD2Sensor() { ID = "OBD2.Oxygen_b1s1_stft", Name = "Oxygen_b1s1_stft", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return (get(1)-128)*100/128; }, Command = 0x14, }; s.Units = "%"; registry.Add(s); // OBD2Oxygen_b1s2 s = new OBD2Sensor() { ID = "OBD2.Oxygen_b1s2", Name = "Oxygen_b1s2", obdValue = (p) => { return p.get(0)*0.005; }, Command = 0x15, }; s.Units = "V"; registry.Add(s); // OBD2Oxygen_b1s2_stft s = new OBD2Sensor() { ID = "OBD2.Oxygen_b1s2_stft", Name = "Oxygen_b1s2_stft", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return (get(1)-128)*100/128; }, Command = 0x15, }; s.Units = "%"; registry.Add(s); // OBD2Oxygen_b1s3 s = new OBD2Sensor() { ID = "OBD2.Oxygen_b1s3", Name = "Oxygen_b1s3", obdValue = (p) => { return p.get(0)*0.005; }, Command = 0x16, }; s.Units = "V"; registry.Add(s); // OBD2Oxygen_b1s3_stft s = new OBD2Sensor() { ID = "OBD2.Oxygen_b1s3_stft", Name = "Oxygen_b1s3_stft", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return (get(1)-128)*100/128; }, Command = 0x16, }; s.Units = "%"; registry.Add(s); // OBD2Oxygen_b1s4 s = new OBD2Sensor() { ID = "OBD2.Oxygen_b1s4", Name = "Oxygen_b1s4", obdValue = (p) => { return p.get(0)*0.005; }, Command = 0x17, }; s.Units = "V"; registry.Add(s); // OBD2Oxygen_b1s4_stft s = new OBD2Sensor() { ID = "OBD2.Oxygen_b1s4_stft", Name = "Oxygen_b1s4_stft", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return (get(1)-128)*100/128; }, Command = 0x17, }; s.Units = "%"; registry.Add(s); // OBD2Oxygen_b2s1 s = new OBD2Sensor() { ID = "OBD2.Oxygen_b2s1", Name = "Oxygen_b2s1", obdValue = (p) => { return p.get(0)*0.005; }, Command = 0x18, }; s.Units = "V"; registry.Add(s); // OBD2Oxygen_b2s1_stft s = new OBD2Sensor() { ID = "OBD2.Oxygen_b2s1_stft", Name = "Oxygen_b2s1_stft", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return (get(1)-128)*100/128; }, Command = 0x18, }; s.Units = "%"; registry.Add(s); // OBD2Oxygen_b2s2 s = new OBD2Sensor() { ID = "OBD2.Oxygen_b2s2", Name = "Oxygen_b2s2", obdValue = (p) => { return p.get(0)*0.005; }, Command = 0x19, }; s.Units = "V"; registry.Add(s); // OBD2Oxygen_b2s2_stft s = new OBD2Sensor() { ID = "OBD2.Oxygen_b2s2_stft", Name = "Oxygen_b2s2_stft", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return (get(1)-128)*100/128; }, Command = 0x19, }; s.Units = "%"; registry.Add(s); // OBD2Oxygen_b2s3 s = new OBD2Sensor() { ID = "OBD2.Oxygen_b2s3", Name = "Oxygen_b2s3", obdValue = (p) => { return p.get(0)*0.005; }, Command = 0x1a, }; s.Units = "V"; registry.Add(s); // OBD2Oxygen_b2s3_stft s = new OBD2Sensor() { ID = "OBD2.Oxygen_b2s3_stft", Name = "Oxygen_b2s3_stft", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return (get(1)-128)*100/128; }, Command = 0x1a, }; s.Units = "%"; registry.Add(s); // OBD2Oxygen_b2s4 s = new OBD2Sensor() { ID = "OBD2.Oxygen_b2s4", Name = "Oxygen_b2s4", obdValue = (p) => { return p.get(0)*0.005; }, Command = 0x1b, }; s.Units = "V"; registry.Add(s); // OBD2Oxygen_b2s4_stft s = new OBD2Sensor() { ID = "OBD2.Oxygen_b2s4_stft", Name = "Oxygen_b2s4_stft", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return (get(1)-128)*100/128; }, Command = 0x1b, }; s.Units = "%"; registry.Add(s); // OBD2Lambda_b1s1 s = new OBD2Sensor() { ID = "OBD2.Lambda_b1s1", Name = "Lambda_b1s1", obdValue = (p) => { return p.getab()*2 / 65535; }, Command = 0x24, }; s.Units = ""; registry.Add(s); // OBD2Oxygen2_b1s1 s = new OBD2Sensor() { ID = "OBD2.Oxygen2_b1s1", Name = "Oxygen2_b1s1", obdValue = (p) => { return p.getcd()*8 / 65535; }, Command = 0x24, }; s.Units = "V"; registry.Add(s); // OBD2Lambda_b1s2 s = new OBD2Sensor() { ID = "OBD2.Lambda_b1s2", Name = "Lambda_b1s2", obdValue = (p) => { return p.getab()*2 / 65535; }, Command = 0x25, }; s.Units = ""; registry.Add(s); // OBD2Oxygen2_b1s2 s = new OBD2Sensor() { ID = "OBD2.Oxygen2_b1s2", Name = "Oxygen2_b1s2", obdValue = (p) => { return p.getcd()*8 / 65535; }, Command = 0x25, }; s.Units = "V"; registry.Add(s); // OBD2Lambda_b2s1 s = new OBD2Sensor() { ID = "OBD2.Lambda_b2s1", Name = "Lambda_b2s1", obdValue = (p) => { return p.getab()*2 / 65535; }, Command = 0x26, }; s.Units = ""; registry.Add(s); // OBD2Oxygen2_b2s1 s = new OBD2Sensor() { ID = "OBD2.Oxygen2_b2s1", Name = "Oxygen2_b2s1", obdValue = (p) => { return p.getcd()*8 / 65535; }, Command = 0x26, }; s.Units = "V"; registry.Add(s); // OBD2Lambda_b2s2 s = new OBD2Sensor() { ID = "OBD2.Lambda_b2s2", Name = "Lambda_b2s2", obdValue = (p) => { return p.getab()*2 / 65535; }, Command = 0x27, }; s.Units = ""; registry.Add(s); // OBD2Oxygen2_b2s2 s = new OBD2Sensor() { ID = "OBD2.Oxygen2_b2s2", Name = "Oxygen2_b2s2", obdValue = (p) => { return p.getcd()*8 / 65535; }, Command = 0x27, }; s.Units = "V"; registry.Add(s); // OBD2Lambda_b3s1 s = new OBD2Sensor() { ID = "OBD2.Lambda_b3s1", Name = "Lambda_b3s1", obdValue = (p) => { return p.getab()*2 / 65535; }, Command = 0x28, }; s.Units = ""; registry.Add(s); // OBD2Oxygen2_b3s1 s = new OBD2Sensor() { ID = "OBD2.Oxygen2_b3s1", Name = "Oxygen2_b3s1", obdValue = (p) => { return p.getcd()*8 / 65535; }, Command = 0x28, }; s.Units = "V"; registry.Add(s); // OBD2Lambda_b3s2 s = new OBD2Sensor() { ID = "OBD2.Lambda_b3s2", Name = "Lambda_b3s2", obdValue = (p) => { return p.getab()*2 / 65535; }, Command = 0x29, }; s.Units = ""; registry.Add(s); // OBD2Oxygen2_b3s2 s = new OBD2Sensor() { ID = "OBD2.Oxygen2_b3s2", Name = "Oxygen2_b3s2", obdValue = (p) => { return p.getcd()*8 / 65535; }, Command = 0x29, }; s.Units = "V"; registry.Add(s); // OBD2Lambda_b4s1 s = new OBD2Sensor() { ID = "OBD2.Lambda_b4s1", Name = "Lambda_b4s1", obdValue = (p) => { return p.getab()*2 / 65535; }, Command = 0x2a, }; s.Units = ""; registry.Add(s); // OBD2Oxygen2_b4s1 s = new OBD2Sensor() { ID = "OBD2.Oxygen2_b4s1", Name = "Oxygen2_b4s1", obdValue = (p) => { return p.getcd()*8 / 65535; }, Command = 0x2a, }; s.Units = "V"; registry.Add(s); // OBD2Lambda_b4s2 s = new OBD2Sensor() { ID = "OBD2.Lambda_b4s2", Name = "Lambda_b4s2", obdValue = (p) => { return p.getab()*2 / 65535; }, Command = 0x2b, }; s.Units = ""; registry.Add(s); // OBD2Oxygen2_b4s2 s = new OBD2Sensor() { ID = "OBD2.Oxygen2_b4s2", Name = "Oxygen2_b4s2", obdValue = (p) => { return p.getcd()*8 / 65535; }, Command = 0x2b, }; s.Units = "V"; registry.Add(s); // OBD2OBDSupport s = new OBD2Sensor() { ID = "OBD2.OBDSupport", Name = "OBDSupport", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0); }, Command = 0x1C, }; registry.Add(s); // OBD2RunTime s = new OBD2Sensor() { ID = "OBD2.RunTime", Name = "RunTime", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0)*256 + get(1); }, Command = 0x1F, }; s.Units = "sec"; registry.Add(s); // OBD2DistanceMIL s = new OBD2Sensor() { ID = "OBD2.DistanceMIL", Name = "DistanceMIL", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0)*256 + get(1); }, Command = 0x21, }; s.Units = "km"; registry.Add(s); // OBD2FuelRailPressure_rel s = new OBD2Sensor() { ID = "OBD2.FuelRailPressure_rel", Name = "FuelRailPressure_rel", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return (((get(0)*256)+get(1)) * 10) / 128; }, Command = 0x22, }; s.Units = "kPa"; registry.Add(s); // OBD2FuelRailPressure_diesel s = new OBD2Sensor() { ID = "OBD2.FuelRailPressure_diesel", Name = "FuelRailPressure_diesel", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return (((get(0)*256)+get(1)) * 10); }, Command = 0x23, }; s.Units = "kPa"; registry.Add(s); // OBD2CommandedEGR s = new OBD2Sensor() { ID = "OBD2.CommandedEGR", Name = "CommandedEGR", obdValue = (p) => { return p.get(0)*100/255; }, Command = 0x2C, }; s.Units = "%"; registry.Add(s); // OBD2EGRError s = new OBD2Sensor() { ID = "OBD2.EGRError", Name = "EGRError", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return (get(0)-128)*100/128; }, Command = 0x2D, }; s.Units = "%"; registry.Add(s); // OBD2Commanded_EVAP s = new OBD2Sensor() { ID = "OBD2.Commanded_EVAP", Name = "Commanded_EVAP", obdValue = (p) => { return p.get(0)*100/255; }, Command = 0x2E, }; s.Units = "%"; registry.Add(s); // OBD2FuelLevel s = new OBD2Sensor() { ID = "OBD2.FuelLevel", Name = "FuelLevel", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return 100*get(0)/255; }, Command = 0x2F, }; s.Units = "%"; registry.Add(s); // OBD2DistanceMILCleared s = new OBD2Sensor() { ID = "OBD2.DistanceMILCleared", Name = "DistanceMILCleared", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0)*256 + get(1); }, Command = 0x31, }; s.Units = "km"; registry.Add(s); // OBD2VaporPressure s = new OBD2Sensor() { ID = "OBD2.VaporPressure", Name = "VaporPressure", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return (((get(0)*256)+get(1)) / 4); }, Command = 0x32, }; s.Units = "Pa"; registry.Add(s); // OBD2BaroPressure s = new OBD2Sensor() { ID = "OBD2.BaroPressure", Name = "BaroPressure", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0); }, Command = 0x33, }; s.Units = "kPa"; registry.Add(s); // OBD2ControlModuleVoltage s = new OBD2Sensor() { ID = "OBD2.ControlModuleVoltage", Name = "ControlModuleVoltage", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return (((get(0)*256)+get(1)) / 1000); }, Command = 0x42, }; s.Units = "V"; registry.Add(s); // OBD2AbsoluteLoadValue s = new OBD2Sensor() { ID = "OBD2.AbsoluteLoadValue", Name = "AbsoluteLoadValue", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return (((get(0)*256)+get(1)) * 100 / 255); }, Command = 0x43, }; s.Units = "%"; registry.Add(s); // OBD2Lambda s = new OBD2Sensor() { ID = "OBD2.Lambda", Name = "Lambda", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return (get(0)*256 + get(1)) * 2.0 / 65535; }, Command = 0x44, }; registry.Add(s); // OBD2AirTemp s = new OBD2Sensor() { ID = "OBD2.AirTemp", Name = "AirTemp", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return get(0) - 40; }, Command = 0x46, }; s.Units = "celsius"; registry.Add(s); // OBD2EngineOilTemp s = new OBD2Sensor() { ID = "OBD2.EngineOilTemp", Name = "EngineOilTemp", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return (get(0)-40 ); }, Command = 0x5C, }; s.Units = "celsius"; registry.Add(s); // OBD2FuelInjectionTiming s = new OBD2Sensor() { ID = "OBD2.FuelInjectionTiming", Name = "FuelInjectionTiming", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return (((get(0)*256)+get(1) - 26880) / 128); }, Command = 0x5D, }; s.Units = "degree"; registry.Add(s); // OBD2LitersPerHour s = new OBD2Sensor() { ID = "OBD2.LitersPerHour", Name = "LitersPerHour", obdValue = (p) => { Func<int, double> get = p.get; Func<int, int, double> get_bit = p.get_bit; return (((get(0)*256)+get(1)) * 0.05); }, Command = 0x5E, }; s.Units = "lphour"; registry.Add(s); // OBD2TCA_CINP s = new OBD2Sensor() { ID = "OBD2.TCA_CINP", Name = "TCA_CINP", obdValue = (p) => { return p.get(1)*1; }, Command = 0x6F, }; s.Units = "kPa"; registry.Add(s); // OBD2TCB_CINP s = new OBD2Sensor() { ID = "OBD2.TCB_CINP", Name = "TCB_CINP", obdValue = (p) => { return p.get(2)*1; }, Command = 0x6F, }; s.Units = "kPa"; registry.Add(s); // OBD2EP_1 s = new OBD2Sensor() { ID = "OBD2.EP_1", Name = "EP_1", obdValue = (p) => { return p.getbc()*0.01; }, Command = 0x73, }; s.Units = "kPa"; registry.Add(s); // OBD2EP_2 s = new OBD2Sensor() { ID = "OBD2.EP_2", Name = "EP_2", obdValue = (p) => { return p.getde()*0.01; }, Command = 0x73, }; s.Units = "kPa"; registry.Add(s); // OBD2TCA_RPM s = new OBD2Sensor() { ID = "OBD2.TCA_RPM", Name = "TCA_RPM", obdValue = (p) => { return p.getbc()*1; }, Command = 0x74, }; s.Units = "rpm"; registry.Add(s); // OBD2TCB_RPM s = new OBD2Sensor() { ID = "OBD2.TCB_RPM", Name = "TCB_RPM", obdValue = (p) => { return p.getde()*1; }, Command = 0x74, }; s.Units = "rpm"; registry.Add(s); // OBD2MIL s = new hobd.MILSensor() { ID = "OBD2.MIL", Name = "MIL", }; registry.Add(s); // OBD2PMIL s = new hobd.PMILSensor() { ID = "OBD2.PMIL", Name = "PMIL", }; registry.Add(s); // OBD2ClearDTC s = new hobd.ClearDTCSensor() { ID = "OBD2.ClearDTC", Name = "ClearDTC", }; registry.Add(s); }
void init(SensorRegistry registry) { if (reader == null) throw new Exception("Can't do double init"); reader.ReadToFollowing("parameters"); this.Namespace = reader.GetAttribute("namespace") ?? "Default"; this.Description = reader.GetAttribute("description") ?? ""; reader.ReadStartElement("parameters"); while( reader.NodeType == XmlNodeType.Element ){ if (reader.Name == "include") { var name = reader.ReadElementString().Trim(); var ecuinc = new ECUXMLSensorProvider(System.IO.Path.Combine(Path, name)); ecuinc.init(registry); continue; } if (reader.Name != "parameter") { reader.ReadElementString(); continue; } var id = reader.GetAttribute("id"); var display = reader.GetAttribute("display"); reader.ReadStartElement(); int command = 0; string clazz = null; string rawcommand = null; string basename = null; string basenameraw = null; int replyoffset = 0; string units = null; string value = null; string word = null; string wordle = null; string dword = null; string dwordle = null; bool signed = false; double scale = 1; double offset = 0; int bit = -1; int? cutlow = null; int? cuthigh = null; while(reader.NodeType == XmlNodeType.Element) { try{ switch(reader.Name) { case "class": clazz = reader.ReadElementString().Trim(); break; case "address": reader.ReadStartElement(); var hexval = reader.ReadElementString("byte").Trim(); if (hexval.StartsWith("0x")) hexval = hexval.Substring(2); command = int.Parse(hexval, NumberStyles.HexNumber); reader.ReadEndElement(); break; case "raw": rawcommand = reader.ReadElementString().Trim().Replace(";", "\r"); break; case "base": basename = reader.ReadElementString().Trim(); break; case "base-raw": basenameraw = reader.ReadElementString().Trim(); break; case "value": case "valuea": value = reader.ReadElementString(); scale = double.Parse(value, UnitsConverter.DefaultNumberFormat); replyoffset = 0; break; case "valueb": value = reader.ReadElementString(); scale = double.Parse(value, UnitsConverter.DefaultNumberFormat); replyoffset = 1; break; case "valuec": value = reader.ReadElementString(); scale = double.Parse(value, UnitsConverter.DefaultNumberFormat); replyoffset = 2; break; case "valued": value = reader.ReadElementString(); scale = double.Parse(value, UnitsConverter.DefaultNumberFormat); replyoffset = 3; break; case "valueab": word = reader.ReadElementString(); scale = double.Parse(word, UnitsConverter.DefaultNumberFormat); replyoffset = 0; break; case "valuebc": word = reader.ReadElementString(); scale = double.Parse(word, UnitsConverter.DefaultNumberFormat); replyoffset = 1; break; case "valuecd": word = reader.ReadElementString(); scale = double.Parse(word, UnitsConverter.DefaultNumberFormat); replyoffset = 2; break; case "signed": signed = true; reader.ReadElementString(); break; case "offset": offset = double.Parse(reader.ReadElementString(), UnitsConverter.DefaultNumberFormat); break; case "bit": bit = int.Parse(reader.ReadElementString()); break; case "cut-low": cutlow = int.Parse(reader.ReadElementString()); break; case "cut-high": cuthigh = int.Parse(reader.ReadElementString()); break; case "description": reader.ReadStartElement(); while(reader.NodeType == XmlNodeType.Element) { switch(reader.Name) { case "unit": units = reader.ReadElementString().Trim(); break; default: reader.ReadElementString(); break; } } reader.ReadEndElement(); break; default: if (reader.Name.StartsWith("value-")) { replyoffset = int.Parse(reader.Name.Replace("value-","")); value = reader.ReadElementContentAsString(); scale = double.Parse(value, UnitsConverter.DefaultNumberFormat); }else if (reader.Name.StartsWith("word-")) { replyoffset = int.Parse(reader.Name.Replace("word-","")); word = reader.ReadElementContentAsString(); scale = double.Parse(word, UnitsConverter.DefaultNumberFormat); }else if (reader.Name.StartsWith("wordle-")) { replyoffset = int.Parse(reader.Name.Replace("wordle-","")); wordle = reader.ReadElementContentAsString(); scale = double.Parse(wordle, UnitsConverter.DefaultNumberFormat); }else if (reader.Name.StartsWith("dword-")) { replyoffset = int.Parse(reader.Name.Replace("dword-","")); dword = reader.ReadElementContentAsString(); scale = double.Parse(dword, UnitsConverter.DefaultNumberFormat); }else if (reader.Name.StartsWith("dwordle-")) { replyoffset = int.Parse(reader.Name.Replace("dwordle-","")); dwordle = reader.ReadElementContentAsString(); scale = double.Parse(dwordle, UnitsConverter.DefaultNumberFormat); }else { throw new Exception("unknown tag `"+reader.Name+"` while creating PID "+id); } break; } }catch(Exception e){ Logger.error("ECUXMLSensorProvider", "bad sensor param: "+id, e); } } Func<double, double> evaluator = (v) => { if (signed){ if (dword != null || dwordle != null) v = (double)(int)((uint)v); else if (word != null || wordle != null) v = (double)(short)((ushort)v); else v = (double)(sbyte)((byte)v); } var res = v * scale + offset; if (bit != -1) res = ((int)res >> bit)&1; if (cutlow != null) res = res < cutlow ? 0 : res; if (cuthigh != null) res = res > cuthigh ? 0 : res; return res; }; CoreSensor sensor = null; if (clazz != null) { sensor = (CoreSensor)registry.CreateObject(clazz); } // OBD2 derived sensor else if (basename != null) { // Custom derived sensor var s = new DerivedSensor("", basename, null); if (value != null) { s.DerivedValue = (a,b) => evaluator(a.Value); } sensor = s; } // RAW data from base sensor else if (basenameraw != null) { // Custom derived sensor var s = new DerivedSensor("", basenameraw, null); if (value != null) { s.DerivedValue = (a,b) => evaluator((a as OBD2Sensor).getraw(replyoffset)); } if (word != null) { s.DerivedValue = (a,b) => evaluator((a as OBD2Sensor).getraw_word(replyoffset)); } if (wordle != null) { s.DerivedValue = (a,b) => evaluator((a as OBD2Sensor).getraw_wordle(replyoffset)); } if (dword != null) { s.DerivedValue = (a,b) => evaluator((a as OBD2Sensor).getraw_dword(replyoffset)); } if (dwordle != null) { s.DerivedValue = (a,b) => evaluator((a as OBD2Sensor).getraw_dwordle(replyoffset)); } sensor = s; } // command / raw command else if (basename == null) { var s = new OBD2Sensor(); if (value != null) { s.obdValue = (p) => evaluator(p.get(replyoffset)); } if (word != null) { s.obdValue = (p) => evaluator(p.get_word(replyoffset)); } sensor = s; } if (sensor != null && sensor is OBD2Sensor) { if (rawcommand != null) (sensor as OBD2Sensor).RawCommand = rawcommand; else if (command != 0) (sensor as OBD2Sensor).Command = command; } if (sensor != null) { sensor.ID = this.Namespace+"."+id; sensor.Name = id; //sensor.Display = display; if (units != null) sensor.Units = units; registry.Add(sensor); } reader.ReadEndElement(); } reader.ReadEndElement(); reader.Close(); reader = null; }
public void Activate(SensorRegistry registry) { CoreSensor s; // OBD2DTCFRZF s = new OBD2Sensor() { ID = "OBD2.DTCFRZF", Name = "DTCFRZF", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return(get(0x00)); }, Command = 0x02, }; registry.Add(s); // OBD2FuelSystemStatus s = new OBD2Sensor() { ID = "OBD2.FuelSystemStatus", Name = "FuelSystemStatus", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return(((int)get(0) << 8) + (p.len() > 1 ? get(1) : 0)); }, Command = 0x03, }; registry.Add(s); // OBD2EngineLoad s = new OBD2Sensor() { ID = "OBD2.EngineLoad", Name = "EngineLoad", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return(get(0) * 100 / 255); }, Command = 0x04, }; s.Units = "%"; registry.Add(s); // OBD2CoolantTemp s = new OBD2Sensor() { ID = "OBD2.CoolantTemp", Name = "CoolantTemp", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return(get(0) - 40); }, Command = 0x05, }; s.Units = "celsius"; registry.Add(s); // OBD2STFT1 s = new OBD2Sensor() { ID = "OBD2.STFT1", Name = "STFT1", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return((get(0) - 128) * 100 / 128); }, Command = 0x06, }; s.Units = "%"; registry.Add(s); // OBD2LTFT1 s = new OBD2Sensor() { ID = "OBD2.LTFT1", Name = "LTFT1", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return((get(0) - 128) * 100 / 128); }, Command = 0x07, }; s.Units = "%"; registry.Add(s); // OBD2STFT2 s = new OBD2Sensor() { ID = "OBD2.STFT2", Name = "STFT2", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return((get(0) - 128) * 100 / 128); }, Command = 0x08, }; s.Units = "%"; registry.Add(s); // OBD2LTFT2 s = new OBD2Sensor() { ID = "OBD2.LTFT2", Name = "LTFT2", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return((get(0) - 128) * 100 / 128); }, Command = 0x09, }; s.Units = "%"; registry.Add(s); // OBD2FuelPressure s = new OBD2Sensor() { ID = "OBD2.FuelPressure", Name = "FuelPressure", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return(get(0) * 3); }, Command = 0x0A, }; s.Units = "kPa"; registry.Add(s); // OBD2IntakeManifoldPressure s = new OBD2Sensor() { ID = "OBD2.IntakeManifoldPressure", Name = "IntakeManifoldPressure", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return(get(0)); }, Command = 0x0B, }; s.Units = "kPa"; registry.Add(s); // OBD2RPM s = new OBD2Sensor() { ID = "OBD2.RPM", Name = "RPM", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return((get(0) * 256 + get(1)) / 4); }, Command = 0x0C, }; s.Units = "rpm"; registry.Add(s); // OBD2Speed s = new OBD2Sensor() { ID = "OBD2.Speed", Name = "Speed", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return(get(0x00)); }, Command = 0x0D, }; s.Units = "kph"; registry.Add(s); // OBD2TimingAdvance s = new OBD2Sensor() { ID = "OBD2.TimingAdvance", Name = "TimingAdvance", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return(get(0x00) / 2 - 64); }, Command = 0x0E, }; s.Units = "°"; registry.Add(s); // OBD2IntakeAirTemp s = new OBD2Sensor() { ID = "OBD2.IntakeAirTemp", Name = "IntakeAirTemp", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return(get(0x00) - 40); }, Command = 0x0F, }; s.Units = "celsius"; registry.Add(s); // OBD2MAF s = new OBD2Sensor() { ID = "OBD2.MAF", Name = "MAF", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return(((get(0) * 256) + get(1)) / 100); }, Command = 0x10, }; s.Units = "gr/sec"; registry.Add(s); // OBD2ThrottlePosition s = new OBD2Sensor() { ID = "OBD2.ThrottlePosition", Name = "ThrottlePosition", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return(get(0) * 100 / 255); }, Command = 0x11, }; s.Units = "%"; registry.Add(s); // OBD2Oxygen_b1s1 s = new OBD2Sensor() { ID = "OBD2.Oxygen_b1s1", Name = "Oxygen_b1s1", obdValue = (p) => { return(p.get(0) * 0.005); }, Command = 0x14, }; s.Units = "V"; registry.Add(s); // OBD2Oxygen_b1s1_stft s = new OBD2Sensor() { ID = "OBD2.Oxygen_b1s1_stft", Name = "Oxygen_b1s1_stft", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return((get(1) - 128) * 100 / 128); }, Command = 0x14, }; s.Units = "%"; registry.Add(s); // OBD2Oxygen_b1s2 s = new OBD2Sensor() { ID = "OBD2.Oxygen_b1s2", Name = "Oxygen_b1s2", obdValue = (p) => { return(p.get(0) * 0.005); }, Command = 0x15, }; s.Units = "V"; registry.Add(s); // OBD2Oxygen_b1s2_stft s = new OBD2Sensor() { ID = "OBD2.Oxygen_b1s2_stft", Name = "Oxygen_b1s2_stft", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return((get(1) - 128) * 100 / 128); }, Command = 0x15, }; s.Units = "%"; registry.Add(s); // OBD2Oxygen_b1s3 s = new OBD2Sensor() { ID = "OBD2.Oxygen_b1s3", Name = "Oxygen_b1s3", obdValue = (p) => { return(p.get(0) * 0.005); }, Command = 0x16, }; s.Units = "V"; registry.Add(s); // OBD2Oxygen_b1s3_stft s = new OBD2Sensor() { ID = "OBD2.Oxygen_b1s3_stft", Name = "Oxygen_b1s3_stft", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return((get(1) - 128) * 100 / 128); }, Command = 0x16, }; s.Units = "%"; registry.Add(s); // OBD2Oxygen_b1s4 s = new OBD2Sensor() { ID = "OBD2.Oxygen_b1s4", Name = "Oxygen_b1s4", obdValue = (p) => { return(p.get(0) * 0.005); }, Command = 0x17, }; s.Units = "V"; registry.Add(s); // OBD2Oxygen_b1s4_stft s = new OBD2Sensor() { ID = "OBD2.Oxygen_b1s4_stft", Name = "Oxygen_b1s4_stft", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return((get(1) - 128) * 100 / 128); }, Command = 0x17, }; s.Units = "%"; registry.Add(s); // OBD2Oxygen_b2s1 s = new OBD2Sensor() { ID = "OBD2.Oxygen_b2s1", Name = "Oxygen_b2s1", obdValue = (p) => { return(p.get(0) * 0.005); }, Command = 0x18, }; s.Units = "V"; registry.Add(s); // OBD2Oxygen_b2s1_stft s = new OBD2Sensor() { ID = "OBD2.Oxygen_b2s1_stft", Name = "Oxygen_b2s1_stft", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return((get(1) - 128) * 100 / 128); }, Command = 0x18, }; s.Units = "%"; registry.Add(s); // OBD2Oxygen_b2s2 s = new OBD2Sensor() { ID = "OBD2.Oxygen_b2s2", Name = "Oxygen_b2s2", obdValue = (p) => { return(p.get(0) * 0.005); }, Command = 0x19, }; s.Units = "V"; registry.Add(s); // OBD2Oxygen_b2s2_stft s = new OBD2Sensor() { ID = "OBD2.Oxygen_b2s2_stft", Name = "Oxygen_b2s2_stft", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return((get(1) - 128) * 100 / 128); }, Command = 0x19, }; s.Units = "%"; registry.Add(s); // OBD2Oxygen_b2s3 s = new OBD2Sensor() { ID = "OBD2.Oxygen_b2s3", Name = "Oxygen_b2s3", obdValue = (p) => { return(p.get(0) * 0.005); }, Command = 0x1a, }; s.Units = "V"; registry.Add(s); // OBD2Oxygen_b2s3_stft s = new OBD2Sensor() { ID = "OBD2.Oxygen_b2s3_stft", Name = "Oxygen_b2s3_stft", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return((get(1) - 128) * 100 / 128); }, Command = 0x1a, }; s.Units = "%"; registry.Add(s); // OBD2Oxygen_b2s4 s = new OBD2Sensor() { ID = "OBD2.Oxygen_b2s4", Name = "Oxygen_b2s4", obdValue = (p) => { return(p.get(0) * 0.005); }, Command = 0x1b, }; s.Units = "V"; registry.Add(s); // OBD2Oxygen_b2s4_stft s = new OBD2Sensor() { ID = "OBD2.Oxygen_b2s4_stft", Name = "Oxygen_b2s4_stft", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return((get(1) - 128) * 100 / 128); }, Command = 0x1b, }; s.Units = "%"; registry.Add(s); // OBD2Lambda_b1s1 s = new OBD2Sensor() { ID = "OBD2.Lambda_b1s1", Name = "Lambda_b1s1", obdValue = (p) => { return(p.getab() * 2 / 65535); }, Command = 0x24, }; s.Units = ""; registry.Add(s); // OBD2Oxygen2_b1s1 s = new OBD2Sensor() { ID = "OBD2.Oxygen2_b1s1", Name = "Oxygen2_b1s1", obdValue = (p) => { return(p.getcd() * 8 / 65535); }, Command = 0x24, }; s.Units = "V"; registry.Add(s); // OBD2Lambda_b1s2 s = new OBD2Sensor() { ID = "OBD2.Lambda_b1s2", Name = "Lambda_b1s2", obdValue = (p) => { return(p.getab() * 2 / 65535); }, Command = 0x25, }; s.Units = ""; registry.Add(s); // OBD2Oxygen2_b1s2 s = new OBD2Sensor() { ID = "OBD2.Oxygen2_b1s2", Name = "Oxygen2_b1s2", obdValue = (p) => { return(p.getcd() * 8 / 65535); }, Command = 0x25, }; s.Units = "V"; registry.Add(s); // OBD2Lambda_b2s1 s = new OBD2Sensor() { ID = "OBD2.Lambda_b2s1", Name = "Lambda_b2s1", obdValue = (p) => { return(p.getab() * 2 / 65535); }, Command = 0x26, }; s.Units = ""; registry.Add(s); // OBD2Oxygen2_b2s1 s = new OBD2Sensor() { ID = "OBD2.Oxygen2_b2s1", Name = "Oxygen2_b2s1", obdValue = (p) => { return(p.getcd() * 8 / 65535); }, Command = 0x26, }; s.Units = "V"; registry.Add(s); // OBD2Lambda_b2s2 s = new OBD2Sensor() { ID = "OBD2.Lambda_b2s2", Name = "Lambda_b2s2", obdValue = (p) => { return(p.getab() * 2 / 65535); }, Command = 0x27, }; s.Units = ""; registry.Add(s); // OBD2Oxygen2_b2s2 s = new OBD2Sensor() { ID = "OBD2.Oxygen2_b2s2", Name = "Oxygen2_b2s2", obdValue = (p) => { return(p.getcd() * 8 / 65535); }, Command = 0x27, }; s.Units = "V"; registry.Add(s); // OBD2Lambda_b3s1 s = new OBD2Sensor() { ID = "OBD2.Lambda_b3s1", Name = "Lambda_b3s1", obdValue = (p) => { return(p.getab() * 2 / 65535); }, Command = 0x28, }; s.Units = ""; registry.Add(s); // OBD2Oxygen2_b3s1 s = new OBD2Sensor() { ID = "OBD2.Oxygen2_b3s1", Name = "Oxygen2_b3s1", obdValue = (p) => { return(p.getcd() * 8 / 65535); }, Command = 0x28, }; s.Units = "V"; registry.Add(s); // OBD2Lambda_b3s2 s = new OBD2Sensor() { ID = "OBD2.Lambda_b3s2", Name = "Lambda_b3s2", obdValue = (p) => { return(p.getab() * 2 / 65535); }, Command = 0x29, }; s.Units = ""; registry.Add(s); // OBD2Oxygen2_b3s2 s = new OBD2Sensor() { ID = "OBD2.Oxygen2_b3s2", Name = "Oxygen2_b3s2", obdValue = (p) => { return(p.getcd() * 8 / 65535); }, Command = 0x29, }; s.Units = "V"; registry.Add(s); // OBD2Lambda_b4s1 s = new OBD2Sensor() { ID = "OBD2.Lambda_b4s1", Name = "Lambda_b4s1", obdValue = (p) => { return(p.getab() * 2 / 65535); }, Command = 0x2a, }; s.Units = ""; registry.Add(s); // OBD2Oxygen2_b4s1 s = new OBD2Sensor() { ID = "OBD2.Oxygen2_b4s1", Name = "Oxygen2_b4s1", obdValue = (p) => { return(p.getcd() * 8 / 65535); }, Command = 0x2a, }; s.Units = "V"; registry.Add(s); // OBD2Lambda_b4s2 s = new OBD2Sensor() { ID = "OBD2.Lambda_b4s2", Name = "Lambda_b4s2", obdValue = (p) => { return(p.getab() * 2 / 65535); }, Command = 0x2b, }; s.Units = ""; registry.Add(s); // OBD2Oxygen2_b4s2 s = new OBD2Sensor() { ID = "OBD2.Oxygen2_b4s2", Name = "Oxygen2_b4s2", obdValue = (p) => { return(p.getcd() * 8 / 65535); }, Command = 0x2b, }; s.Units = "V"; registry.Add(s); // OBD2OBDSupport s = new OBD2Sensor() { ID = "OBD2.OBDSupport", Name = "OBDSupport", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return(get(0)); }, Command = 0x1C, }; registry.Add(s); // OBD2RunTime s = new OBD2Sensor() { ID = "OBD2.RunTime", Name = "RunTime", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return(get(0) * 256 + get(1)); }, Command = 0x1F, }; s.Units = "sec"; registry.Add(s); // OBD2DistanceMIL s = new OBD2Sensor() { ID = "OBD2.DistanceMIL", Name = "DistanceMIL", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return(get(0) * 256 + get(1)); }, Command = 0x21, }; s.Units = "km"; registry.Add(s); // OBD2FuelRailPressure_rel s = new OBD2Sensor() { ID = "OBD2.FuelRailPressure_rel", Name = "FuelRailPressure_rel", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return((((get(0) * 256) + get(1)) * 10) / 128); }, Command = 0x22, }; s.Units = "kPa"; registry.Add(s); // OBD2FuelRailPressure_diesel s = new OBD2Sensor() { ID = "OBD2.FuelRailPressure_diesel", Name = "FuelRailPressure_diesel", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return(((get(0) * 256) + get(1)) * 10); }, Command = 0x23, }; s.Units = "kPa"; registry.Add(s); // OBD2CommandedEGR s = new OBD2Sensor() { ID = "OBD2.CommandedEGR", Name = "CommandedEGR", obdValue = (p) => { return(p.get(0) * 100 / 255); }, Command = 0x2C, }; s.Units = "%"; registry.Add(s); // OBD2EGRError s = new OBD2Sensor() { ID = "OBD2.EGRError", Name = "EGRError", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return((get(0) - 128) * 100 / 128); }, Command = 0x2D, }; s.Units = "%"; registry.Add(s); // OBD2Commanded_EVAP s = new OBD2Sensor() { ID = "OBD2.Commanded_EVAP", Name = "Commanded_EVAP", obdValue = (p) => { return(p.get(0) * 100 / 255); }, Command = 0x2E, }; s.Units = "%"; registry.Add(s); // OBD2FuelLevel s = new OBD2Sensor() { ID = "OBD2.FuelLevel", Name = "FuelLevel", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return(100 * get(0) / 255); }, Command = 0x2F, }; s.Units = "%"; registry.Add(s); // OBD2DistanceMILCleared s = new OBD2Sensor() { ID = "OBD2.DistanceMILCleared", Name = "DistanceMILCleared", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return(get(0) * 256 + get(1)); }, Command = 0x31, }; s.Units = "km"; registry.Add(s); // OBD2VaporPressure s = new OBD2Sensor() { ID = "OBD2.VaporPressure", Name = "VaporPressure", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return(((get(0) * 256) + get(1)) / 4); }, Command = 0x32, }; s.Units = "Pa"; registry.Add(s); // OBD2BaroPressure s = new OBD2Sensor() { ID = "OBD2.BaroPressure", Name = "BaroPressure", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return(get(0)); }, Command = 0x33, }; s.Units = "kPa"; registry.Add(s); // OBD2ControlModuleVoltage s = new OBD2Sensor() { ID = "OBD2.ControlModuleVoltage", Name = "ControlModuleVoltage", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return(((get(0) * 256) + get(1)) / 1000); }, Command = 0x42, }; s.Units = "V"; registry.Add(s); // OBD2AbsoluteLoadValue s = new OBD2Sensor() { ID = "OBD2.AbsoluteLoadValue", Name = "AbsoluteLoadValue", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return(((get(0) * 256) + get(1)) * 100 / 255); }, Command = 0x43, }; s.Units = "%"; registry.Add(s); // OBD2Lambda s = new OBD2Sensor() { ID = "OBD2.Lambda", Name = "Lambda", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return((get(0) * 256 + get(1)) * 2.0 / 65535); }, Command = 0x44, }; registry.Add(s); // OBD2AirTemp s = new OBD2Sensor() { ID = "OBD2.AirTemp", Name = "AirTemp", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return(get(0) - 40); }, Command = 0x46, }; s.Units = "celsius"; registry.Add(s); // OBD2EngineOilTemp s = new OBD2Sensor() { ID = "OBD2.EngineOilTemp", Name = "EngineOilTemp", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return(get(0) - 40); }, Command = 0x5C, }; s.Units = "celsius"; registry.Add(s); // OBD2FuelInjectionTiming s = new OBD2Sensor() { ID = "OBD2.FuelInjectionTiming", Name = "FuelInjectionTiming", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return(((get(0) * 256) + get(1) - 26880) / 128); }, Command = 0x5D, }; s.Units = "degree"; registry.Add(s); // OBD2LitersPerHour s = new OBD2Sensor() { ID = "OBD2.LitersPerHour", Name = "LitersPerHour", obdValue = (p) => { Func <int, double> get = p.get; Func <int, int, double> get_bit = p.get_bit; return(((get(0) * 256) + get(1)) * 0.05); }, Command = 0x5E, }; s.Units = "lphour"; registry.Add(s); // OBD2TCA_CINP s = new OBD2Sensor() { ID = "OBD2.TCA_CINP", Name = "TCA_CINP", obdValue = (p) => { return(p.get(1) * 1); }, Command = 0x6F, }; s.Units = "kPa"; registry.Add(s); // OBD2TCB_CINP s = new OBD2Sensor() { ID = "OBD2.TCB_CINP", Name = "TCB_CINP", obdValue = (p) => { return(p.get(2) * 1); }, Command = 0x6F, }; s.Units = "kPa"; registry.Add(s); // OBD2EP_1 s = new OBD2Sensor() { ID = "OBD2.EP_1", Name = "EP_1", obdValue = (p) => { return(p.getbc() * 0.01); }, Command = 0x73, }; s.Units = "kPa"; registry.Add(s); // OBD2EP_2 s = new OBD2Sensor() { ID = "OBD2.EP_2", Name = "EP_2", obdValue = (p) => { return(p.getde() * 0.01); }, Command = 0x73, }; s.Units = "kPa"; registry.Add(s); // OBD2TCA_RPM s = new OBD2Sensor() { ID = "OBD2.TCA_RPM", Name = "TCA_RPM", obdValue = (p) => { return(p.getbc() * 1); }, Command = 0x74, }; s.Units = "rpm"; registry.Add(s); // OBD2TCB_RPM s = new OBD2Sensor() { ID = "OBD2.TCB_RPM", Name = "TCB_RPM", obdValue = (p) => { return(p.getde() * 1); }, Command = 0x74, }; s.Units = "rpm"; registry.Add(s); // OBD2MIL s = new hobd.MILSensor() { ID = "OBD2.MIL", Name = "MIL", }; registry.Add(s); // OBD2PMIL s = new hobd.PMILSensor() { ID = "OBD2.PMIL", Name = "PMIL", }; registry.Add(s); // OBD2ClearDTC s = new hobd.ClearDTCSensor() { ID = "OBD2.ClearDTC", Name = "ClearDTC", }; registry.Add(s); }