change changeTo to swapTo

This commit is contained in:
Lightos1
2026-07-05 15:52:11 +02:00
parent 9d6a551455
commit 752a37ed23
18 changed files with 222 additions and 37 deletions

View File

@@ -48,6 +48,35 @@ namespace ams::ldr::hoc::pcv {
u64 dvco_calibration_max;
};
/*
struct CvbCpuDfllData {
u32 tune0_low;
u32 tune0_high;
u32 tune1_low;
u32 tune1_high;
u64 padding;
u64 dvco_calibration_max;
};
struct CpuCvbTable {
u64 socType;
CvbCpuDfllData dfllData;
u64 padding[3];
u64 unk;
u32 tune_high_min_millivolts;
u32 tune_high_margin_millivolts;
u32 vmin;
u32 padding_1[3];
u32 pll_min_millivolts;
u32 vmax;
u32 unkScale;
u32 speedoScale;
u32 voltageScale;
u32 zero;
cvb_entry_t cvb_entry[32];
};
*/
struct __attribute__((packed)) div_nmp {
u8 divn_shift;
u8 divn_width;

View File

@@ -233,6 +233,10 @@ void AboutGui::update()
BaseMenuGui::update();
}
std::string AboutGui::getJumpToItemName() {
return "About";
}
void AboutGui::refresh()
{
BaseMenuGui::refresh();
@@ -321,6 +325,11 @@ class CreditsSubMenu : public AboutGui {
public:
CreditsSubMenu() { }
bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick,
HidAnalogStickState rightJoyStick) override {
return false;
}
protected:
ImageElement* CatImage = NULL;
HideableCategoryHeader* CatHeader = NULL;

View File

@@ -27,6 +27,7 @@ class AboutGui : public BaseMenuGui
{
protected:
char strings[32][32];
std::string getJumpToItemName() override;
public:
AboutGui();

View File

@@ -290,6 +290,11 @@ public:
GovernorProfileSubMenuGui(uint64_t appId, HocClkTitleProfileList* pList, HocClkProfile prof)
: applicationId(appId), profileList(pList), profile(prof) {}
bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick,
HidAnalogStickState rightJoyStick) override {
return false;
}
void listUI() override {
BaseMenuGui::refresh(); // get latest context
if(!this->context)
@@ -445,8 +450,14 @@ void AppProfileGui::listUI()
this->addProfileUI(HocClkProfile_HandheldChargingUSB);
}
std::string jumpItemString = "Edit App Profile";
void AppProfileGui::changeTo(std::uint64_t applicationId)
{
if (applicationId == HOCCLK_GLOBAL_PROFILE_TID) {
jumpItemString = "Edit Global Profile";
}
HocClkTitleProfileList* profileList = new HocClkTitleProfileList;
Result rc = hocclkIpcGetProfiles(applicationId, profileList);
if(R_FAILED(rc))
@@ -456,7 +467,7 @@ void AppProfileGui::changeTo(std::uint64_t applicationId)
return;
}
tsl::changeTo<AppProfileGui>(applicationId, profileList);
tsl::swapTo<AppProfileGui>(applicationId, profileList);
}
void AppProfileGui::update()
@@ -473,4 +484,8 @@ void AppProfileGui::update()
""
);
}
}
std::string AppProfileGui::getJumpToItemName() {
return jumpItemString;
}

View File

@@ -32,6 +32,7 @@ class AppProfileGui : public BaseMenuGui {
protected:
std::uint64_t applicationId;
HocClkTitleProfileList *profileList;
std::string getJumpToItemName() override;
void openFreqChoiceGui(tsl::elm::ListItem *listItem, HocClkProfile profile, HocClkModule module);
void addModuleListItem(HocClkProfile profile, HocClkModule module);
void addModuleListItemToggle(HocClkProfile profile, HocClkModule module);

View File

@@ -27,7 +27,7 @@
#include "../format.h"
#include "base_menu_gui.h"
#include "fatal_gui.h"
#include "main_gui.h"
#define TOP_Y_OFFSET 15
@@ -362,3 +362,18 @@ tsl::elm::Element *BaseMenuGui::baseUI() {
return list;
}
std::string BaseMenuGui::getJumpToItemName() {
return "";
}
bool BaseMenuGui::handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick,
HidAnalogStickState rightJoyStick) {
if (keysDown & KEY_B) {
triggerExitFeedback();
lastItemName = this->getJumpToItemName();
tsl::swapTo<MainGui>();
return true;
}
return false;
}

