Registry with active set of sensors
Esempio n. 1
0
 public override void SetRegistry(SensorRegistry registry)
 {
     base.SetRegistry(registry);
     try{
     IdleSpeed = double.Parse(registry.VehicleParameters["idle-speed"], UnitsConverter.DefaultNumberFormat);
     }catch(Exception){}
 }
Esempio n. 2
0
 public override void SetRegistry(SensorRegistry registry)
 {
     base.SetRegistry(registry);
     try{
         IdleSpeed = double.Parse(registry.VehicleParameters["idle-speed"], UnitsConverter.DefaultNumberFormat);
     }catch (Exception) {}
 }
Esempio n. 3
0
        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();
        }
Esempio n. 4
0
        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);
            }
        }
Esempio n. 5
0
        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");
            }
        }
Esempio n. 6
0
        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");
            }
        }
Esempio n. 7
0
        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);
            }
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
        public void Activate(SensorRegistry registry)
        {
            CoreSensor s;

            // ELMBatteryVoltage
            s = new hobd.elm.ELMVoltageSensor()
            {
                ID   = "ELM.BatteryVoltage",
                Name = "BatteryVoltage",
            };

            s.Units = "V";

            registry.Add(s);
        }
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
        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);
        }
Esempio n. 13
0
        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;
        }
Esempio n. 14
0
        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);
        }
Esempio n. 15
0
        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);
        }
Esempio n. 16
0
        public void Activate(SensorRegistry registry)
        {
            CoreSensor s;

            // ELMBatteryVoltage
            s = new hobd.elm.ELMVoltageSensor()
            {
                ID = "ELM.BatteryVoltage",
                Name = "BatteryVoltage",

            };

            s.Units = "V";

            registry.Add(s);
        }
Esempio n. 17
0
        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);
                    }
                }
            }
        }
Esempio n. 18
0
        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");
            }
        }
Esempio n. 19
0
        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");
            }
        }
Esempio n. 20
0
        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);
            }
        }
Esempio n. 21
0
        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);
                }
            }
            }
        }
Esempio n. 22
0
        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;
            }
        }
Esempio n. 23
0
        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;
        }
Esempio n. 24
0
 public void Activate(SensorRegistry registry)
 {
     init(registry);
 }
Esempio n. 25
0
        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);
        }
Esempio n. 26
0
 /// <inheritdoc/>
 public virtual void DetachRegistry()
 {
     this.registry = null;
 }
Esempio n. 27
0
        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);
        }
Esempio n. 28
0
 public void Detach()
 {
     this.Registry = null;
 }
Esempio n. 29
0
        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();
        }
Esempio n. 30
0
 /// <inheritdoc/>
 public virtual void SetRegistry(SensorRegistry registry)
 {
     this.registry = registry;
 }
Esempio n. 31
0
        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;
        }
Esempio n. 32
0
        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);
        }
Esempio n. 33
0
        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);
        }
Esempio n. 34
0
 /// <inheritdoc/>
 public virtual void SetRegistry(SensorRegistry registry)
 {
     this.registry = registry;
 }
Esempio n. 35
0
        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;
        }
Esempio n. 36
0
 public void Detach()
 {
     this.Registry = null;
 }
Esempio n. 37
0
        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);
        }
Esempio n. 38
0
 public void Activate(SensorRegistry registry)
 {
     init(registry);
 }
Esempio n. 39
0
 /// <inheritdoc/>
 public virtual void DetachRegistry()
 {
     this.registry = null;
 }