提交 6c808004 编写于 作者: X xiongyihui3@gmail.com

move larduinolib.c into ART's repo, add lua external library example

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@2405 bbd45198-f89e-11dd-88c7-29a3b14d5316
上级 0f111d6e
/**
* Arduino library for lua
*/
#include "lua.h"
#include "lauxlib.h"
#include "lexlibs.h"
#include "libarduino.h"
int arduino_pinMode(lua_State *L)
{
pinMode(luaL_checkint(L, 1), luaL_checkint(L, 2));
return 0;
}
int arduino_digitalWrite(lua_State *L)
{
digitalWrite(luaL_checkint(L, 1), luaL_checkint(L, 2));
return 0;
}
int arduino_digitalRead(lua_State *L)
{
lua_pushinteger(L, digitalRead(luaL_checkint(L, 1)));
return 1;
}
int arduino_analogWrite(lua_State *L)
{
analogWrite(luaL_checkint(L, 1), luaL_checkint(L, 2));
return 0;
}
/* the minimum optimization level at which we use rotables */
#define MIN_OPT_LEVEL 2
#include "lrodefs.h"
#if 0
/* standard table */
static const luaL_Reg arduino_map[] =
{
{"pinMode", arduino_pinMode},
{"digitalRead", arduino_digitalRead},
{"digitalWrite", arduino_digitalWrite},
{"analogWrite", arduino_analogWrite},
{NULL, NULL}
}
#else
const LUA_REG_TYPE arduino_map[] =
{
{LSTRKEY("pinMode"), LFUNCVAL(arduino_pinMode)},
{LSTRKEY("digitalRead"), LFUNCVAL(arduino_digitalRead)},
{LSTRKEY("digitalWrite"), LFUNCVAL(arduino_digitalWrite)},
{LSTRKEY("analogWrite"), LFUNCVAL(arduino_analogWrite)},
#if LUA_OPTIMIZE_MEMORY > 0
{LSTRKEY("HIGH"), LFUNCVAL(HIGH)},
{LSTRKEY("LOW"), LFUNCVAL(LOW)},
{LSTRKEY("INPUT"), LFUNCVAL(INPUT)},
{LSTRKEY("OUTPUT"), LFUNCVAL(OUTPUT)},
{LSTRKEY("INPUT_PULLUP"), LFUNCVAL(INPUT_PULLUP)},
#endif /* LUA_OPTIMIZE_MEMORY > 0 */
{LNILKEY, LNILVAL}
};
#endif /* 0 */
/**
* Open arduino library
*/
LUALIB_API int luaopen_arduino(lua_State *L)
{
#if LUA_OPTIMIZE_MEMORY > 0
return 0;
#else
luaL_register(L, EXLIB_ARDUINO, arduino_map);
lua_pushnumber(L, HIGH);
lua_setfield(L, -2, "HIGH");
lua_pushnumber(L, LOW);
lua_setfield(L, -2, "LOW");
lua_pushnumber(L, INPUT);
lua_setfield(L, -2, "INPUT");
lua_pushnumber(L, OUTPUT);
lua_setfield(L, -2, "OUTPUT");
lua_pushnumber(L, INPUT_PULLUP);
lua_setfield(L, -2, "INPUT_PULLUP");
return 1;
#endif
}
/**
* example of adding lua external library
*/
#include "lua.h"
#include "lauxlib.h"
#include "lexlibs.h"
#define VERSION 1
int example_hello(lua_State *L)
{
rt_kprintf("Hello, Lua on RT-Thead!\n");
return 0;
}
int example_print(lua_State *L)
{
int n = lua_gettop(L);
int i;
for (i=1; i<=n; i++)
{
if (i>1)
rt_kprintf("\t");
if (lua_isstring(L,i))
rt_kprintf("%s",lua_tostring(L,i));
else if (lua_isnumber(L, i))
rt_kprintf("%d",lua_tointeger(L,i));
else if (lua_isnil(L,i))
rt_kprintf("%s","nil");
else if (lua_isboolean(L,i))
rt_kprintf("%s",lua_toboolean(L,i) ? "true" : "false");
else
rt_kprintf("%s:%p",luaL_typename(L,i),lua_topointer(L,i));
}
rt_kprintf("\n");
return 0;
}
#define MIN_OPT_LEVEL 2
#include "lrodefs.h"
const LUA_REG_TYPE example_map[] =
{
{LSTRKEY("hello"), LFUNCVAL(example_hello)},
{LSTRKEY("print"), LFUNCVAL(example_print)},
#if LUA_OPTIMIZE_MEMORY > 0
{LSTRKEY("version"), LNUMVAL(VERSION)},
#endif
{LNILKEY, LNILVAL}
};
/**
* Open exmaple library
*/
LUALIB_API int luaopen_example(lua_State *L)
{
#if LUA_OPTIMIZE_MEMORY > 0
return 0;
#else
luaL_register(L, EXLIB_EXAMPLE, example_map);
lua_pushnumber(L, VERSION);
lua_setfield(L, -2, "version");
return 1;
#endif
}
...@@ -5,11 +5,22 @@ ...@@ -5,11 +5,22 @@
#ifndef __LEXLIBS_H__ #ifndef __LEXLIBS_H__
#define __LEXLIBS_H__ #define __LEXLIBS_H__
/* Arduino library source - larduinolib.c is placed in ART's directories */
#if defined(RT_LUA_USE_ARDUINOLIB)
#define EXLIB_ARDUINO "arduino" #define EXLIB_ARDUINO "arduino"
#define ROM_EXLIB_ARDUINO \
_ROM(EXLIB_ARDUINO, luaopen_arduino, arduino_map)
#else
#define ROM_EXLIB_ARDUINO
#endif
#define LUA_EXLIBS_ROM\ #define EXLIB_EXAMPLE "example"
_ROM(EXLIB_ARDUINO, luaopen_arduino, arduino_map ) #define ROM_EXLIB_EXAMPLE \
_ROM(EXLIB_EXAMPLE, luaopen_example, example_map)
#define LUA_EXLIBS_ROM \
ROM_EXLIB_EXAMPLE \
ROM_EXLIB_ARDUINO
#endif #endif
...@@ -36,6 +36,7 @@ static const luaL_Reg lualibs[] = { ...@@ -36,6 +36,7 @@ static const luaL_Reg lualibs[] = {
{LUA_DBLIBNAME, luaopen_debug}, {LUA_DBLIBNAME, luaopen_debug},
#endif #endif
#if defined(LUA_EXLIBS_ROM) #if defined(LUA_EXLIBS_ROM)
#undef _ROM
#define _ROM( name, openf, table ) { name, openf }, #define _ROM( name, openf, table ) { name, openf },
LUA_EXLIBS_ROM LUA_EXLIBS_ROM
#endif #endif
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册