2 # SPDX-License-Identifier: GPL-2.0
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,)
24 DEVICE_NODE
= "/dev/dbc"
26 lib
= ctypes
.CDLL("./dbc_library.so", mode
=ctypes
.RTLD_GLOBAL
)
29 def handle_error(code
):
30 raise OSError(code
, os
.strerror(code
))
33 def get_nonce(device
, signature
):
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
)
43 def set_uid(device
, new_uid
, signature
):
45 raise ValueError("Signature required")
47 raise ValueError("UID required")
48 ret
= lib
.set_uid(device
.fileno(), new_uid
, signature
)
54 def process_param(device
, message
, signature
, data
=None):
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
))
64 return arg
.value
, sig
.value