sysclk: remove old hocclk, bump version
This commit is contained in:
2
Source/Horizon-OC-Monitor/Horizon-OC-Monitor.lst
Normal file
2
Source/Horizon-OC-Monitor/Horizon-OC-Monitor.lst
Normal file
@@ -0,0 +1,2 @@
|
||||
-CSn
|
||||
/home/sould/Documents/GitHub/Horizon-OC/Source/Horizon-OC-Monitor/Horizon-OC-Monitor.elf
|
||||
@@ -38,11 +38,11 @@ include $(DEVKITPRO)/libnx/switch_rules
|
||||
# NACP building is skipped as well.
|
||||
#---------------------------------------------------------------------------------
|
||||
APP_TITLE := Horizon OC Monitor
|
||||
APP_VERSION := 1.3.2+r4-hoc-r2
|
||||
APP_VERSION := 1.3.2+r4-hoc-r3
|
||||
TARGET := $(notdir $(CURDIR))
|
||||
BUILD := build
|
||||
SOURCES := source
|
||||
INCLUDES := include lib/Atmosphere-libs/libstratosphere/source/dmnt lib/Atmosphere-libs/libstratosphere/source ../sys-clk/common/include/
|
||||
INCLUDES := include lib/Atmosphere-libs/libstratosphere/source/dmnt lib/Atmosphere-libs/libstratosphere/source ../hoc-clk/common/include/
|
||||
NO_ICON := 1
|
||||
#ROMFS := romfs
|
||||
|
||||
|
||||
@@ -24,19 +24,18 @@ cp -vf "$ROOT_DIR/sysmodule/out/horizon-oc.nsp" "$DIST_DIR/atmosphere/contents/$
|
||||
>"$DIST_DIR/atmosphere/contents/$TITLE_ID/flags/boot2.flag"
|
||||
cp -vf "$ROOT_DIR/sysmodule/toolbox.json" "$DIST_DIR/atmosphere/contents/$TITLE_ID/toolbox.json"
|
||||
|
||||
# echo "*** overlay ***"
|
||||
# pushd "$ROOT_DIR/overlay"
|
||||
# make -j$CORES
|
||||
# popd > /dev/null
|
||||
echo "*** overlay ***"
|
||||
pushd "$ROOT_DIR/overlay"
|
||||
make -j$CORES
|
||||
popd > /dev/null
|
||||
|
||||
# mkdir -p "$DIST_DIR/switch/.overlays"
|
||||
# cp -vf "$ROOT_DIR/overlay/out/horizon-oc-overlay.ovl" "$DIST_DIR/switch/.overlays/horizon-oc-overlay.ovl"
|
||||
mkdir -p "$DIST_DIR/switch/.overlays"
|
||||
cp -vf "$ROOT_DIR/overlay/out/horizon-oc-overlay.ovl" "$DIST_DIR/switch/.overlays/horizon-oc-overlay.ovl"
|
||||
|
||||
# echo "*** assets ***"
|
||||
# mkdir -p "$DIST_DIR/config/horizon-oc"
|
||||
# cp -vf "$ROOT_DIR/config.ini.template" "$DIST_DIR/config/horizon-oc/config.ini.template"
|
||||
# cp -vf "$ROOT_DIR/../../README.md" "$DIST_DIR/README.md"
|
||||
echo "*** assets ***"
|
||||
mkdir -p "$DIST_DIR/config/horizon-oc"
|
||||
cp -vf "$ROOT_DIR/config.ini.template" "$DIST_DIR/config/horizon-oc/config.ini.template"
|
||||
cp -vf "$ROOT_DIR/../../README.md" "$DIST_DIR/README.md"
|
||||
|
||||
# echo "*** lang ***"
|
||||
|
||||
# cp -r "$ROOT_DIR/overlay/lang/" "$DIST_DIR/config/horizon-oc/lang/"
|
||||
echo "*** lang ***"
|
||||
cp -r "$ROOT_DIR/overlay/lang/" "$DIST_DIR/config/horizon-oc/lang/"
|
||||
173
Source/hoc-clk/overlay/Makefile
Normal file
173
Source/hoc-clk/overlay/Makefile
Normal file
@@ -0,0 +1,173 @@
|
||||
#---------------------------------------------------------------------------------
|
||||
.SUFFIXES:
|
||||
#---------------------------------------------------------------------------------
|
||||
|
||||
ifeq ($(strip $(DEVKITPRO)),)
|
||||
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>/devkitpro")
|
||||
endif
|
||||
|
||||
TOPDIR ?= $(CURDIR)
|
||||
include $(DEVKITPRO)/libnx/switch_rules
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# TARGET is the name of the output
|
||||
# BUILD is the directory where object files & intermediate files will be placed
|
||||
# SOURCES is a list of directories containing source code
|
||||
# DATA is a list of directories containing data files
|
||||
# INCLUDES is a list of directories containing header files
|
||||
# EXEFS_SRC is the optional input directory containing data copied into exefs, if anything this normally should only contain "main.npdm".
|
||||
#---------------------------------------------------------------------------------
|
||||
TARGET := horizon-oc-overlay
|
||||
BUILD := build
|
||||
OUTDIR := out
|
||||
RESOURCES := res
|
||||
SOURCES := src src/ui/gui src/ui/elements ../common/src ../common/src/client
|
||||
DATA := data
|
||||
INCLUDES := ../common/include
|
||||
EXEFS_SRC := exefs_src
|
||||
IS_MINIMAL := 0
|
||||
|
||||
APP_TITLE := Horizon OC Zeus
|
||||
NO_ICON := 1
|
||||
|
||||
|
||||
# This location should reflect where you place the libultrahand directory (lib can vary between projects).
|
||||
include ${TOPDIR}/lib/libultrahand/ultrahand.mk
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# version control constants
|
||||
#---------------------------------------------------------------------------------
|
||||
#TARGET_VERSION := $(shell git describe --dirty --always --tags)
|
||||
APP_VERSION := 1.1.0
|
||||
TARGET_VERSION := $(APP_VERSION)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# options for code generation
|
||||
#---------------------------------------------------------------------------------
|
||||
DEFINES := -DDISABLE_IPC -DTARGET="\"$(TARGET)\"" -DTARGET_VERSION="\"$(TARGET_VERSION)\"" -DIS_MINIMAL=$(IS_MINIMAL)
|
||||
|
||||
ARCH := -march=armv8-a+crc+crypto -mtune=cortex-a57 -mtp=soft -fPIE
|
||||
|
||||
CFLAGS := -O2 -Wall -flto -fdata-sections -ffunction-sections -fno-rtti -fno-common \
|
||||
$(ARCH) $(DEFINES)
|
||||
|
||||
CFLAGS += $(INCLUDE) -D__SWITCH__
|
||||
|
||||
# Enable appearance overriding
|
||||
export MSYS2_ARG_CONV_EXCL := -DUI_OVERRIDE_PATH
|
||||
UI_OVERRIDE_PATH := /config/horizon-oc/
|
||||
CFLAGS += -DUI_OVERRIDE_PATH="\"$(UI_OVERRIDE_PATH)\""
|
||||
|
||||
# Disable fstream
|
||||
#NO_FSTREAM_DIRECTIVE := 1
|
||||
#CFLAGS += -DNO_FSTREAM_DIRECTIVE=$(NO_FSTREAM_DIRECTIVE)
|
||||
|
||||
|
||||
CXXFLAGS := $(CFLAGS) -fno-exceptions -std=gnu++20
|
||||
|
||||
ASFLAGS := -g $(ARCH)
|
||||
LDFLAGS = -specs=$(DEVKITPRO)/libnx/switch.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)
|
||||
|
||||
LIBS := -lcurl -lz -lzzip -lmbedtls -lmbedx509 -lmbedcrypto -ljansson -lnx
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# list of directories containing libraries, this must be the top level containing
|
||||
# include and lib
|
||||
#---------------------------------------------------------------------------------
|
||||
LIBDIRS := $(PORTLIBS) $(LIBNX)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# no real need to edit anything past this point unless you need to add additional
|
||||
# rules for different file extensions
|
||||
#---------------------------------------------------------------------------------
|
||||
ifneq ($(BUILD),$(notdir $(CURDIR)))
|
||||
#---------------------------------------------------------------------------------
|
||||
|
||||
export OUTPUT := $(CURDIR)/$(OUTDIR)/$(TARGET)
|
||||
export TOPDIR := $(CURDIR)
|
||||
|
||||
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
|
||||
$(foreach dir,$(DATA),$(CURDIR)/$(dir))
|
||||
|
||||
export DEPSDIR := $(CURDIR)/$(BUILD)
|
||||
|
||||
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
|
||||
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
|
||||
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
|
||||
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# use CXX for linking C++ projects, CC for standard C
|
||||
#---------------------------------------------------------------------------------
|
||||
ifeq ($(strip $(CPPFILES)),)
|
||||
#---------------------------------------------------------------------------------
|
||||
export LD := $(CC)
|
||||
#---------------------------------------------------------------------------------
|
||||
else
|
||||
#---------------------------------------------------------------------------------
|
||||
export LD := $(CXX)
|
||||
#---------------------------------------------------------------------------------
|
||||
endif
|
||||
#---------------------------------------------------------------------------------
|
||||
|
||||
export OFILES := $(addsuffix .o,$(BINFILES)) \
|
||||
$(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)
|
||||
|
||||
export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
|
||||
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
|
||||
-I$(CURDIR)/$(BUILD)
|
||||
|
||||
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib)
|
||||
|
||||
export BUILD_EXEFS_SRC := $(TOPDIR)/$(EXEFS_SRC)
|
||||
|
||||
.PHONY: $(BUILD) clean all
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
all: $(BUILD)
|
||||
|
||||
$(BUILD):
|
||||
@[ -d $@ ] || mkdir -p $@
|
||||
@[ -d $(OUTDIR) ] || mkdir -p $(OUTDIR)
|
||||
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
clean:
|
||||
@echo clean ...
|
||||
@rm -fr $(BUILD) $(TARGET).ovl $(TARGET).nacp $(TARGET).nso $(TARGET).elf $(OUTDIR)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
else
|
||||
.PHONY: all
|
||||
|
||||
DEPENDS := $(OFILES:.o=.d)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# main targets
|
||||
#---------------------------------------------------------------------------------
|
||||
|
||||
all: $(OUTPUT).ovl
|
||||
|
||||
$(OUTPUT).ovl: $(OUTPUT).elf $(OUTPUT).nacp
|
||||
@elf2nro $< $@ --nacp=$(OUTPUT).nacp
|
||||
@echo "built ... $(notdir $(OUTPUT).ovl)"
|
||||
@printf 'ULTR' >> $@
|
||||
@printf "Ultrahand signature has been added.\n"
|
||||
|
||||
$(OUTPUT).elf: $(OFILES)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# you need a rule like this for each extension you use as binary data
|
||||
#---------------------------------------------------------------------------------
|
||||
%.bin.o : %.bin
|
||||
#---------------------------------------------------------------------------------
|
||||
@echo $(notdir $<)
|
||||
@$(bin2o)
|
||||
|
||||
-include $(DEPENDS)
|
||||
|
||||
#---------------------------------------------------------------------------------------
|
||||
endif
|
||||
#---------------------------------------------------------------------------------------
|
||||
BIN
Source/hoc-clk/overlay/data/logo_rgba.bin
Normal file
BIN
Source/hoc-clk/overlay/data/logo_rgba.bin
Normal file
Binary file not shown.
141
Source/hoc-clk/overlay/lang/de.json
Normal file
141
Source/hoc-clk/overlay/lang/de.json
Normal file
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"Information": "Informationen",
|
||||
"IDDQ:": "IDDQ:",
|
||||
"Module: ": "Modul:",
|
||||
"sys-dock status:": "Sys-Dock-Status:",
|
||||
"SaltyNX status:": "SaltyNX-Status:",
|
||||
"RR Display status:": "RR Anzeigestatus:",
|
||||
"Wafer Position:": "Waferposition:",
|
||||
"Credits": "Credits",
|
||||
"Developers": "Entwickler",
|
||||
"Contributors": "Mitwirkende",
|
||||
"Testers": "Tester",
|
||||
"Special Thanks": "Besonderer Dank",
|
||||
"Unknown": "Unbekannt",
|
||||
"Installed": "Installiert",
|
||||
"Not Installed": "Nicht installiert",
|
||||
"X: %u Y: %u": "X: %u Y: %u",
|
||||
"THE BEER-WARE LICENSE": "DIE BIERWAREN-LIZENZ",
|
||||
"Default": "Standard",
|
||||
"Do Not Override": "Nicht überschreiben",
|
||||
"Disabled": "Deaktiviert",
|
||||
"Enabled": "Aktiviert",
|
||||
" \\ue0e3 Reset": "\\ue0e3 Zurücksetzen",
|
||||
"Display": "Anzeige",
|
||||
"Application changed\\n\\n": "Anwendung geändert\\n\\n",
|
||||
"The running application changed\\n\\n": "Die laufende Anwendung hat sich geändert\\n\\n",
|
||||
"while editing was going on.": "während die Bearbeitung im Gange war.",
|
||||
"Board": "Vorstand",
|
||||
"%u.%u%u mV": "%u.%u%u mV",
|
||||
"Could not connect to hoc-clk sysmodule.\\n\\n": "Es konnte keine Verbindung zum hoc-clk-Systemmodul hergestellt werden.\\n\\n",
|
||||
"Please make sure everything is\\n\\n": "Bitte stellen Sie sicher, dass alles in Ordnung ist\\n\\n",
|
||||
"correctly installed and enabled.": "korrekt installiert und aktiviert.",
|
||||
"Fatal error": "Fataler Fehler",
|
||||
"Temporary Overrides ": "Temporäre Überschreibungen",
|
||||
"Sleep Mode": "Schlafmodus",
|
||||
"Stock": "Lager",
|
||||
"Dev OC": "Entwickler OC",
|
||||
"Boost Mode": "Boost-Modus",
|
||||
"Safe Max": "Sicher max",
|
||||
"Unsafe Max": "Unsicher max",
|
||||
"Absolute Max": "Absolutes Maximum",
|
||||
"Handheld Safe Max": "Handsafe max",
|
||||
"Enable": "Aktivieren",
|
||||
"Edit App Profile": "App-Profil bearbeiten",
|
||||
"Edit Global Profile": "Globales Profil bearbeiten",
|
||||
"Temporary Overrides": "Temporäre Überschreibungen",
|
||||
"Settings": "Einstellungen",
|
||||
"About": "Über",
|
||||
"Compiling with minimal features": "Kompilieren mit minimalen Funktionen",
|
||||
"General Settings": "Allgemeine Einstellungen",
|
||||
"Governor Settings": "Gouverneurseinstellungen",
|
||||
"Safety Settings": "Sicherheitseinstellungen",
|
||||
"Save KIP Settings": "Speichern Sie die KIP-Einstellungen",
|
||||
"RAM Settings": "RAM-Einstellungen",
|
||||
"CPU Settings": "CPU-Einstellungen",
|
||||
"GPU Settings": "GPU-Einstellungen",
|
||||
"Display Settings": "Anzeigeeinstellungen",
|
||||
"Experimental": "Experimentell",
|
||||
"GPU Scheduling Override Method": "GPU-Planungsüberschreibungsmethode",
|
||||
"can be dangerous and may cause": "kann gefährlich sein und verursachen",
|
||||
"damage to your battery or charger!": "Schäden an Ihrem Akku oder Ladegerät!",
|
||||
"Charge Current Override": "Ladestrom-Überbrückung",
|
||||
"RAM Voltage Display Mode": "RAM-Spannungsanzeigemodus",
|
||||
"Polling Interval": "Abfrageintervall",
|
||||
"CPU Governor Minimum Frequency": "Mindestfrequenz des CPU-Reglers",
|
||||
"refresh rates may cause stress": "Bildwiederholraten können Stress verursachen",
|
||||
"or damage to your display! ": "oder Schäden an Ihrem Display!",
|
||||
"Proceed at your own risk!": "Das Vorgehen erfolgt auf eigene Gefahr!",
|
||||
"Max Handheld Display": "Max Handheld-Display",
|
||||
"Display Clock": "Uhr anzeigen",
|
||||
"Official Rating": "Offizielle Bewertung",
|
||||
"TDP Threshold": "TDP-Schwellenwert",
|
||||
"Power": "Macht",
|
||||
"Thermal Throttle Limit": "Thermische Drosselgrenze",
|
||||
"HP Mode": "HP-Modus",
|
||||
"Default (Mariko)": "Standard (Mariko)",
|
||||
"Default (Erista)": "Standard (Erista)",
|
||||
"Rating": "Bewertung",
|
||||
"Safe Max (Mariko)": "Safe Max (Mariko)",
|
||||
"Safe Max (Erista)": "Safe Max (Erista)",
|
||||
"RAM VDD2 Voltage": "RAM VDD2 Spannung",
|
||||
"Voltage": "Spannung",
|
||||
"RAM VDDQ Voltage": "RAM-VDDQ-Spannung",
|
||||
"RAM Frequency Editor": "RAM-Frequenzeditor",
|
||||
"JEDEC.": "JEDEC.",
|
||||
"High speedo needed!": "Hoher Tacho erforderlich!",
|
||||
"3333MHz (Needs extreme Speedo/PLL)": "3333 MHz (Benötigt extremen Tacho/PLL)",
|
||||
"3366MHz (Needs extreme Speedo/PLL)": "3366 MHz (Benötigt extremen Tacho/PLL)",
|
||||
"3400MHz (Needs extreme Speedo/PLL)": "3400 MHz (Benötigt extremen Tacho/PLL)",
|
||||
"3433MHz (Needs ridiculous Speedo/PLL)": "3433 MHz (Benötigt lächerlichen Tacho/PLL)",
|
||||
"3466MHz (Needs ridiculous Speedo/PLL)": "3466 MHz (Benötigt lächerlichen Tacho/PLL)",
|
||||
"3500MHz (Needs ridiculous Speedo/PLL)": "3500 MHz (Benötigt lächerlichen Tacho/PLL)",
|
||||
"Ram Max Clock": "Ram Max Uhr",
|
||||
"RAM Latency Editor": "RAM-Latenz-Editor",
|
||||
"RAM Timing Reductions": "Reduzierung des RAM-Timings",
|
||||
"Memory Timings": "Speicherzeiten",
|
||||
"Advanced": "Fortgeschritten",
|
||||
"t6 tRTW Fine Tune": "t6 tRTW Feinabstimmung",
|
||||
"tRTW Fine Tune": "tRTW-Feinabstimmung",
|
||||
"t7 tWTR Fine Tune": "t7 tWTR Feinabstimmung",
|
||||
"tWTR Fine Tune": "tWTR-Feinabstimmung",
|
||||
"Memory Latencies": "Speicherlatenzen",
|
||||
"Read Latency": "Leselatenz",
|
||||
"Write Latency": "Schreiblatenz",
|
||||
"CPU Boost Clock": "CPU-Boost-Takt",
|
||||
"CPU UV": "CPU-UV",
|
||||
"CPU Unlock": "CPU-Entsperrung",
|
||||
"CPU VMIN": "CPU-VMIN",
|
||||
"CPU Max Voltage": "Maximale CPU-Spannung",
|
||||
"CPU Max Clock": "Maximaler CPU-Takt",
|
||||
"Extreme UV Table": "Extremer UV-Tisch",
|
||||
"CPU UV Table": "CPU-UV-Tisch",
|
||||
"CPU Low UV": "CPU-niedrige UV-Strahlung",
|
||||
"CPU High UV": "CPU Hohe UV-Strahlung",
|
||||
"CPU Low VMIN": "CPU niedrig VMIN",
|
||||
"CPU High VMIN": "CPU hoch VMIN",
|
||||
"No Undervolt": "Kein Undervolt",
|
||||
"SLT Table": "SLT-Tisch",
|
||||
"HiOPT Table": "HiOPT-Tabelle",
|
||||
"GPU Undervolt Table": "GPU-Unterspannungstabelle",
|
||||
"GPU Minimum Voltage": "GPU-Mindestspannung",
|
||||
"Calculate GPU Vmin": "Berechnen Sie die GPU-Vmin",
|
||||
"GPU VMIN": "GPU-VMIN",
|
||||
"GPU Maximum Voltage": "Maximale GPU-Spannung",
|
||||
"GPU Voltage Offset": "GPU-Spannungsoffset",
|
||||
"Do not override": "Nicht überschreiben",
|
||||
"Enabled (Default)": "Aktiviert (Standard)",
|
||||
"96.6% limit": "96,6 %-Grenze",
|
||||
"99.7% limit": "99,7 %-Grenze",
|
||||
"GPU Scheduling Override": "GPU-Planungsüberschreibung",
|
||||
"Official Service": "Offizieller Dienst",
|
||||
"GPU DVFS Mode": "GPU-DVFS-Modus",
|
||||
"GPU DVFS Offset": "GPU-DVFS-Offset",
|
||||
"GPU Voltage Table": "GPU-Spannungstabelle",
|
||||
"GPU Custom Table (mV)": "Benutzerdefinierte GPU-Tabelle (mV)",
|
||||
"1075MHz without UV, 1152MHz on SLT": "1075 MHz ohne UV, 1152 MHz auf SLT",
|
||||
"or 1228MHz on HiOPT can cause ": "oder 1228 MHz auf HiOPT kann dazu führen",
|
||||
"permanent damage to your Switch!": "Dauerhafter Schaden an Ihrem Switch!",
|
||||
"921MHz without UV and 960MHz on": "921 MHz ohne UV und 960 MHz eingeschaltet",
|
||||
"SLT or HiOPT can cause ": "SLT oder HiOPT können dazu führen"
|
||||
}
|
||||
141
Source/hoc-clk/overlay/lang/en.json
Normal file
141
Source/hoc-clk/overlay/lang/en.json
Normal file
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"Information": "Information",
|
||||
"IDDQ:": "IDDQ:",
|
||||
"Module: ": "Module: ",
|
||||
"sys-dock status:": "sys-dock status:",
|
||||
"SaltyNX status:": "SaltyNX status:",
|
||||
"RR Display status:": "RR Display status:",
|
||||
"Wafer Position:": "Wafer Position:",
|
||||
"Credits": "Credits",
|
||||
"Developers": "Developers",
|
||||
"Contributors": "Contributors",
|
||||
"Testers": "Testers",
|
||||
"Special Thanks": "Special Thanks",
|
||||
"Unknown": "Unknown",
|
||||
"Installed": "Installed",
|
||||
"Not Installed": "Not Installed",
|
||||
"X: %u Y: %u": "X: %u Y: %u",
|
||||
"THE BEER-WARE LICENSE": "THE BEER-WARE LICENSE",
|
||||
"Default": "Default",
|
||||
"Do Not Override": "Do Not Override",
|
||||
"Disabled": "Disabled",
|
||||
"Enabled": "Enabled",
|
||||
" \\ue0e3 Reset": " \\ue0e3 Reset",
|
||||
"Display": "Display",
|
||||
"Application changed\\n\\n": "Application changed\\n\\n",
|
||||
"The running application changed\\n\\n": "The running application changed\\n\\n",
|
||||
"while editing was going on.": "while editing was going on.",
|
||||
"Board": "Board",
|
||||
"%u.%u%u mV": "%u.%u%u mV",
|
||||
"Could not connect to hoc-clk sysmodule.\\n\\n": "Could not connect to hoc-clk sysmodule.\\n\\n",
|
||||
"Please make sure everything is\\n\\n": "Please make sure everything is\\n\\n",
|
||||
"correctly installed and enabled.": "correctly installed and enabled.",
|
||||
"Fatal error": "Fatal error",
|
||||
"Temporary Overrides ": "Temporary Overrides ",
|
||||
"Sleep Mode": "Sleep Mode",
|
||||
"Stock": "Stock",
|
||||
"Dev OC": "Dev OC",
|
||||
"Boost Mode": "Boost Mode",
|
||||
"Safe Max": "Safe Max",
|
||||
"Unsafe Max": "Unsafe Max",
|
||||
"Absolute Max": "Absolute Max",
|
||||
"Handheld Safe Max": "Handheld Safe Max",
|
||||
"Enable": "Enable",
|
||||
"Edit App Profile": "Edit App Profile",
|
||||
"Edit Global Profile": "Edit Global Profile",
|
||||
"Temporary Overrides": "Temporary Overrides",
|
||||
"Settings": "Settings",
|
||||
"About": "About",
|
||||
"Compiling with minimal features": "Compiling with minimal features",
|
||||
"General Settings": "General Settings",
|
||||
"Governor Settings": "Governor Settings",
|
||||
"Safety Settings": "Safety Settings",
|
||||
"Save KIP Settings": "Save KIP Settings",
|
||||
"RAM Settings": "RAM Settings",
|
||||
"CPU Settings": "CPU Settings",
|
||||
"GPU Settings": "GPU Settings",
|
||||
"Display Settings": "Display Settings",
|
||||
"Experimental": "Experimental",
|
||||
"GPU Scheduling Override Method": "GPU Scheduling Override Method",
|
||||
"can be dangerous and may cause": "can be dangerous and may cause",
|
||||
"damage to your battery or charger!": "damage to your battery or charger!",
|
||||
"Charge Current Override": "Charge Current Override",
|
||||
"RAM Voltage Display Mode": "RAM Voltage Display Mode",
|
||||
"Polling Interval": "Polling Interval",
|
||||
"CPU Governor Minimum Frequency": "CPU Governor Minimum Frequency",
|
||||
"refresh rates may cause stress": "refresh rates may cause stress",
|
||||
"or damage to your display! ": "or damage to your display! ",
|
||||
"Proceed at your own risk!": "Proceed at your own risk!",
|
||||
"Max Handheld Display": "Max Handheld Display",
|
||||
"Display Clock": "Display Clock",
|
||||
"Official Rating": "Official Rating",
|
||||
"TDP Threshold": "TDP Threshold",
|
||||
"Power": "Power",
|
||||
"Thermal Throttle Limit": "Thermal Throttle Limit",
|
||||
"HP Mode": "HP Mode",
|
||||
"Default (Mariko)": "Default (Mariko)",
|
||||
"Default (Erista)": "Default (Erista)",
|
||||
"Rating": "Rating",
|
||||
"Safe Max (Mariko)": "Safe Max (Mariko)",
|
||||
"Safe Max (Erista)": "Safe Max (Erista)",
|
||||
"RAM VDD2 Voltage": "RAM VDD2 Voltage",
|
||||
"Voltage": "Voltage",
|
||||
"RAM VDDQ Voltage": "RAM VDDQ Voltage",
|
||||
"RAM Frequency Editor": "RAM Frequency Editor",
|
||||
"JEDEC.": "JEDEC.",
|
||||
"High speedo needed!": "High speedo needed!",
|
||||
"3333MHz (Needs extreme Speedo/PLL)": "3333MHz (Needs extreme Speedo/PLL)",
|
||||
"3366MHz (Needs extreme Speedo/PLL)": "3366MHz (Needs extreme Speedo/PLL)",
|
||||
"3400MHz (Needs extreme Speedo/PLL)": "3400MHz (Needs extreme Speedo/PLL)",
|
||||
"3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (Needs ridiculous Speedo/PLL)",
|
||||
"3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz (Needs ridiculous Speedo/PLL)",
|
||||
"3500MHz (Needs ridiculous Speedo/PLL)": "3500MHz (Needs ridiculous Speedo/PLL)",
|
||||
"Ram Max Clock": "Ram Max Clock",
|
||||
"RAM Latency Editor": "RAM Latency Editor",
|
||||
"RAM Timing Reductions": "RAM Timing Reductions",
|
||||
"Memory Timings": "Memory Timings",
|
||||
"Advanced": "Advanced",
|
||||
"t6 tRTW Fine Tune": "t6 tRTW Fine Tune",
|
||||
"tRTW Fine Tune": "tRTW Fine Tune",
|
||||
"t7 tWTR Fine Tune": "t7 tWTR Fine Tune",
|
||||
"tWTR Fine Tune": "tWTR Fine Tune",
|
||||
"Memory Latencies": "Memory Latencies",
|
||||
"Read Latency": "Read Latency",
|
||||
"Write Latency": "Write Latency",
|
||||
"CPU Boost Clock": "CPU Boost Clock",
|
||||
"CPU UV": "CPU UV",
|
||||
"CPU Unlock": "CPU Unlock",
|
||||
"CPU VMIN": "CPU VMIN",
|
||||
"CPU Max Voltage": "CPU Max Voltage",
|
||||
"CPU Max Clock": "CPU Max Clock",
|
||||
"Extreme UV Table": "Extreme UV Table",
|
||||
"CPU UV Table": "CPU UV Table",
|
||||
"CPU Low UV": "CPU Low UV",
|
||||
"CPU High UV": "CPU High UV",
|
||||
"CPU Low VMIN": "CPU Low VMIN",
|
||||
"CPU High VMIN": "CPU High VMIN",
|
||||
"No Undervolt": "No Undervolt",
|
||||
"SLT Table": "SLT Table",
|
||||
"HiOPT Table": "HiOPT Table",
|
||||
"GPU Undervolt Table": "GPU Undervolt Table",
|
||||
"GPU Minimum Voltage": "GPU Minimum Voltage",
|
||||
"Calculate GPU Vmin": "Calculate GPU Vmin",
|
||||
"GPU VMIN": "GPU VMIN",
|
||||
"GPU Maximum Voltage": "GPU Maximum Voltage",
|
||||
"GPU Voltage Offset": "GPU Voltage Offset",
|
||||
"Do not override": "Do not override",
|
||||
"Enabled (Default)": "Enabled (Default)",
|
||||
"96.6% limit": "96.6% limit",
|
||||
"99.7% limit": "99.7% limit",
|
||||
"GPU Scheduling Override": "GPU Scheduling Override",
|
||||
"Official Service": "Official Service",
|
||||
"GPU DVFS Mode": "GPU DVFS Mode",
|
||||
"GPU DVFS Offset": "GPU DVFS Offset",
|
||||
"GPU Voltage Table": "GPU Voltage Table",
|
||||
"GPU Custom Table (mV)": "GPU Custom Table (mV)",
|
||||
"1075MHz without UV, 1152MHz on SLT": "1075MHz without UV, 1152MHz on SLT",
|
||||
"or 1228MHz on HiOPT can cause ": "or 1228MHz on HiOPT can cause ",
|
||||
"permanent damage to your Switch!": "permanent damage to your Switch!",
|
||||
"921MHz without UV and 960MHz on": "921MHz without UV and 960MHz on",
|
||||
"SLT or HiOPT can cause ": "SLT or HiOPT can cause "
|
||||
}
|
||||
141
Source/hoc-clk/overlay/lang/es.json
Normal file
141
Source/hoc-clk/overlay/lang/es.json
Normal file
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"Information": "Información",
|
||||
"IDDQ:": "IDDQ:",
|
||||
"Module: ": "Módulo:",
|
||||
"sys-dock status:": "estado del sys-dock:",
|
||||
"SaltyNX status:": "Estado de SaltyNX:",
|
||||
"RR Display status:": "Estado de visualización RR:",
|
||||
"Wafer Position:": "Posición de la oblea:",
|
||||
"Credits": "Créditos",
|
||||
"Developers": "Desarrolladores",
|
||||
"Contributors": "Colaboradores",
|
||||
"Testers": "Probadores",
|
||||
"Special Thanks": "agradecimiento especial",
|
||||
"Unknown": "Desconocido",
|
||||
"Installed": "Instalado",
|
||||
"Not Installed": "No instalado",
|
||||
"X: %u Y: %u": "X: %u Y: %u",
|
||||
"THE BEER-WARE LICENSE": "LA LICENCIA DE CERVEZA",
|
||||
"Default": "Predeterminado",
|
||||
"Do Not Override": "No anular",
|
||||
"Disabled": "Discapacitado",
|
||||
"Enabled": "Habilitado",
|
||||
" \\ue0e3 Reset": "\\ue0e3 Restablecer",
|
||||
"Display": "Pantalla",
|
||||
"Application changed\\n\\n": "Aplicación modificada\\n\\n",
|
||||
"The running application changed\\n\\n": "La aplicación en ejecución cambió\\n\\n",
|
||||
"while editing was going on.": "mientras se realizaba la edición.",
|
||||
"Board": "tablero",
|
||||
"%u.%u%u mV": "%u.%u%u mV",
|
||||
"Could not connect to hoc-clk sysmodule.\\n\\n": "No se pudo conectar al módulo del sistema hoc-clk.\\n\\n",
|
||||
"Please make sure everything is\\n\\n": "Por favor asegúrese de que todo esté\\n\\n",
|
||||
"correctly installed and enabled.": "correctamente instalado y habilitado.",
|
||||
"Fatal error": "error fatal",
|
||||
"Temporary Overrides ": "Anulaciones temporales",
|
||||
"Sleep Mode": "Modo de suspensión",
|
||||
"Stock": "Valores",
|
||||
"Dev OC": "Desarrollador OC",
|
||||
"Boost Mode": "Modo de impulso",
|
||||
"Safe Max": "Máximo seguro",
|
||||
"Unsafe Max": "Máximo inseguro",
|
||||
"Absolute Max": "Máximo absoluto",
|
||||
"Handheld Safe Max": "Caja fuerte de mano máx.",
|
||||
"Enable": "Habilitar",
|
||||
"Edit App Profile": "Editar perfil de aplicación",
|
||||
"Edit Global Profile": "Editar perfil global",
|
||||
"Temporary Overrides": "Anulaciones temporales",
|
||||
"Settings": "Configuración",
|
||||
"About": "Acerca de",
|
||||
"Compiling with minimal features": "Compilando con características mínimas",
|
||||
"General Settings": "Configuraciones generales",
|
||||
"Governor Settings": "Configuración del gobernador",
|
||||
"Safety Settings": "Configuraciones de seguridad",
|
||||
"Save KIP Settings": "Guardar configuración de KIP",
|
||||
"RAM Settings": "Configuración de RAM",
|
||||
"CPU Settings": "Configuración de la CPU",
|
||||
"GPU Settings": "Configuración de GPU",
|
||||
"Display Settings": "Configuración de pantalla",
|
||||
"Experimental": "Experimental",
|
||||
"GPU Scheduling Override Method": "Método de anulación de programación de GPU",
|
||||
"can be dangerous and may cause": "puede ser peligroso y puede causar",
|
||||
"damage to your battery or charger!": "¡Daños a su batería o cargador!",
|
||||
"Charge Current Override": "Anulación de corriente de carga",
|
||||
"RAM Voltage Display Mode": "Modo de visualización de voltaje de RAM",
|
||||
"Polling Interval": "Intervalo de sondeo",
|
||||
"CPU Governor Minimum Frequency": "Frecuencia mínima del gobernador de CPU",
|
||||
"refresh rates may cause stress": "Las frecuencias de actualización pueden causar estrés.",
|
||||
"or damage to your display! ": "o daños a su pantalla!",
|
||||
"Proceed at your own risk!": "¡Continúe bajo su propio riesgo!",
|
||||
"Max Handheld Display": "Pantalla portátil máxima",
|
||||
"Display Clock": "Reloj de pantalla",
|
||||
"Official Rating": "Calificación oficial",
|
||||
"TDP Threshold": "Umbral de TDP",
|
||||
"Power": "poder",
|
||||
"Thermal Throttle Limit": "Límite del acelerador térmico",
|
||||
"HP Mode": "Modo HP",
|
||||
"Default (Mariko)": "Predeterminado (Mariko)",
|
||||
"Default (Erista)": "Predeterminado (Erista)",
|
||||
"Rating": "Calificación",
|
||||
"Safe Max (Mariko)": "Max seguro (Mariko)",
|
||||
"Safe Max (Erista)": "Safe Max (Erista)",
|
||||
"RAM VDD2 Voltage": "Voltaje RAM VDD2",
|
||||
"Voltage": "voltaje",
|
||||
"RAM VDDQ Voltage": "Voltaje RAM VDDQ",
|
||||
"RAM Frequency Editor": "Editor de frecuencia RAM",
|
||||
"JEDEC.": "JEDEC.",
|
||||
"High speedo needed!": "¡Se necesita alta velocidad!",
|
||||
"3333MHz (Needs extreme Speedo/PLL)": "3333MHz (Necesita Speedo/PLL extremo)",
|
||||
"3366MHz (Needs extreme Speedo/PLL)": "3366MHz (Necesita Speedo/PLL extremo)",
|
||||
"3400MHz (Needs extreme Speedo/PLL)": "3400MHz (Necesita Speedo/PLL extremo)",
|
||||
"3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (Necesita Speedo/PLL ridículo)",
|
||||
"3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz (Necesita Speedo/PLL ridículo)",
|
||||
"3500MHz (Needs ridiculous Speedo/PLL)": "3500MHz (Necesita Speedo/PLL ridículo)",
|
||||
"Ram Max Clock": "Ram Max Reloj",
|
||||
"RAM Latency Editor": "Editor de latencia de RAM",
|
||||
"RAM Timing Reductions": "Reducciones de tiempo de RAM",
|
||||
"Memory Timings": "Tiempos de memoria",
|
||||
"Advanced": "Avanzado",
|
||||
"t6 tRTW Fine Tune": "t6 tRTW Ajuste fino",
|
||||
"tRTW Fine Tune": "Ajuste fino tRTW",
|
||||
"t7 tWTR Fine Tune": "t7 tWTR Ajuste fino",
|
||||
"tWTR Fine Tune": "Ajuste fino de tWTR",
|
||||
"Memory Latencies": "Latencias de la memoria",
|
||||
"Read Latency": "Leer latencia",
|
||||
"Write Latency": "Latencia de escritura",
|
||||
"CPU Boost Clock": "Reloj de aumento de CPU",
|
||||
"CPU UV": "procesador ultravioleta",
|
||||
"CPU Unlock": "Desbloqueo de CPU",
|
||||
"CPU VMIN": "CPU VMIN",
|
||||
"CPU Max Voltage": "Voltaje máximo de la CPU",
|
||||
"CPU Max Clock": "Reloj máximo de CPU",
|
||||
"Extreme UV Table": "Mesa UV extrema",
|
||||
"CPU UV Table": "Tabla UV de CPU",
|
||||
"CPU Low UV": "CPU baja radiación ultravioleta",
|
||||
"CPU High UV": "CPU alta UV",
|
||||
"CPU Low VMIN": "VMIN bajo de CPU",
|
||||
"CPU High VMIN": "VMIN alto de CPU",
|
||||
"No Undervolt": "Sin subvoltaje",
|
||||
"SLT Table": "Mesa TR",
|
||||
"HiOPT Table": "Tabla HiOPT",
|
||||
"GPU Undervolt Table": "Tabla de subvoltaje de GPU",
|
||||
"GPU Minimum Voltage": "Voltaje mínimo de GPU",
|
||||
"Calculate GPU Vmin": "Calcular GPU Vmin",
|
||||
"GPU VMIN": "GPU VMIN",
|
||||
"GPU Maximum Voltage": "Voltaje máximo de GPU",
|
||||
"GPU Voltage Offset": "Compensación de voltaje de GPU",
|
||||
"Do not override": "no anular",
|
||||
"Enabled (Default)": "Habilitado (predeterminado)",
|
||||
"96.6% limit": "límite del 96,6%",
|
||||
"99.7% limit": "límite del 99,7%",
|
||||
"GPU Scheduling Override": "Anulación de programación de GPU",
|
||||
"Official Service": "Servicio Oficial",
|
||||
"GPU DVFS Mode": "Modo GPU DVFS",
|
||||
"GPU DVFS Offset": "Compensación DVFS de GPU",
|
||||
"GPU Voltage Table": "Tabla de voltaje de GPU",
|
||||
"GPU Custom Table (mV)": "Tabla personalizada de GPU (mV)",
|
||||
"1075MHz without UV, 1152MHz on SLT": "1075MHz sin UV, 1152MHz en SLT",
|
||||
"or 1228MHz on HiOPT can cause ": "o 1228MHz en HiOPT pueden causar",
|
||||
"permanent damage to your Switch!": "¡Daño permanente a tu Switch!",
|
||||
"921MHz without UV and 960MHz on": "921MHz sin UV y 960MHz encendido",
|
||||
"SLT or HiOPT can cause ": "SLT o HiOPT pueden causar"
|
||||
}
|
||||
141
Source/hoc-clk/overlay/lang/fr.json
Normal file
141
Source/hoc-clk/overlay/lang/fr.json
Normal file
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"Information": "Informations",
|
||||
"IDDQ:": "IDDQ :",
|
||||
"Module: ": "Module :",
|
||||
"sys-dock status:": "état du dock système :",
|
||||
"SaltyNX status:": "Statut SaltyNX :",
|
||||
"RR Display status:": "Etat d'affichage RR :",
|
||||
"Wafer Position:": "Position de la plaquette :",
|
||||
"Credits": "Crédits",
|
||||
"Developers": "Développeurs",
|
||||
"Contributors": "Contributeurs",
|
||||
"Testers": "Testeurs",
|
||||
"Special Thanks": "Remerciements spéciaux",
|
||||
"Unknown": "Inconnu",
|
||||
"Installed": "Installé",
|
||||
"Not Installed": "Non installé",
|
||||
"X: %u Y: %u": "X : %u Y : %u",
|
||||
"THE BEER-WARE LICENSE": "LA LICENCE DE LA BIÈRE",
|
||||
"Default": "Par défaut",
|
||||
"Do Not Override": "Ne pas remplacer",
|
||||
"Disabled": "Désactivé",
|
||||
"Enabled": "Activé",
|
||||
" \\ue0e3 Reset": "\\ue0e3 Réinitialiser",
|
||||
"Display": "Affichage",
|
||||
"Application changed\\n\\n": "Application modifiée\\n\\n",
|
||||
"The running application changed\\n\\n": "L'application en cours d'exécution a changé\\n\\n",
|
||||
"while editing was going on.": "pendant le montage.",
|
||||
"Board": "Conseil",
|
||||
"%u.%u%u mV": "%u.%u%u mV",
|
||||
"Could not connect to hoc-clk sysmodule.\\n\\n": "Impossible de se connecter au module système hoc-clk.\\n\\n",
|
||||
"Please make sure everything is\\n\\n": "Veuillez vous assurer que tout est\\n\\n",
|
||||
"correctly installed and enabled.": "correctement installé et activé.",
|
||||
"Fatal error": "Erreur fatale",
|
||||
"Temporary Overrides ": "Remplacements temporaires",
|
||||
"Sleep Mode": "Mode veille",
|
||||
"Stock": "Actions",
|
||||
"Dev OC": "Développeur OC",
|
||||
"Boost Mode": "Mode Boost",
|
||||
"Safe Max": "Coffre-fort maximum",
|
||||
"Unsafe Max": "Dangereux Max",
|
||||
"Absolute Max": "Max absolu",
|
||||
"Handheld Safe Max": "Coffre-fort portatif Max",
|
||||
"Enable": "Activer",
|
||||
"Edit App Profile": "Modifier le profil de l'application",
|
||||
"Edit Global Profile": "Modifier le profil global",
|
||||
"Temporary Overrides": "Remplacements temporaires",
|
||||
"Settings": "Paramètres",
|
||||
"About": "À propos",
|
||||
"Compiling with minimal features": "Compilation avec des fonctionnalités minimales",
|
||||
"General Settings": "Paramètres généraux",
|
||||
"Governor Settings": "Paramètres du gouverneur",
|
||||
"Safety Settings": "Paramètres de sécurité",
|
||||
"Save KIP Settings": "Enregistrer les paramètres KIP",
|
||||
"RAM Settings": "Paramètres de la RAM",
|
||||
"CPU Settings": "Paramètres du processeur",
|
||||
"GPU Settings": "Paramètres du processeur graphique",
|
||||
"Display Settings": "Paramètres d'affichage",
|
||||
"Experimental": "Expérimental",
|
||||
"GPU Scheduling Override Method": "Méthode de remplacement de la planification GPU",
|
||||
"can be dangerous and may cause": "peut être dangereux et provoquer",
|
||||
"damage to your battery or charger!": "dommages à votre batterie ou à votre chargeur !",
|
||||
"Charge Current Override": "Remplacement du courant de charge",
|
||||
"RAM Voltage Display Mode": "Mode d'affichage de la tension de la RAM",
|
||||
"Polling Interval": "Intervalle d'interrogation",
|
||||
"CPU Governor Minimum Frequency": "Fréquence minimale du gouverneur du processeur",
|
||||
"refresh rates may cause stress": "les taux de rafraîchissement peuvent causer du stress",
|
||||
"or damage to your display! ": "ou endommager votre écran !",
|
||||
"Proceed at your own risk!": "Procédez à vos propres risques !",
|
||||
"Max Handheld Display": "Affichage portable maximum",
|
||||
"Display Clock": "Affichage de l'horloge",
|
||||
"Official Rating": "Classement officiel",
|
||||
"TDP Threshold": "Seuil TDP",
|
||||
"Power": "Puissance",
|
||||
"Thermal Throttle Limit": "Limite d'accélérateur thermique",
|
||||
"HP Mode": "Mode HP",
|
||||
"Default (Mariko)": "Par défaut (Mariko)",
|
||||
"Default (Erista)": "Par défaut (Erista)",
|
||||
"Rating": "Note",
|
||||
"Safe Max (Mariko)": "Coffre-fort Max (Mariko)",
|
||||
"Safe Max (Erista)": "Coffre-fort Max (Erista)",
|
||||
"RAM VDD2 Voltage": "Tension de la RAM VDD2",
|
||||
"Voltage": "Tension",
|
||||
"RAM VDDQ Voltage": "Tension VDDQ de la RAM",
|
||||
"RAM Frequency Editor": "Éditeur de fréquence RAM",
|
||||
"JEDEC.": "JEDEC.",
|
||||
"High speedo needed!": "Besoin d'un speedo haut !",
|
||||
"3333MHz (Needs extreme Speedo/PLL)": "3333 MHz (nécessite un Speedo/PLL extrême)",
|
||||
"3366MHz (Needs extreme Speedo/PLL)": "3366 MHz (nécessite un Speedo/PLL extrême)",
|
||||
"3400MHz (Needs extreme Speedo/PLL)": "3400 MHz (nécessite un Speedo/PLL extrême)",
|
||||
"3433MHz (Needs ridiculous Speedo/PLL)": "3433 MHz (nécessite un Speedo/PLL ridicule)",
|
||||
"3466MHz (Needs ridiculous Speedo/PLL)": "3466 MHz (nécessite un Speedo/PLL ridicule)",
|
||||
"3500MHz (Needs ridiculous Speedo/PLL)": "3500 MHz (nécessite un Speedo/PLL ridicule)",
|
||||
"Ram Max Clock": "Ram Max Horloge",
|
||||
"RAM Latency Editor": "Éditeur de latence RAM",
|
||||
"RAM Timing Reductions": "Réductions de synchronisation de la RAM",
|
||||
"Memory Timings": "Horaires de mémoire",
|
||||
"Advanced": "Avancé",
|
||||
"t6 tRTW Fine Tune": "t6 tRTW réglage fin",
|
||||
"tRTW Fine Tune": "tRTW Réglage fin",
|
||||
"t7 tWTR Fine Tune": "t7 tWTR réglage fin",
|
||||
"tWTR Fine Tune": "Réglage fin du tWTR",
|
||||
"Memory Latencies": "Latences de mémoire",
|
||||
"Read Latency": "Latence de lecture",
|
||||
"Write Latency": "Latence d'écriture",
|
||||
"CPU Boost Clock": "Horloge d'augmentation du processeur",
|
||||
"CPU UV": "UV du processeur",
|
||||
"CPU Unlock": "Déverrouillage du processeur",
|
||||
"CPU VMIN": "CPU VMIN",
|
||||
"CPU Max Voltage": "Tension maximale du processeur",
|
||||
"CPU Max Clock": "Horloge maximale du processeur",
|
||||
"Extreme UV Table": "Table UV Extrême",
|
||||
"CPU UV Table": "Tableau UV du processeur",
|
||||
"CPU Low UV": "CPU faible UV",
|
||||
"CPU High UV": "CPU UV élevé",
|
||||
"CPU Low VMIN": "CPU faible VMIN",
|
||||
"CPU High VMIN": "Processeur VMIN élevé",
|
||||
"No Undervolt": "Pas de sous-tension",
|
||||
"SLT Table": "Tableau SLT",
|
||||
"HiOPT Table": "Tableau HiOPT",
|
||||
"GPU Undervolt Table": "Tableau de sous-tension GPU",
|
||||
"GPU Minimum Voltage": "Tension minimale du GPU",
|
||||
"Calculate GPU Vmin": "Calculer la Vmin du GPU",
|
||||
"GPU VMIN": "GPU VMIN",
|
||||
"GPU Maximum Voltage": "Tension maximale du GPU",
|
||||
"GPU Voltage Offset": "Décalage de tension du GPU",
|
||||
"Do not override": "Ne remplacez pas",
|
||||
"Enabled (Default)": "Activé (par défaut)",
|
||||
"96.6% limit": "Limite de 96,6 %",
|
||||
"99.7% limit": "Limite de 99,7 %",
|
||||
"GPU Scheduling Override": "Remplacement de la planification GPU",
|
||||
"Official Service": "Service officiel",
|
||||
"GPU DVFS Mode": "Mode GPU DVFS",
|
||||
"GPU DVFS Offset": "Décalage GPU DVFS",
|
||||
"GPU Voltage Table": "Tableau de tension du GPU",
|
||||
"GPU Custom Table (mV)": "Tableau personnalisé GPU (mV)",
|
||||
"1075MHz without UV, 1152MHz on SLT": "1075 MHz sans UV, 1152 MHz sur SLT",
|
||||
"or 1228MHz on HiOPT can cause ": "ou 1228 MHz sur HiOPT peut provoquer",
|
||||
"permanent damage to your Switch!": "dommages permanents à votre Switch !",
|
||||
"921MHz without UV and 960MHz on": "921 MHz sans UV et 960 MHz activé",
|
||||
"SLT or HiOPT can cause ": "SLT ou HiOPT peuvent provoquer"
|
||||
}
|
||||
141
Source/hoc-clk/overlay/lang/it.json
Normal file
141
Source/hoc-clk/overlay/lang/it.json
Normal file
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"Information": "Informazioni",
|
||||
"IDDQ:": "IDDQ:",
|
||||
"Module: ": "Modulo:",
|
||||
"sys-dock status:": "stato del dock di sistema:",
|
||||
"SaltyNX status:": "Stato di SaltyNX:",
|
||||
"RR Display status:": "Stato di visualizzazione RR:",
|
||||
"Wafer Position:": "Posizione del wafer:",
|
||||
"Credits": "Crediti",
|
||||
"Developers": "Sviluppatori",
|
||||
"Contributors": "Collaboratori",
|
||||
"Testers": "Tester",
|
||||
"Special Thanks": "Un ringraziamento speciale",
|
||||
"Unknown": "Sconosciuto",
|
||||
"Installed": "Installato",
|
||||
"Not Installed": "Non installato",
|
||||
"X: %u Y: %u": "X: %u Y: %u",
|
||||
"THE BEER-WARE LICENSE": "LA LICENZA PER GLI ARTICOLI DI BIRRA",
|
||||
"Default": "Predefinito",
|
||||
"Do Not Override": "Non sovrascrivere",
|
||||
"Disabled": "Disabilitato",
|
||||
"Enabled": "Abilitato",
|
||||
" \\ue0e3 Reset": "\\ue0e3 Ripristina",
|
||||
"Display": "Visualizzazione",
|
||||
"Application changed\\n\\n": "Applicazione modificata\\n\\n",
|
||||
"The running application changed\\n\\n": "L'applicazione in esecuzione è cambiata\\n\\n",
|
||||
"while editing was going on.": "mentre era in corso la modifica.",
|
||||
"Board": "Consiglio",
|
||||
"%u.%u%u mV": "%u.%u%u mV",
|
||||
"Could not connect to hoc-clk sysmodule.\\n\\n": "Impossibile connettersi al modulo di sistema hoc-clk.\\n\\n",
|
||||
"Please make sure everything is\\n\\n": "Assicurati che tutto sia\\n\\n",
|
||||
"correctly installed and enabled.": "correttamente installato e abilitato.",
|
||||
"Fatal error": "Errore fatale",
|
||||
"Temporary Overrides ": "Sostituzioni temporanee",
|
||||
"Sleep Mode": "Modalità di sospensione",
|
||||
"Stock": "Magazzino",
|
||||
"Dev OC": "OC di sviluppo",
|
||||
"Boost Mode": "Modalità potenziamento",
|
||||
"Safe Max": "Sicuro massimo",
|
||||
"Unsafe Max": "Non sicuro Max",
|
||||
"Absolute Max": "Massimo assoluto",
|
||||
"Handheld Safe Max": "Cassaforte portatile max",
|
||||
"Enable": "Abilita",
|
||||
"Edit App Profile": "Modifica profilo dell'app",
|
||||
"Edit Global Profile": "Modifica profilo globale",
|
||||
"Temporary Overrides": "Sostituzioni temporanee",
|
||||
"Settings": "Impostazioni",
|
||||
"About": "Circa",
|
||||
"Compiling with minimal features": "Compilazione con funzionalità minime",
|
||||
"General Settings": "Impostazioni generali",
|
||||
"Governor Settings": "Impostazioni del governatore",
|
||||
"Safety Settings": "Impostazioni di sicurezza",
|
||||
"Save KIP Settings": "Salva le impostazioni KIP",
|
||||
"RAM Settings": "Impostazioni della RAM",
|
||||
"CPU Settings": "Impostazioni della CPU",
|
||||
"GPU Settings": "Impostazioni della GPU",
|
||||
"Display Settings": "Impostazioni di visualizzazione",
|
||||
"Experimental": "Sperimentale",
|
||||
"GPU Scheduling Override Method": "Metodo di override della pianificazione GPU",
|
||||
"can be dangerous and may cause": "può essere pericoloso e può causare",
|
||||
"damage to your battery or charger!": "danni alla batteria o al caricabatterie!",
|
||||
"Charge Current Override": "Override della corrente di carica",
|
||||
"RAM Voltage Display Mode": "Modalità di visualizzazione della tensione RAM",
|
||||
"Polling Interval": "Intervallo di polling",
|
||||
"CPU Governor Minimum Frequency": "Frequenza minima del governatore della CPU",
|
||||
"refresh rates may cause stress": "le frequenze di aggiornamento possono causare stress",
|
||||
"or damage to your display! ": "o danni al display!",
|
||||
"Proceed at your own risk!": "Procedi a tuo rischio e pericolo!",
|
||||
"Max Handheld Display": "Display portatile massimo",
|
||||
"Display Clock": "Visualizza orologio",
|
||||
"Official Rating": "Valutazione ufficiale",
|
||||
"TDP Threshold": "Soglia TDP",
|
||||
"Power": "Potenza",
|
||||
"Thermal Throttle Limit": "Limite della valvola termica",
|
||||
"HP Mode": "Modalità HP",
|
||||
"Default (Mariko)": "Predefinito (Mariko)",
|
||||
"Default (Erista)": "Predefinito (Erista)",
|
||||
"Rating": "Valutazione",
|
||||
"Safe Max (Mariko)": "Safe Max (Mariko)",
|
||||
"Safe Max (Erista)": "Safe Max (Erista)",
|
||||
"RAM VDD2 Voltage": "Tensione RAM VDD2",
|
||||
"Voltage": "Voltaggio",
|
||||
"RAM VDDQ Voltage": "Voltaggio VDDQ della RAM",
|
||||
"RAM Frequency Editor": "Editor della frequenza RAM",
|
||||
"JEDEC.": "JEDEC.",
|
||||
"High speedo needed!": "È necessaria l'alta velocità!",
|
||||
"3333MHz (Needs extreme Speedo/PLL)": "3333 MHz (richiede Speedo/PLL estremo)",
|
||||
"3366MHz (Needs extreme Speedo/PLL)": "3366 MHz (richiede Speedo/PLL estremo)",
|
||||
"3400MHz (Needs extreme Speedo/PLL)": "3400 MHz (richiede Speedo/PLL estremo)",
|
||||
"3433MHz (Needs ridiculous Speedo/PLL)": "3433 MHz (è necessario un ridicolo Speedo/PLL)",
|
||||
"3466MHz (Needs ridiculous Speedo/PLL)": "3466 MHz (è necessario un ridicolo Speedo/PLL)",
|
||||
"3500MHz (Needs ridiculous Speedo/PLL)": "3500 MHz (è necessario un ridicolo Speedo/PLL)",
|
||||
"Ram Max Clock": "Orologio Ram Max",
|
||||
"RAM Latency Editor": "Editor della latenza RAM",
|
||||
"RAM Timing Reductions": "Riduzioni della temporizzazione della RAM",
|
||||
"Memory Timings": "Tempi di memoria",
|
||||
"Advanced": "Avanzato",
|
||||
"t6 tRTW Fine Tune": "t6 tRTW Sintonia fine",
|
||||
"tRTW Fine Tune": "tRTW Sintonia fine",
|
||||
"t7 tWTR Fine Tune": "t7 tWTR Sintonia fine",
|
||||
"tWTR Fine Tune": "tWTR Sintonia fine",
|
||||
"Memory Latencies": "Latenza della memoria",
|
||||
"Read Latency": "Leggi latenza",
|
||||
"Write Latency": "Scrivi latenza",
|
||||
"CPU Boost Clock": "Orologio di potenziamento della CPU",
|
||||
"CPU UV": "UV della CPU",
|
||||
"CPU Unlock": "Sblocco della CPU",
|
||||
"CPU VMIN": "CPUVMIN",
|
||||
"CPU Max Voltage": "Voltaggio massimo della CPU",
|
||||
"CPU Max Clock": "Orologio massimo della CPU",
|
||||
"Extreme UV Table": "Tavolo UV estremo",
|
||||
"CPU UV Table": "Tabella UV della CPU",
|
||||
"CPU Low UV": "CPU con raggi UV bassi",
|
||||
"CPU High UV": "UV elevato della CPU",
|
||||
"CPU Low VMIN": "VMIN CPU basso",
|
||||
"CPU High VMIN": "CPU alta VMIN",
|
||||
"No Undervolt": "Nessuna sottotensione",
|
||||
"SLT Table": "Tabella SLT",
|
||||
"HiOPT Table": "Tabella HiOPT",
|
||||
"GPU Undervolt Table": "Tabella di sottotensione GPU",
|
||||
"GPU Minimum Voltage": "Voltaggio minimo della GPU",
|
||||
"Calculate GPU Vmin": "Calcola GPU Vmin",
|
||||
"GPU VMIN": "GPUVMIN",
|
||||
"GPU Maximum Voltage": "Voltaggio massimo della GPU",
|
||||
"GPU Voltage Offset": "Offset di tensione della GPU",
|
||||
"Do not override": "Non sovrascrivere",
|
||||
"Enabled (Default)": "Abilitato (impostazione predefinita)",
|
||||
"96.6% limit": "Limite del 96,6%.",
|
||||
"99.7% limit": "Limite del 99,7%.",
|
||||
"GPU Scheduling Override": "Override della pianificazione GPU",
|
||||
"Official Service": "Servizio ufficiale",
|
||||
"GPU DVFS Mode": "Modalità DVFS GPU",
|
||||
"GPU DVFS Offset": "Offset DVFS della GPU",
|
||||
"GPU Voltage Table": "Tabella delle tensioni della GPU",
|
||||
"GPU Custom Table (mV)": "Tabella personalizzata GPU (mV)",
|
||||
"1075MHz without UV, 1152MHz on SLT": "1075 MHz senza UV, 1152 MHz su SLT",
|
||||
"or 1228MHz on HiOPT can cause ": "o 1228 MHz su HiOPT possono causare",
|
||||
"permanent damage to your Switch!": "danni permanenti al tuo Switch!",
|
||||
"921MHz without UV and 960MHz on": "921 MHz senza UV e 960 MHz attivi",
|
||||
"SLT or HiOPT can cause ": "SLT o HiOPT possono causare"
|
||||
}
|
||||
141
Source/hoc-clk/overlay/lang/ja.json
Normal file
141
Source/hoc-clk/overlay/lang/ja.json
Normal file
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"Information": "情報",
|
||||
"IDDQ:": "IDQ:",
|
||||
"Module: ": "モジュール:",
|
||||
"sys-dock status:": "システムドックのステータス:",
|
||||
"SaltyNX status:": "SaltyNX ステータス:",
|
||||
"RR Display status:": "RR 表示ステータス:",
|
||||
"Wafer Position:": "ウェーハの位置:",
|
||||
"Credits": "クレジット",
|
||||
"Developers": "開発者",
|
||||
"Contributors": "貢献者",
|
||||
"Testers": "テスター",
|
||||
"Special Thanks": "特別な感謝の気持ち",
|
||||
"Unknown": "不明",
|
||||
"Installed": "インストール済み",
|
||||
"Not Installed": "インストールされていません",
|
||||
"X: %u Y: %u": "X: %u Y: %u",
|
||||
"THE BEER-WARE LICENSE": "ビール製品ライセンス",
|
||||
"Default": "デフォルト",
|
||||
"Do Not Override": "上書きしないでください",
|
||||
"Disabled": "障害者",
|
||||
"Enabled": "有効",
|
||||
" \\ue0e3 Reset": "\\ue0e3 リセット",
|
||||
"Display": "ディスプレイ",
|
||||
"Application changed\\n\\n": "アプリケーションが変更されました\\n\\n",
|
||||
"The running application changed\\n\\n": "実行中のアプリケーションが変更されました\\n\\n",
|
||||
"while editing was going on.": "編集を進めている最中でした。",
|
||||
"Board": "理事会",
|
||||
"%u.%u%u mV": "%u.%u%u mV",
|
||||
"Could not connect to hoc-clk sysmodule.\\n\\n": "hoc-clk sysmodule に接続できませんでした。\\n\\n",
|
||||
"Please make sure everything is\\n\\n": "すべてが正しいことを確認してください\\n\\n",
|
||||
"correctly installed and enabled.": "正しくインストールされ、有効になっています。",
|
||||
"Fatal error": "致命的なエラー",
|
||||
"Temporary Overrides ": "一時的なオーバーライド",
|
||||
"Sleep Mode": "スリープモード",
|
||||
"Stock": "在庫",
|
||||
"Dev OC": "開発OC",
|
||||
"Boost Mode": "ブーストモード",
|
||||
"Safe Max": "セーフマックス",
|
||||
"Unsafe Max": "危険なマックス",
|
||||
"Absolute Max": "絶対最大値",
|
||||
"Handheld Safe Max": "手持ち金庫マックス",
|
||||
"Enable": "有効にする",
|
||||
"Edit App Profile": "アプリプロファイルの編集",
|
||||
"Edit Global Profile": "グローバルプロファイルの編集",
|
||||
"Temporary Overrides": "一時的なオーバーライド",
|
||||
"Settings": "設定",
|
||||
"About": "について",
|
||||
"Compiling with minimal features": "最小限の機能でコンパイルする",
|
||||
"General Settings": "一般設定",
|
||||
"Governor Settings": "ガバナーの設定",
|
||||
"Safety Settings": "安全設定",
|
||||
"Save KIP Settings": "KIP 設定の保存",
|
||||
"RAM Settings": "RAM設定",
|
||||
"CPU Settings": "CPUの設定",
|
||||
"GPU Settings": "GPU設定",
|
||||
"Display Settings": "表示設定",
|
||||
"Experimental": "実験的",
|
||||
"GPU Scheduling Override Method": "GPU スケジューリング オーバーライド メソッド",
|
||||
"can be dangerous and may cause": "危険であり、原因となる可能性があります",
|
||||
"damage to your battery or charger!": "バッテリーまたは充電器が損傷します。",
|
||||
"Charge Current Override": "充電電流オーバーライド",
|
||||
"RAM Voltage Display Mode": "RAM電圧表示モード",
|
||||
"Polling Interval": "ポーリング間隔",
|
||||
"CPU Governor Minimum Frequency": "CPU ガバナの最小周波数",
|
||||
"refresh rates may cause stress": "リフレッシュレートがストレスを引き起こす可能性がある",
|
||||
"or damage to your display! ": "ディスプレイに損傷を与えてしまいます。",
|
||||
"Proceed at your own risk!": "自己責任で進めてください!",
|
||||
"Max Handheld Display": "最大ハンドヘルドディスプレイ",
|
||||
"Display Clock": "時計の表示",
|
||||
"Official Rating": "公式評価",
|
||||
"TDP Threshold": "TDP しきい値",
|
||||
"Power": "パワー",
|
||||
"Thermal Throttle Limit": "サーマルスロットル制限",
|
||||
"HP Mode": "HPモード",
|
||||
"Default (Mariko)": "デフォルト(マリコ)",
|
||||
"Default (Erista)": "デフォルト(エリスタ)",
|
||||
"Rating": "評価",
|
||||
"Safe Max (Mariko)": "セーフマックス(マリコ)",
|
||||
"Safe Max (Erista)": "セーフマックス(エリスタ)",
|
||||
"RAM VDD2 Voltage": "RAM VDD2 電圧",
|
||||
"Voltage": "電圧",
|
||||
"RAM VDDQ Voltage": "RAM VDDQ 電圧",
|
||||
"RAM Frequency Editor": "RAM周波数エディター",
|
||||
"JEDEC.": "JEDEC。",
|
||||
"High speedo needed!": "ハイスピードが必要です!",
|
||||
"3333MHz (Needs extreme Speedo/PLL)": "3333MHz (エクストリーム Speedo/PLL が必要)",
|
||||
"3366MHz (Needs extreme Speedo/PLL)": "3366MHz (エクストリーム Speedo/PLL が必要)",
|
||||
"3400MHz (Needs extreme Speedo/PLL)": "3400MHz (エクストリーム Speedo/PLL が必要)",
|
||||
"3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (とんでもない Speedo/PLL が必要)",
|
||||
"3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz (とんでもない Speedo/PLL が必要)",
|
||||
"3500MHz (Needs ridiculous Speedo/PLL)": "3500MHz (とんでもない Speedo/PLL が必要)",
|
||||
"Ram Max Clock": "ラムマックスクロック",
|
||||
"RAM Latency Editor": "RAM レイテンシ エディター",
|
||||
"RAM Timing Reductions": "RAM タイミングの削減",
|
||||
"Memory Timings": "メモリタイミング",
|
||||
"Advanced": "上級者向け",
|
||||
"t6 tRTW Fine Tune": "t6 tRTW 微調整",
|
||||
"tRTW Fine Tune": "tRTW 微調整",
|
||||
"t7 tWTR Fine Tune": "t7 tWTR ファインチューン",
|
||||
"tWTR Fine Tune": "tWTR ファインチューン",
|
||||
"Memory Latencies": "メモリレイテンシ",
|
||||
"Read Latency": "読み取りレイテンシー",
|
||||
"Write Latency": "書き込みレイテンシ",
|
||||
"CPU Boost Clock": "CPUブーストクロック",
|
||||
"CPU UV": "CPU UV",
|
||||
"CPU Unlock": "CPUロック解除",
|
||||
"CPU VMIN": "CPU VMIN",
|
||||
"CPU Max Voltage": "CPU最大電圧",
|
||||
"CPU Max Clock": "CPU最大クロック",
|
||||
"Extreme UV Table": "エクストリーム UV テーブル",
|
||||
"CPU UV Table": "CPU UV テーブル",
|
||||
"CPU Low UV": "CPU 低 UV",
|
||||
"CPU High UV": "CPU 高紫外線",
|
||||
"CPU Low VMIN": "CPU 低 VMIN",
|
||||
"CPU High VMIN": "CPU の高い VMIN",
|
||||
"No Undervolt": "不足電圧なし",
|
||||
"SLT Table": "SLTテーブル",
|
||||
"HiOPT Table": "HiOPT テーブル",
|
||||
"GPU Undervolt Table": "GPUアンダーボルトテーブル",
|
||||
"GPU Minimum Voltage": "GPUの最小電圧",
|
||||
"Calculate GPU Vmin": "GPU Vmin を計算する",
|
||||
"GPU VMIN": "GPU VMIN",
|
||||
"GPU Maximum Voltage": "GPU最大電圧",
|
||||
"GPU Voltage Offset": "GPU電圧オフセット",
|
||||
"Do not override": "上書きしないでください",
|
||||
"Enabled (Default)": "有効 (デフォルト)",
|
||||
"96.6% limit": "96.6%制限",
|
||||
"99.7% limit": "99.7%制限",
|
||||
"GPU Scheduling Override": "GPU スケジュールのオーバーライド",
|
||||
"Official Service": "正式サービス",
|
||||
"GPU DVFS Mode": "GPU DVFS モード",
|
||||
"GPU DVFS Offset": "GPU DVFS オフセット",
|
||||
"GPU Voltage Table": "GPU電圧テーブル",
|
||||
"GPU Custom Table (mV)": "GPUカスタムテーブル(mV)",
|
||||
"1075MHz without UV, 1152MHz on SLT": "UVなしで1075MHz、SLTで1152MHz",
|
||||
"or 1228MHz on HiOPT can cause ": "HiOPT で 1228MHz を使用すると、次のような問題が発生する可能性があります。",
|
||||
"permanent damage to your Switch!": "Switch に永久的なダメージを与えます!",
|
||||
"921MHz without UV and 960MHz on": "921MHz(UVなし)、960MHz(UVあり)",
|
||||
"SLT or HiOPT can cause ": "SLT または HiOPT が原因となる可能性があります"
|
||||
}
|
||||
146
Source/hoc-clk/overlay/lang/jp.json
Normal file
146
Source/hoc-clk/overlay/lang/jp.json
Normal file
@@ -0,0 +1,146 @@
|
||||
{
|
||||
"Information": "Information",
|
||||
"IDDQ:": "IDDQ:",
|
||||
"Module: ": "Module:",
|
||||
"sys-dock status:": "sys-dock status:",
|
||||
"SaltyNX status:": "SaltyNX status:",
|
||||
"RR Display status:": "RR Display status:",
|
||||
"Wafer Position:": "Wafer Position:",
|
||||
"Credits": "Credits",
|
||||
"Developers": "Developers",
|
||||
"Contributors": "Contributors",
|
||||
"Testers": "Testers",
|
||||
"Special Thanks": "Special Thanks",
|
||||
"Unknown": "Unknown",
|
||||
"Installed": "Installed",
|
||||
"Not Installed": "Not Installed",
|
||||
"X: %u Y: %u": "X: %u Y: %u",
|
||||
"THE BEER-WARE LICENSE": "THE BEER-WARE LICENSE",
|
||||
"Default": "Default",
|
||||
"Do Not Override": "Do Not Override",
|
||||
"Disabled": "Disabled",
|
||||
"Enabled": "Enabled",
|
||||
" \\ue0e3 Reset": "\\ue0e3 Reset",
|
||||
"Display": "Display",
|
||||
"Application changed\\n\\n": "Application changed\\n\\n",
|
||||
"The running application changed\\n\\n": "The running application changed\\n\\n",
|
||||
"while editing was going on.": "while editing was going on.",
|
||||
"App ID": "App ID",
|
||||
"Profile": "Profile",
|
||||
"Board": "Board",
|
||||
"USB Charger": "USB Charger",
|
||||
"%u.%u%u mV": "%u.%u%u mV",
|
||||
"Could not connect to hoc-clk sysmodule.\\n\\n": "Could not connect to hoc-clk sysmodule.\\n\\n",
|
||||
"Please make sure everything is\\n\\n": "Please make sure everything is\\n\\n",
|
||||
"correctly installed and enabled.": "correctly installed and enabled.",
|
||||
"Fatal error": "Fatal error",
|
||||
"Temporary Overrides ": "Temporary Overrides",
|
||||
"Sleep Mode": "Sleep Mode",
|
||||
"Stock": "Stock",
|
||||
"Dev OC": "Dev OC",
|
||||
"Boost Mode": "Boost Mode",
|
||||
"Safe Max": "Safe Max",
|
||||
"Unsafe Max": "Unsafe Max",
|
||||
"Absolute Max": "Absolute Max",
|
||||
"Handheld": "Handheld",
|
||||
"Handheld Safe Max": "Handheld Safe Max",
|
||||
"Docked": "Docked",
|
||||
"Enable": "Enable",
|
||||
"Edit App Profile": "Edit App Profile",
|
||||
"Edit Global Profile": "Edit Global Profile",
|
||||
"Temporary Overrides": "Temporary Overrides",
|
||||
"Settings": "Settings",
|
||||
"About": "About",
|
||||
"Compiling with minimal features": "Compiling with minimal features",
|
||||
"General Settings": "General Settings",
|
||||
"Governor Settings": "Governor Settings",
|
||||
"Safety Settings": "Safety Settings",
|
||||
"Save KIP Settings": "Save KIP Settings",
|
||||
"RAM Settings": "RAM Settings",
|
||||
"CPU Settings": "CPU Settings",
|
||||
"GPU Settings": "GPU Settings",
|
||||
"Display Settings": "Display Settings",
|
||||
"Experimental": "Experimental",
|
||||
"GPU Scheduling Override Method": "GPU Scheduling Override Method",
|
||||
"can be dangerous and may cause": "can be dangerous and may cause",
|
||||
"damage to your battery or charger!": "damage to your battery or charger!",
|
||||
"Charge Current Override": "Charge Current Override",
|
||||
"RAM Voltage Display Mode": "RAM Voltage Display Mode",
|
||||
"Polling Interval": "Polling Interval",
|
||||
"CPU Governor Minimum Frequency": "CPU Governor Minimum Frequency",
|
||||
"refresh rates may cause stress": "refresh rates may cause stress",
|
||||
"or damage to your display! ": "or damage to your display!",
|
||||
"Proceed at your own risk!": "Proceed at your own risk!",
|
||||
"Max Handheld Display": "Max Handheld Display",
|
||||
"Display Clock": "Display Clock",
|
||||
"Official Rating": "Official Rating",
|
||||
"TDP Threshold": "TDP Threshold",
|
||||
"Power": "Power",
|
||||
"Thermal Throttle Limit": "Thermal Throttle Limit",
|
||||
"HP Mode": "HP Mode",
|
||||
"Default (Mariko)": "Default (Mariko)",
|
||||
"Default (Erista)": "Default (Erista)",
|
||||
"Rating": "Rating",
|
||||
"Safe Max (Mariko)": "Safe Max (Mariko)",
|
||||
"Safe Max (Erista)": "Safe Max (Erista)",
|
||||
"RAM VDD2 Voltage": "RAM VDD2 Voltage",
|
||||
"Voltage": "Voltage",
|
||||
"RAM VDDQ Voltage": "RAM VDDQ Voltage",
|
||||
"RAM Frequency Editor": "RAM Frequency Editor",
|
||||
"JEDEC.": "JEDEC.",
|
||||
"3333MHz (Needs extreme Speedo/PLL)": "3333MHz (Needs extreme Speedo/PLL)",
|
||||
"3366MHz (Needs extreme Speedo/PLL)": "3366MHz (Needs extreme Speedo/PLL)",
|
||||
"3400MHz (Needs extreme Speedo/PLL)": "3400MHz (Needs extreme Speedo/PLL)",
|
||||
"3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (Needs ridiculous Speedo/PLL)",
|
||||
"3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz (Needs ridiculous Speedo/PLL)",
|
||||
"3500MHz (Needs ridiculous Speedo/PLL)": "3500MHz (Needs ridiculous Speedo/PLL)",
|
||||
"Ram Max Clock": "Ram Max Clock",
|
||||
"RAM Latency Editor": "RAM Latency Editor",
|
||||
"RAM Timing Reductions": "RAM Timing Reductions",
|
||||
"Memory Timings": "Memory Timings",
|
||||
"tREFI": "tREFI",
|
||||
"Advanced": "Advanced",
|
||||
"t6 tRTW Fine Tune": "t6 tRTW Fine Tune",
|
||||
"tRTW Fine Tune": "tRTW Fine Tune",
|
||||
"t7 tWTR Fine Tune": "t7 tWTR Fine Tune",
|
||||
"tWTR Fine Tune": "tWTR Fine Tune",
|
||||
"Memory Latencies": "Memory Latencies",
|
||||
"Read Latency": "Read Latency",
|
||||
"Write Latency": "Write Latency",
|
||||
"CPU Boost Clock": "CPU Boost Clock",
|
||||
"CPU UV": "CPU UV",
|
||||
"CPU Unlock": "CPU Unlock",
|
||||
"CPU VMIN": "CPU VMIN",
|
||||
"CPU Max Voltage": "CPU Max Voltage",
|
||||
"CPU Max Clock": "CPU Max Clock",
|
||||
"Extreme UV Table": "Extreme UV Table",
|
||||
"CPU UV Table": "CPU UV Table",
|
||||
"CPU Low UV": "CPU Low UV",
|
||||
"CPU High UV": "CPU High UV",
|
||||
"CPU Low VMIN": "CPU Low VMIN",
|
||||
"CPU High VMIN": "CPU High VMIN",
|
||||
"No Undervolt": "No Undervolt",
|
||||
"SLT Table": "SLT Table",
|
||||
"HiOPT Table": "HiOPT Table",
|
||||
"GPU Undervolt Table": "GPU Undervolt Table",
|
||||
"GPU Minimum Voltage": "GPU Minimum Voltage",
|
||||
"Calculate GPU Vmin": "Calculate GPU Vmin",
|
||||
"GPU VMIN": "GPU VMIN",
|
||||
"GPU Maximum Voltage": "GPU Maximum Voltage",
|
||||
"GPU Voltage Offset": "GPU Voltage Offset",
|
||||
"Do not override": "Do not override",
|
||||
"Enabled (Default)": "Enabled (Default)",
|
||||
"96.6% limit": "96.6% limit",
|
||||
"99.7% limit": "99.7% limit",
|
||||
"GPU Scheduling Override": "GPU Scheduling Override",
|
||||
"Official Service": "Official Service",
|
||||
"GPU DVFS Mode": "GPU DVFS Mode",
|
||||
"GPU DVFS Offset": "GPU DVFS Offset",
|
||||
"GPU Voltage Table": "GPU Voltage Table",
|
||||
"GPU Custom Table (mV)": "GPU Custom Table (mV)",
|
||||
"1075MHz without UV, 1152MHz on SLT": "1075MHz without UV, 1152MHz on SLT",
|
||||
"or 1228MHz on HiOPT can cause ": "or 1228MHz on HiOPT can cause",
|
||||
"permanent damage to your Switch!": "permanent damage to your Switch!",
|
||||
"921MHz without UV and 960MHz on": "921MHz without UV and 960MHz on",
|
||||
"SLT or HiOPT can cause ": "SLT or HiOPT can cause"
|
||||
}
|
||||
141
Source/hoc-clk/overlay/lang/ko.json
Normal file
141
Source/hoc-clk/overlay/lang/ko.json
Normal file
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"Information": "정보",
|
||||
"IDDQ:": "IDDQ:",
|
||||
"Module: ": "모듈:",
|
||||
"sys-dock status:": "sys-dock 상태:",
|
||||
"SaltyNX status:": "SaltyNX 상태:",
|
||||
"RR Display status:": "RR 표시 상태:",
|
||||
"Wafer Position:": "웨이퍼 위치:",
|
||||
"Credits": "크레딧",
|
||||
"Developers": "개발자",
|
||||
"Contributors": "기여자",
|
||||
"Testers": "테스터",
|
||||
"Special Thanks": "특별한 분",
|
||||
"Unknown": "알 수 없음",
|
||||
"Installed": "설치됨",
|
||||
"Not Installed": "설치되지 않음",
|
||||
"X: %u Y: %u": "X: %u Y: %u",
|
||||
"THE BEER-WARE LICENSE": "맥주 제품 라이센스",
|
||||
"Default": "기본값",
|
||||
"Do Not Override": "재정의하지 마십시오",
|
||||
"Disabled": "비활성화",
|
||||
"Enabled": "활성화됨",
|
||||
" \\ue0e3 Reset": "\\ue0e3 재설정",
|
||||
"Display": "디스플레이",
|
||||
"Application changed\\n\\n": "애플리케이션이 변경되었습니다.\\n\\n",
|
||||
"The running application changed\\n\\n": "실행 중인 애플리케이션이 변경되었습니다.\\n\\n",
|
||||
"while editing was going on.": "편집이 진행되는 동안.",
|
||||
"Board": "보드",
|
||||
"%u.%u%u mV": "%u.%u%umV",
|
||||
"Could not connect to hoc-clk sysmodule.\\n\\n": "hoc-clk 시스템 모듈에 연결할 수 없습니다.\\n\\n",
|
||||
"Please make sure everything is\\n\\n": "모든 것이 올바른지 확인하십시오.\\n\\n",
|
||||
"correctly installed and enabled.": "올바르게 설치되고 활성화되었습니다.",
|
||||
"Fatal error": "치명적인 오류",
|
||||
"Temporary Overrides ": "임시 재정의",
|
||||
"Sleep Mode": "절전 모드",
|
||||
"Stock": "주식",
|
||||
"Dev OC": "개발 OC",
|
||||
"Overwrite Boost Mode": "부스트 모드 덮어쓰기",
|
||||
"Safe Max": "안전함 최대값",
|
||||
"Unsafe Max": "불안정 최대값",
|
||||
"Absolute Max": "절대 최대값",
|
||||
"Handheld Safe Max": "휴대모드 안전함 최대값",
|
||||
"Enable": "활성화",
|
||||
"Edit App Profile": "앱 프로필 편집",
|
||||
"Edit Global Profile": "글로벌 프로필 편집",
|
||||
"Temporary Overrides": "임시 재정의",
|
||||
"Settings": "설정",
|
||||
"About": "소개",
|
||||
"Compiling with minimal features": "최소한의 기능으로 컴파일하기",
|
||||
"General Settings": "일반 설정",
|
||||
"Governor Settings": "거버너 설정",
|
||||
"Safety Settings": "안전 설정",
|
||||
"Save KIP Settings": "KIP 설정 저장",
|
||||
"RAM Settings": "RAM 설정",
|
||||
"CPU Settings": "CPU 설정",
|
||||
"GPU Settings": "GPU 설정",
|
||||
"Display Settings": "디스플레이 설정",
|
||||
"Experimental": "실험적",
|
||||
"GPU Scheduling Override Method": "GPU 스케줄링 재정의 방법",
|
||||
"can be dangerous and may cause": "위험할 수 있고 원인이 될 수 있습니다.",
|
||||
"damage to your battery or charger!": "배터리나 충전기가 손상되었습니다!",
|
||||
"Charge Current Override": "충전 전류 오버라이드",
|
||||
"RAM Voltage Display Mode": "RAM 전압 표시 모드",
|
||||
"Polling Interval": "폴링 간격",
|
||||
"CPU Governor Minimum Frequency": "CPU 거버너 최소 주파수",
|
||||
"refresh rates may cause stress": "디스플레이 주사율 빈도 변경은",
|
||||
"or damage to your display! ": "기기에 손상이 발생될 수 있습니다!",
|
||||
"Proceed at your own risk!": "책임하에 주의해서 사용하십시오!",
|
||||
"Max Handheld Display": "최대 휴대용 디스플레이",
|
||||
"Display Clock": "디스플레이 클럭",
|
||||
"Official Rating": "공식 등급",
|
||||
"TDP Threshold": "TDP 임계값",
|
||||
"Power": "힘",
|
||||
"Thermal Throttle Limit": "열 스로틀 한계",
|
||||
"HP Mode": "HP 모드",
|
||||
"Default (Mariko)": "기본값(마리코)",
|
||||
"Default (Erista)": "기본값(에리스타)",
|
||||
"Rating": "표준값",
|
||||
"Safe Max (Mariko)": "안전함 최대치(마리코)",
|
||||
"Safe Max (Erista)": "안전함 최대치(에리스타)",
|
||||
"RAM VDD2 Voltage": "RAM VDD2 전압",
|
||||
"Voltage": "전압",
|
||||
"RAM VDDQ Voltage": "RAM VDDQ 전압",
|
||||
"RAM Frequency Editor": "RAM 주파수 편집기",
|
||||
"JEDEC.": "JEDEC.",
|
||||
"High speedo needed!": "높은 스피도값이 필요합니다!",
|
||||
"3333MHz (Needs extreme Speedo/PLL)": "3333MHz(극단적인 Speedo/PLL 필요)",
|
||||
"3366MHz (Needs extreme Speedo/PLL)": "3366MHz(극단적인 Speedo/PLL 필요)",
|
||||
"3400MHz (Needs extreme Speedo/PLL)": "3400MHz(극단적인 Speedo/PLL 필요)",
|
||||
"3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (말도 안 되는 Speedo/PLL 필요)",
|
||||
"3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz(터무니없는 Speedo/PLL 필요)",
|
||||
"3500MHz (Needs ridiculous Speedo/PLL)": "3500MHz(터무니없는 Speedo/PLL 필요)",
|
||||
"Ram Max Clock": "RAM 최대 클럭",
|
||||
"RAM Latency Editor": "RAM 지연 시간 편집기",
|
||||
"RAM Timing Reductions": "RAM 타이밍 편집기",
|
||||
"Memory Timings": "메모리 타이밍",
|
||||
"Advanced": "고급",
|
||||
"t6 tRTW Fine Tune": "t6 tRTW 미세 조정",
|
||||
"tRTW Fine Tune": "tRTW 미세 조정",
|
||||
"t7 tWTR Fine Tune": "t7 tWTR 미세 조정",
|
||||
"tWTR Fine Tune": "tWTR 미세 조정",
|
||||
"Memory Latencies": "메모리 지연 시간",
|
||||
"Read Latency": "읽기 지연 시간",
|
||||
"Write Latency": "쓰기 지연 시간",
|
||||
"CPU Boost Clock": "CPU 부스트 클럭",
|
||||
"CPU UV": "CPU 언더볼트",
|
||||
"CPU Unlock": "CPU 잠금 해제",
|
||||
"CPU VMIN": "CPU VMIN",
|
||||
"CPU Max Voltage": "CPU 최대 전압",
|
||||
"CPU Max Clock": "CPU 최대 클럭",
|
||||
"Extreme UV Table": "익스트림 테이블",
|
||||
"CPU UV Table": "CPU 언더볼트 테이블",
|
||||
"CPU Low UV": "CPU 저주파 언더볼트",
|
||||
"CPU High UV": "CPU 고주파 언더볼트",
|
||||
"CPU Low VMIN": "CPU 저주파 최소 전압",
|
||||
"CPU High VMIN": "CPU 고주파 최소 전압",
|
||||
"No Undervolt": "언더볼트 없음",
|
||||
"SLT Table": "SLT 테이블",
|
||||
"HiOPT Table": "HiOPT 테이블",
|
||||
"GPU Undervolt Table": "GPU 언더볼트 테이블",
|
||||
"GPU Minimum Voltage": "GPU 최소 전압",
|
||||
"Calculate GPU Vmin": "GPU Vmin 계산",
|
||||
"GPU VMIN": "GPU VMIN",
|
||||
"GPU Maximum Voltage": "GPU 최대 전압",
|
||||
"GPU Voltage Offset": "GPU 전압 오프셋",
|
||||
"Do not override": "재정의하지 않음",
|
||||
"Enabled (Default)": "활성화됨(기본값)",
|
||||
"96.6% limit": "96.6% 한도",
|
||||
"99.7% limit": "99.7% 한도",
|
||||
"GPU Scheduling Override": "GPU 스케줄링 재정의",
|
||||
"Official Service": "공식 서비스",
|
||||
"GPU DVFS Mode": "GPU DVFS 모드",
|
||||
"GPU DVFS Offset": "GPU DVFS 오프셋",
|
||||
"GPU Voltage Table": "GPU 전압 테이블",
|
||||
"GPU Custom Table (mV)": "GPU 사용자 정의 테이블(mV)",
|
||||
"1075MHz without UV, 1152MHz on SLT": "UV 없이 1075MHz, SLT에서 1152MHz",
|
||||
"or 1228MHz on HiOPT can cause ": "또는 HiOPT에서 1228MHz를 사용하면",
|
||||
"permanent damage to your Switch!": "스위치가 영구적으로 손상될 수 있습니다!",
|
||||
"921MHz without UV and 960MHz on": "UV가 없는 경우 921MHz, 켜진 경우에는 960MHz",
|
||||
"SLT or HiOPT can cause ": "SLT 또는 HiOPT는 다음을 유발할 수 있습니다."
|
||||
}
|
||||
141
Source/hoc-clk/overlay/lang/nl.json
Normal file
141
Source/hoc-clk/overlay/lang/nl.json
Normal file
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"Information": "Informatie",
|
||||
"IDDQ:": "IDDQ:",
|
||||
"Module: ": "module:",
|
||||
"sys-dock status:": "sys-dock-status:",
|
||||
"SaltyNX status:": "SaltyNX-status:",
|
||||
"RR Display status:": "RR Weergavestatus:",
|
||||
"Wafer Position:": "Waferpositie:",
|
||||
"Credits": "Kredieten",
|
||||
"Developers": "Ontwikkelaars",
|
||||
"Contributors": "Bijdragers",
|
||||
"Testers": "Testers",
|
||||
"Special Thanks": "Speciale dank",
|
||||
"Unknown": "Onbekend",
|
||||
"Installed": "Geïnstalleerd",
|
||||
"Not Installed": "Niet geïnstalleerd",
|
||||
"X: %u Y: %u": "X: %u Y: %u",
|
||||
"THE BEER-WARE LICENSE": "DE LICENTIE VOOR BIERWAREN",
|
||||
"Default": "Standaard",
|
||||
"Do Not Override": "Niet overschrijven",
|
||||
"Disabled": "Uitgeschakeld",
|
||||
"Enabled": "Ingeschakeld",
|
||||
" \\ue0e3 Reset": "\\ue0e3 Opnieuw instellen",
|
||||
"Display": "Weergave",
|
||||
"Application changed\\n\\n": "Applicatie gewijzigd\\n\\n",
|
||||
"The running application changed\\n\\n": "De actieve applicatie is gewijzigd\\n\\n",
|
||||
"while editing was going on.": "terwijl er werd bewerkt.",
|
||||
"Board": "Bord",
|
||||
"%u.%u%u mV": "%u.%u%u mV",
|
||||
"Could not connect to hoc-clk sysmodule.\\n\\n": "Kan geen verbinding maken met hoc-clk sysmodule.\\n\\n",
|
||||
"Please make sure everything is\\n\\n": "Zorg ervoor dat alles in orde is\\n\\n",
|
||||
"correctly installed and enabled.": "correct geïnstalleerd en ingeschakeld.",
|
||||
"Fatal error": "Fatale fout",
|
||||
"Temporary Overrides ": "Tijdelijke overschrijvingen",
|
||||
"Sleep Mode": "Slaapmodus",
|
||||
"Stock": "Voorraad",
|
||||
"Dev OC": "Ontwikkelaar OC",
|
||||
"Boost Mode": "Boost-modus",
|
||||
"Safe Max": "Veilig Max",
|
||||
"Unsafe Max": "OnveiligMax",
|
||||
"Absolute Max": "Absoluut Max",
|
||||
"Handheld Safe Max": "Handkluis Max",
|
||||
"Enable": "Inschakelen",
|
||||
"Edit App Profile": "App-profiel bewerken",
|
||||
"Edit Global Profile": "Globaal profiel bewerken",
|
||||
"Temporary Overrides": "Tijdelijke overschrijvingen",
|
||||
"Settings": "Instellingen",
|
||||
"About": "Over",
|
||||
"Compiling with minimal features": "Compileren met minimale functies",
|
||||
"General Settings": "Algemene instellingen",
|
||||
"Governor Settings": "Gouverneur instellingen",
|
||||
"Safety Settings": "Veiligheidsinstellingen",
|
||||
"Save KIP Settings": "Sla KIP-instellingen op",
|
||||
"RAM Settings": "RAM-instellingen",
|
||||
"CPU Settings": "CPU-instellingen",
|
||||
"GPU Settings": "GPU-instellingen",
|
||||
"Display Settings": "Weergave-instellingen",
|
||||
"Experimental": "Experimenteel",
|
||||
"GPU Scheduling Override Method": "Methode voor het overschrijven van GPU-planning",
|
||||
"can be dangerous and may cause": "kan gevaarlijk zijn en kan veroorzaken",
|
||||
"damage to your battery or charger!": "schade aan uw accu of lader!",
|
||||
"Charge Current Override": "Laadstroom overschrijven",
|
||||
"RAM Voltage Display Mode": "Weergavemodus RAM-spanning",
|
||||
"Polling Interval": "Polling-interval",
|
||||
"CPU Governor Minimum Frequency": "Minimale frequentie CPU-regelaar",
|
||||
"refresh rates may cause stress": "vernieuwingsfrequenties kunnen stress veroorzaken",
|
||||
"or damage to your display! ": "of schade aan uw display!",
|
||||
"Proceed at your own risk!": "Ga verder op eigen risico!",
|
||||
"Max Handheld Display": "Maximaal handheld-display",
|
||||
"Display Clock": "Klok weergeven",
|
||||
"Official Rating": "Officiële beoordeling",
|
||||
"TDP Threshold": "TDP-drempel",
|
||||
"Power": "Macht",
|
||||
"Thermal Throttle Limit": "Thermische gaslimiet",
|
||||
"HP Mode": "HP-modus",
|
||||
"Default (Mariko)": "Standaard (Mariko)",
|
||||
"Default (Erista)": "Standaard (Erista)",
|
||||
"Rating": "Beoordeling",
|
||||
"Safe Max (Mariko)": "Veilig Max (Mariko)",
|
||||
"Safe Max (Erista)": "Veilige Max (Erista)",
|
||||
"RAM VDD2 Voltage": "RAM VDD2-spanning",
|
||||
"Voltage": "Spanning",
|
||||
"RAM VDDQ Voltage": "RAM VDDQ-spanning",
|
||||
"RAM Frequency Editor": "RAM-frequentie-editor",
|
||||
"JEDEC.": "JEDEC.",
|
||||
"High speedo needed!": "Hoge snelheid nodig!",
|
||||
"3333MHz (Needs extreme Speedo/PLL)": "3333 MHz (vereist extreme snelheidsmeter/PLL)",
|
||||
"3366MHz (Needs extreme Speedo/PLL)": "3366 MHz (vereist extreme snelheidsmeter/PLL)",
|
||||
"3400MHz (Needs extreme Speedo/PLL)": "3400 MHz (vereist extreme snelheidsmeter/PLL)",
|
||||
"3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (heeft een belachelijke snelheidsmeter/PLL nodig)",
|
||||
"3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz (heeft een belachelijke snelheidsmeter/PLL nodig)",
|
||||
"3500MHz (Needs ridiculous Speedo/PLL)": "3500 MHz (heeft een belachelijke snelheidsmeter/PLL nodig)",
|
||||
"Ram Max Clock": "Ram Max-klok",
|
||||
"RAM Latency Editor": "RAM-latentie-editor",
|
||||
"RAM Timing Reductions": "RAM-timingreducties",
|
||||
"Memory Timings": "Geheugentijden",
|
||||
"Advanced": "Geavanceerd",
|
||||
"t6 tRTW Fine Tune": "t6 tRTW Fijnafstemming",
|
||||
"tRTW Fine Tune": "tRTW Fijnafstemming",
|
||||
"t7 tWTR Fine Tune": "t7 tWTR Fijnafstemming",
|
||||
"tWTR Fine Tune": "tWTR Fijnafstemming",
|
||||
"Memory Latencies": "Geheugenlatenties",
|
||||
"Read Latency": "Lees Latentie",
|
||||
"Write Latency": "Schrijf latentie",
|
||||
"CPU Boost Clock": "CPU-boostklok",
|
||||
"CPU UV": "CPU-UV",
|
||||
"CPU Unlock": "CPU-ontgrendeling",
|
||||
"CPU VMIN": "CPU-VMIN",
|
||||
"CPU Max Voltage": "Maximale CPU-spanning",
|
||||
"CPU Max Clock": "CPU maximale klok",
|
||||
"Extreme UV Table": "Extreme UV-tafel",
|
||||
"CPU UV Table": "CPU UV-tabel",
|
||||
"CPU Low UV": "CPU Lage UV",
|
||||
"CPU High UV": "CPU Hoge UV",
|
||||
"CPU Low VMIN": "CPU Lage VMIN",
|
||||
"CPU High VMIN": "CPU Hoge VMIN",
|
||||
"No Undervolt": "Geen ondervolt",
|
||||
"SLT Table": "SLT-tabel",
|
||||
"HiOPT Table": "HiOPT-tabel",
|
||||
"GPU Undervolt Table": "GPU-undervolttabel",
|
||||
"GPU Minimum Voltage": "GPU-minimale spanning",
|
||||
"Calculate GPU Vmin": "Bereken GPU Vmin",
|
||||
"GPU VMIN": "GPU-VMIN",
|
||||
"GPU Maximum Voltage": "GPU maximale spanning",
|
||||
"GPU Voltage Offset": "GPU-spanningsoffset",
|
||||
"Do not override": "Niet overschrijven",
|
||||
"Enabled (Default)": "Ingeschakeld (standaard)",
|
||||
"96.6% limit": "96,6% limiet",
|
||||
"99.7% limit": "99,7% limiet",
|
||||
"GPU Scheduling Override": "GPU-planning negeren",
|
||||
"Official Service": "Officiële dienst",
|
||||
"GPU DVFS Mode": "GPU DVFS-modus",
|
||||
"GPU DVFS Offset": "GPU DVFS-offset",
|
||||
"GPU Voltage Table": "GPU-spanningstabel",
|
||||
"GPU Custom Table (mV)": "Aangepaste GPU-tabel (mV)",
|
||||
"1075MHz without UV, 1152MHz on SLT": "1075MHz zonder UV, 1152MHz op SLT",
|
||||
"or 1228MHz on HiOPT can cause ": "of 1228MHz op HiOPT kan dit veroorzaken",
|
||||
"permanent damage to your Switch!": "blijvende schade aan uw Switch!",
|
||||
"921MHz without UV and 960MHz on": "921MHz zonder UV en 960MHz aan",
|
||||
"SLT or HiOPT can cause ": "SLT of HiOPT kunnen dit veroorzaken"
|
||||
}
|
||||
141
Source/hoc-clk/overlay/lang/pl.json
Normal file
141
Source/hoc-clk/overlay/lang/pl.json
Normal file
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"Information": "Informacje",
|
||||
"IDDQ:": "IDDQ:",
|
||||
"Module: ": "Moduł:",
|
||||
"sys-dock status:": "stan sys-dock:",
|
||||
"SaltyNX status:": "Stan SaltyNX:",
|
||||
"RR Display status:": "Stan wyświetlacza:",
|
||||
"Wafer Position:": "Pozycja wafla:",
|
||||
"Credits": "Kredyty",
|
||||
"Developers": "Deweloperzy",
|
||||
"Contributors": "Współautorzy",
|
||||
"Testers": "Testery",
|
||||
"Special Thanks": "Specjalne podziękowania",
|
||||
"Unknown": "Nieznany",
|
||||
"Installed": "Zainstalowany",
|
||||
"Not Installed": "Nie zainstalowano",
|
||||
"X: %u Y: %u": "X: %u Y: %u",
|
||||
"THE BEER-WARE LICENSE": "LICENCJA NA WYROBY PIWNE",
|
||||
"Default": "Domyślne",
|
||||
"Do Not Override": "Nie zastępuj",
|
||||
"Disabled": "Niepełnosprawny",
|
||||
"Enabled": "Włączone",
|
||||
" \\ue0e3 Reset": "\\ue0e3 Zresetuj",
|
||||
"Display": "Wyświetlacz",
|
||||
"Application changed\\n\\n": "Aplikacja została zmieniona\\n\\n",
|
||||
"The running application changed\\n\\n": "Działająca aplikacja została zmieniona\\n\\n",
|
||||
"while editing was going on.": "podczas gdy edycja była w toku.",
|
||||
"Board": "Deska",
|
||||
"%u.%u%u mV": "%u.%u%u mV",
|
||||
"Could not connect to hoc-clk sysmodule.\\n\\n": "Nie można połączyć się z modułem sysmodule hoc-clk.\\n\\n",
|
||||
"Please make sure everything is\\n\\n": "Upewnij się, że wszystko jest\\n\\n",
|
||||
"correctly installed and enabled.": "poprawnie zainstalowany i włączony.",
|
||||
"Fatal error": "Fatalny błąd",
|
||||
"Temporary Overrides ": "Tymczasowe nadpisania",
|
||||
"Sleep Mode": "Tryb uśpienia",
|
||||
"Stock": "Zapas",
|
||||
"Dev OC": "Dev OC",
|
||||
"Boost Mode": "Tryb wzmocnienia",
|
||||
"Safe Max": "Bezpieczny maks",
|
||||
"Unsafe Max": "Niebezpieczny maks",
|
||||
"Absolute Max": "Absolutny maks",
|
||||
"Handheld Safe Max": "Sejf ręczny Max",
|
||||
"Enable": "Włącz",
|
||||
"Edit App Profile": "Edytuj profil aplikacji",
|
||||
"Edit Global Profile": "Edytuj profil globalny",
|
||||
"Temporary Overrides": "Tymczasowe nadpisania",
|
||||
"Settings": "Ustawienia",
|
||||
"About": "O",
|
||||
"Compiling with minimal features": "Kompilacja z minimalnymi funkcjami",
|
||||
"General Settings": "Ustawienia ogólne",
|
||||
"Governor Settings": "Ustawienia gubernatora",
|
||||
"Safety Settings": "Ustawienia bezpieczeństwa",
|
||||
"Save KIP Settings": "Zapisz ustawienia KIP",
|
||||
"RAM Settings": "Ustawienia pamięci RAM",
|
||||
"CPU Settings": "Ustawienia procesora",
|
||||
"GPU Settings": "Ustawienia GPU",
|
||||
"Display Settings": "Ustawienia wyświetlania",
|
||||
"Experimental": "Eksperymentalny",
|
||||
"GPU Scheduling Override Method": "Metoda obejścia harmonogramu GPU",
|
||||
"can be dangerous and may cause": "może być niebezpieczne i powodować",
|
||||
"damage to your battery or charger!": "uszkodzenie akumulatora lub ładowarki!",
|
||||
"Charge Current Override": "Obejście prądu ładowania",
|
||||
"RAM Voltage Display Mode": "Tryb wyświetlania napięcia RAM",
|
||||
"Polling Interval": "Interwał odpytywania",
|
||||
"CPU Governor Minimum Frequency": "Minimalna częstotliwość regulatora procesora",
|
||||
"refresh rates may cause stress": "częstotliwości odświeżania mogą powodować stres",
|
||||
"or damage to your display! ": "lub uszkodzenie wyświetlacza!",
|
||||
"Proceed at your own risk!": "Postępuj na własne ryzyko!",
|
||||
"Max Handheld Display": "Maksymalny wyświetlacz ręczny",
|
||||
"Display Clock": "Wyświetl zegar",
|
||||
"Official Rating": "Oficjalna ocena",
|
||||
"TDP Threshold": "Próg TDP",
|
||||
"Power": "Moc",
|
||||
"Thermal Throttle Limit": "Limit przepustnicy termicznej",
|
||||
"HP Mode": "Tryb HP",
|
||||
"Default (Mariko)": "Domyślny (Mariko)",
|
||||
"Default (Erista)": "Domyślny (Erista)",
|
||||
"Rating": "Ocena",
|
||||
"Safe Max (Mariko)": "Bezpieczny Max (Mariko)",
|
||||
"Safe Max (Erista)": "Bezpieczny Max (Erista)",
|
||||
"RAM VDD2 Voltage": "Napięcie pamięci RAM VDD2",
|
||||
"Voltage": "Napięcie",
|
||||
"RAM VDDQ Voltage": "Napięcie RAM VDDQ",
|
||||
"RAM Frequency Editor": "Edytor częstotliwości RAM",
|
||||
"JEDEC.": "JEDEC.",
|
||||
"High speedo needed!": "Potrzebna duża prędkość!",
|
||||
"3333MHz (Needs extreme Speedo/PLL)": "3333 MHz (wymaga ekstremalnego Speedo/PLL)",
|
||||
"3366MHz (Needs extreme Speedo/PLL)": "3366 MHz (wymaga ekstremalnego Speedo/PLL)",
|
||||
"3400MHz (Needs extreme Speedo/PLL)": "3400 MHz (wymaga ekstremalnego Speedo/PLL)",
|
||||
"3433MHz (Needs ridiculous Speedo/PLL)": "3433 MHz (potrzebuje śmiesznego Speedo/PLL)",
|
||||
"3466MHz (Needs ridiculous Speedo/PLL)": "3466 MHz (potrzebuje śmiesznego Speedo/PLL)",
|
||||
"3500MHz (Needs ridiculous Speedo/PLL)": "3500 MHz (potrzebuje śmiesznego Speedo/PLL)",
|
||||
"Ram Max Clock": "Zegar Ram Max",
|
||||
"RAM Latency Editor": "Edytor opóźnień pamięci RAM",
|
||||
"RAM Timing Reductions": "Zmniejszenie taktowania pamięci RAM",
|
||||
"Memory Timings": "Taktowanie pamięci",
|
||||
"Advanced": "Zaawansowane",
|
||||
"t6 tRTW Fine Tune": "t6 tRTW Dostrój",
|
||||
"tRTW Fine Tune": "tRTW Dostosuj",
|
||||
"t7 tWTR Fine Tune": "t7 tWTR Dostosuj",
|
||||
"tWTR Fine Tune": "tWTR Dostosuj",
|
||||
"Memory Latencies": "Opóźnienia pamięci",
|
||||
"Read Latency": "Przeczytaj Opóźnienie",
|
||||
"Write Latency": "Opóźnienie zapisu",
|
||||
"CPU Boost Clock": "Zegar wzmocnienia procesora",
|
||||
"CPU UV": "Procesor UV",
|
||||
"CPU Unlock": "Odblokowanie procesora",
|
||||
"CPU VMIN": "Procesor VMIN",
|
||||
"CPU Max Voltage": "Maksymalne napięcie procesora",
|
||||
"CPU Max Clock": "Maks. zegar procesora",
|
||||
"Extreme UV Table": "Ekstremalny stół UV",
|
||||
"CPU UV Table": "Tabela UV procesora",
|
||||
"CPU Low UV": "Niskie promieniowanie UV procesora",
|
||||
"CPU High UV": "Wysokie promieniowanie UV procesora",
|
||||
"CPU Low VMIN": "Niski poziom VMIN procesora",
|
||||
"CPU High VMIN": "Wysoki poziom VMIN procesora",
|
||||
"No Undervolt": "Brak Undervolta",
|
||||
"SLT Table": "Stół SLT",
|
||||
"HiOPT Table": "Stół HiOPT",
|
||||
"GPU Undervolt Table": "Tabela niedoboru napięcia GPU",
|
||||
"GPU Minimum Voltage": "Minimalne napięcie procesora graficznego",
|
||||
"Calculate GPU Vmin": "Oblicz Vmin GPU",
|
||||
"GPU VMIN": "VMIN GPU",
|
||||
"GPU Maximum Voltage": "Maksymalne napięcie procesora graficznego",
|
||||
"GPU Voltage Offset": "Przesunięcie napięcia GPU",
|
||||
"Do not override": "Nie zastępuj",
|
||||
"Enabled (Default)": "Włączone (domyślnie)",
|
||||
"96.6% limit": "Limit 96,6%.",
|
||||
"99.7% limit": "Limit 99,7%.",
|
||||
"GPU Scheduling Override": "Zastąpienie harmonogramu GPU",
|
||||
"Official Service": "Oficjalny serwis",
|
||||
"GPU DVFS Mode": "Tryb DVFS procesora graficznego",
|
||||
"GPU DVFS Offset": "Przesunięcie DVFS GPU",
|
||||
"GPU Voltage Table": "Tabela napięć GPU",
|
||||
"GPU Custom Table (mV)": "Tabela niestandardowa GPU (mV)",
|
||||
"1075MHz without UV, 1152MHz on SLT": "1075 MHz bez UV, 1152 MHz na SLT",
|
||||
"or 1228MHz on HiOPT can cause ": "lub 1228 MHz na HiOPT może powodować",
|
||||
"permanent damage to your Switch!": "trwałe uszkodzenie Switcha!",
|
||||
"921MHz without UV and 960MHz on": "921 MHz bez UV i 960 MHz włączone",
|
||||
"SLT or HiOPT can cause ": "Przyczyną mogą być SLT lub HiOPT"
|
||||
}
|
||||
141
Source/hoc-clk/overlay/lang/pt.json
Normal file
141
Source/hoc-clk/overlay/lang/pt.json
Normal file
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"Information": "Informação",
|
||||
"IDDQ:": "IDDQ:",
|
||||
"Module: ": "Módulo:",
|
||||
"sys-dock status:": "status do dock do sistema:",
|
||||
"SaltyNX status:": "Status do SaltyNX:",
|
||||
"RR Display status:": "Status de exibição do RR:",
|
||||
"Wafer Position:": "Posição da bolacha:",
|
||||
"Credits": "Créditos",
|
||||
"Developers": "Desenvolvedores",
|
||||
"Contributors": "Colaboradores",
|
||||
"Testers": "Testadores",
|
||||
"Special Thanks": "Agradecimentos especiais",
|
||||
"Unknown": "Desconhecido",
|
||||
"Installed": "Instalado",
|
||||
"Not Installed": "Não instalado",
|
||||
"X: %u Y: %u": "X: %u Y: %u",
|
||||
"THE BEER-WARE LICENSE": "A LICENÇA DE CERVEJA",
|
||||
"Default": "Padrão",
|
||||
"Do Not Override": "Não substituir",
|
||||
"Disabled": "Desativado",
|
||||
"Enabled": "Habilitado",
|
||||
" \\ue0e3 Reset": "\\ue0e3 Redefinir",
|
||||
"Display": "Exibição",
|
||||
"Application changed\\n\\n": "Aplicativo alterado\\n\\n",
|
||||
"The running application changed\\n\\n": "O aplicativo em execução foi alterado\\n\\n",
|
||||
"while editing was going on.": "enquanto a edição estava acontecendo.",
|
||||
"Board": "Conselho",
|
||||
"%u.%u%u mV": "%u.%u%u mV",
|
||||
"Could not connect to hoc-clk sysmodule.\\n\\n": "Não foi possível conectar-se ao sysmodule hoc-clk.\\n\\n",
|
||||
"Please make sure everything is\\n\\n": "Verifique se tudo está\\n\\n",
|
||||
"correctly installed and enabled.": "corretamente instalado e ativado.",
|
||||
"Fatal error": "Erro fatal",
|
||||
"Temporary Overrides ": "Substituições temporárias",
|
||||
"Sleep Mode": "Modo de suspensão",
|
||||
"Stock": "Estoque",
|
||||
"Dev OC": "Desenvolvedor OC",
|
||||
"Boost Mode": "Modo de reforço",
|
||||
"Safe Max": "Máx. Seguro",
|
||||
"Unsafe Max": "Máximo inseguro",
|
||||
"Absolute Max": "Máximo absoluto",
|
||||
"Handheld Safe Max": "Portátil Seguro Máx.",
|
||||
"Enable": "Habilitar",
|
||||
"Edit App Profile": "Editar perfil do aplicativo",
|
||||
"Edit Global Profile": "Editar perfil global",
|
||||
"Temporary Overrides": "Substituições temporárias",
|
||||
"Settings": "Configurações",
|
||||
"About": "Sobre",
|
||||
"Compiling with minimal features": "Compilando com recursos mínimos",
|
||||
"General Settings": "Configurações Gerais",
|
||||
"Governor Settings": "Configurações do Governador",
|
||||
"Safety Settings": "Configurações de segurança",
|
||||
"Save KIP Settings": "Salvar configurações KIP",
|
||||
"RAM Settings": "Configurações de RAM",
|
||||
"CPU Settings": "Configurações de CPU",
|
||||
"GPU Settings": "Configurações de GPU",
|
||||
"Display Settings": "Configurações de exibição",
|
||||
"Experimental": "Experimental",
|
||||
"GPU Scheduling Override Method": "Método de substituição de agendamento de GPU",
|
||||
"can be dangerous and may cause": "pode ser perigoso e causar",
|
||||
"damage to your battery or charger!": "danos à sua bateria ou carregador!",
|
||||
"Charge Current Override": "Substituição de corrente de carga",
|
||||
"RAM Voltage Display Mode": "Modo de exibição de tensão RAM",
|
||||
"Polling Interval": "Intervalo de votação",
|
||||
"CPU Governor Minimum Frequency": "Frequência Mínima do Governador da CPU",
|
||||
"refresh rates may cause stress": "taxas de atualização podem causar estresse",
|
||||
"or damage to your display! ": "ou danos ao seu monitor!",
|
||||
"Proceed at your own risk!": "Prossiga por sua conta e risco!",
|
||||
"Max Handheld Display": "Visor portátil máximo",
|
||||
"Display Clock": "Exibir relógio",
|
||||
"Official Rating": "Classificação Oficial",
|
||||
"TDP Threshold": "Limite de TDP",
|
||||
"Power": "Poder",
|
||||
"Thermal Throttle Limit": "Limite de aceleração térmica",
|
||||
"HP Mode": "Modo HP",
|
||||
"Default (Mariko)": "Padrão (Mariko)",
|
||||
"Default (Erista)": "Padrão (Erista)",
|
||||
"Rating": "Avaliação",
|
||||
"Safe Max (Mariko)": "Máximo Seguro (Mariko)",
|
||||
"Safe Max (Erista)": "Seguro Max (Erista)",
|
||||
"RAM VDD2 Voltage": "Tensão RAM VDD2",
|
||||
"Voltage": "Tensão",
|
||||
"RAM VDDQ Voltage": "Tensão RAM VDDQ",
|
||||
"RAM Frequency Editor": "Editor de frequência RAM",
|
||||
"JEDEC.": "JEDEC.",
|
||||
"High speedo needed!": "Alta velocidade necessária!",
|
||||
"3333MHz (Needs extreme Speedo/PLL)": "3333MHz (precisa de Speedo/PLL extremo)",
|
||||
"3366MHz (Needs extreme Speedo/PLL)": "3366 MHz (precisa de Speedo/PLL extremo)",
|
||||
"3400MHz (Needs extreme Speedo/PLL)": "3400 MHz (precisa de Speedo/PLL extremo)",
|
||||
"3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (precisa de Speedo/PLL ridículo)",
|
||||
"3466MHz (Needs ridiculous Speedo/PLL)": "3466 MHz (precisa de Speedo/PLL ridículo)",
|
||||
"3500MHz (Needs ridiculous Speedo/PLL)": "3500 MHz (precisa de Speedo/PLL ridículo)",
|
||||
"Ram Max Clock": "Relógio máximo de Ram",
|
||||
"RAM Latency Editor": "Editor de latência de RAM",
|
||||
"RAM Timing Reductions": "Reduções de tempo de RAM",
|
||||
"Memory Timings": "Tempos de memória",
|
||||
"Advanced": "Avançado",
|
||||
"t6 tRTW Fine Tune": "t6 tRTW Ajuste fino",
|
||||
"tRTW Fine Tune": "Ajuste fino tRTW",
|
||||
"t7 tWTR Fine Tune": "t7 tWTR Ajuste fino",
|
||||
"tWTR Fine Tune": "Ajuste fino tWTR",
|
||||
"Memory Latencies": "Latências de memória",
|
||||
"Read Latency": "Latência de leitura",
|
||||
"Write Latency": "Latência de gravação",
|
||||
"CPU Boost Clock": "Relógio de aumento da CPU",
|
||||
"CPU UV": "UV da CPU",
|
||||
"CPU Unlock": "Desbloqueio da CPU",
|
||||
"CPU VMIN": "CPU VMIN",
|
||||
"CPU Max Voltage": "Tensão máxima da CPU",
|
||||
"CPU Max Clock": "Relógio máximo da CPU",
|
||||
"Extreme UV Table": "Mesa UV Extrema",
|
||||
"CPU UV Table": "Tabela UV da CPU",
|
||||
"CPU Low UV": "UV baixo da CPU",
|
||||
"CPU High UV": "CPU alta UV",
|
||||
"CPU Low VMIN": "CPU baixa VMIN",
|
||||
"CPU High VMIN": "VMIN alto da CPU",
|
||||
"No Undervolt": "Sem subtensão",
|
||||
"SLT Table": "Tabela SLT",
|
||||
"HiOPT Table": "Tabela HiOPT",
|
||||
"GPU Undervolt Table": "Tabela de subtensão da GPU",
|
||||
"GPU Minimum Voltage": "Tensão mínima da GPU",
|
||||
"Calculate GPU Vmin": "Calcular Vmin da GPU",
|
||||
"GPU VMIN": "GPU VMIN",
|
||||
"GPU Maximum Voltage": "Tensão máxima da GPU",
|
||||
"GPU Voltage Offset": "Compensação de tensão da GPU",
|
||||
"Do not override": "Não substitua",
|
||||
"Enabled (Default)": "Habilitado (padrão)",
|
||||
"96.6% limit": "Limite de 96,6%",
|
||||
"99.7% limit": "Limite de 99,7%",
|
||||
"GPU Scheduling Override": "Substituição de agendamento de GPU",
|
||||
"Official Service": "Serviço Oficial",
|
||||
"GPU DVFS Mode": "Modo GPU DVFS",
|
||||
"GPU DVFS Offset": "Deslocamento DVFS da GPU",
|
||||
"GPU Voltage Table": "Tabela de tensão da GPU",
|
||||
"GPU Custom Table (mV)": "Tabela personalizada de GPU (mV)",
|
||||
"1075MHz without UV, 1152MHz on SLT": "1075 MHz sem UV, 1152 MHz em SLT",
|
||||
"or 1228MHz on HiOPT can cause ": "ou 1228 MHz em HiOPT pode causar",
|
||||
"permanent damage to your Switch!": "danos permanentes ao seu Switch!",
|
||||
"921MHz without UV and 960MHz on": "921 MHz sem UV e 960 MHz ativado",
|
||||
"SLT or HiOPT can cause ": "SLT ou HiOPT podem causar"
|
||||
}
|
||||
141
Source/hoc-clk/overlay/lang/ru.json
Normal file
141
Source/hoc-clk/overlay/lang/ru.json
Normal file
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"Information": "Информация",
|
||||
"IDDQ:": "ИДДК:",
|
||||
"Module: ": "Модуль:",
|
||||
"sys-dock status:": "Статус системной док-станции:",
|
||||
"SaltyNX status:": "Статус SaltyNX:",
|
||||
"RR Display status:": "Статус отображения RR:",
|
||||
"Wafer Position:": "Позиция вафли:",
|
||||
"Credits": "Кредиты",
|
||||
"Developers": "Разработчики",
|
||||
"Contributors": "Авторы",
|
||||
"Testers": "Тестеры",
|
||||
"Special Thanks": "Особая благодарность",
|
||||
"Unknown": "Неизвестно",
|
||||
"Installed": "Установлено",
|
||||
"Not Installed": "Не установлено",
|
||||
"X: %u Y: %u": "X: %u Y: %u",
|
||||
"THE BEER-WARE LICENSE": "ЛИЦЕНЗИЯ НА ПРОДАЖУ ПИВА",
|
||||
"Default": "По умолчанию",
|
||||
"Do Not Override": "Не переопределять",
|
||||
"Disabled": "Отключено",
|
||||
"Enabled": "Включено",
|
||||
" \\ue0e3 Reset": "\\ue0e3 Сброс",
|
||||
"Display": "Дисплей",
|
||||
"Application changed\\n\\n": "Приложение изменено\\n\\n",
|
||||
"The running application changed\\n\\n": "Запущенное приложение изменилось\\n\\n",
|
||||
"while editing was going on.": "пока шло редактирование.",
|
||||
"Board": "Совет",
|
||||
"%u.%u%u mV": "%u.%u%u мВ",
|
||||
"Could not connect to hoc-clk sysmodule.\\n\\n": "Не удалось подключиться к системному модулю hoc-clk.\\n\\n",
|
||||
"Please make sure everything is\\n\\n": "Пожалуйста, убедитесь, что все в порядке\\n\\n",
|
||||
"correctly installed and enabled.": "правильно установлен и включен.",
|
||||
"Fatal error": "Неустранимая ошибка",
|
||||
"Temporary Overrides ": "Временные переопределения",
|
||||
"Sleep Mode": "Спящий режим",
|
||||
"Stock": "Акции",
|
||||
"Dev OC": "Разработчик OC",
|
||||
"Boost Mode": "Режим повышения",
|
||||
"Safe Max": "Сейф Макс",
|
||||
"Unsafe Max": "Небезопасный Макс",
|
||||
"Absolute Max": "Абсолютный Макс",
|
||||
"Handheld Safe Max": "Ручной сейф Макс",
|
||||
"Enable": "Включить",
|
||||
"Edit App Profile": "Редактировать профиль приложения",
|
||||
"Edit Global Profile": "Редактировать глобальный профиль",
|
||||
"Temporary Overrides": "Временные переопределения",
|
||||
"Settings": "Настройки",
|
||||
"About": "О",
|
||||
"Compiling with minimal features": "Компиляция с минимальными возможностями",
|
||||
"General Settings": "Общие настройки",
|
||||
"Governor Settings": "Настройки губернатора",
|
||||
"Safety Settings": "Настройки безопасности",
|
||||
"Save KIP Settings": "Сохранить настройки КИП",
|
||||
"RAM Settings": "Настройки ОЗУ",
|
||||
"CPU Settings": "Настройки процессора",
|
||||
"GPU Settings": "Настройки графического процессора",
|
||||
"Display Settings": "Настройки дисплея",
|
||||
"Experimental": "Экспериментальный",
|
||||
"GPU Scheduling Override Method": "Метод переопределения планирования графического процессора",
|
||||
"can be dangerous and may cause": "может быть опасным и может вызвать",
|
||||
"damage to your battery or charger!": "повреждение аккумулятора или зарядного устройства!",
|
||||
"Charge Current Override": "Блокировка зарядного тока",
|
||||
"RAM Voltage Display Mode": "Режим отображения напряжения ОЗУ",
|
||||
"Polling Interval": "Интервал опроса",
|
||||
"CPU Governor Minimum Frequency": "Минимальная частота регулятора ЦП",
|
||||
"refresh rates may cause stress": "частота обновления может вызвать стресс",
|
||||
"or damage to your display! ": "или повреждение дисплея!",
|
||||
"Proceed at your own risk!": "Действуйте на свой страх и риск!",
|
||||
"Max Handheld Display": "Макс. портативный дисплей",
|
||||
"Display Clock": "Дисплей Часы",
|
||||
"Official Rating": "Официальный рейтинг",
|
||||
"TDP Threshold": "Порог TDP",
|
||||
"Power": "Мощность",
|
||||
"Thermal Throttle Limit": "Температурный предел дроссельной заслонки",
|
||||
"HP Mode": "Режим HP",
|
||||
"Default (Mariko)": "По умолчанию (Марико)",
|
||||
"Default (Erista)": "По умолчанию (Эриста)",
|
||||
"Rating": "Рейтинг",
|
||||
"Safe Max (Mariko)": "Сейф Макс (Марико)",
|
||||
"Safe Max (Erista)": "Сейф Макс (Эриста)",
|
||||
"RAM VDD2 Voltage": "Напряжение ОЗУ VDD2",
|
||||
"Voltage": "Напряжение",
|
||||
"RAM VDDQ Voltage": "Напряжение ОЗУ VDDQ",
|
||||
"RAM Frequency Editor": "Редактор частоты оперативной памяти",
|
||||
"JEDEC.": "ДЖЕДЕК.",
|
||||
"High speedo needed!": "Нужен высокий спидометр!",
|
||||
"3333MHz (Needs extreme Speedo/PLL)": "3333 МГц (требуется экстремальный спидометр/PLL)",
|
||||
"3366MHz (Needs extreme Speedo/PLL)": "3366 МГц (требуется экстремальный спидометр/PLL)",
|
||||
"3400MHz (Needs extreme Speedo/PLL)": "3400 МГц (требуется экстремальный спидометр/PLL)",
|
||||
"3433MHz (Needs ridiculous Speedo/PLL)": "3433 МГц (нужен нелепый спидометр/PLL)",
|
||||
"3466MHz (Needs ridiculous Speedo/PLL)": "3466 МГц (нужен нелепый спидометр/PLL)",
|
||||
"3500MHz (Needs ridiculous Speedo/PLL)": "3500 МГц (нужен нелепый спидометр/PLL)",
|
||||
"Ram Max Clock": "Рам Макс Часы",
|
||||
"RAM Latency Editor": "Редактор задержки оперативной памяти",
|
||||
"RAM Timing Reductions": "Сокращение таймингов ОЗУ",
|
||||
"Memory Timings": "Тайминги памяти",
|
||||
"Advanced": "Расширенный",
|
||||
"t6 tRTW Fine Tune": "t6 tRTW Точная настройка",
|
||||
"tRTW Fine Tune": "tRTW Точная настройка",
|
||||
"t7 tWTR Fine Tune": "t7 tWTR Тонкая настройка",
|
||||
"tWTR Fine Tune": "tWTR Тонкая настройка",
|
||||
"Memory Latencies": "Задержки памяти",
|
||||
"Read Latency": "Задержка чтения",
|
||||
"Write Latency": "Задержка записи",
|
||||
"CPU Boost Clock": "Тактовая частота процессора",
|
||||
"CPU UV": "УФ процессора",
|
||||
"CPU Unlock": "Разблокировка процессора",
|
||||
"CPU VMIN": "ЦП VMIN",
|
||||
"CPU Max Voltage": "Максимальное напряжение процессора",
|
||||
"CPU Max Clock": "Максимальная частота процессора",
|
||||
"Extreme UV Table": "Стол для экстремального УФ-излучения",
|
||||
"CPU UV Table": "UV-таблица процессора",
|
||||
"CPU Low UV": "ЦП с низким УФ-излучением",
|
||||
"CPU High UV": "Процессор с высоким УФ",
|
||||
"CPU Low VMIN": "Низкий VMIN процессора",
|
||||
"CPU High VMIN": "Высокий VMIN процессора",
|
||||
"No Undervolt": "Нет Андервольта",
|
||||
"SLT Table": "Таблица ТА",
|
||||
"HiOPT Table": "Таблица HiOPT",
|
||||
"GPU Undervolt Table": "Таблица пониженного напряжения графического процессора",
|
||||
"GPU Minimum Voltage": "Минимальное напряжение графического процессора",
|
||||
"Calculate GPU Vmin": "Рассчитать Vmin графического процессора",
|
||||
"GPU VMIN": "Вмин графического процессора",
|
||||
"GPU Maximum Voltage": "Максимальное напряжение графического процессора",
|
||||
"GPU Voltage Offset": "Смещение напряжения графического процессора",
|
||||
"Do not override": "Не переопределять",
|
||||
"Enabled (Default)": "Включено (по умолчанию)",
|
||||
"96.6% limit": "Предел 96,6%",
|
||||
"99.7% limit": "лимит 99,7%",
|
||||
"GPU Scheduling Override": "Переопределение планирования графического процессора",
|
||||
"Official Service": "Официальная служба",
|
||||
"GPU DVFS Mode": "Режим графического процессора DVFS",
|
||||
"GPU DVFS Offset": "Смещение DVFS графического процессора",
|
||||
"GPU Voltage Table": "Таблица напряжений графического процессора",
|
||||
"GPU Custom Table (mV)": "Пользовательская таблица графического процессора (мВ)",
|
||||
"1075MHz without UV, 1152MHz on SLT": "1075 МГц без УФ, 1152 МГц на SLT",
|
||||
"or 1228MHz on HiOPT can cause ": "или 1228 МГц на HiOPT может привести к",
|
||||
"permanent damage to your Switch!": "необратимое повреждение вашего коммутатора!",
|
||||
"921MHz without UV and 960MHz on": "921 МГц без УФ и 960 МГц с включенным",
|
||||
"SLT or HiOPT can cause ": "SLT или HiOPT могут вызвать"
|
||||
}
|
||||
141
Source/hoc-clk/overlay/lang/uk.json
Normal file
141
Source/hoc-clk/overlay/lang/uk.json
Normal file
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"Information": "Інформація",
|
||||
"IDDQ:": "IDDQ:",
|
||||
"Module: ": "Модуль:",
|
||||
"sys-dock status:": "стан sys-dock:",
|
||||
"SaltyNX status:": "Статус SaltyNX:",
|
||||
"RR Display status:": "Статус дисплея RR:",
|
||||
"Wafer Position:": "Позиція пластини:",
|
||||
"Credits": "Кредити",
|
||||
"Developers": "Розробники",
|
||||
"Contributors": "Дописувачі",
|
||||
"Testers": "Тестери",
|
||||
"Special Thanks": "Особлива подяка",
|
||||
"Unknown": "Невідомий",
|
||||
"Installed": "встановлено",
|
||||
"Not Installed": "Не встановлено",
|
||||
"X: %u Y: %u": "X: %u Y: %u",
|
||||
"THE BEER-WARE LICENSE": "ЛІЦЕНЗІЯ НА ПИВНИЙ ПОСУД",
|
||||
"Default": "За замовчуванням",
|
||||
"Do Not Override": "Не перевизначати",
|
||||
"Disabled": "Вимкнено",
|
||||
"Enabled": "Увімкнено",
|
||||
" \\ue0e3 Reset": "\\ue0e3 Скидання",
|
||||
"Display": "Дисплей",
|
||||
"Application changed\\n\\n": "Додаток змінено\\n\\n",
|
||||
"The running application changed\\n\\n": "Запущена програма змінена\\n\\n",
|
||||
"while editing was going on.": "поки йшло редагування.",
|
||||
"Board": "дошка",
|
||||
"%u.%u%u mV": "%u.%u%u мВ",
|
||||
"Could not connect to hoc-clk sysmodule.\\n\\n": "Не вдалося підключитися до системного модуля hoc-clk.\\n\\n",
|
||||
"Please make sure everything is\\n\\n": "Переконайтеся, що все\\n\\n",
|
||||
"correctly installed and enabled.": "правильно встановлено та включено.",
|
||||
"Fatal error": "Фатальна помилка",
|
||||
"Temporary Overrides ": "Тимчасові перевизначення",
|
||||
"Sleep Mode": "Режим сну",
|
||||
"Stock": "Запас",
|
||||
"Dev OC": "Розробник OC",
|
||||
"Boost Mode": "Режим посилення",
|
||||
"Safe Max": "Безпечний макс",
|
||||
"Unsafe Max": "Небезпечний макс",
|
||||
"Absolute Max": "Абсолютний макс",
|
||||
"Handheld Safe Max": "Портативний сейф Макс",
|
||||
"Enable": "Увімкнути",
|
||||
"Edit App Profile": "Редагувати профіль програми",
|
||||
"Edit Global Profile": "Редагувати глобальний профіль",
|
||||
"Temporary Overrides": "Тимчасові перевизначення",
|
||||
"Settings": "Налаштування",
|
||||
"About": "про",
|
||||
"Compiling with minimal features": "Компіляція з мінімальними можливостями",
|
||||
"General Settings": "Загальні налаштування",
|
||||
"Governor Settings": "Налаштування губернатора",
|
||||
"Safety Settings": "Налаштування безпеки",
|
||||
"Save KIP Settings": "Зберегти налаштування KIP",
|
||||
"RAM Settings": "Налаштування оперативної пам'яті",
|
||||
"CPU Settings": "Налаштування ЦП",
|
||||
"GPU Settings": "Налаштування GPU",
|
||||
"Display Settings": "Налаштування дисплея",
|
||||
"Experimental": "Експериментальний",
|
||||
"GPU Scheduling Override Method": "Метод перевизначення планування GPU",
|
||||
"can be dangerous and may cause": "може бути небезпечним і може спричинити",
|
||||
"damage to your battery or charger!": "пошкодження акумулятора або зарядного пристрою!",
|
||||
"Charge Current Override": "Перевизначення струму заряду",
|
||||
"RAM Voltage Display Mode": "Режим відображення напруги RAM",
|
||||
"Polling Interval": "Інтервал опитування",
|
||||
"CPU Governor Minimum Frequency": "Мінімальна частота регулятора ЦП",
|
||||
"refresh rates may cause stress": "частоти оновлення можуть викликати стрес",
|
||||
"or damage to your display! ": "або пошкодження дисплея!",
|
||||
"Proceed at your own risk!": "Продовжуйте на свій страх і ризик!",
|
||||
"Max Handheld Display": "Максимальний портативний дисплей",
|
||||
"Display Clock": "Відображення годинника",
|
||||
"Official Rating": "Офіційний рейтинг",
|
||||
"TDP Threshold": "Поріг TDP",
|
||||
"Power": "потужність",
|
||||
"Thermal Throttle Limit": "Термічний дросельний ліміт",
|
||||
"HP Mode": "Режим HP",
|
||||
"Default (Mariko)": "За замовчуванням (Маріко)",
|
||||
"Default (Erista)": "За замовчуванням (Erista)",
|
||||
"Rating": "Рейтинг",
|
||||
"Safe Max (Mariko)": "Сейф Макс (Маріко)",
|
||||
"Safe Max (Erista)": "Сейф Макс (Еріста)",
|
||||
"RAM VDD2 Voltage": "Напруга RAM VDD2",
|
||||
"Voltage": "Напруга",
|
||||
"RAM VDDQ Voltage": "Напруга RAM VDDQ",
|
||||
"RAM Frequency Editor": "Редактор частоти оперативної пам'яті",
|
||||
"JEDEC.": "JEDEC.",
|
||||
"High speedo needed!": "Потрібна висока швидкість!",
|
||||
"3333MHz (Needs extreme Speedo/PLL)": "3333 МГц (потрібна екстремальна швидкість/PLL)",
|
||||
"3366MHz (Needs extreme Speedo/PLL)": "3366 МГц (потрібна екстремальна швидкість/PLL)",
|
||||
"3400MHz (Needs extreme Speedo/PLL)": "3400 МГц (потрібна екстремальна швидкість/PLL)",
|
||||
"3433MHz (Needs ridiculous Speedo/PLL)": "3433 МГц (потрібен смішний Speedo/PLL)",
|
||||
"3466MHz (Needs ridiculous Speedo/PLL)": "3466 МГц (потрібен смішний Speedo/PLL)",
|
||||
"3500MHz (Needs ridiculous Speedo/PLL)": "3500 МГц (потрібен смішний Speedo/PLL)",
|
||||
"Ram Max Clock": "Годинник Ram Max",
|
||||
"RAM Latency Editor": "Редактор затримки оперативної пам'яті",
|
||||
"RAM Timing Reductions": "Скорочення оперативної пам'яті",
|
||||
"Memory Timings": "Таймінг пам'яті",
|
||||
"Advanced": "Просунутий",
|
||||
"t6 tRTW Fine Tune": "t6 tRTW Точне налаштування",
|
||||
"tRTW Fine Tune": "Точне налаштування tRTW",
|
||||
"t7 tWTR Fine Tune": "t7 tWTR Точне налаштування",
|
||||
"tWTR Fine Tune": "Точна настройка tWTR",
|
||||
"Memory Latencies": "Затримки пам'яті",
|
||||
"Read Latency": "Прочитати затримку",
|
||||
"Write Latency": "Затримка запису",
|
||||
"CPU Boost Clock": "CPU Boost Clock",
|
||||
"CPU UV": "CPU UV",
|
||||
"CPU Unlock": "Розблокування ЦП",
|
||||
"CPU VMIN": "CPU VMIN",
|
||||
"CPU Max Voltage": "Максимальна напруга ЦП",
|
||||
"CPU Max Clock": "Максимальна частота ЦП",
|
||||
"Extreme UV Table": "Екстремальний ультрафіолетовий стіл",
|
||||
"CPU UV Table": "CPU UV Таблиця",
|
||||
"CPU Low UV": "CPU Low UV",
|
||||
"CPU High UV": "CPU High UV",
|
||||
"CPU Low VMIN": "CPU Low VMIN",
|
||||
"CPU High VMIN": "CPU High VMIN",
|
||||
"No Undervolt": "Без андервольта",
|
||||
"SLT Table": "Таблиця SLT",
|
||||
"HiOPT Table": "Таблиця HiOPT",
|
||||
"GPU Undervolt Table": "Таблиця зниження напруги GPU",
|
||||
"GPU Minimum Voltage": "Мінімальна напруга GPU",
|
||||
"Calculate GPU Vmin": "Розрахувати GPU Vmin",
|
||||
"GPU VMIN": "GPU VMIN",
|
||||
"GPU Maximum Voltage": "Максимальна напруга GPU",
|
||||
"GPU Voltage Offset": "Зсув напруги GPU",
|
||||
"Do not override": "Не перевизначати",
|
||||
"Enabled (Default)": "Увімкнено (за замовчуванням)",
|
||||
"96.6% limit": "96,6% обмеження",
|
||||
"99.7% limit": "Обмеження 99,7%.",
|
||||
"GPU Scheduling Override": "Перевизначення планування GPU",
|
||||
"Official Service": "Офіційний сервіс",
|
||||
"GPU DVFS Mode": "Режим GPU DVFS",
|
||||
"GPU DVFS Offset": "GPU DVFS Offset",
|
||||
"GPU Voltage Table": "Таблиця напруги GPU",
|
||||
"GPU Custom Table (mV)": "Спеціальна таблиця GPU (мВ)",
|
||||
"1075MHz without UV, 1152MHz on SLT": "1075 МГц без УФ, 1152 МГц на SLT",
|
||||
"or 1228MHz on HiOPT can cause ": "або 1228 МГц на HiOPT може спричинити",
|
||||
"permanent damage to your Switch!": "незворотне пошкодження вашого комутатора!",
|
||||
"921MHz without UV and 960MHz on": "921 МГц без УФ і 960 МГц увімкнено",
|
||||
"SLT or HiOPT can cause ": "SLT або HiOPT можуть спричинити"
|
||||
}
|
||||
157
Source/hoc-clk/overlay/lang/zh-cn.json
Normal file
157
Source/hoc-clk/overlay/lang/zh-cn.json
Normal file
@@ -0,0 +1,157 @@
|
||||
{
|
||||
"Information": "信息",
|
||||
"IDDQ:": "IDDQ:",
|
||||
"Module: ": "模块: ",
|
||||
"sys-dock status:": "sys-dock 状态:",
|
||||
"SaltyNX status:": "SaltyNX 状态:",
|
||||
"RR Display status:": "RR 显示状态:",
|
||||
"Wafer Position:": "晶圆位置:",
|
||||
"Credits": "致谢",
|
||||
"Developers": "开发者",
|
||||
"Contributors": "贡献者",
|
||||
"Testers": "测试者",
|
||||
"Special Thanks": "特别感谢",
|
||||
"Unknown": "未知",
|
||||
"Installed": "已安装",
|
||||
"Not Installed": "未安装",
|
||||
"X: %u Y: %u": "X: %u Y: %u",
|
||||
"THE BEER-WARE LICENSE": "啤酒软件许可协议",
|
||||
"Default": "默认",
|
||||
"Do Not Override": "不修改",
|
||||
"Disabled": "已禁用",
|
||||
"Enabled": "已启用",
|
||||
" \\ue0e3 Reset": " \\ue0e3 重置",
|
||||
"Display": "显示",
|
||||
"Application changed\\n\\n": "应用已变更\\n\\n",
|
||||
"The running application changed\\n\\n": "正在运行的应用已变更\\n\\n",
|
||||
"while editing was going on.": "编辑过程中发生变更。",
|
||||
"Board": "主板",
|
||||
"%u.%u%u mV": "%u.%u%u mV",
|
||||
"Could not connect to hoc-clk sysmodule.\\n\\n": "无法连接到 hoc-clk 系统模块。\\n\\n",
|
||||
"Please make sure everything is\\n\\n": "请确保所有内容均已\\n\\n",
|
||||
"correctly installed and enabled.": "正确安装并启用。",
|
||||
"Fatal error": "致命错误",
|
||||
"Temporary Overrides ": "临时配置 ",
|
||||
"Sleep Mode": "睡眠模式",
|
||||
"Stock": "原厂默认",
|
||||
"Dev OC": "开发者超频",
|
||||
"Boost Mode": "加速模式",
|
||||
"Safe Max": "安全最大值",
|
||||
"Unsafe Max": "危险最大值",
|
||||
"Absolute Max": "绝对最大值",
|
||||
"Handheld Safe Max": "掌机模式安全最大值",
|
||||
"Enable": "启用",
|
||||
"Edit App Profile": "编辑应用配置",
|
||||
"Edit Global Profile": "编辑全局配置",
|
||||
"Temporary Overrides": "临时配置",
|
||||
"Settings": "设置",
|
||||
"About": "关于",
|
||||
"Compiling with minimal features": "以最小功能编译",
|
||||
"General Settings": "通用设置",
|
||||
"Governor Settings": "调频器设置",
|
||||
"Safety Settings": "安全设置",
|
||||
"Save KIP Settings": "保存 KIP 设置",
|
||||
"RAM Settings": "内存设置",
|
||||
"CPU Settings": "CPU 设置",
|
||||
"GPU Settings": "GPU 设置",
|
||||
"Display Settings": "显示设置",
|
||||
"Experimental": "实验性功能",
|
||||
"GPU Scheduling Override Method": "GPU 调度覆盖方式",
|
||||
"can be dangerous and may cause": "存在风险,可能导致",
|
||||
"damage to your battery or charger!": "电池或充电器损坏!",
|
||||
"Charge Current Override": "充电电流修改",
|
||||
"RAM Voltage Display Mode": "内存电压显示模式",
|
||||
"Polling Interval": "刷新间隔",
|
||||
"CPU Governor Minimum Frequency": "CPU 调频器最低频率",
|
||||
"\uE150 Usage of unsafe display": "\uE150 不安全的显示屏",
|
||||
"refresh rates may cause stress": "刷新率可能会对",
|
||||
"or damage to your display! ": "显示屏造成压力或损坏! ",
|
||||
"Proceed at your own risk!": "操作风险自负!",
|
||||
"Max Handheld Display": "掌机模式最大显示率",
|
||||
"Display Clock": "显示时钟",
|
||||
"Official Rating": "官方额定值",
|
||||
"TDP Threshold": "TDP 阈值",
|
||||
"Power": "电源",
|
||||
"Thermal Throttle Limit": "温控设置",
|
||||
"HP Mode": "高性能模式",
|
||||
"Default (Mariko)": "默认 (Mariko)",
|
||||
"Default (Erista)": "默认 (Erista)",
|
||||
"Rating": "额定值",
|
||||
"Safe Max (Mariko)": "安全最大值 (Mariko)",
|
||||
"Safe Max (Erista)": "安全最大值 (Erista)",
|
||||
"RAM VDD2 Voltage": "内存 VDD2 电压",
|
||||
"Voltage": "电压",
|
||||
"RAM VDDQ Voltage": "内存 VDDQ 电压",
|
||||
"RAM Frequency Editor": "内存频率编辑器",
|
||||
"JEDEC.": "JEDEC 标准。",
|
||||
"High speedo needed!": "需要高 Speedo 配置!",
|
||||
"3333MHz (Needs extreme Speedo/PLL)": "3333MHz (需要极限 Speedo/PLL)",
|
||||
"3366MHz (Needs extreme Speedo/PLL)": "3366MHz (需要极限 Speedo/PLL)",
|
||||
"3400MHz (Needs extreme Speedo/PLL)": "3400MHz (需要极限 Speedo/PLL)",
|
||||
"3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz (需要极端 Speedo/PLL)",
|
||||
"3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz (需要极端 Speedo/PLL)",
|
||||
"3500MHz (Needs ridiculous Speedo/PLL)": "3500MHz (需要极端 Speedo/PLL)",
|
||||
"Ram Max Clock": "内存最大频率",
|
||||
"RAM Latency Editor": "内存延迟编辑器",
|
||||
"RAM Timing Reductions": "内存时序优化",
|
||||
"Memory Timings": "内存时序",
|
||||
"Memory": "内存",
|
||||
"mem": "内存",
|
||||
"Governor": "调频器",
|
||||
"Advanced": "高级",
|
||||
"Docked": "底座模式",
|
||||
"Handheld": "掌机模式",
|
||||
"Charging": "充电中",
|
||||
"USB Charger": "USB 充电器",
|
||||
"PD Charger": "PD 充电器",
|
||||
"Handheld TDP": "掌机模式功耗限制",
|
||||
"Thermal Throttle": "温度控制",
|
||||
"Uncapped Clocks": "解除频率上限",
|
||||
"Soc DVB Shift": "SoC DVB偏移",
|
||||
"Overwrite Boost Mode": "接管官方CPU调度",
|
||||
"Display Refresh Rate Changing": "显示刷新率变更",
|
||||
"t6 tRTW Fine Tune": "t6 tRTW 微调",
|
||||
"tRTW Fine Tune": "tRTW 微调",
|
||||
"t7 tWTR Fine Tune": "t7 tWTR 微调",
|
||||
"tWTR Fine Tune": "tWTR 微调",
|
||||
"Memory Latencies": "内存延迟",
|
||||
"Read Latency": "读取延迟",
|
||||
"Write Latency": "写入延迟",
|
||||
"CPU Boost Clock": "CPU 超频频率",
|
||||
"CPU UV": "CPU 降压",
|
||||
"CPU Unlock": "CPU 解锁",
|
||||
"CPU VMIN": "CPU 最低电压",
|
||||
"CPU Max Voltage": "CPU 最大电压",
|
||||
"CPU Max Clock": "CPU 最大频率",
|
||||
"Extreme UV Table": "极限降压表",
|
||||
"CPU UV Table": "CPU 降压表",
|
||||
"CPU Low UV": "CPU 低压降压",
|
||||
"CPU High UV": "CPU 高压降压",
|
||||
"CPU Low VMIN": "CPU 低压最低电压",
|
||||
"CPU High VMIN": "CPU 高压最低电压",
|
||||
"No Undervolt": "不降压",
|
||||
"SLT Table": "SLT 表",
|
||||
"HiOPT Table": "HiOPT 表",
|
||||
"GPU Undervolt Table": "GPU 降压表",
|
||||
"GPU Minimum Voltage": "GPU 最低电压",
|
||||
"Calculate GPU Vmin": "计算 GPU 最低电压",
|
||||
"GPU VMIN": "GPU 最低电压",
|
||||
"GPU Maximum Voltage": "GPU 最大电压",
|
||||
"GPU Voltage Offset": "GPU 电压偏移",
|
||||
"Do not override": "不修改",
|
||||
"Enabled (Default)": "已启用 (默认)",
|
||||
"96.6% limit": "96.6% 限制",
|
||||
"99.7% limit": "99.7% 限制",
|
||||
"GPU Scheduling Override": "GPU 调度修改",
|
||||
"Official Service": "官方服务",
|
||||
"GPU DVFS Mode": "GPU DVFS 模式",
|
||||
"GPU DVFS Offset": "GPU DVFS 偏移",
|
||||
"GPU Voltage Table": "GPU 电压表",
|
||||
"GPU Custom Table (mV)": "GPU 自定义表 (mV)",
|
||||
"\uE150 Setting GPU Clocks past": "\uE150 将 GPU 频率设置超过",
|
||||
"1075MHz without UV, 1152MHz on SLT": "1075MHz 无降压,SLT 表下 1152MHz",
|
||||
"or 1228MHz on HiOPT can cause ": "或 HiOPT 表下 1228MHz 可能导致 ",
|
||||
"permanent damage to your Switch!": "Switch 永久损坏!",
|
||||
"921MHz without UV and 960MHz on": "921MHz 无降压,SLT/HiOPT 表下 960MHz",
|
||||
"SLT or HiOPT can cause ": "可能导致 "
|
||||
}
|
||||
141
Source/hoc-clk/overlay/lang/zh-tw.json
Normal file
141
Source/hoc-clk/overlay/lang/zh-tw.json
Normal file
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"Information": "資訊",
|
||||
"IDDQ:": "國際電話號碼:",
|
||||
"Module: ": "模組:",
|
||||
"sys-dock status:": "系統塢站狀態:",
|
||||
"SaltyNX status:": "SaltyNX 狀態:",
|
||||
"RR Display status:": "RR 顯示狀態:",
|
||||
"Wafer Position:": "晶圓位置:",
|
||||
"Credits": "製作人員",
|
||||
"Developers": "開發商",
|
||||
"Contributors": "貢獻者",
|
||||
"Testers": "測試人員",
|
||||
"Special Thanks": "特別感謝",
|
||||
"Unknown": "未知",
|
||||
"Installed": "已安裝",
|
||||
"Not Installed": "未安裝",
|
||||
"X: %u Y: %u": "X: %u Y: %u",
|
||||
"THE BEER-WARE LICENSE": "啤酒製品許可證",
|
||||
"Default": "預設",
|
||||
"Do Not Override": "不要覆蓋",
|
||||
"Disabled": "殘障人士",
|
||||
"Enabled": "啟用",
|
||||
" \\ue0e3 Reset": "\\ue0e3 重設",
|
||||
"Display": "顯示",
|
||||
"Application changed\\n\\n": "應用程式已更改\\n\\n",
|
||||
"The running application changed\\n\\n": "正在運行的應用程式已更改\\n\\n",
|
||||
"while editing was going on.": "當編輯正在進行時。",
|
||||
"Board": "董事會",
|
||||
"%u.%u%u mV": "%u.%u%u mV",
|
||||
"Could not connect to hoc-clk sysmodule.\\n\\n": "無法連接到 hoc-clk 系統模組。 \\n\\n",
|
||||
"Please make sure everything is\\n\\n": "請確保一切正常\\n\\n",
|
||||
"correctly installed and enabled.": "正確安裝並啟用。",
|
||||
"Fatal error": "致命錯誤",
|
||||
"Temporary Overrides ": "臨時覆蓋",
|
||||
"Sleep Mode": "睡眠模式",
|
||||
"Stock": "庫存",
|
||||
"Dev OC": "開發OC",
|
||||
"Boost Mode": "升壓模式",
|
||||
"Safe Max": "安全最大值",
|
||||
"Unsafe Max": "不安全最大值",
|
||||
"Absolute Max": "絕對最大值",
|
||||
"Handheld Safe Max": "手持式安全最大",
|
||||
"Enable": "啟用",
|
||||
"Edit App Profile": "編輯應用程式設定檔",
|
||||
"Edit Global Profile": "編輯全域設定檔",
|
||||
"Temporary Overrides": "臨時覆蓋",
|
||||
"Settings": "設定",
|
||||
"About": "關於",
|
||||
"Compiling with minimal features": "使用最少的功能進行編譯",
|
||||
"General Settings": "常規設定",
|
||||
"Governor Settings": "調速器設定",
|
||||
"Safety Settings": "安全設定",
|
||||
"Save KIP Settings": "儲存 KIP 設定",
|
||||
"RAM Settings": "記憶體設定",
|
||||
"CPU Settings": "中央處理器設定",
|
||||
"GPU Settings": "GPU設定",
|
||||
"Display Settings": "顯示設定",
|
||||
"Experimental": "實驗性的",
|
||||
"GPU Scheduling Override Method": "GPU調度覆蓋方法",
|
||||
"can be dangerous and may cause": "可能很危險並可能導致",
|
||||
"damage to your battery or charger!": "損壞電池或充電器!",
|
||||
"Charge Current Override": "充電電流覆蓋",
|
||||
"RAM Voltage Display Mode": "RAM電壓顯示模式",
|
||||
"Polling Interval": "輪詢間隔",
|
||||
"CPU Governor Minimum Frequency": "CPU調速器最低頻率",
|
||||
"refresh rates may cause stress": "刷新率可能會造成壓力",
|
||||
"or damage to your display! ": "或損壞您的顯示器!",
|
||||
"Proceed at your own risk!": "請自行承擔風險!",
|
||||
"Max Handheld Display": "最大手持顯示器",
|
||||
"Display Clock": "顯示時鐘",
|
||||
"Official Rating": "官方評級",
|
||||
"TDP Threshold": "TDP閾值",
|
||||
"Power": "電源",
|
||||
"Thermal Throttle Limit": "熱油門限制",
|
||||
"HP Mode": "惠普模式",
|
||||
"Default (Mariko)": "預設(真理子)",
|
||||
"Default (Erista)": "預設(埃里斯塔)",
|
||||
"Rating": "評級",
|
||||
"Safe Max (Mariko)": "安全最大(真理子)",
|
||||
"Safe Max (Erista)": "安全最大(埃里斯塔)",
|
||||
"RAM VDD2 Voltage": "RAM VDD2 電壓",
|
||||
"Voltage": "電壓",
|
||||
"RAM VDDQ Voltage": "RAM VDDQ 電壓",
|
||||
"RAM Frequency Editor": "RAM頻率編輯器",
|
||||
"JEDEC.": "JEDEC。",
|
||||
"High speedo needed!": "需要高速!",
|
||||
"3333MHz (Needs extreme Speedo/PLL)": "3333MHz(需要極高的 Speedo/PLL)",
|
||||
"3366MHz (Needs extreme Speedo/PLL)": "3366MHz(需要極高的 Speedo/PLL)",
|
||||
"3400MHz (Needs extreme Speedo/PLL)": "3400MHz(需要極高的 Speedo/PLL)",
|
||||
"3433MHz (Needs ridiculous Speedo/PLL)": "3433MHz(需要荒謬的 Speedo/PLL)",
|
||||
"3466MHz (Needs ridiculous Speedo/PLL)": "3466MHz(需要荒謬的 Speedo/PLL)",
|
||||
"3500MHz (Needs ridiculous Speedo/PLL)": "3500MHz(需要荒謬的 Speedo/PLL)",
|
||||
"Ram Max Clock": "記憶體最大時鐘",
|
||||
"RAM Latency Editor": "RAM 延遲編輯器",
|
||||
"RAM Timing Reductions": "RAM 時序減少",
|
||||
"Memory Timings": "記憶體時序",
|
||||
"Advanced": "進階",
|
||||
"t6 tRTW Fine Tune": "t6 tRTW 微調",
|
||||
"tRTW Fine Tune": "tRTW 微調",
|
||||
"t7 tWTR Fine Tune": "t7 tWTR 微調",
|
||||
"tWTR Fine Tune": "tWTR 微調",
|
||||
"Memory Latencies": "記憶體延遲",
|
||||
"Read Latency": "讀取延遲",
|
||||
"Write Latency": "寫入延遲",
|
||||
"CPU Boost Clock": "CPU 升壓時鐘",
|
||||
"CPU UV": "中央處理器紫外線",
|
||||
"CPU Unlock": "CPU解鎖",
|
||||
"CPU VMIN": "CPU最低電壓",
|
||||
"CPU Max Voltage": "CPU最大電壓",
|
||||
"CPU Max Clock": "CPU 最大時脈",
|
||||
"Extreme UV Table": "極端紫外線表",
|
||||
"CPU UV Table": "CPU UV表",
|
||||
"CPU Low UV": "CPU低紫外線",
|
||||
"CPU High UV": "CPU高紫外線",
|
||||
"CPU Low VMIN": "CPU 低 VMIN",
|
||||
"CPU High VMIN": "CPU 高 VMIN",
|
||||
"No Undervolt": "無欠壓",
|
||||
"SLT Table": "SLT表",
|
||||
"HiOPT Table": "HiOPT表",
|
||||
"GPU Undervolt Table": "GPU 欠壓表",
|
||||
"GPU Minimum Voltage": "GPU最低電壓",
|
||||
"Calculate GPU Vmin": "計算 GPU Vmin",
|
||||
"GPU VMIN": "GPU VMIN",
|
||||
"GPU Maximum Voltage": "GPU最大電壓",
|
||||
"GPU Voltage Offset": "GPU電壓偏移",
|
||||
"Do not override": "不要覆蓋",
|
||||
"Enabled (Default)": "啟用(預設)",
|
||||
"96.6% limit": "96.6%限制",
|
||||
"99.7% limit": "99.7%限制",
|
||||
"GPU Scheduling Override": "GPU 調度覆蓋",
|
||||
"Official Service": "官方服務",
|
||||
"GPU DVFS Mode": "GPU DVFS 模式",
|
||||
"GPU DVFS Offset": "GPU DVFS 偏移",
|
||||
"GPU Voltage Table": "GPU電壓表",
|
||||
"GPU Custom Table (mV)": "GPU 自訂表 (mV)",
|
||||
"1075MHz without UV, 1152MHz on SLT": "無 UV 時為 1075MHz,SLT 時為 1152MHz",
|
||||
"or 1228MHz on HiOPT can cause ": "或 HiOPT 上的 1228MHz 可能會導致",
|
||||
"permanent damage to your Switch!": "對您的 Switch 造成永久性損壞!",
|
||||
"921MHz without UV and 960MHz on": "無 UV 時為 921MHz,開啟時為 960MHz",
|
||||
"SLT or HiOPT can cause ": "SLT 或 HiOPT 可能會導致"
|
||||
}
|
||||
16
Source/hoc-clk/overlay/scripts/make_logo.sh
Normal file
16
Source/hoc-clk/overlay/scripts/make_logo.sh
Normal file
@@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
DEST="$CURRENT_DIR/../data/logo_rgba.bin"
|
||||
FONT="$CURRENT_DIR/../../manager/resources/fira/FiraSans-Medium-rnx.ttf"
|
||||
FONT_SIZE="30.5"
|
||||
TEXT="sys-clk"
|
||||
|
||||
function render() {
|
||||
convert -background transparent -colorspace RGB -depth 8 -fill white -font "$1" -pointsize "$2" "label:$3" "$4"
|
||||
}
|
||||
|
||||
render "$FONT" "$FONT_SIZE" "$TEXT" info:
|
||||
render "$FONT" "$FONT_SIZE" "$TEXT" "RGBA:$DEST"
|
||||
42
Source/hoc-clk/overlay/src/ipc.h
Normal file
42
Source/hoc-clk/overlay/src/ipc.h
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
* "THE BEER-WARE LICENSE" (Revision 42):
|
||||
* <p-sam@d3vs.net>, <natinusala@gmail.com>, <m4x@m4xw.net>
|
||||
* 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
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#include "cpp_util.hpp"
|
||||
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#include <sysclk.h>
|
||||
#include <sysclk/client/ipc.h>
|
||||
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
97
Source/hoc-clk/overlay/src/main.cpp
Normal file
97
Source/hoc-clk/overlay/src/main.cpp
Normal file
@@ -0,0 +1,97 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
* "THE BEER-WARE LICENSE" (Revision 42):
|
||||
* <p-sam@d3vs.net>, <natinusala@gmail.com>, <m4x@m4xw.net>
|
||||
* 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
|
||||
* --------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
#define TESLA_INIT_IMPL
|
||||
#include <tesla.hpp>
|
||||
#include "ui/gui/fatal_gui.h"
|
||||
#include "ui/gui/main_gui.h"
|
||||
#include "rgltr_services.h" // for extern Service g_rgltrSrv, etc.
|
||||
|
||||
class AppOverlay : public tsl::Overlay
|
||||
{
|
||||
public:
|
||||
AppOverlay() {}
|
||||
~AppOverlay() {}
|
||||
|
||||
//virtual void initServices() override {
|
||||
// rgltrInitialize();
|
||||
//}
|
||||
|
||||
virtual void exitServices() override {
|
||||
rgltrExit();
|
||||
sysclkIpcExit();
|
||||
}
|
||||
|
||||
virtual std::unique_ptr<tsl::Gui> loadInitialGui() override
|
||||
{
|
||||
uint32_t apiVersion;
|
||||
smInitialize();
|
||||
|
||||
tsl::hlp::ScopeGuard smGuard([] { smExit(); });
|
||||
|
||||
if(!sysclkIpcRunning())
|
||||
{
|
||||
return initially<FatalGui>(
|
||||
"hoc-clk is not running.\n\n"
|
||||
"\n"
|
||||
"Please make sure it is correctly\n\n"
|
||||
"installed and enabled.",
|
||||
""
|
||||
);
|
||||
}
|
||||
|
||||
if(R_FAILED(sysclkIpcInitialize()) || R_FAILED(sysclkIpcGetAPIVersion(&apiVersion)))
|
||||
{
|
||||
return initially<FatalGui>(
|
||||
"Could not connect to hoc-clk.\n\n"
|
||||
"\n"
|
||||
"Please make sure it is correctly\n\n"
|
||||
"installed and enabled.",
|
||||
""
|
||||
);
|
||||
}
|
||||
|
||||
if(SYSCLK_IPC_API_VERSION != apiVersion)
|
||||
{
|
||||
return initially<FatalGui>(
|
||||
"Overlay not compatible with\n\n"
|
||||
"the running hoc-clk version.\n\n"
|
||||
"\n"
|
||||
"Please make sure everything is\n\n"
|
||||
"installed and up to date.",
|
||||
""
|
||||
);
|
||||
}
|
||||
|
||||
return initially<MainGui>();
|
||||
}
|
||||
};
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
return tsl::loop<AppOverlay>(argc, argv);
|
||||
}
|
||||
48
Source/hoc-clk/overlay/src/ui/elements/base_frame.h
Normal file
48
Source/hoc-clk/overlay/src/ui/elements/base_frame.h
Normal file
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
* "THE BEER-WARE LICENSE" (Revision 42):
|
||||
* <p-sam@d3vs.net>, <natinusala@gmail.com>, <m4x@m4xw.net>
|
||||
* 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 <tesla.hpp>
|
||||
#include "../gui/base_gui.h"
|
||||
|
||||
class BaseFrame : public tsl::elm::HeaderOverlayFrame
|
||||
{
|
||||
public:
|
||||
BaseFrame(BaseGui* gui) : tsl::elm::HeaderOverlayFrame(234) {
|
||||
this->gui = gui;
|
||||
}
|
||||
|
||||
void draw(tsl::gfx::Renderer* renderer) override
|
||||
{
|
||||
tsl::elm::HeaderOverlayFrame::draw(renderer);
|
||||
this->gui->preDraw(renderer);
|
||||
}
|
||||
|
||||
protected:
|
||||
BaseGui* gui;
|
||||
};
|
||||
47
Source/hoc-clk/overlay/src/ui/format.h
Normal file
47
Source/hoc-clk/overlay/src/ui/format.h
Normal file
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
* "THE BEER-WARE LICENSE" (Revision 42):
|
||||
* <p-sam@d3vs.net>, <natinusala@gmail.com>, <m4x@m4xw.net>
|
||||
* 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 <cstdio>
|
||||
#include <string>
|
||||
#include <cstdint>
|
||||
|
||||
#define FREQ_DEFAULT_TEXT "Do not override"
|
||||
|
||||
static inline std::string formatListFreqMHz(std::uint32_t mhz)
|
||||
{
|
||||
if(mhz == 0)
|
||||
{
|
||||
return FREQ_DEFAULT_TEXT;
|
||||
}
|
||||
|
||||
char buf[10];
|
||||
return std::string(buf, snprintf(buf, sizeof(buf), "%u MHz", mhz));
|
||||
}
|
||||
|
||||
static inline std::string formatListFreqHz(std::uint32_t hz) { return formatListFreqMHz(hz / 1000000); }
|
||||
309
Source/hoc-clk/overlay/src/ui/gui/about_gui.cpp
Normal file
309
Source/hoc-clk/overlay/src/ui/gui/about_gui.cpp
Normal file
@@ -0,0 +1,309 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
#include "about_gui.h"
|
||||
#include "../format.h"
|
||||
#include <tesla.hpp>
|
||||
#include <string>
|
||||
#include "cat.h"
|
||||
#include "ult_ext.h"
|
||||
|
||||
tsl::elm::ListItem* SpeedoItem = NULL;
|
||||
tsl::elm::ListItem* IddqItem = NULL;
|
||||
tsl::elm::ListItem* DramModule = NULL;
|
||||
tsl::elm::ListItem* sysdockStatusItem = NULL;
|
||||
tsl::elm::ListItem* saltyNXStatusItem = NULL;
|
||||
tsl::elm::ListItem* RETROStatusItem = NULL;
|
||||
tsl::elm::ListItem* waferCordsItem = NULL;
|
||||
|
||||
ImageElement* CatImage = NULL;
|
||||
HideableCategoryHeader* CatHeader = NULL;
|
||||
HideableCustomDrawer* CatSpacer = NULL;
|
||||
int lightosClickCount = 0;
|
||||
|
||||
AboutGui::AboutGui()
|
||||
{
|
||||
memset(strings, 0, sizeof(strings));
|
||||
}
|
||||
|
||||
AboutGui::~AboutGui()
|
||||
{
|
||||
}
|
||||
|
||||
void AboutGui::listUI()
|
||||
{
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::CategoryHeader("Information")
|
||||
);
|
||||
|
||||
SpeedoItem =
|
||||
new tsl::elm::ListItem("Speedo:");
|
||||
this->listElement->addItem(SpeedoItem);
|
||||
|
||||
IddqItem =
|
||||
new tsl::elm::ListItem("IDDQ:");
|
||||
this->listElement->addItem(IddqItem);
|
||||
|
||||
DramModule =
|
||||
new tsl::elm::ListItem("Module: ");
|
||||
this->listElement->addItem(DramModule);
|
||||
|
||||
if(!IsHoag()) {
|
||||
sysdockStatusItem =
|
||||
new tsl::elm::ListItem("sys-dock status:");
|
||||
this->listElement->addItem(sysdockStatusItem);
|
||||
}
|
||||
|
||||
saltyNXStatusItem =
|
||||
new tsl::elm::ListItem("SaltyNX status:");
|
||||
this->listElement->addItem(saltyNXStatusItem);
|
||||
|
||||
if(IsHoag()) {
|
||||
RETROStatusItem =
|
||||
new tsl::elm::ListItem("RR Display status:");
|
||||
this->listElement->addItem(RETROStatusItem);
|
||||
}
|
||||
|
||||
waferCordsItem =
|
||||
new tsl::elm::ListItem("Wafer Position:");
|
||||
this->listElement->addItem(waferCordsItem);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::CategoryHeader("Credits")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::CategoryHeader("Developers")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::ListItem("Souldbminer")
|
||||
);
|
||||
|
||||
// Create special clickable item for Lightos
|
||||
auto lightosItem = new tsl::elm::ListItem("Lightos_");
|
||||
lightosItem->setClickListener([this](u64 keys) -> bool {
|
||||
if (keys & HidNpadButton_A) {
|
||||
lightosClickCount++;
|
||||
if (lightosClickCount >= 10) {
|
||||
if (CatImage != NULL) CatImage->setVisible(true);
|
||||
if (CatHeader != NULL) CatHeader->setVisible(true);
|
||||
if (CatSpacer != NULL) CatSpacer->setVisible(true);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
this->listElement->addItem(lightosItem);
|
||||
|
||||
// ---- Contributors ----
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::CategoryHeader("Contributors")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::ListItem("Dom")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::ListItem("Blaise25")
|
||||
);
|
||||
|
||||
// ---- Testers ----
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::CategoryHeader("Testers")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::ListItem("Dom")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::ListItem("Samybigio2011")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::ListItem("Delta")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::ListItem("Miki1305")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::ListItem("Happy")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::ListItem("Flopsider")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::ListItem("Winnerboi77")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::ListItem("Blaise25")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::ListItem("WE1ZARD")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::ListItem("Alvise")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::ListItem("TDRR")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::ListItem("agjeococh")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::ListItem("Xenshen")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::ListItem("Frost")
|
||||
);
|
||||
|
||||
// ---- Special Thanks ----
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::CategoryHeader("Special Thanks")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::ListItem("ScriesM - Atmosphere CFW")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::ListItem("KazushiMe - Switch OC Suite")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::ListItem("hanai3bi - Switch OC Suite & EOS")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::ListItem("NaGaa95 - L4T-OC-Kernel")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::ListItem("B3711 - EOS")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::ListItem("RetroNX - sys-clk")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::ListItem("b0rd2death - Ultrahand")
|
||||
);
|
||||
|
||||
this->listElement->addItem(
|
||||
new tsl::elm::ListItem("MasaGratoR - Status Monitor")
|
||||
);
|
||||
|
||||
// Create cat elements but hide them initially
|
||||
CatHeader = new HideableCategoryHeader("Cat");
|
||||
CatHeader->setVisible(false);
|
||||
this->listElement->addItem(CatHeader);
|
||||
|
||||
CatImage = new ImageElement(CAT_DATA, CAT_WIDTH, CAT_HEIGHT);
|
||||
CatImage->setVisible(false);
|
||||
this->listElement->addItem(CatImage);
|
||||
|
||||
CatSpacer = new HideableCustomDrawer(75);
|
||||
CatSpacer->setVisible(false);
|
||||
this->listElement->addItem(CatSpacer);
|
||||
}
|
||||
|
||||
std::string AboutGui::formatRamModule() {
|
||||
switch (this->context->dramID) {
|
||||
case 0: return "HB-MGCH 4GB";
|
||||
case 4: return "HM-MGCH 6GB";
|
||||
case 7: return "HM-MGXX 8GB";
|
||||
|
||||
case 1: return "NLE 4GB";
|
||||
case 2: return "WT:C 4GB";
|
||||
|
||||
case 3:
|
||||
case 5 ... 6: return "NEE 4GB";
|
||||
|
||||
case 8:
|
||||
case 12: return "AM-MGCJ 4GB";
|
||||
case 9:
|
||||
case 13: return "AM-MGCJ 8GB";
|
||||
|
||||
case 10:
|
||||
case 14: return "NME 4GB";
|
||||
|
||||
case 11:
|
||||
case 15: return "WT:E 4GB";
|
||||
|
||||
case 17:
|
||||
case 19:
|
||||
case 24: return "AA-MGCL 4GB";
|
||||
|
||||
case 18:
|
||||
case 23:
|
||||
case 28: return "AA-MGCL 8GB";
|
||||
|
||||
case 20 ... 22: return "AB-MGCL 4GB";
|
||||
|
||||
case 25 ... 27: return "WT:F 4GB";
|
||||
|
||||
case 29 ... 31: return "x267 4GB";
|
||||
|
||||
case 32 ... 34: return "WT:B 4GB";
|
||||
|
||||
default: return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
void AboutGui::update()
|
||||
{
|
||||
BaseMenuGui::update();
|
||||
}
|
||||
|
||||
void AboutGui::refresh()
|
||||
{
|
||||
BaseMenuGui::refresh();
|
||||
|
||||
if (!this->context)
|
||||
return;
|
||||
// Format strings once per refresh
|
||||
sprintf(strings[0], "%u/%u/%u", this->context->speedos[HorizonOCSpeedo_CPU], this->context->speedos[HorizonOCSpeedo_GPU], this->context->speedos[HorizonOCSpeedo_SOC]);
|
||||
// This is how hekate does it
|
||||
sprintf(strings[1], "%u/%u/%u", this->context->iddq[HorizonOCSpeedo_CPU], this->context->iddq[HorizonOCSpeedo_GPU], this->context->iddq[HorizonOCSpeedo_SOC]);
|
||||
SpeedoItem->setValue(strings[0]);
|
||||
IddqItem->setValue(strings[1]);
|
||||
DramModule->setValue(formatRamModule());
|
||||
if(!IsHoag())
|
||||
sysdockStatusItem->setValue(this->context->isSysDockInstalled ? "Installed" : "Not Installed");
|
||||
|
||||
saltyNXStatusItem->setValue(this->context->isSaltyNXInstalled ? "Installed" : "Not Installed");
|
||||
|
||||
if(IsHoag())
|
||||
RETROStatusItem->setValue(this->context->isUsingRetroSuper ? "Installed" : "Not Installed");
|
||||
|
||||
sprintf(strings[2], "X: %u Y: %u", this->context->waferX, this->context->waferY);
|
||||
waferCordsItem->setValue(strings[2]);
|
||||
}
|
||||
41
Source/hoc-clk/overlay/src/ui/gui/about_gui.h
Normal file
41
Source/hoc-clk/overlay/src/ui/gui/about_gui.h
Normal file
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include "../../ipc.h"
|
||||
#include "base_menu_gui.h"
|
||||
#include "freq_choice_gui.h"
|
||||
#include "value_choice_gui.h"
|
||||
#include "fatal_gui.h"
|
||||
#include <map>
|
||||
#include <vector>
|
||||
|
||||
class AboutGui : public BaseMenuGui
|
||||
{
|
||||
protected:
|
||||
char strings[32][32];
|
||||
|
||||
public:
|
||||
AboutGui();
|
||||
~AboutGui();
|
||||
|
||||
void listUI() override;
|
||||
void update() override;
|
||||
void refresh() override;
|
||||
|
||||
private:
|
||||
std::string formatRamModule();
|
||||
};
|
||||
468
Source/hoc-clk/overlay/src/ui/gui/app_profile_gui.cpp
Normal file
468
Source/hoc-clk/overlay/src/ui/gui/app_profile_gui.cpp
Normal file
@@ -0,0 +1,468 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
* "THE BEER-WARE LICENSE" (Revision 42):
|
||||
* <p-sam@d3vs.net>, <natinusala@gmail.com>, <m4x@m4xw.net>
|
||||
* 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 "app_profile_gui.h"
|
||||
|
||||
#include "../format.h"
|
||||
#include "fatal_gui.h"
|
||||
#include "labels.h"
|
||||
AppProfileGui::AppProfileGui(std::uint64_t applicationId, SysClkTitleProfileList* profileList)
|
||||
{
|
||||
this->applicationId = applicationId;
|
||||
this->profileList = profileList;
|
||||
}
|
||||
|
||||
AppProfileGui::~AppProfileGui()
|
||||
{
|
||||
delete this->profileList;
|
||||
}
|
||||
|
||||
void AppProfileGui::openFreqChoiceGui(tsl::elm::ListItem* listItem, SysClkProfile profile, SysClkModule module)
|
||||
{
|
||||
std::uint32_t hzList[SYSCLK_FREQ_LIST_MAX];
|
||||
std::uint32_t hzCount;
|
||||
Result rc = sysclkIpcGetFreqList(module, &hzList[0], SYSCLK_FREQ_LIST_MAX, &hzCount);
|
||||
if(R_FAILED(rc))
|
||||
{
|
||||
FatalGui::openWithResultCode("sysclkIpcGetFreqList", rc);
|
||||
return;
|
||||
}
|
||||
std::map<uint32_t, std::string> labels = {};
|
||||
|
||||
if (module == SysClkModule_CPU) {
|
||||
bool isUsingUv = IsMariko() ? configList.values[KipConfigValue_marikoCpuUVHigh] : configList.values[KipConfigValue_eristaCpuUV];
|
||||
labels = IsMariko() ? (isUsingUv ? cpu_freq_label_m_uv : cpu_freq_label_m) : (isUsingUv ? cpu_freq_label_e_uv : cpu_freq_label_e);
|
||||
} else if (module == SysClkModule_GPU) {
|
||||
labels = IsMariko() ? *(marikoUV[configList.values[KipConfigValue_marikoGpuUV]]) : *(eristaUV[configList.values[KipConfigValue_eristaGpuUV]]);
|
||||
}
|
||||
tsl::changeTo<FreqChoiceGui>(this->profileList->mhzMap[profile][module] * 1000000, hzList, hzCount, module, [this, listItem, profile, module](std::uint32_t hz) {
|
||||
this->profileList->mhzMap[profile][module] = hz / 1000000;
|
||||
listItem->setValue(formatListFreqMHz(this->profileList->mhzMap[profile][module]));
|
||||
Result rc = sysclkIpcSetProfiles(this->applicationId, this->profileList);
|
||||
if(R_FAILED(rc))
|
||||
{
|
||||
FatalGui::openWithResultCode("sysclkIpcSetProfiles", rc);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}, true, labels
|
||||
);
|
||||
}
|
||||
|
||||
void AppProfileGui::openValueChoiceGui(
|
||||
tsl::elm::ListItem* listItem,
|
||||
std::uint32_t currentValue,
|
||||
const ValueRange& range,
|
||||
const std::string& categoryName,
|
||||
ValueChoiceListener listener,
|
||||
const ValueThresholds& thresholds,
|
||||
bool enableThresholds,
|
||||
const std::map<std::uint32_t, std::string>& labels,
|
||||
const std::vector<NamedValue>& namedValues,
|
||||
bool showDefaultValue
|
||||
)
|
||||
{
|
||||
tsl::changeTo<ValueChoiceGui>(
|
||||
currentValue,
|
||||
range,
|
||||
categoryName,
|
||||
listener,
|
||||
thresholds,
|
||||
enableThresholds,
|
||||
labels,
|
||||
namedValues,
|
||||
showDefaultValue,
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
void AppProfileGui::addModuleListItem(SysClkProfile profile, SysClkModule module)
|
||||
{
|
||||
tsl::elm::ListItem* listItem = new tsl::elm::ListItem(sysclkFormatModule(module, true));
|
||||
listItem->setValue(formatListFreqMHz(this->profileList->mhzMap[profile][module]));
|
||||
listItem->setClickListener([this, listItem, profile, module](u64 keys) {
|
||||
if((keys & HidNpadButton_A) == HidNpadButton_A)
|
||||
{
|
||||
this->openFreqChoiceGui(listItem, profile, module);
|
||||
return true;
|
||||
}
|
||||
else if((keys & HidNpadButton_Y) == HidNpadButton_Y)
|
||||
{
|
||||
// Reset to "Default" (0 MHz)
|
||||
this->profileList->mhzMap[profile][module] = 0;
|
||||
listItem->setValue(formatListFreqMHz(0));
|
||||
|
||||
Result rc = sysclkIpcSetProfiles(this->applicationId, this->profileList);
|
||||
if(R_FAILED(rc))
|
||||
{
|
||||
FatalGui::openWithResultCode("sysclkIpcSetProfiles", rc);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
this->listElement->addItem(listItem);
|
||||
}
|
||||
|
||||
void AppProfileGui::addModuleListItemToggle(SysClkProfile profile, SysClkModule module)
|
||||
{
|
||||
const char* moduleName = sysclkFormatModule(module, true);
|
||||
std::uint32_t currentValue = this->profileList->mhzMap[profile][module];
|
||||
|
||||
tsl::elm::ToggleListItem* toggle = new tsl::elm::ToggleListItem(moduleName, currentValue != 0);
|
||||
|
||||
toggle->setStateChangedListener([this, profile, module](bool state) {
|
||||
this->profileList->mhzMap[profile][module] = state ? 1 : 0;
|
||||
|
||||
Result rc = sysclkIpcSetProfiles(this->applicationId, this->profileList);
|
||||
if(R_FAILED(rc))
|
||||
{
|
||||
FatalGui::openWithResultCode("sysclkIpcSetProfiles", rc);
|
||||
}
|
||||
});
|
||||
|
||||
this->listElement->addItem(toggle);
|
||||
}
|
||||
|
||||
std::string AppProfileGui::formatValueDisplay(
|
||||
std::uint32_t value,
|
||||
const std::vector<NamedValue>& namedValues,
|
||||
const std::string& suffix,
|
||||
std::uint32_t divisor,
|
||||
int decimalPlaces
|
||||
)
|
||||
{
|
||||
if (value == 0) {
|
||||
return FREQ_DEFAULT_TEXT;
|
||||
}
|
||||
|
||||
if (!namedValues.empty()) {
|
||||
for (const auto& namedValue : namedValues) {
|
||||
if (namedValue.value == value) {
|
||||
return namedValue.name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
char buf[32];
|
||||
if (decimalPlaces > 0) {
|
||||
double displayValue = (double)value / divisor;
|
||||
snprintf(buf, sizeof(buf), "%.*f%s", decimalPlaces, displayValue, suffix.c_str());
|
||||
} else {
|
||||
snprintf(buf, sizeof(buf), "%u%s", value / divisor, suffix.c_str());
|
||||
}
|
||||
return std::string(buf);
|
||||
}
|
||||
|
||||
void AppProfileGui::addModuleListItemValue(
|
||||
SysClkProfile profile,
|
||||
SysClkModule module,
|
||||
const std::string& categoryName,
|
||||
std::uint32_t min,
|
||||
std::uint32_t max,
|
||||
std::uint32_t step,
|
||||
const std::string& suffix,
|
||||
std::uint32_t divisor,
|
||||
int decimalPlaces,
|
||||
ValueThresholds thresholds,
|
||||
std::vector<NamedValue> namedValues,
|
||||
bool showDefaultValue
|
||||
)
|
||||
{
|
||||
tsl::elm::ListItem* listItem =
|
||||
new tsl::elm::ListItem(sysclkFormatModule(module, true));
|
||||
std::uint32_t storedValue = this->profileList->mhzMap[profile][module];
|
||||
|
||||
listItem->setValue(this->formatValueDisplay(storedValue, namedValues, suffix, divisor, decimalPlaces));
|
||||
|
||||
listItem->setClickListener(
|
||||
[this,
|
||||
listItem,
|
||||
profile,
|
||||
module,
|
||||
categoryName,
|
||||
min,
|
||||
max,
|
||||
step,
|
||||
suffix,
|
||||
divisor,
|
||||
decimalPlaces,
|
||||
thresholds,
|
||||
namedValues,
|
||||
showDefaultValue](u64 keys)
|
||||
{
|
||||
if ((keys & HidNpadButton_A) == HidNpadButton_A)
|
||||
{
|
||||
std::uint32_t currentValue =
|
||||
this->profileList->mhzMap[profile][module] * divisor;
|
||||
ValueRange range(
|
||||
min,
|
||||
max,
|
||||
step,
|
||||
suffix,
|
||||
divisor,
|
||||
decimalPlaces
|
||||
);
|
||||
this->openValueChoiceGui(
|
||||
listItem,
|
||||
currentValue,
|
||||
range,
|
||||
categoryName,
|
||||
[this, listItem, profile, module, divisor, suffix, decimalPlaces, thresholds, namedValues](std::uint32_t value) -> bool
|
||||
{
|
||||
this->profileList->mhzMap[profile][module] = value / divisor;
|
||||
listItem->setValue(this->formatValueDisplay(value / divisor, namedValues, suffix, divisor, decimalPlaces));
|
||||
|
||||
Result rc =
|
||||
sysclkIpcSetProfiles(this->applicationId,
|
||||
this->profileList);
|
||||
if (R_FAILED(rc))
|
||||
{
|
||||
FatalGui::openWithResultCode(
|
||||
"sysclkIpcSetProfiles", rc);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
thresholds,
|
||||
false,
|
||||
{},
|
||||
namedValues,
|
||||
showDefaultValue
|
||||
);
|
||||
return true;
|
||||
}
|
||||
else if ((keys & HidNpadButton_Y) == HidNpadButton_Y)
|
||||
{
|
||||
this->profileList->mhzMap[profile][module] = 0;
|
||||
listItem->setValue(FREQ_DEFAULT_TEXT);
|
||||
Result rc =
|
||||
sysclkIpcSetProfiles(this->applicationId,
|
||||
this->profileList);
|
||||
if (R_FAILED(rc))
|
||||
{
|
||||
FatalGui::openWithResultCode("sysclkIpcSetProfiles", rc);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
this->listElement->addItem(listItem);
|
||||
}
|
||||
|
||||
class GovernorProfileSubMenuGui : public BaseMenuGui {
|
||||
uint64_t applicationId;
|
||||
SysClkTitleProfileList* profileList;
|
||||
SysClkProfile profile;
|
||||
public:
|
||||
GovernorProfileSubMenuGui(uint64_t appId, SysClkTitleProfileList* pList, SysClkProfile prof)
|
||||
: applicationId(appId), profileList(pList), profile(prof) {}
|
||||
|
||||
void listUI() override {
|
||||
Result rc = sysclkIpcGetConfigValues(&configList);
|
||||
if (R_FAILED(rc)) [[unlikely]] {
|
||||
FatalGui::openWithResultCode("sysclkIpcGetConfigValues", rc);
|
||||
return;
|
||||
}
|
||||
this->listElement->addItem(new tsl::elm::CategoryHeader("Governor"));
|
||||
|
||||
static constexpr struct { const char* label; int shift; } kAll[] = {
|
||||
{"CPU", 0}, {"GPU", 8}, {"VRR", 16}
|
||||
};
|
||||
int count = configList.values[HorizonOCConfigValue_OverwriteRefreshRate] ? 3 : 2;
|
||||
|
||||
for (int i = 0; i < count; i++) {
|
||||
u8 cur = (this->profileList->mhzMap[this->profile][HorizonOCModule_Governor] >> kAll[i].shift) & 0xFF;
|
||||
auto* bar = new tsl::elm::NamedStepTrackBar(
|
||||
"", {"Do Not Override", "Disabled", "Enabled"},
|
||||
true, kAll[i].label
|
||||
);
|
||||
bar->setProgress(cur);
|
||||
int shift = kAll[i].shift;
|
||||
bar->setValueChangedListener([this, shift](u8 value) {
|
||||
u32& packed = this->profileList->mhzMap[this->profile][HorizonOCModule_Governor];
|
||||
packed = (packed & ~(0xFFu << shift)) | ((u32)value << shift);
|
||||
Result rc = sysclkIpcSetProfiles(this->applicationId, this->profileList);
|
||||
if (R_FAILED(rc)) FatalGui::openWithResultCode("sysclkIpcSetProfiles", rc);
|
||||
});
|
||||
this->listElement->addItem(bar);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
void AppProfileGui::addGovernorSection(SysClkProfile profile) {
|
||||
auto* item = new tsl::elm::ListItem("Governor");
|
||||
item->setValue("\u2192"); // Right arrow
|
||||
item->setClickListener([this, profile](u64 keys) {
|
||||
if (keys & HidNpadButton_A) {
|
||||
tsl::changeTo<GovernorProfileSubMenuGui>(
|
||||
this->applicationId, this->profileList, profile
|
||||
);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
this->listElement->addItem(item);
|
||||
}
|
||||
|
||||
void AppProfileGui::addProfileUI(SysClkProfile profile)
|
||||
{
|
||||
BaseMenuGui::refresh();
|
||||
if(!this->context)
|
||||
return;
|
||||
Result rc = sysclkIpcGetConfigValues(&configList);
|
||||
if (R_FAILED(rc)) [[unlikely]] {
|
||||
FatalGui::openWithResultCode("sysclkIpcGetConfigValues", rc);
|
||||
return;
|
||||
}
|
||||
if((profile == SysClkProfile_Docked && IsHoag()) || profile == SysClkProfile_HandheldCharging)
|
||||
return;
|
||||
this->listElement->addItem(new tsl::elm::CategoryHeader(sysclkFormatProfile(profile, true) + std::string(" ") + ult::DIVIDER_SYMBOL + " \ue0e3 Reset"));
|
||||
this->addModuleListItem(profile, SysClkModule_CPU);
|
||||
this->addModuleListItem(profile, SysClkModule_GPU);
|
||||
this->addModuleListItem(profile, SysClkModule_MEM);
|
||||
#if IS_MINIMAL == 0
|
||||
ValueThresholds lcdThresholds(60, 65);
|
||||
ValueThresholds DThresholdsOLED(120, 500); // nothing is dangerous, past 120hz you can get applet crashes
|
||||
|
||||
if(configList.values[HorizonOCConfigValue_OverwriteRefreshRate]) {
|
||||
if(profile != SysClkProfile_Docked) {
|
||||
this->addModuleListItemValue(profile, HorizonOCModule_Display, "Display", IsAula() ? 45 : 40, configList.values[HorizonOCConfigValue_MaxDisplayClockH], this->context->isUsingRetroSuper ? 5 : 1, " Hz", 1, 0, lcdThresholds);
|
||||
} else {
|
||||
if(IsAula() && this->context->isSysDockInstalled) {
|
||||
std::vector<NamedValue> dockedFreqs = {
|
||||
NamedValue("40 Hz", 40),
|
||||
NamedValue("45 Hz", 45),
|
||||
NamedValue("50 Hz", 50),
|
||||
NamedValue("55 Hz", 55),
|
||||
NamedValue("60 Hz", 60),
|
||||
NamedValue("70 Hz", 70),
|
||||
NamedValue("72 Hz", 72),
|
||||
NamedValue("75 Hz", 75),
|
||||
NamedValue("80 Hz", 80),
|
||||
NamedValue("90 Hz", 90),
|
||||
NamedValue("95 Hz", 95),
|
||||
NamedValue("100 Hz", 100),
|
||||
NamedValue("110 Hz", 110),
|
||||
NamedValue("120 Hz", 120),
|
||||
NamedValue("130 Hz", 130),
|
||||
NamedValue("140 Hz", 140),
|
||||
NamedValue("144 Hz", 144),
|
||||
NamedValue("150 Hz", 150),
|
||||
NamedValue("160 Hz", 160),
|
||||
NamedValue("165 Hz", 165),
|
||||
NamedValue("170 Hz", 170),
|
||||
NamedValue("180 Hz", 180),
|
||||
NamedValue("190 Hz", 190),
|
||||
NamedValue("200 Hz", 200),
|
||||
NamedValue("210 Hz", 210),
|
||||
NamedValue("220 Hz", 220),
|
||||
NamedValue("230 Hz", 230),
|
||||
NamedValue("240 Hz", 240)
|
||||
};
|
||||
|
||||
this->addModuleListItemValue(profile, HorizonOCModule_Display, "Display", 40, 240, 1, " Hz", 1, 0, DThresholdsOLED, dockedFreqs);
|
||||
} else if (IsAula() && !this->context->isSysDockInstalled) {
|
||||
std::vector<NamedValue> dockedFreqsLimited = {
|
||||
NamedValue("50 Hz", 50),
|
||||
NamedValue("55 Hz", 55),
|
||||
NamedValue("60 Hz", 60),
|
||||
NamedValue("65 Hz", 65),
|
||||
NamedValue("70 Hz", 70),
|
||||
NamedValue("72 Hz", 72),
|
||||
NamedValue("75 Hz", 75)
|
||||
};
|
||||
|
||||
this->addModuleListItemValue(profile, HorizonOCModule_Display, "Display", 50, 75, 1, " Hz", 1, 0, DThresholdsOLED, dockedFreqsLimited);
|
||||
} else {
|
||||
std::vector<NamedValue> dockedFreqsStandard = {
|
||||
NamedValue("50 Hz", 50),
|
||||
NamedValue("55 Hz", 55),
|
||||
NamedValue("60 Hz", 60),
|
||||
NamedValue("65 Hz", 65),
|
||||
NamedValue("70 Hz", 70),
|
||||
NamedValue("72 Hz", 72),
|
||||
NamedValue("75 Hz", 75),
|
||||
NamedValue("80 Hz", 80),
|
||||
NamedValue("85 Hz", 85),
|
||||
NamedValue("90 Hz", 90),
|
||||
NamedValue("95 Hz", 95),
|
||||
NamedValue("100 Hz", 100),
|
||||
NamedValue("105 Hz", 105),
|
||||
NamedValue("110 Hz", 110),
|
||||
NamedValue("115 Hz", 115),
|
||||
NamedValue("120 Hz", 120)
|
||||
};
|
||||
this->addModuleListItemValue(profile, HorizonOCModule_Display, "Display", 50, 120, 1, " Hz", 1, 0, ValueThresholds(), dockedFreqsStandard);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
this->addGovernorSection(profile);
|
||||
}
|
||||
|
||||
void AppProfileGui::listUI()
|
||||
{
|
||||
this->addProfileUI(SysClkProfile_Docked);
|
||||
this->addProfileUI(SysClkProfile_Handheld);
|
||||
this->addProfileUI(SysClkProfile_HandheldCharging);
|
||||
this->addProfileUI(SysClkProfile_HandheldChargingOfficial);
|
||||
this->addProfileUI(SysClkProfile_HandheldChargingUSB);
|
||||
}
|
||||
|
||||
void AppProfileGui::changeTo(std::uint64_t applicationId)
|
||||
{
|
||||
SysClkTitleProfileList* profileList = new SysClkTitleProfileList;
|
||||
Result rc = sysclkIpcGetProfiles(applicationId, profileList);
|
||||
if(R_FAILED(rc))
|
||||
{
|
||||
delete profileList;
|
||||
FatalGui::openWithResultCode("sysclkIpcGetProfiles", rc);
|
||||
return;
|
||||
}
|
||||
|
||||
tsl::changeTo<AppProfileGui>(applicationId, profileList);
|
||||
}
|
||||
|
||||
void AppProfileGui::update()
|
||||
{
|
||||
BaseMenuGui::update();
|
||||
|
||||
if((this->context && this->applicationId != this->context->applicationId) && this->applicationId != SYSCLK_GLOBAL_PROFILE_TID)
|
||||
{
|
||||
tsl::changeTo<FatalGui>(
|
||||
"Application changed\n\n"
|
||||
"\n"
|
||||
"The running application changed\n\n"
|
||||
"while editing was going on.",
|
||||
""
|
||||
);
|
||||
}
|
||||
}
|
||||
81
Source/hoc-clk/overlay/src/ui/gui/app_profile_gui.h
Normal file
81
Source/hoc-clk/overlay/src/ui/gui/app_profile_gui.h
Normal file
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
* "THE BEER-WARE LICENSE" (Revision 42):
|
||||
* <p-sam@d3vs.net>, <natinusala@gmail.com>, <m4x@m4xw.net>
|
||||
* 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 "../../ipc.h"
|
||||
#include "base_menu_gui.h"
|
||||
#include "freq_choice_gui.h"
|
||||
#include "value_choice_gui.h"
|
||||
#define SYSCLK_GLOBAL_PROFILE_TID 0xA111111111111111
|
||||
class AppProfileGui : public BaseMenuGui
|
||||
{
|
||||
protected:
|
||||
std::uint64_t applicationId;
|
||||
SysClkTitleProfileList* profileList;
|
||||
void openFreqChoiceGui(tsl::elm::ListItem* listItem, SysClkProfile profile, SysClkModule module);
|
||||
void addModuleListItem(SysClkProfile profile, SysClkModule module);
|
||||
void addModuleListItemToggle(SysClkProfile profile, SysClkModule module);
|
||||
void openValueChoiceGui(
|
||||
tsl::elm::ListItem* listItem,
|
||||
std::uint32_t currentValue,
|
||||
const ValueRange& range,
|
||||
const std::string& categoryName,
|
||||
ValueChoiceListener listener,
|
||||
const ValueThresholds& thresholds = ValueThresholds(),
|
||||
bool enableThresholds = false,
|
||||
const std::map<std::uint32_t, std::string>& labels = {},
|
||||
const std::vector<NamedValue>& namedValues = {},
|
||||
bool showDefaultValue = true
|
||||
);
|
||||
std::string formatValueDisplay(
|
||||
std::uint32_t value,
|
||||
const std::vector<NamedValue>& namedValues,
|
||||
const std::string& suffix,
|
||||
std::uint32_t divisor,
|
||||
int decimalPlaces
|
||||
);
|
||||
void addModuleListItemValue(
|
||||
SysClkProfile profile,
|
||||
SysClkModule module,
|
||||
const std::string& categoryName,
|
||||
std::uint32_t min,
|
||||
std::uint32_t max,
|
||||
std::uint32_t step,
|
||||
const std::string& suffix,
|
||||
std::uint32_t divisor,
|
||||
int decimalPlaces,
|
||||
ValueThresholds thresholds,
|
||||
std::vector<NamedValue> namedValues = {},
|
||||
bool showDefaultValue = true
|
||||
);
|
||||
void addGovernorSection(SysClkProfile profile);
|
||||
void addProfileUI(SysClkProfile profile);
|
||||
public:
|
||||
AppProfileGui(std::uint64_t applicationId, SysClkTitleProfileList* profileList);
|
||||
~AppProfileGui();
|
||||
void listUI() override;
|
||||
static void changeTo(std::uint64_t applicationId);
|
||||
void update() override;
|
||||
};
|
||||
144
Source/hoc-clk/overlay/src/ui/gui/base_gui.cpp
Normal file
144
Source/hoc-clk/overlay/src/ui/gui/base_gui.cpp
Normal file
@@ -0,0 +1,144 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
* "THE BEER-WARE LICENSE" (Revision 42):
|
||||
* <p-sam@d3vs.net>, <natinusala@gmail.com>, <m4x@m4xw.net>
|
||||
* 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 "base_gui.h"
|
||||
|
||||
#include "../elements/base_frame.h"
|
||||
|
||||
#include <tesla.hpp>
|
||||
#include <math.h>
|
||||
|
||||
#define LOGO_X 20
|
||||
#define LOGO_Y 50
|
||||
#define LOGO_LABEL_FONT_SIZE 45
|
||||
|
||||
#define VERSION_X (LOGO_X + 250)
|
||||
#define VERSION_Y (LOGO_Y - 40)
|
||||
#define VERSION_FONT_SIZE 15
|
||||
|
||||
std::string getVersionString() {
|
||||
char buf[0x100] = "";
|
||||
Result rc = sysclkIpcGetVersionString(buf, sizeof(buf));
|
||||
if (R_FAILED(rc) || buf[0] == '\0') {
|
||||
return "Unknown";
|
||||
}
|
||||
return std::string(buf);
|
||||
}
|
||||
|
||||
static constexpr tsl::Color dynamicLogoRGB1 = tsl::Color(0, 4, 8, 15);
|
||||
static constexpr tsl::Color dynamicLogoRGB2 = tsl::Color(7, 15, 15, 15);
|
||||
static constexpr tsl::Color STATIC_AQUA = tsl::Color(2, 10, 12, 15);
|
||||
const std::string name = "Horizon OC Zeus";
|
||||
|
||||
static s32 drawDynamicUltraText(
|
||||
tsl::gfx::Renderer* renderer,
|
||||
s32 startX,
|
||||
s32 y,
|
||||
u32 fontSize,
|
||||
const tsl::Color& staticColor,
|
||||
bool useNotificationMethod = false)
|
||||
{
|
||||
static constexpr double cycleDuration = 1.6;
|
||||
|
||||
s32 currentX = startX;
|
||||
|
||||
const u64 currentTime_ns = armTicksToNs(armGetSystemTick());
|
||||
const double timeNow = static_cast<double>(currentTime_ns) / 1e9;
|
||||
const double timeBase = fmod(timeNow, cycleDuration);
|
||||
|
||||
const double waveScale = 2.0 * M_PI / cycleDuration;
|
||||
|
||||
for (size_t i = 0; i < name.size(); i++)
|
||||
{
|
||||
char letter = name[i];
|
||||
if (letter == '\0') break;
|
||||
|
||||
double phase = waveScale * (timeBase + i * 0.12);
|
||||
|
||||
double raw = cos(phase);
|
||||
double n = (raw + 1.0) * 0.5;
|
||||
double s1 = n * n * (3.0 - 2.0 * n);
|
||||
double blend = std::clamp(s1, 0.0, 1.0);
|
||||
|
||||
double glow = (cos(phase * 1.5) + 1.0) * 0.5;
|
||||
double brightness = 0.75 + glow * 0.25;
|
||||
|
||||
u8 r = static_cast<u8>(
|
||||
(dynamicLogoRGB1.r + (dynamicLogoRGB2.r - dynamicLogoRGB1.r) * blend) * brightness
|
||||
);
|
||||
u8 g = static_cast<u8>(
|
||||
(dynamicLogoRGB1.g + (dynamicLogoRGB2.g - dynamicLogoRGB1.g) * blend) * brightness
|
||||
);
|
||||
u8 b = static_cast<u8>(
|
||||
(dynamicLogoRGB1.b + (dynamicLogoRGB2.b - dynamicLogoRGB1.b) * blend) * brightness
|
||||
);
|
||||
|
||||
r = std::clamp<u8>(r, 0, 15);
|
||||
g = std::clamp<u8>(g, 0, 15);
|
||||
b = std::clamp<u8>(b, 0, 15);
|
||||
|
||||
bool lightning = (fmod(timeNow, 5.0) < 0.15);
|
||||
if (lightning) {
|
||||
r = std::min<u8>(r + 4, 15);
|
||||
g = std::min<u8>(g + 4, 15);
|
||||
b = std::min<u8>(b + 15, 15);
|
||||
}
|
||||
|
||||
tsl::Color color(r, g, b, 15);
|
||||
|
||||
std::string ls(1, letter);
|
||||
|
||||
if (useNotificationMethod)
|
||||
currentX += renderer->drawNotificationString(ls, false, currentX, y, fontSize, color).first;
|
||||
else
|
||||
currentX += renderer->drawString(ls, false, currentX, y, fontSize, color).first;
|
||||
}
|
||||
|
||||
return currentX;
|
||||
}
|
||||
|
||||
void BaseGui::preDraw(tsl::gfx::Renderer* renderer) {
|
||||
drawDynamicUltraText(
|
||||
renderer,
|
||||
LOGO_X,
|
||||
LOGO_Y,
|
||||
LOGO_LABEL_FONT_SIZE,
|
||||
STATIC_AQUA,
|
||||
false
|
||||
);
|
||||
}
|
||||
|
||||
tsl::elm::Element* BaseGui::createUI()
|
||||
{
|
||||
BaseFrame* rootFrame = new BaseFrame(this);
|
||||
rootFrame->setContent(this->baseUI());
|
||||
return rootFrame;
|
||||
}
|
||||
|
||||
void BaseGui::update()
|
||||
{
|
||||
this->refresh();
|
||||
}
|
||||
53
Source/hoc-clk/overlay/src/ui/gui/base_gui.h
Normal file
53
Source/hoc-clk/overlay/src/ui/gui/base_gui.h
Normal file
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
* "THE BEER-WARE LICENSE" (Revision 42):
|
||||
* <p-sam@d3vs.net>, <natinusala@gmail.com>, <m4x@m4xw.net>
|
||||
* 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 <tesla.hpp>
|
||||
#include <fstream>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <algorithm>
|
||||
|
||||
#include "../style.h"
|
||||
#include "../../ipc.h"
|
||||
|
||||
class BaseGui : public tsl::Gui
|
||||
{
|
||||
public:
|
||||
BaseGui() {}
|
||||
~BaseGui() {}
|
||||
virtual void preDraw(tsl::gfx::Renderer* renderer);
|
||||
void update() override;
|
||||
tsl::elm::Element* createUI() override;
|
||||
virtual tsl::elm::Element* baseUI() = 0;
|
||||
virtual void refresh() {}
|
||||
private:
|
||||
};
|
||||
|
||||
|
||||
extern std::string getVersionString();
|
||||
323
Source/hoc-clk/overlay/src/ui/gui/base_menu_gui.cpp
Normal file
323
Source/hoc-clk/overlay/src/ui/gui/base_menu_gui.cpp
Normal file
@@ -0,0 +1,323 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
* "THE BEER-WARE LICENSE" (Revision 42):
|
||||
* <p-sam@d3vs.net>, <natinusala@gmail.com>, <m4x@m4xw.net>
|
||||
* 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 "base_menu_gui.h"
|
||||
#include "fatal_gui.h"
|
||||
|
||||
// Cache hardware model to avoid repeated syscalls
|
||||
|
||||
BaseMenuGui::BaseMenuGui() : tempColors{ tsl::Color(0), tsl::Color(0), tsl::Color(0), tsl::Color(0), tsl::Color(0), tsl::Color(0), tsl::Color(0), }
|
||||
{
|
||||
tsl::initializeThemeVars();
|
||||
this->context = nullptr;
|
||||
this->lastContextUpdate = 0;
|
||||
this->listElement = nullptr;
|
||||
|
||||
|
||||
// Pre-cache hardware model during initialization
|
||||
IsAula();
|
||||
IsMariko();
|
||||
IsHoag();
|
||||
|
||||
// Initialize display strings
|
||||
memset(displayStrings, 0, sizeof(displayStrings));
|
||||
}
|
||||
|
||||
BaseMenuGui::~BaseMenuGui() {
|
||||
delete this->context; // delete handles nullptr automatically
|
||||
}
|
||||
|
||||
// Fast preDraw - just renders pre-computed strings
|
||||
void BaseMenuGui::preDraw(tsl::gfx::Renderer* renderer) {
|
||||
BaseGui::preDraw(renderer);
|
||||
if(!this->context) [[unlikely]] return;
|
||||
|
||||
// All constants pre-calculated and cached
|
||||
static constexpr const char* const labels[] = {
|
||||
"App ID", "Profile", "CPU", "GPU", "MEM", "SoC", "Board", "Skin", "Now", "Avg", "BAT", "PMIC", "FAN", "DISP", "FPS", "RES"
|
||||
};
|
||||
|
||||
static constexpr u32 dataPositions[6] = {63-3+3, 200-1, 344-1-3, 200-1, 342-1, 321-1};
|
||||
|
||||
static u32 labelWidths[10];
|
||||
static bool positionsInitialized = false;
|
||||
|
||||
if (!positionsInitialized) {
|
||||
for (int i = 0; i < 10; i++) {
|
||||
labelWidths[i] = renderer->getTextDimensions(labels[i], false, SMALL_TEXT_SIZE).first;
|
||||
}
|
||||
positionsInitialized = true;
|
||||
}
|
||||
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("USB Charger", false, SMALL_TEXT_SIZE).first; // longest word
|
||||
|
||||
u32 y = 91;
|
||||
|
||||
// === TOP SECTION ===
|
||||
renderer->drawRoundedRect(14, 70-1, 420, 30+2, 12.0f, renderer->aWithOpacity(tsl::tableBGColor));
|
||||
|
||||
// App ID - use pre-formatted string
|
||||
renderer->drawString(labels[0], false, positions[0], y, SMALL_TEXT_SIZE, tsl::sectionTextColor);
|
||||
renderer->drawString(displayStrings[0], false, positions[0] + labelWidths[0] + 9, y, SMALL_TEXT_SIZE, tsl::infoTextColor);
|
||||
|
||||
// Profile - use pre-formatted string
|
||||
renderer->drawString(labels[1], false, 423 - maxProfileValueWidth - labelWidths[1] - 9, y, SMALL_TEXT_SIZE, tsl::sectionTextColor);
|
||||
renderer->drawString(displayStrings[1], false, 423 - maxProfileValueWidth, y, SMALL_TEXT_SIZE, tsl::infoTextColor);
|
||||
|
||||
y += 38; // Direct assignment instead of += 38
|
||||
|
||||
// === MAIN DATA SECTION ===
|
||||
// renderer->drawRoundedRect(14, 106, 420, 156, 10.0f, renderer->aWithOpacity(tsl::tableBGColor));
|
||||
renderer->drawRoundedRect(14, 106, 420, 136, 12.0f, renderer->aWithOpacity(tsl::tableBGColor));
|
||||
// === FREQUENCY SECTION ===
|
||||
// Labels first (better cache locality)
|
||||
renderer->drawString(labels[2], false, positions[2], y, SMALL_TEXT_SIZE, tsl::sectionTextColor);
|
||||
renderer->drawString(labels[3], false, positions[3], y, SMALL_TEXT_SIZE, tsl::sectionTextColor);
|
||||
renderer->drawString(labels[4], false, positions[4], y, SMALL_TEXT_SIZE, tsl::sectionTextColor);
|
||||
|
||||
renderer->drawString(displayStrings[5], false, dataPositions[0], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // CPU real
|
||||
renderer->drawString(displayStrings[6], false, dataPositions[1], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // GPU real
|
||||
renderer->drawString(displayStrings[7], false, dataPositions[2], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // MEM real
|
||||
|
||||
// Current frequencies - use pre-formatted strings
|
||||
// renderer->drawString(displayStrings[2], false, dataPositions[0], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // CPU
|
||||
// renderer->drawString(displayStrings[3], false, dataPositions[1], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // GPU
|
||||
// renderer->drawString(displayStrings[4], false, dataPositions[2], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // MEM
|
||||
|
||||
y += 20; // Direct assignment (129 + 20)
|
||||
|
||||
renderer->drawString(displayStrings[19], false, positions[2], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // CPU Usage
|
||||
renderer->drawString(displayStrings[17], false, positions[3], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // GPU Usage
|
||||
if(configList.values[HorizonOCConfigValue_RAMVoltUsageDisplayMode] == RamDisplayMode_VDD2Usage || configList.values[HorizonOCConfigValue_RAMVoltUsageDisplayMode] == RamDisplayMode_VDDQUsage)
|
||||
renderer->drawString(displayStrings[18], false, positions[4], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // RAM Usage
|
||||
// === REAL FREQUENCIES ===
|
||||
|
||||
// y += 20; // Direct assignment (149 + 20)
|
||||
|
||||
// === VOLTAGES ===
|
||||
renderer->drawString(displayStrings[8], false, dataPositions[0], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // CPU voltage
|
||||
renderer->drawString(displayStrings[9], false, dataPositions[1], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // GPU voltage
|
||||
|
||||
renderer->drawStringWithColoredSections(displayStrings[10], false, {""}, configList.values[HorizonOCConfigValue_RAMVoltUsageDisplayMode] == RamDisplayMode_VDD2VDDQ ? dataPositions[5]-16 : dataPositions[2], y, SMALL_TEXT_SIZE, tsl::infoTextColor, tsl::separatorColor);
|
||||
|
||||
y += 22; // Direct assignment (169 + 22)
|
||||
|
||||
// === TEMPERATURE SECTION ===
|
||||
// Labels
|
||||
renderer->drawString(labels[5], false, positions[5], y, SMALL_TEXT_SIZE, tsl::sectionTextColor);
|
||||
renderer->drawString(labels[6], false, positions[6]-1, y, SMALL_TEXT_SIZE, tsl::sectionTextColor);
|
||||
renderer->drawString(labels[7], false, positions[7], y, SMALL_TEXT_SIZE, tsl::sectionTextColor);
|
||||
|
||||
// Temperatures with color - use pre-computed colors
|
||||
renderer->drawString(displayStrings[11], false, dataPositions[0], y, SMALL_TEXT_SIZE, tempColors[SysClkThermalSensor_SOC]); // SOC
|
||||
renderer->drawString(displayStrings[12], false, dataPositions[1], y, SMALL_TEXT_SIZE, tempColors[SysClkThermalSensor_PCB]); // PCB
|
||||
renderer->drawString(displayStrings[13], false, dataPositions[2], y, SMALL_TEXT_SIZE, tempColors[SysClkThermalSensor_Skin]); // Skin
|
||||
|
||||
y += 20; // Direct assignment (191 + 20)
|
||||
|
||||
renderer->drawString(displayStrings[14], false, dataPositions[0], y, SMALL_TEXT_SIZE, tsl::infoTextColor);
|
||||
|
||||
// Power labels and values
|
||||
renderer->drawString(labels[8], false, positions[8]-1, y, SMALL_TEXT_SIZE, tsl::sectionTextColor);
|
||||
renderer->drawString(labels[9], false, positions[9], y, SMALL_TEXT_SIZE, tsl::sectionTextColor);
|
||||
|
||||
renderer->drawString(displayStrings[15], false, dataPositions[3], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // Power now
|
||||
renderer->drawString(displayStrings[16], false, dataPositions[4], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // Power avg
|
||||
|
||||
y+=20;
|
||||
|
||||
renderer->drawString(labels[10], false, positions[2], y, SMALL_TEXT_SIZE, tsl::sectionTextColor);
|
||||
|
||||
renderer->drawString(displayStrings[20], false, dataPositions[0], y, SMALL_TEXT_SIZE, tempColors[HorizonOCThermalSensor_Battery]); // Battery
|
||||
|
||||
renderer->drawString(labels[13], false, positions[4], y, SMALL_TEXT_SIZE, tsl::sectionTextColor); // disp label
|
||||
|
||||
renderer->drawString(displayStrings[25], false, dataPositions[2], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // disp freq
|
||||
|
||||
renderer->drawString(labels[12], false, positions[3], y, SMALL_TEXT_SIZE, tsl::sectionTextColor); // fan label
|
||||
|
||||
renderer->drawString(displayStrings[24], false, dataPositions[1], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // fan speed
|
||||
|
||||
y+=20;
|
||||
|
||||
renderer->drawString(displayStrings[21], false, dataPositions[0], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // Bat voltage
|
||||
renderer->drawString(displayStrings[23], false, positions[2] - 2, y, SMALL_TEXT_SIZE, tsl::infoTextColor); // Bat Age
|
||||
|
||||
if(this->context->isSaltyNXInstalled) {
|
||||
|
||||
renderer->drawString(labels[15], false, positions[3], y, SMALL_TEXT_SIZE, tsl::sectionTextColor); // RES label
|
||||
renderer->drawString(displayStrings[27], false, dataPositions[1], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // RES
|
||||
|
||||
renderer->drawString(labels[14], false, positions[4], y, SMALL_TEXT_SIZE, tsl::sectionTextColor); // FPS label
|
||||
renderer->drawString(displayStrings[26], false, dataPositions[2], y, SMALL_TEXT_SIZE, tsl::infoTextColor); // FPS
|
||||
|
||||
}
|
||||
|
||||
y+=20;
|
||||
}
|
||||
|
||||
// Optimized refresh - now does all the string formatting once per second
|
||||
void BaseMenuGui::refresh()
|
||||
{
|
||||
const u64 ticks = armGetSystemTick();
|
||||
// Use cached comparison - 1 billion nanoseconds
|
||||
if (armTicksToNs(ticks - this->lastContextUpdate) <= 1000000000UL) [[likely]] {
|
||||
return; // Early exit for most calls
|
||||
}
|
||||
|
||||
this->lastContextUpdate = ticks;
|
||||
|
||||
// Lazy context allocation
|
||||
if (!this->context) [[unlikely]] {
|
||||
this->context = new SysClkContext;
|
||||
}
|
||||
|
||||
// === SYSCLK CONTEXT UPDATE ===
|
||||
Result rc = sysclkIpcGetCurrentContext(this->context);
|
||||
if (R_FAILED(rc)) [[unlikely]] {
|
||||
FatalGui::openWithResultCode("sysclkIpcGetCurrentContext", rc);
|
||||
return;
|
||||
}
|
||||
|
||||
rc = sysclkIpcGetConfigValues(&configList);
|
||||
if (R_FAILED(rc)) [[unlikely]] {
|
||||
FatalGui::openWithResultCode("sysclkIpcGetConfigValues", rc);
|
||||
return;
|
||||
}
|
||||
// dockedHighestAllowedRefreshRate = this->context->maxDisplayFreq;
|
||||
|
||||
// === FORMAT ALL DISPLAY STRINGS (once per second) ===
|
||||
// App ID (hex conversion)
|
||||
sprintf(displayStrings[0], "%016lX", context->applicationId);
|
||||
|
||||
// Profile
|
||||
strcpy(displayStrings[1], sysclkFormatProfile(context->profile, true));
|
||||
|
||||
// Current frequencies
|
||||
u32 hz = context->freqs[SysClkModule_CPU]; // CPU
|
||||
sprintf(displayStrings[2], "%u.%u MHz", hz / 1000000U, (hz / 100000U) % 10U);
|
||||
|
||||
hz = context->freqs[SysClkModule_GPU]; // GPU
|
||||
sprintf(displayStrings[3], "%u.%u MHz", hz / 1000000U, (hz / 100000U) % 10U);
|
||||
|
||||
hz = context->freqs[SysClkModule_MEM]; // MEM
|
||||
sprintf(displayStrings[4], "%u.%u MHz", hz / 1000000U, (hz / 100000U) % 10U);
|
||||
|
||||
// Real frequencies
|
||||
hz = context->realFreqs[SysClkModule_CPU]; // CPU
|
||||
sprintf(displayStrings[5], "%u.%u MHz", hz / 1000000U, (hz / 100000U) % 10U);
|
||||
|
||||
hz = context->realFreqs[SysClkModule_GPU]; // GPU
|
||||
sprintf(displayStrings[6], "%u.%u MHz", hz / 1000000U, (hz / 100000U) % 10U);
|
||||
|
||||
hz = context->realFreqs[SysClkModule_MEM]; // MEM
|
||||
sprintf(displayStrings[7], "%u.%u MHz", hz / 1000000U, (hz / 100000U) % 10U);
|
||||
|
||||
// Voltages
|
||||
sprintf(displayStrings[8], "%.1f mV", context->voltages[HocClkVoltage_CPU] / 1000.0);
|
||||
sprintf(displayStrings[9], "%.1f mV", context->voltages[HocClkVoltage_GPU] / 1000.0);
|
||||
|
||||
switch(configList.values[HorizonOCConfigValue_RAMVoltUsageDisplayMode]) {
|
||||
case RamDisplayMode_VDD2VDDQ:
|
||||
sprintf(displayStrings[10], "%u.%u%u mV", context->voltages[HocClkVoltage_EMCVDD2] / 1000U, (context->voltages[HocClkVoltage_EMCVDD2] % 1000U) / 100U, context->voltages[HocClkVoltage_EMCVDDQ_MarikoOnly] / 1000U);
|
||||
break;
|
||||
case RamDisplayMode_VDD2Usage:
|
||||
sprintf(displayStrings[10], "%u.%u mV", context->voltages[HocClkVoltage_EMCVDD2] / 1000U, (context->voltages[HocClkVoltage_EMCVDD2] % 1000U) / 100U);
|
||||
break;
|
||||
case RamDisplayMode_VDDQUsage:
|
||||
sprintf(displayStrings[10], "%u.%u mV", context->voltages[HocClkVoltage_EMCVDDQ_MarikoOnly] / 1000U, (context->voltages[HocClkVoltage_EMCVDDQ_MarikoOnly] % 1000U) / 100U);
|
||||
break;
|
||||
default:
|
||||
strcpy(displayStrings[10], "N/A");
|
||||
break;
|
||||
}
|
||||
|
||||
// Temperatures and pre-compute colors
|
||||
u32 millis = context->temps[SysClkThermalSensor_SOC]; // SOC
|
||||
sprintf(displayStrings[11], "%u.%u °C", millis / 1000U, (millis % 1000U) / 100U);
|
||||
tempColors[SysClkThermalSensor_SOC] = tsl::GradientColor(millis * 0.001f);
|
||||
|
||||
millis = context->temps[SysClkThermalSensor_PCB]; // PCB
|
||||
sprintf(displayStrings[12], "%u.%u °C", millis / 1000U, (millis % 1000U) / 100U);
|
||||
tempColors[SysClkThermalSensor_PCB] = tsl::GradientColor(millis * 0.001f);
|
||||
|
||||
millis = context->temps[SysClkThermalSensor_Skin]; // Skin
|
||||
sprintf(displayStrings[13], "%u.%u °C", millis / 1000U, (millis % 1000U) / 100U);
|
||||
tempColors[SysClkThermalSensor_Skin] = tsl::GradientColor(millis * 0.001f);
|
||||
|
||||
// SOC voltage (if available)
|
||||
sprintf(displayStrings[14], "%u mV", context->voltages[HocClkVoltage_SOC] / 1000U);
|
||||
|
||||
// Power
|
||||
sprintf(displayStrings[15], "%d mW", context->power[0]); // Now
|
||||
sprintf(displayStrings[16], "%d mW", context->power[1]); // Avg
|
||||
|
||||
sprintf(displayStrings[17], "%u%%", context->partLoad[HocClkPartLoad_GPU] / 10);
|
||||
sprintf(displayStrings[18], "%u%%", context->partLoad[SysClkPartLoad_EMC] / 10);
|
||||
sprintf(displayStrings[19], "%u%%", context->partLoad[HocClkPartLoad_CPUMax] / 10);
|
||||
|
||||
millis = context->temps[HorizonOCThermalSensor_Battery]; // Battery
|
||||
sprintf(displayStrings[20], "%u.%u °C", millis / 1000U, (millis % 1000U) / 100U);
|
||||
tempColors[HorizonOCThermalSensor_Battery] = tsl::GradientColor(millis * 0.001f);
|
||||
|
||||
sprintf(displayStrings[21], "%d mV", context->voltages[HocClkVoltage_Battery]); // BAT AVG
|
||||
|
||||
sprintf(displayStrings[23], "%u%%", context->partLoad[HocClkPartLoad_BAT] / 1000);
|
||||
|
||||
sprintf(displayStrings[24], "%u%%", context->partLoad[HocClkPartLoad_FAN]);
|
||||
|
||||
sprintf(displayStrings[25], "%u Hz", context->realFreqs[HorizonOCModule_Display]);
|
||||
if(this->context->isSaltyNXInstalled) {
|
||||
if(context->fps == 254) {
|
||||
strcpy(displayStrings[26], "N/A");
|
||||
} else {
|
||||
memset(displayStrings[26], 0, sizeof(displayStrings[26]));
|
||||
sprintf(displayStrings[26], "%u", context->fps);
|
||||
}
|
||||
}
|
||||
|
||||
if(this->context->isSaltyNXInstalled) {
|
||||
if(context->resolutionHeight == 0) {
|
||||
strcpy(displayStrings[27], "N/A");
|
||||
} else {
|
||||
memset(displayStrings[27], 0, sizeof(displayStrings[27]));
|
||||
sprintf(displayStrings[27], "%up", context->resolutionHeight);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
tsl::elm::Element* BaseMenuGui::baseUI()
|
||||
{
|
||||
auto* list = new tsl::elm::List();
|
||||
list->addItem(new tsl::elm::CustomDrawer([](tsl::gfx::Renderer*, s32, s32, s32, s32) {}), 10); // add a bit of space
|
||||
this->listElement = list;
|
||||
this->listUI();
|
||||
|
||||
return list;
|
||||
}
|
||||
91
Source/hoc-clk/overlay/src/ui/gui/base_menu_gui.h
Normal file
91
Source/hoc-clk/overlay/src/ui/gui/base_menu_gui.h
Normal file
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
* "THE BEER-WARE LICENSE" (Revision 42):
|
||||
* <p-sam@d3vs.net>, <natinusala@gmail.com>, <m4x@m4xw.net>
|
||||
* 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 "../../ipc.h"
|
||||
#include "base_gui.h"
|
||||
|
||||
class BaseMenuGui : public BaseGui
|
||||
{
|
||||
protected:
|
||||
|
||||
public:
|
||||
// u8 dockedHighestAllowedRefreshRate = 60;
|
||||
SysClkContext* context;
|
||||
std::uint64_t lastContextUpdate;
|
||||
SysClkConfigValueList configList;
|
||||
bool g_hardwareModelCached = false;
|
||||
bool g_isMariko = false;
|
||||
bool g_isAula = false;
|
||||
bool g_isHoag = false;
|
||||
SetSysProductModel HWmodel = SetSysProductModel_Invalid;
|
||||
|
||||
bool IsAula() {
|
||||
if (!g_hardwareModelCached) {
|
||||
setsysGetProductModel(&HWmodel);
|
||||
g_hardwareModelCached = true;
|
||||
}
|
||||
g_isAula = (HWmodel == SetSysProductModel_Aula);
|
||||
return g_isAula;
|
||||
}
|
||||
bool IsHoag() {
|
||||
if (!g_hardwareModelCached) {
|
||||
setsysGetProductModel(&HWmodel);
|
||||
g_hardwareModelCached = true;
|
||||
}
|
||||
g_isHoag = (HWmodel == SetSysProductModel_Hoag);
|
||||
return g_isHoag;
|
||||
}
|
||||
bool IsMariko() {
|
||||
if (!g_hardwareModelCached) {
|
||||
setsysGetProductModel(&HWmodel);
|
||||
g_hardwareModelCached = true;
|
||||
}
|
||||
g_isMariko = (HWmodel == SetSysProductModel_Iowa ||
|
||||
HWmodel == SetSysProductModel_Hoag ||
|
||||
HWmodel == SetSysProductModel_Calcio ||
|
||||
HWmodel == SetSysProductModel_Aula);
|
||||
|
||||
return g_isMariko;
|
||||
}
|
||||
|
||||
bool IsErista() {
|
||||
return !IsMariko();
|
||||
}
|
||||
BaseMenuGui();
|
||||
~BaseMenuGui();
|
||||
void preDraw(tsl::gfx::Renderer* renderer) override;
|
||||
tsl::elm::List* listElement;
|
||||
tsl::elm::Element* baseUI() override;
|
||||
void refresh() override;
|
||||
virtual void listUI() = 0;
|
||||
|
||||
private:
|
||||
char displayStrings[32][32]; // Pre-formatted display strings
|
||||
tsl::Color tempColors[7]; // Pre-computed temperature colors
|
||||
};
|
||||
4118
Source/hoc-clk/overlay/src/ui/gui/cat.h
Normal file
4118
Source/hoc-clk/overlay/src/ui/gui/cat.h
Normal file
File diff suppressed because it is too large
Load Diff
84
Source/hoc-clk/overlay/src/ui/gui/fatal_gui.cpp
Normal file
84
Source/hoc-clk/overlay/src/ui/gui/fatal_gui.cpp
Normal file
@@ -0,0 +1,84 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
* "THE BEER-WARE LICENSE" (Revision 42):
|
||||
* <p-sam@d3vs.net>, <natinusala@gmail.com>, <m4x@m4xw.net>
|
||||
* 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 "fatal_gui.h"
|
||||
|
||||
FatalGui::FatalGui(const std::string message, const std::string info)
|
||||
{
|
||||
this->message = message;
|
||||
this->info = info;
|
||||
}
|
||||
|
||||
void FatalGui::openWithResultCode(std::string tag, Result rc)
|
||||
{
|
||||
char rcStr[32];
|
||||
std::string info = tag;
|
||||
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 hoc-clk sysmodule.\n\n"
|
||||
"\n"
|
||||
"Please make sure everything is\n\n"
|
||||
"correctly installed and enabled.",
|
||||
info
|
||||
);
|
||||
}
|
||||
|
||||
tsl::elm::Element* FatalGui::baseUI()
|
||||
{
|
||||
tsl::elm::CustomDrawer* drawer = new tsl::elm::CustomDrawer([this](tsl::gfx::Renderer* renderer, u16 x, u16 y, u16 w, u16 h) {
|
||||
renderer->drawString("\uE150", false, 40, 210, 40, TEXT_COLOR);
|
||||
renderer->drawString("Fatal error", false, 100, 210, 30, TEXT_COLOR);
|
||||
|
||||
std::uint32_t txtY = 255;
|
||||
if(!this->message.empty())
|
||||
{
|
||||
txtY += renderer->drawString(this->message.c_str(), false, 40, txtY, 23, TEXT_COLOR).second;
|
||||
txtY += 55;
|
||||
}
|
||||
|
||||
if(!this->info.empty())
|
||||
{
|
||||
renderer->drawString(this->info.c_str(), false, 40, txtY, 18, DESC_COLOR);
|
||||
}
|
||||
});
|
||||
|
||||
return drawer;
|
||||
}
|
||||
|
||||
bool FatalGui::handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState joyStickPosLeft, HidAnalogStickState joyStickPosRight)
|
||||
{
|
||||
if((keysDown & HidNpadButton_A) == HidNpadButton_A || (keysDown & HidNpadButton_B) == HidNpadButton_B)
|
||||
{
|
||||
while(tsl::Overlay::get()->getCurrentGui() != nullptr) {
|
||||
tsl::goBack();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
46
Source/hoc-clk/overlay/src/ui/gui/fatal_gui.h
Normal file
46
Source/hoc-clk/overlay/src/ui/gui/fatal_gui.h
Normal file
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
* "THE BEER-WARE LICENSE" (Revision 42):
|
||||
* <p-sam@d3vs.net>, <natinusala@gmail.com>, <m4x@m4xw.net>
|
||||
* 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 <list>
|
||||
|
||||
#include "base_gui.h"
|
||||
|
||||
class FatalGui : public BaseGui
|
||||
{
|
||||
protected:
|
||||
std::string message;
|
||||
std::string info;
|
||||
|
||||
public:
|
||||
FatalGui(const std::string message, const std::string info);
|
||||
~FatalGui() {}
|
||||
tsl::elm::Element* baseUI() override;
|
||||
bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState joyStickPosLeft, HidAnalogStickState joyStickPosRight);
|
||||
static void openWithResultCode(std::string tag, Result rc);
|
||||
};
|
||||
219
Source/hoc-clk/overlay/src/ui/gui/freq_choice_gui.cpp
Normal file
219
Source/hoc-clk/overlay/src/ui/gui/freq_choice_gui.cpp
Normal file
@@ -0,0 +1,219 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
* "THE BEER-WARE LICENSE" (Revision 42):
|
||||
* <p-sam@d3vs.net>, <natinusala@gmail.com>, <m4x@m4xw.net>
|
||||
* 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 "freq_choice_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,
|
||||
bool checkMax,
|
||||
std::map<uint32_t, std::string> labels)
|
||||
{
|
||||
this->selectedHz = selectedHz;
|
||||
this->hzList = hzList;
|
||||
this->hzCount = hzCount;
|
||||
this->module = module;
|
||||
this->listener = listener;
|
||||
this->checkMax = checkMax;
|
||||
this->labels = labels;
|
||||
this->configList = new SysClkConfigValueList {};
|
||||
}
|
||||
|
||||
FreqChoiceGui::~FreqChoiceGui()
|
||||
{
|
||||
delete this->configList;
|
||||
}
|
||||
|
||||
tsl::elm::ListItem* FreqChoiceGui::createFreqListItem(std::uint32_t hz, bool selected, int safety)
|
||||
{
|
||||
std::string text = formatListFreqHz(hz);
|
||||
|
||||
std::string rightText = "";
|
||||
auto it = labels.find(hz);
|
||||
if (it != labels.end())
|
||||
rightText = it->second;
|
||||
|
||||
if (selected)
|
||||
const_cast<std::string&>(rightText) = "\uE14B";
|
||||
|
||||
tsl::elm::ListItem* listItem =
|
||||
new tsl::elm::ListItem(text, rightText, 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;
|
||||
}
|
||||
|
||||
// Make annotation grey
|
||||
if (!rightText.empty() && !selected)
|
||||
listItem->setValueColor(tsl::Color(180, 180, 180, 255));
|
||||
else if(selected)
|
||||
listItem->setValueColor(tsl::infoTextColor);
|
||||
|
||||
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()
|
||||
{
|
||||
sysclkIpcGetConfigValues(this->configList);
|
||||
|
||||
// Header based on CPU/GPU/MEM module
|
||||
std::string moduleName = sysclkFormatModule(this->module, false);
|
||||
this->listElement->addItem(new tsl::elm::CategoryHeader(moduleName));
|
||||
|
||||
// Default option
|
||||
this->listElement->addItem(
|
||||
this->createFreqListItem(0, this->selectedHz == 0, 0));
|
||||
|
||||
for (std::uint32_t i = 0; i < this->hzCount; i++)
|
||||
{
|
||||
std::uint32_t hz = this->hzList[i];
|
||||
uint32_t mhz = hz / 1000000;
|
||||
|
||||
// if (checkMax && IsMariko()) {
|
||||
// if (moduleName == "cpu" &&
|
||||
// this->configList->values[HocClkConfigValue_MarikoMaxCpuClock] < mhz)
|
||||
// continue;
|
||||
|
||||
// // if (moduleName == "gpu" &&
|
||||
// // this->configList->values[HocClkConfigValue_MarikoMaxGpuClock] < mhz)
|
||||
// // continue;
|
||||
|
||||
// // if (moduleName == "mem" &&
|
||||
// // this->configList->values[HocClkConfigValue_MarikoMaxMemClock] < mhz)
|
||||
// // continue;
|
||||
|
||||
if (checkMax && IsErista())
|
||||
if (moduleName == "cpu" && this->configList->values[HocClkConfigValue_EristaMaxCpuClock] < mhz)
|
||||
continue;
|
||||
|
||||
// // if (moduleName == "gpu" &&
|
||||
// // this->configList->values[HocClkConfigValue_EristaMaxGpuClock] < mhz)
|
||||
// // continue;
|
||||
|
||||
// // if (moduleName == "mem" &&
|
||||
// // this->configList->values[HocClkConfigValue_EristaMaxMemClock] < mhz)
|
||||
// // continue;
|
||||
// }
|
||||
|
||||
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 = this->configList->values[KipConfigValue_marikoCpuUVHigh] ? 2398 : 1964;
|
||||
if(this->configList->values[KipConfigValue_marikoGpuUV] == 0) {
|
||||
unsafe_gpu = 1076;
|
||||
} else if (this->configList->values[KipConfigValue_marikoGpuUV] == 1) {
|
||||
unsafe_gpu = 1153;
|
||||
} else {
|
||||
unsafe_gpu = 1229;
|
||||
}
|
||||
danger_cpu = this->configList->values[KipConfigValue_marikoCpuUVHigh] ? 2500 : 2398;
|
||||
danger_gpu = 1306;
|
||||
}
|
||||
else
|
||||
{
|
||||
unsafe_cpu = this->configList->values[KipConfigValue_eristaCpuUV] ? 2092 : 1786;
|
||||
if(this->configList->values[KipConfigValue_eristaGpuUV] == 0) {
|
||||
unsafe_gpu = 922;
|
||||
} else {
|
||||
unsafe_gpu = 961;
|
||||
}
|
||||
danger_cpu = this->configList->values[KipConfigValue_eristaCpuUV] ? 2194 : 1964;
|
||||
danger_gpu = 999;
|
||||
}
|
||||
|
||||
int safety = 0;
|
||||
|
||||
if (moduleName == "cpu") {
|
||||
|
||||
if (mhz >= danger_cpu)
|
||||
safety = 2;
|
||||
else if (mhz >= unsafe_cpu)
|
||||
safety = 1;
|
||||
else
|
||||
safety = 0;
|
||||
|
||||
} else if (moduleName == "gpu") {
|
||||
|
||||
if (mhz >= danger_gpu)
|
||||
safety = 2;
|
||||
else if (mhz >= unsafe_gpu)
|
||||
safety = 1;
|
||||
else
|
||||
safety = 0;
|
||||
|
||||
} else if (moduleName == "mem") {
|
||||
|
||||
safety = 0;
|
||||
|
||||
}
|
||||
|
||||
this->listElement->addItem(
|
||||
this->createFreqListItem(
|
||||
hz,
|
||||
(mhz == this->selectedHz / 1000000),
|
||||
safety
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
this->listElement->jumpToItem("", "");
|
||||
}
|
||||
64
Source/hoc-clk/overlay/src/ui/gui/freq_choice_gui.h
Normal file
64
Source/hoc-clk/overlay/src/ui/gui/freq_choice_gui.h
Normal file
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
* "THE BEER-WARE LICENSE" (Revision 42):
|
||||
* <p-sam@d3vs.net>, <natinusala@gmail.com>, <m4x@m4xw.net>
|
||||
* 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 <list>
|
||||
#include <functional>
|
||||
#include <map>
|
||||
#include "base_menu_gui.h"
|
||||
|
||||
using FreqChoiceListener = std::function<bool(std::uint32_t hz)>;
|
||||
|
||||
class FreqChoiceGui : public BaseMenuGui
|
||||
{
|
||||
protected:
|
||||
SysClkConfigValueList* configList;
|
||||
std::uint32_t selectedHz;
|
||||
std::uint32_t* hzList;
|
||||
std::uint32_t hzCount;
|
||||
SysClkModule module;
|
||||
FreqChoiceListener listener;
|
||||
bool checkMax;
|
||||
|
||||
std::map<uint32_t, std::string> labels;
|
||||
|
||||
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,
|
||||
bool checkMax = true,
|
||||
std::map<uint32_t, std::string> labels = {});
|
||||
|
||||
~FreqChoiceGui();
|
||||
|
||||
void listUI() override;
|
||||
};
|
||||
418
Source/hoc-clk/overlay/src/ui/gui/global_override_gui.cpp
Normal file
418
Source/hoc-clk/overlay/src/ui/gui/global_override_gui.cpp
Normal file
@@ -0,0 +1,418 @@
|
||||
/*
|
||||
*
|
||||
* Copyright (c) Souldbminer 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "../format.h"
|
||||
#include "fatal_gui.h"
|
||||
#include "global_override_gui.h"
|
||||
#include "value_choice_gui.h"
|
||||
#include "labels.h"
|
||||
|
||||
GlobalOverrideGui::GlobalOverrideGui()
|
||||
{
|
||||
for (std::uint16_t m = 0; m < SysClkModule_EnumMax; m++) {
|
||||
this->listItems[m] = nullptr;
|
||||
this->listHz[m] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void GlobalOverrideGui::openFreqChoiceGui(SysClkModule module)
|
||||
{
|
||||
std::uint32_t hzList[SYSCLK_FREQ_LIST_MAX];
|
||||
std::uint32_t hzCount;
|
||||
Result rc =
|
||||
sysclkIpcGetFreqList(module, &hzList[0], SYSCLK_FREQ_LIST_MAX, &hzCount);
|
||||
if (R_FAILED(rc)) {
|
||||
FatalGui::openWithResultCode("sysclkIpcGetFreqList", rc);
|
||||
return;
|
||||
}
|
||||
|
||||
std::map<uint32_t, std::string> labels = {};
|
||||
|
||||
if (module == SysClkModule_CPU) {
|
||||
bool isUsingUv = IsMariko() ? configList.values[KipConfigValue_marikoCpuUVHigh] : configList.values[KipConfigValue_eristaCpuUV];
|
||||
labels = IsMariko() ? (isUsingUv ? cpu_freq_label_m_uv : cpu_freq_label_m) : (isUsingUv ? cpu_freq_label_e_uv : cpu_freq_label_e);
|
||||
} else if (module == SysClkModule_GPU) {
|
||||
labels = IsMariko() ? *(marikoUV[configList.values[KipConfigValue_marikoGpuUV]]) : *(eristaUV[configList.values[KipConfigValue_eristaGpuUV]]);
|
||||
}
|
||||
tsl::changeTo<FreqChoiceGui>(
|
||||
this->context->overrideFreqs[module], hzList, hzCount, module,
|
||||
[this, module](std::uint32_t hz) {
|
||||
Result rc = sysclkIpcSetOverride(module, hz);
|
||||
if (R_FAILED(rc)) {
|
||||
FatalGui::openWithResultCode("sysclkIpcSetOverride", rc);
|
||||
return false;
|
||||
}
|
||||
|
||||
this->lastContextUpdate = armGetSystemTick();
|
||||
this->context->overrideFreqs[module] = hz;
|
||||
|
||||
return true;
|
||||
},
|
||||
true, labels
|
||||
);
|
||||
}
|
||||
|
||||
void GlobalOverrideGui::openValueChoiceGui(
|
||||
tsl::elm::ListItem* listItem,
|
||||
std::uint32_t currentValue,
|
||||
const ValueRange& range,
|
||||
const std::string& categoryName,
|
||||
ValueChoiceListener listener,
|
||||
const ValueThresholds& thresholds,
|
||||
bool enableThresholds,
|
||||
const std::map<std::uint32_t, std::string>& labels,
|
||||
const std::vector<NamedValue>& namedValues,
|
||||
bool showDefaultValue
|
||||
)
|
||||
{
|
||||
tsl::changeTo<ValueChoiceGui>(
|
||||
currentValue,
|
||||
range,
|
||||
categoryName,
|
||||
listener,
|
||||
thresholds,
|
||||
enableThresholds,
|
||||
labels,
|
||||
namedValues,
|
||||
showDefaultValue,
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
void GlobalOverrideGui::addModuleListItemValue(
|
||||
SysClkModule module,
|
||||
const std::string& categoryName,
|
||||
std::uint32_t min,
|
||||
std::uint32_t max,
|
||||
std::uint32_t step,
|
||||
const std::string& suffix,
|
||||
std::uint32_t divisor,
|
||||
int decimalPlaces,
|
||||
ValueThresholds thresholds,
|
||||
const std::vector<NamedValue>& namedValues,
|
||||
bool showDefaultValue
|
||||
)
|
||||
{
|
||||
bool hasNamedValues = !namedValues.empty();
|
||||
|
||||
if (!hasNamedValues) {
|
||||
this->customFormatModules[module] = std::make_tuple(suffix, divisor, decimalPlaces);
|
||||
}
|
||||
|
||||
tsl::elm::ListItem* listItem =
|
||||
new tsl::elm::ListItem(sysclkFormatModule(module, true));
|
||||
|
||||
listItem->setValue(FREQ_DEFAULT_TEXT);
|
||||
|
||||
listItem->setClickListener(
|
||||
[this,
|
||||
listItem,
|
||||
module,
|
||||
categoryName,
|
||||
min,
|
||||
max,
|
||||
step,
|
||||
suffix,
|
||||
divisor,
|
||||
decimalPlaces,
|
||||
thresholds,
|
||||
namedValues,
|
||||
hasNamedValues,
|
||||
showDefaultValue](u64 keys)
|
||||
{
|
||||
if ((keys & HidNpadButton_A) == HidNpadButton_A)
|
||||
{
|
||||
if (!this->context) {
|
||||
return false;
|
||||
}
|
||||
|
||||
std::uint32_t currentValue =
|
||||
this->context->overrideFreqs[module] * divisor;
|
||||
|
||||
ValueRange range(
|
||||
min,
|
||||
max,
|
||||
step,
|
||||
suffix,
|
||||
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) {
|
||||
for (const auto& namedValue : namedValues) {
|
||||
if (namedValue.value == value / divisor) {
|
||||
listItem->setValue(namedValue.name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
char buf[32];
|
||||
if (decimalPlaces > 0) {
|
||||
double displayValue = (double)value / divisor;
|
||||
snprintf(buf, sizeof(buf), "%.*f%s",
|
||||
decimalPlaces, displayValue, suffix.c_str());
|
||||
} else {
|
||||
snprintf(buf, sizeof(buf), "%u%s",
|
||||
value / divisor, suffix.c_str());
|
||||
}
|
||||
listItem->setValue(buf);
|
||||
}
|
||||
|
||||
Result rc =
|
||||
sysclkIpcSetOverride(module, this->context->overrideFreqs[module]);
|
||||
|
||||
if (R_FAILED(rc))
|
||||
{
|
||||
FatalGui::openWithResultCode(
|
||||
"sysclkIpcSetOverride", 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)
|
||||
{
|
||||
if (!this->context) {
|
||||
return false;
|
||||
}
|
||||
|
||||
this->context->overrideFreqs[module] = 0;
|
||||
this->listHz[module] = 0;
|
||||
listItem->setValue(FREQ_DEFAULT_TEXT);
|
||||
|
||||
Result rc = sysclkIpcSetOverride(module, 0);
|
||||
|
||||
if (R_FAILED(rc))
|
||||
{
|
||||
FatalGui::openWithResultCode("sysclkIpcSetOverride", rc);
|
||||
return false;
|
||||
}
|
||||
|
||||
this->lastContextUpdate = armGetSystemTick();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
this->listElement->addItem(listItem);
|
||||
this->listItems[module] = listItem;
|
||||
}
|
||||
|
||||
void GlobalOverrideGui::addModuleListItem(SysClkModule module)
|
||||
{
|
||||
tsl::elm::ListItem *listItem =
|
||||
new tsl::elm::ListItem(sysclkFormatModule(module, true));
|
||||
listItem->setValue(formatListFreqMHz(0));
|
||||
listItem->setClickListener([this, module](u64 keys) {
|
||||
if ((keys & HidNpadButton_A) == HidNpadButton_A) {
|
||||
this->openFreqChoiceGui(module);
|
||||
return true;
|
||||
} else if ((keys & HidNpadButton_Y) == HidNpadButton_Y) {
|
||||
Result rc = sysclkIpcSetOverride(module, 0);
|
||||
if (R_FAILED(rc)) {
|
||||
FatalGui::openWithResultCode("sysclkIpcSetOverride", rc);
|
||||
return false;
|
||||
}
|
||||
|
||||
this->lastContextUpdate = armGetSystemTick();
|
||||
this->context->overrideFreqs[module] = 0;
|
||||
this->listHz[module] = 0;
|
||||
|
||||
this->listItems[module]->setValue(formatListFreqHz(0));
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
this->listElement->addItem(listItem);
|
||||
this->listItems[module] = listItem;
|
||||
}
|
||||
|
||||
void GlobalOverrideGui::addModuleToggleItem(SysClkModule module)
|
||||
{
|
||||
const char *moduleName = sysclkFormatModule(module, true);
|
||||
bool isOn = this->listHz[module];
|
||||
|
||||
tsl::elm::ToggleListItem *toggle =
|
||||
new tsl::elm::ToggleListItem(moduleName, isOn);
|
||||
|
||||
toggle->setStateChangedListener([this, module, toggle](bool state) {
|
||||
Result rc = sysclkIpcSetOverride(module, state ? 1 : 0);
|
||||
if (R_FAILED(rc)) {
|
||||
FatalGui::openWithResultCode("sysclkIpcSetProfiles", rc);
|
||||
}
|
||||
this->lastContextUpdate = armGetSystemTick();
|
||||
this->context->overrideFreqs[module] = 0;
|
||||
this->listHz[module] = 0;
|
||||
});
|
||||
this->listElement->addItem(toggle);
|
||||
this->listItems[module] = toggle;
|
||||
}
|
||||
|
||||
class GovernorOverrideSubMenuGui : public BaseMenuGui {
|
||||
u32 packed;
|
||||
public:
|
||||
GovernorOverrideSubMenuGui(u32 initialPacked) : packed(initialPacked) {}
|
||||
|
||||
void listUI() override {
|
||||
Result rc = sysclkIpcGetConfigValues(&configList); // idk why this is needed, probably some refreshing issue
|
||||
if (R_FAILED(rc)) [[unlikely]] {
|
||||
FatalGui::openWithResultCode("sysclkIpcGetConfigValues", rc);
|
||||
return;
|
||||
}
|
||||
this->listElement->addItem(new tsl::elm::CategoryHeader("Governor"));
|
||||
|
||||
static constexpr struct { const char* label; int shift; } kAll[] = {
|
||||
{"CPU", 0}, {"GPU", 8}, {"VRR", 16}
|
||||
};
|
||||
int count = configList.values[HorizonOCConfigValue_OverwriteRefreshRate] ? 3 : 2;
|
||||
|
||||
for (int i = 0; i < count; i++) {
|
||||
u8 cur = (this->packed >> kAll[i].shift) & 0xFF;
|
||||
auto* bar = new tsl::elm::NamedStepTrackBar(
|
||||
"", {"Do Not Override", "Disabled", "Enabled"},
|
||||
true, kAll[i].label
|
||||
);
|
||||
bar->setProgress(cur);
|
||||
int shift = kAll[i].shift;
|
||||
bar->setValueChangedListener([this, shift](u8 value) {
|
||||
this->packed = (this->packed & ~(0xFFu << shift)) | ((u32)value << shift);
|
||||
Result rc = sysclkIpcSetOverride(HorizonOCModule_Governor, this->packed);
|
||||
if (R_FAILED(rc)) FatalGui::openWithResultCode("sysclkIpcSetOverride", rc);
|
||||
this->lastContextUpdate = armGetSystemTick();
|
||||
});
|
||||
this->listElement->addItem(bar);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
void GlobalOverrideGui::addGovernorSection() {
|
||||
auto* item = new tsl::elm::ListItem("Governor");
|
||||
item->setValue("\u2192"); // right arrow
|
||||
item->setClickListener([this](u64 keys) {
|
||||
if (keys & HidNpadButton_A) {
|
||||
u32 packed = this->context ? this->context->overrideFreqs[HorizonOCModule_Governor] : 0;
|
||||
tsl::changeTo<GovernorOverrideSubMenuGui>(packed);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
this->listElement->addItem(item);
|
||||
}
|
||||
|
||||
void GlobalOverrideGui::listUI()
|
||||
{
|
||||
BaseMenuGui::refresh(); // get latest context
|
||||
if(!this->context)
|
||||
return;
|
||||
|
||||
Result rc = sysclkIpcGetConfigValues(&configList); // idk why this is needed, probably some refreshing issue
|
||||
if (R_FAILED(rc)) [[unlikely]] {
|
||||
FatalGui::openWithResultCode("sysclkIpcGetConfigValues", rc);
|
||||
return;
|
||||
}
|
||||
|
||||
this->listElement->addItem(new tsl::elm::CategoryHeader(
|
||||
"Temporary Overrides " + ult::DIVIDER_SYMBOL + " \ue0e3 Reset"));
|
||||
this->addModuleListItem(SysClkModule_CPU);
|
||||
this->addModuleListItem(SysClkModule_GPU);
|
||||
this->addModuleListItem(SysClkModule_MEM);
|
||||
#if IS_MINIMAL == 0
|
||||
ValueThresholds lcdThresholds(60, 65);
|
||||
if(configList.values[HorizonOCConfigValue_OverwriteRefreshRate])
|
||||
this->addModuleListItemValue(HorizonOCModule_Display, "Display", IsAula() ? 45 : 40, configList.values[HorizonOCConfigValue_MaxDisplayClockH], this->context->isUsingRetroSuper ? 5 : 1, " Hz", 1, 0, lcdThresholds);
|
||||
#endif
|
||||
|
||||
this->addGovernorSection();
|
||||
}
|
||||
|
||||
void GlobalOverrideGui::refresh()
|
||||
{
|
||||
BaseMenuGui::refresh();
|
||||
|
||||
if (!this->context)
|
||||
return;
|
||||
|
||||
for (std::uint16_t m = 0; m < SysClkModule_EnumMax; m++) {
|
||||
if (m == HorizonOCModule_Governor) {
|
||||
this->listHz[m] = this->context->overrideFreqs[m];
|
||||
continue;
|
||||
}
|
||||
|
||||
if (this->listItems[m] != nullptr &&
|
||||
this->listHz[m] != this->context->overrideFreqs[m]) {
|
||||
|
||||
auto it = this->customFormatModules.find((SysClkModule)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",
|
||||
decimalPlaces, displayValue, suffix.c_str());
|
||||
} else {
|
||||
snprintf(buf, sizeof(buf), "%u%s",
|
||||
this->context->overrideFreqs[m] / divisor, suffix.c_str());
|
||||
}
|
||||
this->listItems[m]->setValue(buf);
|
||||
}
|
||||
} else {
|
||||
this->listItems[m]->setValue(
|
||||
formatListFreqHz(this->context->overrideFreqs[m]));
|
||||
}
|
||||
|
||||
this->listHz[m] = this->context->overrideFreqs[m];
|
||||
}
|
||||
}
|
||||
}
|
||||
74
Source/hoc-clk/overlay/src/ui/gui/global_override_gui.h
Normal file
74
Source/hoc-clk/overlay/src/ui/gui/global_override_gui.h
Normal file
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
* "THE BEER-WARE LICENSE" (Revision 42):
|
||||
* <p-sam@d3vs.net>, <natinusala@gmail.com>, <m4x@m4xw.net>
|
||||
* 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 "../../ipc.h"
|
||||
#include "base_menu_gui.h"
|
||||
#include "freq_choice_gui.h"
|
||||
#include <string>
|
||||
#include "value_choice_gui.h"
|
||||
class GlobalOverrideGui : public BaseMenuGui
|
||||
{
|
||||
protected:
|
||||
std::map<SysClkModule, std::tuple<std::string, std::uint32_t, int>> customFormatModules;
|
||||
tsl::elm::ListItem* listItems[SysClkModule_EnumMax];
|
||||
std::uint32_t listHz[SysClkModule_EnumMax];
|
||||
void openFreqChoiceGui(SysClkModule module);
|
||||
void addGovernorSection();
|
||||
void addModuleListItem(SysClkModule module);
|
||||
void addModuleToggleItem(SysClkModule module);
|
||||
void openValueChoiceGui(
|
||||
tsl::elm::ListItem* listItem,
|
||||
std::uint32_t currentValue,
|
||||
const ValueRange& range,
|
||||
const std::string& categoryName,
|
||||
ValueChoiceListener listener,
|
||||
const ValueThresholds& thresholds,
|
||||
bool enableThresholds,
|
||||
const std::map<std::uint32_t, std::string>& labels,
|
||||
const std::vector<NamedValue>& namedValues,
|
||||
bool showDefaultValue
|
||||
);
|
||||
void addModuleListItemValue(
|
||||
SysClkModule module,
|
||||
const std::string& categoryName,
|
||||
std::uint32_t min,
|
||||
std::uint32_t max,
|
||||
std::uint32_t step,
|
||||
const std::string& suffix,
|
||||
std::uint32_t divisor,
|
||||
int decimalPlaces,
|
||||
ValueThresholds thresholds = {},
|
||||
const std::vector<NamedValue>& namedValues = {},
|
||||
bool showDefaultValue = true
|
||||
);
|
||||
public:
|
||||
GlobalOverrideGui();
|
||||
~GlobalOverrideGui() {}
|
||||
void listUI() override;
|
||||
void refresh() override;
|
||||
void setModuleCustomFormat(SysClkModule module, const std::string& suffix, std::uint32_t divisor, int decimalPlaces);
|
||||
};
|
||||
134
Source/hoc-clk/overlay/src/ui/gui/labels.cpp
Normal file
134
Source/hoc-clk/overlay/src/ui/gui/labels.cpp
Normal file
@@ -0,0 +1,134 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <map>
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
|
||||
std::map<uint32_t, std::string> cpu_freq_label_m = {
|
||||
{612000000, "Sleep Mode"},
|
||||
{1020000000, "Stock"},
|
||||
{1224000000, "Dev OC"},
|
||||
{1785000000, "Boost Mode"},
|
||||
{1963000000, "Safe Max"},
|
||||
{2397000000, "Unsafe Max"},
|
||||
{2703000000, "Absolute Max"},
|
||||
};
|
||||
|
||||
std::map<uint32_t, std::string> cpu_freq_label_m_uv = {
|
||||
{612000000, "Sleep Mode"},
|
||||
{1020000000, "Stock"},
|
||||
{1224000000, "Dev OC"},
|
||||
{1785000000, "Boost Mode"},
|
||||
{2397000000, "Safe Max"},
|
||||
{2499000000, "Unsafe Max"},
|
||||
{2703000000, "Absolute Max"},
|
||||
};
|
||||
|
||||
std::map<uint32_t, std::string> cpu_freq_label_e = {
|
||||
{612000000, "Sleep Mode"},
|
||||
{1020000000, "Stock"},
|
||||
{1224000000, "Dev OC"},
|
||||
{1785000000, "Safe Max"},
|
||||
{2091000000, "Unsafe Max"},
|
||||
{2397000000, "Absolute Max"},
|
||||
};
|
||||
|
||||
std::map<uint32_t, std::string> cpu_freq_label_e_uv = {
|
||||
{612000000, "Sleep Mode"},
|
||||
{1020000000, "Stock"},
|
||||
{1224000000, "Dev OC"},
|
||||
{1785000000, "Boost Mode"},
|
||||
{2091000000, "Safe Max"},
|
||||
{2193000000, "Unsafe Max"},
|
||||
{2397000000, "Absolute Max"},
|
||||
};
|
||||
|
||||
|
||||
std::map<uint32_t, std::string> gpu_freq_label_e = {
|
||||
{76800000, "Boost Mode"},
|
||||
{307200000, "Handheld"},
|
||||
{345600000, "Handheld"},
|
||||
{384000000, "Handheld"},
|
||||
{422400000, "Handheld"},
|
||||
{460800000, "Handheld Safe Max"},
|
||||
{768000000, "Docked"},
|
||||
{921600000, "Safe Max"},
|
||||
{960000000, "Unsafe Max"},
|
||||
{1075200000, "Absolute Max"},
|
||||
};
|
||||
|
||||
std::map<uint32_t, std::string> gpu_freq_label_e_uv = {
|
||||
{76800000, "Boost Mode"},
|
||||
{307200000, "Handheld"},
|
||||
{345600000, "Handheld"},
|
||||
{384000000, "Handheld"},
|
||||
{422400000, "Handheld"},
|
||||
{460800000, "Handheld Safe Max"},
|
||||
{768000000, "Docked"},
|
||||
{960000000, "Safe Max"},
|
||||
{1075200000, "Absolute Max"},
|
||||
};
|
||||
|
||||
std::map<uint32_t, std::string> gpu_freq_label_m = {
|
||||
{76800000, "Boost Mode"},
|
||||
{307200000, "Handheld"},
|
||||
{384000000, "Handheld"},
|
||||
{460800000, "Handheld"},
|
||||
{614400000, "Handheld Safe Max"},
|
||||
{768000000, "Docked"},
|
||||
{1075200000, "Safe Max"},
|
||||
{1305600000, "Unsafe Max"},
|
||||
{1536000000, "Absolute Max"},
|
||||
};
|
||||
|
||||
std::map<uint32_t, std::string> gpu_freq_label_m_slt = {
|
||||
{76800000, "Boost Mode"},
|
||||
{307200000, "Handheld"},
|
||||
{384000000, "Handheld"},
|
||||
{460800000, "Handheld"},
|
||||
{614400000, "Handheld Safe Max"},
|
||||
{768000000, "Docked"},
|
||||
{1152200000, "Safe Max"},
|
||||
{1305600000, "Unsafe Max"},
|
||||
{1536000000, "Absolute Max"},
|
||||
};
|
||||
|
||||
std::map<uint32_t, std::string> gpu_freq_label_m_hiopt = {
|
||||
{76800000, "Boost Mode"},
|
||||
{307200000, "Handheld"},
|
||||
{384000000, "Handheld"},
|
||||
{460800000, "Handheld"},
|
||||
{614400000, "Handheld Safe Max"},
|
||||
{768000000, "Docked"},
|
||||
{1228800000, "Safe Max"},
|
||||
{1305600000, "Unsafe Max"},
|
||||
{1536000000, "Absolute Max"},
|
||||
};
|
||||
|
||||
std::map<uint32_t, std::string>* marikoUV[3] {
|
||||
&gpu_freq_label_m,
|
||||
&gpu_freq_label_m_slt,
|
||||
&gpu_freq_label_m_hiopt,
|
||||
};
|
||||
|
||||
|
||||
std::map<uint32_t, std::string>* eristaUV[3] {
|
||||
&gpu_freq_label_e,
|
||||
&gpu_freq_label_e_uv,
|
||||
&gpu_freq_label_e_uv,
|
||||
};
|
||||
34
Source/hoc-clk/overlay/src/ui/gui/labels.h
Normal file
34
Source/hoc-clk/overlay/src/ui/gui/labels.h
Normal file
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include <map>
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
|
||||
extern std::map<uint32_t, std::string> cpu_freq_label_m;
|
||||
extern std::map<uint32_t, std::string> cpu_freq_label_m_uv;
|
||||
extern std::map<uint32_t, std::string> cpu_freq_label_e;
|
||||
extern std::map<uint32_t, std::string> cpu_freq_label_e_uv;
|
||||
extern std::map<uint32_t, std::string> gpu_freq_label_m;
|
||||
extern std::map<uint32_t, std::string> gpu_freq_label_m_slt;
|
||||
extern std::map<uint32_t, std::string> gpu_freq_label_m_hiopt;
|
||||
extern std::map<uint32_t, std::string> gpu_freq_label_e;
|
||||
extern std::map<uint32_t, std::string> gpu_freq_label_e_uv;
|
||||
|
||||
extern std::map<uint32_t, std::string>* marikoUV[3];
|
||||
extern std::map<uint32_t, std::string>* eristaUV[3];
|
||||
123
Source/hoc-clk/overlay/src/ui/gui/main_gui.cpp
Normal file
123
Source/hoc-clk/overlay/src/ui/gui/main_gui.cpp
Normal file
@@ -0,0 +1,123 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
* "THE BEER-WARE LICENSE" (Revision 42):
|
||||
* <p-sam@d3vs.net>, <natinusala@gmail.com>, <m4x@m4xw.net>
|
||||
* 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 "main_gui.h"
|
||||
|
||||
#include "fatal_gui.h"
|
||||
#include "app_profile_gui.h"
|
||||
#include "global_override_gui.h"
|
||||
#include "misc_gui.h"
|
||||
#include "about_gui.h"
|
||||
|
||||
void MainGui::listUI()
|
||||
{
|
||||
// this->enabledToggle = new tsl::elm::ToggleListItem("Enable", false);
|
||||
// enabledToggle->setStateChangedListener([this](bool state) {
|
||||
// Result rc = sysclkIpcSetEnabled(state);
|
||||
// if(R_FAILED(rc))
|
||||
// {
|
||||
// FatalGui::openWithResultCode("sysclkIpcSetEnabled", rc);
|
||||
// }
|
||||
|
||||
// this->lastContextUpdate = armGetSystemTick();
|
||||
// this->context->enabled = state;
|
||||
// });
|
||||
// this->listElement->addItem(this->enabledToggle);
|
||||
|
||||
tsl::elm::ListItem* appProfileItem = new tsl::elm::ListItem("Edit App Profile");
|
||||
appProfileItem->setClickListener([this](u64 keys) {
|
||||
if((keys & HidNpadButton_A) == HidNpadButton_A && this->context)
|
||||
{
|
||||
AppProfileGui::changeTo(this->context->applicationId);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
this->listElement->addItem(appProfileItem);
|
||||
|
||||
|
||||
tsl::elm::ListItem* globalProfileItem = new tsl::elm::ListItem("Edit Global Profile");
|
||||
globalProfileItem->setClickListener([this](u64 keys) {
|
||||
if((keys & HidNpadButton_A) == HidNpadButton_A && this->context)
|
||||
{
|
||||
AppProfileGui::changeTo(SYSCLK_GLOBAL_PROFILE_TID);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
this->listElement->addItem(globalProfileItem);
|
||||
|
||||
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>();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
this->listElement->addItem(globalOverrideItem);
|
||||
|
||||
//this->listElement->addItem(new tsl::elm::CategoryHeader("Misc"));
|
||||
|
||||
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>();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
this->listElement->addItem(miscItem);
|
||||
|
||||
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>();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
this->listElement->addItem(aboutItem);
|
||||
|
||||
}
|
||||
|
||||
void MainGui::refresh()
|
||||
{
|
||||
BaseMenuGui::refresh();
|
||||
//if(this->context)
|
||||
//{
|
||||
// this->enabledToggle->setState(this->context->enabled);
|
||||
//}
|
||||
}
|
||||
39
Source/hoc-clk/overlay/src/ui/gui/main_gui.h
Normal file
39
Source/hoc-clk/overlay/src/ui/gui/main_gui.h
Normal file
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
* "THE BEER-WARE LICENSE" (Revision 42):
|
||||
* <p-sam@d3vs.net>, <natinusala@gmail.com>, <m4x@m4xw.net>
|
||||
* 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 "base_menu_gui.h"
|
||||
|
||||
class MainGui : public BaseMenuGui
|
||||
{
|
||||
public:
|
||||
MainGui() {}
|
||||
~MainGui() {}
|
||||
void listUI() override;
|
||||
void refresh() override;
|
||||
};
|
||||
1748
Source/hoc-clk/overlay/src/ui/gui/misc_gui.cpp
Normal file
1748
Source/hoc-clk/overlay/src/ui/gui/misc_gui.cpp
Normal file
File diff suppressed because it is too large
Load Diff
72
Source/hoc-clk/overlay/src/ui/gui/misc_gui.h
Normal file
72
Source/hoc-clk/overlay/src/ui/gui/misc_gui.h
Normal file
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
#include "../../ipc.h"
|
||||
#include "base_menu_gui.h"
|
||||
#include <set>
|
||||
#include <unordered_map>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "freq_choice_gui.h"
|
||||
#include "value_choice_gui.h"
|
||||
class MiscGui : public BaseMenuGui
|
||||
{
|
||||
public:
|
||||
MiscGui();
|
||||
~MiscGui();
|
||||
void listUI() override;
|
||||
void refresh() override;
|
||||
|
||||
protected:
|
||||
SysClkConfigValueList* configList;
|
||||
std::map<SysClkConfigValue, tsl::elm::ListItem*> configButtons;
|
||||
std::map<SysClkConfigValue, ValueRange> configRanges;
|
||||
std::map<SysClkConfigValue, std::vector<NamedValue>> configNamedValues;
|
||||
std::map<SysClkConfigValue, tsl::elm::ToggleListItem*> configToggles;
|
||||
std::map<SysClkConfigValue, std::tuple<tsl::elm::TrackBar*, tsl::elm::ListItem*, std::vector<uint64_t>>> configTrackbars;
|
||||
std::set<SysClkConfigValue> configButtonSKeys;
|
||||
std::map<SysClkConfigValue, std::string> configButtonSSubtext;
|
||||
|
||||
void addConfigToggle(SysClkConfigValue configVal, const char* altName);
|
||||
void addConfigButton(SysClkConfigValue configVal,
|
||||
const char* altName,
|
||||
const ValueRange& range,
|
||||
const std::string& categoryName,
|
||||
const ValueThresholds* thresholds,
|
||||
const std::map<uint32_t, std::string>& labels = {},
|
||||
const std::vector<NamedValue>& namedValues = {},
|
||||
bool showDefaultValue = true);
|
||||
|
||||
void addConfigButtonS(SysClkConfigValue configVal,
|
||||
const char* altName,
|
||||
const ValueRange& range,
|
||||
const std::string& categoryName,
|
||||
const ValueThresholds* thresholds,
|
||||
const std::map<uint32_t, std::string>& labels = {},
|
||||
const std::vector<NamedValue>& namedValues = {},
|
||||
bool showDefaultValue = true,
|
||||
const char* subText = nullptr);
|
||||
void addFreqButton(SysClkConfigValue configVal,
|
||||
const char* altName,
|
||||
SysClkModule module,
|
||||
const std::map<uint32_t, std::string>& labels = {});
|
||||
void updateConfigToggles();
|
||||
|
||||
tsl::elm::ToggleListItem* enabledToggle;
|
||||
u8 frameCounter = 60;
|
||||
};
|
||||
126
Source/hoc-clk/overlay/src/ui/gui/ult_ext.h
Normal file
126
Source/hoc-clk/overlay/src/ui/gui/ult_ext.h
Normal file
@@ -0,0 +1,126 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include <tesla.hpp>
|
||||
|
||||
class ImageElement : public tsl::elm::ListItem {
|
||||
private:
|
||||
const uint8_t* imgData;
|
||||
uint32_t imgWidth, imgHeight;
|
||||
bool visible;
|
||||
|
||||
public:
|
||||
ImageElement(const uint8_t* data, uint32_t w, uint32_t h)
|
||||
: tsl::elm::ListItem(""), imgData(data), imgWidth(w), imgHeight(h), visible(true) {}
|
||||
|
||||
void setVisible(bool v) {
|
||||
visible = v;
|
||||
}
|
||||
|
||||
virtual void draw(tsl::gfx::Renderer *renderer) override {
|
||||
if (!visible) return;
|
||||
|
||||
// Draw image centered horizontally
|
||||
u16 centerX = this->getX() + (this->getWidth() - imgWidth) / 2;
|
||||
renderer->drawBitmap(
|
||||
centerX,
|
||||
this->getY() + 10,
|
||||
imgWidth,
|
||||
imgHeight,
|
||||
imgData
|
||||
);
|
||||
}
|
||||
|
||||
virtual void layout(u16 parentX, u16 parentY, u16 parentWidth, u16 parentHeight) override {
|
||||
if (!visible) {
|
||||
// Take up no space when hidden
|
||||
this->setBoundaries(parentX, parentY, 0, 0);
|
||||
} else {
|
||||
// Normal layout when visible
|
||||
tsl::elm::ListItem::layout(parentX, parentY, parentWidth, parentHeight);
|
||||
}
|
||||
}
|
||||
|
||||
virtual void drawHighlight(tsl::gfx::Renderer *renderer) override {
|
||||
// Do nothing - no highlight
|
||||
}
|
||||
|
||||
virtual bool onClick(u64 keys) override {
|
||||
return false; // Non-clickable
|
||||
}
|
||||
|
||||
virtual Element* requestFocus(Element *oldFocus, tsl::FocusDirection direction) override {
|
||||
return nullptr; // Make it non-focusable
|
||||
}
|
||||
};
|
||||
|
||||
class HideableCategoryHeader : public tsl::elm::CategoryHeader {
|
||||
private:
|
||||
bool visible;
|
||||
|
||||
public:
|
||||
HideableCategoryHeader(const std::string& title)
|
||||
: tsl::elm::CategoryHeader(title), visible(true) {}
|
||||
|
||||
void setVisible(bool v) {
|
||||
visible = v;
|
||||
}
|
||||
|
||||
virtual void draw(tsl::gfx::Renderer *renderer) override {
|
||||
if (!visible) return;
|
||||
tsl::elm::CategoryHeader::draw(renderer);
|
||||
}
|
||||
|
||||
virtual void layout(u16 parentX, u16 parentY, u16 parentWidth, u16 parentHeight) override {
|
||||
if (!visible) {
|
||||
this->setBoundaries(parentX, parentY, 0, 0);
|
||||
} else {
|
||||
tsl::elm::CategoryHeader::layout(parentX, parentY, parentWidth, parentHeight);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class HideableCustomDrawer : public tsl::elm::Element {
|
||||
private:
|
||||
bool visible;
|
||||
u32 height;
|
||||
|
||||
public:
|
||||
HideableCustomDrawer(u32 h)
|
||||
: Element(), visible(true), height(h) {}
|
||||
|
||||
void setVisible(bool v) {
|
||||
visible = v;
|
||||
}
|
||||
|
||||
virtual void draw(tsl::gfx::Renderer *renderer) override {
|
||||
// Empty drawer - just for spacing
|
||||
}
|
||||
|
||||
virtual void layout(u16 parentX, u16 parentY, u16 parentWidth, u16 parentHeight) override {
|
||||
if (!visible) {
|
||||
this->setBoundaries(parentX, parentY, 0, 0);
|
||||
} else {
|
||||
this->setBoundaries(parentX, parentY, parentWidth, height);
|
||||
}
|
||||
}
|
||||
|
||||
virtual Element* requestFocus(Element *oldFocus, tsl::FocusDirection direction) override {
|
||||
return nullptr;
|
||||
}
|
||||
};
|
||||
200
Source/hoc-clk/overlay/src/ui/gui/value_choice_gui.cpp
Normal file
200
Source/hoc-clk/overlay/src/ui/gui/value_choice_gui.cpp
Normal file
@@ -0,0 +1,200 @@
|
||||
|
||||
/*
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
#include "value_choice_gui.h"
|
||||
#include "../format.h"
|
||||
#include "fatal_gui.h"
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
|
||||
ValueChoiceGui::ValueChoiceGui(std::uint32_t selectedValue,
|
||||
const ValueRange& range,
|
||||
const std::string& categoryName,
|
||||
ValueChoiceListener listener,
|
||||
const ValueThresholds& thresholds,
|
||||
bool enableThresholds,
|
||||
std::map<std::uint32_t, std::string> labels,
|
||||
std::vector<NamedValue> namedValues,
|
||||
bool showDefaultValue,
|
||||
bool showDNO)
|
||||
: selectedValue(selectedValue),
|
||||
range(range),
|
||||
categoryName(categoryName),
|
||||
listener(listener),
|
||||
thresholds(thresholds),
|
||||
enableThresholds(enableThresholds),
|
||||
labels(labels),
|
||||
namedValues(namedValues),
|
||||
showDefaultValue(showDefaultValue),
|
||||
showDNO(showDNO)
|
||||
{
|
||||
}
|
||||
|
||||
ValueChoiceGui::~ValueChoiceGui()
|
||||
{
|
||||
}
|
||||
|
||||
std::string ValueChoiceGui::formatValue(std::uint32_t value)
|
||||
{
|
||||
std::ostringstream oss;
|
||||
if(showDefaultValue) {
|
||||
if (value == 0) {
|
||||
return this->showDNO ? FREQ_DEFAULT_TEXT : VALUE_DEFAULT_TEXT;
|
||||
}
|
||||
}
|
||||
double displayValue = static_cast<double>(value) / static_cast<double>(range.divisor);
|
||||
oss << std::fixed << std::setprecision(range.decimalPlaces) << displayValue;
|
||||
if (!range.suffix.empty()) {
|
||||
oss << " " << range.suffix;
|
||||
}
|
||||
return oss.str();
|
||||
}
|
||||
|
||||
int ValueChoiceGui::getSafetyLevel(std::uint32_t value)
|
||||
{
|
||||
if(thresholds.warning == 0 && thresholds.danger == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (value > thresholds.danger) {
|
||||
return 2;
|
||||
}
|
||||
if (value > thresholds.warning) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
tsl::elm::ListItem* ValueChoiceGui::createValueListItem(std::uint32_t value, bool selected, int safety)
|
||||
{
|
||||
std::string text = formatValue(value);
|
||||
std::string rightText = "";
|
||||
|
||||
auto it = labels.find(value);
|
||||
if (it != labels.end()) {
|
||||
rightText = it->second;
|
||||
}
|
||||
|
||||
if (selected) {
|
||||
const_cast<std::string&>(rightText) = "\uE14B";
|
||||
}
|
||||
|
||||
tsl::elm::ListItem* listItem = new tsl::elm::ListItem(text, rightText, 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;
|
||||
}
|
||||
|
||||
// Make annotation grey
|
||||
if (!rightText.empty() && !selected)
|
||||
listItem->setValueColor(tsl::Color(180, 180, 180, 255));
|
||||
else if(selected)
|
||||
listItem->setValueColor(tsl::infoTextColor);
|
||||
|
||||
listItem->setClickListener([this, value](u64 keys)
|
||||
{
|
||||
if ((keys & HidNpadButton_A) == HidNpadButton_A && this->listener) {
|
||||
if (this->listener(value)) {
|
||||
tsl::goBack();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
return listItem;
|
||||
}
|
||||
|
||||
tsl::elm::ListItem* ValueChoiceGui::createNamedValueListItem(const NamedValue& namedValue, bool selected, int safety)
|
||||
{
|
||||
std::string text = namedValue.name;
|
||||
if (selected) {
|
||||
const_cast<std::string&>(namedValue.rightText) = "\uE14B";
|
||||
}
|
||||
|
||||
tsl::elm::ListItem* listItem = new tsl::elm::ListItem(text, namedValue.rightText, 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;
|
||||
}
|
||||
|
||||
if (!namedValue.rightText.empty() && !selected)
|
||||
listItem->setValueColor(tsl::Color(180, 180, 180, 255));
|
||||
else if(selected)
|
||||
listItem->setValueColor(tsl::infoTextColor);
|
||||
|
||||
listItem->setClickListener([this, value = namedValue.value](u64 keys)
|
||||
{
|
||||
if ((keys & HidNpadButton_A) == HidNpadButton_A && this->listener) {
|
||||
if (this->listener(value)) {
|
||||
tsl::goBack();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
return listItem;
|
||||
}
|
||||
|
||||
void ValueChoiceGui::listUI()
|
||||
{
|
||||
if (!categoryName.empty()) {
|
||||
this->listElement->addItem(new tsl::elm::CategoryHeader(categoryName));
|
||||
}
|
||||
|
||||
if (showDefaultValue) {
|
||||
this->listElement->addItem(this->createValueListItem(0, this->selectedValue == 0, 0));
|
||||
}
|
||||
for (const auto& namedValue : namedValues) {
|
||||
int safety = enableThresholds ? getSafetyLevel(namedValue.value) : 0;
|
||||
bool selected = (namedValue.value == this->selectedValue);
|
||||
this->listElement->addItem(this->createNamedValueListItem(namedValue, selected, safety));
|
||||
}
|
||||
|
||||
if (namedValues.empty()) {
|
||||
for (std::uint32_t value = range.min; value <= range.max; value += range.step)
|
||||
{
|
||||
int safety = getSafetyLevel(value);
|
||||
bool selected = (value == this->selectedValue);
|
||||
this->listElement->addItem(this->createValueListItem(value, selected, safety));
|
||||
}
|
||||
}
|
||||
|
||||
this->listElement->jumpToItem("", "\uE14B");
|
||||
}
|
||||
114
Source/hoc-clk/overlay/src/ui/gui/value_choice_gui.h
Normal file
114
Source/hoc-clk/overlay/src/ui/gui/value_choice_gui.h
Normal file
@@ -0,0 +1,114 @@
|
||||
|
||||
/*
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
#include <list>
|
||||
#include <functional>
|
||||
#include <string>
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include "base_menu_gui.h"
|
||||
|
||||
using ValueChoiceListener = std::function<bool(std::uint32_t value)>;
|
||||
#define VALUE_DEFAULT_TEXT "Default"
|
||||
|
||||
struct ValueRange {
|
||||
std::uint32_t min;
|
||||
std::uint32_t max;
|
||||
std::uint32_t step;
|
||||
std::string suffix;
|
||||
std::uint32_t divisor;
|
||||
int decimalPlaces;
|
||||
ValueRange()
|
||||
: min(0), max(0), step(1), suffix(""), divisor(1), decimalPlaces(0) {}
|
||||
ValueRange(std::uint32_t min, std::uint32_t max, std::uint32_t step,
|
||||
const std::string& suffix = "", std::uint32_t divisor = 1, int decimalPlaces = 0)
|
||||
: min(min), max(max), step(step), suffix(suffix),
|
||||
divisor(divisor), decimalPlaces(decimalPlaces) {}
|
||||
};
|
||||
|
||||
struct ValueThresholds {
|
||||
std::uint32_t warning;
|
||||
std::uint32_t danger;
|
||||
ValueThresholds(std::uint32_t warning = 0, std::uint32_t danger = 0)
|
||||
: warning(warning), danger(danger) {}
|
||||
};
|
||||
|
||||
struct NamedValue {
|
||||
std::string name;
|
||||
std::uint32_t value;
|
||||
std::string rightText;
|
||||
|
||||
NamedValue(const std::string& name, std::uint32_t value, const std::string& rightText = "")
|
||||
: name(name), value(value), rightText(rightText) {}
|
||||
};
|
||||
|
||||
class ValueChoiceGui : public BaseMenuGui
|
||||
{
|
||||
protected:
|
||||
std::uint32_t selectedValue;
|
||||
ValueRange range;
|
||||
std::string categoryName;
|
||||
ValueChoiceListener listener;
|
||||
ValueThresholds thresholds;
|
||||
bool enableThresholds;
|
||||
std::map<std::uint32_t, std::string> labels;
|
||||
|
||||
std::vector<NamedValue> namedValues;
|
||||
bool showDefaultValue = true;
|
||||
bool showDNO = false;
|
||||
tsl::elm::ListItem* createValueListItem(std::uint32_t value, bool selected, int safety);
|
||||
tsl::elm::ListItem* createNamedValueListItem(const NamedValue& namedValue, bool selected, int safety);
|
||||
std::string formatValue(std::uint32_t value);
|
||||
int getSafetyLevel(std::uint32_t value);
|
||||
|
||||
public:
|
||||
ValueChoiceGui(std::uint32_t selectedValue,
|
||||
const ValueRange& range,
|
||||
const std::string& categoryName,
|
||||
ValueChoiceListener listener,
|
||||
const ValueThresholds& thresholds = ValueThresholds(),
|
||||
bool enableThresholds = false,
|
||||
std::map<std::uint32_t, std::string> labels = {},
|
||||
std::vector<NamedValue> namedValues = {},
|
||||
bool showDefaultValue = true,
|
||||
bool showDNO = false);
|
||||
~ValueChoiceGui();
|
||||
|
||||
void addNamedValue(const std::string& name, std::uint32_t value, const std::string& rightText = "")
|
||||
{
|
||||
namedValues.emplace_back(name, value, rightText);
|
||||
}
|
||||
|
||||
void addNamedValues(const std::vector<NamedValue>& values)
|
||||
{
|
||||
namedValues.insert(namedValues.end(), values.begin(), values.end());
|
||||
}
|
||||
|
||||
void clearNamedValues()
|
||||
{
|
||||
namedValues.clear();
|
||||
}
|
||||
|
||||
void setShowDefaultValue(bool show)
|
||||
{
|
||||
showDefaultValue = show;
|
||||
}
|
||||
|
||||
void listUI() override;
|
||||
};
|
||||
37
Source/hoc-clk/overlay/src/ui/style.h
Normal file
37
Source/hoc-clk/overlay/src/ui/style.h
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
* "THE BEER-WARE LICENSE" (Revision 42):
|
||||
* <p-sam@d3vs.net>, <natinusala@gmail.com>, <m4x@m4xw.net>
|
||||
* 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 <tesla.hpp>
|
||||
|
||||
#define TEXT_COLOR tsl::gfx::Renderer::a(0xFFFF)
|
||||
#define DESC_COLOR tsl::gfx::Renderer::a({ 0xC, 0xC, 0xC, 0xF })
|
||||
#define VALUE_COLOR tsl::gfx::Renderer::a({ 0x5, 0xC, 0xA, 0xF })
|
||||
#define SMALL_TEXT_SIZE 15
|
||||
#define LABEL_SPACING 7
|
||||
#define LABEL_FONT_SIZE 15
|
||||
2
Source/hoc-clk/sysmodule/.gitignore
vendored
Normal file
2
Source/hoc-clk/sysmodule/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/out
|
||||
/build
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user