From 64fcae698a48acf6bd7f05d168b5cd4badcf0bd3 Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Wed, 4 Jul 2018 18:18:43 +0200 Subject: Update submodules Submodule conf.d/app-templates 6e1a3c3..aa68dbd: > Don't overwrite the autobuild script if it exists > Disable the in-tree build method. > Detect Yocto as OS distribution > Fix: wrong compile options added > Fallback using zip format if no wgtpkg-pack found > 02-variables.cmake: Avoid checking CXX version if not required > config.cmake.sample: Remove dependency to libsystemd > config.cmake.sample: Remove dependency to libmicrohttpd > Added -D_FORTIFY_SOURCE=2 to CFLAGS > start-on-target: uses RSYNC_PREFIX path for config > Fixed spelling. > Improve OS detection > Fix: OS detection > Launch from workdir > Change closing that could fix native debugging Submodule ctl-utilities 0129510...1ff524b: > Change LUA package path at LUA interpreter load > Don't load two times a plugin even for LUA > Fixed hidden bound variable (apiHandle) > Fixed null value when push Lua arguments > Adjust to compile with incoming bindings v3 > Remove declaration to not existing functions > Add 2 lua utilities function > Update README.md for new metadata keys. > Fix a compilation issue due to modif of AFB_ReqSuccess > README:md: update README accordingly to new json scheme. > Fixed crash due to call to json_object_put > Fix segfault when printing long message from lua > Fixed spelling of AFB_ReqSuccess > Remove an unnecessary variable > Make parsing of action loading non blocking > Use an external file for app fw functions link > Use macro to test request validity > Fixed build warnings with gcc >= 7.3 > Increase lua script max message size > Prevent lost of config file path when searching > Correct way that api actions are handled in controller > Handle more metadata in the controller. > Add possibility to set prefix to NULL in CtlConfigScan > Fixed compilation warnings with gcc-7.2.0 > Add an external field to CtlConfigT > Make action item from a LUA action mandatory > Handle no prefix given > Good usage of strncat and strncpy > Update to the new JSON syntax > Detect failure at OnLoad action calls > Improve reliability and function calls > Correctly release request JSON object > Add AFB macros > Don't use assert in controller. > Change lua2c JSON syntax. > Search for Event section > Fix: changes key name. > Fix: arguments pointer NULL check > Fix wrong error message. > Simplify action definition > Fix: Dyn API Action loading procedure > Use new version of function GetBindingDirPath > Format > Merge changes from topic 'sandbox/claneys/wip' > Upgrade config schema > Fix: callback execution condition < Format < Fix: callback execution condition < New action loading function. < Upgrade config schema Adapt json config file to new syntax Fix: prefix now add the "-" so it'isn't needed to add it in the prefix at search (signal-composer.cpp) Fix: calling a api verb without json_object fails because of config arguments not retrieved. (sources.cpp) Change-Id: I48c1bca9fbac485e6a34b4645e683d9bdb1cbf2b Signed-off-by: Romain Forlot --- afb-helpers | 2 +- conf.d/app-templates | 2 +- .../data/signal-composer-daemon-00-utils.lua | 85 ---------------- .../data/signal-composer-daemon-04-oncall.lua | 110 --------------------- .../data/signal-composer-daemon-10-event.lua | 74 -------------- conf.d/project/data/unit-conversion.lua | 110 +++++++++++++++++++++ conf.d/project/etc/control-basic-conf.json | 6 +- conf.d/project/etc/control-signal-composer.json | 3 +- conf.d/project/etc/sig-txc.json | 6 +- conf.d/project/etc/sources-txc.json | 6 +- ctl-utilities | 2 +- plugins/low-can.cpp | 4 +- .../signal-composer-binding.cpp | 2 +- signal-composer-binding/signal-composer.cpp | 2 +- signal-composer-binding/source.cpp | 2 +- 15 files changed, 127 insertions(+), 289 deletions(-) delete mode 100644 conf.d/project/data/signal-composer-daemon-00-utils.lua delete mode 100644 conf.d/project/data/signal-composer-daemon-04-oncall.lua delete mode 100644 conf.d/project/data/signal-composer-daemon-10-event.lua create mode 100644 conf.d/project/data/unit-conversion.lua diff --git a/afb-helpers b/afb-helpers index 6e837e4..43ec971 160000 --- a/afb-helpers +++ b/afb-helpers @@ -1 +1 @@ -Subproject commit 6e837e4691ae266f5d23cce844fccdeeacdfe11d +Subproject commit 43ec9716bf83d8a6e5ff15909705cb1adc3c1892 diff --git a/conf.d/app-templates b/conf.d/app-templates index 6e1a3c3..aa68dbd 160000 --- a/conf.d/app-templates +++ b/conf.d/app-templates @@ -1 +1 @@ -Subproject commit 6e1a3c37e94f42f5307fd1fa749823b2d160a56b +Subproject commit aa68dbd12c60f9eb0015a508a22d8650914f8e5e diff --git a/conf.d/project/data/signal-composer-daemon-00-utils.lua b/conf.d/project/data/signal-composer-daemon-00-utils.lua deleted file mode 100644 index 943c6c6..0000000 --- a/conf.d/project/data/signal-composer-daemon-00-utils.lua +++ /dev/null @@ -1,85 +0,0 @@ ---[[ - Copyright (C) 2016 "IoT.bzh" - Author Fulup Ar Foll - - 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. - - Note: this file should be called before any other to assert declare function - is loaded before anything else. - - References: - http://lua-users.org/wiki/DetectingUndefinedVariables - ---]] - - ---=================================================== ---= Niklas Frykholm --- basically if user tries to create global variable --- the system will not let them!! --- call GLOBAL_lock(_G) --- ---=================================================== -function GLOBAL_lock(t) - local mt = getmetatable(t) or {} - mt.__newindex = lock_new_index - setmetatable(t, mt) -end - ---=================================================== --- call GLOBAL_unlock(_G) --- to change things back to normal. ---=================================================== -function GLOBAL_unlock(t) - local mt = getmetatable(t) or {} - mt.__newindex = unlock_new_index - setmetatable(t, mt) -end - -function lock_new_index(t, k, v) - if (string.sub(k,1,1) ~= "_") then - GLOBAL_unlock(_G) - error("GLOBALS are locked -- " .. k .. - " must be declared local or prefix with '_' for globals.", 2) - else - rawset(t, k, v) - end -end - -function unlock_new_index(t, k, v) - rawset(t, k, v) -end - --- return serialised version of printable table -function Dump_Table(o) - if type(o) == 'table' then - local s = '{ ' - for k,v in pairs(o) do - if type(k) ~= 'number' then k = '"'..k..'"' end - s = s .. '['..k..'] = ' .. Dump_Table(v) .. ',' - end - return s .. '} ' - else - return tostring(o) - end -end - --- simulate C prinf function -printf = function(s,...) - io.write(s:format(...)) - io.write("\n") - return -end - --- lock global variable -GLOBAL_lock(_G) diff --git a/conf.d/project/data/signal-composer-daemon-04-oncall.lua b/conf.d/project/data/signal-composer-daemon-04-oncall.lua deleted file mode 100644 index a66d71f..0000000 --- a/conf.d/project/data/signal-composer-daemon-04-oncall.lua +++ /dev/null @@ -1,110 +0,0 @@ ---[[ - Copyright (C) 2016 "IoT.bzh" - Author Fulup Ar Foll - - 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. - - - Provide sample LUA routines to be used with AGL control "lua_docall" API ---]] - ---global counter to keep track of calls -_count=0 - - -_interval={ - {"km/h",1}, --the "1" should never really get used but - {"mi/h",0.62137119223733}, - {"m/s",0.27777777777778}, -} - -_result = {} -_positions={} -for i=1,3 do - _positions[_interval[i][1]]=i -end - ---function _Unit_Converter(value, sourceunits, targetunits) -function _Unit_Converter(source, args, event) - local value = event["value"] - local sourceunits = args["from"] - local targetunits = args["to"] - local sourcei, targeti = _positions[sourceunits], _positions[targetunits] - assert(sourcei and targeti) - - if sourceitargeti then - - local base=1 - for i=targeti+1,sourcei do - base=base*interval[i][2] - end - - event["value"] = value/base - else - print("No conversion") - end - - print('Converted value is: '.. event['value'] .. args["to"]) - - composer:setSignalValueWrap(source, event) -end - --- Display receive arguments and echo them to caller -function _Simple_Echo_Args (source, args, event) - _count=_count+1 - AFB:notice(source, "LUA OnCall Echo Args count=%d args=%s event=%s", count, args, event) - - print ("--inlua-- source=", Dump_Table(source)) - print ("--inlua-- args=", Dump_Table(args)) - print ("--inlua-- event=", Dump_Table(event)) -end - -local function Test_Async_CB (request, result, context) - response={ - ["result"]=result, - ["context"]=context, - } - - AFB:notice (source, "Test_Async_CB result=%s context=%s", result, context) - AFB:success (request, response) -end - -function _Test_Call_Async (request, args) - local context={ - ["value1"]="abcd", - ["value2"]=1234 - } - - AFB:notice (source, "Test_Call_Async args=%s cb=Test_Async_CB", args) - AFB:service(source, "monitor","ping", "Test_Async_CB", context) -end - -function _Simple_Monitor_Call (request, args) - - AFB:notice (source, "_Simple_Server_Call args=%s", args) - local err, result= AFB:servsync (source, "monitor","get", args) - if (err) then - AFB:fail (source, "AFB:service_call_sync fail"); - else - AFB:success(source, request, result["response"]) - end -end - diff --git a/conf.d/project/data/signal-composer-daemon-10-event.lua b/conf.d/project/data/signal-composer-daemon-10-event.lua deleted file mode 100644 index 7724dec..0000000 --- a/conf.d/project/data/signal-composer-daemon-10-event.lua +++ /dev/null @@ -1,74 +0,0 @@ ---[[ - Copyright (C) 2016 "IoT.bzh" - Author Fulup Ar Foll - - 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. - - - Provide Sample Timer Handing to push event from LUA ---]] - --- Create event on Lua script load -_MyContext={} - --- WARNING: call back are global and should start with '_' -function _Timer_Test_CB (timer, context) - - local evtinfo= AFB:timerget(source, timer) - printf ("[-- _Timer_Test_C --] evtInfo=%s", Dump_Table(evtinfo)) - - --send an event an event with count as value - AFB:evtpush (source, _MyContext["event"], {["label"]= evtinfo["label"], ["count"]=evtinfo["count"], ["info"]=context["info"]}) - - -- note when timerCB return!=0 timer is kill - return 0 - -end - --- sendback event depending on count and delay -function _Simple_Timer_Test (request, client) - - local context = { - ["info"]="My 1st private Event", - } - - -- if event does not exit create it now. - if (_MyContext["event"] == nil) then - _MyContext["event"]= AFB:evtmake(source, client["label"]) - end - - -- if delay not defined default is 5s - if (client["delay"]==nil) then client["delay"]=5000 end - - -- if count is not defined default is 10 - if (client["count"]==nil) then client["count"]=10 end - - -- we could use directly client but it is a sample - local myTimer = { - ["label"]=client["label"], - ["delay"]=client["delay"], - ["count"]=client["count"], - } - AFB:notice (source, "Test_Timer myTimer=%s", myTimer) - - -- subscribe to event - AFB:subscribe (source, request, _MyContext["event"]) - - -- settimer take a table with delay+count as input (count==0 means infinite) - AFB:timerset (source, myTimer, "_Timer_Test_CB", context) - - -- nothing special to return send back - AFB:success (source, request, myTimer) - - return 0 -end diff --git a/conf.d/project/data/unit-conversion.lua b/conf.d/project/data/unit-conversion.lua new file mode 100644 index 0000000..a66d71f --- /dev/null +++ b/conf.d/project/data/unit-conversion.lua @@ -0,0 +1,110 @@ +--[[ + Copyright (C) 2016 "IoT.bzh" + Author Fulup Ar Foll + + 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. + + + Provide sample LUA routines to be used with AGL control "lua_docall" API +--]] + +--global counter to keep track of calls +_count=0 + + +_interval={ + {"km/h",1}, --the "1" should never really get used but + {"mi/h",0.62137119223733}, + {"m/s",0.27777777777778}, +} + +_result = {} +_positions={} +for i=1,3 do + _positions[_interval[i][1]]=i +end + +--function _Unit_Converter(value, sourceunits, targetunits) +function _Unit_Converter(source, args, event) + local value = event["value"] + local sourceunits = args["from"] + local targetunits = args["to"] + local sourcei, targeti = _positions[sourceunits], _positions[targetunits] + assert(sourcei and targeti) + + if sourceitargeti then + + local base=1 + for i=targeti+1,sourcei do + base=base*interval[i][2] + end + + event["value"] = value/base + else + print("No conversion") + end + + print('Converted value is: '.. event['value'] .. args["to"]) + + composer:setSignalValueWrap(source, event) +end + +-- Display receive arguments and echo them to caller +function _Simple_Echo_Args (source, args, event) + _count=_count+1 + AFB:notice(source, "LUA OnCall Echo Args count=%d args=%s event=%s", count, args, event) + + print ("--inlua-- source=", Dump_Table(source)) + print ("--inlua-- args=", Dump_Table(args)) + print ("--inlua-- event=", Dump_Table(event)) +end + +local function Test_Async_CB (request, result, context) + response={ + ["result"]=result, + ["context"]=context, + } + + AFB:notice (source, "Test_Async_CB result=%s context=%s", result, context) + AFB:success (request, response) +end + +function _Test_Call_Async (request, args) + local context={ + ["value1"]="abcd", + ["value2"]=1234 + } + + AFB:notice (source, "Test_Call_Async args=%s cb=Test_Async_CB", args) + AFB:service(source, "monitor","ping", "Test_Async_CB", context) +end + +function _Simple_Monitor_Call (request, args) + + AFB:notice (source, "_Simple_Server_Call args=%s", args) + local err, result= AFB:servsync (source, "monitor","get", args) + if (err) then + AFB:fail (source, "AFB:service_call_sync fail"); + else + AFB:success(source, request, result["response"]) + end +end + diff --git a/conf.d/project/etc/control-basic-conf.json b/conf.d/project/etc/control-basic-conf.json index dd7255f..1331544 100644 --- a/conf.d/project/etc/control-basic-conf.json +++ b/conf.d/project/etc/control-basic-conf.json @@ -11,18 +11,18 @@ { "uid": "low-can-callbacks", "info": "Manage interaction with low-can service", - "basename": "low-can" + "libs": "low-can.ctlso" }, { "uid": "gps-callbacks", "info": "Manage interaction with gps service", - "basename": "gps" + "libs": "gps.ctlso" }, { "uid": "convert", "info": "LUA fonctions used to convert standard unit.", "spath": "/tmp", - "file": "unit-conversion.lua" + "libs": "unit-conversion.lua" } ], "signals": { diff --git a/conf.d/project/etc/control-signal-composer.json b/conf.d/project/etc/control-signal-composer.json index 1734422..3e693f6 100644 --- a/conf.d/project/etc/control-signal-composer.json +++ b/conf.d/project/etc/control-signal-composer.json @@ -22,8 +22,7 @@ "uid": "builtin", "info": "Builtin routine for onReceived or getSignals routines", "libs": "builtin.ctlso", - "lua2c": "setSignalValueWrap", - "lua2c_prefix": "bui" + "lua": { "prefix": "composer", "functions": "setSignalValueWrap"} } ], "signals": { diff --git a/conf.d/project/etc/sig-txc.json b/conf.d/project/etc/sig-txc.json index 9599cce..c9c59cd 100644 --- a/conf.d/project/etc/sig-txc.json +++ b/conf.d/project/etc/sig-txc.json @@ -10,8 +10,7 @@ "event": "vehicle_speed" }, "onReceived": { - "uri": "lua://convert", - "function": "_Unit_Converter", + "action": "lua://convert#_Unit_Converter", "args": { "from": "km/h", "to": "mi/h" @@ -104,8 +103,7 @@ "retention": 30, "unit": "degrees", "onReceived": { - "uri": "plugin://gps-callbacks", - "function": "getHeading" + "action": "plugin://gps-callbacks#getHeading" } } ] diff --git a/conf.d/project/etc/sources-txc.json b/conf.d/project/etc/sources-txc.json index 77bc99b..a460fee 100644 --- a/conf.d/project/etc/sources-txc.json +++ b/conf.d/project/etc/sources-txc.json @@ -6,13 +6,11 @@ "api": "txc", "info": "Use TXC demo binding as signals provider", "init": { - "uri": "api://txc", - "function": "start", + "action": "api://txc#start", "args": {"filename": "var/nyc-downtown-crosstown.json"} }, "getSignals": { - "uri": "api://txc", - "function": "subscribe" + "action": "api://txc#subscribe" } } ] diff --git a/ctl-utilities b/ctl-utilities index 0129510..1ff524b 160000 --- a/ctl-utilities +++ b/ctl-utilities @@ -1 +1 @@ -Subproject commit 01295105d39eb96fafa20fea9ef131d0fb8dcab6 +Subproject commit 1ff524bc55b3ff10b7ab2a5f2cafbb41fce22949 diff --git a/plugins/low-can.cpp b/plugins/low-can.cpp index 5d4ef10..e3b505e 100644 --- a/plugins/low-can.cpp +++ b/plugins/low-can.cpp @@ -65,7 +65,9 @@ CTLP_ONLOAD(plugin, composerHandle) struct signalCBT* handle = (struct signalCBT*)composerHandle; handle->pluginCtx = (void*)pluginCtx; - return (void*)handle; + plugin->context = (void*)handle; + + return 0; } CTLP_CAPI (subscribeToLow, source, argsJ, eventJ) { diff --git a/signal-composer-binding/signal-composer-binding.cpp b/signal-composer-binding/signal-composer-binding.cpp index 0d9c8e3..50eb03b 100644 --- a/signal-composer-binding/signal-composer-binding.cpp +++ b/signal-composer-binding/signal-composer-binding.cpp @@ -265,7 +265,7 @@ void get(struct afb_req request) int loadConf() { int err = 0; - std::string bindingDirPath = GetBindingDirPath(); + std::string bindingDirPath = GetBindingDirPath(nullptr); std::string rootdir = bindingDirPath + "/etc"; err = Composer::instance().loadConfig(rootdir); diff --git a/signal-composer-binding/signal-composer.cpp b/signal-composer-binding/signal-composer.cpp index ce4fe47..4b92f7e 100644 --- a/signal-composer-binding/signal-composer.cpp +++ b/signal-composer-binding/signal-composer.cpp @@ -461,7 +461,7 @@ int Composer::loadConfig(std::string& filepath) if (!dirList) dirList=CONTROL_CONFIG_PATH; filepath.append(":"); filepath.append(dirList); - const char *configPath = CtlConfigSearch(nullptr, filepath.c_str(), "control-"); + const char *configPath = CtlConfigSearch(nullptr, filepath.c_str(), "control"); if (!configPath) { AFB_ApiError(apiHandle, "CtlPreInit: No control-* config found invalid JSON %s ", filepath.c_str()); diff --git a/signal-composer-binding/source.cpp b/signal-composer-binding/source.cpp index 6832320..d7a5915 100644 --- a/signal-composer-binding/source.cpp +++ b/signal-composer-binding/source.cpp @@ -50,7 +50,7 @@ void SourceAPI::init() source.uid = init_->uid; source.api = nullptr; // We use binding v2, no dynamic API. source.request = {nullptr, nullptr}; - ActionExecOne(&source, init_, nullptr); + ActionExecOne(&source, init_, json_object_new_object()); return; } else if(api_ == afbBindingV2.api) -- cgit 1.2.3-korg