/***************************************************************************//**
* @file
* @brief Application interface to the bootloader parser.
*******************************************************************************
* # License
* Copyright 2021 Silicon Laboratories Inc. www.silabs.com
*******************************************************************************
*
* 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_INTERFACE_PARSER_H
#define BTL_INTERFACE_PARSER_H
#include
#include
#include
/***************************************************************************//**
* @addtogroup Interface
* @{
* @addtogroup ParserInterface Application Parser Interface
* @brief Application interface for the bootloader image
* parser.
* @details The Parser Interface can be used to parse upgrade images from the
* context of the application.
* @{
******************************************************************************/
// -----------------------------------------------------------------------------
// Typedefs
/***************************************************************************//**
* Bootloader parser callback
*
* @param address Address of the data
* @param data Raw data
* @param length Size in bytes of raw data.
* @param context A context variable defined by the implementation that
* is implementing this callback.
******************************************************************************/
typedef void (*BootloaderParserCallback_t)(uint32_t address,
uint8_t *data,
size_t length,
void *context);
/// Context for the bootloader image parser routine.
typedef struct BootloaderParserContext BootloaderParserContext_t;
/// Function pointers to parser callbacks
typedef struct {
/// Opaque pointer passed to the callback functions
void *context;
/// Callback function pointer for application image data
BootloaderParserCallback_t applicationCallback;
/// Callback function pointer for image metadata
BootloaderParserCallback_t metadataCallback;
/// Callback function pointer for bootloader upgrade image data
BootloaderParserCallback_t bootloaderCallback;
} BootloaderParserCallbacks_t;
/***************************************************************************//**
* Initialize the image parser.
*
* @param[in] context Pointer to the parser context struct.
* @param[in] contextSize Size of the context struct.
*
* @return BOOTLOADER_OK if success, BOOTLOADER_ERROR_PARSE_CONTEXT if context
* struct is too small.
******************************************************************************/
int32_t bootloader_initParser(BootloaderParserContext_t *context,
size_t contextSize);
#if !defined(SL_TRUSTZONE_NONSECURE)
/***************************************************************************//**
* Parse a buffer.
* @param[in] context Pointer to the parser context struct.
* @param[in] callbacks Callbacks to be called by the parser.
* @param[in] data Data to be parsed.
* @param[in] numBytes Size of the data buffer.
*
* @return BOOTLOADER_ERROR_PARSE_CONTINUE if the chunk was parsed correctly,
* and a new chunk is expected. BOOTLOADER_ERROR_PARSE_ERROR if
* something went wrong while parsing. BOOTLOADER_ERROR_PARSE_SUCCESS
* if the entire file was successfully parsed.
******************************************************************************/
int32_t bootloader_parseBuffer(BootloaderParserContext_t *context,
BootloaderParserCallbacks_t *callbacks,
uint8_t data[],
size_t numBytes);
#endif // SL_TRUSTZONE_NONSECURE
/***************************************************************************//**
* Parse a buffer and get application and bootloader upgrade metadata
* from the buffer.
*
* @note \p appInfo and \p bootloaderVersion will default to zeros.
*
* @param[in] context Pointer to the parser context struct.
* @param[in] data Data to be parsed.
* @param[in] numBytes Size of the data buffer.
* @param[out] appInfo Pointer to @ref ApplicationData_t struct.
* @param[out] bootloaderVersion Pointer to an integer representing bootloader
* version.
*
* @return @ref BOOTLOADER_OK if metadata was filled successfully.
******************************************************************************/
#if !defined(SL_TRUSTZONE_NONSECURE)
int32_t bootloader_parseImageInfo(BootloaderParserContext_t *context,
uint8_t data[],
size_t numBytes,
ApplicationData_t *appInfo,
uint32_t *bootloaderVersion);
#else
int32_t bootloader_parseImageInfo(uint8_t data[],
size_t numBytes,
ApplicationData_t *appInfo,
uint32_t *bootloaderVersion);
#endif // SL_TRUSTZONE_NONSECURE
/***************************************************************************//**
* Find the size of the context struct BootloaderParserContext used by the bootloader
* image parser to store parser state.
*
* @return size of BootloaderParserContext, returns 0 if something went wrong.
******************************************************************************/
uint32_t bootloader_parserContextSize(void);
/** @} (end addtogroup ParserInterface) */
/** @} (end addtogroup Interface) */
#endif // BTL_INTERFACE_PARSER_H