wangshihao 6 месяцев назад
Родитель
Сommit
82d7bd4e2f
3 измененных файлов с 38 добавлено и 117 удалено
  1. 11 102
      components/yhm27xx/binding/luat_lib_yhm27xx.c
  2. 16 1
      luat/include/luat_pm.h
  3. 11 14
      luat/modules/luat_lib_pm.c

+ 11 - 102
components/yhm27xx/binding/luat_lib_yhm27xx.c

@@ -10,118 +10,27 @@
 -- 请查阅demo/yhm27xx
 */
 
-#include "luat_base.h"
-#include "luat_timer.h"
-#include "luat_mem.h"
-#include "luat_gpio.h"
-#include "luat_zbuff.h"
-#include "luat_msgbus.h"
-#include "luat_gpio.h"
-#ifdef LUAT_USE_DRV_GPIO
-#include "luat/drv_gpio.h"
-#endif
+#include "luat_pm.h"
 
 #define LUAT_LOG_TAG "yhm27xx"
 #include "luat_log.h"
 
-
-/*
-单总线命令读写YHM27XX
-@api    yhm27xx.cmd(pin, chip_id, reg, data)
-@int    gpio端口号
-@int    芯片ID
-@int    寄存器地址
-@int    要写入的数据,如果没填,则表示从寄存器读取数据
-@return boolean 成功返回true,失败返回false
-@return int 读取成功返回寄存器值,写入成功无返回
-@usage
-while 1 do
-    sys.wait(1000)
-    local result, data = yhm27xx.cmd(15, 0x04, 0x05)
-    log.info("yhm27xx", result, data)
-end
-*/
 static int l_yhm27xx_cmd(lua_State *L)
 {
-  uint8_t pin = luaL_checkinteger(L, 1);
-  uint8_t chip_id = luaL_checkinteger(L, 2);
-  uint8_t reg = luaL_checkinteger(L, 3);
-  uint8_t data = 0;
-  uint8_t is_read = 1;
-  int ret = 0;
-  if (!lua_isnone(L, 4))
-  {
-    is_read = 0;
-    data = luaL_checkinteger(L, 4);
-  }
-  #ifdef LUAT_USE_DRV_GPIO
-  ret = luat_drv_gpio_driver_yhm27xx(pin, chip_id, reg, is_read, &data);
-  #else
-  ret = luat_gpio_driver_yhm27xx(pin, chip_id, reg, is_read, &data);
-  #endif
-  if (ret != 0)
-  {
-    lua_pushboolean(L, 0);
-    return 1;
-  }
-  lua_pushboolean(L, 1);
-  if (is_read)
-  {
-    lua_pushinteger(L, data);
-    return 2;
-  }
-  return 1;
-}
-
-static uint8_t reg_infos[9] = {0};
-
-static int l_yhm_27xx_cb(lua_State *L, void *ptr) {
-  lua_getglobal(L, "sys_pub");
-  if (lua_isfunction(L, -1)) {
-    lua_pushstring(L, "YHM27XX_REG");
-    lua_pushlstring(L, (const char*)reg_infos, 9);
-    lua_call(L, 2, 0);
-  }
-  return 0;
-}
-
-static void luat_gpio_driver_yhm27xx_reqinfo(uint8_t pin, uint8_t chip_id) {
-  
-  for (uint8_t i = 0; i < 9; i++)
-  {
-    luat_gpio_driver_yhm27xx(pin, chip_id, i, 1, &(reg_infos[i]));
-  }
-  rtos_msg_t msg = {0};
-  msg.handler = l_yhm_27xx_cb;
-  luat_msgbus_put(&msg, 0);
+    // 设置命令类型为读写寄存器
+    lua_pushinteger(L, LUAT_PM_YHM27XX_CMD_READWRITE);
+    lua_insert(L, 4); // 将命令类型插入到第四个参数位置
+    
+    return l_pm_chgcmd(L);
 }
 
-/*
-获取最新的寄存器信息(异步)
-@api    yhm27xx.reqinfo(pin, chip_id)
-@int    gpio端口号
-@int    芯片ID
-@return nil 无返回值
-@usage
-
-sys.subscribe("YHM27XX_REG", function(data)
-  -- 注意, 会一次性读出0-9,总共8个寄存器值
-  log.info("yhm27xx", data and data:toHex())
-end)
-yhm27xx.reqinfo(24, 0x04)
-*/
 static int l_yhm27xx_reqinfo(lua_State *L)
 {
-  uint8_t pin = luaL_checkinteger(L, 1);
-  uint8_t chip_id = luaL_checkinteger(L, 2);
-  #ifdef LUAT_USE_DRV_GPIO
-  if (pin >= 128) {
-    luat_drv_gpio_driver_yhm27xx_reqinfo(pin, chip_id);
-    return 0;
-  }
-  #endif
-  luat_gpio_driver_yhm27xx_reqinfo(pin, chip_id);
-  return 0;
+    // 设置命令类型为请求所有寄存器信息
+    lua_pushinteger(L, LUAT_PM_YHM27XX_CMD_REQINFO);
+    lua_insert(L, 3); // 将命令类型插入到第三个参数位置
+    
+    return l_pm_chgcmd(L);
 }
 
 #include "rotable2.h"

+ 16 - 1
luat/include/luat_pm.h

@@ -16,7 +16,9 @@
 #define LUAT_PM_POWER_MODE_HIGH_PERFORMANCE (1)	///< 尽可能保持性能,兼顾低功耗,使用LUAT_PM_SLEEP_MODE_LIGHT
 #define LUAT_PM_POWER_MODE_BALANCED (2) ///< 性能和功耗平衡,使用LUAT_PM_SLEEP_MODE_LIGHT
 #define LUAT_PM_POWER_MODE_POWER_SAVER (3) ///< 超低功耗,使用LUAT_PM_SLEEP_MODE_STANDBY,进入PSM模式
