104 lines
2.9 KiB
C
104 lines
2.9 KiB
C
/*
|
|
* Copyright (c) 2017 Nordic Semiconductor ASA
|
|
* Copyright (c) 2017 Linaro Limited
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#ifndef ZEPHYR_INCLUDE_DFU_FLASH_IMG_H_
|
|
#define ZEPHYR_INCLUDE_DFU_FLASH_IMG_H_
|
|
|
|
#include <storage/stream_flash.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
struct flash_img_context {
|
|
uint8_t buf[CONFIG_IMG_BLOCK_BUF_SIZE];
|
|
const struct flash_area *flash_area;
|
|
struct stream_flash_ctx stream;
|
|
};
|
|
|
|
/**
|
|
* @brief Structure for verify flash region integrity
|
|
*
|
|
* Match vector length is fixed and depends on size from hash algorithm used
|
|
* to verify flash integrity. The current available algorithm is SHA-256.
|
|
*/
|
|
struct flash_img_check {
|
|
const uint8_t *match; /** Match vector data */
|
|
size_t clen; /** Content to be compared */
|
|
};
|
|
|
|
/**
|
|
* @brief Initialize context needed for writing the image to the flash.
|
|
*
|
|
* @param ctx context to be initialized
|
|
* @param area_id flash area id of partition where the image should be written
|
|
*
|
|
* @return 0 on success, negative errno code on fail
|
|
*/
|
|
int flash_img_init_id(struct flash_img_context *ctx, uint8_t area_id);
|
|
|
|
/**
|
|
* @brief Initialize context needed for writing the image to the flash.
|
|
*
|
|
* @param ctx context to be initialized
|
|
*
|
|
* @return 0 on success, negative errno code on fail
|
|
*/
|
|
int flash_img_init(struct flash_img_context *ctx);
|
|
|
|
/**
|
|
* @brief Read number of bytes of the image written to the flash.
|
|
*
|
|
* @param ctx context
|
|
*
|
|
* @return Number of bytes written to the image flash.
|
|
*/
|
|
size_t flash_img_bytes_written(struct flash_img_context *ctx);
|
|
|
|
/**
|
|
* @brief Process input buffers to be written to the image slot 1. flash
|
|
* memory in single blocks. Will store remainder between calls.
|
|
*
|
|
* A final call to this function with flush set to true
|
|
* will write out the remaining block buffer to flash. Since flash is written to
|
|
* in blocks, the contents of flash from the last byte written up to the next
|
|
* multiple of CONFIG_IMG_BLOCK_BUF_SIZE is padded with 0xff.
|
|
*
|
|
* @param ctx context
|
|
* @param data data to write
|
|
* @param len Number of bytes to write
|
|
* @param flush when true this forces any buffered
|
|
* data to be written to flash
|
|
*
|
|
* @return 0 on success, negative errno code on fail
|
|
*/
|
|
int flash_img_buffered_write(struct flash_img_context *ctx, const uint8_t *data,
|
|
size_t len, bool flush);
|
|
|
|
/**
|
|
* @brief Verify flash memory length bytes integrity from a flash area. The
|
|
* start point is indicated by an offset value.
|
|
*
|
|
* The function is enabled via CONFIG_IMG_ENABLE_IMAGE_CHECK Kconfig options.
|
|
*
|
|
* @param[in] ctx context.
|
|
* @param[in] fic flash img check data.
|
|
* @param[in] area_id flash area id of partition where the image should be
|
|
* verified.
|
|
*
|
|
* @return 0 on success, negative errno code on fail
|
|
*/
|
|
int flash_img_check(struct flash_img_context *ctx,
|
|
const struct flash_img_check *fic,
|
|
uint8_t area_id);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* ZEPHYR_INCLUDE_DFU_FLASH_IMG_H_ */
|