Browse Source

add: 支持低功耗定时器,支持zlib, 修正lcd结构体变化导致的崩溃, hid支持回车换行

Wendal Chen 4 years ago
parent
commit
692746afe4

+ 3 - 3
application/include/luat_conf_bsp.h

@@ -23,7 +23,7 @@
 #ifndef LUAT_CONF_BSP
 #define LUAT_CONF_BSP
 
-#define LUAT_BSP_VERSION "V0004"
+#define LUAT_BSP_VERSION "V0005"
 
 
 #define LUAT_USE_FS_VFS 1
@@ -37,7 +37,7 @@
 #define LUAT_USE_ADC  1
 #define LUAT_USE_PWM  1
 #define LUAT_USE_WDT  1
-// #define LUAT_USE_PM  1
+#define LUAT_USE_PM  1
 #define LUAT_USE_MCU  1
 // #define LUAT_USE_HWTIMER  1
 #define LUAT_USE_RTC 1
@@ -57,7 +57,7 @@
 #define LUAT_USE_SFD  1
 // #define LUAT_USE_STATEM 1
 // #define LUAT_USE_COREMARK 1
-// #define LUAT_USE_FDB 1
+#define LUAT_USE_FDB 1
 // #define LUAT_USE_ZLIB 
 #define LUAT_USE_CAMERA  1
 #define LUAT_USE_FATFS 1

+ 3 - 3
application/src/luat_base_air105.c

@@ -96,9 +96,9 @@ static const luaL_Reg loadedlibs[] = {
 #ifdef LUAT_USE_WDT
   {"wdt",     luaopen_wdt},               // watchdog模块
 #endif
-// #ifdef LUAT_USE_PM
-//   {"pm",      luaopen_pm},                // 电源管理模块
-// #endif
+#ifdef LUAT_USE_PM
+  {"pm",      luaopen_pm},                // 电源管理模块
+#endif
 #ifdef LUAT_USE_MCU
   {"mcu",     luaopen_mcu},               // MCU特有的一些操作
 #endif

+ 7 - 6
application/src/luat_camera_air105.c

@@ -86,6 +86,7 @@ static int32_t Camera_SaveJPEGDone(void *pData, void *pParam)
 		LLOGD("capture data %ubyte", luat_fs_fwrite(prvCamera.FileBuffer.Data, prvCamera.FileBuffer.Pos, 1, fd));
 		luat_fs_fclose(fd);
 	}
+
 	OS_DeInitBuffer(&prvCamera.FileBuffer);
 	prvCamera.CaptureWait = 1;
 	prvCamera.JPEGEncodeDone = 1;
@@ -120,17 +121,17 @@ static int32_t Camera_DrawLcd(void *DrawData, uint8_t Scan){
         DBG("lcd flush no memory");
         return -1;
     }
-    uint8_t CPHA = ((luat_spi_device_t*)(lcd_conf->userdata))->spi_config.CPHA;
-    uint8_t CPOL = ((luat_spi_device_t*)(lcd_conf->userdata))->spi_config.CPOL;
+    uint8_t CPHA = ((luat_spi_device_t*)(lcd_conf->lcd_spi_device))->spi_config.CPHA;
+    uint8_t CPOL = ((luat_spi_device_t*)(lcd_conf->lcd_spi_device))->spi_config.CPOL;
     draw->DCDelay = lcd_conf->dc_delay_us;
     draw->Mode = SPI_MODE_0;
     if(CPHA&&CPOL)draw->Mode = SPI_MODE_3;
     else if(CPOL)draw->Mode = SPI_MODE_2;
     else if(CPHA)draw->Mode = SPI_MODE_1;
-    draw->Speed = ((luat_spi_device_t*)(lcd_conf->userdata))->spi_config.bandrate;
-    if (((luat_spi_device_t*)(lcd_conf->userdata))->bus_id == 5) draw->SpiID = HSPI_ID0;
-    else draw->SpiID = ((luat_spi_device_t*)(lcd_conf->userdata))->bus_id;
-    draw->CSPin = ((luat_spi_device_t*)(lcd_conf->userdata))->spi_config.cs;
+    draw->Speed = ((luat_spi_device_t*)(lcd_conf->lcd_spi_device))->spi_config.bandrate;
+    if (((luat_spi_device_t*)(lcd_conf->lcd_spi_device))->bus_id == 5) draw->SpiID = HSPI_ID0;
+    else draw->SpiID = ((luat_spi_device_t*)(lcd_conf->lcd_spi_device))->bus_id;
+    draw->CSPin = ((luat_spi_device_t*)(lcd_conf->lcd_spi_device))->spi_config.cs;
     draw->DCPin = lcd_conf->pin_dc;
     draw->xoffset = lcd_conf->xoffset;
     draw->yoffset = lcd_conf->yoffset;

+ 69 - 0
application/src/luat_pm_air105.c

@@ -0,0 +1,69 @@
+#include "luat_base.h"
+#include "luat_pm.h"
+#include "user.h"
+
+#define LUAT_LOG_TAG "pm"
+#include "luat_log.h"
+
+int luat_pm_request(int mode) {
+    if (mode != LUAT_PM_SLEEP_MODE_LIGHT || mode == LUAT_PM_SLEEP_MODE_DEEP) {
+        LLOGW("only pm.LIGHT/pm.DEEP supported");
+        return -1;
+    }
+    // 如果是深度睡眠, 关闭GPIO
+    if (mode == LUAT_PM_SLEEP_MODE_DEEP) {
+	    for(int i = GPIOA_02; i < GPIO_NONE; i++)
+	    {
+		    GPIO_PullConfig(i, 0, 0);
+		    GPIO_Config(i, 0, 0);
+	    }
+    }
+    PM_SetDriverRunFlag(PM_DRV_DBG, 0);
+    return 0;
+}
+
+int luat_pm_release(int mode) {
+    return 0;
+}
+
+int luat_pm_dtimer_start(int id, size_t timeout) {
+    if (id != 0)
+        return -1;
+    RTC_SetAlarm(timeout / 1000, NULL, NULL); // 无需回调, 或者改成回调里重启, 也不太对的样
+    return 0;
+}
+
+int luat_pm_dtimer_stop(int id) {
+    if (id != 0)
+        return -1;
+    RTC_SetAlarm(0, NULL, NULL); // 设置为0就是关闭
+    return 0;
+}
+
+int luat_pm_dtimer_check(int id) {
+    return -1;
+}
+
+// void luat_pm_cb(int event, int arg, void* args);
+
+int luat_pm_last_state(int *lastState, int *rtcOrPad) {
+    return 0;
+}
+
+int luat_pm_force(int mode) {
+    return luat_pm_request(mode);
+}
+
+int luat_pm_check(void) {
+    return 0;
+}
+
+int luat_pm_dtimer_list(size_t* count, size_t* list) {
+    *count = 0;
+    return 0;
+}
+
+int luat_pm_dtimer_wakeup_id(int* id) {
+    return -1;
+}
+

+ 2 - 2
application/src/luat_spi_air105.c

@@ -213,7 +213,7 @@ int luat_lcd_draw_no_block(luat_lcd_conf_t* conf, uint16_t x1, uint16_t y1, uint
 			LLOGE("lcd flush no memory");
 			return -1;
 		}
-		luat_spi_device_t* spi_dev = (luat_spi_device_t*)conf->userdata;
+		luat_spi_device_t* spi_dev = (luat_spi_device_t*)conf->lcd_spi_device;
 		int spi_id = spi_dev->bus_id;
 	    uint8_t spi_mode = SPI_MODE_0;
 	    if(spi_dev->spi_config.CPHA&&spi_dev->spi_config.CPOL)spi_mode = SPI_MODE_3;
