rgbmatrixscreen/teensy/luamatrix.cpp

58 lines
1.7 KiB
C++

#include "luamatrix.h"
#include "matrix.h"
#include "lua.hpp"
// CREATE ARRAY TYPE AND EXPOSE matrixpanel TO LUA.
// metatable method for handling "array[index]"
/* static int matrixpanel_index (lua_State* L) {
CRGB** parray = (CRGB **) luaL_checkudata(L, 1, "matrixpanel");
int index = luaL_checkint(L, 2);
lua_pushnumber(L, (*parray)[index-1]);
return 1;
}
// metatable method for handle "array[index] = value"
static int matrixpanel_newindex (lua_State* L) {
CRGB** parray = (CRGB **) luaL_checkudata(L, 1, "matrixpanel");
int index = luaL_checkint(L, 2);
int value = luaL_checkint(L, 3);
(*parray)[index-1] = value;
return 0;
} */
static const struct luaL_Reg matrixpanel_metamethods[] = {
// { "__index", matrixpanel_index },
// { "__newindex", matrixpanel_newindex },
{NULL, NULL}
};
// create a metatable for our array type
static void create_matrixpanel_type(lua_State* L) {
luaL_newmetatable(L, "matrixpanel");
luaL_setfuncs(L, matrixpanel_metamethods, 0);
//lua_setglobal(L, "matrixpanel");
}
// expose an array to lua, by storing it in a userdata with the array metatable
static int expose_array(lua_State* L) {
RGBmatrixPanel **pmatrix = (RGBmatrixPanel **) lua_newuserdata(L, sizeof(RGBmatrixPanel **));
*pmatrix = &matrixpanel;
luaL_getmetatable(L, "matrixpanel");
lua_setmetatable(L, -2);
return 1;
}
// test routine which exposes our test array to Lua
static int getmatrixpanel (lua_State* L) {
return expose_array( L );
}
int luaopen_matrixpanel (lua_State* L) {
create_matrixpanel_type(L);
// make our test routine available to Lua
lua_register(L, "matrixpanel", getmatrixpanel);
return 0;
}