nodemcu-firmware/app/modules/rtcmem.c

51 lines
1.0 KiB
C

// Module for RTC user memory access
#include "module.h"
#include "lauxlib.h"
#include "rtc/rtcaccess.h"
static int rtcmem_read32 (lua_State *L)
{
int idx = luaL_checknumber (L, 1);
int n = 1;
if (lua_isnumber (L, 2))
n = lua_tonumber (L, 2);
if (!lua_checkstack (L, n))
return 0;
int ret = 0;
while (n > 0 && idx >= 0 && idx < RTC_USER_MEM_NUM_DWORDS)
{
lua_pushinteger (L, rtc_mem_read (idx++));
--n;
++ret;
}
return ret;
}
static int rtcmem_write32 (lua_State *L)
{
int idx = luaL_checknumber (L, 1);
int n = lua_gettop (L) - 1;
luaL_argcheck (
L, idx + n <= RTC_USER_MEM_NUM_DWORDS, 1, "RTC mem would overrun");
int src = 2;
while (n-- > 0)
{
rtc_mem_write (idx++, lua_tonumber (L, src++));
}
return 0;
}
// Module function map
static const LUA_REG_TYPE rtcmem_map[] = {
{ LSTRKEY("read32"), LFUNCVAL(rtcmem_read32) },
{ LSTRKEY("write32"), LFUNCVAL(rtcmem_write32) },
{ LNILKEY, LNILVAL }
};
NODEMCU_MODULE(RTCMEM, "rtcmem", rtcmem_map, NULL);