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

add: airlink添加config函数

Wendal Chen 11 месяцев назад
Родитель
Сommit
7af4f6112d

+ 53 - 6
components/airlink/binding/luat_lib_airlink.c

@@ -231,11 +231,56 @@ static int l_airlink_sfota_write(lua_State *L) {
     return 1;
 }
 
+/*
+配置AirLink的参数
+@api airlink.config(key, value)
+@int key 配置项, 参考airlink的常数项
+@int value 配置值
+@return bool 成功返回true, 失败返回nil
+@usage
+--配置AirLink的SPI ID为1, CS引脚为10, RDY引脚为11, IRQ引脚为12
+airlink.config(airlink.CONF_SPI_ID, 1)
+airlink.config(airlink.CONF_SPI_CS, 10)
+airlink.config(airlink.CONF_SPI_RDY, 11)
+airlink.config(airlink.CONF_SPI_IRQ, 12)
+*/
+static int l_airlink_config(lua_State *L) {
+    int key = luaL_checkinteger(L, 1);
+    int value = luaL_checkinteger(L, 2);
+    switch (key)
+    {
+    case LUAT_AIRLINK_CONF_SPI_ID:
+        g_airlink_spi_conf.spi_id = value;
+        break;
+    case LUAT_AIRLINK_CONF_SPI_CS:
+        g_airlink_spi_conf.cs_pin = value;
+        break;
+    case LUAT_AIRLINK_CONF_SPI_RDY:
+        g_airlink_spi_conf.rdy_pin = value;
+        break;
+    case LUAT_AIRLINK_CONF_SPI_IRQ:
+        g_airlink_spi_conf.irq_pin = value;
+        break;
+    
+    default:
+        return 0;
+    }
+    lua_pushboolean(L, 1);
+    return 1;
+}
+
+static int l_airlink_sfota(lua_State *L) {
+    // 直接发指令是不行了, 需要干预airlink task的执行流程
+    // bk72xx的flash擦除很慢, 导致spi master需要等很久才能发下一个包
+    return 0;
+}
+
 #include "rotable2.h"
 static const rotable_Reg_t reg_airlink[] =
 {
     { "init" ,         ROREG_FUNC(l_airlink_init )},
-    { "start" ,        ROREG_FUNC(l_airlink_start )},
+    { "config",        ROREG_FUNC(l_airlink_config)},
+    { "start" ,        ROREG_FUNC(l_airlink_start)},
     { "stop" ,         ROREG_FUNC(l_airlink_stop )},
     { "ready",         ROREG_FUNC(l_airlink_ready)},
     { "test",          ROREG_FUNC(l_airlink_test )},
@@ -245,14 +290,16 @@ static const rotable_Reg_t reg_airlink[] =
     { "slave_reboot",  ROREG_FUNC(l_airlink_slave_reboot )},
 
     // 测试用的fota指令
-    { "sfota_init",     ROREG_FUNC(l_airlink_sfota_init )},
-    { "sfota_write",    ROREG_FUNC(l_airlink_sfota_write )},
-    { "sfota_end",      ROREG_FUNC(l_airlink_sfota_end )},
-    { "sfota_done",     ROREG_FUNC(l_airlink_sfota_done )},
+    { "sfota",         ROREG_FUNC(l_airlink_sfota )},
 
     { "MODE_SPI_SLAVE",    ROREG_INT(0) },
     { "MODE_SPI_MASTER",   ROREG_INT(1) },
-	{ NULL,            ROREG_INT(0) }
+
+    { "CONF_SPI_ID",       ROREG_INT(LUAT_AIRLINK_CONF_SPI_ID)},
+    { "CONF_SPI_CS",       ROREG_INT(LUAT_AIRLINK_CONF_SPI_CS)},
+    { "CONF_SPI_RDY",      ROREG_INT(LUAT_AIRLINK_CONF_SPI_RDY)},
+    { "CONF_SPI_IRQ",      ROREG_INT(LUAT_AIRLINK_CONF_SPI_IRQ)},
+	{ NULL,                ROREG_INT(0) }
 };
 
 LUAMOD_API int luaopen_airlink( lua_State *L ) {

+ 10 - 0
components/airlink/include/luat_airlink.h

@@ -165,6 +165,16 @@ luat_airlink_cmd_t* luat_airlink_cmd_new(uint16_t cmd, uint16_t data_len);
 
 void luat_airlink_cmd_free(luat_airlink_cmd_t* cmd);
 
+enum {
+    LUAT_AIRLINK_CONF_SPI_ID = 0x100,
+    LUAT_AIRLINK_CONF_SPI_MODE,
+    LUAT_AIRLINK_CONF_SPI_CS,
+    LUAT_AIRLINK_CONF_SPI_RDY,
+    LUAT_AIRLINK_CONF_SPI_IRQ,
+
+    LUAT_AIRLINK_CONF_UART_ID
+};
+
 // GPIO 操作, 临时放这里
 #include "luat_gpio.h"
 int luat_airlink_drv_gpio_setup(luat_gpio_t* gpio);