lnodemcu.h 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /*
  2. * NodeMCU extensions to Lua 5.3 for readonly Flash memory support
  3. */
  4. #ifndef lnodemcu_h
  5. #define lnodemcu_h
  6. #include "lua.h"
  7. #include "lobject.h"
  8. #include "llimits.h"
  9. #include "ltm.h"
  10. #ifdef LUA_USE_HOST
  11. #define LRO_STRKEY(k) k
  12. #define LOCK_IN_SECTION(s)
  13. #else
  14. #define LRO_STRKEY(k) ((STORE_ATTR char *) k)
  15. #define LOCK_IN_SECTION(s) __attribute__((used,unused,section(".lua_" #s)))
  16. #endif
  17. /* Macros used to declare rotable entries */
  18. #define LRO_FUNCVAL(v) {{.f = v}, LUA_TLCF}
  19. #define LRO_LUDATA(v) {{.p = (void *) v}, LUA_TLIGHTUSERDATA}
  20. #define LRO_NILVAL {{.p = NULL}, LUA_TNIL}
  21. #define LRO_NUMVAL(v) {{.i = v}, LUA_TNUMINT}
  22. #define LRO_INTVAL(v) LRO_NUMVAL(v)
  23. #define LRO_FLOATVAL(v) {{.n = v}, LUA_TNUMFLT}
  24. #define LRO_ROVAL(v) {{.gc = cast(GCObject *, &(v ## _ROTable))}, LUA_TTBLROF}
  25. #define LROT_MARKED 0 //<<<<<<<<<< *** TBD *** >>>>>>>>>>>
  26. #define LROT_FUNCENTRY(n,f) {LRO_STRKEY(#n), LRO_FUNCVAL(f)},
  27. #define LROT_LUDENTRY(n,x) {LRO_STRKEY(#n), LRO_LUDATA(x)},
  28. #define LROT_NUMENTRY(n,x) {LRO_STRKEY(#n), LRO_NUMVAL(x)},
  29. #define LROT_INTENTRY(n,x) LROT_NUMENTRY(n,x)
  30. #define LROT_FLOATENTRY(n,x) {LRO_STRKEY(#n), LRO_FLOATVAL(x)},
  31. #define LROT_TABENTRY(n,t) {LRO_STRKEY(#n), LRO_ROVAL(t)},
  32. #define LROT_TABLE(rt) const ROTable rt ## _ROTable
  33. #define LROT_ENTRYREF(rt) (rt ##_entries)
  34. #define LROT_TABLEREF(rt) (&rt ##_ROTable)
  35. #define LROT_BEGIN(rt,mt,f) LROT_TABLE(rt); \
  36. static const ROTable_entry rt ## _entries[] = {
  37. #define LROT_ENTRIES_IN_SECTION(rt,s) \
  38. static const ROTable_entry LOCK_IN_SECTION(s) rt ## _entries[] = {
  39. #define LROT_END(rt,mt,f) {NULL, LRO_NILVAL} }; \
  40. const ROTable rt ## _ROTable = { \
  41. (GCObject *)1,LUA_TTBLROF, LROT_MARKED, \
  42. cast(lu_byte, ~(f)), (sizeof(rt ## _entries)/sizeof(ROTable_entry)) - 1, \
  43. cast(Table *, mt), cast(ROTable_entry *, rt ## _entries) };
  44. #define LROT_BREAK(rt) };
  45. #define LROT_MASK(m) cast(lu_byte, 1<<TM_ ## m)
  46. /*
  47. * These are statically coded can be any combination of the fast index tags
  48. * listed in ltm.h: EQ, GC, INDEX, LEN, MODE, NEWINDEX or combined by anding
  49. * GC+INDEX is the only common combination used, hence the combinaton macro
  50. */
  51. #define LROT_MASK_EQ LROT_MASK(EQ)
  52. #define LROT_MASK_GC LROT_MASK(GC)
  53. #define LROT_MASK_INDEX LROT_MASK(INDEX)
  54. #define LROT_MASK_LEN LROT_MASK(LEN)
  55. #define LROT_MASK_MODE LROT_MASK(MODE)
  56. #define LROT_MASK_NEWINDEX LROT_MASK(NEWINDEX)
  57. #define LROT_MASK_GC_INDEX (LROT_MASK_GC | LROT_MASK_INDEX)
  58. #define LUA_MAX_ROTABLE_NAME 32 /* Maximum length of a rotable name and of a string key*/
  59. #ifdef LUA_CORE
  60. #include "lstate.h"
  61. #include "lzio.h"
  62. LUAI_FUNC int luaN_init (lua_State *L);
  63. LUAI_FUNC void *luaN_writeFlash (void *data, const void *rec, size_t n);
  64. LUAI_FUNC void luaN_flushFlash (void *);
  65. LUAI_FUNC void luaN_setFlash (void *, unsigned int o);
  66. #endif
  67. #endif