27 lines
1016 B
C
27 lines
1016 B
C
#ifndef SET_BOOT_H
|
|
#define SET_BOOT_H
|
|
#include "set_firmware.h"
|
|
|
|
/* Transport-independent, single-slot updater. invalidate MUST become durable
|
|
* before erase; commit is called only after read-back verification. */
|
|
typedef struct {
|
|
bool (*invalidate)(void *user);
|
|
bool (*erase)(void *user, uint32_t size);
|
|
bool (*write)(void *user, uint32_t offset, const uint8_t *data, uint16_t size);
|
|
bool (*verify)(void *user, uint32_t size, uint32_t crc);
|
|
bool (*commit)(void *user, uint32_t size, uint32_t crc);
|
|
void (*activate)(void *user);
|
|
} setp_boot_ops;
|
|
typedef struct {
|
|
setp_boot_ops ops;
|
|
void *user;
|
|
uint32_t base, capacity, crc;
|
|
uint16_t block_size;
|
|
setp_fw_status_t status;
|
|
} setp_boot;
|
|
void setp_boot_init(setp_boot *b, const setp_boot_ops *ops, void *user,
|
|
uint32_t base, uint32_t capacity);
|
|
/* Returns SET status; FW_STATUS body is encoded by the caller. */
|
|
uint16_t setp_boot_command(setp_boot *b, uint16_t type, const uint8_t *p, uint16_t n);
|
|
#endif
|