Files
pydepp/depp.py

55 lines
1.7 KiB
Python

import ctypes
from ctypes import c_bool, c_char_p, c_ubyte, c_void_p, POINTER
# Pfade zu den Digilent Libraries
libdmgr = ctypes.CDLL("/usr/lib64/digilent/adept/libdmgr.so")
libdepp = ctypes.CDLL("/usr/lib64/digilent/adept/libdepp.so")
# Typdefinition für das Handle
HIF = c_void_p
# Funktions-Signaturen definieren
libdmgr.DmgrOpen.argtypes = [POINTER(HIF), c_char_p]
libdmgr.DmgrOpen.restype = c_bool
libdmgr.DmgrClose.argtypes = [HIF]
libdmgr.DmgrClose.restype = c_bool
libdepp.DeppEnable.argtypes = [HIF]
libdepp.DeppEnable.restype = c_bool
libdepp.DeppDisable.argtypes = [HIF]
libdepp.DeppDisable.restype = c_bool
libdepp.DeppGetReg.argtypes = [HIF, c_ubyte, POINTER(c_ubyte), c_bool]
libdepp.DeppGetReg.restype = c_bool
libdepp.DeppPutReg.argtypes = [HIF, c_ubyte, c_ubyte, c_bool]
libdepp.DeppPutReg.restype = c_bool
class AdeptDepp:
def __init__(self, device_name: str):
self.hif = HIF()
ok = libdmgr.DmgrOpen(ctypes.byref(self.hif), device_name.encode())
if not ok:
raise RuntimeError(f"DmgrOpen failed for device '{device_name}'")
if not libdepp.DeppEnable(self.hif):
libdmgr.DmgrClose(self.hif)
raise RuntimeError("DeppEnable failed")
def get_reg(self, reg: int) -> int:
value = c_ubyte()
if not libdepp.DeppGetReg(self.hif, c_ubyte(reg), ctypes.byref(value), False):
raise RuntimeError(f"DeppGetReg failed at reg {reg}")
return value.value
def set_reg(self, reg: int, value: int):
if not libdepp.DeppPutReg(self.hif, c_ubyte(reg), c_ubyte(value), False):
raise RuntimeError(f"DeppPutReg failed at reg {reg}")
def close(self):
libdepp.DeppDisable(self.hif)
libdmgr.DmgrClose(self.hif)