Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
Nodemcu Firmware
Commits
1462d00e
Commit
1462d00e
authored
Dec 19, 2015
by
Terry Ellison
Browse files
Merge pull request #842 from jmattsson/module-ltr-cleanup
Cleanup: LTR module registration
parents
4708b2ac
9003d3e8
Changes
48
Show whitespace changes
Inline
Side-by-side
app/Makefile
View file @
1462d00e
...
@@ -86,8 +86,13 @@ COMPONENTS_eagle.app.v6 = \
...
@@ -86,8 +86,13 @@ COMPONENTS_eagle.app.v6 = \
crypto/libcrypto.a
\
crypto/libcrypto.a
\
dhtlib/libdhtlib.a
\
dhtlib/libdhtlib.a
\
tsl2561/tsl2561lib.a
\
tsl2561/tsl2561lib.a
\
modules/libmodules.a
modules/libmodules.a
\
# Inspect the modules library and work out which modules need to be linked.
# For each enabled module, a symbol name of the form XYZ_module_selected is
# returned. At link time those names are declared undefined, so those (and
# only those) modules are pulled in.
SELECTED_MODULE_SYMS
=
$(
filter
%_module_selected %module_selected1,
$(
shell
$(NM)
modules/.output/
$(TARGET)
/
$(FLAVOR)
/lib/libmodules.a
))
LINKFLAGS_eagle.app.v6
=
\
LINKFLAGS_eagle.app.v6
=
\
-Wl
,--gc-sections
\
-Wl
,--gc-sections
\
...
@@ -98,6 +103,7 @@ LINKFLAGS_eagle.app.v6 = \
...
@@ -98,6 +103,7 @@ LINKFLAGS_eagle.app.v6 = \
-Wl
,--no-check-sections
\
-Wl
,--no-check-sections
\
-Wl
,--wrap
=
_xtos_set_exception_handler
\
-Wl
,--wrap
=
_xtos_set_exception_handler
\
-Wl
,-static
\
-Wl
,-static
\
$(
addprefix
-u
,
$(SELECTED_MODULE_SYMS)
)
\
-Wl
,--start-group
\
-Wl
,--start-group
\
-lc
\
-lc
\
-lgcc
\
-lgcc
\
...
@@ -134,9 +140,11 @@ DEPENDS_eagle.app.v6 = \
...
@@ -134,9 +140,11 @@ DEPENDS_eagle.app.v6 = \
# -DWLAN_CONFIG_CCX
# -DWLAN_CONFIG_CCX
CONFIGURATION_DEFINES
=
-D__ets__
\
CONFIGURATION_DEFINES
=
-D__ets__
\
-DICACHE_FLASH
\
-DICACHE_FLASH
\
-DLUA_OPTIMIZE_MEMORY
=
2
\
-DMIN_OPT_LEVEL
=
2
\
-DLWIP_OPEN_SRC
\
-DLWIP_OPEN_SRC
\
-DPBUF_RSV_FOR_WLAN
\
-DPBUF_RSV_FOR_WLAN
\
-DEBUF_LWIP
-DEBUF_LWIP
\
DEFINES
+=
\
DEFINES
+=
\
$(UNIVERSAL_TARGET_DEFINES)
\
$(UNIVERSAL_TARGET_DEFINES)
\
...
...
app/include/module.h
0 → 100644
View file @
1462d00e
#ifndef __MODULE_H__
#define __MODULE_H__
#include "user_modules.h"
#include "lrodefs.h"
/* Registering a module within NodeMCU is really easy these days!
*
* Most of the work is done by a combination of pre-processor, compiler
* and linker "magic". Gone are the days of needing to update 4+ separate
* files just to register a module!
*
* You will need:
* - to include this header
* - a name for the module
* - a LUA_REG_TYPE module map
* - optionally, an init function
*
* Then simply put a line like this at the bottom of your module file:
*
* NODEMCU_MODULE(MYNAME, "myname", myname_map, luaopen_myname);
*
* or perhaps
*
* NODEMCU_MODULE(MYNAME, "myname", myname_map, NULL);
*
* if you don't need an init function.
*
* When you've done this, the module can be enabled in user_modules.h with:
*
* #define LUA_USE_MODULES_MYNAME
*
* and within NodeMCU you access it with myname.foo(), assuming you have
* a foo function in your module.
*/
#define MODULE_EXPAND_(x) x
#define MODULE_PASTE_(x,y) x##y
#define MODULE_EXPAND_PASTE_(x,y) MODULE_PASTE_(x,y)
#define LOCK_IN_SECTION(s) __attribute__((used,unused,section(s)))
/* For the ROM table, we name the variable according to ( | denotes concat):
* cfgname | _module_selected | LUA_USE_MODULES_##cfgname
* where the LUA_USE_MODULES_XYZ macro is first expanded to yield either
* an empty string (or 1) if the module has been enabled, or the literal
* LUA_USE_MOUDLE_XYZ in the case it hasn't. Thus, the name of the variable
* ends up looking either like XYZ_module_enabled, or if not enabled,
* XYZ_module_enabledLUA_USE_MODULES_XYZ. This forms the basis for
* letting the build system detect automatically (via nm) which modules need
* to be linked in.
*/
#define NODEMCU_MODULE(cfgname, luaname, map, initfunc) \
const LOCK_IN_SECTION(".lua_libs") \
luaL_Reg MODULE_PASTE_(lua_lib_,cfgname) = { luaname, initfunc }; \
const LOCK_IN_SECTION(".lua_rotable") \
luaR_table MODULE_EXPAND_PASTE_(cfgname,MODULE_EXPAND_PASTE_(_module_selected,MODULE_PASTE_(LUA_USE_MODULES_,cfgname))) \
= { luaname, map }
/* System module registration support, not using LUA_USE_MODULES_XYZ. */
#define BUILTIN_LIB_INIT(name, luaname, initfunc) \
const LOCK_IN_SECTION(".lua_libs") \
luaL_Reg MODULE_PASTE_(lua_lib_,name) = { luaname, initfunc }
#define BUILTIN_LIB(name, luaname, map) \
const LOCK_IN_SECTION(".lua_rotable") \
luaR_table MODULE_PASTE_(lua_rotable_,name) = { luaname, map }
#if !(MIN_OPT_LEVEL==2 && LUA_OPTIMIZE_MEMORY==2)
# error "NodeMCU modules must be built with LTR enabled (MIN_OPT_LEVEL=2 and LUA_OPTIMIZE_MEMORY=2)"
#endif
#endif
app/include/user_modules.h
View file @
1462d00e
...
@@ -12,9 +12,7 @@
...
@@ -12,9 +12,7 @@
#define LUA_USE_BUILTIN_DEBUG_MINIMAL // for debug.getregistry() and debug.traceback()
#define LUA_USE_BUILTIN_DEBUG_MINIMAL // for debug.getregistry() and debug.traceback()
#ifndef LUA_CROSS_COMPILER
#ifndef LUA_CROSS_COMPILER
#define LUA_USE_MODULES
#ifdef LUA_USE_MODULES
#define LUA_USE_MODULES_ADC
#define LUA_USE_MODULES_ADC
#define LUA_USE_MODULES_BIT
#define LUA_USE_MODULES_BIT
//#define LUA_USE_MODULES_BMP085
//#define LUA_USE_MODULES_BMP085
...
@@ -47,7 +45,6 @@
...
@@ -47,7 +45,6 @@
//#define LUA_USE_MODULES_WS2801
//#define LUA_USE_MODULES_WS2801
#define LUA_USE_MODULES_WS2812
#define LUA_USE_MODULES_WS2812
#endif
/* LUA_USE_MODULES */
#endif
#endif
/* LUA_CROSS_COMPILER */
#endif
/* __USER_MODULES_H__ */
#endif
/* __USER_MODULES_H__ */
app/lua/lbaselib.c
View file @
1462d00e
...
@@ -489,6 +489,7 @@ static int luaB_newproxy (lua_State *L) {
...
@@ -489,6 +489,7 @@ static int luaB_newproxy (lua_State *L) {
{LSTRKEY("xpcall"), LFUNCVAL(luaB_xpcall)}
{LSTRKEY("xpcall"), LFUNCVAL(luaB_xpcall)}
#if LUA_OPTIMIZE_MEMORY == 2
#if LUA_OPTIMIZE_MEMORY == 2
#undef MIN_OPT_LEVEL
#define MIN_OPT_LEVEL 2
#define MIN_OPT_LEVEL 2
#include "lrodefs.h"
#include "lrodefs.h"
const
LUA_REG_TYPE
base_funcs_list
[]
=
{
const
LUA_REG_TYPE
base_funcs_list
[]
=
{
...
...
app/lua/ldblib.c
View file @
1462d00e
...
@@ -383,6 +383,7 @@ static int db_errorfb (lua_State *L) {
...
@@ -383,6 +383,7 @@ static int db_errorfb (lua_State *L) {
return
1
;
return
1
;
}
}
#undef MIN_OPT_LEVEL
#define MIN_OPT_LEVEL 1
#define MIN_OPT_LEVEL 1
#include "lrodefs.h"
#include "lrodefs.h"
const
LUA_REG_TYPE
dblib
[]
=
{
const
LUA_REG_TYPE
dblib
[]
=
{
...
...
app/lua/liolib.c
View file @
1462d00e
...
@@ -538,6 +538,7 @@ static int f_flush (lua_State *L) {
...
@@ -538,6 +538,7 @@ static int f_flush (lua_State *L) {
return
pushresult
(
L
,
fs_flush
(
tofile
(
L
))
==
0
,
NULL
);
return
pushresult
(
L
,
fs_flush
(
tofile
(
L
))
==
0
,
NULL
);
}
}
#undef MIN_OPT_LEVEL
#define MIN_OPT_LEVEL 2
#define MIN_OPT_LEVEL 2
#include "lrodefs.h"
#include "lrodefs.h"
#if LUA_OPTIMIZE_MEMORY == 2
#if LUA_OPTIMIZE_MEMORY == 2
...
...
app/lua/lmathlib.c
View file @
1462d00e
...
@@ -311,6 +311,7 @@ static int math_randomseed (lua_State *L) {
...
@@ -311,6 +311,7 @@ static int math_randomseed (lua_State *L) {
#undef MIN_OPT_LEVEL
#define MIN_OPT_LEVEL 1
#define MIN_OPT_LEVEL 1
#include "lrodefs.h"
#include "lrodefs.h"
const
LUA_REG_TYPE
math_map
[]
=
{
const
LUA_REG_TYPE
math_map
[]
=
{
...
...
app/lua/loadlib.c
View file @
1462d00e
...
@@ -646,6 +646,7 @@ static const lua_CFunction loaders[] =
...
@@ -646,6 +646,7 @@ static const lua_CFunction loaders[] =
{
loader_preload
,
loader_Lua
,
loader_C
,
loader_Croot
,
NULL
};
{
loader_preload
,
loader_Lua
,
loader_C
,
loader_Croot
,
NULL
};
#if LUA_OPTIMIZE_MEMORY > 0
#if LUA_OPTIMIZE_MEMORY > 0
#undef MIN_OPT_LEVEL
#define MIN_OPT_LEVEL 1
#define MIN_OPT_LEVEL 1
#include "lrodefs.h"
#include "lrodefs.h"
const
LUA_REG_TYPE
lmt
[]
=
{
const
LUA_REG_TYPE
lmt
[]
=
{
...
...
app/lua/lrodefs.h
View file @
1462d00e
...
@@ -16,7 +16,7 @@
...
@@ -16,7 +16,7 @@
#undef LREGISTER
#undef LREGISTER
#if (MIN_OPT_LEVEL > 0) && (LUA_OPTIMIZE_MEMORY >= MIN_OPT_LEVEL)
#if (MIN_OPT_LEVEL > 0) && (LUA_OPTIMIZE_MEMORY >= MIN_OPT_LEVEL)
#define LUA_REG_TYPE luaR_entry
ICACHE_RODATA_ATTR
#define LUA_REG_TYPE luaR_entry
#define LSTRKEY LRO_STRKEY
#define LSTRKEY LRO_STRKEY
#define LNUMKEY LRO_NUMKEY
#define LNUMKEY LRO_NUMKEY
#define LNILKEY LRO_NILKEY
#define LNILKEY LRO_NILKEY
...
...
app/lua/lstrlib.c
View file @
1462d00e
...
@@ -825,6 +825,7 @@ static int str_format (lua_State *L) {
...
@@ -825,6 +825,7 @@ static int str_format (lua_State *L) {
return
1
;
return
1
;
}
}
#undef MIN_OPT_LEVEL
#define MIN_OPT_LEVEL 1
#define MIN_OPT_LEVEL 1
#include "lrodefs.h"
#include "lrodefs.h"
const
LUA_REG_TYPE
strlib
[]
=
{
const
LUA_REG_TYPE
strlib
[]
=
{
...
...
app/lua/ltablib.c
View file @
1462d00e
...
@@ -266,6 +266,7 @@ static int sort (lua_State *L) {
...
@@ -266,6 +266,7 @@ static int sort (lua_State *L) {
/* }====================================================== */
/* }====================================================== */
#undef MIN_OPT_LEVEL
#define MIN_OPT_LEVEL 1
#define MIN_OPT_LEVEL 1
#include "lrodefs.h"
#include "lrodefs.h"
const
LUA_REG_TYPE
tab_funcs
[]
=
{
const
LUA_REG_TYPE
tab_funcs
[]
=
{
...
...
app/lua/luac_cross/loslib.c
View file @
1462d00e
...
@@ -221,6 +221,7 @@ static int os_exit (lua_State *L) {
...
@@ -221,6 +221,7 @@ static int os_exit (lua_State *L) {
c_exit
(
luaL_optint
(
L
,
1
,
EXIT_SUCCESS
));
c_exit
(
luaL_optint
(
L
,
1
,
EXIT_SUCCESS
));
}
}
#undef MIN_OPT_LEVEL
#define MIN_OPT_LEVEL 1
#define MIN_OPT_LEVEL 1
#include "lrodefs.h"
#include "lrodefs.h"
const
LUA_REG_TYPE
syslib
[]
=
{
const
LUA_REG_TYPE
syslib
[]
=
{
...
...
app/modules/adc.c
View file @
1462d00e
// Module for interfacing with adc
// Module for interfacing with adc
//#include "lua.h"
#include "module.h"
#include "lualib.h"
#include "lauxlib.h"
#include "lauxlib.h"
#include "platform.h"
#include "platform.h"
#include "auxmods.h"
#include "lrotable.h"
#include "c_types.h"
#include "c_types.h"
#include "user_interface.h"
#include "user_interface.h"
...
@@ -28,26 +25,10 @@ static int adc_readvdd33( lua_State* L )
...
@@ -28,26 +25,10 @@ static int adc_readvdd33( lua_State* L )
}
}
// Module function map
// Module function map
#define MIN_OPT_LEVEL 2
static
const
LUA_REG_TYPE
adc_map
[]
=
{
#include "lrodefs.h"
const
LUA_REG_TYPE
adc_map
[]
=
{
{
LSTRKEY
(
"read"
),
LFUNCVAL
(
adc_sample
)
},
{
LSTRKEY
(
"read"
),
LFUNCVAL
(
adc_sample
)
},
{
LSTRKEY
(
"readvdd33"
),
LFUNCVAL
(
adc_readvdd33
)
},
{
LSTRKEY
(
"readvdd33"
),
LFUNCVAL
(
adc_readvdd33
)
},
#if LUA_OPTIMIZE_MEMORY > 0
#endif
{
LNILKEY
,
LNILVAL
}
{
LNILKEY
,
LNILVAL
}
};
};
LUALIB_API
int
luaopen_adc
(
lua_State
*
L
)
NODEMCU_MODULE
(
ADC
,
"adc"
,
adc_map
,
NULL
);
{
#if LUA_OPTIMIZE_MEMORY > 0
return
0
;
#else // #if LUA_OPTIMIZE_MEMORY > 0
luaL_register
(
L
,
AUXLIB_ADC
,
adc_map
);
// Add constants
return
1
;
#endif // #if LUA_OPTIMIZE_MEMORY > 0
}
app/modules/auxmods.h
deleted
100644 → 0
View file @
4708b2ac
// Auxiliary Lua modules. All of them are declared here, then each platform
// decides what module(s) to register in the src/platform/xxxxx/platform_conf.h file
// FIXME: no longer platform_conf.h - either CPU header file, or board file
#ifndef __AUXMODS_H__
#define __AUXMODS_H__
#include "lua.h"
#define AUXLIB_GPIO "gpio"
LUALIB_API
int
(
luaopen_gpio
)(
lua_State
*
L
);
#define AUXLIB_SPI "spi"
LUALIB_API
int
(
luaopen_spi
)(
lua_State
*
L
);
#define AUXLIB_CAN "can"
LUALIB_API
int
(
luaopen_can
)(
lua_State
*
L
);
#define AUXLIB_TMR "tmr"
LUALIB_API
int
(
luaopen_tmr
)(
lua_State
*
L
);
#define AUXLIB_PD "pd"
LUALIB_API
int
(
luaopen_pd
)(
lua_State
*
L
);
#define AUXLIB_UART "uart"
LUALIB_API
int
(
luaopen_uart
)(
lua_State
*
L
);
#define AUXLIB_TERM "term"
LUALIB_API
int
(
luaopen_term
)(
lua_State
*
L
);
#define AUXLIB_PWM "pwm"
LUALIB_API
int
(
luaopen_pwm
)(
lua_State
*
L
);
#define AUXLIB_PACK "pack"
LUALIB_API
int
(
luaopen_pack
)(
lua_State
*
L
);
#define AUXLIB_BIT "bit"
LUALIB_API
int
(
luaopen_bit
)(
lua_State
*
L
);
#define AUXLIB_NET "net"
LUALIB_API
int
(
luaopen_net
)(
lua_State
*
L
);
#define AUXLIB_CPU "cpu"
LUALIB_API
int
(
luaopen_cpu
)(
lua_State
*
L
);
#define AUXLIB_ADC "adc"
LUALIB_API
int
(
luaopen_adc
)(
lua_State
*
L
);
#define AUXLIB_RPC "rpc"
LUALIB_API
int
(
luaopen_rpc
)(
lua_State
*
L
);
#define AUXLIB_BITARRAY "bitarray"
LUALIB_API
int
(
luaopen_bitarray
)(
lua_State
*
L
);
#define AUXLIB_ELUA "elua"
LUALIB_API
int
(
luaopen_elua
)(
lua_State
*
L
);
#define AUXLIB_I2C "i2c"
LUALIB_API
int
(
luaopen_i2c
)(
lua_State
*
L
);
#define AUXLIB_WIFI "wifi"
LUALIB_API
int
(
luaopen_wifi
)(
lua_State
*
L
);
#define AUXLIB_COAP "coap"
LUALIB_API
int
(
luaopen_coap
)(
lua_State
*
L
);
#define AUXLIB_MQTT "mqtt"
LUALIB_API
int
(
luaopen_mqtt
)(
lua_State
*
L
);
#define AUXLIB_U8G "u8g"
LUALIB_API
int
(
luaopen_u8g
)(
lua_State
*
L
);
#define AUXLIB_UCG "ucg"
LUALIB_API
int
(
luaopen_ucg
)(
lua_State
*
L
);
#define AUXLIB_NODE "node"
LUALIB_API
int
(
luaopen_node
)(
lua_State
*
L
);
#define AUXLIB_FILE "file"
LUALIB_API
int
(
luaopen_file
)(
lua_State
*
L
);
#define AUXLIB_OW "ow"
LUALIB_API
int
(
luaopen_ow
)(
lua_State
*
L
);
#define AUXLIB_CJSON "cjson"
LUALIB_API
int
(
luaopen_cjson
)(
lua_State
*
L
);
#define AUXLIB_CRYPTO "crypto"
LUALIB_API
int
(
luaopen_crypto
)(
lua_State
*
L
);
#define AUXLIB_RC "rc"
LUALIB_API
int
(
luaopen_rc
)(
lua_State
*
L
);
#define AUXLIB_DHT "dht"
LUALIB_API
int
(
luaopen_dht
)(
lua_State
*
L
);
// Helper macros
#define MOD_CHECK_ID( mod, id )\
if( !platform_ ## mod ## _exists( id ) )\
return luaL_error( L, #mod" %d does not exist", ( unsigned )id )
#define MOD_CHECK_TIMER( id )\
if( id == PLATFORM_TIMER_SYS_ID && !platform_timer_sys_available() )\
return luaL_error( L, "the system timer is not available on this platform" );\
if( !platform_timer_exists( id ) )\
return luaL_error( L, "timer %d does not exist", ( unsigned )id )\
#define MOD_CHECK_RES_ID( mod, id, resmod, resid )\
if( !platform_ ## mod ## _check_ ## resmod ## _id( id, resid ) )\
return luaL_error( L, #resmod" %d not valid with " #mod " %d", ( unsigned )resid, ( unsigned )id )
#define MOD_REG_NUMBER( L, name, val )\
lua_pushnumber( L, val );\
lua_setfield( L, -2, name )
#define MOD_REG_LUDATA( L, name, val )\
lua_pushlightuserdata( L, val );\
lua_setfield( L, -2, name )
#endif
app/modules/bit.c
View file @
1462d00e
...
@@ -5,13 +5,10 @@
...
@@ -5,13 +5,10 @@
// Modified by BogdanM for eLua
// Modified by BogdanM for eLua
#include "module.h"
#include "c_limits.h"
#include "c_limits.h"
//#include "lua.h"
#include "lauxlib.h"
#include "lauxlib.h"
#include "auxmods.h"
// #include "type.h"
#include "lrotable.h"
/* FIXME: Assume size_t is an unsigned lua_Integer */
/* FIXME: Assume size_t is an unsigned lua_Integer */
typedef
size_t
lua_UInteger
;
typedef
size_t
lua_UInteger
;
...
@@ -122,9 +119,7 @@ static int bit_clear( lua_State* L )
...
@@ -122,9 +119,7 @@ static int bit_clear( lua_State* L )
return
1
;
return
1
;
}
}
#define MIN_OPT_LEVEL 2
static
const
LUA_REG_TYPE
bit_map
[]
=
{
#include "lrodefs.h"
const
LUA_REG_TYPE
bit_map
[]
=
{
{
LSTRKEY
(
"bnot"
),
LFUNCVAL
(
bit_bnot
)
},
{
LSTRKEY
(
"bnot"
),
LFUNCVAL
(
bit_bnot
)
},
{
LSTRKEY
(
"band"
),
LFUNCVAL
(
bit_band
)
},
{
LSTRKEY
(
"band"
),
LFUNCVAL
(
bit_band
)
},
{
LSTRKEY
(
"bor"
),
LFUNCVAL
(
bit_bor
)
},
{
LSTRKEY
(
"bor"
),
LFUNCVAL
(
bit_bor
)
},
...
@@ -140,6 +135,4 @@ const LUA_REG_TYPE bit_map[] = {
...
@@ -140,6 +135,4 @@ const LUA_REG_TYPE bit_map[] = {
{
LNILKEY
,
LNILVAL
}
{
LNILKEY
,
LNILVAL
}
};
};
LUALIB_API
int
luaopen_bit
(
lua_State
*
L
)
{
NODEMCU_MODULE
(
BIT
,
"bit"
,
bit_map
,
NULL
);
LREGISTER
(
L
,
"bit"
,
bit_map
);
}
app/modules/bmp085.c
View file @
1462d00e
#include "
lualib
.h"
#include "
module
.h"
#include "lauxlib.h"
#include "lauxlib.h"
#include "platform.h"
#include "platform.h"
#include "auxmods.h"
#include "lrotable.h"
#include "c_stdlib.h"
#include "c_stdlib.h"
#include "c_string.h"
#include "c_string.h"
...
@@ -185,10 +183,7 @@ static int ICACHE_FLASH_ATTR bmp085_lua_pressure(lua_State* L) {
...
@@ -185,10 +183,7 @@ static int ICACHE_FLASH_ATTR bmp085_lua_pressure(lua_State* L) {
return
1
;
return
1
;
}
}
#define MIN_OPT_LEVEL 2
static
const
LUA_REG_TYPE
bmp085_map
[]
=
{
#include "lrodefs.h"
const
LUA_REG_TYPE
bmp085_map
[]
=
{
{
LSTRKEY
(
"temperature"
),
LFUNCVAL
(
bmp085_lua_temperature
)},
{
LSTRKEY
(
"temperature"
),
LFUNCVAL
(
bmp085_lua_temperature
)},
{
LSTRKEY
(
"pressure"
),
LFUNCVAL
(
bmp085_lua_pressure
)},
{
LSTRKEY
(
"pressure"
),
LFUNCVAL
(
bmp085_lua_pressure
)},
{
LSTRKEY
(
"pressure_raw"
),
LFUNCVAL
(
bmp085_lua_pressure_raw
)},
{
LSTRKEY
(
"pressure_raw"
),
LFUNCVAL
(
bmp085_lua_pressure_raw
)},
...
@@ -196,8 +191,4 @@ const LUA_REG_TYPE bmp085_map[] =
...
@@ -196,8 +191,4 @@ const LUA_REG_TYPE bmp085_map[] =
{
LNILKEY
,
LNILVAL
}
{
LNILKEY
,
LNILVAL
}
};
};
LUALIB_API
int
luaopen_bmp085
(
lua_State
*
L
)
{
NODEMCU_MODULE
(
BMP085
,
"bmp085"
,
bmp085_map
,
NULL
);
LREGISTER
(
L
,
"bmp085"
,
bmp085_map
);
return
1
;
}
app/modules/cjson.c
View file @
1462d00e
...
@@ -37,10 +37,10 @@
...
@@ -37,10 +37,10 @@
*/
*/
// #include <assert.h>
// #include <assert.h>
#include "module.h"
#include "c_string.h"
#include "c_string.h"
#include "c_math.h"
#include "c_math.h"
#include "c_limits.h"
#include "c_limits.h"
#include "lua.h"
#include "lauxlib.h"
#include "lauxlib.h"
#include "flash_api.h"
#include "flash_api.h"
...
@@ -1528,53 +1528,7 @@ static int json_protect_conversion(lua_State *l)
...
@@ -1528,53 +1528,7 @@ static int json_protect_conversion(lua_State *l)
* errors are memory related */
* errors are memory related */
return luaL_error(l, "Memory allocation error in CJSON protected call");
return luaL_error(l, "Memory allocation error in CJSON protected call");
}
}
#endif
// Module function map
#define MIN_OPT_LEVEL 2
#include "lrodefs.h"
const
LUA_REG_TYPE
cjson_map
[]
=
{
{
LSTRKEY
(
"encode"
),
LFUNCVAL
(
json_encode
)
},
{
LSTRKEY
(
"decode"
),
LFUNCVAL
(
json_decode
)
},
// { LSTRKEY( "encode_sparse_array" ), LFUNCVAL( json_cfg_encode_sparse_array ) },
// { LSTRKEY( "encode_max_depth" ), LFUNCVAL( json_cfg_encode_max_depth ) },
// { LSTRKEY( "decode_max_depth" ), LFUNCVAL( json_cfg_decode_max_depth ) },
// { LSTRKEY( "encode_number_precision" ), LFUNCVAL( json_cfg_encode_number_precision ) },
// { LSTRKEY( "encode_keep_buffer" ), LFUNCVAL( json_cfg_encode_keep_buffer ) },
// { LSTRKEY( "encode_invalid_numbers" ), LFUNCVAL( json_cfg_encode_invalid_numbers ) },
// { LSTRKEY( "decode_invalid_numbers" ), LFUNCVAL( json_cfg_decode_invalid_numbers ) },
// { LSTRKEY( "new" ), LFUNCVAL( lua_cjson_new ) },
#if LUA_OPTIMIZE_MEMORY > 0
#endif
{
LNILKEY
,
LNILVAL
}
};
LUALIB_API
int
luaopen_cjson
(
lua_State
*
L
)
{
cjson_mem_setlua
(
L
);
/* Initialise number conversions */
// fpconv_init(); // not needed for a specific cpu.
if
(
-
1
==
cfg_init
(
&
_cfg
)){
return
luaL_error
(
L
,
"BUG: Unable to init config for cjson"
);;
}
#if LUA_OPTIMIZE_MEMORY > 0
return
0
;
#else // #if LUA_OPTIMIZE_MEMORY > 0
luaL_register
(
L
,
AUXLIB_CJSON
,
cjson_map
);
// Add constants
/* Set cjson.null */
lua_pushlightuserdata
(
l
,
NULL
);
lua_setfield
(
l
,
-
2
,
"null"
);
/* Return cjson table */
return
1
;
#endif // #if LUA_OPTIMIZE_MEMORY > 0
}
#if 0
/* Return cjson module table */
/* Return cjson module table */
static int lua_cjson_new(lua_State *l)
static int lua_cjson_new(lua_State *l)
{
{
...
@@ -1644,5 +1598,34 @@ int luaopen_cjson_safe(lua_State *l)
...
@@ -1644,5 +1598,34 @@ int luaopen_cjson_safe(lua_State *l)
return 1;
return 1;
}
}
#endif
#endif
// Module function map
static
const
LUA_REG_TYPE
cjson_map
[]
=
{
{
LSTRKEY
(
"encode"
),
LFUNCVAL
(
json_encode
)
},
{
LSTRKEY
(
"decode"
),
LFUNCVAL
(
json_decode
)
},
//{ LSTRKEY( "encode_sparse_array" ), LFUNCVAL( json_cfg_encode_sparse_array ) },
//{ LSTRKEY( "encode_max_depth" ), LFUNCVAL( json_cfg_encode_max_depth ) },
//{ LSTRKEY( "decode_max_depth" ), LFUNCVAL( json_cfg_decode_max_depth ) },
//{ LSTRKEY( "encode_number_precision" ), LFUNCVAL( json_cfg_encode_number_precision ) },
//{ LSTRKEY( "encode_keep_buffer" ), LFUNCVAL( json_cfg_encode_keep_buffer ) },
//{ LSTRKEY( "encode_invalid_numbers" ), LFUNCVAL( json_cfg_encode_invalid_numbers ) },
//{ LSTRKEY( "decode_invalid_numbers" ), LFUNCVAL( json_cfg_decode_invalid_numbers ) },
//{ LSTRKEY( "new" ), LFUNCVAL( lua_cjson_new ) },
{
LNILKEY
,
LNILVAL
}
};
int
luaopen_cjson
(
lua_State
*
L
)
{
cjson_mem_setlua
(
L
);
/* Initialise number conversions */
// fpconv_init(); // not needed for a specific cpu.
if
(
-
1
==
cfg_init
(
&
_cfg
)){
return
luaL_error
(
L
,
"BUG: Unable to init config for cjson"
);;
}
return
0
;
}
NODEMCU_MODULE
(
CJSON
,
"cjson"
,
cjson_map
,
luaopen_cjson
);
/* vi:ai et sw=4 ts=4:
/* vi:ai et sw=4 ts=4:
*/
*/
app/modules/coap.c
View file @
1462d00e
// Module for coapwork
// Module for coapwork
//#include "lua.h"
#include "module.h"
#include "lualib.h"
#include "lauxlib.h"
#include "lauxlib.h"
#include "platform.h"
#include "platform.h"
#include "auxmods.h"
#include "lrotable.h"
#include "c_string.h"
#include "c_string.h"
#include "c_stdlib.h"
#include "c_stdlib.h"
...
@@ -561,39 +558,30 @@ static int coap_client_delete( lua_State* L )
...
@@ -561,39 +558,30 @@ static int coap_client_delete( lua_State* L )
}
}
// Module function map
// Module function map
#define MIN_OPT_LEVEL 2
static
const
LUA_REG_TYPE
coap_server_map
[]
=
{
#include "lrodefs.h"
{
LSTRKEY
(
"listen"
),
LFUNCVAL
(
coap_server_listen
)
},
static
const
LUA_REG_TYPE
coap_server_map
[]
=
{
LSTRKEY
(
"close"
),
LFUNCVAL
(
coap_server_close
)
},
{
{
LSTRKEY
(
"var"
),
LFUNCVAL
(
coap_server_var
)
},
{
LSTRKEY
(
"listen"
),
LFUNCVAL
(
coap_server_listen
)
},
{
LSTRKEY
(
"func"
),
LFUNCVAL
(
coap_server_func
)
},
{
LSTRKEY
(
"close"
),
LFUNCVAL
(
coap_server_close
)
},
{
LSTRKEY
(
"__gc"
),
LFUNCVAL
(
coap_server_delete
)
},
{
LSTRKEY
(
"var"
),
LFUNCVAL
(
coap_server_var
)
},
{
LSTRKEY
(
"__index"
),
LROVAL
(
coap_server_map
)
},
{
LSTRKEY
(
"func"
),
LFUNCVAL
(
coap_server_func
)
},
{
LSTRKEY
(
"__gc"
),
LFUNCVAL
(
coap_server_delete
)
},
#if LUA_OPTIMIZE_MEMORY > 0
{
LSTRKEY
(
"__index"
),
LROVAL
(
coap_server_map
)
},
#endif
{
LNILKEY
,
LNILVAL
}
{
LNILKEY
,
LNILVAL
}
};
};
static
const
LUA_REG_TYPE
coap_client_map
[]
=
static
const
LUA_REG_TYPE
coap_client_map
[]
=
{
{
{
LSTRKEY
(
"get"
),
LFUNCVAL
(
coap_client_get
)
},
{
LSTRKEY
(
"get"
),
LFUNCVAL
(
coap_client_get
)
},
{
LSTRKEY
(
"post"
),
LFUNCVAL
(
coap_client_post
)
},
{
LSTRKEY
(
"post"
),
LFUNCVAL
(
coap_client_post
)
},
{
LSTRKEY
(
"put"
),
LFUNCVAL
(
coap_client_put
)
},
{
LSTRKEY
(
"put"
),
LFUNCVAL
(
coap_client_put
)
},
{
LSTRKEY
(
"delete"
),
LFUNCVAL
(
coap_client_delete
)
},
{
LSTRKEY
(
"delete"
),
LFUNCVAL
(
coap_client_delete
)
},
{
LSTRKEY
(
"__gc"
),
LFUNCVAL
(
coap_client_gcdelete
)
},
{
LSTRKEY
(
"__gc"
),
LFUNCVAL
(
coap_client_gcdelete
)
},
{
LSTRKEY
(
"__index"
),
LROVAL
(
coap_client_map
)
},
#if LUA_OPTIMIZE_MEMORY > 0
{
LSTRKEY
(
"__index"
),
LROVAL
(
coap_client_map
)
},
#endif
{
LNILKEY
,
LNILVAL
}
{
LNILKEY
,
LNILVAL
}
};
};
const
LUA_REG_TYPE
coap_map
[]
=
static
const
LUA_REG_TYPE
coap_map
[]
=
{
{
{
LSTRKEY
(
"Server"
),
LFUNCVAL
(
coap_createServer
)
},
{
LSTRKEY
(
"Server"
),
LFUNCVAL
(
coap_createServer
)
},
{
LSTRKEY
(
"Client"
),
LFUNCVAL
(
coap_createClient
)
},
{
LSTRKEY
(
"Client"
),
LFUNCVAL
(
coap_createClient
)
},
#if LUA_OPTIMIZE_MEMORY > 0
{
LSTRKEY
(
"CON"
),
LNUMVAL
(
COAP_TYPE_CON
)
},
{
LSTRKEY
(
"CON"
),
LNUMVAL
(
COAP_TYPE_CON
)
},
{
LSTRKEY
(
"NON"
),
LNUMVAL
(
COAP_TYPE_NONCON
)
},
{
LSTRKEY
(
"NON"
),
LNUMVAL
(
COAP_TYPE_NONCON
)
},
{
LSTRKEY
(
"TEXT_PLAIN"
),
LNUMVAL
(
COAP_CONTENTTYPE_TEXT_PLAIN
)
},
{
LSTRKEY
(
"TEXT_PLAIN"
),
LNUMVAL
(
COAP_CONTENTTYPE_TEXT_PLAIN
)
},
...
@@ -602,58 +590,16 @@ const LUA_REG_TYPE coap_map[] =
...
@@ -602,58 +590,16 @@ const LUA_REG_TYPE coap_map[] =
{
LSTRKEY
(
"OCTET_STREAM"
),
LNUMVAL
(
COAP_CONTENTTYPE_APPLICATION_OCTET_STREAM
)
},
{
LSTRKEY
(
"OCTET_STREAM"
),
LNUMVAL
(
COAP_CONTENTTYPE_APPLICATION_OCTET_STREAM
)
},
{
LSTRKEY
(
"EXI"
),
LNUMVAL
(
COAP_CONTENTTYPE_APPLICATION_EXI
)
},
{
LSTRKEY
(
"EXI"
),
LNUMVAL
(
COAP_CONTENTTYPE_APPLICATION_EXI
)
},
{
LSTRKEY
(
"JSON"
),
LNUMVAL
(
COAP_CONTENTTYPE_APPLICATION_JSON
)
},
{
LSTRKEY
(
"JSON"
),
LNUMVAL
(
COAP_CONTENTTYPE_APPLICATION_JSON
)
},
{
LSTRKEY
(
"__metatable"
),
LROVAL
(
coap_map
)
},
{
LSTRKEY
(
"__metatable"
),
LROVAL
(
coap_map
)
},
#endif
{
LNILKEY
,
LNILVAL
}
{
LNILKEY
,
LNILVAL
}
};
};
LUALIB_API
int
luaopen_coap
(
lua_State
*
L
)
int
luaopen_coap
(
lua_State
*
L
)
{
{
endpoint_setup
();
endpoint_setup
();
#if LUA_OPTIMIZE_MEMORY > 0
luaL_rometatable
(
L
,
"coap_server"
,
(
void
*
)
coap_server_map
);
// create metatable for coap_server
luaL_rometatable
(
L
,
"coap_server"
,
(
void
*
)
coap_server_map
);
// create metatable for coap_server
luaL_rometatable
(
L
,
"coap_client"
,
(
void
*
)
coap_client_map
);
// create metatable for coap_client
luaL_rometatable
(
L
,
"coap_client"
,
(
void
*
)
coap_client_map
);
// create metatable for coap_client
return
0
;
return
0
;
#else // #if LUA_OPTIMIZE_MEMORY > 0
int
n
;
luaL_register
(
L
,
AUXLIB_COAP
,
coap_map
);
// Set it as its own metatable
lua_pushvalue
(
L
,
-
1
);
lua_setmetatable
(
L
,
-
2
);
// Module constants
MOD_REG_NUMBER
(
L
,
"CON"
,
COAP_TYPE_CON
);
MOD_REG_NUMBER
(
L
,
"NON"
,
COAP_TYPE_NONCON
);
MOD_REG_NUMBER
(
L
,
"TEXT_PLAIN"
,
COAP_CONTENTTYPE_TEXT_PLAIN
);
MOD_REG_NUMBER
(
L
,
"LINKFORMAT"
,
COAP_CONTENTTYPE_APPLICATION_LINKFORMAT
);
MOD_REG_NUMBER
(
L
,
"XML"
,
COAP_CONTENTTYPE_APPLICATION_XML
);
MOD_REG_NUMBER
(
L
,
"OCTET_STREAM"
,
COAP_CONTENTTYPE_APPLICATION_OCTET_STREAM
);
MOD_REG_NUMBER
(
L
,
"EXI"
,
COAP_CONTENTTYPE_APPLICATION_EXI
);
MOD_REG_NUMBER
(
L
,
"JSON"
,
COAP_CONTENTTYPE_APPLICATION_JSON
);
n
=
lua_gettop
(
L
);
// create metatable
luaL_newmetatable
(
L
,
"coap_server"
);
// metatable.__index = metatable
lua_pushliteral
(
L
,
"__index"
);
lua_pushvalue
(
L
,
-
2
);
lua_rawset
(
L
,
-
3
);
// Setup the methods inside metatable
luaL_register
(
L
,
NULL
,
coap_server_map
);
lua_settop
(
L
,
n
);
// create metatable
luaL_newmetatable
(
L
,
"coap_client"
);
// metatable.__index = metatable
lua_pushliteral
(
L
,
"__index"
);
lua_pushvalue
(
L
,
-
2
);
lua_rawset
(
L
,
-
3
);
// Setup the methods inside metatable
luaL_register
(
L
,
NULL
,
coap_client_map
);
return
1
;
#endif // #if LUA_OPTIMIZE_MEMORY > 0
}
}
NODEMCU_MODULE
(
COAP
,
"coap"
,
coap_map
,
luaopen_coap
);
app/modules/crypto.c
View file @
1462d00e
// Module for cryptography
// Module for cryptography
//#include "lua.h"
#include "module.h"
#include "lualib.h"
#include "lauxlib.h"
#include "lauxlib.h"
#include "platform.h"
#include "platform.h"
#include "auxmods.h"
#include "lrotable.h"
#include "c_types.h"
#include "c_types.h"
#include "c_stdlib.h"
#include "c_stdlib.h"
#include "../crypto/digests.h"
#include "../crypto/digests.h"
...
@@ -153,31 +150,14 @@ static int crypto_lhmac (lua_State *L)
...
@@ -153,31 +150,14 @@ static int crypto_lhmac (lua_State *L)
// Module function map
// Module function map
#define MIN_OPT_LEVEL 2
static
const
LUA_REG_TYPE
crypto_map
[]
=
{
#include "lrodefs.h"
const
LUA_REG_TYPE
crypto_map
[]
=
{
{
LSTRKEY
(
"sha1"
),
LFUNCVAL
(
crypto_sha1
)
},
{
LSTRKEY
(
"sha1"
),
LFUNCVAL
(
crypto_sha1
)
},
{
LSTRKEY
(
"toBase64"
),
LFUNCVAL
(
crypto_base64_encode
)
},
{
LSTRKEY
(
"toBase64"
),
LFUNCVAL
(
crypto_base64_encode
)
},
{
LSTRKEY
(
"toHex"
),
LFUNCVAL
(
crypto_hex_encode
)
},
{
LSTRKEY
(
"toHex"
),
LFUNCVAL
(
crypto_hex_encode
)
},
{
LSTRKEY
(
"mask"
),
LFUNCVAL
(
crypto_mask
)
},
{
LSTRKEY
(
"mask"
),
LFUNCVAL
(
crypto_mask
)
},
{
LSTRKEY
(
"hash"
),
LFUNCVAL
(
crypto_lhash
)
},
{
LSTRKEY
(
"hash"
),
LFUNCVAL
(
crypto_lhash
)
},
{
LSTRKEY
(
"hmac"
),
LFUNCVAL
(
crypto_lhmac
)
},
{
LSTRKEY
(
"hmac"
),
LFUNCVAL
(
crypto_lhmac
)
},
#if LUA_OPTIMIZE_MEMORY > 0
#endif
{
LNILKEY
,
LNILVAL
}
{
LNILKEY
,
LNILVAL
}
};
};
LUALIB_API
int
luaopen_crypto
(
lua_State
*
L
)
NODEMCU_MODULE
(
CRYPTO
,
"crypto"
,
crypto_map
,
NULL
);
{
#if LUA_OPTIMIZE_MEMORY > 0
return
0
;
#else // #if LUA_OPTIMIZE_MEMORY > 0
luaL_register
(
L
,
AUXLIB_CRYPTO
,
crypto_map
);
// Add constants
return
1
;
#endif // #if LUA_OPTIMIZE_MEMORY > 0
}
app/modules/dht.c
View file @
1462d00e
// Module for interfacing with the DHTxx sensors (xx = 11-21-22-33-44).
// Module for interfacing with the DHTxx sensors (xx = 11-21-22-33-44).
#include "
lualib
.h"
#include "
module
.h"
#include "lauxlib.h"
#include "lauxlib.h"
#include "auxmods.h"
#include "platform.h"
#include "lrotable.h"
#include "cpu_esp8266.h"
#include "cpu_esp8266.h"
#include "dht.h"
#include "dht.h"
...
@@ -100,30 +99,14 @@ static int dht_lapi_readxx( lua_State *L )
...
@@ -100,30 +99,14 @@ static int dht_lapi_readxx( lua_State *L )
// }
// }
// Module function map
// Module function map
#define MIN_OPT_LEVEL 2
static
const
LUA_REG_TYPE
dht_map
[]
=
{
#include "lrodefs.h"
const
LUA_REG_TYPE
dht_map
[]
=
{
{
LSTRKEY
(
"read"
),
LFUNCVAL
(
dht_lapi_read
)
},
{
LSTRKEY
(
"read"
),
LFUNCVAL
(
dht_lapi_read
)
},
{
LSTRKEY
(
"read11"
),
LFUNCVAL
(
dht_lapi_read11
)
},
{
LSTRKEY
(
"read11"
),
LFUNCVAL
(
dht_lapi_read11
)
},
{
LSTRKEY
(
"readxx"
),
LFUNCVAL
(
dht_lapi_readxx
)
},
{
LSTRKEY
(
"readxx"
),
LFUNCVAL
(
dht_lapi_readxx
)
},
#if LUA_OPTIMIZE_MEMORY > 0
{
LSTRKEY
(
"OK"
),
LNUMVAL
(
DHTLIB_OK
)
},
{
LSTRKEY
(
"OK"
),
LNUMVAL
(
DHTLIB_OK
)
},
{
LSTRKEY
(
"ERROR_CHECKSUM"
),
LNUMVAL
(
DHTLIB_ERROR_CHECKSUM
)
},
{
LSTRKEY
(
"ERROR_CHECKSUM"
),
LNUMVAL
(
DHTLIB_ERROR_CHECKSUM
)
},
{
LSTRKEY
(
"ERROR_TIMEOUT"
),
LNUMVAL
(
DHTLIB_ERROR_TIMEOUT
)
},
{
LSTRKEY
(
"ERROR_TIMEOUT"
),
LNUMVAL
(
DHTLIB_ERROR_TIMEOUT
)
},
#endif
{
LNILKEY
,
LNILVAL
}
{
LNILKEY
,
LNILVAL
}
};
};
LUALIB_API
int
luaopen_dht
(
lua_State
*
L
)
NODEMCU_MODULE
(
DHT
,
"dht"
,
dht_map
,
NULL
);
{
#if LUA_OPTIMIZE_MEMORY > 0
return
0
;
#else // #if LUA_OPTIMIZE_MEMORY > 0
luaL_register
(
L
,
AUXLIB_DHT
,
dht_map
);
// Add the constants
return
1
;
#endif // #if LUA_OPTIMIZE_MEMORY > 0
}
Prev
1
2
3
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment