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

add:airlink,支持通过Air8000设置yhm2712寄存器

Jiangqian 9 месяцев назад
Родитель
Сommit
487fbb7b40

+ 1 - 0
components/airlink/include/luat_airlink_drv_gpio.h

@@ -12,5 +12,6 @@ int luat_airlink_drv_gpio_setup(luat_gpio_t* gpio);
 int luat_airlink_drv_gpio_set(int pin, int level);
 int luat_airlink_drv_gpio_open(luat_gpio_cfg_t* gpio);
 int luat_airlink_drv_gpio_get(int pin, int* val);
+int luat_airlink_drv_gpio_driver_yhm27xx(uint32_t Pin, uint8_t ChipID, uint8_t RegAddress, uint8_t IsRead, uint8_t *Data);
 
 #endif

+ 26 - 1
components/airlink/src/driver/luat_airlink_drv_gpio.c

@@ -40,7 +40,7 @@ int luat_airlink_drv_gpio_set(int pin, int level) {
         .len = 2 + sizeof(luat_airlink_cmd_t) + 8
     };
     luat_airlink_cmd_t* cmd = luat_airlink_cmd_new(0x301, 2 + 8) ;
-    if (cmd == NULL) {
+    if (cmd == NULL) { 
         return -101;
     }
     memcpy(cmd->data, &luat_airlink_next_cmd_id, 8);
@@ -91,3 +91,28 @@ int luat_airlink_drv_gpio_get(int pin, int* val) {
     luat_rtos_semaphore_take(semaphore_drv_gpio, 1000);
     return 0;
 }
+
+int luat_airlink_drv_gpio_driver_yhm27xx(uint32_t Pin, uint8_t ChipID, uint8_t RegAddress, uint8_t IsRead, uint8_t *Data) 
+{
+    uint8_t Pin_id = Pin;
+    uint64_t luat_airlink_next_cmd_id = luat_airlink_get_next_cmd_id();
+    airlink_queue_item_t item = {
+        .len = 5 + sizeof(luat_airlink_cmd_t) + 8
+    };
+    luat_airlink_cmd_t* cmd = luat_airlink_cmd_new(0x304, 5 + 8) ;
+    if (cmd == NULL) {
+        return -101;
+    }
+    memcpy(cmd->data, &luat_airlink_next_cmd_id, 8);
+    uint8_t* data = cmd->data + 8;
+    data[0] = Pin_id;
+    data[1] = ChipID;
+    data[2] = RegAddress;
+    data[3] = IsRead;
+    data[4] = *Data;
+
+    item.cmd = cmd;
+    luat_airlink_queue_send(LUAT_AIRLINK_QUEUE_CMD, &item);
+    return 0;
+}
+

+ 13 - 0
components/airlink/src/exec/luat_airlink_cmd_exec_gpio.c

@@ -68,3 +68,16 @@ int luat_airlink_cmd_exec_gpio_get(luat_airlink_cmd_t* cmd, void* userdata) {
     luat_airlink_result_send(params, 10);
     return 0;
 }
+
+int luat_airlink_cmd_exec_gpio_driver_yhm27xx(luat_airlink_cmd_t* cmd, void* userdata) {
+    LLOGE("收到yhm27xx的GPIO设置指令!!!");
+
+    uint8_t params[5];
+    memcpy(params, cmd->data + 8, 5);
+    if (params[0] >= 128) {
+        params[0] -= 128;
+    }
+    int ret = luat_gpio_driver_yhm27xx(params[0], params[1],params[2], params[3], &(params[4]));
+    
+    return 0;
+}

+ 2 - 0
components/airlink/src/luat_airlink_cmds.c

@@ -56,6 +56,7 @@ CMD_DEFINE(gpio_setup);
 CMD_DEFINE(gpio_set);
 CMD_DEFINE(gpio_get);
 CMD_DEFINE(gpio_get_result);
+CMD_DEFINE(gpio_driver_yhm27xx);
 
 // UART指令, 0x400开始
 CMD_DEFINE(uart_setup);
@@ -104,6 +105,7 @@ __USER_FUNC_IN_RAM__ const luat_airlink_cmd_reg_t airlink_cmds[] = {
     CMD_REG(0x300, gpio_setup),
     CMD_REG(0x301, gpio_set),
     // CMD_REG(0x302, gpio_get),
+    CMD_REG(0x304, gpio_driver_yhm27xx),
 #endif
 
 #ifdef LUAT_USE_AIRLINK_EXEC_UART

+ 1 - 0
components/drv/include/luat/drv_gpio.h

@@ -8,5 +8,6 @@ int luat_drv_gpio_open(luat_gpio_cfg_t* gpio);
 int luat_drv_gpio_set(int pin, int level);
 int luat_drv_gpio_setup(luat_gpio_t* gpio);
 int luat_drv_gpio_get(int pin, int* val);
+int luat_drv_gpio_driver_yhm27xx(uint32_t Pin, uint8_t ChipID, uint8_t RegAddress, uint8_t IsRead, uint8_t *Data);
 
 #endif

+ 6 - 0
components/drv/src/luat_drv_gpio.c

@@ -27,6 +27,7 @@ int luat_drv_gpio_open(luat_gpio_cfg_t* gpio) {
 }
 
 int luat_drv_gpio_set(int pin, int level) {
+    LLOGD("执行luat_drv_gpio_set pin %d level %d", pin, level);
     if (pin < 0 || pin >= 255) {
         return -1;
     }
@@ -67,3 +68,8 @@ int luat_drv_gpio_get(int pin, int* val) {
         return luat_airlink_drv_gpio_get(pin, val);
     }
 }
+
+int luat_drv_gpio_driver_yhm27xx(uint32_t Pin, uint8_t ChipID, uint8_t RegAddress, uint8_t IsRead, uint8_t *Data) 
+{
+    return luat_airlink_drv_gpio_driver_yhm27xx(Pin, ChipID, RegAddress, IsRead, Data);
+}

+ 16 - 3
luat/modules/luat_lib_sensor.c

@@ -973,10 +973,23 @@ static int l_sensor_yhm27xx(lua_State *L)
     is_read = 0;
     data = luaL_checkinteger(L, 4);
   }
-  if(luat_gpio_driver_yhm27xx(pin, chip_id, reg, is_read, &data))
+  if(pin >= 128)
   {
-    lua_pushboolean(L, 0);
-    return 1;
+    #ifdef LUAT_USE_DRV_GPIO
+    if(luat_drv_gpio_driver_yhm27xx(pin, chip_id, reg, is_read, &data))
+    {
+      lua_pushboolean(L, 0);
+      return 1;
+    }
+    #endif
+  }
+  else
+  {
+    if(luat_gpio_driver_yhm27xx(pin, chip_id, reg, is_read, &data))
+    {
+      lua_pushboolean(L, 0);
+      return 1;
+    }
   }
   lua_pushboolean(L, 1);
   if (is_read)

+ 61 - 0
module/Air8000/demo/yhm27xx/main.lua

@@ -0,0 +1,61 @@
+
+-- LuaTools需要PROJECT和VERSION这两个信息
+PROJECT = "2712_demo"
+VERSION = "1.0.0"
+
+-- sys库是标配
+_G.sys = require("sys")
+
+--[[
+充电IC的相关逻辑
+]]
+
+local gpio_pin = 152
+
+local sensor_addr = 0x04
+local V_ctrl_register = 0x00
+local I_ctrl_register = 0x01
+local mode_register = 0x02
+local config_register = 0x03
+
+local status1_register = 0x05   --read only
+local status2_register = 0x06   --read only
+local status3_register = 0x07   --read only
+local id_register = 0x08        --read only
+
+local set_4V = 0xE0
+local set_4V25 = 0x20
+local set_4V35 = 0x60
+local set_4V45 = 0xA0
+
+
+gpio.setup(gpio_pin, 1, gpio.PULLUP)
+sys.taskInit(function()
+    sys.wait(1000)
+    local result, data = sensor.yhm27xx(gpio_pin, sensor_addr, id_register)
+    sys.wait(200)
+    log.info("yhm27xxx", result, data)
+    if result == true and data ~= nil then
+        log.info("yhm27xxx", "yhm27xx存在--")
+
+        sys.wait(200)
+        result, data = sensor.yhm27xx(gpio_pin, sensor_addr, V_ctrl_register)
+        log.info("yhm27xxx 0x00 读取数据为:" , data, result)
+
+        -- 写入V_CTRL寄存器 设置成 4.25v
+        result = sensor.yhm27xx(gpio_pin, sensor_addr, V_ctrl_register, set_4V25)
+        if result == true then
+            log.info("yhm27xxx 写入V_CTRL成功:" , data, result)
+        else
+            log.info("yhm27xxx", "写入V_CTRL失败, ", result)
+        end
+
+    else
+        log.warn("yhm27xxx", "yhm27xx不存在")
+    end
+end)
+
+-- 用户代码已结束---------------------------------------------
+-- 结尾总是这一句
+sys.run()
+-- sys.run()之后后面不要加任何语句!!!!!