aboutsummaryrefslogtreecommitdiffhomepage
path: root/backends/lua.c
diff options
context:
space:
mode:
authorcbdev <cb@cbcdn.com>2020-01-04 18:39:04 +0100
committercbdev <cb@cbcdn.com>2020-01-04 18:39:04 +0100
commit871bc1568f94ee4026fd64df062572b91d45d462 (patch)
tree76f5e675bcfa0f087c8aa5f247f6c6099dbad3af /backends/lua.c
parent3098484d9d8ab3becd6d82297c13963f359460f4 (diff)
downloadmidimonster-871bc1568f94ee4026fd64df062572b91d45d462.tar.gz
midimonster-871bc1568f94ee4026fd64df062572b91d45d462.tar.bz2
midimonster-871bc1568f94ee4026fd64df062572b91d45d462.zip
Add input_channel call to Lua backend
Diffstat (limited to 'backends/lua.c')
-rw-r--r--backends/lua.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/backends/lua.c b/backends/lua.c
index ee9e03f..510fc72 100644
--- a/backends/lua.c
+++ b/backends/lua.c
@@ -9,6 +9,7 @@
#endif
#define LUA_REGISTRY_KEY "_midimonster_lua_instance"
+#define LUA_REGISTRY_CURRENT_CHANNEL "_midimonster_lua_channel"
static size_t timers = 0;
static lua_timer* timer = NULL;
@@ -189,6 +190,7 @@ static int lua_callback_interval(lua_State* interpreter){
if(lua_gettable(interpreter, LUA_REGISTRYINDEX) == LUA_TNUMBER){
//already interval'd
reference = luaL_checkinteger(interpreter, 4);
+ DBGPF("Updating interval to %" PRIu64 " msec", interval);
}
else if(interval){
//get a reference to the function
@@ -199,6 +201,8 @@ static int lua_callback_interval(lua_State* interpreter){
lua_pushvalue(interpreter, 1);
lua_pushinteger(interpreter, reference);
lua_settable(interpreter, LUA_REGISTRYINDEX);
+
+ DBGPF("Registered interval with %" PRIu64 " msec", interval);
}
//find matching timer
@@ -273,6 +277,12 @@ static int lua_callback_output_value(lua_State* interpreter){
return lua_callback_value(interpreter, 0);
}
+static int lua_callback_input_channel(lua_State* interpreter){
+ lua_pushstring(interpreter, LUA_REGISTRY_CURRENT_CHANNEL);
+ lua_gettable(interpreter, LUA_REGISTRYINDEX);
+ return 1;
+}
+
static int lua_configure(char* option, char* value){
LOG("No backend configuration possible");
return 1;
@@ -320,6 +330,7 @@ static instance* lua_instance(){
lua_register(data->interpreter, "interval", lua_callback_interval);
lua_register(data->interpreter, "input_value", lua_callback_input_value);
lua_register(data->interpreter, "output_value", lua_callback_output_value);
+ lua_register(data->interpreter, "input_channel", lua_callback_input_channel);
//store instance pointer to the lua state
lua_pushstring(data->interpreter, LUA_REGISTRY_KEY);
@@ -374,6 +385,11 @@ static int lua_set(instance* inst, size_t num, channel** c, channel_value* v){
data->input[c[n]->ident] = v[n].normalised;
//call lua channel handlers if present
if(data->reference[c[n]->ident] != LUA_NOREF){
+ //push the channel name
+ lua_pushstring(data->interpreter, LUA_REGISTRY_CURRENT_CHANNEL);
+ lua_pushstring(data->interpreter, data->channel_name[c[n]->ident]);
+ lua_settable(data->interpreter, LUA_REGISTRYINDEX);
+
lua_rawgeti(data->interpreter, LUA_REGISTRYINDEX, data->reference[c[n]->ident]);
lua_pushnumber(data->interpreter, v[n].normalised);
if(lua_pcall(data->interpreter, 1, 0, 0) != LUA_OK){
@@ -382,6 +398,11 @@ static int lua_set(instance* inst, size_t num, channel** c, channel_value* v){
}
}
}
+
+ //clear the channel name
+ lua_pushstring(data->interpreter, LUA_REGISTRY_CURRENT_CHANNEL);
+ lua_pushnil(data->interpreter);
+ lua_settable(data->interpreter, LUA_REGISTRYINDEX);
return 0;
}
@@ -422,6 +443,7 @@ static int lua_handle(size_t num, managed_fd* fds){
timer[n].delta %= timer[n].interval;
lua_rawgeti(timer[n].interpreter, LUA_REGISTRYINDEX, timer[n].reference);
lua_pcall(timer[n].interpreter, 0, 0, 0);
+ DBGPF("Calling interval timer function %" PRIsize_t, n);
}
}
}