config required to construct plugins. device config added to wheel plugin 53/1853/1
authorKevron Rees <kevron_m_rees@linux.intel.com>
Mon, 24 Sep 2012 19:28:39 +0000 (12:28 -0700)
committerKevron Rees <kevron_m_rees@linux.intel.com>
Mon, 24 Sep 2012 19:28:39 +0000 (12:28 -0700)
27 files changed:
ambd/pluginloader.cpp
ambd/pluginloader.h
examples/configwheel
examples/democonfig
lib/abstractsink.cpp
lib/abstractsink.h
lib/abstractsource.cpp
lib/abstractsource.h
plugins/dbus/accelerationproperty.cpp
plugins/dbus/dbusplugin.cpp
plugins/dbus/dbusplugin.h
plugins/dbus/properties.h
plugins/demosink/demosinkplugin.cpp
plugins/demosink/demosinkplugin.h
plugins/exampleplugin.cpp
plugins/exampleplugin.h
plugins/examplesink.cpp
plugins/examplesink.h
plugins/obd2plugin/obd2source.cpp
plugins/obd2plugin/obd2source.h
plugins/websocketsink/websocketsink.cpp
plugins/websocketsink/websocketsinkmanager.cpp
plugins/websocketsink/websocketsinkmanager.h
plugins/websocketsourceplugin/websocketsource.cpp
plugins/websocketsourceplugin/websocketsource.h
plugins/wheel/wheelplugin.cpp
plugins/wheel/wheelplugin.h

index 4e63f97..33107de 100644 (file)
@@ -97,12 +97,11 @@ PluginLoader::PluginLoader(string configFile, AbstractRoutingEngine* re): f_crea
                string path = json_reader_get_string_value(reader);
                json_reader_end_member(reader);
 
-               AbstractSource* plugin = loadPlugin<AbstractSource*>(path);
+               AbstractSource* plugin = loadPlugin<AbstractSource*>(path,configurationMap);
                
                if(plugin != nullptr)
                {
                        mSources.push_back(plugin);
-                       plugin->setConfiguration(configurationMap);
                }
 
                json_reader_end_element(reader);
@@ -133,15 +132,13 @@ PluginLoader::PluginLoader(string configFile, AbstractRoutingEngine* re): f_crea
                string path = json_reader_get_string_value(reader);
                json_reader_end_member(reader);
 
-               AbstractSinkManager* plugin = loadPlugin<AbstractSinkManager*>(path);
+               AbstractSinkManager* plugin = loadPlugin<AbstractSinkManager*>(path, configurationMap);
 
                if(plugin == nullptr)
                {
                        throw std::runtime_error("plugin is not a SinkManager");
                }
 
-               plugin->setConfiguration(configurationMap);
-
                json_reader_end_element(reader);
        }
 
index 43b6bfc..18edb9e 100644 (file)
@@ -33,7 +33,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
 using namespace std;
 
-typedef void* create_t(AbstractRoutingEngine*);
+typedef void* create_t(AbstractRoutingEngine*, map<string, string> );
 
 
 class PluginLoader
@@ -51,7 +51,7 @@ public:
 private: ///methods:
        
        template<class T>
