/* * 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, something express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Reference: * Json load using json_unpack https://jansson.readthedocs.io/en/2.9/apiref.html#parsing-and-validating-values */ #ifndef _LUA_CTL_INCLUDE_ #define _LUA_CTL_INCLUDE_ #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif // prefix start debug script #ifndef CONTROL_DOSCRIPT_PRE #define CONTROL_DOSCRIPT_PRE "debug" #endif // default event name used by LUA #ifndef CONTROL_LUA_EVENT #define CONTROL_LUA_EVENT "luaevt" #endif // default use same search path for config.json and script.lua #ifndef CONTROL_LUA_PATH #define CONTROL_LUA_PATH CONTROL_CONFIG_PATH #endif #define AFB_BINDING_VERSION 2 #include #include #ifdef SUSE_LUA_INCDIR #include #include #include #else #include #include #include #endif #include "ctl-timer.h" #include "ctl-config.h" int LuaLibInit (); typedef int (*Lua2cFunctionT)(char *funcname, json_object *argsJ); typedef int (*Lua2cWrapperT) (lua_State* luaState, char *funcname, Lua2cFunctionT callback); #define CTLP_LUALOAD Lua2cWrapperT Lua2cWrap; #define CTLP_LUA2C(FuncName, label,argsJ, context) static int FuncName(char*label,json_object*argsJ);\ int lua2c_ ## FuncName(lua_State* luaState){return((*Lua2cWrap)(luaState, MACRO_STR_VALUE(FuncName), FuncName, PLUGIN_NAME));};\ static int FuncName(char* label, json_object* argsJ, void* context) typedef enum { LUA_DOCALL, LUA_DOSTRING, LUA_DOSCRIPT, } LuaDoActionT; int LuaConfigLoad(); int LuaConfigExec(); void LuaL2cNewLib(const char *label, luaL_Reg *l2cFunc, int count); int Lua2cWrapper(lua_State* luaState, char *funcname, Lua2cFunctionT callback); int LuaCallFunc (CtlActionT *action, json_object *queryJ) ; void ctlapi_lua_docall (afb_req request); void ctlapi_lua_dostring (afb_req request); void ctlapi_lua_doscript (afb_req request); #endif