diff --git a/Source/Horizon-OC-Monitor/source/Utils.hpp b/Source/Horizon-OC-Monitor/source/Utils.hpp index 8e458b87..ef38323c 100644 --- a/Source/Horizon-OC-Monitor/source/Utils.hpp +++ b/Source/Horizon-OC-Monitor/source/Utils.hpp @@ -83,7 +83,7 @@ Result nvdecCheck = 1; Result nvencCheck = 1; Result nvjpgCheck = 1; Result nifmCheck = 1; -Result sysclkCheck = 1; +Result sysclkCheck = 0; Result pwmDutyCycleCheck = 1; //Wi-Fi @@ -572,21 +572,19 @@ void Misc(void*) { } // Get sys-clk data - if (R_SUCCEEDED(sysclkCheck)) { - SysClkContext sysclkCTX; - if (R_SUCCEEDED(sysclkIpcGetCurrentContext(&sysclkCTX))) { - realCPU_Hz = sysclkCTX.realFreqs[SysClkModule_CPU]; - realGPU_Hz = sysclkCTX.realFreqs[SysClkModule_GPU]; - realRAM_Hz = sysclkCTX.realFreqs[SysClkModule_MEM]; - partLoad[SysClkPartLoad_EMC] = sysclkCTX.partLoad[SysClkPartLoad_EMC]; - partLoad[SysClkPartLoad_EMCCpu] = sysclkCTX.partLoad[SysClkPartLoad_EMCCpu]; - - realCPU_mV = sysclkCTX.voltages[HocClkVoltage_CPU]; - realGPU_mV = sysclkCTX.voltages[HocClkVoltage_GPU]; - realVDD2_mV = sysclkCTX.voltages[HocClkVoltage_EMCVDD2]; - realVDDQ_mV = sysclkCTX.voltages[HocClkVoltage_EMCVDDQ_MarikoOnly]; - realSOC_mV = sysclkCTX.voltages[HocClkVoltage_SOC]; - } + SysClkContext sysclkCTX; + if (R_SUCCEEDED(sysclkIpcGetCurrentContext(&sysclkCTX))) { + realCPU_Hz = sysclkCTX.realFreqs[SysClkModule_CPU]; + realGPU_Hz = sysclkCTX.realFreqs[SysClkModule_GPU]; + realRAM_Hz = sysclkCTX.realFreqs[SysClkModule_MEM]; + partLoad[SysClkPartLoad_EMC] = sysclkCTX.partLoad[SysClkPartLoad_EMC]; + partLoad[SysClkPartLoad_EMCCpu] = sysclkCTX.partLoad[SysClkPartLoad_EMCCpu]; + + realCPU_mV = sysclkCTX.voltages[HocClkVoltage_CPU]; + realGPU_mV = sysclkCTX.voltages[HocClkVoltage_GPU]; + realVDD2_mV = sysclkCTX.voltages[HocClkVoltage_EMCVDD2]; + realVDDQ_mV = sysclkCTX.voltages[HocClkVoltage_EMCVDDQ_MarikoOnly]; + realSOC_mV = sysclkCTX.voltages[HocClkVoltage_SOC]; } // Temperatures @@ -699,21 +697,7 @@ void Misc3(void*) { do { mutexLock(&mutex_Misc); - - // Get sys-clk data - if (R_SUCCEEDED(sysclkCheck)) { - SysClkContext sysclkCTX; - if (R_SUCCEEDED(sysclkIpcGetCurrentContext(&sysclkCTX))) { - partLoad[SysClkPartLoad_EMC] = sysclkCTX.partLoad[SysClkPartLoad_EMC]; - partLoad[SysClkPartLoad_EMCCpu] = sysclkCTX.partLoad[SysClkPartLoad_EMCCpu]; - - realCPU_mV = sysclkCTX.voltages[HocClkVoltage_CPU]; - realGPU_mV = sysclkCTX.voltages[HocClkVoltage_GPU]; - realSOC_mV = sysclkCTX.voltages[HocClkVoltage_SOC]; - realVDD2_mV = sysclkCTX.voltages[HocClkVoltage_EMCVDD2]; - realVDDQ_mV = sysclkCTX.voltages[HocClkVoltage_EMCVDDQ_MarikoOnly]; - } - } + // Temperatures if (R_SUCCEEDED(i2cCheck)) { Tmp451GetSocTemp(&SOC_temperatureF); diff --git a/Source/Horizon-OC-Monitor/source/main.cpp b/Source/Horizon-OC-Monitor/source/main.cpp index 59fde40d..bc38ebe0 100644 --- a/Source/Horizon-OC-Monitor/source/main.cpp +++ b/Source/Horizon-OC-Monitor/source/main.cpp @@ -446,14 +446,6 @@ public: if (SaltySD) { LoadSharedMemoryAndRefreshRate(); } - if (sysclkIpcRunning() && R_SUCCEEDED(sysclkIpcInitialize())) { - uint32_t sysClkApiVer = 0; - sysclkIpcGetAPIVersion(&sysClkApiVer); - if (sysClkApiVer < 4) { - sysclkIpcExit(); - } - else sysclkCheck = 0; - } if (R_SUCCEEDED(splInitialize())) { u64 sku = 0; splGetConfig(SplConfigItem_HardwareType, &sku); @@ -473,9 +465,7 @@ public: virtual void exitServices() override { CloseThreads(); - if (R_SUCCEEDED(sysclkCheck)) { - sysclkIpcExit(); - } + sysclkIpcExit(); shmemClose(&_sharedmemory); //Exit services clkrstExit(); @@ -530,14 +520,6 @@ public: if (SaltySD) { LoadSharedMemory(); } - if (sysclkIpcRunning() && R_SUCCEEDED(sysclkIpcInitialize())) { - uint32_t sysClkApiVer = 0; - sysclkIpcGetAPIVersion(&sysClkApiVer); - if (sysClkApiVer < 4) { - sysclkIpcExit(); - } - else sysclkCheck = 0; - } if (R_SUCCEEDED(splInitialize())) { u64 sku = 0; splGetConfig(SplConfigItem_HardwareType, &sku); @@ -557,9 +539,7 @@ public: virtual void exitServices() override { CloseThreads(); shmemClose(&_sharedmemory); - if (R_SUCCEEDED(sysclkCheck)) { - sysclkIpcExit(); - } + sysclkIpcExit(); //Exit services clkrstExit(); pcvExit(); @@ -617,14 +597,6 @@ public: if (SaltySD) { LoadSharedMemory(); } - if (sysclkIpcRunning() && R_SUCCEEDED(sysclkIpcInitialize())) { - uint32_t sysClkApiVer = 0; - sysclkIpcGetAPIVersion(&sysClkApiVer); - if (sysClkApiVer < 4) { - sysclkIpcExit(); - } - else sysclkCheck = 0; - } if (R_SUCCEEDED(splInitialize())) { u64 sku = 0; splGetConfig(SplConfigItem_HardwareType, &sku); @@ -645,9 +617,7 @@ public: virtual void exitServices() override { CloseThreads(); shmemClose(&_sharedmemory); - if (R_SUCCEEDED(sysclkCheck)) { - sysclkIpcExit(); - } + sysclkIpcExit(); // Exit services clkrstExit(); pcvExit(); @@ -707,14 +677,6 @@ public: if (SaltySD) { LoadSharedMemoryAndRefreshRate(); } - if (sysclkIpcRunning() && R_SUCCEEDED(sysclkIpcInitialize())) { - uint32_t sysClkApiVer = 0; - sysclkIpcGetAPIVersion(&sysClkApiVer); - if (sysClkApiVer < 4) { - sysclkIpcExit(); - } - else sysclkCheck = 0; - } if (R_SUCCEEDED(splInitialize())) { u64 sku = 0; splGetConfig(SplConfigItem_HardwareType, &sku); @@ -734,9 +696,7 @@ public: virtual void exitServices() override { CloseThreads(); shmemClose(&_sharedmemory); - if (R_SUCCEEDED(sysclkCheck)) { - sysclkIpcExit(); - } + sysclkIpcExit(); clkrstExit(); pcvExit(); tsExit(); @@ -790,14 +750,6 @@ public: if (SaltySD) { LoadSharedMemoryAndRefreshRate(); } - if (sysclkIpcRunning() && R_SUCCEEDED(sysclkIpcInitialize())) { - uint32_t sysClkApiVer = 0; - sysclkIpcGetAPIVersion(&sysClkApiVer); - if (sysClkApiVer < 4) { - sysclkIpcExit(); - } - else sysclkCheck = 0; - } if (R_SUCCEEDED(splInitialize())) { u64 sku = 0; splGetConfig(SplConfigItem_HardwareType, &sku); @@ -817,9 +769,7 @@ public: virtual void exitServices() override { CloseThreads(); shmemClose(&_sharedmemory); - if (R_SUCCEEDED(sysclkCheck)) { - sysclkIpcExit(); - } + sysclkIpcExit(); clkrstExit(); pcvExit(); tsExit(); @@ -873,14 +823,6 @@ public: if (SaltySD) { LoadSharedMemoryAndRefreshRate(); } - if (sysclkIpcRunning() && R_SUCCEEDED(sysclkIpcInitialize())) { - uint32_t sysClkApiVer = 0; - sysclkIpcGetAPIVersion(&sysClkApiVer); - if (sysClkApiVer < 4) { - sysclkIpcExit(); - } - else sysclkCheck = 0; - } if (R_SUCCEEDED(splInitialize())) { u64 sku = 0; splGetConfig(SplConfigItem_HardwareType, &sku); @@ -900,9 +842,7 @@ public: virtual void exitServices() override { CloseThreads(); shmemClose(&_sharedmemory); - if (R_SUCCEEDED(sysclkCheck)) { - sysclkIpcExit(); - } + sysclkIpcExit(); clkrstExit(); pcvExit(); tsExit(); diff --git a/Source/Horizon-OC-Monitor/source/modes/Full.hpp b/Source/Horizon-OC-Monitor/source/modes/Full.hpp index 8dbb571f..6a9e5aea 100644 --- a/Source/Horizon-OC-Monitor/source/modes/Full.hpp +++ b/Source/Horizon-OC-Monitor/source/modes/Full.hpp @@ -233,12 +233,10 @@ public: else if (realRAM_Hz && settings.showDeltas && (settings.showRealFreqs || settings.showTargetFreqs)) { renderer->drawString(DeltaRAM_c, false, COMMON_MARGIN + deltaOffset, height_offset, 15, (settings.textColor)); } - if (R_SUCCEEDED(sysclkCheck)) { - static std::vector PartLoadColoredChars = {"CPU", "GPU"}; - //static auto loadLabelWidth = renderer->getTextDimensions("Load: ", false, 15).first; - renderer->drawString("Load", false, COMMON_MARGIN, height_offset+15, 15, (settings.catColor2)); - renderer->drawStringWithColoredSections(RAM_load_c, false, PartLoadColoredChars, COMMON_MARGIN + valueOffset, height_offset+15, 15, (settings.textColor), settings.catColor2); - } + static std::vector PartLoadColoredChars = {"CPU", "GPU"}; + //static auto loadLabelWidth = renderer->getTextDimensions("Load: ", false, 15).first; + renderer->drawString("Load", false, COMMON_MARGIN, height_offset+15, 15, (settings.catColor2)); + renderer->drawStringWithColoredSections(RAM_load_c, false, PartLoadColoredChars, COMMON_MARGIN + valueOffset, height_offset+15, 15, (settings.textColor), settings.catColor2); } if (R_SUCCEEDED(Hinted)) { //static auto textWidth = renderer->getTextDimensions("Total \nApplication \nApplet \nSystem \nSystem Unsafe ", false, 15).first; diff --git a/Source/Horizon-OC-Monitor/source/modes/Mini.hpp b/Source/Horizon-OC-Monitor/source/modes/Mini.hpp index 01c020d4..0a837a8d 100644 --- a/Source/Horizon-OC-Monitor/source/modes/Mini.hpp +++ b/Source/Horizon-OC-Monitor/source/modes/Mini.hpp @@ -354,7 +354,7 @@ public: else width = renderer->getTextDimensions("100%@4444.4444 mV", false, fontsize).first; } - } else if (key == "GPU" || (key == "RAM" && settings.showRAMLoad && R_SUCCEEDED(sysclkCheck))) { + } else if (key == "GPU" || (key == "RAM" && settings.showRAMLoad)) { //dimensions = renderer->drawString("100.0%@4444.4", false, 0, 0, fontsize, renderer->a(0x0000)); if (!settings.showRAMLoadCPUGPU) { @@ -370,7 +370,7 @@ public: width = renderer->getTextDimensions("100%[100%,100%]@4444.4444 mV", false, fontsize).first; } } - } else if (key == "RAM" && (!settings.showRAMLoad || R_FAILED(sysclkCheck))) { + } else if (key == "RAM" && (!settings.showRAMLoad)) { //dimensions = renderer->drawString("44444444MB@4444.4", false, 0, 0, fontsize, renderer->a(0x0000)); if (!settings.realVolts) { width = renderer->getTextDimensions("100%@4444.4", false, fontsize).first; @@ -993,51 +993,33 @@ public: } else { unsigned PartLoadInt; - if (R_SUCCEEDED(sysclkCheck)) { - PartLoadInt = partLoad[SysClkPartLoad_EMC] / 10; - - if (settings.showRAMLoadCPUGPU) { - unsigned ramCpuLoadInt = partLoad[SysClkPartLoad_EMCCpu] / 10; - int RAM_GPU_Load = partLoad[SysClkPartLoad_EMC] - partLoad[SysClkPartLoad_EMCCpu]; - unsigned ramGpuLoadInt = RAM_GPU_Load / 10; - - if (settings.realFrequencies && realRAM_Hz) { - snprintf(MINI_RAM_var_compressed_c, sizeof(MINI_RAM_var_compressed_c), - "%u%%[%u%%,%u%%]@%hu.%hhu", - PartLoadInt, ramCpuLoadInt, ramGpuLoadInt, - realRAM_Hz / 1000000, (realRAM_Hz / 100000) % 10); - } else { - snprintf(MINI_RAM_var_compressed_c, sizeof(MINI_RAM_var_compressed_c), - "%u%%[%u%%,%u%%]@%hu.%hhu", - PartLoadInt, ramCpuLoadInt, ramGpuLoadInt, - RAM_Hz / 1000000, (RAM_Hz / 100000) % 10); - } - } else { - if (settings.realFrequencies && realRAM_Hz) { - snprintf(MINI_RAM_var_compressed_c, sizeof(MINI_RAM_var_compressed_c), - "%u%%@%hu.%hhu", PartLoadInt, - realRAM_Hz / 1000000, (realRAM_Hz / 100000) % 10); - } else { - snprintf(MINI_RAM_var_compressed_c, sizeof(MINI_RAM_var_compressed_c), - "%u%%@%hu.%hhu", PartLoadInt, - RAM_Hz / 1000000, (RAM_Hz / 100000) % 10); - } - } - } else { - const uint64_t RAM_Total_all = RAM_Total_application_u + RAM_Total_applet_u + - RAM_Total_system_u + RAM_Total_systemunsafe_u; - const uint64_t RAM_Used_all = RAM_Used_application_u + RAM_Used_applet_u + - RAM_Used_system_u + RAM_Used_systemunsafe_u; - PartLoadInt = (RAM_Total_all > 0) ? (unsigned)((RAM_Used_all * 100) / RAM_Total_all) : 0; + PartLoadInt = partLoad[SysClkPartLoad_EMC] / 10; + + if (settings.showRAMLoadCPUGPU) { + unsigned ramCpuLoadInt = partLoad[SysClkPartLoad_EMCCpu] / 10; + int RAM_GPU_Load = partLoad[SysClkPartLoad_EMC] - partLoad[SysClkPartLoad_EMCCpu]; + unsigned ramGpuLoadInt = RAM_GPU_Load / 10; if (settings.realFrequencies && realRAM_Hz) { snprintf(MINI_RAM_var_compressed_c, sizeof(MINI_RAM_var_compressed_c), - "%u%%@%hu.%hhu", PartLoadInt, - realRAM_Hz / 1000000, (realRAM_Hz / 100000) % 10); + "%u%%[%u%%,%u%%]@%hu.%hhu", + PartLoadInt, ramCpuLoadInt, ramGpuLoadInt, + realRAM_Hz / 1000000, (realRAM_Hz / 100000) % 10); } else { snprintf(MINI_RAM_var_compressed_c, sizeof(MINI_RAM_var_compressed_c), - "%u%%@%hu.%hhu", PartLoadInt, - RAM_Hz / 1000000, (RAM_Hz / 100000) % 10); + "%u%%[%u%%,%u%%]@%hu.%hhu", + PartLoadInt, ramCpuLoadInt, ramGpuLoadInt, + RAM_Hz / 1000000, (RAM_Hz / 100000) % 10); + } + } else { + if (settings.realFrequencies && realRAM_Hz) { + snprintf(MINI_RAM_var_compressed_c, sizeof(MINI_RAM_var_compressed_c), + "%u%%@%hu.%hhu", PartLoadInt, + realRAM_Hz / 1000000, (realRAM_Hz / 100000) % 10); + } else { + snprintf(MINI_RAM_var_compressed_c, sizeof(MINI_RAM_var_compressed_c), + "%u%%@%hu.%hhu", PartLoadInt, + RAM_Hz / 1000000, (RAM_Hz / 100000) % 10); } } } diff --git a/Source/Horizon-OC-Monitor/source/sysclk_ipc.c b/Source/Horizon-OC-Monitor/source/sysclk_ipc.c index 7c6e853c..74014a1f 100644 --- a/Source/Horizon-OC-Monitor/source/sysclk_ipc.c +++ b/Source/Horizon-OC-Monitor/source/sysclk_ipc.c @@ -1,5 +1,21 @@ /* - * -------------------------------------------------------------------------- + * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +/* -------------------------------------------------------------------------- * "THE BEER-WARE LICENSE" (Revision 42): * , , * wrote this file. As long as you retain this notice you can do whatever you @@ -8,11 +24,12 @@ * -------------------------------------------------------------------------- */ + #define NX_SERVICE_ASSUME_NON_DOMAIN -#include #include #include #include +#include static Service g_sysclkSrv; static atomic_size_t g_refCnt; @@ -20,7 +37,7 @@ static atomic_size_t g_refCnt; bool sysclkIpcRunning() { Handle handle; - const bool running = R_FAILED(smRegisterService(&handle, smEncodeName(SYSCLK_IPC_SERVICE_NAME), false, 1)); + bool running = R_FAILED(smRegisterService(&handle, smEncodeName(SYSCLK_IPC_SERVICE_NAME), false, 1)); if (!running) { @@ -94,7 +111,10 @@ Result sysclkIpcSetOverride(SysClkModule module, u32 hz) Result sysclkIpcGetProfiles(u64 tid, SysClkTitleProfileList* out_profiles) { - return serviceDispatchInOut(&g_sysclkSrv, SysClkIpcCmd_GetProfiles, tid, *out_profiles); + return serviceDispatchIn(&g_sysclkSrv, SysClkIpcCmd_GetProfiles, tid, + .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, + .buffers = {{out_profiles, sizeof(SysClkTitleProfileList)}}, + ); } Result sysclkIpcSetProfiles(u64 tid, SysClkTitleProfileList* profiles) @@ -107,12 +127,18 @@ Result sysclkIpcSetProfiles(u64 tid, SysClkTitleProfileList* profiles) Result sysclkIpcGetConfigValues(SysClkConfigValueList* out_configValues) { - return serviceDispatchOut(&g_sysclkSrv, SysClkIpcCmd_GetConfigValues, *out_configValues); + return serviceDispatch(&g_sysclkSrv, SysClkIpcCmd_GetConfigValues, + .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, + .buffers = {{out_configValues, sizeof(SysClkConfigValueList)}}, + ); } Result sysclkIpcSetConfigValues(SysClkConfigValueList* configValues) { - return serviceDispatchIn(&g_sysclkSrv, SysClkIpcCmd_SetConfigValues, *configValues); + return serviceDispatch(&g_sysclkSrv, SysClkIpcCmd_SetConfigValues, + .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_In }, + .buffers = {{configValues, sizeof(SysClkConfigValueList)}}, + ); } Result sysclkIpcGetFreqList(SysClkModule module, u32* list, u32 maxCount, u32* outCount) @@ -125,4 +151,33 @@ Result sysclkIpcGetFreqList(SysClkModule module, u32* list, u32 maxCount, u32* o .buffer_attrs = { SfBufferAttr_HipcAutoSelect | SfBufferAttr_Out }, .buffers = {{list, maxCount * sizeof(u32)}}, ); +} + +Result sysclkIpcSetReverseNXRTMode(ReverseNXMode mode) +{ + return serviceDispatchIn(&g_sysclkSrv, SysClkIpcCmd_SetReverseNXRTMode, mode); +} + + +Result hocClkIpcSetKipData() +{ + u32 temp = 0; + return serviceDispatchIn(&g_sysclkSrv, HocClkIpcCmd_SetKipData, temp); +} + +Result hocClkIpcGetKipData() +{ + u32 temp = 0; + return serviceDispatchIn(&g_sysclkSrv, HocClkIpcCmd_GetKipData, temp); +} + +Result hocClkIpcUpdateEmcRegs() +{ + u32 temp = 0; + return serviceDispatchIn(&g_sysclkSrv, HocClkIpcCmd_UpdateEmcRegs, temp); +} +Result hocClkIpcCalculateGpuVmin() +{ + u32 temp = 0; + return serviceDispatchIn(&g_sysclkSrv, HocClkIpcCmd_CalculateGpuVmin, temp); } \ No newline at end of file