MAX_CARLINK_A270S/MXC_A27-PCB4.5-270T/ArkmicroFiles/libboard-amt630hv100/source/updatefile.c

86 lines
1.7 KiB
C
Raw Normal View History

2025-01-21 16:49:37 +08:00
#include <stdio.h>
#include <string.h>
#include "FreeRTOS.h"
#include "board.h"
#include "sfud.h"
#include "updatefile.h"
#include "mmcsd_core.h"
#include "sysinfo.h"
static UpFileHeader *upfile = NULL;
#if DEVICE_TYPE_SELECT != EMMC_FLASH
int GetUpFileInfo(void)
{
UpFileHeader header;
uint32_t headersize;
sfud_flash *sflash;
SysInfo *sysinfo = GetSysInfo();
sflash = sfud_get_device(0);
sfud_read(sflash, sysinfo->image_offset, sizeof(header), (void*)&header);
if (header.magic != MKTAG('U', 'P', 'D', 'F')) {
printf("Error! Wrong update file.\n");
return -1;
}
headersize = sizeof(UpFileHeader) + sizeof(UpFileInfo) * header.filenum;
upfile = pvPortMalloc(headersize);
if (!upfile) return -1;
sfud_read(sflash, sysinfo->image_offset, headersize, (void*)upfile);
return 0;
}
#else
int GetUpFileInfo(void)
{
UpFileHeader header;
uint32_t headersize;
SysInfo *sysinfo = GetSysInfo();
emmc_read(sysinfo->image_offset, sizeof(header), (void*)&header);
if (header.magic != MKTAG('U', 'P', 'D', 'F')) {
printf("Error! Wrong update file.\n");
return -1;
}
headersize = sizeof(UpFileHeader) + sizeof(UpFileInfo) * header.filenum;
upfile = pvPortMalloc(headersize);
if (!upfile) return -1;
emmc_read(sysinfo->image_offset, headersize, (void*)upfile);
return 0;
}
#endif
uint32_t GetUpFileOffset(uint32_t magic)
{
int i;
SysInfo *sysinfo = GetSysInfo();
if (!upfile) return 0;
for (i = 0; i < upfile->filenum; i++) {
if (upfile->files[i].magic == magic) {
return upfile->files[i].offset + sysinfo->image_offset;
}
}
return 0;
}
uint32_t GetUpFileSize(uint32_t magic)
{
int i;
if (!upfile) return 0;
for (i = 0; i < upfile->filenum; i++) {
if (upfile->files[i].magic == magic) {
return upfile->files[i].size;
}
}
return 0;
}