Initial commit
Initial commit.
This commit is contained in:
@@ -0,0 +1,177 @@
|
||||
/*
|
||||
* Copyright (c) 2018 Nordic Semiconductor ASA
|
||||
* Copyright (c) 2015 Runtime Inc
|
||||
* Copyright (c) 2020 Embedded Planet
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the Licens
|
||||
*/
|
||||
|
||||
#ifndef H_UTIL_FLASH_MAP_
|
||||
#define H_UTIL_FLASH_MAP_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
*
|
||||
* Provides abstraction of flash regions for type of use.
|
||||
* I.e. dude where's my image?
|
||||
*
|
||||
* System will contain a map which contains flash areas. Every
|
||||
* region will contain flash identifier, offset within flash and length.
|
||||
*
|
||||
* 1. This system map could be in a file within filesystem (Initializer
|
||||
* must know/figure out where the filesystem is at).
|
||||
* 2. Map could be at fixed location for project (compiled to code)
|
||||
* 3. Map could be at specific place in flash (put in place at mfg time).
|
||||
*
|
||||
* Note that the map you use must be valid for BSP it's for,
|
||||
* match the linker scripts when platform executes from flash,
|
||||
* and match the target offset specified in download script.
|
||||
*/
|
||||
#include <inttypes.h>
|
||||
|
||||
/**
|
||||
* @brief Structure describing an area on a flash device.
|
||||
*
|
||||
* Multiple flash devices may be available in the system, each of
|
||||
* which may have its own areas. For this reason, flash areas track
|
||||
* which flash device they are part of.
|
||||
*/
|
||||
struct flash_area {
|
||||
/**
|
||||
* This flash area's ID; unique in the system.
|
||||
*/
|
||||
uint8_t fa_id;
|
||||
|
||||
/**
|
||||
* ID of the flash device this area is a part of.
|
||||
*/
|
||||
uint8_t fa_device_id;
|
||||
|
||||
uint16_t pad16;
|
||||
|
||||
/**
|
||||
* This area's offset, relative to the beginning of its flash
|
||||
* device's storage.
|
||||
*/
|
||||
uint32_t fa_off;
|
||||
|
||||
/**
|
||||
* This area's size, in bytes.
|
||||
*/
|
||||
uint32_t fa_size;
|
||||
};
|
||||
|
||||
static inline uint8_t flash_area_get_id(const struct flash_area *fa)
|
||||
{
|
||||
return fa->fa_id;
|
||||
}
|
||||
|
||||
static inline uint8_t flash_area_get_device_id(const struct flash_area *fa)
|
||||
{
|
||||
return fa->fa_device_id;
|
||||
}
|
||||
|
||||
static inline uint32_t flash_area_get_off(const struct flash_area *fa)
|
||||
{
|
||||
return fa->fa_off;
|
||||
}
|
||||
|
||||
static inline uint32_t flash_area_get_size(const struct flash_area *fa)
|
||||
{
|
||||
return fa->fa_size;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Structure describing a sector within a flash area.
|
||||
*
|
||||
* Each sector has an offset relative to the start of its flash area
|
||||
* (NOT relative to the start of its flash device), and a size. A
|
||||
* flash area may contain sectors with different sizes.
|
||||
*/
|
||||
struct flash_sector {
|
||||
/**
|
||||
* Offset of this sector, from the start of its flash area (not device).
|
||||
*/
|
||||
uint32_t fs_off;
|
||||
|
||||
/**
|
||||
* Size of this sector, in bytes.
|
||||
*/
|
||||
uint32_t fs_size;
|
||||
};
|
||||
|
||||
static inline uint32_t flash_sector_get_off(const struct flash_sector *fs)
|
||||
{
|
||||
return fs->fs_off;
|
||||
}
|
||||
|
||||
static inline uint32_t flash_sector_get_size(const struct flash_sector *fs)
|
||||
{
|
||||
return fs->fs_size;
|
||||
}
|
||||
|
||||
/*
|
||||
* Start using flash area.
|
||||
*/
|
||||
int flash_area_open(uint8_t id, const struct flash_area ** fapp);
|
||||
|
||||
void flash_area_close(const struct flash_area * fap);
|
||||
|
||||
/*
|
||||
* Read/write/erase. Offset is relative from beginning of flash area.
|
||||
*/
|
||||
int flash_area_read(const struct flash_area * fap, uint32_t off, void *dst,
|
||||
uint32_t len);
|
||||
int flash_area_write(const struct flash_area * fap, uint32_t off, const void *src,
|
||||
uint32_t len);
|
||||
int flash_area_erase(const struct flash_area * fap, uint32_t off, uint32_t len);
|
||||
|
||||
/*
|
||||
* Alignment restriction for flash writes.
|
||||
*/
|
||||
uint32_t flash_area_align(const struct flash_area * fap);
|
||||
|
||||
/*
|
||||
* What is value is read from erased flash bytes.
|
||||
*/
|
||||
uint8_t flash_area_erased_val(const struct flash_area * fap);
|
||||
|
||||
/*
|
||||
* Given flash area ID, return info about sectors within the area.
|
||||
*/
|
||||
int flash_area_get_sectors(int fa_id, uint32_t *count,
|
||||
struct flash_sector *sectors);
|
||||
|
||||
|
||||
int flash_area_id_from_image_slot(int slot);
|
||||
int flash_area_id_from_multi_image_slot(int image_index, int slot);
|
||||
|
||||
|
||||
/**
|
||||
* Converts the specified flash area ID and image index (in multi-image setup)
|
||||
* to an image slot index.
|
||||
*
|
||||
* Returns image slot index (0 or 1), or -1 if ID doesn't correspond to an image
|
||||
* slot.
|
||||
*/
|
||||
int flash_area_id_to_multi_image_slot(int image_index, int area_id);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* H_UTIL_FLASH_MAP_ */
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright (c) 2020 Embedded Planet
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the Licens
|
||||
*
|
||||
* Created on: Jul 30, 2020
|
||||
* Author: gdbeckstein
|
||||
*/
|
||||
|
||||
#ifndef MCUBOOT_BOOT_MBED_INCLUDE_FLASH_MAP_BACKEND_SECONDARY_BD_H_
|
||||
#define MCUBOOT_BOOT_MBED_INCLUDE_FLASH_MAP_BACKEND_SECONDARY_BD_H_
|
||||
|
||||
#include "blockdevice/BlockDevice.h"
|
||||
|
||||
/**
|
||||
* This is implemented as a weak function and may be redefined
|
||||
* by the application. The default case is to return the
|
||||
* BlockDevice object returned by BlockDevice::get_default_instance();
|
||||
*
|
||||
* @retval secondary_bd Secondary BlockDevice where update candidates are stored
|
||||
*/
|
||||
mbed::BlockDevice* get_secondary_bd(void);
|
||||
|
||||
#endif /* MCUBOOT_BOOT_MBED_INCLUDE_FLASH_MAP_BACKEND_SECONDARY_BD_H_ */
|
||||
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright (c) 2018 Open Source Foundries Limited
|
||||
*
|
||||
* Copyright (c) 2020 Embedded Planet
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the Licens
|
||||
*/
|
||||
|
||||
#include "platform/mbed_assert.h"
|
||||
@@ -0,0 +1,95 @@
|
||||
/*
|
||||
* Copyright (c) 2018 Open Source Foundries Limited
|
||||
* Copyright (c) 2019-2020 Arm Limited
|
||||
* Copyright (c) 2019-2020 Linaro Limited
|
||||
* Copyright (c) 2020 Embedded Planet
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#ifndef __MCUBOOT_CONFIG_H__
|
||||
#define __MCUBOOT_CONFIG_H__
|
||||
|
||||
/*
|
||||
* For available configurations and their explanations,
|
||||
* see mbed_lib.json.
|
||||
*/
|
||||
|
||||
#define SIGNATURE_TYPE_RSA 0
|
||||
#define SIGNATURE_TYPE_EC256 1
|
||||
#define SIGNATURE_TYPE_ED25519 2
|
||||
#define SIGNATURE_TYPE_NONE 3
|
||||
|
||||
/*
|
||||
* Signature algorithm
|
||||
*/
|
||||
#if (MCUBOOT_SIGNATURE_ALGORITHM == SIGNATURE_TYPE_RSA)
|
||||
#define MCUBOOT_SIGN_RSA
|
||||
# if (MCUBOOT_RSA_SIGNATURE_LENGTH != 2048 && \
|
||||
MCUBOOT_RSA_SIGNATURE_LENGTH != 3072)
|
||||
# error "Invalid RSA key size (must be 2048 or 3072)"
|
||||
# else
|
||||
# define MCUBOOT_SIGN_RSA_LEN MCUBOOT_RSA_SIGNATURE_LENGTH
|
||||
# endif
|
||||
#elif (MCUBOOT_SIGNATURE_ALGORITHM == SIGNATURE_TYPE_EC256)
|
||||
#define MCUBOOT_SIGN_EC256
|
||||
#elif (MCUBOOT_SIGNATURE_ALGORITHM == SIGNATURE_TYPE_ED25519)
|
||||
#define MCUBOOT_SIGN_ED25519
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Crypto backend
|
||||
*/
|
||||
#define MBEDTLS 0
|
||||
#define TINYCRYPT 1
|
||||
|
||||
#if (MCUBOOT_CRYPTO_BACKEND == MBEDTLS)
|
||||
#define MCUBOOT_USE_MBED_TLS
|
||||
#elif (MCUBOOT_CRYPTO_BACKEND == TINYCRYPT)
|
||||
/**
|
||||
* XXX TinyCrypt is currently not supported by Mbed-OS due to build conflicts.
|
||||
* See https://github.com/AGlass0fMilk/mbed-mcuboot-blinky/issues/2
|
||||
*/
|
||||
#error TinyCrypt is currently not supported by Mbed-OS due to build conflicts.
|
||||
#define MCUBOOT_USE_TINYCRYPT
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Only one image (two slots) supported for now
|
||||
*/
|
||||
#define MCUBOOT_IMAGE_NUMBER 1
|
||||
|
||||
/*
|
||||
* Currently there is no configuration option, for this platform,
|
||||
* that enables the system specific mcumgr commands in mcuboot
|
||||
*/
|
||||
#define MCUBOOT_PERUSER_MGMT_GROUP_ENABLED 0
|
||||
|
||||
/*
|
||||
* Encrypted Images
|
||||
*/
|
||||
#if defined(MCUBOOT_ENCRYPT_RSA) || defined(MCUBOOT_ENCRYPT_EC256) || defined(MCUBOOT_ENCRYPT_X25519)
|
||||
#define MCUBOOT_ENC_IMAGES
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Enabling this option uses newer flash map APIs. This saves RAM and
|
||||
* avoids deprecated API usage.
|
||||
*/
|
||||
#define MCUBOOT_USE_FLASH_AREA_GET_SECTORS
|
||||
|
||||
/*
|
||||
* No watchdog integration for now
|
||||
*/
|
||||
#define MCUBOOT_WATCHDOG_FEED() \
|
||||
do { \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* No direct idle call implemented
|
||||
*/
|
||||
#define MCUBOOT_CPU_IDLE() \
|
||||
do { \
|
||||
} while (0)
|
||||
|
||||
#endif /* __MCUBOOT_CONFIG_H__ */
|
||||
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Copyright (c) 2018 Nordic Semiconductor ASA
|
||||
* Copyright (c) 2015 Runtime Inc
|
||||
* Copyright (c) 2020 Cypress Semiconductor Corporation
|
||||
* Copyright (c) 2020 Embedded Planet
|
||||
* Copyright (c) 2020 ARM Limited
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the Licens.
|
||||
*/
|
||||
|
||||
#ifndef __MCUBOOT_LOGGING_H__
|
||||
#define __MCUBOOT_LOGGING_H__
|
||||
|
||||
#define MCUBOOT_LOG_LEVEL_OFF 0
|
||||
#define MCUBOOT_LOG_LEVEL_ERROR 1
|
||||
#define MCUBOOT_LOG_LEVEL_WARNING 2
|
||||
#define MCUBOOT_LOG_LEVEL_INFO 3
|
||||
#define MCUBOOT_LOG_LEVEL_DEBUG 4
|
||||
|
||||
/*
|
||||
* The compiled log level determines the maximum level that can be
|
||||
* printed.
|
||||
*/
|
||||
#ifndef MCUBOOT_LOG_LEVEL
|
||||
#define MCUBOOT_LOG_LEVEL MCUBOOT_LOG_LEVEL_OFF
|
||||
#endif
|
||||
|
||||
#if MCUBOOT_LOG_LEVEL == MCUBOOT_LOG_LEVEL_ERROR
|
||||
#define MBED_TRACE_MAX_LEVEL TRACE_LEVEL_ERROR
|
||||
#elif MCUBOOT_LOG_LEVEL == MCUBOOT_LOG_LEVEL_WARNING
|
||||
#define MBED_TRACE_MAX_LEVEL TRACE_LEVEL_WARN
|
||||
#elif MCUBOOT_LOG_LEVEL == MCUBOOT_LOG_LEVEL_INFO
|
||||
#define MBED_TRACE_MAX_LEVEL TRACE_LEVEL_INFO
|
||||
#elif MCUBOOT_LOG_LEVEL == MCUBOOT_LOG_LEVEL_DEBUG
|
||||
#define MBED_TRACE_MAX_LEVEL TRACE_LEVEL_DEBUG
|
||||
#endif
|
||||
|
||||
#define TRACE_GROUP "MCUb"
|
||||
#include "mbed-trace/mbed_trace.h"
|
||||
#include "bootutil/ignore.h"
|
||||
|
||||
#define MCUBOOT_LOG_MODULE_DECLARE(domain) /* ignore */
|
||||
#define MCUBOOT_LOG_MODULE_REGISTER(domain) /* ignore */
|
||||
|
||||
#if MCUBOOT_LOG_LEVEL >= MCUBOOT_LOG_LEVEL_ERROR
|
||||
#define MCUBOOT_LOG_ERR tr_error
|
||||
#else
|
||||
#define MCUBOOT_LOG_ERR(...) IGNORE(__VA_ARGS__)
|
||||
#endif
|
||||
|
||||
#if MCUBOOT_LOG_LEVEL >= MCUBOOT_LOG_LEVEL_WARNING
|
||||
#define MCUBOOT_LOG_WRN tr_warn
|
||||
#else
|
||||
#define MCUBOOT_LOG_WRN(...) IGNORE(__VA_ARGS__)
|
||||
#endif
|
||||
|
||||
#if MCUBOOT_LOG_LEVEL >= MCUBOOT_LOG_LEVEL_INFO
|
||||
#define MCUBOOT_LOG_INF tr_info
|
||||
#else
|
||||
#define MCUBOOT_LOG_INF(...) IGNORE(__VA_ARGS__)
|
||||
#endif
|
||||
|
||||
#if MCUBOOT_LOG_LEVEL >= MCUBOOT_LOG_LEVEL_DEBUG
|
||||
#define MCUBOOT_LOG_DBG tr_debug
|
||||
#else
|
||||
#define MCUBOOT_LOG_DBG(...) IGNORE(__VA_ARGS__)
|
||||
#endif
|
||||
|
||||
#endif /* __MCUBOOT_LOGGING_H__ */
|
||||
1
bootloader/mcuboot/boot/mbed/include/os/os_malloc.h
Normal file
1
bootloader/mcuboot/boot/mbed/include/os/os_malloc.h
Normal file
@@ -0,0 +1 @@
|
||||
/** Not required for Mbed -- malloc calls are retargeted by the platform */
|
||||
14
bootloader/mcuboot/boot/mbed/include/sysflash/sysflash.h
Normal file
14
bootloader/mcuboot/boot/mbed/include/sysflash/sysflash.h
Normal file
@@ -0,0 +1,14 @@
|
||||
/* Manual version of auto-generated version. */
|
||||
|
||||
#ifndef __SYSFLASH_H__
|
||||
#define __SYSFLASH_H__
|
||||
|
||||
#define PRIMARY_ID 0
|
||||
#define SECONDARY_ID 1
|
||||
#define SCRATCH_ID 2
|
||||
|
||||
#define FLASH_AREA_IMAGE_PRIMARY(x) PRIMARY_ID
|
||||
#define FLASH_AREA_IMAGE_SECONDARY(x) SECONDARY_ID
|
||||
#define FLASH_AREA_IMAGE_SCRATCH SCRATCH_ID
|
||||
|
||||
#endif /* __SYSFLASH_H__ */
|
||||
97
bootloader/mcuboot/boot/mbed/include/utils/DataShare.cpp
Normal file
97
bootloader/mcuboot/boot/mbed/include/utils/DataShare.cpp
Normal file
@@ -0,0 +1,97 @@
|
||||
/**
|
||||
*
|
||||
* Built with ARM Mbed-OS
|
||||
*
|
||||
* Copyright (c) 2019-2021 Embedded Planet, Inc.
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#if MCUBOOT_DATA_SHARING && !MCUBOOT_BOOTLOADER_BUILD
|
||||
|
||||
#include "DataShare.h"
|
||||
#include "boot_status.h"
|
||||
|
||||
#include <cstring>
|
||||
|
||||
#define PTR_TO_UINT8(x) ((volatile uint8_t *) x)
|
||||
#define PTR_TO_UINT16(x) ((volatile uint16_t *) x)
|
||||
#define PTR_TO_UINT32(x) ((volatile uint32_t *) x)
|
||||
|
||||
#define SHARED_DATA_ENTRY_BASE MCUBOOT_SHARED_DATA_BASE+SHARED_DATA_HEADER_SIZE
|
||||
|
||||
DataShare::DataShare(uint8_t *shared_base) : _shared_base(shared_base) {
|
||||
volatile uint16_t *ptr = PTR_TO_UINT16(MCUBOOT_SHARED_DATA_BASE);
|
||||
|
||||
/* Validate magic word */
|
||||
if(*ptr++ == SHARED_DATA_TLV_INFO_MAGIC) {
|
||||
_is_valid = true;
|
||||
}
|
||||
|
||||
_total_size = *ptr;
|
||||
|
||||
}
|
||||
|
||||
bool DataShare::is_valid() {
|
||||
return _is_valid;
|
||||
}
|
||||
|
||||
uint16_t DataShare::get_total_size() {
|
||||
if(!is_valid()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return _total_size;
|
||||
}
|
||||
|
||||
int DataShare::get_next(uint16_t *type, mbed::Span<uint8_t> buf, uint16_t *actual_size) {
|
||||
|
||||
if(!is_valid()) {
|
||||
return DATA_SHARE_ERROR_CORRUPT;
|
||||
}
|
||||
|
||||
if(_current_offset >= (_total_size - SHARED_DATA_HEADER_SIZE)) {
|
||||
return DATA_SHARE_ERROR_EOF;
|
||||
}
|
||||
|
||||
uint16_t working_offset = _current_offset;
|
||||
|
||||
/* Get the type and the length */
|
||||
*type = *PTR_TO_UINT16((SHARED_DATA_ENTRY_BASE + working_offset));
|
||||
working_offset += sizeof(uint16_t);
|
||||
*actual_size = *PTR_TO_UINT16((SHARED_DATA_ENTRY_BASE + working_offset));
|
||||
working_offset += sizeof(uint16_t);
|
||||
|
||||
/* Check if the output buffer is large enough */
|
||||
if((size_t)buf.size() < *actual_size) {
|
||||
return DATA_SHARE_ERROR_OUT_OF_MEM;
|
||||
}
|
||||
|
||||
/* Copy data of TLV entry */
|
||||
memcpy(buf.data(), (const uint8_t*)PTR_TO_UINT8((SHARED_DATA_ENTRY_BASE + working_offset)), *actual_size);
|
||||
|
||||
working_offset += *actual_size;
|
||||
|
||||
/* Update state */
|
||||
_current_offset = working_offset;
|
||||
|
||||
return DATA_SHARE_OK;
|
||||
|
||||
}
|
||||
|
||||
void DataShare::rewind() {
|
||||
_current_offset = 0;
|
||||
}
|
||||
|
||||
#endif /* MCUBOOT_DATA_SHARING && !MCUBOOT_BOOTLOADER_BUILD */
|
||||
92
bootloader/mcuboot/boot/mbed/include/utils/DataShare.h
Normal file
92
bootloader/mcuboot/boot/mbed/include/utils/DataShare.h
Normal file
@@ -0,0 +1,92 @@
|
||||
/**
|
||||
*
|
||||
* Built with ARM Mbed-OS
|
||||
*
|
||||
* Copyright (c) 2019-2021 Embedded Planet, Inc.
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef DATASHARE_H_
|
||||
#define DATASHARE_H_
|
||||
|
||||
/**
|
||||
* This is an utility intended to be used by the booted application rather
|
||||
* than by the bootloader
|
||||
*/
|
||||
#if MCUBOOT_DATA_SHARING && !MCUBOOT_BOOTLOADER_BUILD
|
||||
|
||||
#include <stdint.h>
|
||||
#include "platform/Span.h"
|
||||
|
||||
/* Error codes */
|
||||
#define DATA_SHARE_OK 0
|
||||
#define DATA_SHARE_ERROR_EOF 1 /* No more TLV entries available */
|
||||
#define DATA_SHARE_ERROR_OUT_OF_MEM 2 /* The output buffer was not large enough to hold the contents of the TLV entry */
|
||||
#define DATA_SHARE_ERROR_CORRUPT 3 /* Data corruption has been detected */
|
||||
|
||||
/**
|
||||
* Class enabling iterator-style access to the TLV-encoded data shared
|
||||
* by an mcuboot-based bootloader.
|
||||
*/
|
||||
class DataShare
|
||||
{
|
||||
public:
|
||||
|
||||
/**
|
||||
* Initializes a DataShare iterator at the given base address
|
||||
* @note the configured MCUBOOT_SHARED_DATA_BASE address is used by default
|
||||
*/
|
||||
DataShare(uint8_t * shared_base = ((uint8_t *) MCUBOOT_SHARED_DATA_BASE));
|
||||
|
||||
/**
|
||||
* Validates the magic number of the shared data section
|
||||
* @return true if magic number is found, false otherwise
|
||||
*/
|
||||
bool is_valid();
|
||||
|
||||
/**
|
||||
* Gets the total size of the shared data region
|
||||
* @return 0 if shared data region is not valid, otherwise the size of the shared data region
|
||||
*/
|
||||
uint16_t get_total_size();
|
||||
|
||||
/**
|
||||
* Attempts to get the next TLV entry in the shared data memory
|
||||
* @param[put] type Type code of the data entry
|
||||
* @param[out] out Output buffer span
|
||||
* @param[out] actual_size Size of entry copied to output buffer in bytes
|
||||
* @return err Zero if output buffer contents is valid (successful), non-zero on failure
|
||||
*/
|
||||
int get_next(uint16_t *type, mbed::Span<uint8_t> buf, uint16_t *actual_size);
|
||||
|
||||
/**
|
||||
* Resets the iterator-like pointer to the first TLV element in the shared
|
||||
* data region
|
||||
*/
|
||||
void rewind();
|
||||
|
||||
protected:
|
||||
|
||||
uint8_t *_shared_base;
|
||||
bool _is_valid = false;
|
||||
uint16_t _total_size = 0;
|
||||
uint16_t _current_offset = 0;
|
||||
|
||||
};
|
||||
|
||||
#endif /* MCUBOOT_DATA_SHARING && !MCUBOOT_BOOTLOADER_BUILD */
|
||||
|
||||
#endif /* DATASHARE_H_ */
|
||||
Reference in New Issue
Block a user