Files
GClarkson 9d06f983af Imported more library files
Not compiling currently
2025-04-12 23:37:19 +01:00

105 lines
4.4 KiB
C

/***************************************************************************//**
* @file
* @brief Reset information for the Silicon Labs Gecko bootloader
*******************************************************************************
* # License
* <b>Copyright 2021 Silicon Laboratories Inc. www.silabs.com</b>
*******************************************************************************
*
* The licensor of this software is Silicon Laboratories Inc. Your use of this
* software is governed by the terms of Silicon Labs Master Software License
* Agreement (MSLA) available at
* www.silabs.com/about-us/legal/master-software-license-agreement. This
* software is distributed to you in Source Code format and is governed by the
* sections of the MSLA applicable to Source Code.
*
******************************************************************************/
#ifndef BTL_RESET_INFO_H
#define BTL_RESET_INFO_H
#include <stdint.h>
/***************************************************************************//**
* @addtogroup Interface
* @{
* @addtogroup CommonInterface
* @{
* @addtogroup ResetInterface Reset Information
* @brief Passing information when resetting into and out of the bootloader
* @details
* To signal the bootloader to run, the
* application needs to write the @ref BootloaderResetCause_t structure
* to the first address of RAM, setting @ref BootloaderResetCause_t.reason
* to @ref BOOTLOADER_RESET_REASON_BOOTLOAD.
*
* The reset cause is only valid if @ref BootloaderResetCause_t.signature
* is set to @ref BOOTLOADER_RESET_SIGNATURE_VALID.
* @code BootloaderResetCause_t resetCause = {
* .reason = BOOTLOADER_RESET_REASON_BOOTLOAD,
* .signature = BOOTLOADER_RESET_SIGNATURE_VALID
* } @endcode
*
* When the bootloader reboots back into the app, it sets the reset
* reason to @ref BOOTLOADER_RESET_REASON_GO if the bootload succeeded,
* or @ref BOOTLOADER_RESET_REASON_BADIMAGE if the bootload failed due
* to errors when parsing the upgrade image.
*
* @note
* The reset information is automatically filled out before reset if the
* @ref bootloader_rebootAndInstall function is called.
* @{
******************************************************************************/
/// Reset cause of the bootloader
typedef struct {
/// Reset reason as defined in the [reset information](@ref ResetInterface)
uint16_t reason;
/// Signature indicating whether the reset reason is valid
uint16_t signature;
} BootloaderResetCause_t;
/// Unknown bootloader cause (should never occur)
#define BOOTLOADER_RESET_REASON_UNKNOWN 0x0200u
/// Bootloader caused reset telling app to run
#define BOOTLOADER_RESET_REASON_GO 0x0201u
/// Application requested that bootloader runs
#define BOOTLOADER_RESET_REASON_BOOTLOAD 0x0202u
/// Bootloader detected bad external upgrade image
#define BOOTLOADER_RESET_REASON_BADIMAGE 0x0203u
/// Fatal Error or assert in bootloader
#define BOOTLOADER_RESET_REASON_FATAL 0x0204u
/// Forced bootloader activation
#define BOOTLOADER_RESET_REASON_FORCE 0x0205u
/// OTA Bootloader mode activation
#define BOOTLOADER_RESET_REASON_OTAVALID 0x0206u
/// Bootloader initiated deep sleep
#define BOOTLOADER_RESET_REASON_DEEPSLEEP 0x0207u
/// Application verification failed
#define BOOTLOADER_RESET_REASON_BADAPP 0x0208u
/// Bootloader requested that first stage upgrades main bootloader
#define BOOTLOADER_RESET_REASON_UPGRADE 0x0209u
/// Bootloader timed out waiting for upgrade image
#define BOOTLOADER_RESET_REASON_TIMEOUT 0x020Au
/// Soft-reset was forced to handle a fault
#define BOOTLOADER_RESET_REASON_FAULT 0x020Bu
/// Soft-reset was forced to handle a security fault
#define BOOTLOADER_RESET_REASON_TZ_FAULT 0x020Cu
/// Insufficient slot space to re-create a new firmware
#define BOOTLOADER_RESET_REASON_NO_SLOT_SPACE 0x020Du
/// CRC mismatch of the newly re-constructed firmware
#define BOOTLOADER_RESET_REASON_BADCRC 0x020Eu
/// Re-creation of the new application using the DDFU library failed
#define BOOTLOADER_RESET_REASON_DDFU_FAIL 0x020Fu
/// Reset signature is valid
#define BOOTLOADER_RESET_SIGNATURE_VALID 0xF00Fu
/// Reset signature is invalid
#define BOOTLOADER_RESET_SIGNATURE_INVALID 0xC33Cu
/** @} (end addtogroup ResetInterface) */
/** @} (end addtogroup CommonInterface) */
/** @} (end addtogroup Interface) */
#endif // BTL_RESET_INFO_H