FirmwareLoader_ARTERY_AT32/Inc/FirmwareLoader.h

63 lines
1.6 KiB
C

//
// Created by zemon on 28.05.2022.
//
#ifndef TERMINAL_MOTO_0_0_1_UPDATE_FIRMWARE_H
#define TERMINAL_MOTO_0_0_1_UPDATE_FIRMWARE_H
#include "stdint.h"
#include "stdbool.h"
#include "assert.h"
#define FIRMWARE_META_LENGTH (0x100)
typedef struct {
uint32_t *size;
uint32_t *crc;
uint8_t *nameLength;
uint8_t *name;
} tFirmwareMetaMap;
typedef struct {
uint32_t address;
uint8_t metadataMem[FIRMWARE_META_LENGTH];
tFirmwareMetaMap metadata;
} tFirmwareBlock;
typedef struct {
tFirmwareBlock main;
tFirmwareBlock update;
uint32_t fwSize;
uint32_t metadataOffset;
} tFirmwareLoader;
void FirmwareLoader_Init(tFirmwareLoader *env, uint32_t fwSize, uint32_t mainFwAddr, uint32_t updateFwAddr);
bool FirmwareLoader_CheckUpdate(tFirmwareLoader *env);
bool FirmwareLoader_IsLoadUpdate(tFirmwareLoader *env);
bool FirmwareLoader_CheckAndUpdate(tFirmwareLoader *env);
bool FirmwareLoader_PrepareNewUpdate(tFirmwareLoader *env, uint32_t size, uint32_t crc, uint8_t *name, uint8_t nameLen);
bool FirmwareLoader_WriteUpdatePortion(tFirmwareLoader *env, uint32_t offset, uint8_t *data, uint16_t dataSize);
void FirmwareLoader_RunFirmware(tFirmwareLoader *env);
bool FirmwareLoader_CheckBlock(tFirmwareLoader *env, tFirmwareBlock *block);
bool FirmwareLoader_ClearUpdateFlash(tFirmwareLoader *env);
void FirmwareLoader_LoadMetadata(tFirmwareLoader *env, tFirmwareBlock *block);
bool FirmwareLoader_IsUpdateAndMainAreDifferent(tFirmwareLoader *env);
void FirmwareLoader_CopyUpdateToMain(tFirmwareLoader *env);
#endif //TERMINAL_MOTO_0_0_1_UPDATE_FIRMWARE_H