From 78202d5bd8a8d09a55bb71b9df6d3f54b18184b8 Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Wed, 20 Sep 2017 16:54:14 +0200 Subject: Make LUA works - Added LUA library at link - Make app-template crash build if a checked file fails - Fix old defined variable CONTROL_LUA_PATH to a default one in the binding data directory - Add an example with unit conversion made in LUA Change-Id: I1b4712bde32a38044ad6b14ebd38b6782fd01fe9 Signed-off-by: Romain Forlot --- signal-composer-binding/signal-composer-binding.cpp | 12 +++++------- signal-composer-binding/signal-composer.cpp | 21 ++++++++++++++++----- signal-composer-binding/signal-composer.hpp | 1 + signal-composer-binding/signal.cpp | 6 +++--- signal-composer-binding/signal.hpp | 7 ++++--- signal-composer-binding/source.cpp | 16 +++++++++++++++- signal-composer-binding/source.hpp | 1 + 7 files changed, 45 insertions(+), 19 deletions(-) (limited to 'signal-composer-binding') diff --git a/signal-composer-binding/signal-composer-binding.cpp b/signal-composer-binding/signal-composer-binding.cpp index 4f12150..269eaba 100644 --- a/signal-composer-binding/signal-composer-binding.cpp +++ b/signal-composer-binding/signal-composer-binding.cpp @@ -20,14 +20,16 @@ // afb-utilities #include #include -// controller -#include #include "signal-composer-binding.hpp" #include "signal-composer-apidef.h" #include "signal-composer.hpp" -/// @brief callback for receiving message from low binding. Treatment itself is made in SigComp class. +/// @brief callback for receiving message from low bindings. This will callback +/// an action defined in the configuration files depending on the event received +/// +/// @param[in] event - event name +/// @param[in] object - eventual data that comes with the event void onEvent(const char *event, json_object *object) { AFB_DEBUG("Received event json: %s", json_object_to_json_string(object)); @@ -130,10 +132,6 @@ int loadConf() bindingApp& bApp = bindingApp::instance(); err = bApp.loadConfig(rootdir); - #ifdef CONTROL_SUPPORT_LUA - err += LuaConfigLoad(); - #endif - return err; } diff --git a/signal-composer-binding/signal-composer.cpp b/signal-composer-binding/signal-composer.cpp index 151de6c..2e4f221 100644 --- a/signal-composer-binding/signal-composer.cpp +++ b/signal-composer-binding/signal-composer.cpp @@ -84,6 +84,15 @@ SourceAPI* bindingApp::getSourceAPI(const std::string& api) } return nullptr; } +int bindingApp::initSourcesAPI() +{ + int err = 0; + for(auto& src: sourcesListV_) + { + err += src.init(); + } + return err; +} std::vector bindingApp::parseURI(const std::string& uri) { @@ -123,7 +132,7 @@ CtlActionT* bindingApp::convert2Action(const std::string& name, json_object* act std::string fName = std::string(function).substr(6); wrap_json_pack(&action, "{ss,ss,so*}", "label", name.c_str(), - "lua", fName, + "lua", fName.c_str(), "args", functionArgsJ); } else if(startsWith(function, "api://")) @@ -205,13 +214,13 @@ int bindingApp::loadSourcesAPI(CtlSectionT* section, json_object *sourcesJ) { int err = 0; bindingApp& bApp = instance(); - json_object *sigCompJ = nullptr; - // add the signal composer itself as source if(sourcesJ) { + json_object *sigCompJ = nullptr; + // add the signal composer itself as source wrap_json_pack(&sigCompJ, "{ss,ss}", - "api", "signal-composer", + "api", afbBindingV2.api, "info", "Api on behalf the virtual signals are sent"); json_object_array_add(sourcesJ, sigCompJ); @@ -232,7 +241,9 @@ int bindingApp::loadSourcesAPI(CtlSectionT* section, json_object *sourcesJ) if ((err = bApp.loadOneSourceAPI(sourcesJ))) return err; if (sigCompJ && (err = bApp.loadOneSourceAPI(sigCompJ))) return err; } -} + } + else + {err += bindingApp::instance().initSourcesAPI();} return err; } diff --git a/signal-composer-binding/signal-composer.hpp b/signal-composer-binding/signal-composer.hpp index 4050700..689f107 100644 --- a/signal-composer-binding/signal-composer.hpp +++ b/signal-composer-binding/signal-composer.hpp @@ -49,6 +49,7 @@ public: int loadSignals(json_object* signalsJ); CtlConfigT* ctlConfig(); + int initSourcesAPI(); std::vector> getAllSignals(); SourceAPI* getSourceAPI(const std::string& api); std::shared_ptr searchSignal(const std::string& aName); diff --git a/signal-composer-binding/signal.cpp b/signal-composer-binding/signal.cpp index 1679a6f..309a156 100644 --- a/signal-composer-binding/signal.cpp +++ b/signal-composer-binding/signal.cpp @@ -182,7 +182,7 @@ void Signal::attachToSourceSignals(bindingApp& bApp) /// @brief Call update() method on observer Signal with /// current Signal timestamp and value -void Signal::notify() +void Signal::notify() const { for (int i = 0; i < Observers_.size(); ++i) Observers_[i]->update(timestamp_, value_); @@ -194,7 +194,7 @@ void Signal::notify() /// @param[in] origId - name of the origine of the recursion check /// /// @return 0 if no infinite loop detected, -1 if not. -int Signal::recursionCheck(const std::string& origId) +int Signal::recursionCheck(const std::string& origId) const { for (const auto& obs: Observers_) { @@ -214,7 +214,7 @@ int Signal::recursionCheck(const std::string& origId) /// then trigger the check against the following eventuals observers /// /// @return 0 if no infinite loop detected, -1 if not. -int Signal::recursionCheck() +int Signal::recursionCheck() const { for (const auto& obs: Observers_) { diff --git a/signal-composer-binding/signal.hpp b/signal-composer-binding/signal.hpp index 4e078fc..c029a64 100644 --- a/signal-composer-binding/signal.hpp +++ b/signal-composer-binding/signal.hpp @@ -49,13 +49,14 @@ private: std::vector Observers_; - void notify(); + void notify() const; void attach(Signal *obs); - int recursionCheck(const std::string& origId); + int recursionCheck(const std::string& origId) const; public: Signal(const std::string& id, const std::string& event, std::vector& depends, const std::string& unit, double frequency, CtlActionT* onReceived, json_object* getSignalsArgs); Signal(const std::string& id, std::vector& depends, const std::string& unit, double frequency, CtlActionT* onReceived); + explicit operator bool() const; bool operator==(const Signal& other) const; bool operator==(const std::string& aName) const; @@ -72,5 +73,5 @@ public: double minimum(int seconds = 0) const; double maximum(int seconds = 0) const; struct SignalValue last() const; - int recursionCheck(); + int recursionCheck() const; }; diff --git a/signal-composer-binding/source.cpp b/signal-composer-binding/source.cpp index 1f5d588..2f4ab03 100644 --- a/signal-composer-binding/source.cpp +++ b/signal-composer-binding/source.cpp @@ -16,6 +16,7 @@ */ #include "source.hpp" +#include "signal-composer.hpp" SourceAPI::SourceAPI() {} @@ -24,6 +25,18 @@ SourceAPI::SourceAPI(const std::string& api, const std::string& info, CtlActionT api_(api), info_(info), init_(init), getSignals_(getSignals) {} +int SourceAPI::init() +{ + if(init_) + {return ActionExecOne(init_, nullptr);} + else if(api_ == afbBindingV2.api) + { + api_ = bindingApp::instance().ctlConfig()->api; + } + + return 0; +} + std::string SourceAPI::api() const { return api_; @@ -71,7 +84,8 @@ int SourceAPI::makeSubscription() } err += sig.second ? 0:ActionExecOne(getSignals_, signalJ); if(err) - {AFB_WARNING("Fails to subscribe to signal %s", sig.first->id().c_str());} + {AFB_WARNING("Fails to subscribe to signal '%s/%s'", + api_.c_str(), sig.first->id().c_str());} else {sig.second = true;} } diff --git a/signal-composer-binding/source.hpp b/signal-composer-binding/source.hpp index 560a137..a995b07 100644 --- a/signal-composer-binding/source.hpp +++ b/signal-composer-binding/source.hpp @@ -34,6 +34,7 @@ public: SourceAPI(); SourceAPI(const std::string& api, const std::string& info, CtlActionT* init, CtlActionT* getSignal); + int init(); std::string api() const; void addSignal(const std::string& id, const std::string& event, std::vector& sources, const std::string& sClass, const std::string& unit, double frequency, CtlActionT* onReceived, json_object* getSignalsArgs); -- cgit 1.2.3-korg