re-add sys-clk manager, default to mtc auto adj (others are useless), new gpu table for erista units, custom sys-clk updates
This commit is contained in:
souldbminersmwc
2025-09-18 22:20:44 -04:00
parent f3eae72b47
commit 342f9dd116
203 changed files with 55075 additions and 189 deletions

View File

@@ -37,7 +37,7 @@ include ${TOPDIR}/lib/libultrahand/ultrahand.mk
# version control constants
#---------------------------------------------------------------------------------
#TARGET_VERSION := $(shell git describe --dirty --always --tags)
APP_VERSION := 1.0.0-ocs2
APP_VERSION := 1.0.1
TARGET_VERSION := $(APP_VERSION)
#---------------------------------------------------------------------------------

View File

@@ -22,12 +22,12 @@
"Docked": "Gedockt",
"Handheld": "Handheld",
"Charging": "Lädt",
"Official Charger": "Offizielles Ladegerät",
"PD Charger": "Offizielles Ladegerät",
"USB Charger": "USB-Ladegerät",
"Docked   Reset": "Gedockt   Reset",
"Handheld   Reset": "Handheld   Reset",
"Charging   Reset": "Lädt   Reset",
"Official Charger   Reset": "Offizielles Ladegerät   Reset",
"PD Charger   Reset": "Offizielles Ladegerät   Reset",
"USB Charger   Reset": "USB-Ladegerät   Reset",
"Memory": "Speicher",
"Do not override": "Nicht überschreiben",

View File

@@ -22,12 +22,12 @@
"Docked": "Docked",
"Handheld": "Handheld",
"Charging": "Charging",
"Official Charger": "Official Charger",
"PD Charger": "PD Charger",
"USB Charger": "USB Charger",
"Docked   Reset": "Docked   Reset",
"Handheld   Reset": "Handheld   Reset",
"Charging   Reset": "Charging   Reset",
"Official Charger   Reset": "Official Charger   Reset",
"PD Charger   Reset": "PD Charger   Reset",
"USB Charger   Reset": "USB Charger   Reset",
"Memory": "Memory",
"Do not override": "Do not overrride",

View File

@@ -22,12 +22,12 @@
"Docked": "Conectado al dock",
"Handheld": "Portátil",
"Charging": "Cargando",
"Official Charger": "Cargador oficial",
"PD Charger": "Cargador oficial",
"USB Charger": "Cargador USB",
"Docked   Reset": "Conectado al dock   Reiniciar",
"Handheld   Reset": "Portátil   Reiniciar",
"Charging   Reset": "Cargando   Reiniciar",
"Official Charger   Reset": "Cargador oficial   Reiniciar",
"PD Charger   Reset": "Cargador oficial   Reiniciar",
"USB Charger   Reset": "Cargador USB   Reiniciar",
"Memory": "Memoria",
"Do not override": "No sobrescribir",

View File

@@ -22,12 +22,12 @@
"Docked": "Ancré",
"Handheld": "Portable",
"Charging": "En charge",
"Official Charger": "Chargeur off.",
"PD Charger": "Chargeur off.",
"USB Charger": "Chargeur USB",
"Docked   Reset": "Ancré   Réinitialiser",
"Handheld   Reset": "Portable   Réinitialiser",
"Charging   Reset": "En charge   Réinitialiser",
"Official Charger   Reset": "Chargeur off.   Réinitialiser",
"PD Charger   Reset": "Chargeur off.   Réinitialiser",
"USB Charger   Reset": "Chargeur USB   Réinitialiser",
"Memory": "Mémoire",
"Do not override": "Ne pas remplacer",

View File

@@ -22,12 +22,12 @@
"Docked": "In modalità dock",
"Handheld": "Portatile",
"Charging": "In carica",
"Official Charger": "Caricatore ufficiale",
"PD Charger": "Caricatore ufficiale",
"USB Charger": "Caricatore USB",
"Docked   Reset": "In modalità dock   Reimposta",
"Handheld   Reset": "Portatile   Reimposta",
"Charging   Reset": "In carica   Reimposta",
"Official Charger   Reset": "Caricatore ufficiale   Reimposta",
"PD Charger   Reset": "Caricatore ufficiale   Reimposta",
"USB Charger   Reset": "Caricatore USB   Reimposta",
"Memory": "Memoria",
"Do not override": "Non sovrascrivere",

View File

