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

add:升级包放文件系统,不过只能升级脚本

alienwalker 3 лет назад
Родитель
Сommit
f89ee63213
3 измененных файлов с 25 добавлено и 6 удалено
  1. 1 0
      application/src/luat_mcu_air105.c
  2. 1 2
      bsp/air105/platform/bl_main.c
  3. 23 4
      bsp/common/src/core_service.c

+ 1 - 0
application/src/luat_mcu_air105.c

@@ -96,6 +96,7 @@ int luat_mcu_fota_init(uint32_t start_address, uint32_t len, luat_spi_device_t*
 	{
 		uPV.u8[1] = CORE_OTA_IN_FILE;
 		memcpy(Head->FilePath, path, pathlen);
+		Head->Param1 = uPV.u32;
 	}
 	else
 	{

+ 1 - 2
bsp/air105/platform/bl_main.c

@@ -498,8 +498,7 @@ void Remote_Upgrade(void)
 		break;
 	default:
 		DBG_INFO("core ota storage mode %u not support", uPV.u8[1]);
-		return;
-		break;
+		goto OTA_END;
 	}
 
 	DoneLen = 0;

+ 23 - 4
bsp/common/src/core_service.c

@@ -44,6 +44,7 @@ enum
 	SERVICE_SPIFLASH_ERASE,
 	SERVICE_SPIFLASH_WRITE,
 	SERVICE_SPIFLASH_CLOSE,
+	SERVICE_FILE_WRITE,
 	SERVICE_DECODE_QR,
 	SERVICE_SCAN_KEYBOARD,
 	SERVICE_ENCODE_JPEG_START,
@@ -232,6 +233,7 @@ static void prvStorge_Task(void* params)
 	uint32_t *Param;
 	SDHC_SPICtrlStruct *pSDHC;
 	CommonFun_t CB;
+	HANDLE fd;
 	while(1)
 	{
 		Task_GetEventByMS(prvService.StorgeHandle, CORE_EVENT_ID_ANY, &Event, NULL, 0);
@@ -275,6 +277,19 @@ static void prvStorge_Task(void* params)
 			free(prvService.pSpiFlash);
 			prvService.pSpiFlash = NULL;
 			break;
+		case SERVICE_FILE_WRITE:
+#ifdef __LUATOS__
+			fd = luat_fs_fopen((char *)Event.Param1, "w");
+			//DBG("%x,%s",fd, (char *)Event.Param1);
+			if (fd)
+			{
+				luat_fs_fwrite(Event.Param2, Event.Param3, 1, fd);
+				luat_fs_fclose(fd);
+			}
+#endif
+			prvService.FotaDoneLen += Event.Param3;
+			free(Event.Param2);
+			break;
 		}
 	}
 }
@@ -667,6 +682,10 @@ int Core_OTAInit(CoreUpgrade_HeadStruct *Head, uint32_t size)
 		}
 		Task_SendEvent(prvService.StorgeHandle, SERVICE_SPIFLASH_ERASE, prvService.pFotaHead->DataStartAddress, size, Core_OTAReady);
 	}
+	else
+	{
+		prvService.FotaReady = 1;
+	}
 	return 0;
 }
 
@@ -737,8 +756,8 @@ int Core_OTAWrite(uint8_t *Data, uint32_t Len)
 			OS_InitBuffer(&prvService.FotaDataBuf, __FLASH_BLOCK_SIZE__);
 			break;
 		case CORE_OTA_IN_FILE:
-			prvService.FotaDataBuf.Pos = 0;
-			prvService.FotaDoneLen += __FLASH_BLOCK_SIZE__;
+			Task_SendEvent(prvService.StorgeHandle, SERVICE_FILE_WRITE, prvService.pFotaHead->FilePath, prvService.FotaDataBuf.Data, prvService.FotaDataBuf.Pos);
+			OS_InitBuffer(&prvService.FotaDataBuf, __FLASH_BLOCK_SIZE__);
 			break;
 		}
 		prvService.FotaPos += __FLASH_BLOCK_SIZE__;
@@ -757,8 +776,8 @@ int Core_OTAWrite(uint8_t *Data, uint32_t Len)
 			memset(&prvService.FotaDataBuf, 0, sizeof(prvService.FotaDataBuf));
 			break;
 		case CORE_OTA_IN_FILE:
-			prvService.FotaDoneLen += prvService.FotaDataBuf.Pos;
-			OS_DeInitBuffer(&prvService.FotaDataBuf);
+			Task_SendEvent(prvService.StorgeHandle, SERVICE_FILE_WRITE, prvService.pFotaHead->FilePath, prvService.FotaDataBuf.Data, prvService.FotaDataBuf.Pos);
+			memset(&prvService.FotaDataBuf, 0, sizeof(prvService.FotaDataBuf));
 			break;
 		}
 		return 0;