204 lines
6.9 KiB
Python
204 lines
6.9 KiB
Python
#!/usr/bin/python
|
|
# -*- coding:utf-8 -*-
|
|
|
|
from ctypes import c_int32, c_byte, c_uint8
|
|
from ctypes import create_unicode_buffer
|
|
from ctypes import pointer
|
|
|
|
from dummies.Automation.BDaq.BDaqApi import TArray, TerminalBoard
|
|
from dummies.Automation.BDaq.BDaqApi import TDeviceCtrl, BioFailed
|
|
from dummies.Automation.BDaq import ErrorCode
|
|
from dummies.Automation.BDaq import Utils
|
|
|
|
|
|
class DeviceCtrl(object):
|
|
def __init__(self, nativeDev):
|
|
self._nativeDev = nativeDev
|
|
|
|
# method
|
|
def refresh(self):
|
|
return ErrorCode.lookup(TDeviceCtrl.Refresh(self._nativeDev))
|
|
|
|
def readRegister(self, space, offset, length):
|
|
dataArr = (c_byte * length)()
|
|
data = []
|
|
ret = TDeviceCtrl.ReadRegister(self._nativeDev, space, offset, length, dataArr)
|
|
if not BioFailed(ret):
|
|
for i in range(length):
|
|
data.append(dataArr[i])
|
|
return ErrorCode.lookup(ret), data
|
|
|
|
def writeRegister(self, space, offset, length, data):
|
|
if not isinstance(data, list):
|
|
raise TypeError('a list is required')
|
|
if length != len(data):
|
|
raise ValueError('Length mismatch: length:%d, len(data):%d' % (length, len(data)))
|
|
dataArr = (c_byte * length)()
|
|
for i in range(length):
|
|
dataArr[i] = data[i]
|
|
ret = TDeviceCtrl.WriteRegister(self._nativeDev, space, offset, length, dataArr)
|
|
return ErrorCode.lookup(ret)
|
|
|
|
def readPrivateRegion(self, signature, length):
|
|
dataArr = (c_uint8 * length)()
|
|
data = []
|
|
|
|
ret = TDeviceCtrl.ReadPrivateRegion(self._nativeDev, signature, length, dataArr)
|
|
if not BioFailed(ret):
|
|
for i in range(length):
|
|
data.append(dataArr[i])
|
|
return ErrorCode.lookup(ret), data
|
|
|
|
def writePrivateRegion(self, signature, length, data):
|
|
if not isinstance(data, list):
|
|
raise TypeError('a list is required')
|
|
|
|
if length != len(data):
|
|
raise ValueError('Length mismatch: length:%d, len(data):%d' % (length, len(data)))
|
|
|
|
dataArr = (c_uint8 * length)()
|
|
for i in range(length):
|
|
dataArr[i] = data[i]
|
|
|
|
ret = TDeviceCtrl.WritePrivateRegion(self._nativeDev, signature, length, dataArr)
|
|
return ErrorCode.lookup(ret)
|
|
|
|
def synchronizeTimeBase(self):
|
|
return ErrorCode.lookup(TDeviceCtrl.SynchronizeTimebase(self._nativeDev))
|
|
|
|
def calculateAbsoluteTime(self, relativeTime):
|
|
if not isinstance(relativeTime, float):
|
|
raise TypeError('a float is required')
|
|
return TDeviceCtrl.CalculateAbsoluteTime(self._nativeDev, relativeTime)
|
|
|
|
# properties
|
|
@property
|
|
def deviceNumber(self):
|
|
return TDeviceCtrl.getDeviceNumber(self._nativeDev)
|
|
|
|
@property
|
|
def description(self):
|
|
descr = create_unicode_buffer(256)
|
|
TDeviceCtrl.getDescription(self._nativeDev, 256, descr)
|
|
|
|
return descr.value.encode()
|
|
|
|
@description.setter
|
|
def description(self, desc):
|
|
ret = ErrorCode.lookup(TDeviceCtrl.setDescription(self._nativeDev, len(desc), desc))
|
|
if BioFailed(ret):
|
|
raise ValueError('set description is failed, the error code is 0x%X' % (ret.value))
|
|
|
|
@property
|
|
def accessMode(self):
|
|
return Utils.toAccessMode(TDeviceCtrl.getAccessMode(self._nativeDev))
|
|
|
|
@property
|
|
def productId(self):
|
|
return Utils.toProductId(TDeviceCtrl.getProductId(self._nativeDev))
|
|
|
|
@property
|
|
def boardId(self):
|
|
return TDeviceCtrl.getBoardId(self._nativeDev)
|
|
|
|
@boardId.setter
|
|
def boardId(self, value):
|
|
ret = ErrorCode.lookup(TDeviceCtrl.setBoardId(self._nativeDev, value))
|
|
if BioFailed(ret):
|
|
raise ValueError('set boardId is failed, the error code is 0x%X' % (ret.value))
|
|
|
|
@property
|
|
def boardVersion(self):
|
|
version = create_unicode_buffer(256)
|
|
TDeviceCtrl.getBoardVersion(self._nativeDev, 256, version)
|
|
return version.value.encode()
|
|
|
|
@property
|
|
def driverVersion(self):
|
|
version = create_unicode_buffer(256)
|
|
TDeviceCtrl.getDriverVersion(self._nativeDev, 256, version)
|
|
return version.value.encode()
|
|
|
|
@property
|
|
def dllVersion(self):
|
|
version = create_unicode_buffer(256)
|
|
TDeviceCtrl.getDllVersion(self._nativeDev, 256, version)
|
|
return version.value.encode()
|
|
|
|
@property
|
|
def location(self):
|
|
version = create_unicode_buffer(256)
|
|
TDeviceCtrl.getLocation(self._nativeDev, 256, version)
|
|
return version.value.encode()
|
|
|
|
@property
|
|
def privateRegionLength(self):
|
|
return TDeviceCtrl.getPrivateRegionLength(self._nativeDev)
|
|
|
|
@property
|
|
def hotResetPreventable(self):
|
|
return TDeviceCtrl.getHotResetPreventable(self._nativeDev)
|
|
|
|
@property
|
|
def baseAddresses(self):
|
|
nativeArray = TDeviceCtrl.getBaseAddresses(self._nativeDev)
|
|
return TArray.ToInt64(nativeArray, True)
|
|
|
|
@property
|
|
def interrupts(self):
|
|
nativeArray = TDeviceCtrl.getInterrupts(self._nativeDev)
|
|
return TArray.ToInt32(nativeArray, True)
|
|
|
|
@property
|
|
def supportedTerminalBoard(self):
|
|
nativeArray = TDeviceCtrl.getSupportedTerminalBoard(self._nativeDev)
|
|
return TArray.ToTerminalBoard(nativeArray, True)
|
|
|
|
@property
|
|
def supportedEvents(self):
|
|
nativeArray = TDeviceCtrl.getSupportedEvents(self._nativeDev)
|
|
return TArray.ToEventId(nativeArray, True)
|
|
|
|
@property
|
|
def supportedScenarios(self):
|
|
return TDeviceCtrl.getSupportedScenarios(self._nativeDev)
|
|
|
|
@property
|
|
def terminalBoard(self):
|
|
return Utils.toTerminalBoard(TDeviceCtrl.getTerminalBoard(self._nativeDev))
|
|
|
|
@terminalBoard.setter
|
|
def terminalBoard(self, value):
|
|
if not isinstance(value, TerminalBoard):
|
|
raise TypeError("a TerminalBoard is required")
|
|
ret = ErrorCode.lookup(TDeviceCtrl.setTerminalBoard(self._nativeDev, value))
|
|
if BioFailed(ret):
|
|
raise ValueError('set terminalBoard is failed, the error code is 0x%X' % (ret.value))
|
|
|
|
def setLocateEnabled(self, value):
|
|
if not isinstance(value, bool):
|
|
raise TypeError('a bool is required')
|
|
return ErrorCode.lookup(TDeviceCtrl.setLocateEnabled(self._nativeDev, value))
|
|
|
|
@property
|
|
def installedDevices(self):
|
|
nativeArray = TDeviceCtrl.getInstalledDevices()
|
|
arr = TArray.toDeviceTreeNode(nativeArray, True)
|
|
return arr
|
|
|
|
def getHwSpecific(self, name):
|
|
dataArr = (c_int32 * 1)()
|
|
size = c_int32(4)
|
|
pSize = pointer(size)
|
|
data = None
|
|
ret = ErrorCode.lookup(TDeviceCtrl.getHwSpecific(self._nativeDev, name, pSize, dataArr))
|
|
if ret == ErrorCode.Success:
|
|
data = dataArr[0]
|
|
return ret, data
|
|
|
|
def setHwSpecific(self, name, data):
|
|
dataArr = (c_int32 * 1)()
|
|
dataArr[0] = data
|
|
ret = TDeviceCtrl.setHwSpecific(self._nativeDev, name, 4, dataArr)
|
|
return ErrorCode.lookup(ret)
|