Skip to content

Commit

Permalink
rename ConfigParamaBase to FlashParam
Browse files Browse the repository at this point in the history
  • Loading branch information
elehobica committed May 20, 2024
1 parent 2fbae5d commit 6e3fb35
Show file tree
Hide file tree
Showing 9 changed files with 81 additions and 52 deletions.
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ set(bin_name ${PROJECT_NAME})
add_executable(${bin_name}
src/main.cpp
src/ConfigMenu.cpp
src/ConfigParam.cpp
src/FlashParam.cpp
src/ImageFitter.cpp
src/lcd_background.cpp
Expand Down
47 changes: 47 additions & 0 deletions src/ConfigParam.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/*-----------------------------------------------------------/
/ ConfigParam.h
/------------------------------------------------------------/
/ Copyright (c) 2024, Elehobica
/ Released under the BSD-2-Clause
/ refer to https://opensource.org/licenses/BSD-2-Clause
/-----------------------------------------------------------*/

#include "ConfigParam.h"

namespace FlashParamNs {
//=================================
// Implementation of ConfigParam class
//=================================
ConfigParam& ConfigParam::instance() // Singleton
{
static ConfigParam instance;
return instance;
}

uint32_t ConfigParam::getBootCountFromFlash()
{
auto& param = P_CFG_BOOT_COUNT;
ReadFromFlashVisitor visitor;
visitor(&param);
return param.get();
}

void ConfigParam::incBootCount()
{
auto& param = P_CFG_BOOT_COUNT;
param.set(param.get() + 1);
}

void ConfigParam::initialize()
{
loadDefault();
// don't load from Flash if flash is blank
if (getBootCountFromFlash() == 0xffffffffUL) { return; }
// load from flash and get format revision
uint32_t formatRevExpected = P_CFG_FORMAT_REV.get();
loadFromFlash();
uint32_t formatRev = P_CFG_FORMAT_REV.get();
// Force to reset to default due to format revision changed (parameter/address) to avoid mulfunction
if (formatRevExpected != formatRev) { loadDefault(); }
}
}
34 changes: 8 additions & 26 deletions src/ConfigParam.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,32 +47,14 @@ typedef enum {
CFG_MENU_IDX_PLAY_RANDOM_DIR_DEPTH,
} ParamId_t;

struct ConfigParam : ConfigParamBase {
static ConfigParam& instance() { // Singleton
static ConfigParam instance;
return instance;
}
uint32_t getBootCountFromFlash() {
auto& param = P_CFG_BOOT_COUNT;
ReadFromFlashVisitor visitor;
visitor(&param);
return param.get();
}
void incBootCount() {
auto& param = P_CFG_BOOT_COUNT;
param.set(param.get() + 1);
}
void initialize() {
loadDefault();
// don't load from Flash if flash is blank
if (getBootCountFromFlash() == 0xffffffffUL) { return; }
// load from flash and get format revision
uint32_t formatRevExpected = P_CFG_FORMAT_REV.get();
loadFromFlash();
uint32_t formatRev = P_CFG_FORMAT_REV.get();
// Force to reset to default due to format revision changed (parameter/address) to avoid mulfunction
if (formatRevExpected != formatRev) { loadDefault(); }
}
//=================================
// Interface of ConfigParam class
//=================================
struct ConfigParam : FlashParam {
static ConfigParam& instance(); // Singleton
uint32_t getBootCountFromFlash();
void incBootCount();
void initialize();

// Parameter<T> inst id name addr default
Parameter<uint32_t> P_CFG_BOOT_COUNT {CFG_BOOT_COUNT, "CFG_BOOT_COUNT", 0x000, 10};
Expand Down
16 changes: 9 additions & 7 deletions src/FlashParam.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,30 +90,32 @@ void Params::storeToFlash() const
}

//=================================
// Implementation of ConfigParamBase class
// Implementation of FlashParam class
//=================================
ConfigParamBase& ConfigParamBase::instance()
FlashParam& FlashParam::instance()
{
static ConfigParamBase instance; // Singleton
static FlashParam instance; // Singleton
return instance;
}

void ConfigParamBase::printInfo() const
void FlashParam::printInfo() const
{
UserFlash& userFlash = UserFlash::instance();
userFlash.printInfo();
Params::instance().printInfo();
}

void ConfigParamBase::loadDefault()
void FlashParam::loadDefault()
{
Params::instance().loadDefault();
}

void ConfigParamBase::loadFromFlash()
void FlashParam::loadFromFlash()
{
Params::instance().loadFromFlash();
}

void ConfigParamBase::finalize() const
void FlashParam::finalize() const
{
Params::instance().storeToFlash();
}
Expand Down
18 changes: 9 additions & 9 deletions src/FlashParam.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class Parameter {
const size_t size;
valueType value = defaultValue;
friend class Params;
friend class ConfigParamBase;
friend class FlashParam;
friend class ReadFromFlashVisitor;
friend class WriteReserveVisitor;
friend class PrintInfoVisitor;
Expand Down Expand Up @@ -113,16 +113,16 @@ class Params
}
std::map<const uint32_t, variant_t> paramMap;
template<typename> friend class Parameter; // for all Parameter<> classes
friend class ConfigParamBase;
friend class FlashParam;
};

//=================================
// Interface of ConfigParamBase class
// Interface of FlashParam class
//=================================
class ConfigParamBase
class FlashParam
{
public:
static ConfigParamBase& instance(); // Singleton
static FlashParam& instance(); // Singleton
void printInfo() const;
void finalize() const;
/*
Expand All @@ -139,10 +139,10 @@ class ConfigParamBase
void setValue(const uint32_t& id, const T& value) { _setValue<Parameter<T>>(id, value); }

protected:
ConfigParamBase() = default;
~ConfigParamBase() = default;
ConfigParamBase(const ConfigParamBase&) = delete;
ConfigParamBase& operator=(const ConfigParamBase&) = delete;
FlashParam() = default;
~FlashParam() = default;
FlashParam(const FlashParam&) = delete;
FlashParam& operator=(const FlashParam&) = delete;
void loadDefault();
void loadFromFlash();
// accessor by uint32_t on template T = Patameter<>
Expand Down
2 changes: 0 additions & 2 deletions src/UIMode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ UIMode::ExitType UIMode::exitType = UIMode::NoError;
ConfigMenu& UIMode::cfgMenu = ConfigMenu::instance();
ConfigParam& UIMode::cfgParam = ConfigParam::instance();
LcdCanvas* UIMode::lcd = nullptr; // dynamic instance generation after configureLcd() is needed
UserFlash& UIMode::userFlash = UserFlash::instance();
std::array<UIMode*, NUM_UI_MODES> UIMode::ui_mode_ary;

//================================
Expand Down Expand Up @@ -193,7 +192,6 @@ UIOpeningMode::UIOpeningMode() : UIMode("UIOpeningMode", OpeningMode)
void UIOpeningMode::restoreFromFlash() const
{
// Load Configuration parameters from Flash
userFlash.printInfo();
cfgParam.printInfo();
//cfgMenu.printInfo();
cfgParam.incBootCount();
Expand Down
2 changes: 0 additions & 2 deletions src/UIMode.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
#include "LcdCanvas.h"
#include "LcdCanvasIconDef.h"
#include "ui_control.h"
#include "UserFlash.h"

typedef enum {
None = 0,
Expand Down Expand Up @@ -83,7 +82,6 @@ class UIMode
static ConfigMenu& cfgMenu;
static ConfigParam& cfgParam;
static LcdCanvas* lcd;
static UserFlash& userFlash;
bool isAudioFile(const uint16_t& idx) const;
const char* name;
UIMode* prevMode = nullptr;
Expand Down
2 changes: 2 additions & 0 deletions src/UserFlash.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

#include "pico/flash.h"

namespace FlashParamNs {
void _user_flash_program_core(void* ptr)
{
UserFlash* inst = static_cast<UserFlash*>(ptr);
Expand Down Expand Up @@ -62,3 +63,4 @@ void UserFlash::_program_core()
flash_range_program(UserFlashOfs, data.data(), FLASH_PAGE_SIZE);
std::copy(flashContents, flashContents + data.size(), data.begin());
}
}
11 changes: 5 additions & 6 deletions src/UserFlash.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,10 @@

#include "hardware/flash.h"

namespace FlashParamNs {
//=================================
// Interface of UserFlash class
//=================================

//#define userFlash UserFlash::instance()

class UserFlash
{
public:
Expand Down Expand Up @@ -44,14 +42,15 @@ class UserFlash
static constexpr size_t EraseSize = ((UserReqSize + (FLASH_SECTOR_SIZE - 1)) / FLASH_SECTOR_SIZE) * FLASH_SECTOR_SIZE;
static constexpr size_t PagePgrSize = ((UserReqSize + (FLASH_PAGE_SIZE - 1)) / FLASH_PAGE_SIZE) * FLASH_PAGE_SIZE;
static constexpr uint32_t UserFlashOfs = FlashSize - EraseSize;
const uint8_t* flashContents = reinterpret_cast<const uint8_t*>(XIP_BASE + UserFlashOfs);
std::array<uint8_t, PagePgrSize> data;
// Singleton
UserFlash();
virtual ~UserFlash();
UserFlash(const UserFlash&) = delete;
UserFlash& operator=(const UserFlash&) = delete;
void _program_core();
const uint8_t* flashContents = reinterpret_cast<const uint8_t*>(XIP_BASE + UserFlashOfs);
std::array<uint8_t, PagePgrSize> data;

friend void _user_flash_program_core(void*);
friend class FlashParam;
};
}

0 comments on commit 6e3fb35

Please sign in to comment.