@@ -254,7 +254,7 @@ void luat_lcd_draw_block(luat_lcd_conf_t* conf, uint16_t x1, uint16_t y1, uint16
 {
 	LCD_DrawStruct draw;
 	if (conf->port == LUAT_LCD_SPI_DEVICE){
-		luat_spi_device_t* spi_dev = (luat_spi_device_t*)conf->userdata;
+		luat_spi_device_t* spi_dev = (luat_spi_device_t*)conf->lcd_spi_device;
 		int spi_id = spi_dev->bus_id;
 	    uint8_t spi_mode = SPI_MODE_0;
 	    if(spi_dev->spi_config.CPHA&&spi_dev->spi_config.CPOL)spi_mode = SPI_MODE_3;

+ 22 - 23
bsp/common/src/core_usb_app.c

@@ -997,13 +997,12 @@ void Core_VHIDUploadData(uint8_t USB_ID, uint8_t *Data, uint16_t Len)
 			HIDKeyBoard.PressKey[0] = HIDKey.Value;
 //			DBG("%u,%c,%d,%x,%d", Pos - 1, Data[Pos - 1], 0, HIDKey.Value, HIDKey.Shift);
 ADD_REST:
-			for(i = 1; i < 4; i++)
+			for(i = 1; i < 6; i++)
 			{
 				HIDKey = USB_HIDGetValueFromAscii(Data[Pos]);
 				Pos++;
-				if ((IsShift != HIDKey.Shift))
+				if ((IsShift != HIDKey.Shift) || (LastValue == HIDKey.Value) || (LastValue == '\r') || (LastValue == '\n'))
 				{
-					//shift发生切换,必须换新的data
 					OS_BufferWrite(&pVHID->TxCacheBuf, &HIDKeyBoard, sizeof(HIDKeyBoard));
 					memset(&HIDKeyBoard, 0, sizeof(USB_HIDKeyBoradKeyStruct));
 					//加入一个抬起的data
@@ -1023,26 +1022,26 @@ ADD_REST:
 					}
 
 				}
-				else if (LastValue == HIDKey.Value)
-				{
-					OS_BufferWrite(&pVHID->TxCacheBuf, &HIDKeyBoard, sizeof(HIDKeyBoard));
-					memset(&HIDKeyBoard, 0, sizeof(USB_HIDKeyBoradKeyStruct));
-					//加入一个抬起的data
-					OS_BufferWrite(&pVHID->TxCacheBuf, &HIDKeyBoard, sizeof(HIDKeyBoard));
-					IsShift = HIDKey.Shift;
-					LastValue = HIDKey.Value;
-					HIDKeyBoard.SPECIALHID_KEY_b.RightShift = IsShift;
-					HIDKeyBoard.PressKey[0] = HIDKey.Value;
-//					DBG("%u,%c,%d,%x,%d", Pos - 1, Data[Pos - 1], 0, HIDKey.Value, HIDKey.Shift);
-					if (Pos < Len)
-					{
-						goto ADD_REST;
-					}
-					else
-					{
-						break;
-					}
-				}
+//				else if
+//				{
+//					OS_BufferWrite(&pVHID->TxCacheBuf, &HIDKeyBoard, sizeof(HIDKeyBoard));
+//					memset(&HIDKeyBoard, 0, sizeof(USB_HIDKeyBoradKeyStruct));
+//					//加入一个抬起的data
+//					OS_BufferWrite(&pVHID->TxCacheBuf, &HIDKeyBoard, sizeof(HIDKeyBoard));
+//					IsShift = HIDKey.Shift;
+//					LastValue = HIDKey.Value;
+//					HIDKeyBoard.SPECIALHID_KEY_b.RightShift = IsShift;
+//					HIDKeyBoard.PressKey[0] = HIDKey.Value;
+////					DBG("%u,%c,%d,%x,%d", Pos - 1, Data[Pos - 1], 0, HIDKey.Value, HIDKey.Shift);
+//					if (Pos < Len)
+//					{
+//						goto ADD_REST;
+//					}
+//					else
+//					{
+//						break;
+//					}
+//				}
 				else
 				{
 					LastValue = HIDKey.Value;

+ 1 - 1
bsp/usb/src/core_usb_class_hid.c

@@ -33,7 +33,7 @@ static const USB_HIDKeyValue prvKeyList[128] =
 		{HID_KEY_SPACE, 0},
 		{HID_KEY_BACKSPACE, 0},	//08
 		{HID_KEY_SPACE, 0},
-		{HID_KEY_SPACE, 0},		//0a
+		{HID_KEY_ENTER, 0},		//0a
 		{HID_KEY_SPACE, 0},
 		{HID_KEY_SPACE, 0},
 		{HID_KEY_ENTER, 0},		//0d

+ 27 - 19
xmake.lua

@@ -8,6 +8,7 @@ local AIR105_VERSION
 local with_luatos = true
 local luatos = "../LuatOS/"
 
+-- 在线下载GCC并配置
 package("gnu_rm")
     set_kind("toolchain")
     set_homepage("https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm")
@@ -34,6 +35,19 @@ package_end()
 add_requires("gnu_rm 2021.10")
 set_toolchains("gnu-rm@gnu_rm")
 
+-- 本地配置GCC 注意注释下方 sdk_dir = target:toolchains()[1]:sdkdir().."/" 这句代码
+-- local sdk_dir = "E:\\gcc-arm-none-eabi-10.3-2021.10\\"
+-- if is_plat("linux") then
+--     sdk_dir = "/opt/gcc-arm-none-eabi-10.3-2021.10/"
+-- elseif is_plat("windows") then
+--     sdk_dir = "D:\\gcc-arm-none-eabi-10.3-2021.10\\"
+-- end
+-- toolchain("arm_toolchain")
+--     set_kind("standalone")
+--     set_sdkdir(sdk_dir)
+-- toolchain_end()
+-- set_toolchains("arm_toolchain")
+
 set_plat("cross")
 set_arch("arm")
 
@@ -52,9 +66,9 @@ set_languages("c11", "cxx11")
 
 add_asflags("-mcpu=cortex-m4","-mfpu=fpv4-sp-d16","-mfloat-abi=hard","-mthumb","-c",{force = true})
 -- add_arflags("-mcpu=cortex-m4","-mfpu=fpv4-sp-d16","-mfloat-abi=hard","-mthumb","-c","--specs=nano.specs","-ffunction-sections","-fdata-sections","-fstack-usage","-Og","-DTRACE_LEVEL=4",{force = true})
-add_cxflags("-mcpu=cortex-m4","-mfpu=fpv4-sp-d16","-mfloat-abi=hard","-mthumb","-Og","-c","--specs=nano.specs","-ffunction-sections","-fdata-sections","-fstack-usage","-DTRACE_LEVEL=4",{force = true})
+add_cxflags("-mcpu=cortex-m4","-Og","-mfpu=fpv4-sp-d16","-mfloat-abi=hard","-mthumb","-c","--specs=nano.specs","-ffunction-sections","-fdata-sections","-fstack-usage","-DTRACE_LEVEL=4",{force = true})
 
-add_ldflags("-mcpu=cortex-m4","-mfpu=fpv4-sp-d16","-mfloat-abi=hard","-mthumb","-Og","--specs=nano.specs","--specs=nosys.specs","-Wl,--gc-sections","-Wl,--check-sections","-Wl,--cref","-Wl,--no-whole-archive","-lc_nano","-Wl,--no-whole-archive",{force = true})
+add_ldflags("-mcpu=cortex-m4","-Og","-mfpu=fpv4-sp-d16","-mfloat-abi=hard","-mthumb","--specs=nano.specs","--specs=nosys.specs","-Wl,--gc-sections","-Wl,--check-sections","-Wl,--cref","-Wl,--no-whole-archive","-lc_nano","-Wl,--no-whole-archive",{force = true})
 
 set_dependir("$(buildir)/.deps")
 set_objectdir("$(buildir)/.objs")
@@ -75,7 +89,10 @@ target("bootloader.elf")
 	add_includedirs("bsp/common/include",{public = true})
     add_files("bsp/usb/**.c",{public = true})
     add_includedirs("bsp/usb/include",{public = true})
+
+    add_files("bsp/audio/**.c",{public = true})
     add_includedirs("bsp/audio/include",{public = true})
+
     add_files("Third_Party/heap/*.c",{public = true})
 	add_includedirs("Third_Party/heap",{public = true})
 
@@ -116,9 +133,7 @@ target("lvgl")
         if LVGL_CONF == nil then target:set("default", true) else target:set("default", false) end
     end)
 
-    if with_luatos then
         add_files(luatos.."components/lvgl/**.c")
-    end
 
     add_includedirs("application/include")
     add_includedirs("bsp/air105/include",{public = true})
@@ -183,7 +198,7 @@ target("app.elf")
         if LVGL_CONF == nil then target:add("deps", "lvgl") end
     end)
 
-    -- add_deps("tflm")
+    add_deps("tflm")
 
     -- add deps
     add_files("Third_Party/cm_backtrace/*.c",{public = true})
@@ -196,18 +211,12 @@ target("app.elf")
     add_files("Third_Party/iconv/src/*.c",{public = true})
     add_includedirs("Third_Party/iconv/include",{public = true})
 
-    add_files("Third_Party/lzma/src/*.c",{public = true})
-    add_includedirs("Third_Party/lzma/include",{public = true})
-
-    add_files("Third_Party/vsprintf/*.c",{public = true})
-    add_includedirs("Third_Party/vsprintf",{public = true})
-
-    add_files("Third_Party/heap/*.c",{public = true})
-    add_includedirs("Third_Party/heap",{public = true})
-
     add_files("Third_Party/jpeg_encode/*.c",{public = true})
     add_includedirs("Third_Party/jpeg_encode",{public = true})
     
+    -- add_files("Third_Party/vsprintf/*.c",{public = true})
+    -- add_includedirs("Third_Party/vsprintf",{public = true})
+    
     --add_files("bsp/common/*.c",{public = true})
 	add_files("bsp/common/src/*.c",{public = true})
     add_includedirs("bsp/cmsis/include",{public = true})
@@ -216,14 +225,14 @@ target("app.elf")
     add_files("bsp/usb/**.c",{public = true})
     add_includedirs("bsp/usb/include",{public = true})
     add_includedirs("bsp/device/include",{public = true})
-    add_includedirs("bsp/audio/include",{public = true})
-    add_files("bsp/audio/**.c",{public = true})
-    add_files("bsp/device/src/*.c",{public = true})
+    -- add_files("bsp/device/src/*.c",{public = true})
     -- add files
     add_files("bsp/air105/platform/startup_full.s")
     add_files("bsp/air105/platform/app_main.c")
     add_files("bsp/air105/hal/*.c")
     -- add_files("bsp/air105/chip/src/*.c")
+    add_files("bsp/audio/**.c",{public = true})
+    add_includedirs("bsp/audio/include",{public = true})
 
     add_files("os/FreeRTOS_v10/GCC/ARM_CM4F/*.c",{public = true})
     add_files("os/FreeRTOS_v10/src/*.c",{public = true})
@@ -240,12 +249,11 @@ target("app.elf")
 
     if with_luatos then
         add_files("application/src/*.c")
+
         add_files(luatos.."lua/src/*.c")
         add_files(luatos.."luat/modules/*.c")
         add_files(luatos.."luat/vfs/*.c")
         remove_files(luatos.."luat/vfs/luat_fs_posix.c")
-        remove_files(luatos.."lua/src/bget.c")
-        remove_files(luatos.."lua/src/printf.c")
 
         add_files(luatos.."components/lcd/*.c")
         add_files(luatos.."components/sfd/*.c")