33 lines
1.4 KiB
C
33 lines
1.4 KiB
C
/*
|
||
* Транспортно-независимый односекционный обновитель прошивки. Признак валидности снимается до
|
||
* стирания, а commit вызывается после проверки записанного образа чтением; порядок операций
|
||
* нужен для восстановления после прерывания питания.
|
||
*/
|
||
|
||
#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
|