This commit is contained in:
devdl11
2022-04-27 15:44:42 +02:00
parent 04ae526a39
commit 0332f43c5c
22 changed files with 93 additions and 114 deletions

View File

@@ -9,7 +9,7 @@ namespace Bootloader {
AboutMenu();
void setup() override;
void post_open() override {};
void postOpen() override {};
};
}

View File

@@ -14,7 +14,7 @@ void Bootloader::CrashMenu::setup() {
m_columns[2] = ColumnBinder(&m_default_columns[2]);
}
void Bootloader::CrashMenu::post_open() {
void Bootloader::CrashMenu::postOpen() {
// We override the open method
for (;;) {
// Infinite loop

View File

@@ -9,7 +9,7 @@ namespace Bootloader {
CrashMenu(const char * error);
void setup() override;
void post_open() override;
void postOpen() override;
private:
const char * m_error;

View File

@@ -2,17 +2,17 @@
#include <bootloader/boot.h>
#include <ion.h>
Bootloader::DfuMenu::DfuMenu(const char * text, const USBData * data) : Menu(KDColorBlack, KDColorWhite, Messages::dfuTitle, Messages::mainTitle), m_submenu_text(text), m_data(data) {
Bootloader::DfuMenu::DfuMenu(const char * text, const USBData * data) : Menu(KDColorBlack, KDColorWhite, Messages::dfuTitle, Messages::mainTitle), m_submenuText(text), m_data(data) {
setup();
}
void Bootloader::DfuMenu::setup() {
m_default_columns[0] = Column(m_submenu_text, k_small_font, 0, true);
m_default_columns[0] = Column(m_submenuText, k_small_font, 0, true);
m_columns[0] = ColumnBinder(&m_default_columns[0]);
}
void Bootloader::DfuMenu::post_open() {
void Bootloader::DfuMenu::postOpen() {
// We override the open method
if (!m_data->getData().isProtectedInternal() && m_data->getData().isProtectedExternal()) {
// Because we want to flash the internal, we will jump into the stm32 bootloader

View File

@@ -10,10 +10,10 @@ namespace Bootloader {
DfuMenu(const char * submenu, const USBData * usbData);
void setup() override;
void post_open() override;
void postOpen() override;
private:
const char * m_submenu_text;
const char * m_submenuText;
const USBData * m_data;
};
}

View File

@@ -52,24 +52,14 @@ bool about_submenu() {
return true;
}
const char * Bootloader::HomeMenu::slotA_text() {
return Slot::isFullyValid(Slot::A()) ? Messages::homeSlotASubmenu : Messages::invalidSlot;
}
const char * Bootloader::HomeMenu::slotA_kernel_text() {
return Slot::isFullyValid(Slot::A()) ? Slot::A().kernelHeader()->patchLevel() : nullptr;
}
const char * Bootloader::HomeMenu::slotA_version_text() {
return Slot::isFullyValid(Slot::A()) ? Slot::A().userlandHeader()->isOmega() && Slot::A().userlandHeader()->isUpsilon() ? Slot::A().userlandHeader()->upsilonVersion() : Slot::A().userlandHeader()->isOmega() ? Slot::A().userlandHeader()->omegaVersion() : Slot::A().kernelHeader()->version() : nullptr;
}
const char * Bootloader::HomeMenu::slotA_os_text() {
if (Slot::isFullyValid(Slot::A())) {
if (Slot::A().userlandHeader()->isOmega() && Slot::A().userlandHeader()->isUpsilon()) {
const char * Bootloader::HomeMenu::getSlotOsText(Slot slot) {
if (Slot::isFullyValid(slot)) {
if (slot.userlandHeader()->isOmega() && slot.userlandHeader()->isUpsilon()) {
return Messages::upsilonSlot;
} else if (Slot::A().userlandHeader()->isOmega()) {
} else if (slot.userlandHeader()->isOmega() && slot.kernelHeader()->patchLevel()[0] != '\0') {
return Messages::omegaSlot;
} else if (slot.userlandHeader()->isOmega()) {
return Messages::khiSlot;
} else {
return Messages::epsilonSlot;
}
@@ -77,68 +67,43 @@ const char * Bootloader::HomeMenu::slotA_os_text() {
return nullptr;
}
const char * Bootloader::HomeMenu::slotKhi_text() {
return Slot::isFullyValid(Slot::Khi()) ? Messages:: homeSlotKhiSubmenu : Messages::invalidSlot;
}
const char * Bootloader::HomeMenu::slotKhi_kernel_text() {
return Slot::isFullyValid(Slot::Khi()) ? Slot::Khi().kernelHeader()->patchLevel() : nullptr;
}
const char * Bootloader::HomeMenu::slotKhi_os_text() {
if (Slot::isFullyValid(Slot::Khi())) {
if (Slot::Khi().userlandHeader()->isOmega() && Slot::Khi().userlandHeader()->isUpsilon()) {
return Messages::upsilonSlot;
} else if (Slot::Khi().userlandHeader()->isOmega()) {
return Messages::omegaSlot;
} else {
return Messages::epsilonSlot;
const char * Bootloader::HomeMenu::getSlotText(Slot slot) {
if(Slot::isFullyValid(slot)) {
if (slot.address() == Slot::A().address()) {
return Messages::homeSlotASubmenu;
} else if (slot.address() == Slot::Khi().address()) {
return Messages::homeSlotKhiSubmenu;
} else if (slot.address() == Slot::B().address()) {
return Messages::homeSlotBSubmenu;
}
}
return nullptr;
return Messages::invalidSlot;
}
const char * Bootloader::HomeMenu::slotKhi_version_text() {
return Slot::isFullyValid(Slot::Khi()) ? Slot::Khi().userlandHeader()->isOmega() && Slot::Khi().userlandHeader()->isUpsilon() ? Slot::Khi().userlandHeader()->upsilonVersion() : Slot::Khi().userlandHeader()->isOmega() ? Slot::Khi().userlandHeader()->omegaVersion() : Slot::Khi().kernelHeader()->version() : nullptr;
const char * Bootloader::HomeMenu::getKernelText(Slot slot) {
return Slot::isFullyValid(slot) ? slot.kernelHeader()->patchLevel() : nullptr;
}
const char * Bootloader::HomeMenu::slotB_text() {
return Slot::isFullyValid(Slot::B()) ? Messages::homeSlotBSubmenu : Messages::invalidSlot;
}
const char * Bootloader::HomeMenu::slotB_kernel_text() {
return Slot::isFullyValid(Slot::B()) ? Slot::B().kernelHeader()->patchLevel() : nullptr;
}
const char * Bootloader::HomeMenu::slotB_os_text() {
if (Slot::isFullyValid(Slot::B())) {
if (Slot::B().userlandHeader()->isOmega() && Slot::B().userlandHeader()->isUpsilon()) {
return Messages::upsilonSlot;
} else if (Slot::B().userlandHeader()->isOmega()) {
return Messages::omegaSlot;
} else {
return Messages::epsilonSlot;
}
}
return nullptr;
}
const char * Bootloader::HomeMenu::slotB_version_text() {
return Slot::isFullyValid(Slot::B()) ? Slot::B().userlandHeader()->isOmega() && Slot::B().userlandHeader()->isUpsilon() ? Slot::B().userlandHeader()->upsilonVersion() : Slot::B().userlandHeader()->isOmega() ? Slot::B().userlandHeader()->omegaVersion() : Slot::B().kernelHeader()->version() : nullptr;
const char * Bootloader::HomeMenu::getVersionText(Slot slot) {
return Slot::isFullyValid(slot) ? slot.userlandHeader()->isOmega() && slot.userlandHeader()->isUpsilon() ? slot.userlandHeader()->upsilonVersion() : slot.userlandHeader()->isOmega() ? slot.userlandHeader()->omegaVersion() : slot.kernelHeader()->version() : nullptr;
}
void Bootloader::HomeMenu::setup() {
m_slot_columns[0] = SlotColumn(slotA_text(), slotA_kernel_text(), slotA_os_text(), slotA_version_text(), Ion::Keyboard::Key::One, k_small_font, 10, false, &slotA_submenu);
m_slot_columns[1] = SlotColumn(slotKhi_text(), slotKhi_kernel_text(), slotKhi_os_text(), slotKhi_version_text(), Ion::Keyboard::Key::Two, k_small_font, 10, false, &slotKhi_submenu);
m_slot_columns[2] = SlotColumn(slotB_text(), slotB_kernel_text(), slotB_os_text(), slotB_version_text(), Ion::Keyboard::Key::Three, k_small_font, 10, false, &slotB_submenu);
m_default_columns[0] = Column(Messages::homeInstallerSubmenu, Ion::Keyboard::Key::Four, k_small_font, 10, false, &installer_submenu);
m_default_columns[1] = Column(Messages::homeAboutSubmenu, Ion::Keyboard::Key::Five, k_small_font, 10, false, &about_submenu);
Slot A = Slot::A();
Slot Khi = Slot::Khi();
Slot B = Slot::B();
m_columns[0] = ColumnBinder(&m_slot_columns[0]);
m_columns[1] = ColumnBinder(&m_slot_columns[1]);
m_columns[2] = ColumnBinder(&m_slot_columns[2]);
m_columns[3] = ColumnBinder(&m_default_columns[0]);
m_columns[4] = ColumnBinder(&m_default_columns[1]);
m_slot_columns[0] = SlotColumn(getSlotText(A), getKernelText(A), getSlotOsText(A), getVersionText(A), Ion::Keyboard::Key::One, k_small_font, 10, false, &slotA_submenu);
m_slot_columns[1] = SlotColumn(getSlotText(Khi), getKernelText(Khi), getSlotOsText(Khi), getVersionText(Khi), Ion::Keyboard::Key::Two, k_small_font, 10, false, &slotKhi_submenu);
m_slot_columns[2] = SlotColumn(getSlotText(B), getKernelText(B), getSlotOsText(B), getVersionText(B), Ion::Keyboard::Key::Three, k_small_font, 10, false, &slotB_submenu);
m_default_columns[0] = Column(Messages::homeInstallerSubmenu, Ion::Keyboard::Key::Four, k_small_font, 10, false, &installer_submenu);
m_default_columns[1] = Column(Messages::homeAboutSubmenu, Ion::Keyboard::Key::Five, k_small_font, 10, false, &about_submenu);
m_columns[0] = ColumnBinder(&m_slot_columns[0]);
m_columns[1] = ColumnBinder(&m_slot_columns[1]);
m_columns[2] = ColumnBinder(&m_slot_columns[2]);
m_columns[3] = ColumnBinder(&m_default_columns[0]);
m_columns[4] = ColumnBinder(&m_default_columns[1]);
}

View File

@@ -4,6 +4,7 @@
#include <bootloader/interface/src/menu.h>
#include <bootloader/interface/menus/about.h>
#include <bootloader/interface/menus/installer.h>
#include <bootloader/slots/slot.h>
namespace Bootloader {
class HomeMenu : public Menu {
@@ -11,24 +12,16 @@ namespace Bootloader {
HomeMenu();
void setup() override;
void post_open() override {};
void postOpen() override {};
static AboutMenu * aboutMenu();
static InstallerMenu * installerMenu();
private:
const char * slotA_text();
const char * slotA_kernel_text();
const char * slotA_os_text();
const char * slotA_version_text();
const char * slotKhi_text();
const char * slotKhi_kernel_text();
const char * slotKhi_os_text();
const char * slotKhi_version_text();
const char * slotB_text();
const char * slotB_kernel_text();
const char * slotB_os_text();
const char * slotB_version_text();
const char * getSlotOsText(Slot slot);
const char * getSlotText(Slot slot);
const char * getKernelText(Slot slot);
const char * getVersionText(Slot slot);
};
}

View File

@@ -20,20 +20,20 @@ Bootloader::InstallerMenu::InstallerMenu() : Menu(KDColorBlack, KDColorWhite, Me
setup();
}
bool slots_submenu() {
bool slotsSubmenu() {
Bootloader::InstallerMenu::SlotsDFU()->open();
return true;
}
bool bootloader_submenu() {
bool bootloaderSubmenu() {
Bootloader::InstallerMenu::BootloaderDFU()->open();
return true;
}
void Bootloader::InstallerMenu::setup() {
m_default_columns[0] = Column(Messages::installerText1, k_large_font, 0, true);
m_default_columns[1] = Column(Messages::installerSlotsSubmenu, Ion::Keyboard::Key::One, k_small_font, 30, false, &slots_submenu);
m_default_columns[2] = Column(Messages::installerBootloaderSubmenu, Ion::Keyboard::Key::Two, k_small_font, 30, false, &bootloader_submenu);
m_default_columns[1] = Column(Messages::installerSlotsSubmenu, Ion::Keyboard::Key::One, k_small_font, 30, false, &slotsSubmenu);
m_default_columns[2] = Column(Messages::installerBootloaderSubmenu, Ion::Keyboard::Key::Two, k_small_font, 30, false, &bootloaderSubmenu);
m_columns[0] = ColumnBinder(&m_default_columns[0]);
m_columns[1] = ColumnBinder(&m_default_columns[1]);

View File

@@ -10,7 +10,7 @@ namespace Bootloader {
InstallerMenu();
void setup() override;
void post_open() override {};
void postOpen() override {};
static DfuMenu * SlotsDFU();
static DfuMenu * BootloaderDFU();

View File

@@ -19,7 +19,7 @@ void Bootloader::SlotRecoveryMenu::setup() {
m_columns[4] = ColumnBinder(&m_default_columns[4]);
}
void Bootloader::SlotRecoveryMenu::post_open() {
void Bootloader::SlotRecoveryMenu::postOpen() {
// We override the open method
for (;;) {
Ion::USB::enable();

View File

@@ -10,7 +10,7 @@ namespace Bootloader {
SlotRecoveryMenu(USBData * usbData);
void setup() override;
void post_open() override;
void postOpen() override;
private:
const USBData * m_data;
};

View File

@@ -10,7 +10,7 @@ namespace Bootloader {
WarningMenu();
void setup() override;
void post_open() override {};
void postOpen() override {};
};
}

View File

@@ -18,7 +18,7 @@ void Bootloader::Menu::open(bool noreturn) {
uint64_t scan = 0;
bool exit = false;
post_open();
postOpen();
while(!exit && !m_forced_exit) {
scan = Ion::Keyboard::scan();

View File

@@ -18,7 +18,7 @@ namespace Bootloader {
static const int k_columns_margin = 5;
virtual void setup() = 0;
virtual void post_open() = 0;
virtual void postOpen() = 0;
enum ColumnType {
DEFAULT,