larduinolib.c 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /**
  2. * Arduino library for lua
  3. */
  4. #include "lua.h"
  5. #include "lauxlib.h"
  6. #include "lexlibs.h"
  7. #include "libarduino.h"
  8. int arduino_pinMode(lua_State *L)
  9. {
  10. pinMode(luaL_checkint(L, 1), luaL_checkint(L, 2));
  11. return 0;
  12. }
  13. int arduino_digitalWrite(lua_State *L)
  14. {
  15. digitalWrite(luaL_checkint(L, 1), luaL_checkint(L, 2));
  16. return 0;
  17. }
  18. int arduino_digitalRead(lua_State *L)
  19. {
  20. lua_pushinteger(L, digitalRead(luaL_checkint(L, 1)));
  21. return 1;
  22. }
  23. int arduino_analogWrite(lua_State *L)
  24. {
  25. analogWrite(luaL_checkint(L, 1), luaL_checkint(L, 2));
  26. return 0;
  27. }
  28. /* the minimum optimization level at which we use rotables */
  29. #define MIN_OPT_LEVEL 2
  30. #include "lrodefs.h"
  31. #if 0
  32. /* standard table */
  33. static const luaL_Reg arduino_map[] =
  34. {
  35. {"pinMode", arduino_pinMode},
  36. {"digitalRead", arduino_digitalRead},
  37. {"digitalWrite", arduino_digitalWrite},
  38. {"analogWrite", arduino_analogWrite},
  39. {NULL, NULL}
  40. }
  41. #else
  42. const LUA_REG_TYPE arduino_map[] =
  43. {
  44. {LSTRKEY("pinMode"), LFUNCVAL(arduino_pinMode)},
  45. {LSTRKEY("digitalRead"), LFUNCVAL(arduino_digitalRead)},
  46. {LSTRKEY("digitalWrite"), LFUNCVAL(arduino_digitalWrite)},
  47. {LSTRKEY("analogWrite"), LFUNCVAL(arduino_analogWrite)},
  48. #if LUA_OPTIMIZE_MEMORY > 0
  49. {LSTRKEY("HIGH"), LFUNCVAL(HIGH)},
  50. {LSTRKEY("LOW"), LFUNCVAL(LOW)},
  51. {LSTRKEY("INPUT"), LFUNCVAL(INPUT)},
  52. {LSTRKEY("OUTPUT"), LFUNCVAL(OUTPUT)},
  53. {LSTRKEY("INPUT_PULLUP"), LFUNCVAL(INPUT_PULLUP)},
  54. #endif /* LUA_OPTIMIZE_MEMORY > 0 */
  55. {LNILKEY, LNILVAL}
  56. };
  57. #endif /* 0 */
  58. /**
  59. * Open arduino library
  60. */
  61. LUALIB_API int luaopen_arduino(lua_State *L)
  62. {
  63. #if LUA_OPTIMIZE_MEMORY > 0
  64. return 0;
  65. #else
  66. luaL_register(L, EXLIB_ARDUINO, arduino_map);
  67. lua_pushnumber(L, HIGH);
  68. lua_setfield(L, -2, "HIGH");
  69. lua_pushnumber(L, LOW);
  70. lua_setfield(L, -2, "LOW");
  71. lua_pushnumber(L, INPUT);
  72. lua_setfield(L, -2, "INPUT");
  73. lua_pushnumber(L, OUTPUT);
  74. lua_setfield(L, -2, "OUTPUT");
  75. lua_pushnumber(L, INPUT_PULLUP);
  76. lua_setfield(L, -2, "INPUT_PULLUP");
  77. return 1;
  78. #endif
  79. }