FL-528 GUI: View, ViewDispather. Dolphin: first start. (#276)

* GUI: view. Flooper-blooper fix compilation error.
* GUI: view and viewdispatcher bones
* GUI: view implementation, view models, view dispatcher
* GUI: view navigation, model refinement. Power: use view, view dispatcher.
* HAL Flash: proper page write. Dolphin: views. Power: views
* Dolphin: transition idle scree to Views
* Dolphin: input events on stats view. Format sources.
* HAL: flash erase. Dolphin: permanent state storage.
* Dolphin: first start welcome. HAL: flash operation status, errata 2.2.9 crutch.
This commit is contained in:
あく
2021-01-08 07:42:48 +03:00
committed by GitHub
parent d65e9b04ce
commit 1b78418f9f
33 changed files with 995 additions and 212 deletions

View File

@@ -122,6 +122,8 @@ int main(void)
delay_us_init_DWT();
api_hal_vcp_init();
api_hal_spi_init();
// Errata 2.2.9, Flash OPTVERR flag is always set after system reset
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_ALL_ERRORS);
/* USER CODE END 2 */
/* Init scheduler */

View File

@@ -2,14 +2,28 @@
#include <api-hal-bt.h>
#include <stm32wbxx.h>
void api_hal_flash_write_dword(size_t address, uint64_t data) {
bool api_hal_flash_erase(uint8_t page, uint8_t count) {
api_hal_bt_lock_flash();
HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, address, data);
FLASH_EraseInitTypeDef erase;
erase.TypeErase = FLASH_TYPEERASE_PAGES;
erase.Page = page;
erase.NbPages = count;
uint32_t error;
HAL_StatusTypeDef status = HAL_FLASHEx_Erase(&erase, &error);
api_hal_bt_unlock_flash();
return status == HAL_OK;
}
void api_hal_flash_write_row(size_t address, size_t source_address) {
bool api_hal_flash_write_dword(size_t address, uint64_t data) {
api_hal_bt_lock_flash();
HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, address, source_address);
HAL_StatusTypeDef status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, address, data);
api_hal_bt_unlock_flash();
return status == HAL_OK;
}
bool api_hal_flash_write_row(size_t address, size_t source_address) {
api_hal_bt_lock_flash();
HAL_StatusTypeDef status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_FAST, address, source_address);
api_hal_bt_unlock_flash();
return status == HAL_OK;
}

View File

@@ -1,15 +1,24 @@
#pragma once
#include <stdbool.h>
#include <stdint.h>
#include <stddef.h>
/*
* Erase Flash
* Locking operation, uses HSEM to manage shared access.
* @param page, page number
* @param count, page count to erase
*/
bool api_hal_flash_erase(uint8_t page, uint8_t count);
/*
* Write double word (64 bits)
* Locking operation, uses HSEM to manage shared access.
* @param address - destination address, must be double word aligned.
* @param data - data to write
*/
void api_hal_flash_write_dword(size_t address, uint64_t data);
bool api_hal_flash_write_dword(size_t address, uint64_t data);
/*
* Write page (4096 bytes or 64 rows of double words).
@@ -17,4 +26,4 @@ void api_hal_flash_write_dword(size_t address, uint64_t data);
* @param address - destination address, must be page aligned
* @param source_address - source address
*/
void api_hal_flash_write_page(size_t address, size_t source_address);
bool api_hal_flash_write_page(size_t address, size_t source_address);