configurator: update and modularize
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Source/Configurator/src/__pycache__/settings.cpython-313.pyc
Normal file
BIN
Source/Configurator/src/__pycache__/settings.cpython-313.pyc
Normal file
Binary file not shown.
@@ -24,28 +24,20 @@ import dearpygui.dearpygui as dpg
|
||||
import common
|
||||
import kip as k
|
||||
import gpu as g
|
||||
import settings as s
|
||||
def populate():
|
||||
freqs_hz_cpu = [
|
||||
1020000, 1122000, 1224000, 1326000, 1428000, 1581000, 1683000,
|
||||
1785000, 1887000, 1963500, 2091000, 2193000, 2295000, 2397000,
|
||||
2499000, 2601000, 2703000, 2805000, 2907000
|
||||
]
|
||||
freqs_mhz_cpu = [
|
||||
1020.0, 1122.0, 1224.0, 1326.0, 1428.0, 1581.0, 1683.0,
|
||||
1785.0, 1887.0, 1963.5, 2091.0, 2193.0, 2295.0, 2397.0,
|
||||
2499.0, 2601.0, 2703.0, 2805.0, 2907.0
|
||||
]
|
||||
freqs_mhz_cpu_label = [f"{f} MHz" for f in freqs_mhz_cpu]
|
||||
|
||||
freqs_mhz_cpu_label = [f"{f} MHz" for f in s.freqs_mhz_cpu]
|
||||
offsets = list(range(0, 101, 5))
|
||||
processed_offsets = ["Disabled" if v == 0 else f"-{v}mV" for v in offsets]
|
||||
voltages = [0] + list(range(1000, 1160 + 1, 5)) # 0 first for Disabled
|
||||
voltages = [0] + list(range(1000, 1160 + 1, s.mariko_voltage_step)) # 0 first for Disabled
|
||||
processed_voltages = ["Disabled" if v == 0 else f"{v}mV" for v in voltages]
|
||||
processed_voltages_default = ["Default" if v == 0 else f"{v}mV" for v in voltages]
|
||||
voltages_e = [0] + list(range(1120, 1255 + 1, 5)) + [1257] # 0 first for Disabled
|
||||
voltages_e = [0] + list(range(1120, 1255 + 1, s.mariko_voltage_step)) + [1257] # 0 first for Disabled
|
||||
processed_voltages_e = ["Disabled" if v == 0 else f"{v}mV" for v in voltages_e]
|
||||
processed_voltages_default_e = ["Default" if v == 0 else f"{v}mV" for v in voltages_e]
|
||||
|
||||
vmin_voltages = list(range(500, 700 + 1, 5)) # 0 first for Disabled
|
||||
vmin_voltages = list(range(s.mariko_cpu_min_vmin, s.mariko_cpu_max_vmin + 1, s.mariko_voltage_step)) # 0 first for Disabled
|
||||
vmin_processed_voltages = ["Disabled" if v == 0 else f"{v}mV" for v in vmin_voltages]
|
||||
|
||||
dpg.add_separator(label="Frequencies")
|
||||
|
||||
@@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""
|
||||
|
||||
|
||||
class Defaults:
|
||||
class Defaults: # This almost always never needs to be updated as pulling from the kip takes priority
|
||||
def __init__(self):
|
||||
self.autosave = 0
|
||||
self.custrev = 0
|
||||
|
||||
@@ -25,6 +25,7 @@ import kip as k
|
||||
import common
|
||||
from pathlib import Path
|
||||
import ini
|
||||
import settings as s
|
||||
|
||||
def unimplemented():
|
||||
pass
|
||||
@@ -58,33 +59,19 @@ def toggle_gpu_sched(sender, app_data):
|
||||
common.show_popup("Success", f"Set GPU Scheduling to {app_data}")
|
||||
|
||||
def populate():
|
||||
offsets = list(range(0, 51, 5))
|
||||
offsets = list(range(0, s.mariko_gpu_offset_max + 1, s.mariko_voltage_step))
|
||||
processed_offsets = ["Disabled" if v == 0 else f"-{v} mV" for v in offsets]
|
||||
voltages = [0] + list(range(480, 960 + 1, 5)) # 0 first for Disabled
|
||||
voltages = [0] + list(range(s.mariko_gpu_min_volt, s.mariko_gpu_max_volt + 1, s.mariko_voltage_step)) # 0 first for Disabled
|
||||
processed_voltages = ["Disabled" if v == 0 else f"{v} mV" for v in voltages]
|
||||
voltages_e = [0] + list(range(700, 1100 + 1, 5)) # 0 first for Disabled
|
||||
voltages_e = [0] + list(range(s.erista_gpu_min_volt, s.erista_gpu_max_volt + 1, s.mariko_voltage_step)) # 0 first for Disabled
|
||||
processed_voltages_e = ["Disabled" if v == 0 else f"{v} mV" for v in voltages_e]
|
||||
processed_voltages_default = ["Default" if v == 0 else f"{v} mV" for v in voltages]
|
||||
voltages_vmin = [0] + list(range(480, 650 + 1, 5)) # 0 first for Disabled
|
||||
voltages_vmin = [0] + list(range(s.mariko_gpu_min_volt, s.mariko_gpu_max_vmin + 1, s.mariko_voltage_step)) # 0 first for Disabled
|
||||
processed_voltages_vmin = ["Disabled" if v == 0 else f"{v} mV" for v in voltages_vmin]
|
||||
voltages_vmin_e = [0] + list(range(700, 850 + 1, 5)) # 0 first for Disabled
|
||||
voltages_vmin_e = [0] + list(range(s.erista_gpu_min_volt, s.erista_gpu_max_vmin + 1, s.mariko_voltage_step)) # 0 first for Disabled
|
||||
processed_voltages_vmin_e = ["Disabled" if v == 0 else f"{v} mV" for v in voltages_vmin_e]
|
||||
|
||||
freqs_khz = [
|
||||
76800, 153600, 230400, 307200, 384000, 460800, 537600, 614400, 691200, 768000,
|
||||
844800, 921600, 998400, 1075200, 1152000, 1228800, 1267200, 1305600, 1344000, 1382400, 1420800,
|
||||
1459200, 1497600, 1536000
|
||||
]
|
||||
freqs_khz_e = [
|
||||
76800, 153600, 230400, 307200, 384000, 460800, 537600, 614400, 691200, 768000,
|
||||
844800, 921600, 998400, 1075200 #, 1152000, 1228800 # Disabled by default as these freqs can cause board damage
|
||||
]
|
||||
freqs_mhz = [
|
||||
76.8, 153.6, 230.4, 307.2, 384.0, 460.8, 537.6, 614.4, 691.2, 768.0,
|
||||
844.8, 921.6, 998.4, 1075.2, 1152.0, 1228.8, 1267.2, 1305.6, 1344.0, 1382.4,
|
||||
1420.8, 1459.2, 1497.6, 1536.0
|
||||
]
|
||||
freqs_mhz_label = [f"{f} MHz" for f in freqs_mhz]
|
||||
freqs_mhz_label = [f"{f} MHz" for f in s.freqs_mhz]
|
||||
|
||||
dpg.add_separator(label="Frequencies")
|
||||
|
||||
@@ -182,51 +169,67 @@ def populate():
|
||||
|
||||
dpg.add_separator(label="Custom Table (Mariko)")
|
||||
|
||||
for freq in freqs_khz:
|
||||
if(freq > 1535000):
|
||||
for freq in s.freqs_khz:
|
||||
if(freq > s.mariko_meme_threshold):
|
||||
mhz_color = s.danger_color
|
||||
mhz_label = f"{freq / 1000:.1f} MHz"
|
||||
elif(freq > 1382400):
|
||||
mhz_label = f"{freq / 1000:.1f} MHz (DANGEROUS)"
|
||||
elif(freq > 1152000):
|
||||
mhz_label = f"{freq / 1000:.1f} MHz (UNSAFE)"
|
||||
safety_label = ""
|
||||
elif(freq > s.mariko_dangerous_gpu_threshold):
|
||||
mhz_color = s.danger_color
|
||||
mhz_label = f"{freq / 1000:.1f} MHz"
|
||||
safety_label = "(DANGEROUS)"
|
||||
elif(freq > s.mariko_unsafe_gpu_threshold):
|
||||
mhz_color = s.unsafe_color
|
||||
mhz_label = f"{freq / 1000:.1f} MHz"
|
||||
safety_label = "(UNSAFE)"
|
||||
else:
|
||||
mhz_label = f"{freq / 1000:.1f} MHz"
|
||||
safety_label = ""
|
||||
mhz_color = s.safe_color
|
||||
|
||||
mhz_tag = f"combo_{freq}"
|
||||
if freq == 1536000:
|
||||
if freq == s.mariko_meme_threshold:
|
||||
with dpg.group(horizontal=True): # align horizontally
|
||||
dpg.add_combo(
|
||||
items=processed_voltages,
|
||||
default_value="Disabled",
|
||||
label=mhz_label,
|
||||
tag="g_volt_" + str(freq),
|
||||
callback=k.grab_kip_storage_values_no_mult
|
||||
)
|
||||
dpg.add_text("(")
|
||||
dpg.add_image("coolerhd", width=16, height=16)
|
||||
dpg.add_text(")")
|
||||
dpg.add_text(f"{mhz_label} (", color=mhz_color)
|
||||
dpg.add_image("coolerhd", width=20, height=20)
|
||||
dpg.add_text(")", color=mhz_color)
|
||||
else:
|
||||
dpg.add_combo(
|
||||
items=processed_voltages,
|
||||
default_value="Disabled",
|
||||
label=mhz_label,
|
||||
tag="g_volt_" + str(freq),
|
||||
callback=k.grab_kip_storage_values_no_mult
|
||||
)
|
||||
with dpg.group(horizontal=True):
|
||||
dpg.add_combo(
|
||||
items=processed_voltages,
|
||||
default_value="Disabled",
|
||||
tag="g_volt_" + str(freq),
|
||||
callback=k.grab_kip_storage_values_no_mult
|
||||
)
|
||||
dpg.add_text(default_value=f"{mhz_label} {safety_label}", color=mhz_color)
|
||||
|
||||
dpg.add_separator(label="Custom Table (Erista)")
|
||||
|
||||
for freq in freqs_khz_e:
|
||||
if(freq > 1151000):
|
||||
mhz_label = f"{freq / 1000:.1f} MHz (DANGEROUS)"
|
||||
elif(freq > 922000):
|
||||
mhz_label = f"{freq / 1000:.1f} MHz (UNSAFE)"
|
||||
else:
|
||||
for freq in s.freqs_khz_e:
|
||||
if(freq > s.erista_dangerous_gpu_threshold):
|
||||
mhz_label = f"{freq / 1000:.1f} MHz"
|
||||
mhz_tag = f"combo_e_{freq}"
|
||||
dpg.add_combo(
|
||||
items=processed_voltages_e,
|
||||
default_value="Disabled",
|
||||
label=mhz_label,
|
||||
tag="g_volt_e_" + str(freq),
|
||||
callback=k.grab_kip_storage_values_no_mult
|
||||
)
|
||||
safety_label = "(DANGEROUS)"
|
||||
mhz_color = s.danger_color
|
||||
elif(freq > s.erista_unsafe_gpu_threshold):
|
||||
mhz_color = s.unsafe_color
|
||||
mhz_label = f"{freq / 1000:.1f} MHz"
|
||||
safety_label = "(UNSAFE)"
|
||||
else:
|
||||
mhz_color = s.safe_color
|
||||
mhz_label = f"{freq / 1000:.1f} MHz"
|
||||
safety_label = ""
|
||||
|
||||
with dpg.group(horizontal=True):
|
||||
dpg.add_combo(
|
||||
items=processed_voltages_e,
|
||||
default_value="Disabled",
|
||||
tag="g_volt_e_" + str(freq),
|
||||
callback=k.grab_kip_storage_values_no_mult
|
||||
)
|
||||
dpg.add_text(default_value=f"{mhz_label} {safety_label}", color=mhz_color)
|
||||
|
||||
@@ -2,30 +2,7 @@ import os
|
||||
import re
|
||||
import common as c
|
||||
|
||||
def ensure_dir_exists(path):
|
||||
path_str = str(path)
|
||||
os.makedirs(os.path.dirname(path_str), exist_ok=True)
|
||||
|
||||
import os
|
||||
import re
|
||||
import common as c
|
||||
|
||||
def ensure_dir_exists(path):
|
||||
os.makedirs(os.path.dirname(path), exist_ok=True)
|
||||
|
||||
import os
|
||||
import re
|
||||
import common as c
|
||||
|
||||
def ensure_dir_exists(path: str):
|
||||
"""Ensure the parent directory of the INI file exists."""
|
||||
os.makedirs(os.path.dirname(path), exist_ok=True)
|
||||
|
||||
import os
|
||||
import re
|
||||
import common as c
|
||||
|
||||
def ensure_dir_exists(path):
|
||||
os.makedirs(os.path.dirname(path), exist_ok=True)
|
||||
|
||||
def set_ini_values(ini_path, section, entries):
|
||||
|
||||
@@ -28,6 +28,7 @@ import urllib.request
|
||||
import zipfile
|
||||
import kip as k
|
||||
from defaults import d
|
||||
import settings as s
|
||||
|
||||
def autosave_toggle(sender, app_data):
|
||||
d.autosave=app_data
|
||||
@@ -42,9 +43,6 @@ def get_drives():
|
||||
|
||||
|
||||
# Change if you plan to fork
|
||||
kip_download_link="https://github.com/souldbminersmwc/Horizon-OC/releases/latest/download/loader.kip"
|
||||
hoc_clk_download_link="https://github.com/souldbminersmwc/Horizon-OC/releases/latest/download/hoc-clk.zip"
|
||||
ams_download_link=""
|
||||
|
||||
def download_and_extract_zip(c, download_url, zip_filename="temp.zip", success_message="Installed file!"):
|
||||
"""
|
||||
@@ -92,7 +90,7 @@ def downloadLoader(): # This has to be different as it extracts to a custom loca
|
||||
else:
|
||||
try:
|
||||
directory_make = c.drive + "atmosphere/kips/"
|
||||
urllib.request.urlretrieve(kip_download_link, directory_make + "hoc.kip")
|
||||
urllib.request.urlretrieve(s.kip_download_link, directory_make + "hoc.kip")
|
||||
except Exception as e:
|
||||
c.show_popup(title="Error", content=f"Download failed:\n{e}")
|
||||
finally:
|
||||
@@ -109,7 +107,7 @@ def check_atmosphere(sender, app_data, user_data):
|
||||
k.kip_file_path = f"{atmosphere_path}/kips/hoc.kip"
|
||||
k.read_kip(c.drive + "atmosphere/kips/hoc.kip")
|
||||
print(f"Reading kip from drive {c.drive}")
|
||||
k.load_all_vars()
|
||||
s.load_all_vars()
|
||||
elif os.path.isdir(atmosphere_path) and os.path.isfile(package3_path):
|
||||
dpg.set_value("status_text", "Atmosphere install found!")
|
||||
else:
|
||||
|
||||
@@ -3,157 +3,22 @@ import struct
|
||||
from defaults import d
|
||||
import common as c
|
||||
import gpu as g
|
||||
import cpu
|
||||
import defaults as df
|
||||
import re
|
||||
import ctypes
|
||||
import settings as s
|
||||
|
||||
g_freq_str = None
|
||||
kip_file_path = None
|
||||
|
||||
variables = [
|
||||
("custRev", "u32"),
|
||||
("mtcConf", "u32"),
|
||||
("commonCpuBoostClock", "u32"),
|
||||
("commonEmcMemVolt", "u32"),
|
||||
("eristaCpuMaxVolt", "u32"),
|
||||
("eristaEmcMaxClock", "u32"),
|
||||
("marikoCpuMaxVolt", "u32"),
|
||||
("marikoEmcMaxClock", "u32"),
|
||||
("marikoEmcVddqVolt", "u32"),
|
||||
("marikoCpuUV", "u32"),
|
||||
("marikoGpuUV", "u32"),
|
||||
("eristaCpuUV", "u32"),
|
||||
("eristaGpuUV", "u32"),
|
||||
("enableMarikoGpuUnsafeFreqs", "u32"),
|
||||
("enableEristaGpuUnsafeFreqs", "u32"),
|
||||
("enableMarikoCpuUnsafeFreqs", "u32"),
|
||||
("enableEristaCpuUnsafeFreqs", "u32"),
|
||||
("commonGpuVoltOffset", "u32"),
|
||||
("marikoEmcDvbShift", "u32"),
|
||||
# advanced config
|
||||
("t1_tRCD", "u32"),
|
||||
("t2_tRP", "u32"),
|
||||
("t3_tRAS", "u32"),
|
||||
("t4_tRRD", "u32"),
|
||||
("t5_tRFC", "u32"),
|
||||
("t6_tRTW", "u32"),
|
||||
("t7_tWTR", "u32"),
|
||||
("t8_tREFI", "u32"),
|
||||
("mem_burst_latency", "u32"),
|
||||
|
||||
("g_volt_76800", "u32"),
|
||||
("g_volt_153600", "u32"),
|
||||
("g_volt_230400", "u32"),
|
||||
("g_volt_307200", "u32"),
|
||||
("g_volt_384000", "u32"),
|
||||
("g_volt_460800", "u32"),
|
||||
("g_volt_537600", "u32"),
|
||||
("g_volt_614400", "u32"),
|
||||
("g_volt_691200", "u32"),
|
||||
("g_volt_768000", "u32"),
|
||||
("g_volt_844800", "u32"),
|
||||
("g_volt_921600", "u32"),
|
||||
("g_volt_998400", "u32"),
|
||||
("g_volt_1075200", "u32"),
|
||||
("g_volt_1152000", "u32"),
|
||||
("g_volt_1228800", "u32"),
|
||||
("g_volt_1267200", "u32"),
|
||||
("g_volt_1305600", "u32"),
|
||||
("g_volt_1344000", "u32"),
|
||||
("g_volt_1382400", "u32"),
|
||||
("g_volt_1420800", "u32"),
|
||||
("g_volt_1459200", "u32"),
|
||||
("g_volt_1497600", "u32"),
|
||||
("g_volt_1536000", "u32"),
|
||||
|
||||
|
||||
("g_volt_e_76800", "u32"),
|
||||
("g_volt_e_153600", "u32"),
|
||||
("g_volt_e_230400", "u32"),
|
||||
("g_volt_e_307200", "u32"),
|
||||
("g_volt_e_384000", "u32"),
|
||||
("g_volt_e_460800", "u32"),
|
||||
("g_volt_e_537600", "u32"),
|
||||
("g_volt_e_614400", "u32"),
|
||||
("g_volt_e_691200", "u32"),
|
||||
("g_volt_e_768000", "u32"),
|
||||
("g_volt_e_844800", "u32"),
|
||||
("g_volt_e_921600", "u32"),
|
||||
("g_volt_e_998400", "u32"),
|
||||
("g_volt_e_1075200", "u32"),
|
||||
# ("g_volt_e_1152000", "u32"),
|
||||
# ("g_volt_e_1228800", "u32"),
|
||||
("marikoCpuVmin", "u32"),
|
||||
("eristaGpuVmin", "u32"),
|
||||
("marikoGpuVmin", "u32"),
|
||||
("marikoGpuVmax", "u32"),
|
||||
|
||||
]
|
||||
|
||||
fmt_map = {
|
||||
"u32": "I",
|
||||
"double": "d",
|
||||
}
|
||||
|
||||
def make_struct_format(vars_list):
|
||||
fmt = "="
|
||||
for name, t in vars_list:
|
||||
fmt += fmt_map[t]
|
||||
fmt += s.fmt_map[t]
|
||||
if name == "tFAW":
|
||||
fmt += "4x" # i hate hardcoding but this is what it is
|
||||
return fmt
|
||||
|
||||
def load_all_vars():
|
||||
c.load_entry_object("custRev", 0)
|
||||
c.load_entry_object("mtcConf", 0)
|
||||
c.load_entry_object("commonCpuBoostClock", 1)
|
||||
c.load_entry_object("commonEmcMemVolt", 2)
|
||||
c.load_entry_object("eristaCpuMaxVolt", 3)
|
||||
c.load_entry_object("eristaEmcMaxClock", 1)
|
||||
c.load_entry_object("marikoCpuMaxVolt", 3)
|
||||
c.load_entry_object("marikoEmcMaxClock", 1)
|
||||
c.load_entry_object("marikoEmcVddqVolt", 2)
|
||||
c.load_entry_object("marikoCpuUV", 5)
|
||||
c.load_entry_object("marikoGpuUV", 4)
|
||||
c.load_entry_object("eristaCpuUV", 5)
|
||||
c.load_entry_object("eristaGpuUV", 4)
|
||||
c.load_entry_object("enableMarikoGpuUnsafeFreqs", 0)
|
||||
c.load_entry_object("enableEristaGpuUnsafeFreqs", 0)
|
||||
c.load_entry_object("enableMarikoCpuUnsafeFreqs", 0)
|
||||
c.load_entry_object("enableEristaCpuUnsafeFreqs", 0)
|
||||
c.load_entry_object("commonGpuVoltOffset", 3)
|
||||
c.load_entry_object("marikoEmcDvbShift", 0)
|
||||
|
||||
# Advanced memory config
|
||||
c.load_entry_object("t1_tRCD", 5)
|
||||
c.load_entry_object("t2_tRP", 5)
|
||||
c.load_entry_object("t3_tRAS", 5)
|
||||
c.load_entry_object("t4_tRRD", 5)
|
||||
c.load_entry_object("t5_tRFC", 5)
|
||||
c.load_entry_object("t6_tRTW", 5)
|
||||
c.load_entry_object("t7_tWTR", 5)
|
||||
c.load_entry_object("t8_tREFI", 5)
|
||||
c.load_entry_object("mem_burst_latency", 5)
|
||||
# GPU voltage arrays
|
||||
for freq in [
|
||||
"76800", "153600", "230400", "307200", "384000", "460800", "537600",
|
||||
"614400", "691200", "768000", "844800", "921600", "998400", "1075200",
|
||||
"1152000", "1228800", "1267200", "1305600", "1344000", "1382400",
|
||||
"1420800", "1459200", "1497600", "1536000"
|
||||
]:
|
||||
c.load_entry_object(f"g_volt_{freq}", 3)
|
||||
|
||||
for e_freq in [
|
||||
"76800", "153600", "230400", "307200", "384000", "460800", "537600",
|
||||
"614400", "691200", "768000", "844800", "921600", "998400", "1075200"# ,
|
||||
# "1152000", "1228800"
|
||||
]:
|
||||
c.load_entry_object(f"g_volt_e_{e_freq}", 3)
|
||||
c.load_entry_object("marikoCpuVmin", 3)
|
||||
c.load_entry_object("eristaGpuVmin", 3)
|
||||
c.load_entry_object("marikoGpuVmin", 3)
|
||||
c.load_entry_object("marikoGpuVmax", 3)
|
||||
|
||||
def freq_to_label(freq):
|
||||
if freq > 1382400:
|
||||
@@ -168,7 +33,7 @@ def store(sender, app_data):
|
||||
kip_file_path = app_data['file_path_name']
|
||||
print("Selected" + kip_file_path)
|
||||
read_kip(kip_file_path)
|
||||
load_all_vars()
|
||||
s.load_all_vars()
|
||||
|
||||
def grab_kip_storage_values(sender, app_data):
|
||||
tag = dpg.get_item_alias(sender)
|
||||
@@ -217,7 +82,7 @@ def grab_value_freq_conversion(sender, app_data):
|
||||
def write_kip():
|
||||
global kip_file_path
|
||||
MAGIC = b"CUST"
|
||||
struct_fmt = make_struct_format(variables)
|
||||
struct_fmt = make_struct_format(s.variables)
|
||||
struct_size = struct.calcsize(struct_fmt)
|
||||
if kip_file_path is None:
|
||||
msg = "You need to select a file to use Autosave!" if d.autosave else "You need to select a file to save the KIP!"
|
||||
@@ -231,7 +96,7 @@ def write_kip():
|
||||
return
|
||||
pos = idx + len(MAGIC)
|
||||
values = []
|
||||
for attr_name, t in variables:
|
||||
for attr_name, t in s.variables:
|
||||
val = getattr(d, attr_name)
|
||||
if t == "u32":
|
||||
val = int(val) & 0xFFFFFFFF
|
||||
@@ -250,7 +115,7 @@ def write_kip():
|
||||
|
||||
def read_kip(filename):
|
||||
MAGIC = b"CUST"
|
||||
struct_fmt = make_struct_format(variables)
|
||||
struct_fmt = make_struct_format(s.variables)
|
||||
struct_size = struct.calcsize(struct_fmt)
|
||||
with open(filename, "rb") as f:
|
||||
data = f.read()
|
||||
@@ -260,12 +125,12 @@ def read_kip(filename):
|
||||
pos = idx + len(MAGIC)
|
||||
raw = data[pos:pos + struct_size]
|
||||
values = struct.unpack(struct_fmt, raw)
|
||||
for (attr_name, _), val in zip(variables, values):
|
||||
for (attr_name, _), val in zip(s.variables, values):
|
||||
setattr(d, attr_name, val)
|
||||
print("=== value layout ===")
|
||||
offset = 0
|
||||
for (attr_name, t) in variables:
|
||||
code = fmt_map[t]
|
||||
for (attr_name, t) in s.variables:
|
||||
code = s.fmt_map[t]
|
||||
align = 8 if code == "d" else 4
|
||||
padding = (-offset) % align
|
||||
if padding:
|
||||
|
||||
@@ -28,8 +28,7 @@ import re
|
||||
import installer as ins
|
||||
from defaults import d
|
||||
import ram as r
|
||||
|
||||
skinTarget = 54 # default value
|
||||
import settings as s
|
||||
|
||||
def get_ini_path():
|
||||
if not common.drive or common.drive == 0:
|
||||
@@ -37,150 +36,12 @@ def get_ini_path():
|
||||
return None
|
||||
return Path(str(common.drive)) / "atmosphere/config/system_settings.ini"
|
||||
|
||||
PROFILES = {
|
||||
"V1_Erista": {
|
||||
"tskin_pcb_coefficients_console_on_fwdbg": 'str!"[6396, 119440]"',
|
||||
"tskin_pcb_coefficients_handheld_on_fwdbg": 'str!"[5817, 129580]"',
|
||||
"tskin_soc_coefficients_console_on_fwdbg": 'str!"[6182, 112480]"',
|
||||
"tskin_soc_coefficients_handheld_on_fwdbg": 'str!"[5464, 174190]"',
|
||||
},
|
||||
"V2_Mariko": {
|
||||
"tskin_pcb_coefficients_console_on_fwdbg": 'str!"[7338, 112161]"',
|
||||
"tskin_pcb_coefficients_handheld_on_fwdbg": 'str!"[6357, 168124]"',
|
||||
"tskin_soc_coefficients_console_on_fwdbg": 'str!"[6728, 129810]"',
|
||||
"tskin_soc_coefficients_handheld_on_fwdbg": 'str!"[5675, 203453]"',
|
||||
},
|
||||
"Lite_Mariko": {
|
||||
"tskin_pcb_coefficients_console_on_fwdbg": 'str!"[7338, 112161]"',
|
||||
"tskin_pcb_coefficients_handheld_on_fwdbg": 'str!"[5594, 209601]"',
|
||||
"tskin_soc_coefficients_console_on_fwdbg": 'str!"[6728, 129810]"',
|
||||
"tskin_soc_coefficients_handheld_on_fwdbg": 'str!"[5235, 199759]"',
|
||||
},
|
||||
"OLED_Mariko": {
|
||||
"tskin_pcb_coefficients_console_on_fwdbg": 'str!"[8051, -45213]"',
|
||||
"tskin_pcb_coefficients_handheld_on_fwdbg": 'str!"[7176, -33954]"',
|
||||
"tskin_soc_coefficients_console_on_fwdbg": 'str!"[7831, 57590]"',
|
||||
"tskin_soc_coefficients_handheld_on_fwdbg": 'str!"[9029, 4274]"',
|
||||
},
|
||||
}
|
||||
|
||||
BATTERY_SAVE_OPTIONS = {
|
||||
"bgtc": {
|
||||
"enable_halfawake": "u32!0x0",
|
||||
"minimum_interval_normal": "u32!0x7FFFFFFF",
|
||||
"minimum_interval_save": "u32!0x7FFFFFFF",
|
||||
"battery_threshold_save": "u32!0x64",
|
||||
"battery_threshold_stop": "u32!0x64",
|
||||
},
|
||||
"npns": {
|
||||
"background_processing": "u8!0x0",
|
||||
"sleep_periodic_interval": "u32!0x7FFFFFFF",
|
||||
"sleep_processing_timeout": "u32!0x0",
|
||||
"sleep_max_try_count": "u32!0x0",
|
||||
},
|
||||
"ns.notification": {
|
||||
"enable_download_task_list": "u8!0x0",
|
||||
"enable_download_ticket": "u8!0x0",
|
||||
"enable_network_update": "u8!0x0",
|
||||
"enable_random_wait": "u8!0x0",
|
||||
"enable_request_on_cold_boot": "u8!0x0",
|
||||
"enable_send_rights_usage_status_request": "u8!0x0",
|
||||
"enable_sync_elicense_request": "u8!0x0",
|
||||
"enable_version_list": "u8!0x0",
|
||||
"retry_interval_min": "u32!0x7FFFFFFF",
|
||||
"retry_interval_max": "u32!0x7FFFFFFF",
|
||||
"version_list_waiting_limit_bias": "u32!0x7FFFFFFF",
|
||||
"version_list_waiting_limit_min": "u32!0x7FFFFFFF",
|
||||
},
|
||||
"account": {
|
||||
"na_required_for_network_service": "u8!0x0",
|
||||
"na_license_verification_enabled": "u8!0x0",
|
||||
},
|
||||
"account.daemon": {
|
||||
"background_awaking_periodicity": "u32!0x7FFFFFFF",
|
||||
"initial_schedule_delay": "u32!0x7FFFFFFF",
|
||||
"profile_sync_interval": "u32!0x7FFFFFFF",
|
||||
"na_info_refresh_interval": "u32!0x7FFFFFFF",
|
||||
},
|
||||
"capsrv": {
|
||||
"enable_album_screenshot_filedata_verification": "u8!0x0",
|
||||
"enable_album_movie_filehash_verification": "u8!0x0",
|
||||
"enable_album_movie_filesign_verification": "u8!0x0",
|
||||
},
|
||||
"friends": {
|
||||
"background_processing": "u8!0x0",
|
||||
},
|
||||
"notification.presenter": {
|
||||
"snooze_interval_in_seconds": "u32!0x7FFFFFFF",
|
||||
"connection_retry_count": "u32!0x0",
|
||||
"alarm_pattern_total_repeat_count": "u32!0x0",
|
||||
"alarm_pattern_with_vibration_repeat_count": "u32!0x0",
|
||||
},
|
||||
"prepo": {
|
||||
"transmission_interval_min": "u32!0x7FFFFFFF",
|
||||
"transmission_retry_interval_min": "u32!0x7FFFFFFF",
|
||||
"transmission_retry_interval_max": "u32!0x7FFFFFFF",
|
||||
"transmission_interval_in_sleep": "u32!0x7FFFFFFF",
|
||||
"statistics_save_interval_min": "u32!0x7FFFFFFF",
|
||||
"statistics_post_interval": "u32!0x7FFFFFFF",
|
||||
"save_system_report": "u8!0x0",
|
||||
},
|
||||
"olsc": {
|
||||
"default_auto_upload_global_setting": "u8!0x0",
|
||||
"default_auto_download_global_setting": "u8!0x0",
|
||||
"autonomy_registration_interval_seconds": "u32!0x7FFFFFFF",
|
||||
"network_service_license_info_cache_expiration_seconds": "u32!0x7FFFFFFF",
|
||||
"postponed_transfer_task_processing_interval_seconds": "u32!0x7FFFFFFF",
|
||||
"retry_offset_seconds": "u32!0x7FFFFFFF",
|
||||
"network_trouble_detection_span_seconds": "u32!0x7FFFFFFF",
|
||||
"network_connection_polling_interval_seconds": "u32!0x7FFFFFFF",
|
||||
"is_save_data_backup_policy_check_required": "u8!0x0",
|
||||
"is_global_transfer_task_autonomy_registration_enabled": "u8!0x0",
|
||||
"is_on_event_transfer_task_registration_enabled": "u8!0x0",
|
||||
"is_periodic_transfer_task_registration_enabled": "u8!0x0",
|
||||
},
|
||||
"ntc": {
|
||||
"is_autonomic_correction_enabled": "u8!0x0",
|
||||
"autonomic_correction_interval_seconds": "u32!0x7FFFFFFF",
|
||||
"autonomic_correction_failed_retry_interval_seconds": "u32!0x7FFFFFFF",
|
||||
"autonomic_correction_immediate_try_count_max": "u32!0x0",
|
||||
"autonomic_correction_immediate_try_interval_milliseconds": "u32!0x7FFFFFFF",
|
||||
},
|
||||
"systemupdate": {
|
||||
"bgnup_retry_seconds": "u32!0x7FFFFFFF",
|
||||
},
|
||||
"ns.rights": {
|
||||
"skip_account_validation_on_rights_check": "u8!0x1",
|
||||
"next_available_time_of_unexpected_error": "u32!0x7FFFFFFF",
|
||||
},
|
||||
"pctl": {
|
||||
"intermittent_task_interval_seconds": "u32!0x7FFFFFFF",
|
||||
},
|
||||
"sprofile": {
|
||||
"adjust_polling_interval_by_profile": "u8!0x0",
|
||||
"polling_interval_sec_max": "u32!0x7FFFFFFF",
|
||||
"polling_interval_sec_min": "u32!0x7FFFFFFF",
|
||||
},
|
||||
}
|
||||
|
||||
PSM_OPTIONS = [
|
||||
{"name": "1024mA", "value": "u32!0x400"},
|
||||
{"name": "1280mA", "value": "u32!0x500"},
|
||||
{"name": "1536mA", "value": "u32!0x600"},
|
||||
{"name": "1660mA (Lite Default)", "value": "u32!0x67C"},
|
||||
{"name": "1792mA", "value": "u32!0x700"},
|
||||
{"name": "2048mA (Default)", "value": "u32!0x800"},
|
||||
{"name": "2304mA (UNSAFE)", "value": "u32!0x900"},
|
||||
{"name": "2560mA (UNSAFE)", "value": "u32!0xA00"},
|
||||
{"name": "2816mA (DANGEROUS)", "value": "u32!0xB00"},
|
||||
{"name": "3072mA (DANGEROUS)", "value": "u32!0xC00"},
|
||||
]
|
||||
|
||||
def set_psm_value(sender, app_data):
|
||||
ini_path = get_ini_path()
|
||||
if not ini_path:
|
||||
return
|
||||
value = next((x["value"] for x in PSM_OPTIONS if x["name"] == app_data), None)
|
||||
value = next((x["value"] for x in s.PSM_OPTIONS if x["name"] == app_data), None)
|
||||
if value:
|
||||
ini.set_ini_values(str(ini_path), "psm", {"current_psm_mA": value})
|
||||
common.show_popup("Success", f"Charge Limit set to {app_data}")
|
||||
@@ -220,11 +81,11 @@ def remove_tc_entries():
|
||||
|
||||
def set_ini_from_profile(sender, app_data, user_data):
|
||||
profile_name = user_data
|
||||
if profile_name not in PROFILES:
|
||||
if profile_name not in s.PROFILES:
|
||||
print(f"Profile '{profile_name}' not found.")
|
||||
return
|
||||
|
||||
entries = PROFILES[profile_name]
|
||||
entries = s.PROFILES[profile_name]
|
||||
ini_path = get_ini_path()
|
||||
if not ini_path:
|
||||
return
|
||||
@@ -233,23 +94,14 @@ def set_ini_from_profile(sender, app_data, user_data):
|
||||
print(f"Applied profile {profile_name} under [tc]")
|
||||
|
||||
def update_skin_target(sender, app_data):
|
||||
global skinTarget
|
||||
skinTarget = app_data
|
||||
print("skinTarget =", skinTarget)
|
||||
s.skinTarget = app_data
|
||||
print("skinTarget =", s.skinTarget)
|
||||
|
||||
ini_path = get_ini_path()
|
||||
if not ini_path:
|
||||
return
|
||||
|
||||
entries = {
|
||||
"use_configurations_on_fwdbg": "u8!0x1",
|
||||
"tskin_rate_table_console_on_fwdbg": f'str!"[[-1000000,40000,0,0],[36000,43000,51,51],[43000,49000,51,128],[49000,{skinTarget}000,128,255],[{skinTarget}000,1000000,255,255]]"',
|
||||
"tskin_rate_table_handheld_on_fwdbg": f'str!"[[-1000000,40000,0,0],[36000,43000,51,51],[43000,49000,51,128],[49000,{skinTarget}000,128,255],[{skinTarget}000,1000000,255,255]]"',
|
||||
"holdable_tskin": "u32!0xEA60",
|
||||
"touchable_tskin": "u32!0xEA60"
|
||||
}
|
||||
|
||||
ini.set_ini_values(str(ini_path), "tc", entries)
|
||||
ini.set_ini_values(str(ini_path), "tc", s.skin_t_entries)
|
||||
|
||||
def toggle_battery_save(sender, user_data):
|
||||
|
||||
@@ -259,7 +111,7 @@ def toggle_battery_save(sender, user_data):
|
||||
|
||||
ini_path = Path(common.drive) / "atmosphere/config/system_settings.ini"
|
||||
|
||||
for section, entries in BATTERY_SAVE_OPTIONS.items():
|
||||
for section, entries in s.BATTERY_SAVE_OPTIONS.items():
|
||||
if dpg.get_item_alias(sender) == "enable_battery_fix": # hardcoded but otherwise it doesnt work :(
|
||||
ini.set_ini_values(str(ini_path), section, entries)
|
||||
else:
|
||||
@@ -277,7 +129,7 @@ def populate():
|
||||
dpg.add_slider_int(
|
||||
label="Skin Target (Recommended - 54°C)",
|
||||
min_value=50, max_value=60,
|
||||
default_value=skinTarget,
|
||||
default_value=s.skinTarget,
|
||||
callback=update_skin_target
|
||||
)
|
||||
dpg.add_button(label="Reset Fan Curve", callback=remove_tc_entries)
|
||||
@@ -311,9 +163,6 @@ def populate():
|
||||
reversenx_link = "https://github.com/masagrator/ReverseNX-RT/releases/latest/download/ReverseNX-RT-ovl.ovl"
|
||||
dpg.add_button(label="Install ReverseNX-RT", callback=lambda: ins.download_and_install(c=common, install_path=common.drive + "switch/.overlays/", download_url=reversenx_link, filename="ReverseNX-RT-ovl.ovl", success_message="Installed ReverseNX-RT!"))
|
||||
|
||||
status_monitor_link = "https://github.com/ppkantorski/Status-Monitor-Overlay/releases/latest/download/ Status-Monitor-Overlay.ovl "
|
||||
dpg.add_button(label="Install Status Monitor", callback=lambda: ins.download_and_install(c=common, install_path=common.drive + "switch/.overlays/", download_url=status_monitor_link, filename=" Status-Monitor-Overlay.ovl", success_message="Installed Status Monitor!"))
|
||||
|
||||
dpg.add_separator(label="Danger Zone")
|
||||
|
||||
dpg.add_text("These options are known to cause hardware issues, PMIC issues or overheating.\nUse with extreme caution!", color=(255, 165, 0, 255))
|
||||
@@ -322,7 +171,7 @@ def populate():
|
||||
|
||||
dpg.add_spacer(height=10)
|
||||
|
||||
psm_items = [x["name"] for x in PSM_OPTIONS]
|
||||
psm_items = [x["name"] for x in s.PSM_OPTIONS]
|
||||
dpg.add_combo(items=psm_items, label="Battery Charge Limit", callback=set_psm_value, tag="psm_dropdown", default_value="2048mA (Default)")
|
||||
dpg.add_spacer(height=5)
|
||||
|
||||
@@ -341,21 +190,14 @@ def set_white_tiger_clocks(app_data):
|
||||
# 1400mv emc max
|
||||
# 1375mv cpu max
|
||||
# 750mv vdd2 mariko max
|
||||
base_vddq_uv = [
|
||||
0, 550000, 555000, 560000, 565000, 570000, 575000, 580000,
|
||||
585000, 590000, 595000, 600000, 605000, 610000, 615000,
|
||||
620000, 625000, 630000, 635000, 640000, 645000, 650000
|
||||
]
|
||||
base_vddq_uv = list(range(550000, 650001, 5000))
|
||||
|
||||
vddq_uv = [0] + list(range(250000, 750001, 5000)) if app_data else base_vddq_uv
|
||||
vddq_mv = [v // 1000 for v in vddq_uv]
|
||||
vddq_mv_label = ["Default (600 mV)" if f == 0 else f"{f} mV" for f in vddq_mv]
|
||||
dpg.configure_item("marikoEmcVddqVolt", items=vddq_mv_label)
|
||||
|
||||
base_voltages_uv = [
|
||||
0, 1050000, 1062500, 1075000, 1087500, 1100000, 1112500, 1125000,
|
||||
1137500, 1150000, 1162500, 1175000, 1187500, 1200000, 1212500, 1237500
|
||||
]
|
||||
base_voltages_uv = list(range(1050000, 1212500 + 1, 12500))
|
||||
voltages_uv = base_voltages_uv + list(range(1225000, 1400000 + 1, 12500)) if app_data else base_voltages_uv
|
||||
voltages_mv = [v / 1000 for v in voltages_uv]
|
||||
voltages_mv_label = ["Default (1175 mV)" if f == 0 else f"{f} mV" for f in voltages_mv]
|
||||
|
||||
@@ -20,237 +20,20 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
import dearpygui.dearpygui as dpg
|
||||
from defaults import d
|
||||
import common as c
|
||||
timing_vars = [
|
||||
"d.t1_tRCD",
|
||||
"d.t2_tRP",
|
||||
"d.t3_tRAS",
|
||||
"d.t4_tRRD",
|
||||
"d.t5_tRFC",
|
||||
"d.t6_tRTW",
|
||||
"d.t7_tWTR",
|
||||
"d.t8_tREFI"
|
||||
]
|
||||
|
||||
timing_preset_default = [
|
||||
0, # tRCD
|
||||
0, # tRP
|
||||
0, # tRAS
|
||||
0, # tRRD
|
||||
0, # tRFC
|
||||
0, # tRTW
|
||||
0, # tWTR
|
||||
0, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_aamgcl_c = [
|
||||
4, # tRCD
|
||||
4, # tRP
|
||||
5, # tRAS
|
||||
5, # tRRD
|
||||
5, # tRFC
|
||||
5, # tRTW
|
||||
7, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_aamgcl_st = [
|
||||
4, # tRCD
|
||||
4, # tRP
|
||||
8, # tRAS
|
||||
6, # tRRD
|
||||
5, # tRFC
|
||||
7, # tRTW
|
||||
8, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_mgcj_c = [
|
||||
3, # tRCD
|
||||
2, # tRP
|
||||
4, # tRAS
|
||||
2, # tRRD
|
||||
4, # tRFC
|
||||
4, # tRTW
|
||||
4, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_mgcj_st = [
|
||||
4, # tRCD
|
||||
3, # tRP
|
||||
8, # tRAS
|
||||
2, # tRRD
|
||||
5, # tRFC
|
||||
4, # tRTW
|
||||
4, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_ab_mgcl_c = [
|
||||
4, # tRCD
|
||||
4, # tRP
|
||||
4, # tRAS
|
||||
4, # tRRD
|
||||
4, # tRFC
|
||||
5, # tRTW
|
||||
6, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_ab_mgcl_st = [
|
||||
4, # tRCD
|
||||
4, # tRP
|
||||
8, # tRAS
|
||||
5, # tRRD
|
||||
5, # tRFC
|
||||
6, # tRTW
|
||||
8, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
timing_preset_hb_mgch_c = [
|
||||
4, # tRCD
|
||||
4, # tRP
|
||||
4, # tRAS
|
||||
0, # tRRD
|
||||
1, # tRFC
|
||||
5, # tRTW
|
||||
4, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
timing_preset_hb_mgch_st = [
|
||||
4, # tRCD
|
||||
5, # tRP
|
||||
9, # tRAS
|
||||
1, # tRRD
|
||||
2, # tRFC
|
||||
6, # tRTW
|
||||
4, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_wtf_c = [
|
||||
4, # tRCD
|
||||
4, # tRP
|
||||
2, # tRAS
|
||||
5, # tRRD
|
||||
4, # tRFC
|
||||
6, # tRTW
|
||||
3, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_wtf_st = [
|
||||
5, # tRCD
|
||||
5, # tRP
|
||||
4, # tRAS
|
||||
5, # tRRD
|
||||
5, # tRFC
|
||||
6, # tRTW
|
||||
5, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_wte_c = [
|
||||
2, # tRCD
|
||||
2, # tRP
|
||||
2, # tRAS
|
||||
2, # tRRD
|
||||
4, # tRFC
|
||||
4, # tRTW
|
||||
4, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_wte_st = [
|
||||
3, # tRCD
|
||||
5, # tRP
|
||||
3, # tRAS
|
||||
3, # tRRD
|
||||
5, # tRFC
|
||||
4, # tRTW
|
||||
5, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_wtb_c = [
|
||||
4, # tRCD
|
||||
4, # tRP
|
||||
5, # tRAS
|
||||
5, # tRRD
|
||||
2, # tRFC
|
||||
6, # tRTW
|
||||
5, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_wtb_st = [
|
||||
6, # tRCD
|
||||
6, # tRP
|
||||
7, # tRAS
|
||||
7, # tRRD
|
||||
2, # tRFC
|
||||
6, # tRTW
|
||||
5, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_nee_c = [
|
||||
3, # tRCD
|
||||
3, # tRP
|
||||
2, # tRAS
|
||||
2, # tRRD
|
||||
5, # tRFC
|
||||
5, # tRTW
|
||||
4, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_nee_st = [
|
||||
4, # tRCD
|
||||
4, # tRP
|
||||
4, # tRAS
|
||||
3, # tRRD
|
||||
7, # tRFC
|
||||
6, # tRTW
|
||||
5, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_nme_c = [
|
||||
2, # tRCD
|
||||
2, # tRP
|
||||
1, # tRAS
|
||||
0, # tRRD
|
||||
1, # tRFC
|
||||
4, # tRTW
|
||||
3, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_nme_st = [
|
||||
3, # tRCD
|
||||
3, # tRP
|
||||
4, # tRAS
|
||||
0, # tRRD
|
||||
1, # tRFC
|
||||
4, # tRTW
|
||||
4, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
import settings as s
|
||||
|
||||
def load_defaults():
|
||||
apply_timing_preset(timing_preset_default)
|
||||
apply_timing_preset(s.timing_preset_default)
|
||||
|
||||
def temporary_presets_unavailable():
|
||||
c.show_popup_big("We need your help!", "This timing preset currently unavailable due to lack of data. If you have a ram module and want to contribute your data, reach out to me (soul_9017) on the OC discord")
|
||||
|
||||
def apply_timing_preset(preset):
|
||||
|
||||
if len(preset) != len(timing_vars):
|
||||
if len(preset) != len(s.timing_vars):
|
||||
raise ValueError("Preset invalid!")
|
||||
|
||||
for var_name, value in zip(timing_vars, preset):
|
||||
for var_name, value in zip(s.timing_vars, preset):
|
||||
setattr(d, var_name.split('.')[-1], value)
|
||||
|
||||
flag = 0 if var_name.endswith("tBL") else 5
|
||||
@@ -265,25 +48,25 @@ def apply_reg_timings(sender, app_data):
|
||||
case "Choose your RAM Type!":
|
||||
c.show_popup("Error", "You must select a ram type to apply a preset")
|
||||
case "Samsung AA-MGCL/MGCR":
|
||||
apply_timing_preset(timing_preset_aamgcl_c)
|
||||
apply_timing_preset(s.timing_preset_aamgcl_c)
|
||||
case "SK Hynix NEI/NEE/x267":
|
||||
apply_timing_preset(timing_preset_nee_c)
|
||||
apply_timing_preset(s.timing_preset_nee_c)
|
||||
case "Micron WT:B":
|
||||
apply_timing_preset(timing_preset_wtb_c)
|
||||
apply_timing_preset(s.timing_preset_wtb_c)
|
||||
case "Micron AUT:B":
|
||||
apply_timing_preset(timing_preset_wtb_c)
|
||||
apply_timing_preset(s.timing_preset_wtb_c)
|
||||
case "Micron WT:F":
|
||||
apply_timing_preset(timing_preset_wtf_c)
|
||||
apply_timing_preset(s.timing_preset_wtf_c)
|
||||
case "Samsung AM-MGCJ":
|
||||
apply_timing_preset(timing_preset_mgcj_c)
|
||||
apply_timing_preset(s.timing_preset_mgcj_c)
|
||||
case "Micron WT:E":
|
||||
apply_timing_preset(timing_preset_wte_c)
|
||||
apply_timing_preset(s.timing_preset_wte_c)
|
||||
case "Samsung AB-MGCL":
|
||||
apply_timing_preset(timing_preset_ab_mgcl_c)
|
||||
apply_timing_preset(s.timing_preset_ab_mgcl_c)
|
||||
case "SK Hynix NME":
|
||||
apply_timing_preset(timing_preset_nme_c)
|
||||
apply_timing_preset(s.timing_preset_nme_c)
|
||||
case "Samsung HB-MGCH":
|
||||
apply_timing_preset(timing_preset_hb_mgch_c)
|
||||
apply_timing_preset(s.timing_preset_hb_mgch_c)
|
||||
case _:
|
||||
temporary_presets_unavailable()
|
||||
|
||||
@@ -293,25 +76,25 @@ def apply_st_timings(sender, app_data):
|
||||
case "Choose your RAM Type!":
|
||||
c.show_popup("Error", "You must select a ram type to apply a preset")
|
||||
case "Samsung AA-MGCL/MGCR":
|
||||
apply_timing_preset(timing_preset_aamgcl_st)
|
||||
apply_timing_preset(s.timing_preset_aamgcl_st)
|
||||
case "SK Hynix NEI/NEE/x267":
|
||||
apply_timing_preset(timing_preset_nee_st)
|
||||
apply_timing_preset(s.timing_preset_nee_st)
|
||||
case "Micron WT:B":
|
||||
apply_timing_preset(timing_preset_wtb_st)
|
||||
apply_timing_preset(s.timing_preset_wtb_st)
|
||||
case "Micron AUT:B":
|
||||
apply_timing_preset(timing_preset_wtb_st)
|
||||
apply_timing_preset(s.timing_preset_wtb_st)
|
||||
case "Micron WT:F":
|
||||
apply_timing_preset(timing_preset_wtf_st)
|
||||
apply_timing_preset(s.timing_preset_wtf_st)
|
||||
case "Samsung AM-MGCJ":
|
||||
apply_timing_preset(timing_preset_mgcj_st)
|
||||
apply_timing_preset(s.timing_preset_mgcj_st)
|
||||
case "Micron WT:E":
|
||||
apply_timing_preset(timing_preset_wte_st)
|
||||
apply_timing_preset(s.timing_preset_wte_st)
|
||||
case "Samsung AB-MGCL":
|
||||
apply_timing_preset(timing_preset_ab_mgcl_st)
|
||||
apply_timing_preset(s.timing_preset_ab_mgcl_st)
|
||||
case "SK Hynix NME":
|
||||
apply_timing_preset(timing_preset_nme_st)
|
||||
apply_timing_preset(s.timing_preset_nme_st)
|
||||
case "Samsung HB-MGCH":
|
||||
apply_timing_preset(timing_preset_hb_mgch_st)
|
||||
apply_timing_preset(s.timing_preset_hb_mgch_st)
|
||||
case _:
|
||||
temporary_presets_unavailable()
|
||||
|
||||
|
||||
@@ -25,33 +25,17 @@ import common
|
||||
import kip as k
|
||||
import preset
|
||||
from defaults import d
|
||||
import settings as s
|
||||
|
||||
def populate():
|
||||
|
||||
# Values in kHz
|
||||
adjusted_freqs_khz = [
|
||||
0, 1600000, 1633000, 1666000, 1700000, 1733000, 1766000, 1800000, 1833000, 1866000, 1900000,
|
||||
1933000, 1966000, 2000000, 2033000, 2066000, 2100000, 2133000, 2166000, 2200000, 2233000,
|
||||
2266000, 2300000, 2333000, 2366000, 2400000, 2433000, 2466000, 2500000, 2533000, 2566000,
|
||||
2600000, 2633000, 2666000, 2700000, 2733000, 2766000, 2800000, 2833000, 2866000, 2900000,
|
||||
2933000, 2966000, 3000000, 3033000, 3066000, 3100000, 3133000, 3166000, 3200000, 3233000,
|
||||
3266000, 3300000, 3333000, 3366000, 3400000, 3433000, 3466000, 3500000
|
||||
]
|
||||
voltages_uv = [
|
||||
0, 1050000, 1062500, 1075000, 1087500, 1100000, 1112500, 1125000,
|
||||
1137500, 1150000, 1162500, 1175000, 1187500, 1200000, 1212500, 1237500
|
||||
]
|
||||
vddq_uv = [
|
||||
0, 550000, 555000, 560000, 565000, 570000, 575000, 580000, 585000, 590000, 595000,
|
||||
600000, 605000, 610000, 615000, 620000, 625000, 630000, 635000, 640000, 645000,
|
||||
650000
|
||||
]
|
||||
voltages_mv = [v / 1000 for v in voltages_uv]
|
||||
voltages_mv = [v / 1000 for v in s.voltages_uv]
|
||||
voltages_mv_label = ["Default (1175 mV)" if f == 0 else f"{f} mV" for f in voltages_mv]
|
||||
vddq_mv = [v / 1000 for v in vddq_uv]
|
||||
vddq_mv = [v / 1000 for v in s.vddq_uv]
|
||||
vddq_mv_label = ["Default (600 mV)" if f == 0 else f"{f} mV" for f in vddq_mv]
|
||||
# Values in MHz (converted)
|
||||
values_mhz = [v / 1000 for v in adjusted_freqs_khz]
|
||||
values_mhz = [v / 1000 for v in s.adjusted_freqs_khz]
|
||||
values_mhz_label_m = ["Default (1996.8 MHz)" if f == 0 else f"{f} MHz" for f in values_mhz]
|
||||
values_mhz_label_e = ["Default (1862.4 MHz)" if f == 0 else f"{f} MHz" for f in values_mhz]
|
||||
dvb = [i for i in range(10)]
|
||||
|
||||
603
Source/Configurator/src/settings.py
Normal file
603
Source/Configurator/src/settings.py
Normal file
@@ -0,0 +1,603 @@
|
||||
import common as c
|
||||
|
||||
# Links
|
||||
|
||||
kip_download_link="https://github.com/souldbminersmwc/Horizon-OC/releases/latest/download/loader.kip"
|
||||
hoc_clk_download_link="https://github.com/souldbminersmwc/Horizon-OC/releases/latest/download/hoc-clk.zip"
|
||||
nx_ovlloader_link = "https://github.com/ppkantorski/nx-ovlloader/releases/latest/download/nx-ovlloader+.zip"
|
||||
ultrahand_link = "https://github.com/ppkantorski/Ultrahand-Overlay/releases/latest/download/ovlmenu.ovl"
|
||||
status_monitor_link = "https://github.com/ppkantorski/Status-Monitor-Overlay/releases/latest/download/ Status-Monitor-Overlay.ovl "
|
||||
saltynx_link = "https://github.com/masagrator/SaltyNX/releases/latest/download/SaltyNX.zip"
|
||||
reversenx_link = "https://github.com/masagrator/ReverseNX-RT/releases/latest/download/ReverseNX-RT-ovl.ovl"
|
||||
|
||||
# Frequencies
|
||||
|
||||
freqs_khz = [
|
||||
76800, 153600, 230400, 307200, 384000, 460800, 537600, 614400, 691200, 768000,
|
||||
844800, 921600, 998400, 1075200, 1152000, 1228800, 1267200, 1305600, 1344000, 1382400, 1420800,
|
||||
1459200, 1497600, 1536000
|
||||
]
|
||||
freqs_khz_e = [
|
||||
76800, 153600, 230400, 307200, 384000, 460800, 537600, 614400, 691200, 768000,
|
||||
844800, 921600, 998400, 1075200 #, 1152000, 1228800 # Disabled by default as these freqs can cause board damage
|
||||
]
|
||||
|
||||
freqs_mhz = [
|
||||
76.8, 153.6, 230.4, 307.2, 384.0, 460.8, 537.6, 614.4, 691.2, 768.0,
|
||||
844.8, 921.6, 998.4, 1075.2, 1152.0, 1228.8, 1267.2, 1305.6, 1344.0, 1382.4,
|
||||
1420.8, 1459.2, 1497.6, 1536.0
|
||||
]
|
||||
|
||||
adjusted_freqs_khz = [
|
||||
0, 1600000, 1633000, 1666000, 1700000, 1733000, 1766000, 1800000, 1833000, 1866000, 1900000,
|
||||
1933000, 1966000, 2000000, 2033000, 2066000, 2100000, 2133000, 2166000, 2200000, 2233000,
|
||||
2266000, 2300000, 2333000, 2366000, 2400000, 2433000, 2466000, 2500000, 2533000, 2566000,
|
||||
2600000, 2633000, 2666000, 2700000, 2733000, 2766000, 2800000, 2833000, 2866000, 2900000,
|
||||
2933000, 2966000, 3000000, 3033000, 3066000, 3100000, 3133000, 3166000, 3200000, 3233000,
|
||||
3266000, 3300000, 3333000, 3366000, 3400000, 3433000, 3466000, 3500000
|
||||
]
|
||||
voltages_uv = [
|
||||
0, 1050000, 1062500, 1075000, 1087500, 1100000, 1112500, 1125000,
|
||||
1137500, 1150000, 1162500, 1175000, 1187500, 1200000, 1212500, 1237500
|
||||
]
|
||||
vddq_uv = [
|
||||
0, 550000, 555000, 560000, 565000, 570000, 575000, 580000, 585000, 590000, 595000,
|
||||
600000, 605000, 610000, 615000, 620000, 625000, 630000, 635000, 640000, 645000,
|
||||
650000
|
||||
]
|
||||
freqs_hz_cpu = [
|
||||
1020000, 1122000, 1224000, 1326000, 1428000, 1581000, 1683000,
|
||||
1785000, 1887000, 1963500, 2091000, 2193000, 2295000, 2397000,
|
||||
2499000, 2601000, 2703000, 2805000, 2907000
|
||||
]
|
||||
freqs_mhz_cpu = [
|
||||
1020.0, 1122.0, 1224.0, 1326.0, 1428.0, 1581.0, 1683.0,
|
||||
1785.0, 1887.0, 1963.5, 2091.0, 2193.0, 2295.0, 2397.0,
|
||||
2499.0, 2601.0, 2703.0, 2805.0, 2907.0
|
||||
]
|
||||
# Loading/saving
|
||||
|
||||
variables = [
|
||||
("custRev", "u32"),
|
||||
("mtcConf", "u32"),
|
||||
("commonCpuBoostClock", "u32"),
|
||||
("commonEmcMemVolt", "u32"),
|
||||
("eristaCpuMaxVolt", "u32"),
|
||||
("eristaEmcMaxClock", "u32"),
|
||||
("marikoCpuMaxVolt", "u32"),
|
||||
("marikoEmcMaxClock", "u32"),
|
||||
("marikoEmcVddqVolt", "u32"),
|
||||
("marikoCpuUV", "u32"),
|
||||
("marikoGpuUV", "u32"),
|
||||
("eristaCpuUV", "u32"),
|
||||
("eristaGpuUV", "u32"),
|
||||
("enableMarikoGpuUnsafeFreqs", "u32"),
|
||||
("enableEristaGpuUnsafeFreqs", "u32"),
|
||||
("enableMarikoCpuUnsafeFreqs", "u32"),
|
||||
("enableEristaCpuUnsafeFreqs", "u32"),
|
||||
("commonGpuVoltOffset", "u32"),
|
||||
("marikoEmcDvbShift", "u32"),
|
||||
# advanced config
|
||||
("t1_tRCD", "u32"),
|
||||
("t2_tRP", "u32"),
|
||||
("t3_tRAS", "u32"),
|
||||
("t4_tRRD", "u32"),
|
||||
("t5_tRFC", "u32"),
|
||||
("t6_tRTW", "u32"),
|
||||
("t7_tWTR", "u32"),
|
||||
("t8_tREFI", "u32"),
|
||||
("mem_burst_latency", "u32"),
|
||||
("marikoCpuVmin", "u32"),
|
||||
("eristaGpuVmin", "u32"),
|
||||
("marikoGpuVmin", "u32"),
|
||||
("marikoGpuVmax", "u32"),
|
||||
("g_volt_76800", "u32"),
|
||||
("g_volt_153600", "u32"),
|
||||
("g_volt_230400", "u32"),
|
||||
("g_volt_307200", "u32"),
|
||||
("g_volt_384000", "u32"),
|
||||
("g_volt_460800", "u32"),
|
||||
("g_volt_537600", "u32"),
|
||||
("g_volt_614400", "u32"),
|
||||
("g_volt_691200", "u32"),
|
||||
("g_volt_768000", "u32"),
|
||||
("g_volt_844800", "u32"),
|
||||
("g_volt_921600", "u32"),
|
||||
("g_volt_998400", "u32"),
|
||||
("g_volt_1075200", "u32"),
|
||||
("g_volt_1152000", "u32"),
|
||||
("g_volt_1228800", "u32"),
|
||||
("g_volt_1267200", "u32"),
|
||||
("g_volt_1305600", "u32"),
|
||||
("g_volt_1344000", "u32"),
|
||||
("g_volt_1382400", "u32"),
|
||||
("g_volt_1420800", "u32"),
|
||||
("g_volt_1459200", "u32"),
|
||||
("g_volt_1497600", "u32"),
|
||||
("g_volt_1536000", "u32"),
|
||||
|
||||
|
||||
("g_volt_e_76800", "u32"),
|
||||
("g_volt_e_153600", "u32"),
|
||||
("g_volt_e_230400", "u32"),
|
||||
("g_volt_e_307200", "u32"),
|
||||
("g_volt_e_384000", "u32"),
|
||||
("g_volt_e_460800", "u32"),
|
||||
("g_volt_e_537600", "u32"),
|
||||
("g_volt_e_614400", "u32"),
|
||||
("g_volt_e_691200", "u32"),
|
||||
("g_volt_e_768000", "u32"),
|
||||
("g_volt_e_844800", "u32"),
|
||||
("g_volt_e_921600", "u32"),
|
||||
("g_volt_e_998400", "u32"),
|
||||
("g_volt_e_1075200", "u32"),
|
||||
# ("g_volt_e_1152000", "u32"),
|
||||
# ("g_volt_e_1228800", "u32"),
|
||||
|
||||
|
||||
]
|
||||
|
||||
fmt_map = {
|
||||
"u32": "I",
|
||||
"double": "d",
|
||||
}
|
||||
|
||||
def load_all_vars():
|
||||
c.load_entry_object("custRev", 0)
|
||||
c.load_entry_object("mtcConf", 0)
|
||||
c.load_entry_object("commonCpuBoostClock", 1)
|
||||
c.load_entry_object("commonEmcMemVolt", 2)
|
||||
c.load_entry_object("eristaCpuMaxVolt", 3)
|
||||
c.load_entry_object("eristaEmcMaxClock", 1)
|
||||
c.load_entry_object("marikoCpuMaxVolt", 3)
|
||||
c.load_entry_object("marikoEmcMaxClock", 1)
|
||||
c.load_entry_object("marikoEmcVddqVolt", 2)
|
||||
c.load_entry_object("marikoCpuUV", 5)
|
||||
c.load_entry_object("marikoGpuUV", 4)
|
||||
c.load_entry_object("eristaCpuUV", 5)
|
||||
c.load_entry_object("eristaGpuUV", 4)
|
||||
c.load_entry_object("enableMarikoGpuUnsafeFreqs", 0)
|
||||
c.load_entry_object("enableEristaGpuUnsafeFreqs", 0)
|
||||
c.load_entry_object("enableMarikoCpuUnsafeFreqs", 0)
|
||||
c.load_entry_object("enableEristaCpuUnsafeFreqs", 0)
|
||||
c.load_entry_object("commonGpuVoltOffset", 3)
|
||||
c.load_entry_object("marikoEmcDvbShift", 0)
|
||||
|
||||
# Advanced memory config
|
||||
c.load_entry_object("t1_tRCD", 5)
|
||||
c.load_entry_object("t2_tRP", 5)
|
||||
c.load_entry_object("t3_tRAS", 5)
|
||||
c.load_entry_object("t4_tRRD", 5)
|
||||
c.load_entry_object("t5_tRFC", 5)
|
||||
c.load_entry_object("t6_tRTW", 5)
|
||||
c.load_entry_object("t7_tWTR", 5)
|
||||
c.load_entry_object("t8_tREFI", 5)
|
||||
c.load_entry_object("mem_burst_latency", 5)
|
||||
c.load_entry_object("marikoCpuVmin", 3)
|
||||
c.load_entry_object("eristaGpuVmin", 3)
|
||||
c.load_entry_object("marikoGpuVmin", 3)
|
||||
c.load_entry_object("marikoGpuVmax", 3)
|
||||
# GPU voltage arrays
|
||||
for freq in [
|
||||
"76800", "153600", "230400", "307200", "384000", "460800", "537600",
|
||||
"614400", "691200", "768000", "844800", "921600", "998400", "1075200",
|
||||
"1152000", "1228800", "1267200", "1305600", "1344000", "1382400",
|
||||
"1420800", "1459200", "1497600", "1536000"
|
||||
]:
|
||||
c.load_entry_object(f"g_volt_{freq}", 3)
|
||||
|
||||
for e_freq in [
|
||||
"76800", "153600", "230400", "307200", "384000", "460800", "537600",
|
||||
"614400", "691200", "768000", "844800", "921600", "998400", "1075200"# ,
|
||||
# "1152000", "1228800"
|
||||
]:
|
||||
c.load_entry_object(f"g_volt_e_{e_freq}", 3)
|
||||
|
||||
|
||||
# Timings
|
||||
|
||||
timing_vars = [
|
||||
"d.t1_tRCD",
|
||||
"d.t2_tRP",
|
||||
"d.t3_tRAS",
|
||||
"d.t4_tRRD",
|
||||
"d.t5_tRFC",
|
||||
"d.t6_tRTW",
|
||||
"d.t7_tWTR",
|
||||
"d.t8_tREFI"
|
||||
]
|
||||
|
||||
timing_preset_default = [
|
||||
0, # tRCD
|
||||
0, # tRP
|
||||
0, # tRAS
|
||||
0, # tRRD
|
||||
0, # tRFC
|
||||
0, # tRTW
|
||||
0, # tWTR
|
||||
0, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_aamgcl_c = [
|
||||
4, # tRCD
|
||||
4, # tRP
|
||||
5, # tRAS
|
||||
5, # tRRD
|
||||
5, # tRFC
|
||||
5, # tRTW
|
||||
7, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_aamgcl_st = [
|
||||
4, # tRCD
|
||||
4, # tRP
|
||||
8, # tRAS
|
||||
6, # tRRD
|
||||
5, # tRFC
|
||||
7, # tRTW
|
||||
8, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_mgcj_c = [
|
||||
3, # tRCD
|
||||
2, # tRP
|
||||
4, # tRAS
|
||||
2, # tRRD
|
||||
4, # tRFC
|
||||
4, # tRTW
|
||||
4, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_mgcj_st = [
|
||||
4, # tRCD
|
||||
3, # tRP
|
||||
8, # tRAS
|
||||
2, # tRRD
|
||||
5, # tRFC
|
||||
4, # tRTW
|
||||
4, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_ab_mgcl_c = [
|
||||
4, # tRCD
|
||||
4, # tRP
|
||||
4, # tRAS
|
||||
4, # tRRD
|
||||
4, # tRFC
|
||||
5, # tRTW
|
||||
6, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_ab_mgcl_st = [
|
||||
4, # tRCD
|
||||
4, # tRP
|
||||
8, # tRAS
|
||||
5, # tRRD
|
||||
5, # tRFC
|
||||
6, # tRTW
|
||||
8, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
timing_preset_hb_mgch_c = [
|
||||
4, # tRCD
|
||||
4, # tRP
|
||||
4, # tRAS
|
||||
0, # tRRD
|
||||
1, # tRFC
|
||||
5, # tRTW
|
||||
4, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
timing_preset_hb_mgch_st = [
|
||||
4, # tRCD
|
||||
5, # tRP
|
||||
9, # tRAS
|
||||
1, # tRRD
|
||||
2, # tRFC
|
||||
6, # tRTW
|
||||
4, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_wtf_c = [
|
||||
4, # tRCD
|
||||
4, # tRP
|
||||
2, # tRAS
|
||||
5, # tRRD
|
||||
4, # tRFC
|
||||
6, # tRTW
|
||||
3, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_wtf_st = [
|
||||
5, # tRCD
|
||||
5, # tRP
|
||||
4, # tRAS
|
||||
5, # tRRD
|
||||
5, # tRFC
|
||||
6, # tRTW
|
||||
5, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_wte_c = [
|
||||
2, # tRCD
|
||||
2, # tRP
|
||||
2, # tRAS
|
||||
2, # tRRD
|
||||
4, # tRFC
|
||||
4, # tRTW
|
||||
4, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_wte_st = [
|
||||
3, # tRCD
|
||||
5, # tRP
|
||||
3, # tRAS
|
||||
3, # tRRD
|
||||
5, # tRFC
|
||||
4, # tRTW
|
||||
5, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_wtb_c = [
|
||||
4, # tRCD
|
||||
4, # tRP
|
||||
5, # tRAS
|
||||
5, # tRRD
|
||||
2, # tRFC
|
||||
6, # tRTW
|
||||
5, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_wtb_st = [
|
||||
6, # tRCD
|
||||
6, # tRP
|
||||
7, # tRAS
|
||||
7, # tRRD
|
||||
2, # tRFC
|
||||
6, # tRTW
|
||||
5, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_nee_c = [
|
||||
3, # tRCD
|
||||
3, # tRP
|
||||
2, # tRAS
|
||||
2, # tRRD
|
||||
5, # tRFC
|
||||
5, # tRTW
|
||||
4, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_nee_st = [
|
||||
4, # tRCD
|
||||
4, # tRP
|
||||
4, # tRAS
|
||||
3, # tRRD
|
||||
7, # tRFC
|
||||
6, # tRTW
|
||||
5, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_nme_c = [
|
||||
2, # tRCD
|
||||
2, # tRP
|
||||
1, # tRAS
|
||||
0, # tRRD
|
||||
1, # tRFC
|
||||
4, # tRTW
|
||||
3, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
timing_preset_nme_st = [
|
||||
3, # tRCD
|
||||
3, # tRP
|
||||
4, # tRAS
|
||||
0, # tRRD
|
||||
1, # tRFC
|
||||
4, # tRTW
|
||||
4, # tWTR
|
||||
6, # tREFI
|
||||
]
|
||||
|
||||
|
||||
# INI
|
||||
|
||||
skinTarget = 54 # default value
|
||||
|
||||
|
||||
PROFILES = {
|
||||
"V1_Erista": {
|
||||
"tskin_pcb_coefficients_console_on_fwdbg": 'str!"[6396, 119440]"',
|
||||
"tskin_pcb_coefficients_handheld_on_fwdbg": 'str!"[5817, 129580]"',
|
||||
"tskin_soc_coefficients_console_on_fwdbg": 'str!"[6182, 112480]"',
|
||||
"tskin_soc_coefficients_handheld_on_fwdbg": 'str!"[5464, 174190]"',
|
||||
},
|
||||
"V2_Mariko": {
|
||||
"tskin_pcb_coefficients_console_on_fwdbg": 'str!"[7338, 112161]"',
|
||||
"tskin_pcb_coefficients_handheld_on_fwdbg": 'str!"[6357, 168124]"',
|
||||
"tskin_soc_coefficients_console_on_fwdbg": 'str!"[6728, 129810]"',
|
||||
"tskin_soc_coefficients_handheld_on_fwdbg": 'str!"[5675, 203453]"',
|
||||
},
|
||||
"Lite_Mariko": {
|
||||
"tskin_pcb_coefficients_console_on_fwdbg": 'str!"[7338, 112161]"',
|
||||
"tskin_pcb_coefficients_handheld_on_fwdbg": 'str!"[5594, 209601]"',
|
||||
"tskin_soc_coefficients_console_on_fwdbg": 'str!"[6728, 129810]"',
|
||||
"tskin_soc_coefficients_handheld_on_fwdbg": 'str!"[5235, 199759]"',
|
||||
},
|
||||
"OLED_Mariko": {
|
||||
"tskin_pcb_coefficients_console_on_fwdbg": 'str!"[8051, -45213]"',
|
||||
"tskin_pcb_coefficients_handheld_on_fwdbg": 'str!"[7176, -33954]"',
|
||||
"tskin_soc_coefficients_console_on_fwdbg": 'str!"[7831, 57590]"',
|
||||
"tskin_soc_coefficients_handheld_on_fwdbg": 'str!"[9029, 4274]"',
|
||||
},
|
||||
}
|
||||
|
||||
BATTERY_SAVE_OPTIONS = {
|
||||
"bgtc": {
|
||||
"enable_halfawake": "u32!0x0",
|
||||
"minimum_interval_normal": "u32!0x7FFFFFFF",
|
||||
"minimum_interval_save": "u32!0x7FFFFFFF",
|
||||
"battery_threshold_save": "u32!0x64",
|
||||
"battery_threshold_stop": "u32!0x64",
|
||||
},
|
||||
"npns": {
|
||||
"background_processing": "u8!0x0",
|
||||
"sleep_periodic_interval": "u32!0x7FFFFFFF",
|
||||
"sleep_processing_timeout": "u32!0x0",
|
||||
"sleep_max_try_count": "u32!0x0",
|
||||
},
|
||||
"ns.notification": {
|
||||
"enable_download_task_list": "u8!0x0",
|
||||
"enable_download_ticket": "u8!0x0",
|
||||
"enable_network_update": "u8!0x0",
|
||||
"enable_random_wait": "u8!0x0",
|
||||
"enable_request_on_cold_boot": "u8!0x0",
|
||||
"enable_send_rights_usage_status_request": "u8!0x0",
|
||||
"enable_sync_elicense_request": "u8!0x0",
|
||||
"enable_version_list": "u8!0x0",
|
||||
"retry_interval_min": "u32!0x7FFFFFFF",
|
||||
"retry_interval_max": "u32!0x7FFFFFFF",
|
||||
"version_list_waiting_limit_bias": "u32!0x7FFFFFFF",
|
||||
"version_list_waiting_limit_min": "u32!0x7FFFFFFF",
|
||||
},
|
||||
"account": {
|
||||
"na_required_for_network_service": "u8!0x0",
|
||||
"na_license_verification_enabled": "u8!0x0",
|
||||
},
|
||||
"account.daemon": {
|
||||
"background_awaking_periodicity": "u32!0x7FFFFFFF",
|
||||
"initial_schedule_delay": "u32!0x7FFFFFFF",
|
||||
"profile_sync_interval": "u32!0x7FFFFFFF",
|
||||
"na_info_refresh_interval": "u32!0x7FFFFFFF",
|
||||
},
|
||||
"capsrv": {
|
||||
"enable_album_screenshot_filedata_verification": "u8!0x0",
|
||||
"enable_album_movie_filehash_verification": "u8!0x0",
|
||||
"enable_album_movie_filesign_verification": "u8!0x0",
|
||||
},
|
||||
"friends": {
|
||||
"background_processing": "u8!0x0",
|
||||
},
|
||||
"notification.presenter": {
|
||||
"snooze_interval_in_seconds": "u32!0x7FFFFFFF",
|
||||
"connection_retry_count": "u32!0x0",
|
||||
"alarm_pattern_total_repeat_count": "u32!0x0",
|
||||
"alarm_pattern_with_vibration_repeat_count": "u32!0x0",
|
||||
},
|
||||
"prepo": {
|
||||
"transmission_interval_min": "u32!0x7FFFFFFF",
|
||||
"transmission_retry_interval_min": "u32!0x7FFFFFFF",
|
||||
"transmission_retry_interval_max": "u32!0x7FFFFFFF",
|
||||
"transmission_interval_in_sleep": "u32!0x7FFFFFFF",
|
||||
"statistics_save_interval_min": "u32!0x7FFFFFFF",
|
||||
"statistics_post_interval": "u32!0x7FFFFFFF",
|
||||
"save_system_report": "u8!0x0",
|
||||
},
|
||||
"olsc": {
|
||||
"default_auto_upload_global_setting": "u8!0x0",
|
||||
"default_auto_download_global_setting": "u8!0x0",
|
||||
"autonomy_registration_interval_seconds": "u32!0x7FFFFFFF",
|
||||
"network_service_license_info_cache_expiration_seconds": "u32!0x7FFFFFFF",
|
||||
"postponed_transfer_task_processing_interval_seconds": "u32!0x7FFFFFFF",
|
||||
"retry_offset_seconds": "u32!0x7FFFFFFF",
|
||||
"network_trouble_detection_span_seconds": "u32!0x7FFFFFFF",
|
||||
"network_connection_polling_interval_seconds": "u32!0x7FFFFFFF",
|
||||
"is_save_data_backup_policy_check_required": "u8!0x0",
|
||||
"is_global_transfer_task_autonomy_registration_enabled": "u8!0x0",
|
||||
"is_on_event_transfer_task_registration_enabled": "u8!0x0",
|
||||
"is_periodic_transfer_task_registration_enabled": "u8!0x0",
|
||||
},
|
||||
"ntc": {
|
||||
"is_autonomic_correction_enabled": "u8!0x0",
|
||||
"autonomic_correction_interval_seconds": "u32!0x7FFFFFFF",
|
||||
"autonomic_correction_failed_retry_interval_seconds": "u32!0x7FFFFFFF",
|
||||
"autonomic_correction_immediate_try_count_max": "u32!0x0",
|
||||
"autonomic_correction_immediate_try_interval_milliseconds": "u32!0x7FFFFFFF",
|
||||
},
|
||||
"systemupdate": {
|
||||
"bgnup_retry_seconds": "u32!0x7FFFFFFF",
|
||||
},
|
||||
"ns.rights": {
|
||||
"skip_account_validation_on_rights_check": "u8!0x1",
|
||||
"next_available_time_of_unexpected_error": "u32!0x7FFFFFFF",
|
||||
},
|
||||
"pctl": {
|
||||
"intermittent_task_interval_seconds": "u32!0x7FFFFFFF",
|
||||
},
|
||||
"sprofile": {
|
||||
"adjust_polling_interval_by_profile": "u8!0x0",
|
||||
"polling_interval_sec_max": "u32!0x7FFFFFFF",
|
||||
"polling_interval_sec_min": "u32!0x7FFFFFFF",
|
||||
},
|
||||
}
|
||||
|
||||
PSM_OPTIONS = [
|
||||
{"name": "1024mA", "value": "u32!0x400"},
|
||||
{"name": "1280mA", "value": "u32!0x500"},
|
||||
{"name": "1536mA", "value": "u32!0x600"},
|
||||
{"name": "1660mA (Lite Default)", "value": "u32!0x67C"},
|
||||
{"name": "1792mA", "value": "u32!0x700"},
|
||||
{"name": "2048mA (Default)", "value": "u32!0x800"},
|
||||
{"name": "2304mA (UNSAFE)", "value": "u32!0x900"},
|
||||
{"name": "2560mA (UNSAFE)", "value": "u32!0xA00"},
|
||||
{"name": "2816mA (DANGEROUS)", "value": "u32!0xB00"},
|
||||
{"name": "3072mA (DANGEROUS)", "value": "u32!0xC00"},
|
||||
]
|
||||
|
||||
skin_t_entries = {
|
||||
"use_configurations_on_fwdbg": "u8!0x1",
|
||||
"tskin_rate_table_console_on_fwdbg": f'str!"[[-1000000,40000,0,0],[36000,43000,51,51],[43000,49000,51,128],[49000,{skinTarget}000,128,255],[{skinTarget}000,1000000,255,255]]"',
|
||||
"tskin_rate_table_handheld_on_fwdbg": f'str!"[[-1000000,40000,0,0],[36000,43000,51,51],[43000,49000,51,128],[49000,{skinTarget}000,128,255],[{skinTarget}000,1000000,255,255]]"',
|
||||
"holdable_tskin": "u32!0xEA60",
|
||||
"touchable_tskin": "u32!0xEA60"
|
||||
}
|
||||
# Thresholds
|
||||
|
||||
mariko_meme_threshold = 1536000
|
||||
|
||||
mariko_dangerous_gpu_threshold = 1382400
|
||||
mariko_unsafe_gpu_threshold = 1152000
|
||||
|
||||
erista_dangerous_gpu_threshold = 1151000
|
||||
erista_unsafe_gpu_threshold = 922000
|
||||
|
||||
mariko_voltage_step = 5
|
||||
erista_voltage_step = 5
|
||||
|
||||
mariko_gpu_offset_max = 50
|
||||
|
||||
mariko_gpu_min_volt = 480
|
||||
erista_gpu_min_volt = 700
|
||||
|
||||
|
||||
mariko_gpu_max_volt = 960
|
||||
erista_gpu_max_volt = 1000
|
||||
|
||||
mariko_gpu_max_vmin = 700
|
||||
erista_gpu_max_vmin = 850
|
||||
|
||||
mariko_cpu_min_vmin = 700
|
||||
mariko_cpu_max_vmin = 750
|
||||
|
||||
# TODO: Make more stuff configurable
|
||||
|
||||
|
||||
# COLORS
|
||||
danger_color = (255, 0, 0, 255)
|
||||
unsafe_color = (255, 165, 0, 255)
|
||||
safe_color = (255, 255, 255, 255)
|
||||
Reference in New Issue
Block a user