Explorar o código

update:GPIO兼容新的API模式

alienwalker %!s(int64=3) %!d(string=hai) anos
pai
achega
46e65af519
Modificáronse 2 ficheiros con 113 adicións e 59 borrados
  1. 65 59
      luat/include/luat_gpio.h
  2. 48 0
      luat/include/luat_gpio_legacy.h

+ 65 - 59
luat/include/luat_gpio.h

@@ -1,59 +1,65 @@
-
-#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
+
+#ifndef LUAT_GPIO_H
+#define LUAT_GPIO_H
+
+
+#include "luat_base.h"
+#include "luat_gpio_legacy.h"
+
+
+
+#define LUAT_GPIO_LOW                 (Luat_GPIO_LOW)
+#define LUAT_GPIO_HIGH                (Luat_GPIO_HIGH)
+
+#define LUAT_GPIO_OUTPUT         (Luat_GPIO_OUTPUT)
+#define LUAT_GPIO_INPUT          (Luat_GPIO_INPUT)
+#define LUAT_GPIO_IRQ            (Luat_GPIO_IRQ)
+
+#define LUAT_GPIO_DEFAULT        (Luat_GPIO_DEFAULT)
+#define LUAT_GPIO_PULLUP         (Luat_GPIO_PULLUP)
+#define LUAT_GPIO_PULLDOWN       (Luat_GPIO_PULLDOWN)
+
+#define LUAT_GPIO_RISING             (Luat_GPIO_RISING)
+#define LUAT_GPIO_FALLING            (Luat_GPIO_FALLING)
+#define LUAT_GPIO_BOTH               (Luat_GPIO_BOTH)
+#define LUAT_GPIO_HIGH_IRQ			(Luat_GPIO_HIGH_IRQ)	//高电平中断
+#define LUAT_GPIO_LOW_IRQ			(Luat_GPIO_LOW_IRQ)	//低电平中断
+
+#define LUAT_GPIO_MAX_ID             (Luat_GPIO_MAX_ID)
+
+
+
+
+typedef struct luat_gpio_cfg
+{
+    int pin;
+    uint8_t mode;
+    uint8_t pull;
+    uint8_t irq_type;
+    uint8_t output_level;
+    luat_gpio_irq_cb irq_cb;
+    void* irq_args;
+    uint8_t alt_fun;
+} luat_gpio_cfg_t;
+/**
+ * @defgroup luatos_device 外设接口
+ * @{
+ */
+
+/**
+ * @defgroup luatos_device_gpio GPIO接口
+ * @{
+ */
+
+void luat_gpio_set_default_cfg(luat_gpio_cfg_t* gpio);
+int luat_gpio_open(luat_gpio_cfg_t* gpio);
+int luat_gpio_set(int pin, int level);
+int luat_gpio_get(int pin);
+void luat_gpio_close(int pin);
+
+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

+ 48 - 0
luat/include/luat_gpio_legacy.h

@@ -0,0 +1,48 @@
+
+#ifndef LUAT_GPIO_LEGACY_H
+#define LUAT_GPIO_LEGACY_H
+
+
+#include "luat_base.h"
+#ifdef __LUATOS__
+#include "luat_msgbus.h"
+int l_gpio_handler(lua_State *L, void* ptr);
+#endif
+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;
+
+int luat_gpio_setup(luat_gpio_t* gpio);
+void luat_gpio_mode(int pin, int mode, int pull, int initOutput);
+
+
+#endif