#!/usr/bin/python3
# SPDX-License-Identifier: GPL-2.0
import ctypes
import os
DBC_UID_SIZE = 16
DBC_NONCE_SIZE = 16
DBC_SIG_SIZE = 32
PARAM_GET_FMAX_CAP = (0 x3,)
PARAM_SET_FMAX_CAP = (0 x4,)
PARAM_GET_PWR_CAP = (0 x5,)
PARAM_SET_PWR_CAP = (0 x6,)
PARAM_GET_GFX_MODE = (0 x7,)
PARAM_SET_GFX_MODE = (0 x8,)
PARAM_GET_CURR_TEMP = (0 x9,)
PARAM_GET_FMAX_MAX = (0 xA,)
PARAM_GET_FMAX_MIN = (0 xB,)
PARAM_GET_SOC_PWR_MAX = (0 xC,)
PARAM_GET_SOC_PWR_MIN = (0 xD,)
PARAM_GET_SOC_PWR_CUR = (0 xE,)
DEVICE_NODE = "/dev/dbc"
lib = ctypes.CDLL("./dbc_library.so" , mode=ctypes.RTLD_GLOBAL)
def handle_error(code):
raise OSError(code, os.strerror(code))
def get_nonce(device, signature):
if not device:
raise ValueError("Device required" )
buf = ctypes.create_string_buffer(DBC_NONCE_SIZE)
ret = lib.get_nonce(device.fileno(), ctypes.byref(buf), signature)
if ret:
handle_error(ret)
return buf.value
def set_uid(device, new_uid, signature):
if not signature:
raise ValueError("Signature required" )
if not new_uid:
raise ValueError("UID required" )
ret = lib.set_uid(device.fileno(), new_uid, signature)
if ret:
handle_error(ret)
return True
def process_param(device, message, signature, data=None ):
if not signature:
raise ValueError("Signature required" )
if type(message) != tuple:
raise ValueError("Expected message tuple" )
arg = ctypes.c_int(data if data else 0 )
sig = ctypes.create_string_buffer(signature, len(signature))
ret = lib.process_param(device.fileno(), message[0 ], ctypes.pointer(sig), ctypes.pointer(arg))
if ret:
handle_error(ret)
return arg.value, sig.value
Messung V0.5 in Prozent C=95 H=93 G=93
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet am 2026-06-08)
¤
*© Formatika GbR, Deutschland