-
+// 定义命令类型常量
+#define LUAT_PM_YHM27XX_CMD_READWRITE 0  // 读写单个寄存器
+#define LUAT_PM_YHM27XX_CMD_REQINFO   1  // 请求所有寄存器信息
 
 /**
  * @brief 开机原因
@@ -201,5 +203,18 @@ int luat_pm_get_last_req_mode(void);
  * @return uint32_t 0xffffffff失败,其他是剩余时间
  */
 uint32_t luat_pm_dtimer_remain(int id);
+/**
+ * @brief yhm27xx充电管理芯片命令接口
+ * @param pin yhm27xx_CMD引脚(可选,若传入nil则根据模组型号自动选择)
+ * @param chip_id 芯片ID
+ * @param cmd_tyoe 命令类型(可选): 0-读写寄存器(默认), 1-请求所有寄存器信息
+ * @param reg_addr 读写寄存器地址,cmd_type=0时有效
+ * @param reg_data 要写入的数据,cmd_type=0时有效,若不传入则为读取操作
+ * @return boolean 成功返回true,失败返回false
+ * @return int 当cmd_type=0且为读取操作时返回寄存器值
+ */
+#ifdef LUAT_USE_YHM27XX
+int l_pm_chgcmd(lua_State *L);
+#endif
 /** @}*/
 #endif

+ 11 - 14
luat/modules/luat_lib_pm.c

@@ -73,9 +73,6 @@ extern uint32_t g_airlink_pause;
 #ifdef LUAT_USE_DRV_GPIO
 #include "luat/drv_gpio.h"
 #endif
-// 定义命令类型常量
-#define YHM27XX_CMD_READWRITE 0  // 读写单个寄存器
-#define YHM27XX_CMD_REQINFO   1  // 请求所有寄存器信息
 
 static uint8_t yhm27xx_reg_infos[9] = {0};
 #endif
@@ -506,7 +503,7 @@ static uint8_t get_default_yhm27xx_pin(void)
 {
     char model[32] = {0};
     luat_hmeta_model_name(model);
-    if (memcmp("Air8000\0", model, 8) == 0 || memcmp("Air8000XB\0", model, 10) == 0) {
+    if (memcmp("Air8000\0", model, 8) == 0 || memcmp("Air8000XB\0", model, 10) == 0 || memcmp("Air8000U\0", model, 9) == 0 || memcmp("Air8000N\0", model, 9) == 0) {
         return 152;
     }
     if (memcmp("Air8000G\0", model, 9) == 0) {
@@ -518,11 +515,11 @@ static uint8_t get_default_yhm27xx_pin(void)
 /**
 充电芯片命令控制
 @api    pm.chgcmd(pin, chip_id, cmd_type, reg, data)
-@int    gpio端口号(可选,若传入nil则根据模组型号自动选择)
+@int    yhm27xx_CMD引脚(可选,若传入nil则根据模组型号自动选择)
 @int    芯片ID
 @int    命令类型(可选): 0-读写寄存器(默认), 1-请求所有寄存器信息
-@int    寄存器地址(当cmd_type=0时需要)
-@int    要写入的数据(可选,当cmd_type=0且需要写入时提供, 如果没有提供, 则为读取操作)
+@int    读写寄存器地址,cmd_type=0 时有效
+@int    要写入的数据,cmd_type=0 时有效,若不传入则为读取操作
 @return boolean 成功返回true,失败返回false
 @return int 当cmd_type=0且为读取操作时返回寄存器值
 @usage
@@ -533,10 +530,10 @@ local ret = pm.chgcmd(pin, chip_id, 0, 0x01, 0x55)
 -- 请求所有寄存器信息
 local ret = pm.chgcmd(pin, chip_id, 1)
 */
-static int l_pm_chgcmd(lua_State *L)
+int l_pm_chgcmd(lua_State *L)
 {
     uint8_t pin = 0;
-    // 第一个参数可选,若传入则根据模组型号自动选择
+    // 第一个参数可选,若传入nil则根据模组型号自动选择
     if (!lua_isnoneornil(L, 1))
     {
         pin = luaL_checkinteger(L, 1);
@@ -556,7 +553,7 @@ static int l_pm_chgcmd(lua_State *L)
         cmd_type = luaL_checkinteger(L, 3);
     }
 
-    if (cmd_type == YHM27XX_CMD_REQINFO)
+    if (cmd_type == LUAT_PM_YHM27XX_CMD_REQINFO)
     {
         // 请求所有寄存器信息
         #ifdef LUAT_USE_DRV_GPIO
@@ -626,10 +623,10 @@ static const rotable_Reg_t reg_pm[] =
     // yhm27xxx
     #ifdef LUAT_USE_YHM27XX
     { "chgcmd",         ROREG_FUNC(l_pm_chgcmd)},
-    //@const CHG_CMD_READWRITE number 读写寄存器
-    { "CHG_CMD_RW",     ROREG_INT(YHM27XX_CMD_READWRITE)},
-    //@const CHG_CMD_REQINFO number 请求所有寄存器信息
-    { "CHG_CMD_REQINFO",ROREG_INT(YHM27XX_CMD_REQINFO)},
+    //@const CHG_CMD_RW number yhm27xx读写寄存器
+    { "CHG_CMD_RW",     ROREG_INT(LUAT_PM_YHM27XX_CMD_READWRITE)},
+    //@const CHG_CMD_REQINFO number yhm27xx请求所有寄存器信息
+    { "CHG_CMD_REQINFO",ROREG_INT(LUAT_PM_YHM27XX_CMD_REQINFO)},
     #endif
 
     //@const NONE number 不休眠模式