mirror of
https://gitlab.com/ryzen-controller-team/ryzen-controller.git
synced 2024-12-22 18:13:28 +07:00
71 lines
2.3 KiB
Python
71 lines
2.3 KiB
Python
|
import os, sys, time
|
||
|
from ctypes import *
|
||
|
from shutil import copyfile
|
||
|
|
||
|
lib_path = os.path.dirname(os.path.abspath(__file__))
|
||
|
os.chdir(lib_path)
|
||
|
|
||
|
if sys.platform == 'win32' or sys.platform == 'cygwin':
|
||
|
try:
|
||
|
os.add_dll_directory(lib_path)
|
||
|
except AttributeError:
|
||
|
pass #not needed for old python version
|
||
|
|
||
|
winring0_driver_file_path = os.path.join(os.path.dirname(os.path.abspath(sys.executable)), 'WinRing0x64.sys')
|
||
|
if not os.path.isfile(winring0_driver_file_path):
|
||
|
copyfile(os.path.join(lib_path, 'WinRing0x64.sys'), winring0_driver_file_path)
|
||
|
|
||
|
lib = cdll.LoadLibrary('libryzenadj')
|
||
|
else:
|
||
|
lib = cdll.LoadLibrary('libryzenadj.so')
|
||
|
|
||
|
# define ctype mappings for types which can not be mapped automatically
|
||
|
lib.init_ryzenadj.restype = c_void_p
|
||
|
lib.refresh_table.argtypes = [c_void_p]
|
||
|
lib.get_fast_limit.restype = c_float
|
||
|
lib.get_fast_limit.argtypes = [c_void_p]
|
||
|
|
||
|
ry = lib.init_ryzenadj()
|
||
|
|
||
|
if not ry:
|
||
|
sys.exit("RyzenAdj could not get initialized")
|
||
|
|
||
|
error_messages = {
|
||
|
-1: "{:s} is not supported on this family\n",
|
||
|
-3: "{:s} is not supported on this SMU\n",
|
||
|
-4: "{:s} is rejected by SMU\n"
|
||
|
}
|
||
|
|
||
|
def adjust(field, value):
|
||
|
function_name = "set_" + field
|
||
|
adjust_func = lib.__getattr__(function_name)
|
||
|
adjust_func.argtypes = [c_void_p, c_ulong]
|
||
|
res = adjust_func(ry, value)
|
||
|
if res:
|
||
|
error = error_messages.get(res, "{:s} did fail with {:d}\n")
|
||
|
sys.stderr.write(error.format(function_name, res));
|
||
|
|
||
|
def enable(field):
|
||
|
function_name = "set_" + field
|
||
|
adjust_func = lib.__getattr__(function_name)
|
||
|
adjust_func.argtypes = [c_void_p]
|
||
|
res = adjust_func(ry)
|
||
|
if res:
|
||
|
error = error_messages.get(res, "{:s} did fail with {:d}\n")
|
||
|
sys.stderr.write(error.format(function_name, res));
|
||
|
|
||
|
print("Monitor if fast limit is not 35W")
|
||
|
while True:
|
||
|
lib.refresh_table(ry)
|
||
|
limit = round(lib.get_fast_limit(ry))
|
||
|
if limit != 35:
|
||
|
print("reapply limits, because old limit was {:d}".format(limit))
|
||
|
adjust("fast_limit", 35000)
|
||
|
adjust("slow_limit", 22000)
|
||
|
adjust("slow_time", 30)
|
||
|
adjust("tctl_temp", 97)
|
||
|
adjust("apu_skin_temp_limit", 50)
|
||
|
adjust("vrmmax_current", 100000)
|
||
|
enable("max_performance")
|
||
|
time.sleep(3)
|