eive-obsw/unittest/rebootLogic/CoreController.h

75 lines
2.4 KiB
C
Raw Normal View History

2022-02-28 14:13:31 +01:00
#pragma once
2022-02-28 16:55:49 +01:00
#include "definitions.h"
2022-02-28 14:13:31 +01:00
#include "SdCardManager.h"
#include <cstdint>
#include <cstddef>
#include <string>
namespace xsc {
2022-02-28 19:52:43 +01:00
enum Chip : int { CHIP_0, CHIP_1, NO_CHIP, SELF_CHIP, ALL_CHIP };
enum Copy : int { COPY_0, COPY_1, NO_COPY, SELF_COPY, ALL_COPY };
2022-02-28 14:13:31 +01:00
} // namespace xsc
struct RebootFile {
static constexpr uint8_t DEFAULT_MAX_BOOT_CNT = 10;
bool enabled = false;
size_t maxCount = DEFAULT_MAX_BOOT_CNT;
2022-02-28 16:47:36 +01:00
uint32_t img00Cnt = 0;
uint32_t img01Cnt = 0;
uint32_t img10Cnt = 0;
uint32_t img11Cnt = 0;
2022-02-28 19:52:43 +01:00
uint32_t* relevantBootCnt = &img00Cnt;
2022-02-28 14:13:31 +01:00
bool bootFlag = false;
xsc::Chip lastChip = xsc::Chip::CHIP_0;
xsc::Copy lastCopy = xsc::Copy::COPY_0;
};
class SdCardManager;
class CoreController {
public:
static constexpr char REBOOT_FILE[] = "/conf/reboot.txt";
2022-02-28 19:52:43 +01:00
//! [EXPORT] : [COMMENT] The reboot mechanism was triggered.
//! P1: First 16 bits: Last Chip, Last 16 bits: Last Copy,
//! P2: Each byte is the respective reboot count for the slots
static constexpr Event REBOOT_MECHANISM_TRIGGERED = 1;
2022-02-28 14:13:31 +01:00
static xsc::Chip CURRENT_CHIP;
static xsc::Copy CURRENT_COPY;
2022-02-28 16:55:49 +01:00
static constexpr ActionId_t SWITCH_REBOOT_FILE_HANDLING = 5;
static constexpr ActionId_t RESET_ALL_REBOOT_COUNTERS = 6;
static constexpr ActionId_t RESET_REBOOT_COUNTER_00 = 7;
static constexpr ActionId_t RESET_REBOOT_COUNTER_01 = 8;
static constexpr ActionId_t RESET_REBOOT_COUNTER_10 = 9;
static constexpr ActionId_t RESET_REBOOT_COUNTER_11 = 10;
static constexpr ActionId_t SET_MAX_REBOOT_CNT = 11;
2022-02-28 14:13:31 +01:00
CoreController();
2022-02-28 16:55:49 +01:00
2022-02-28 19:52:43 +01:00
static void setCurrentBootCopy(xsc::Chip chip, xsc::Copy copy);
2022-02-28 16:55:49 +01:00
ReturnValue_t executeAction(ActionId_t actionId, MessageQueueId_t commandedBy,
const uint8_t* data, size_t size);
2022-02-28 14:13:31 +01:00
void performRebootFileHandling(bool recreateFile);
void determineAndExecuteReboot(RebootFile& rf, bool& needsReboot, xsc::Chip& tgtChip,
xsc::Copy& tgtCopy);
void resetRebootCount(xsc::Chip tgtChip, xsc::Copy tgtCopy);
bool parseRebootFile(std::string path, RebootFile& file);
void rewriteRebootFile(RebootFile file);
private:
struct SdInfo {
sd::SdCard pref = sd::SdCard::NONE;
sd::SdState prefState = sd::SdState::OFF;
sd::SdCard other = sd::SdCard::NONE;
sd::SdState otherState = sd::SdState::OFF;
} sdInfo;
SdCardManager* sdcMan = nullptr;
RebootFile rebootFile = {};
bool doPerformRebootFileHandling = true;
};