-       T loadPlugin(string pluginName)
+       T loadPlugin(string pluginName, map<string, string> config)
        {
                DebugOut()<<"Loading plugin: "<<pluginName<<endl;
                
@@ -79,7 +79,7 @@ private: ///methods:
                
                if(f_create) 
                {
-                       void* obj = f_create(routingEngine);
+                       void* obj = f_create(routingEngine, config);
                        return static_cast<T>( obj );
                }
                
index c58520d..522cca3 100644 (file)
@@ -2,7 +2,8 @@
        "sources" : [ 
                {
                        "name" : "WheelSource",
-                       "path" : "/usr/lib/automotive-message-broker/wheelsourceplugin.so"
+                       "path" : "/usr/lib/automotive-message-broker/wheelsourceplugin.so",
+                       "device" : "/dev/input/js1"
                }
        ],
        "sinks": [
index 86ab11f..f86dd71 100644 (file)
@@ -2,13 +2,15 @@
        "sources" : [ 
                {
                        "name" : "WheelSource",
-                       "path" : "/usr/lib/automotive-message-broker/wheelsourceplugin.so"
+                       "path" : "/usr/lib/automotive-message-broker/wheelsourceplugin.so",
+                       "device" : "/dev/input/js1"
                }
        ],
        "sinks": [
                {
                        "name" : "WebSocketSink",
-                       "path" : "/usr/lib/automotive-message-broker/websocketsinkplugin.so"
+                       "path" : "/usr/lib/automotive-message-broker/websocketsinkplugin.so",
+                       "interface" : "lo"
                } ,
                {
                        "path" : "/usr/lib/automotive-message-broker/demosinkplugin.so",
index 4d0a704..a8ec558 100644 (file)
@@ -20,8 +20,8 @@
 #include "abstractsink.h"
 #include "abstractroutingengine.h"
 
-AbstractSink::AbstractSink(AbstractRoutingEngine* engine)
-:routingEngine(engine)
+AbstractSink::AbstractSink(AbstractRoutingEngine* engine, map<string, string> config)
+       :routingEngine(engine), configuration(config)
 {
        routingEngine->registerSink(this);
 }
@@ -36,15 +36,11 @@ void AbstractSink::setConfiguration(map<string, string> config)
        configuration = config;
 }
 
-AbstractSinkManager::AbstractSinkManager(AbstractRoutingEngine* engine)
+AbstractSinkManager::AbstractSinkManager(AbstractRoutingEngine* engine, map<string, string> config)
 :routingEngine(engine)
 {
-
-}
-
-void AbstractSinkManager::setConfiguration(map<string, string> config)
-{
        configuration = config;
 }
 
 
+
index 6c5b907..110c72e 100644 (file)
@@ -40,7 +40,7 @@ class AbstractSink
 {
 
 public:
-       AbstractSink(AbstractRoutingEngine* engine);
+       AbstractSink(AbstractRoutingEngine* engine, map<string, string> config);
        virtual ~AbstractSink();
        
        ///Pure virtual methods:
@@ -72,9 +72,7 @@ class AbstractSinkManager
 {
 public:
        
-       AbstractSinkManager(AbstractRoutingEngine* engine);
-
-       virtual void setConfiguration(map<string, string> config);
+       AbstractSinkManager(AbstractRoutingEngine* engine, map<string, string> config);
        
 protected:
        AbstractRoutingEngine* routingEngine;
index ada4b96..55e8d90 100644 (file)
@@ -19,8 +19,8 @@
 
 #include "abstractsource.h"
 
-AbstractSource::AbstractSource(AbstractRoutingEngine* engine)
-: AbstractSink(engine), routingEngine(engine)
+AbstractSource::AbstractSource(AbstractRoutingEngine* engine, map<string, string> config)
+       : AbstractSink(engine,config), routingEngine(engine)
 {
        
 }
index 6db0e51..70d55f5 100644 (file)
@@ -39,7 +39,7 @@ class AbstractSource: public AbstractSink
 {
 
 public:
-       AbstractSource(AbstractRoutingEngine* engine);
+       AbstractSource(AbstractRoutingEngine* engine, map<string, string> config);
        virtual ~AbstractSource();
        
        ///pure virtual methods:
@@ -55,7 +55,7 @@ protected:
        AbstractRoutingEngine* routingEngine;
        
 private:
-       AbstractSource():AbstractSink(nullptr) { }
+       AbstractSource():AbstractSink(nullptr, map<string,string>()) { }
 };
 
 #endif // ABSTRACTSOURCE_H
index 6259b14..780aa6e 100644 (file)
@@ -20,7 +20,7 @@
 #include "listplusplus.h"
 
 AccelerationPropertyInterface::AccelerationPropertyInterface(AbstractRoutingEngine *re, GDBusConnection* connection)
-       :DBusSink("org.automotive.acceleration","/org/automotive/acceleration", re, connection),
+       :DBusSink("org.automotive.acceleration","/org/automotive/acceleration", re, connection, map<string, string> ()),
          accelerationX(nullptr), accelerationY(nullptr), accelerationZ(nullptr)
 {
        supportedChanged(re->supported());
index b33ee56..e206fb9 100644 (file)
 #include "debugout.h"
 #include "listplusplus.h"
 
-extern "C" AbstractSinkManager * create(AbstractRoutingEngine* routingengine)
+extern "C" AbstractSinkManager * create(AbstractRoutingEngine* routingengine, map<string, string> config)
 {
-       return new DBusSinkManager(routingengine);
+       return new DBusSinkManager(routingengine, config);
 }
 
-DBusSink::DBusSink(string interface, string path, AbstractRoutingEngine* engine, GDBusConnection* connection)
+DBusSink::DBusSink(string interface, string path, AbstractRoutingEngine* engine, GDBusConnection* connection, map<string, string> config)
        :AbstractDBusInterface(interface, path, connection),
-         AbstractSink(engine), supported(false)
+         AbstractSink(engine, config), supported(false)
 {
 
 }
@@ -66,8 +66,8 @@ std::string DBusSink::uuid()
        return "c2e6cafa-eef5-4b8a-99a0-0f2c9be1057d";
 }
 
-DBusSinkManager::DBusSinkManager(AbstractRoutingEngine *engine)
-       :AbstractSinkManager(engine)
+DBusSinkManager::DBusSinkManager(AbstractRoutingEngine *engine, map<string, string> config)
+       :AbstractSinkManager(engine, config)
 {
        DBusInterfaceManager* manager = new DBusInterfaceManager(engine);
 }
index 1cf6c5a..7faa80b 100644 (file)
@@ -31,7 +31,7 @@ class DBusSink : public AbstractSink, public AbstractDBusInterface
 {
 
 public:
-       DBusSink(std::string interface, std::string path, AbstractRoutingEngine* engine, GDBusConnection* connection);
+       DBusSink(std::string interface, std::string path, AbstractRoutingEngine* engine, GDBusConnection* connection, map<string, string> config);
        virtual void supportedChanged(PropertyList supportedProperties);
        virtual void propertyChanged(VehicleProperty::Property property, AbstractPropertyType *value, std::string uuid);
        virtual std::string uuid();
@@ -52,7 +52,7 @@ private:
 class DBusSinkManager: public AbstractSinkManager
 {
 public:
-       DBusSinkManager(AbstractRoutingEngine* engine);
+       DBusSinkManager(AbstractRoutingEngine* engine, map<string, string> config);
 };
 
 #endif
index 84fc15e..c0255a0 100644 (file)
@@ -27,7 +27,7 @@ class VehicleSpeedProperty: public DBusSink
 {
 public:
        VehicleSpeedProperty(AbstractRoutingEngine* re, GDBusConnection* connection)
-               :DBusSink("org.automotive.vehicleSpeed","/org/automotive/vehiclespeed", re, connection)
+               :DBusSink("org.automotive.vehicleSpeed","/org/automotive/vehiclespeed", re, connection, map<string, string>())
        {
                wantProperty<uint16_t>(VehicleProperty::VehicleSpeed,"VehicleSpeed", "i", AbstractProperty::Read);
                supportedChanged(re->supported());
index c970a93..9f7f6b3 100644 (file)
@@ -53,8 +53,8 @@ string findReplace(string str, string tofind, string replacewith, string exclusi
 }
 
 
-DemoSink::DemoSink(AbstractRoutingEngine* re)
-:AbstractSink(re)
+DemoSink::DemoSink(AbstractRoutingEngine* re, map<string, string> config)
+:AbstractSink(re, config)
 {
        routingEngine->subscribeToProperty(VehicleProperty::ButtonEvent, this);
        routingEngine->subscribeToProperty(VehicleProperty::TurnSignal, this);
@@ -65,9 +65,9 @@ DemoSink::~DemoSink()
 
 }
 
-extern "C" AbstractSinkManager * create(AbstractRoutingEngine* routingengine)
+extern "C" AbstractSinkManager * create(AbstractRoutingEngine* routingengine, map<string, string> config)
 {
-       return new DemoSinkManager(routingengine);
+       return new DemoSinkManager(routingengine, config);
 }
 
 string DemoSink::uuid()
index 1393841..02fb191 100644 (file)
@@ -28,7 +28,7 @@ class DemoSink: public AbstractSink
 {
 
 public:
-       DemoSink(AbstractRoutingEngine* re);
+       DemoSink(AbstractRoutingEngine* re, map<string, string> config);
        ~DemoSink();
        
        string uuid();
@@ -46,15 +46,15 @@ private:
 class DemoSinkManager: public AbstractSinkManager
 {
 public:
-       DemoSinkManager(AbstractRoutingEngine* engine)
-       :AbstractSinkManager(engine)
+       DemoSinkManager(AbstractRoutingEngine* engine, map<string, string> config)
+       :AbstractSinkManager(engine, config)
        {
 
        }
 
        void setConfiguration(map<string, string> config)
        {
-               DemoSink* sink = new DemoSink(routingEngine);
+               DemoSink* sink = new DemoSink(routingEngine, config);
                sink->setConfiguration(config);
        }
 };
index f61e164..45ef102 100644 (file)
@@ -42,8 +42,8 @@ static gboolean timeoutCallback(gpointer data)
        return true;
 }
 
-ExampleSourcePlugin::ExampleSourcePlugin(AbstractRoutingEngine* re)
-:AbstractSource(re), velocity(0), engineSpeed(0)
+ExampleSourcePlugin::ExampleSourcePlugin(AbstractRoutingEngine* re, map<string, string> config)
+:AbstractSource(re, config), velocity(0), engineSpeed(0)
 {
        re->setSupported(supported(), this);
        debugOut("setting timeout");
@@ -53,9 +53,9 @@ ExampleSourcePlugin::ExampleSourcePlugin(AbstractRoutingEngine* re)
 
 
 
-extern "C" AbstractSource * create(AbstractRoutingEngine* routingengine)
+extern "C" AbstractSource * create(AbstractRoutingEngine* routingengine, map<string, string> config)
 {
-       return new ExampleSourcePlugin(routingengine);
+       return new ExampleSourcePlugin(routingengine, config);
        
 }
 
index a52008d..5187c5c 100644 (file)
@@ -28,7 +28,7 @@ class ExampleSourcePlugin: public AbstractSource
 {
 
 public:
-       ExampleSourcePlugin(AbstractRoutingEngine* re);
+       ExampleSourcePlugin(AbstractRoutingEngine* re, map<string, string> config);
        
        string uuid();
        void getPropertyAsync(AsyncPropertyReply *reply);
index e870ff0..d3e6c43 100644 (file)
 #include "abstractroutingengine.h"
 #include "debugout.h"
 
-extern "C" AbstractSinkManager * create(AbstractRoutingEngine* routingengine)
+extern "C" AbstractSinkManager * create(AbstractRoutingEngine* routingengine, map<string, string> config)
 {
-       return new ExampleSinkManager(routingengine);
+       return new ExampleSinkManager(routingengine, config);
 }
 
-ExampleSink::ExampleSink(AbstractRoutingEngine* engine): AbstractSink(engine)
+ExampleSink::ExampleSink(AbstractRoutingEngine* engine, map<string, string> config): AbstractSink(engine, config)
 {
        routingEngine->subscribeToProperty(VehicleProperty::EngineSpeed, this);
        routingEngine->subscribeToProperty(VehicleProperty::VehicleSpeed, this);
index a522993..afac457 100644 (file)
@@ -27,7 +27,7 @@ class ExampleSink : public AbstractSink
 {
 
 public:
-       ExampleSink(AbstractRoutingEngine* engine);
+       ExampleSink(AbstractRoutingEngine* engine, map<string, string> config);
        virtual PropertyList subscriptions();
        virtual void supportedChanged(PropertyList supportedProperties);
        virtual void propertyChanged(VehicleProperty::Property property, AbstractPropertyType* value, std::string uuid);
@@ -37,16 +37,10 @@ public:
 class ExampleSinkManager: public AbstractSinkManager
 {
 public:
-       ExampleSinkManager(AbstractRoutingEngine* engine)
-       :AbstractSinkManager(engine)
+       ExampleSinkManager(AbstractRoutingEngine* engine, map<string, string> config)
+       :AbstractSinkManager(engine, config)
        {
-
-       }
-
-       void setConfiguration(map<string, string> config)
-       {
-               ExampleSink* sink = new ExampleSink(routingEngine);
-               sink->setConfiguration(config);
+               new ExampleSink(routingEngine, config);
        }
 };
 
index 40e82d0..40cfcb3 100644 (file)
@@ -397,7 +397,7 @@ void OBD2Source::setConfiguration(map<string, string> config)
        requ->arg = port + ":" + baud;
        g_async_queue_push(commandQueue,requ);
 }
-OBD2Source::OBD2Source(AbstractRoutingEngine *re) : AbstractSource(re)
+OBD2Source::OBD2Source(AbstractRoutingEngine *re, map<string, string> config) : AbstractSource(re, config)
 {
        g_timeout_add(50, updateProperties, this );
        clientConnected = false;
@@ -429,9 +429,9 @@ PropertyList OBD2Source::supported()
 {
        return m_supportedProperties;
 }
-extern "C" AbstractSource * create(AbstractRoutingEngine* routingengine)
+extern "C" AbstractSource * create(AbstractRoutingEngine* routingengine, map<string, string> config)
 {
-       return new OBD2Source(routingengine);
+       return new OBD2Source(routingengine, config);
        
 }
 string OBD2Source::uuid()
index d2e12f5..9c97d35 100644 (file)
@@ -53,7 +53,7 @@ class OBD2Source : public AbstractSource
 {
 
 public:
-       OBD2Source(AbstractRoutingEngine* re);
+       OBD2Source(AbstractRoutingEngine* re, map<string, string> config);
        string uuid();
        int portHandle;
        void getPropertyAsync(AsyncPropertyReply *reply);
index ddb00db..6f02294 100644 (file)
@@ -32,7 +32,7 @@
 
 
 
-WebSocketSink::WebSocketSink(AbstractRoutingEngine* re,libwebsocket *wsi,string uuid,VehicleProperty::Property property,std::string ambdproperty) : AbstractSink(re)
+WebSocketSink::WebSocketSink(AbstractRoutingEngine* re,libwebsocket *wsi,string uuid,VehicleProperty::Property property,std::string ambdproperty) : AbstractSink(re,map<string, string> ())
 {
        m_amdbproperty = ambdproperty;
        m_uuid = uuid;
index 410b8bd..f93551c 100644 (file)
@@ -34,14 +34,14 @@ bool gioPollingFunc(GIOChannel *source,GIOCondition condition,gpointer data);
 
 
 
-WebSocketSinkManager::WebSocketSinkManager(AbstractRoutingEngine* engine):AbstractSinkManager(engine)
+WebSocketSinkManager::WebSocketSinkManager(AbstractRoutingEngine* engine, map<string, string> config):AbstractSinkManager(engine, config)
 {
        m_engine = engine;
        
        
        //Create a listening socket on port 23000 on localhost.
        
-       
+
 }
 void WebSocketSinkManager::init()
 {
@@ -50,7 +50,7 @@ void WebSocketSinkManager::init()
        protocollist[1] = { NULL, NULL, 0 };
 
 
-       
+       setConfiguration(configuration);
 }
 void WebSocketSinkManager::setConfiguration(map<string, string> config)
 {
@@ -212,9 +212,9 @@ void WebSocketSinkManager::addSink(libwebsocket* socket, VehicleProperty::Proper
        WebSocketSink *sink = new WebSocketSink(m_engine,socket,uuid,property,tmpstr);
        m_sinkMap[property] = sink;
 }
-extern "C" AbstractSinkManager * create(AbstractRoutingEngine* routingengine)
+extern "C" AbstractSinkManager * create(AbstractRoutingEngine* routingengine, map<string, string> config)
 {
-       sinkManager = new WebSocketSinkManager(routingengine);
+       sinkManager = new WebSocketSinkManager(routingengine, config);
        sinkManager->init();
        return sinkManager;
 }
index 18433ec..cf82ec4 100644 (file)
@@ -31,7 +31,7 @@
 class WebSocketSinkManager: public AbstractSinkManager
 {
 public:
-       WebSocketSinkManager(AbstractRoutingEngine* engine);
+       WebSocketSinkManager(AbstractRoutingEngine* engine, map<string, string> config);
        void addSingleShotSink(libwebsocket* socket, VehicleProperty::Property property,string id);
        void addSink(libwebsocket* socket, VehicleProperty::Property property,string uuid);
        void disconnectAll(libwebsocket* socket);
index 46363dc..b172621 100644 (file)
@@ -308,7 +308,7 @@ void WebSocketSource::setSupported(PropertyList list)
        m_re->updateSupported(list,PropertyList());
 }
 
-WebSocketSource::WebSocketSource(AbstractRoutingEngine *re) : AbstractSource(re)
+WebSocketSource::WebSocketSource(AbstractRoutingEngine *re, map<string, string> config) : AbstractSource(re, config)
 {
        clientConnected = false;
        source = this;
@@ -324,9 +324,9 @@ PropertyList WebSocketSource::supported()
 {
        return m_supportedProperties;
 }
-extern "C" AbstractSource * create(AbstractRoutingEngine* routingengine)
+extern "C" AbstractSource * create(AbstractRoutingEngine* routingengine, map<string, string> config)
 {
-       return new WebSocketSource(routingengine);
+       return new WebSocketSource(routingengine, config);
        
 }
 string WebSocketSource::uuid()
index b7ca468..3eacd70 100644 (file)
@@ -32,7 +32,7 @@ class WebSocketSource : public AbstractSource
 {
 
 public:
-    WebSocketSource(AbstractRoutingEngine* re);
+       WebSocketSource(AbstractRoutingEngine* re, map<string, string> config);
     string uuid();
        boost::any getProperty(VehicleProperty::Property property);
        void getPropertyAsync(AsyncPropertyReply *reply);
index 66d6cff..a30a6a7 100644 (file)
@@ -104,8 +104,8 @@ private:
 };
 
 
-WheelSourcePlugin::WheelSourcePlugin(AbstractRoutingEngine* re)
-:AbstractSource(re)
+WheelSourcePlugin::WheelSourcePlugin(AbstractRoutingEngine* re, map<string, string> config)
+:AbstractSource(re, config)
 {
        re->setSupported(supported(), this);
        this->mWheel = new WheelPrivate(this, re);
@@ -118,9 +118,9 @@ WheelSourcePlugin::~WheelSourcePlugin()
 
 
 
-extern "C" AbstractSource * create(AbstractRoutingEngine* routingengine)
+extern "C" AbstractSource * create(AbstractRoutingEngine* routingengine, map<string, string> config)
 {
-       return new WheelSourcePlugin(routingengine);
+       return new WheelSourcePlugin(routingengine, config);
 }
 
 string WheelSourcePlugin::uuid()
@@ -211,7 +211,14 @@ clutch(false), oldClutch(false), brake(false), oldBrake(false)
        
 
        //FIXME: Support config file with joystick device mapping, button/axis mappings, etc.
-       if ((fd = open("/dev/input/js0", O_RDONLY)) < 0) {
+       std::string jsdev = parent->getConfiguration()["device"];
+
+       DebugOut(0)<<"JSDev: "<<jsdev<<endl;
+
+       if(jsdev == "")
+               jsdev = "/dev/input/js0";
+
+       if ((fd = open(jsdev.c_str(), O_RDONLY)) < 0) {
                throw std::runtime_error("Could not find a joystick class device!");    //FIXME: Later, don't throw, watch input devices, and jump on to any JS devices that appear
                return;
        }
index 9b7a044..7b94c5f 100644 (file)
@@ -30,7 +30,7 @@ class WheelSourcePlugin: public AbstractSource
 {
 
 public:
-       WheelSourcePlugin(AbstractRoutingEngine* re);
+       WheelSourcePlugin(AbstractRoutingEngine* re, map<string, string> config);
        ~WheelSourcePlugin();
        
        string uuid();
@@ -43,6 +43,8 @@ public:
        void propertyChanged(VehicleProperty::Property property, AbstractPropertyType* value, string uuid) {}
        void supportedChanged(PropertyList) {}
 
+       map<string, string> getConfiguration() { return configuration; }
+
        friend class WheelPrivate;      
        
 private: