Lua marix API compiles. does not work

This commit is contained in:
Ryan Voots 2016-04-23 23:08:03 -07:00
parent fda422524f
commit 3e9e8eb2b9
4 changed files with 75 additions and 58 deletions

View file

@ -1,6 +1,7 @@
#include "log.h"
#include "lua.hpp"
#include <cstdint>
#include "luamatrix.h"
extern "C" {
#include "lua.h"
@ -95,24 +96,6 @@ static void l_memstats() {
return ll_realloc(ptr, nsize);
}
// CREATE ARRAY TYPE AND EXPOSE led_data TO LUA.
// metatable method for handling "array[index]"
/* static int led_data_index (lua_State* L) {
CRGB** parray = (CRGB **) luaL_checkudata(L, 1, "led_data");
int index = luaL_checkint(L, 2);
lua_pushnumber(L, (*parray)[index-1]);
return 1;
}
// metatable method for handle "array[index] = value"
static int led_data_newindex (lua_State* L) {
CRGB** parray = (CRGB **) luaL_checkudata(L, 1, "led_data");
int index = luaL_checkint(L, 2);
int value = luaL_checkint(L, 3);
(*parray)[index-1] = value;
return 0;
} */
void l_yield(lua_State *L, lua_Debug *ar) {
lua_yield(L, 0);
}
@ -153,43 +136,6 @@ int full_run(lua_State *L, lua_State *t) {
return rc;
}
/* static const struct luaL_Reg led_data_metamethods[] = {
{ "__index", led_data_index },
{ "__newindex", led_data_newindex },
{NULL, NULL}
};
// create a metatable for our array type
static void create_array_type(lua_State* L) {
luaL_newmetatable(L, "led_data");
luaL_setfuncs(L, led_data_metamethods, 0);
//lua_setglobal(L, "led_data");
}
// expose an array to lua, by storing it in a userdata with the array metatable
static int expose_array(lua_State* L, CRGB array[]) {
CRGB** parray = (CRGB **) lua_newuserdata(L, sizeof(CRGB**));
*parray = array;
luaL_getmetatable(L, "led_data");
lua_setmetatable(L, -2);
return 1;
}
// test routine which exposes our test array to Lua
static int getarray (lua_State* L) {
return expose_array( L, led_data );
}
int luaopen_array (lua_State* L) {
create_array_type(L);
// make our test routine available to Lua
lua_register(L, "led_data", getarray);
return 0;
} */
// This code blatantly stolen and borrowed from lbaselib.c luaB_print
static int l_print (lua_State *L) {
int n = lua_gettop(L); /* number of arguments */
@ -262,7 +208,7 @@ void l_start(const char *prgm) {
debug_log("Importing libraries");
l_openlibs(L);
// luaopen_array(L);
luaopen_matrixpanel(L);
lua_pushcfunction(L, l_print);
lua_setglobal(L, "print");

58
teensy/luamatrix.cpp Normal file
View file

@ -0,0 +1,58 @@
#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;
}

13
teensy/luamatrix.h Normal file
View file

@ -0,0 +1,13 @@
#ifndef __LUALIGHTS_LUAMATRIX_H
#define __LUALIGHTS_LUAMATRIX_H
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
#include "lua-alloc.h"
};
int luaopen_matrixpanel (lua_State* L);
#endif

View file

@ -1,5 +1,5 @@
#ifndef __LUALIGHTS_LUA_ALLOC_H
#define __LUALIGHTS_LUA_ALLOC_H
#ifndef __LUALIGHTS_MATRIX_H
#define __LUALIGHTS_MATRIX_H
#include <Adafruit_GFX.h>
#include <RGBmatrixPanel.h>