View File

@@ -31,6 +31,7 @@
class BaseMenuGui : public BaseGui {
protected:
virtual std::string getJumpToItemName();
public:
// u8 dockedHighestAllowedRefreshRate = 60;
HocClkContext *context;
@@ -79,6 +80,8 @@ class BaseMenuGui : public BaseGui {
tsl::elm::Element *baseUI() override;
void refresh() override;
virtual void listUI() = 0;
bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick,
HidAnalogStickState rightJoyStick) override;
u16 headerHeight() const override {
return HOC_BOX_BOTTOM + 9;
}

View File

@@ -55,4 +55,8 @@ class FreqChoiceGui : public BaseMenuGui {
~FreqChoiceGui();
void listUI() override;
bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick,
HidAnalogStickState rightJoyStick) override {
return false;
}
};

View File

@@ -41,7 +41,7 @@ void GlobalOverrideGui::openFreqChoiceGui(HocClkModule module)
FatalGui::openWithResultCode("hocclkIpcGetFreqList", rc);
return;
}
std::map<uint32_t, std::string> labels = {};
if (module == HocClkModule_CPU) {
@@ -103,7 +103,7 @@ void GlobalOverrideGui::addModuleListItemValue(
std::uint32_t step,
const std::string& suffix,
std::uint32_t divisor,
int decimalPlaces,
int decimalPlaces,
ValueThresholds thresholds,
const std::vector<NamedValue>& namedValues,
bool showDefaultValue
@@ -117,9 +117,9 @@ void GlobalOverrideGui::addModuleListItemValue(
tsl::elm::ListItem* listItem =
new tsl::elm::ListItem(hocclkFormatModule(module, true));
listItem->setValue(FREQ_DEFAULT_TEXT);
listItem->setClickListener(
[this,
listItem,
@@ -141,10 +141,10 @@ void GlobalOverrideGui::addModuleListItemValue(
if (!this->context) {
return false;
}
std::uint32_t currentValue =
this->context->overrideFreqs[module] * divisor;
ValueRange range(
min,
max,
@@ -153,22 +153,22 @@ void GlobalOverrideGui::addModuleListItemValue(
divisor,
decimalPlaces
);
this->openValueChoiceGui(
listItem,
currentValue,
range,
categoryName,
[this, listItem, module, divisor, suffix, decimalPlaces, thresholds, namedValues, hasNamedValues, showDefaultValue](std::uint32_t value) -> bool
{
if (!this->context) {
return false;
}
this->context->overrideFreqs[module] = value / divisor;
this->listHz[module] = value / divisor;
if (value == 0) {
listItem->setValue(FREQ_DEFAULT_TEXT);
} else if (hasNamedValues) {
@@ -182,36 +182,36 @@ void GlobalOverrideGui::addModuleListItemValue(
char buf[32];
if (decimalPlaces > 0) {
double displayValue = (double)value / divisor;
snprintf(buf, sizeof(buf), "%.*f%s",
snprintf(buf, sizeof(buf), "%.*f%s",
decimalPlaces, displayValue, suffix.c_str());
} else {
snprintf(buf, sizeof(buf), "%u%s",
snprintf(buf, sizeof(buf), "%u%s",
value / divisor, suffix.c_str());
}
listItem->setValue(buf);
}
Result rc =
hocclkIpcSetOverride(module, this->context->overrideFreqs[module]);
if (R_FAILED(rc))
{
FatalGui::openWithResultCode(
"hocclkIpcSetOverride", rc);
return false;
}
this->lastContextUpdate = armGetSystemTick();
return true;
},
thresholds,
false,
std::map<std::uint32_t, std::string>(),
namedValues,
showDefaultValue
);
return true;
}
else if ((keys & HidNpadButton_Y) == HidNpadButton_Y)
@@ -219,26 +219,26 @@ void GlobalOverrideGui::addModuleListItemValue(
if (!this->context) {
return false;
}
this->context->overrideFreqs[module] = 0;
this->listHz[module] = 0;
listItem->setValue(FREQ_DEFAULT_TEXT);
Result rc = hocclkIpcSetOverride(module, 0);
if (R_FAILED(rc))
{
FatalGui::openWithResultCode("hocclkIpcSetOverride", rc);
return false;
}
this->lastContextUpdate = armGetSystemTick();
return true;
}
return false;
});
this->listElement->addItem(listItem);
this->listItems[module] = listItem;
}
@@ -301,6 +301,11 @@ class GovernorOverrideSubMenuGui : public BaseMenuGui {
public:
GovernorOverrideSubMenuGui(u32 initialPacked) : packed(initialPacked) {}
bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick,
HidAnalogStickState rightJoyStick) override {
return false;
}
void listUI() override {
BaseMenuGui::refresh(); // get latest context
if(!this->context)
@@ -391,23 +396,23 @@ void GlobalOverrideGui::refresh()
if (this->listItems[m] != nullptr &&
this->listHz[m] != this->context->overrideFreqs[m]) {
auto it = this->customFormatModules.find((HocClkModule)m);
if (it != this->customFormatModules.end()) {
std::string suffix = std::get<0>(it->second);
std::uint32_t divisor = std::get<1>(it->second);
int decimalPlaces = std::get<2>(it->second);
if (this->context->overrideFreqs[m] == 0) {
this->listItems[m]->setValue(FREQ_DEFAULT_TEXT);
} else {
char buf[32];
if (decimalPlaces > 0) {
double displayValue = (double)this->context->overrideFreqs[m] / divisor;
snprintf(buf, sizeof(buf), "%.*f%s",
snprintf(buf, sizeof(buf), "%.*f%s",
decimalPlaces, displayValue, suffix.c_str());
} else {
snprintf(buf, sizeof(buf), "%u%s",
snprintf(buf, sizeof(buf), "%u%s",
this->context->overrideFreqs[m] / divisor, suffix.c_str());
}
this->listItems[m]->setValue(buf);
@@ -418,8 +423,12 @@ void GlobalOverrideGui::refresh()
? formatListFreqHzMem(this->context->overrideFreqs[m], (RamDisplayUnit)configList.values[HocClkConfigValue_RamDisplayUnit])
: formatListFreqHz(this->context->overrideFreqs[m]));
}
this->listHz[m] = this->context->overrideFreqs[m];
}
}
}
}
std::string GlobalOverrideGui::getJumpToItemName() {
return "Temporary Overrides";
}

View File

@@ -33,6 +33,7 @@
#include "value_choice_gui.h"
class GlobalOverrideGui : public BaseMenuGui {
protected:
std::string getJumpToItemName() override;
std::map<HocClkModule, std::tuple<std::string, std::uint32_t, int>> customFormatModules;
tsl::elm::ListItem *listItems[HocClkModule_EnumMax];
std::uint32_t listHz[HocClkModule_EnumMax];

View File

@@ -26,6 +26,10 @@ class InfoGui : public BaseMenuGui {
InfoGui(std::string title, std::vector<std::string> strings);
~InfoGui() = default;
void listUI() override;
bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick,
HidAnalogStickState rightJoyStick) override {
return false;
}
private:
std::string m_title;

View File

@@ -24,6 +24,7 @@
* --------------------------------------------------------------------------
*/
#include <string>
#include "about_gui.h"
#include "app_profile_gui.h"
#include "fatal_gui.h"
@@ -40,6 +41,8 @@ tsl::elm::Element *MainGui::baseUI() {
return list;
}
std::string lastItemName;
void MainGui::listUI() {
// this->enabledToggle = new tsl::elm::ToggleListItem("Enable", false);
// enabledToggle->setStateChangedListener([this](bool state) {
@@ -79,7 +82,7 @@ void MainGui::listUI() {
tsl::elm::ListItem *globalOverrideItem = new tsl::elm::ListItem("Temporary Overrides");
globalOverrideItem->setClickListener([this](u64 keys) {
if ((keys & HidNpadButton_A) == HidNpadButton_A && this->context) {
tsl::changeTo<GlobalOverrideGui>();
tsl::swapTo<GlobalOverrideGui>();
return true;
}
@@ -92,7 +95,7 @@ void MainGui::listUI() {
tsl::elm::ListItem *miscItem = new tsl::elm::ListItem("Settings");
miscItem->setClickListener([this](u64 keys) {
if ((keys & HidNpadButton_A) == HidNpadButton_A && this->context) {
tsl::changeTo<MiscGui>();
tsl::swapTo<MiscGui>();
return true;
}
@@ -103,7 +106,7 @@ void MainGui::listUI() {
tsl::elm::ListItem *aboutItem = new tsl::elm::ListItem("About");
aboutItem->setClickListener([this](u64 keys) {
if ((keys & HidNpadButton_A) == HidNpadButton_A && this->context) {
tsl::changeTo<AboutGui>();
tsl::swapTo<AboutGui>();
return true;
}
@@ -114,7 +117,7 @@ void MainGui::listUI() {
tsl::elm::ListItem *updateItem = new tsl::elm::ListItem("Updates");
updateItem->setClickListener([this](u64 keys) {
if ((keys & HidNpadButton_A) == HidNpadButton_A && this->context) {
tsl::changeTo<UpdateGui>();
tsl::swapTo<UpdateGui>();
return true;
}
@@ -122,6 +125,11 @@ void MainGui::listUI() {
});
this->listElement->addItem(updateItem);
if (!lastItemName.empty()) {
this->listElement->jumpToItem(lastItemName);
}
lastItemName = "";
}
void MainGui::refresh() {
@@ -131,3 +139,4 @@ void MainGui::refresh() {
// this->enabledToggle->setState(this->context->enabled);
// }
}

View File

@@ -28,6 +28,8 @@
#include "base_menu_gui.h"
extern std::string lastItemName;
class MainGui : public BaseMenuGui {
public:
MainGui() {
@@ -40,4 +42,9 @@ class MainGui : public BaseMenuGui {
u16 headerHeight() const override {
return HOC_HEADER_HEIGHT - 25;
}
bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick,
HidAnalogStickState rightJoyStick) override {
return false;
}
};

View File

@@ -26,7 +26,7 @@
#include "labels.h"
#include "misc_gui.h"
#include "ult_ext.h"
#include "main_gui.h"
// This workaround *may* not be nessasary, but it seems to help with reducing stutter
static void kipDataThreadFunc(void *) {
@@ -742,6 +742,11 @@ class GeneralSettingsSubMenuGui : public MiscGui {
GeneralSettingsSubMenuGui() {
}
bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick,
HidAnalogStickState rightJoyStick) override {
return false;
}
protected:
void listUI() override {
Result rc = hocclkIpcGetConfigValues(this->configList);
@@ -792,6 +797,11 @@ class ExperimentalSettingsSubMenuGui : public MiscGui {
ExperimentalSettingsSubMenuGui() {
}
bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick,
HidAnalogStickState rightJoyStick) override {
return false;
}
protected:
void listUI() override {
Result rc = hocclkIpcGetConfigValues(this->configList);
@@ -906,6 +916,11 @@ class GovernorSettingsSubMenuGui : public MiscGui {
GovernorSettingsSubMenuGui() {
}
bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick,
HidAnalogStickState rightJoyStick) override {
return false;
}
protected:
void listUI() override {
Result rc = hocclkIpcGetConfigValues(this->configList);
@@ -931,6 +946,11 @@ class DisplaySubMenuGui : public MiscGui {
DisplaySubMenuGui() {
}
bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick,
HidAnalogStickState rightJoyStick) override {
return false;
}
protected:
void listUI() override {
Result rc = hocclkIpcGetConfigValues(this->configList);
@@ -980,6 +1000,11 @@ class SafetySubMenuGui : public MiscGui {
SafetySubMenuGui() {
}
bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick,
HidAnalogStickState rightJoyStick) override {
return false;
}
protected:
void listUI() override {
Result rc = hocclkIpcGetConfigValues(this->configList);
@@ -1004,6 +1029,11 @@ class RamSubmenuGui : public MiscGui {
RamSubmenuGui() {
}
bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick,
HidAnalogStickState rightJoyStick) override {
return false;
}
protected:
void listUI() override {
BaseMenuGui::refresh();
@@ -1239,6 +1269,11 @@ class RamTimingsSubmenuGui : public MiscGui {
RamTimingsSubmenuGui() {
}
bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick,
HidAnalogStickState rightJoyStick) override {
return false;
}
protected:
void listUI() override {
Result rc = hocclkIpcGetConfigValues(this->configList);
@@ -1486,6 +1521,11 @@ class RamLatenciesSubmenuGui : public MiscGui {
RamLatenciesSubmenuGui() {
}
bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick,
HidAnalogStickState rightJoyStick) override {
return false;
}
tsl::elm::Element *baseUI() override {
auto *list = new TopAnchoredList();
this->listElement = list;
@@ -1987,6 +2027,11 @@ class CpuSubmenuGui : public MiscGui {
CpuSubmenuGui() {
}
bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick,
HidAnalogStickState rightJoyStick) override {
return false;
}
protected:
void listUI() override {
Result rc = hocclkIpcGetConfigValues(this->configList); // populate config list early otherwise wont work
@@ -2145,6 +2190,11 @@ class GpuSubmenuGui : public MiscGui {
GpuSubmenuGui() {
}
bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick,
HidAnalogStickState rightJoyStick) override {
return false;
}
protected:
void listUI() override {
Result rc = hocclkIpcGetConfigValues(this->configList);
@@ -2290,6 +2340,11 @@ class GpuCustomTableSubmenuGui : public MiscGui {
GpuCustomTableSubmenuGui() {
}
bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick,
HidAnalogStickState rightJoyStick) override {
return false;
}
protected:
void listUI() override {
@@ -2525,6 +2580,11 @@ class SocCustomTableSubmenuGui : public MiscGui {
public:
SocCustomTableSubmenuGui() {}
bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick,
HidAnalogStickState rightJoyStick) override {
return false;
}
protected:
void listUI() override {
@@ -2672,3 +2732,7 @@ void MiscGui::refresh() {
}
}
}
std::string MiscGui::getJumpToItemName() {
return "Settings";
}

View File

@@ -67,4 +67,5 @@ class MiscGui : public BaseMenuGui {
tsl::elm::ToggleListItem *enabledToggle;
u8 frameCounter = 60;
bool shouldSaveKip = false;
std::string getJumpToItemName() override;
};

View File

@@ -267,5 +267,10 @@ bool UpdateGui::handleInput(u64 keysDown, u64 keysHeld,
requestCancel();
return true;
}
return false;
return BaseMenuGui::handleInput(keysDown, keysHeld, touchPos, leftJoy, rightJoy);
}
std::string UpdateGui::getJumpToItemName() {
return "Updates";
}

View File

@@ -77,4 +77,7 @@ private:
tsl::elm::ListItem *m_items[2] = {nullptr, nullptr};
UpdateStatusPanel *m_status = nullptr;
protected:
std::string getJumpToItemName() override;
};

View File

@@ -101,4 +101,9 @@ class ValueChoiceGui : public BaseMenuGui {
}
void listUI() override;
bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick,
HidAnalogStickState rightJoyStick) override {
return false;
}
};