aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRomain Forlot <romain.forlot@iot.bzh>2018-07-04 18:18:24 +0200
committerRomain Forlot <romain.forlot@iot.bzh>2018-07-05 16:22:47 +0200
commitbf964e8ad085cd051d9a28bcd74aafeeb08c9593 (patch)
tree023df59e460e7102797648e87ec41edca360218c
parent523113d80d1304346f685f530089b14a7df29d07 (diff)
Reintoduce the old builtin plugin
We use only one function of two from the plugin which could be called from the LUA script to be able to set a signal value from a LUA callback. Change-Id: Ic7a0fcd3d8c4c2370828c1d09fff9ed88a0dc15b Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
-rw-r--r--conf.d/project/etc/control-signal-composer.json7
-rw-r--r--conf.d/project/etc/sig-txc.json2
-rw-r--r--plugins/CMakeLists.txt22
-rw-r--r--plugins/builtin.cpp63
4 files changed, 93 insertions, 1 deletions
diff --git a/conf.d/project/etc/control-signal-composer.json b/conf.d/project/etc/control-signal-composer.json
index 1ea7198..1734422 100644
--- a/conf.d/project/etc/control-signal-composer.json
+++ b/conf.d/project/etc/control-signal-composer.json
@@ -17,6 +17,13 @@
"uid": "gps-callbacks",
"info": "Manage interaction with gps service",
"libs": "gps.ctlso"
+ },
+ {
+ "uid": "builtin",
+ "info": "Builtin routine for onReceived or getSignals routines",
+ "libs": "builtin.ctlso",
+ "lua2c": "setSignalValueWrap",
+ "lua2c_prefix": "bui"
}
],
"signals": {
diff --git a/conf.d/project/etc/sig-txc.json b/conf.d/project/etc/sig-txc.json
index abe8a73..9599cce 100644
--- a/conf.d/project/etc/sig-txc.json
+++ b/conf.d/project/etc/sig-txc.json
@@ -10,7 +10,7 @@
"event": "vehicle_speed"
},
"onReceived": {
- "uri": "lua://convert/",
+ "uri": "lua://convert",
"function": "_Unit_Converter",
"args": {
"from": "km/h",
diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt
index fc24fbd..c8ec93c 100644
--- a/plugins/CMakeLists.txt
+++ b/plugins/CMakeLists.txt
@@ -16,6 +16,28 @@
# limitations under the License.
###########################################################################
+PROJECT_TARGET_ADD(builtin)
+
+ # Define targets
+ ADD_LIBRARY(${TARGET_NAME} MODULE ${TARGET_NAME}.cpp)
+
+ # Alsa Plugin properties
+ SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES
+ LABELS "PLUGIN"
+ PREFIX ""
+ SUFFIX ".ctlso"
+ OUTPUT_NAME ${TARGET_NAME}
+ )
+
+ # Library dependencies (include updates automatically)
+ TARGET_LINK_LIBRARIES(${TARGET_NAME}
+ ${link_libraries}
+ )
+
+ target_include_directories(${TARGET_NAME}
+ PRIVATE "../ctl-utilities/ctl-lib"
+ PRIVATE "../signal-composer-binding")
+
PROJECT_TARGET_ADD(low-can)
# Define targets
diff --git a/plugins/builtin.cpp b/plugins/builtin.cpp
new file mode 100644
index 0000000..b42bd1d
--- /dev/null
+++ b/plugins/builtin.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2016 "IoT.bzh"
+ * Author Romain Forlot <romain.forlot@iot.bzh>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+*/
+
+#define AFB_BINDING_VERSION 2
+#include <afb/afb-binding.h>
+#include <systemd/sd-event.h>
+#include <json-c/json_object.h>
+#include <stdbool.h>
+#include <string.h>
+
+#include "signal-composer.hpp"
+#include "wrap-json.h"
+
+extern "C"
+{
+CTLP_LUA_REGISTER("builtin");
+
+CTLP_LUA2C (setSignalValueWrap, source, argsJ, responseJ)
+{
+ const char* name = nullptr;
+ double resultNum;
+ uint64_t timestamp;
+
+ struct signalCBT* ctx = (struct signalCBT*)source->context;
+
+ if(! wrap_json_unpack(argsJ, "{ss, sF, sI? !}",
+ "name", &name,
+ "value", &resultNum,
+ "timestamp", &timestamp))
+ {
+ *responseJ = json_object_new_string("Fail to unpack JSON arguments value");
+ return -1;
+ }
+ *responseJ = json_object_new_string(json_object_to_json_string(argsJ));
+
+ struct signalValue result = resultNum;
+
+ if(ctx->aSignal)
+ {ctx->setSignalValue(ctx->aSignal, timestamp*NANO, result);}
+ else
+ {ctx->searchNsetSignalValue(name, timestamp*NANO, result);}
+
+ return 0;
+}
+
+// extern "C" closure
+}
+