#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