@@ -22,12 +22,12 @@
"Docked": "ドックモード",
"Handheld": "携帯モード",
"Charging": "充電中",
"Official Charger": "公式充電器",
"PD Charger": "公式充電器",
"USB Charger": "USB充電器",
"Docked   Reset": "ドックモード   リセット",
"Handheld   Reset": "携帯モード   リセット",
"Charging   Reset": "充電中   リセット",
"Official Charger   Reset": "公式充電器   リセット",
"PD Charger   Reset": "公式充電器   リセット",
"USB Charger   Reset": "USB充電器   リセット",
"Memory": "メモリ",
"Do not override": "オーバーライドしない",

View File

@@ -22,12 +22,12 @@
"Docked": "독 모드",
"Handheld": "휴대 모드",
"Charging": "충전 중",
"Official Charger": "공식 충전기",
"PD Charger": "공식 충전기",
"USB Charger": "USB 충전기",
"Docked   Reset": "독 모드   리셋",
"Handheld   Reset": "휴대 모드   리셋",
"Charging   Reset": "충전 중   리셋",
"Official Charger   Reset": "공식 충전기   리셋",
"PD Charger   Reset": "공식 충전기   리셋",
"USB Charger   Reset": "USB 충전기   리셋",
"Memory": "메모리",
"Do not override": "오버라이드 안 함",

View File

@@ -22,12 +22,12 @@
"Docked": "In dockingstation",
"Handheld": "Handheld",
"Charging": "Bezig met opladen",
"Official Charger": "Officiële oplader",
"PD Charger": "Officiële oplader",
"USB Charger": "USB-oplader",
"Docked   Reset": "In dockingstation   Resetten",
"Handheld   Reset": "Handheld   Resetten",
"Charging   Reset": "Bezig met opladen   Resetten",
"Official Charger   Reset": "Officiële oplader   Resetten",
"PD Charger   Reset": "Officiële oplader   Resetten",
"USB Charger   Reset": "USB-oplader   Resetten",
"Memory": "Geheugen",
"Do not override": "Niet overschrijven",

View File

@@ -22,12 +22,12 @@
"Docked": "W dokowaniu",
"Handheld": "Tryb przenośny",
"Charging": "Ładowanie",
"Official Charger": "Oficjalna ładowarka",
"PD Charger": "Oficjalna ładowarka",
"USB Charger": "Ładowarka USB",
"Docked   Reset": "W dokowaniu   Resetuj",
"Handheld   Reset": "Tryb przenośny   Resetuj",
"Charging   Reset": "Ładowanie   Resetuj",
"Official Charger   Reset": "Oficjalna ładowarka   Resetuj",
"PD Charger   Reset": "Oficjalna ładowarka   Resetuj",
"USB Charger   Reset": "Ładowarka USB   Resetuj",
"Memory": "Pamięć",
"Do not override": "Nie nadpisuj",

View File

@@ -22,12 +22,12 @@
"Docked": "Acoplado",
"Handheld": "Portátil",
"Charging": "Carregando",
"Official Charger": "Carreg. of.",
"PD Charger": "Carreg. of.",
"USB Charger": "Carregador USB",
"Docked   Reset": "Acoplado   Reiniciar",
"Handheld   Reset": "Portátil   Reiniciar",
"Charging   Reset": "Carregando   Reiniciar",
"Official Charger   Reset": "Carreg. of.   Reiniciar",
"PD Charger   Reset": "Carreg. of.   Reiniciar",
"USB Charger   Reset": "Carregador USB   Reiniciar",
"Memory": "Memória",
"Do not override": "Não substituir",

View File

@@ -22,12 +22,12 @@
"Docked": "В доке",
"Handheld": "Портатив",
"Charging": "На зарядке",
"Official Charger": "Офиц. зарядка",
"PD Charger": "Офиц. зарядка",
"USB Charger": "USB зарядка",
"Docked   Reset": "В доке   Сброс",
"Handheld   Reset": "Портатив   Сброс",
"Charging   Reset": "На зарядке   Сброс",
"Official Charger   Reset": "Офиц. зарядка   Сброс",
"PD Charger   Reset": "Офиц. зарядка   Сброс",
"USB Charger   Reset": "USB зарядка   Сброс",
"Memory": "RAM",
"Do not override": "По умолчанию",

View File

@@ -22,12 +22,12 @@
"Docked": "У доку",
"Handheld": "Портативний",
"Charging": "Зарядка",
"Official Charger": "Оф. зарядка",
"PD Charger": "Оф. зарядка",
"USB Charger": "USB зарядка",
"Docked   Reset": "У доку   Скидання",
"Handheld   Reset": "Портативний   Скидання",
"Charging   Reset": "Зарядка   Скидання",
"Official Charger   Reset": "Оф. зарядка   Скидання",
"PD Charger   Reset": "Оф. зарядка   Скидання",
"USB Charger   Reset": "USB зарядка   Скидання",
"Memory": "Пам’ять",
"Do not override": "Не змінювати",

