1 #!/usr/bin/python3 2 # SPDX-License-Identifier: GPL-2.0 3 4 import ctypes 5 import os 6 7 DBC_UID_SIZE = 16 8 DBC_NONCE_SIZE = 16 9 DBC_SIG_SIZE = 32 10 11 PARAM_GET_FMAX_CAP = (0x3,) 12 PARAM_SET_FMAX_CAP = (0x4,) 13 PARAM_GET_PWR_CAP = (0x5,) 14 PARAM_SET_PWR_CAP = (0x6,) 15 PARAM_GET_GFX_MODE = (0x7,) 16 PARAM_SET_GFX_MODE = (0x8,) 17 PARAM_GET_CURR_TEMP = (0x9,) 18 PARAM_GET_FMAX_MAX = (0xA,) 19 PARAM_GET_FMAX_MIN = (0xB,) 20 PARAM_GET_SOC_PWR_MAX = (0xC,) 21 PARAM_GET_SOC_PWR_MIN = (0xD,) 22 PARAM_GET_SOC_PWR_CUR = (0xE,) 23 24 DEVICE_NODE = "/dev/dbc" 25 26 lib = ctypes.CDLL("./dbc_library.so", mode=ctypes.RTLD_GLOBAL) 27 28 29 def handle_error(code): 30 raise OSError(code, os.strerror(code)) 31 32 33 def get_nonce(device, signature): 34 if not device: 35 raise ValueError("Device required") 36 buf = ctypes.create_string_buffer(DBC_NONCE_SIZE) 37 ret = lib.get_nonce(device.fileno(), ctypes.byref(buf), signature) 38 if ret: 39 handle_error(ret) 40 return buf.value 41 42 43 def set_uid(device, new_uid, signature): 44 if not signature: 45 raise ValueError("Signature required") 46 if not new_uid: 47 raise ValueError("UID required") 48 ret = lib.set_uid(device.fileno(), new_uid, signature) 49 if ret: 50 handle_error(ret) 51 return True 52 53 54 def process_param(device, message, signature, data=None): 55 if not signature: 56 raise ValueError("Signature required") 57 if type(message) != tuple: 58 raise ValueError("Expected message tuple") 59 arg = ctypes.c_int(data if data else 0) 60 sig = ctypes.create_string_buffer(signature, len(signature)) 61 ret = lib.process_param(device.fileno(), message[0], ctypes.pointer(sig), ctypes.pointer(arg)) 62 if ret: 63 handle_error(ret) 64 return arg.value, sig.value
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.