renderbug-cpp/src/Config.h
Torrie Fischer 9a36831658
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
config: implement reading app-specific configs from profile
2023-02-18 18:45:34 +01:00

50 lines
1.3 KiB
C++

#pragma once
#include <Figments.h>
#include "JsonCoordinateMapping.h"
struct HardwareConfig {
uint8_t version = 3;
uint8_t checksum = 0;
struct Data {
char loadedProfile[16] = {0};
uint8_t lastRed = 255;
uint8_t lastGreen = 255;
uint8_t lastBlue = 255;
char lastScene[16] = {0};
};
Data data;
static HardwareConfig load();
void save();
bool isValid() const;
static constexpr uint16_t MAX_LED_NUM = 255;
private:
uint8_t getCRC() const;
static constexpr uint8_t CRC7_POLY = 0x91;
};
// A task that manages the EEPROM settings and coord mapping when modified via
// Particle. This allows for multiple devices with wildly different displays to
// run the same code
struct ConfigService: public Task {
ConfigService() : Task("Configuration") {state = Task::Running;}
void onStart();
void loop() override;
void handleEvent(const InputEvent &evt) override;
const CoordinateMapping* coordMap() const { return &m_jsonMap; }
const char* loadedProfile() const;
void overrideProfile(const char* profileName);
const char* getConfigValue(const char* key) const;
private:
HardwareConfig m_config;
JsonCoordinateMapping m_jsonMap;
const char* m_overrideProfile = nullptr;
void loadProfile(const char* name);
void loadMap(const String& mapName);
};