From 308f39694c00305cd0731b0704aae95a4aef25ea Mon Sep 17 00:00:00 2001 From: Lightos1 <124387232+Lightos1@users.noreply.github.com> Date: Fri, 20 Mar 2026 21:02:24 +0100 Subject: [PATCH] Add back misc thread --- .../sysmodule/src/board/board.cpp | 15 +++-- .../sysmodule/src/board/board_load.cpp | 3 + .../sysmodule/src/board/board_misc.cpp | 67 +++++++++++++++++++ .../sysmodule/src/board/board_misc.hpp | 38 +++++++++++ 4 files changed, 117 insertions(+), 6 deletions(-) create mode 100644 Source/rewrite-hoc-clk/sysmodule/src/board/board_misc.cpp create mode 100644 Source/rewrite-hoc-clk/sysmodule/src/board/board_misc.hpp diff --git a/Source/rewrite-hoc-clk/sysmodule/src/board/board.cpp b/Source/rewrite-hoc-clk/sysmodule/src/board/board.cpp index 36a377e2..aef555e8 100644 --- a/Source/rewrite-hoc-clk/sysmodule/src/board/board.cpp +++ b/Source/rewrite-hoc-clk/sysmodule/src/board/board.cpp @@ -33,6 +33,7 @@ #include "board_fuse.hpp" #include "board_load.hpp" #include "board_ram_oc_dvfs.hpp" +#include "board_misc.hpp" namespace board { @@ -113,15 +114,17 @@ namespace board { StartGpuLoad(nvCheck, fd); /* TODO: Add back fan. */ - // threadCreate(&miscThread, miscThreadFunc, NULL, NULL, 0x1000, 0x10, 3); + StartMiscThread(pwmCheck) - // threadStart(&miscThread); batteryInfoInitialize(); FetchHardwareInfos(); - // if (hosversionAtLeast(6,0,0) && R_SUCCEEDED(pwmInitialize())) { - // pwmCheck = pwmOpenSession2(&g_ICon, 0x3D000001); - // } + Result pwmCheck = 1; + if (hosversionAtLeast(6,0,0) && R_SUCCEEDED(pwmInitialize())) { + pwmCheck = pwmOpenSession2(&g_ICon, 0x3D000001); + } + + StartMiscThread(pwmCheck); if (gConsoleType != HorizonOCConsoleType_Hoag) { u64 clkVirtAddr, dsiVirtAddr, outsize; @@ -168,7 +171,7 @@ namespace board { ExitLoad(); - // threadClose(&miscThread); + ExitMiscThread(); pwmChannelSessionClose(&g_ICon); pwmExit(); diff --git a/Source/rewrite-hoc-clk/sysmodule/src/board/board_load.cpp b/Source/rewrite-hoc-clk/sysmodule/src/board/board_load.cpp index 9aac2980..73e7cc5f 100644 --- a/Source/rewrite-hoc-clk/sysmodule/src/board/board_load.cpp +++ b/Source/rewrite-hoc-clk/sysmodule/src/board/board_load.cpp @@ -30,6 +30,7 @@ #include #include #include +#include "board_misc.hpp" namespace board { @@ -114,6 +115,8 @@ namespace board { BatteryChargeInfo info; batteryInfoGetChargeInfo(&info); return info.RawBatteryCharge; + case HocClkPartLoad_FAN: + return GetFanLevel(); default: ASSERT_ENUM_VALID(SysClkPartLoad, loadSource); } diff --git a/Source/rewrite-hoc-clk/sysmodule/src/board/board_misc.cpp b/Source/rewrite-hoc-clk/sysmodule/src/board/board_misc.cpp new file mode 100644 index 00000000..f43b85a5 --- /dev/null +++ b/Source/rewrite-hoc-clk/sysmodule/src/board/board_misc.cpp @@ -0,0 +1,67 @@ +/* + * 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 + * want with this stuff. If you meet any of us some day, and you think this + * stuff is worth it, you can buy us a beer in return. - The sys-clk authors + * -------------------------------------------------------------------------- + */ + +#include + +namespace board { + + Thread miscThread; + u8 fanLevel = 0; + + void MiscThreadFunc(void *pwmCheckPtr) { + Result pwmCheck = *static_cast(pwmCheckPtr); + double temp = 0; + double rotationDuty = 0; + + while (true) { + if (R_SUCCEEDED(pwmCheck)) { + if (R_SUCCEEDED(pwmChannelSessionGetDutyCycle(&g_ICon, &temp))) { + temp *= 10; + temp = trunc(temp); + temp /= 10; + rotationDuty = 100.0 - temp; + } + } + + fanLevel = static_cast(Rotation_Duty); + svcSleepThread(300'000'000); + } + } + + u8 GetFanLevel() { + return fanLevel; + } + + void StartMiscThread(Result pwmCheck) { + threadCreate(&miscThread, MiscThreadFunc, &pwmCheck, NULL, 0x1000, 0x10, 3); + threadStart(&miscThread); + } + + void ExitMiscThread() { + threadClose(&miscThread); + } + +} diff --git a/Source/rewrite-hoc-clk/sysmodule/src/board/board_misc.hpp b/Source/rewrite-hoc-clk/sysmodule/src/board/board_misc.hpp new file mode 100644 index 00000000..15421d45 --- /dev/null +++ b/Source/rewrite-hoc-clk/sysmodule/src/board/board_misc.hpp @@ -0,0 +1,38 @@ +/* + * 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 + * want with this stuff. If you meet any of us some day, and you think this + * stuff is worth it, you can buy us a beer in return. - The sys-clk authors + * -------------------------------------------------------------------------- + */ + +#pragma once + +#include +#include + +namespace board { + + void StartMiscThread(Result pwmCheck); + void ExitMiscThread(); + u8 GetFanLevel(); + +}