/* * Copyright (c) CompanyNameMagicTag 2018-2020. All rights reserved. * Description: Application version table interface. * Author: * Create: */ #ifndef APPLICATION_VERSION_H #define APPLICATION_VERSION_H #include #include "product.h" #include "chip_core_definition.h" /** * @defgroup connectivity_libs_app_version APP Version * @ingroup connectivity_libs * @{ */ #define APPLICATION_CORE_FLASH_BUILD (1u << 31) #define APPLICATION_CORE_ROM_BUILD (0u << 31) #define APPLICATION_CORE_VERSION_MASK 0x7FFFFFFF /** * @brief Security version return codes */ typedef enum { APPLICATION_VERSION_RETURN_CODE_SUCCESS, // The operation completed successfully APPLICATION_VERSION_RETURN_CODE_LENGTH, // The length fields are not as expected APPLICATION_VERSION_RETURN_CODE_CHECK_WORD, // The table contents do not match the check word } application_version_return_code_t; #define SSB_VERSION_B180 2 #define SSB_VERSION_B200 3 #define SSB_TO_APPLICATION_LEN 0 #define SSB_TO_APPLICATION_SSB_VSN 1 #define SSB_TO_APPLICATION_CHECKSUM 2 #define SSB_TO_APPLICATION_DATA_START 3 #define SSB_TO_APPLICATION_CHECKSUM_B180 5 #define SSB_TO_APPLICATION_CHECKSUM_B200_INCOMPATIBLE 6 #define startup_table_get_major_version(x) ((x) >> 16) #define startup_table_get_minor_version(x) ((x) & 0x00FF) #define startup_table_set_major_version(x) ((x) << 16) typedef struct { uint32_t ssb_to_application_length; uint32_t ssb_to_application_ssb_version; // must be 3 uint32_t ssb_to_application_checksum; uint32_t ssb_to_application_codeloader_version; // codeloader version from SSB uint32_t ssb_to_application_reboot_cause; uint32_t ssb_to_application_security_valid; uint32_t ssb_to_application_protocol_valid; uint32_t ssb_to_application_mcu_freq; uint32_t ssb_to_application_flash_id; uint32_t ssb_to_application_flash_unique_id; #if ((defined EMBED_FLASH_EXIST) && (EMBED_FLASH_EXIST == YES)) uint32_t ssb_to_application_embed_flash_exist; #endif } startup_table; #define SSB_TO_BT_MAX sizeof(startup_table) #if (defined BUILD_APPLICATION_SSB) /** * @brief Creates the table that the ssb will copy to the security core * @param reboot_cause_var The reason that we reset */ void create_ssb_to_application_table(uint32_t reboot_cause_var); /** * @brief Set the ssb_to_application_security_valid and ssb_to_application_protocol_valid * to security startup arguments table */ void set_ssb_to_application_image_vaild(uint32_t security_valid, uint32_t protocol_valid); /** * @brief Set the ssb_to_application_ssb_freq to startup arguments table * @param ssb_freq The mcu core frequency of ssb. */ void set_ssb_to_application_mcu_freq(uint32_t ssb_freq); /** * @brief Get the ssb to security core table addr and length * @param table_addr The table addr * @param table_length The table length */ void get_ssb_application_table(uint32_t **table_addr, uint32_t *table_length); #endif /** * @brief Gets a pointer to the security table * @return NULL if the table is invalid, non-null for a pointer to the table */ startup_table *application_version_get_table(void); /** * @} */ #endif