]> git.tdb.fi Git - r2c2.git/commitdiff
Add telemetry framework for drivers
authorMikko Rasa <tdb@tdb.fi>
Thu, 19 Feb 2015 12:01:52 +0000 (14:01 +0200)
committerMikko Rasa <tdb@tdb.fi>
Thu, 19 Feb 2015 13:28:36 +0000 (15:28 +0200)
source/libr2c2/arducontrol.cpp
source/libr2c2/arducontrol.h
source/libr2c2/centralstation.cpp
source/libr2c2/centralstation.h
source/libr2c2/driver.h
source/libr2c2/dummy.cpp
source/libr2c2/dummy.h
source/libr2c2/intellibox.cpp
source/libr2c2/intellibox.h

index 40b3d35fd9f84693f233ad9490eb5013fa7bab57..1af7fcad3bed831bcfd474628cc7ad5265691a87 100644 (file)
@@ -327,6 +327,11 @@ bool ArduControl::get_sensor(unsigned addr) const
        return get_item(sensors, addr).state;
 }
 
+float ArduControl::get_telemetry_value(const string &name) const
+{
+       throw key_error(name);
+}
+
 void ArduControl::tick()
 {
        Tag tag;
index c170e4203c9c2eb3de864de49d958a0a10b6e794..292700d5c452d8daee03e2815542e34b7297404e 100644 (file)
@@ -458,6 +458,9 @@ public:
        virtual void set_sensor(unsigned, bool) { }
        virtual bool get_sensor(unsigned) const;
 
+       virtual const TelemetryInfo *enumerate_telemetry(unsigned) const { return 0; }
+       virtual float get_telemetry_value(const std::string &) const;
+
        virtual void tick();
        virtual void flush();
 private:
index fc7855b0726fc9fbcf8183d45e3b05ddd57d35ad..5e82f2e5f117c23d9137bb80ff41b0b4359d2ecb 100644 (file)
@@ -1,4 +1,5 @@
 #include <algorithm>
+#include <msp/core/maputils.h>
 #include <msp/core/refptr.h>
 #include <msp/io/print.h>
 #include <msp/net/resolve.h>
@@ -328,6 +329,11 @@ bool CentralStation::get_sensor(unsigned addr) const
        return false;
 }
 
+float CentralStation::get_telemetry_value(const string &name) const
+{
+       throw key_error(name);
+}
+
 void CentralStation::tick()
 {
        while(Message msg = receive())
index f23fa66806cb809e7be4de1edc934811a227fabe..959a5acb6b21b8429ba8dfe851f1c7bbee1d5e90 100644 (file)
@@ -167,6 +167,9 @@ public:
        virtual void set_sensor(unsigned, bool) { }
        virtual bool get_sensor(unsigned) const;
 
+       virtual const TelemetryInfo *enumerate_telemetry(unsigned) const { return 0; }
+       virtual float get_telemetry_value(const std::string &) const;
+
        virtual void tick();
        virtual void flush();
 
index a0e5cc434405a194e56099bd5e3f63dd7512e8b4..3f5a75ce2a6b959d31071d38436c2d73bbef8f0e 100644 (file)
@@ -45,6 +45,14 @@ public:
                std::string name;
        };
 
+       struct TelemetryInfo
+       {
+               const char *name;
+               const char *label;
+               const char *unit;
+               unsigned precision;
+       };
+
        sigc::signal<void, bool> signal_power;
        sigc::signal<void, bool> signal_halt;
        sigc::signal<void, const DetectedLocomotive &> signal_locomotive_detected;
@@ -91,6 +99,9 @@ public:
        virtual void set_sensor(unsigned, bool) = 0;
        virtual bool get_sensor(unsigned) const = 0;
 
+       virtual const TelemetryInfo *enumerate_telemetry(unsigned) const = 0;
+       virtual float get_telemetry_value(const std::string &) const = 0;
+
        virtual void tick() = 0;
        virtual void flush() = 0;
 
index 0c3c351d968d01b23a79597aa4e725791dea5d62..ba23449ad304a50fe99f043114b439795c0cc666 100644 (file)
@@ -1,4 +1,5 @@
 #include <cstdlib>
+#include <msp/core/maputils.h>
 #include <msp/strings/utils.h>
 #include <msp/time/utils.h>
 #include "dummy.h"
@@ -117,6 +118,11 @@ bool Dummy::get_sensor(unsigned addr) const
        return false;
 }
 
+float Dummy::get_telemetry_value(const string &name) const
+{
+       throw key_error(name);
+}
+
 void Dummy::tick()
 {
        Time::TimeStamp t = Time::now();
index 547efc3269622850b764feeadea4adb73f08df17..37aec3ac16c691314dce2c7b838939c991ce392f 100644 (file)
@@ -64,6 +64,9 @@ public:
        virtual void set_sensor(unsigned, bool);
        virtual bool get_sensor(unsigned) const;
 
+       virtual const TelemetryInfo *enumerate_telemetry(unsigned) const { return 0; }
+       virtual float get_telemetry_value(const std::string &) const;
+
        virtual void tick();
        virtual void flush() { }
 };
index 4c8f2ac783b1e6fbf73bdff9aa73d2f2b1a73e2c..c2e5d75af7fefd6eea28d927c55e700d9c7b5da4 100644 (file)
@@ -1,6 +1,7 @@
 #include <fcntl.h>
 #include <termios.h>
 #include <sys/poll.h>
+#include <msp/core/maputils.h>
 #include <msp/io/print.h>
 #include <msp/time/units.h>
 #include <msp/time/utils.h>
@@ -318,6 +319,11 @@ bool Intellibox::get_sensor(unsigned addr) const
        return false;
 }
 
+float Intellibox::get_telemetry_value(const string &name) const
+{
+       throw key_error(name);
+}
+
 void Intellibox::tick()
 {
        const Time::TimeStamp t = Time::now();
index df379a380518069ba0351ebdc06604c686f50556..caf84905dbe617524167838468fabeac6a106010 100644 (file)
@@ -163,6 +163,9 @@ public:
        virtual void set_sensor(unsigned, bool) { }
        virtual bool get_sensor(unsigned) const;
 
+       virtual const TelemetryInfo *enumerate_telemetry(unsigned) const { return 0; }
+       virtual float get_telemetry_value(const std::string &) const;
+
        virtual void tick();
        virtual void flush();