61 lines
1.5 KiB
C
61 lines
1.5 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);
|
|
|
|
#endif //TERMINAL_MOTO_0_0_1_UPDATE_FIRMWARE_H
|