#ifndef LUAT_GPIO_H #define LUAT_GPIO_H #include "lua.h" #include "lualib.h" #include "lauxlib.h" #include "stdint.h" #include "luat_msgbus.h" typedef int (*luat_gpio_irq_cb)(int pin, void* args); #define Luat_GPIO_LOW 0x00 #define Luat_GPIO_HIGH 0x01 #define Luat_GPIO_OUTPUT 0x00 #define Luat_GPIO_INPUT 0x01 #define Luat_GPIO_IRQ 0x02 #define Luat_GPIO_DEFAULT 0x00 #define Luat_GPIO_PULLUP 0x01 #define Luat_GPIO_PULLDOWN 0x02 #define Luat_GPIO_RISING 0x00 #define Luat_GPIO_FALLING 0x01 #define Luat_GPIO_BOTH 0x02 #define Luat_GPIO_HIGH_IRQ 0x03 //高电平中断 #define Luat_GPIO_LOW_IRQ 0x04 //低电平中断 #define Luat_GPIO_MAX_ID 255 typedef struct luat_gpio { int pin; int mode; int pull; int irq; int lua_ref; luat_gpio_irq_cb irq_cb; void* irq_args; } luat_gpio_t; void luat_gpio_mode(int pin, int mode, int pull, int initOutput); int luat_gpio_setup(luat_gpio_t* gpio); int luat_gpio_set(int pin, int level); int luat_gpio_get(int pin); void luat_gpio_close(int pin); int l_gpio_handler(lua_State *L, void* ptr); int luat_gpio_irq_default(int pin, void* args); int luat_gpio_set_irq_cb(int pin, luat_gpio_irq_cb cb, void* args); // 在同一个GPIO输出一组脉冲, 注意, len的单位是bit, 高位在前. void luat_gpio_pulse(int pin, uint8_t *level, uint16_t len, uint16_t delay_ns); #endif