[FL-164] Add bootloader version (#417)

* Add bootloader versioning
* Move some logic to api-hal-version
* Backport to f4
* Dolphin: update version screen layout, make it more readable

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
This commit is contained in:
Albert Kharisov
2021-04-19 19:30:25 +03:00
committed by GitHub
parent 202673aed1
commit aa20a78b0e
21 changed files with 320 additions and 27 deletions

View File

@@ -1,4 +1,5 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {

View File

@@ -3,6 +3,7 @@
#include <stdbool.h>
#include <stdint.h>
#include <string.h>
#include <version.h>
#ifdef __cplusplus
extern "C" {
@@ -29,6 +30,20 @@ const uint32_t api_hal_version_get_hw_timestamp();
/** Get pointer to target name */
const char * api_hal_version_get_name_ptr();
/**
* Get address of version structure of bootloader, stored in chip flash.
*
* @return Address of boot version structure.
*/
const struct Version* api_hal_version_get_boot_version(void);
/**
* Get address of version structure of firmware.
*
* @return Address of firmware version structure.
*/
const struct Version* api_hal_version_get_fw_version(void);
#ifdef __cplusplus
}
#endif

View File

@@ -10,4 +10,5 @@ void api_hal_boot_set_mode(ApiHalBootMode mode) {
} else if (mode == ApiHalBootModeDFU) {
LL_RTC_BAK_SetRegister(RTC, LL_RTC_BKP_DR0, BOOT_REQUEST_DFU);
}
}
}

View File

@@ -1,5 +1,6 @@
#include <api-hal-version.h>
#include <stm32wbxx.h>
#include <stm32wbxx_ll_rtc.h>
typedef struct {
uint8_t version;
@@ -38,3 +39,17 @@ const char * api_hal_version_get_name_ptr() {
char * name = ((ApiHalVersionOTP*)OTP_AREA_BASE)->name;
return *name == 0xFFU ? NULL : name;
}
const struct Version* api_hal_version_get_fw_version(void) {
return version_get();
}
const struct Version* api_hal_version_get_boot_version(void) {
#ifdef NO_BOOTLOADER
return 0;
#else
/* Backup register which points to structure in flash memory */
return (const struct Version*) LL_RTC_BAK_GetRegister(RTC, LL_RTC_BKP_DR1);
#endif
}

View File

@@ -10,4 +10,5 @@ void api_hal_boot_set_mode(ApiHalBootMode mode) {
} else if (mode == ApiHalBootModeDFU) {
LL_RTC_BAK_SetRegister(RTC, LL_RTC_BKP_DR0, BOOT_REQUEST_DFU);
}
}
}

View File

@@ -1,5 +1,6 @@
#include <api-hal-version.h>
#include <stm32wbxx.h>
#include <stm32wbxx_ll_rtc.h>
typedef struct {
uint8_t version;
@@ -38,3 +39,17 @@ const char * api_hal_version_get_name_ptr() {
char * name = ((ApiHalVersionOTP*)OTP_AREA_BASE)->name;
return *name == 0xFFU ? NULL : name;
}
const struct Version* api_hal_version_get_fw_version(void) {
return version_get();
}
const struct Version* api_hal_version_get_boot_version(void) {
#ifdef NO_BOOTLOADER
return 0;
#else
/* Backup register which points to structure in flash memory */
return (const struct Version*) LL_RTC_BAK_GetRegister(RTC, LL_RTC_BKP_DR1);
#endif
}