Просмотр исходного кода

Merge branch 'master' of https://gitee.com/openLuat/LuatOS into master

chenxuuu 5 лет назад
Родитель
Сommit
ed90ee19fe
1 измененных файлов с 25 добавлено и 1 удалено
  1. 25 1
      luat/modules/luat_lib_gpio.c

+ 25 - 1
luat/modules/luat_lib_gpio.c

@@ -25,6 +25,7 @@ typedef struct luat_lib_gpio_cb
 
 // 保存中断回调的数组
 static luat_lib_gpio_cb_t irq_cbs[GPIO_IRQ_COUNT];
+static uint8_t default_gpio_pull = Luat_GPIO_DEFAULT;
 
 int l_gpio_handler(lua_State *L, void* ptr) {
     // 给 sys.publish方法发送数据
@@ -81,7 +82,7 @@ static int l_gpio_setup(lua_State *L) {
     else {
         conf.mode = Luat_GPIO_INPUT;
     }
-    conf.pull = luaL_optinteger(L, 3, Luat_GPIO_DEFAULT);
+    conf.pull = luaL_optinteger(L, 3, default_gpio_pull);
     int re = luat_gpio_setup(&conf);
     if (re == 0) {
         if (conf.mode == Luat_GPIO_IRQ) {
@@ -185,6 +186,27 @@ static int l_gpio_close(lua_State *L) {
     return 0;
 }
 
+/*
+设置GPIO脚的默认上拉/下拉设置, 默认是平台自定义(一般为开漏).
+@api gpio.setDefaultPull(val)
+@int val 0平台自定义,1上拉, 2下拉
+@return boolean 传值正确返回true,否则返回false
+@usage
+-- 设置gpio.setup的pull默认值为上拉
+gpio.setDefaultPull(1)
+*/
+static int l_gpio_set_default_pull(lua_State *L) {
+    int value = luaL_checkinteger(L, 1);
+    if (value >= 0 & value <= 2) {
+        default_gpio_pull = value;
+        lua_pushboolean(L, 1);
+    }
+    else {
+        lua_pushboolean(L, 0);
+    }
+    return 1;
+}
+
 #include "rotable.h"
 static const rotable_Reg reg_gpio[] =
 {
@@ -192,6 +214,8 @@ static const rotable_Reg reg_gpio[] =
     { "set" ,           l_gpio_set,   0},
     { "get" ,           l_gpio_get,   0 },
     { "close" ,         l_gpio_close, 0 },
+    { "setDefaultPull", l_gpio_set_default_pull, 0},
+
     { "LOW",            NULL,         Luat_GPIO_LOW},
     { "HIGH",           NULL,         Luat_GPIO_HIGH},