View File

@@ -22,12 +22,12 @@
"Docked": "底座模式",
"Handheld": "手持模式",
"Charging": "充电中",
"Official Charger": "官方充电器",
"PD Charger": "官方充电器",
"USB Charger": "USB充电器",
"Docked   Reset": "底座模式   重置",
"Handheld   Reset": "手持模式   重置",
"Charging   Reset": "充电中   重置",
"Official Charger   Reset": "官方充电器   重置",
"PD Charger   Reset": "官方充电器   重置",
"USB Charger   Reset": "USB充电器   重置",
"Memory": "内存",
"Do not override": "不覆盖",

View File

@@ -22,12 +22,12 @@
"Docked": "座充模式",
"Handheld": "手持模式",
"Charging": "充電中",
"Official Charger": "官方充電器",
"PD Charger": "官方充電器",
"USB Charger": "USB充電器",
"Docked   Reset": "座充模式   重置",
"Handheld   Reset": "手持模式   重置",
"Charging   Reset": "充電中   重置",
"Official Charger   Reset": "官方充電器   重置",
"PD Charger   Reset": "官方充電器   重置",
"USB Charger   Reset": "USB充電器   重置",
"Memory": "記憶體",
"Do not override": "不覆蓋",

View File

@@ -14,17 +14,14 @@
#include "logo_rgba_bin.h"
#define LOGO_WIDTH 110
#define LOGO_HEIGHT 39
#define LOGO_X 18
#define LOGO_Y 21
#define LOGO_LABEL_X (LOGO_X + LOGO_WIDTH + 6)
#define LOGO_LABEL_Y 50
#define LOGO_LABEL_FONT_SIZE 28
#define VERSION_X (LOGO_LABEL_X + 110+8)
#define VERSION_Y LOGO_LABEL_Y-4
#define LOGO_X 20
#define LOGO_Y 45
#define LOGO_LABEL_FONT_SIZE 35
#define VERSION_X (LOGO_X + 250)
#define VERSION_Y LOGO_Y-40
#define VERSION_FONT_SIZE 15
std::string getVersionString() {
@@ -38,9 +35,9 @@ std::string getVersionString() {
void BaseGui::preDraw(tsl::gfx::Renderer* renderer)
{
renderer->drawBitmap(LOGO_X, LOGO_Y, LOGO_WIDTH, LOGO_HEIGHT, logo_rgba_bin);
renderer->drawString("overlay", false, LOGO_LABEL_X, LOGO_LABEL_Y, LOGO_LABEL_FONT_SIZE, renderer->a(TEXT_COLOR));
renderer->drawString(TARGET_VERSION, false, VERSION_X, VERSION_Y, VERSION_FONT_SIZE, tsl::bannerVersionTextColor);
// renderer->drawBitmap(LOGO_X, LOGO_Y, LOGO_WIDTH, LOGO_HEIGHT, logo_rgba_bin);
renderer->drawString("sys-clk-ocs2 overlay", false, LOGO_X, LOGO_Y, LOGO_LABEL_FONT_SIZE, renderer->a(TEXT_COLOR));
// renderer->drawString(TARGET_VERSION, false, VERSION_X, VERSION_Y, VERSION_FONT_SIZE, tsl::bannerVersionTextColor);
}
tsl::elm::Element* BaseGui::createUI()

View File

@@ -41,7 +41,7 @@ void BaseMenuGui::preDraw(tsl::gfx::Renderer* renderer) {
// All constants pre-calculated and cached
static constexpr const char* const labels[10] = {
"App ID", "Profile", "CPU", "GPU", "MEM", "SOC", "PCB", "Skin", "Now", "Avg"
"App ID", "Profile", "CPU", "GPU", "MEM", "SoC", "Board", "Skin", "Now", "Avg"
};
static constexpr u32 dataPositions[6] = {63-3+3, 200-1, 344-1-3, 200-1, 342-1, 321-1};
@@ -57,7 +57,7 @@ void BaseMenuGui::preDraw(tsl::gfx::Renderer* renderer) {
}
static u32 positions[10] = {24-1, 310-labelWidths[1], 24-1, 192-labelWidths[3], 332-labelWidths[4], 24-1, 192 - labelWidths[6], 332-labelWidths[7], 192 - labelWidths[8], 332-labelWidths[9]};
static u32 maxProfileValueWidth = renderer->getTextDimensions("Official Charger", false, SMALL_TEXT_SIZE).first; // longest word
static u32 maxProfileValueWidth = renderer->getTextDimensions("PD Charger", false, SMALL_TEXT_SIZE).first; // longest word
u32 y = 91;
@@ -243,9 +243,9 @@ void BaseMenuGui::refresh()
sprintf(displayStrings[7], "%u.%u MHz", hz / 1000000U, (hz / 100000U) % 10U);
// Voltages
sprintf(displayStrings[8], "%u mV", cpuVoltageUv / 1000U);
sprintf(displayStrings[9], "%u mV", gpuVoltageUv / 1000U);
sprintf(displayStrings[8], "%.1f mV", cpuVoltageUv / 1000.0);
sprintf(displayStrings[9], "%.1f mV", gpuVoltageUv / 1000.0);
// Memory voltage (handle VDD case)
if (emcVoltageUv && vddVoltageUv) {
//sprintf(displayStrings[10], "%u%u mV", vddVoltageUv / 1000U, emcVoltageUv / 1000U);

View File

@@ -23,7 +23,7 @@ void FatalGui::openWithResultCode(std::string tag, Result rc)
info.append(rcStr, snprintf(rcStr, sizeof(rcStr), "\n\n[0x%x] %04d-%04d", rc, R_MODULE(rc), R_DESCRIPTION(rc)));
tsl::changeTo<FatalGui>(
"Could not connect to sys-clk.\n\n"
"Could not connect to sys-clk-ocs2 sysmodule.\n\n"
"\n"
"Please make sure everything is\n\n"
"correctly installed and enabled.",

View File

@@ -8,60 +8,124 @@
* --------------------------------------------------------------------------
*/
#include "freq_choice_gui.h"
#include "freq_choice_gui.h"
#include "../format.h"
#include "fatal_gui.h"
#include "../format.h"
#include "fatal_gui.h"
FreqChoiceGui::FreqChoiceGui(std::uint32_t selectedHz, std::uint32_t *hzList, std::uint32_t hzCount, SysClkModule module, FreqChoiceListener listener)
{
this->selectedHz = selectedHz;
this->hzList = hzList;
this->hzCount = hzCount;
this->module = module; // Add this
this->listener = listener;
}
tsl::elm::ListItem* FreqChoiceGui::createFreqListItem(std::uint32_t hz, bool selected, int safety)
{
std::string text = formatListFreqHz(hz);
if (selected) text += " \uE14B";
tsl::elm::ListItem* listItem = new tsl::elm::ListItem(text, "", false);
switch (safety)
{
case 0:
listItem->setTextColor(tsl::Color(255, 255, 255, 255));
listItem->setValueColor(tsl::Color(255, 255, 255, 255));
break;
case 1:
listItem->setTextColor(tsl::Color(255, 165, 0, 255));
listItem->setValueColor(tsl::Color(255, 165, 0, 255));
break;
case 2:
listItem->setTextColor(tsl::Color(255, 0, 0, 255));
listItem->setValueColor(tsl::Color(255, 0, 0, 255));
break;
}
listItem->setClickListener([this, hz](u64 keys)
{
if ((keys & HidNpadButton_A) == HidNpadButton_A && this->listener) {
if (this->listener(hz)) {
tsl::goBack();
}
return true;
}
return false;
});
return listItem;
}
void FreqChoiceGui::listUI()
{
// Add CategoryHeader based on module
std::string moduleName = sysclkFormatModule(this->module, false);
this->listElement->addItem(new tsl::elm::CategoryHeader(moduleName));
this->listElement->addItem(this->createFreqListItem(0, this->selectedHz == 0, false));
std::uint32_t hz;
for (std::uint32_t i = 0; i < this->hzCount; i++)
{
hz = this->hzList[i];
uint32_t mhz = hz / 1000000;
// Skip 204 MHz exactly
if (moduleName == "mem" && mhz <= 600)
{
continue;
}
uint32_t unsafe_cpu;
uint32_t unsafe_gpu;
uint32_t danger_cpu;
uint32_t danger_gpu;
if (IsMariko())
{
unsafe_cpu = 1964;
unsafe_gpu = 1153;
danger_cpu = 2398;
danger_gpu = 1306;
}
else
{
unsafe_cpu = 1786;
unsafe_gpu = 922;
danger_cpu = 2092;
danger_gpu = 999;
}
FreqChoiceGui::FreqChoiceGui(std::uint32_t selectedHz, std::uint32_t* hzList, std::uint32_t hzCount, SysClkModule module, FreqChoiceListener listener)
{
this->selectedHz = selectedHz;
this->hzList = hzList;
this->hzCount = hzCount;
this->module = module; // Add this
this->listener = listener;
}
tsl::elm::ListItem* FreqChoiceGui::createFreqListItem(std::uint32_t hz, bool selected)
{
tsl::elm::ListItem* listItem = new tsl::elm::ListItem(formatListFreqHz(hz), "", true);
listItem->setValue(selected ? "\uE14B" : "");
listItem->setClickListener([this, hz](u64 keys) {
if((keys & HidNpadButton_A) == HidNpadButton_A && this->listener)
{
if(this->listener(hz))
{
tsl::goBack();
}
return true;
}
return false;
});
return listItem;
}
void FreqChoiceGui::listUI()
{
// Add CategoryHeader based on module
std::string moduleName = sysclkFormatModule(this->module, true);
this->listElement->addItem(new tsl::elm::CategoryHeader(moduleName));
this->listElement->addItem(this->createFreqListItem(0, this->selectedHz == 0));
std::uint32_t hz;
for(std::uint32_t i = 0; i < this->hzCount; i++) {
hz = this->hzList[i];
// Skip 204 MHz exactly
if(moduleName == "Memory" && hz == 204000000) {
if (moduleName == "cpu") {
if (mhz >= danger_cpu) {
this->listElement->addItem(this->createFreqListItem(hz, mhz == this->selectedHz / 1000000, 2));
continue;
}
if (mhz >= unsafe_cpu) {
this->listElement->addItem(this->createFreqListItem(hz, mhz == this->selectedHz / 1000000, 1));
continue;
}
if (mhz <= unsafe_cpu) {
this->listElement->addItem(this->createFreqListItem(hz, mhz == this->selectedHz / 1000000, 0));
continue;
}
} else if (moduleName == "gpu") {
if (mhz >= danger_gpu) {
this->listElement->addItem(this->createFreqListItem(hz, mhz == this->selectedHz / 1000000, 2));
continue;
}
if (mhz >= unsafe_gpu) {
this->listElement->addItem(this->createFreqListItem(hz, mhz == this->selectedHz / 1000000, 1));
continue;
}
if (mhz <= unsafe_gpu) {
this->listElement->addItem(this->createFreqListItem(hz, mhz == this->selectedHz / 1000000, 0));
continue;
}
} else if (moduleName == "mem") {
this->listElement->addItem(this->createFreqListItem(hz, mhz == this->selectedHz / 1000000, 0));
continue;
}
// if(moduleName == "GPU") {
// if(BaseGui::isMariko() && is)
// continue;
// }
this->listElement->addItem(this->createFreqListItem(hz, (hz / 1000000) == (this->selectedHz / 1000000)));
}
this->listElement->jumpToItem("", "");
}
}
}
this->listElement->jumpToItem("", "");
}

View File

@@ -26,7 +26,7 @@ class FreqChoiceGui : public BaseMenuGui
std::uint32_t hzCount;
SysClkModule module; // Added
FreqChoiceListener listener;
tsl::elm::ListItem* createFreqListItem(std::uint32_t hz, bool selected);
tsl::elm::ListItem* createFreqListItem(std::uint32_t hz, bool selected, int safety);
public:
FreqChoiceGui(std::uint32_t selectedHz, std::uint32_t* hzList, std::uint32_t hzCount, SysClkModule module, FreqChoiceListener listener);

View File

@@ -28,7 +28,7 @@ void MainGui::listUI()
this->lastContextUpdate = armGetSystemTick();
this->context->enabled = state;
});
this->listElement->addItem(this->enabledToggle);
// this->listElement->addItem(this->enabledToggle);
tsl::elm::ListItem* appProfileItem = new tsl::elm::ListItem("Edit App Profile");
appProfileItem->setClickListener([this](u64 keys) {

View File

@@ -179,8 +179,6 @@ int MiscGui::getConfigIntValue(const std::string& iniKey, int defaultValue)
return defaultValue;
}
SysClkIpcToggleUncappedClocks(SysClkModule_CPU, g_freq_table_hz[SysClkModule_CPU][result])
void MiscGui::setConfigValue(const std::string& iniKey, bool value)
{
if(iniKey == "uncapped_clocks") {