luat_gpio.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #ifndef LUAT_GPIO_H
  2. #define LUAT_GPIO_H
  3. #include "lua.h"
  4. #include "lualib.h"
  5. #include "lauxlib.h"
  6. #include "stdint.h"
  7. #include "luat_msgbus.h"
  8. typedef int (*luat_gpio_irq_cb)(int pin, void* args);
  9. #define Luat_GPIO_LOW 0x00
  10. #define Luat_GPIO_HIGH 0x01
  11. #define Luat_GPIO_OUTPUT 0x00
  12. #define Luat_GPIO_INPUT 0x01
  13. #define Luat_GPIO_IRQ 0x02
  14. #define Luat_GPIO_DEFAULT 0x00
  15. #define Luat_GPIO_PULLUP 0x01
  16. #define Luat_GPIO_PULLDOWN 0x02
  17. #define Luat_GPIO_RISING 0x00
  18. #define Luat_GPIO_FALLING 0x01
  19. #define Luat_GPIO_BOTH 0x02
  20. #define Luat_GPIO_HIGH_IRQ 0x03 //高电平中断
  21. #define Luat_GPIO_LOW_IRQ 0x04 //低电平中断
  22. #define Luat_GPIO_MAX_ID 255
  23. typedef struct luat_gpio
  24. {
  25. int pin;
  26. int mode;
  27. int pull;
  28. int irq;
  29. int lua_ref;
  30. luat_gpio_irq_cb irq_cb;
  31. void* irq_args;
  32. } luat_gpio_t;
  33. void luat_gpio_mode(int pin, int mode, int pull, int initOutput);
  34. int luat_gpio_setup(luat_gpio_t* gpio);
  35. int luat_gpio_set(int pin, int level);
  36. int luat_gpio_get(int pin);
  37. void luat_gpio_close(int pin);
  38. int l_gpio_handler(lua_State *L, void* ptr);
  39. int luat_gpio_irq_default(int pin, void* args);
  40. int luat_gpio_set_irq_cb(int pin, luat_gpio_irq_cb cb, void* args);
  41. // 在同一个GPIO输出一组脉冲, 注意, len的单位是bit, 高位在前.
  42. void luat_gpio_pulse(int pin, uint8_t *level, uint16_t len, uint16_t delay_ns);
  43. #endif