def setUp(self): xl.OpenDriver() self.appName = bytes("pyxldrv".encode()) self.appChannel = 0 self.pHwType = [xl.XL_HWTYPE_VIRTUAL] self.pHwIndex = [0] self.pHwChannel = [0] self.busType = xl.XL_BUS_TYPE_CAN xl.SetApplConfig(self.appName, self.appChannel, self.pHwType, self.pHwIndex, self.pHwChannel, self.busType) xl.GetApplConfig(self.appName, self.appChannel, self.pHwType, self.pHwIndex, self.pHwChannel, self.busType) self.accessMask = xl.GetChannelMask(self.pHwType[0], self.pHwIndex[0], self.pHwChannel[0]) self.portHandle = [0] self.permissionMask = [self.accessMask] self.rxQueueSize = 2 ^ 10 self.xlInterfaceVersion = xl.XL_INTERFACE_VERSION xl.OpenPort(self.portHandle, self.appName, self.accessMask, self.permissionMask, self.rxQueueSize, self.xlInterfaceVersion, self.busType)
def test_openport_closeport(self): print(inspect.getframeinfo(inspect.currentframe())[2]) portHandle = [xl.XL_INVALID_PORTHANDLE] permissionMask = [self.accessMask] rxQueueSize = 2 ^ 10 appName = self.appName accessMask = self.accessMask xlInterfaceVersion = xl.XL_INTERFACE_VERSION busType = self.busType status = xl.OpenPort(portHandle, appName, accessMask, permissionMask, rxQueueSize, xlInterfaceVersion, busType) self.assertEqual(status, xl.XL_SUCCESS) self.assertNotEqual(portHandle, xl.XL_INVALID_PORTHANDLE) self.assertEqual(permissionMask[0], self.accessMask) status = xl.ClosePort(portHandle[0]) self.assertEqual(status, xl.XL_SUCCESS) status = xl.CloseDriver() self.assertEqual(status, xl.XL_SUCCESS)
def __init__(self, *, appName="pyxldrv", appChannel=0, HwType=xl.XL_HWTYPE_VIRTUAL, HwIndex=0, HwChannel=0, rxQueueSize=2**10, busType=xl.XL_BUS_TYPE_CAN, flags=xl.XL_ACTIVATE_RESET_CLOCK, queueLevel=1, logger=logger): self.log = logger self.log.debug( f"[{self.__class__.__name__:8}][{self.__init__.__name__:8}] new instance. appName:{appName}, appChannel:{appChannel}, HwType:{HwType}, HwIndex:{HwIndex}, HwChannel:{HwChannel}, rxQueueSize:{rxQueueSize}, busType:{busType}, flags:{flags}" ) # set by param self.appName = appName self.pHwType = [HwType] self.pHwIndex = [HwIndex] self.pHwChannel = [HwChannel] self.busType = busType self.rxQueueSize = rxQueueSize self.flags = flags self.appChannel = appChannel self.queueLevel = queueLevel # internal use self.accessMask = 0 self.portHandle = [0] self.permissionMask = [self.accessMask] self.xlInterfaceVersion = xl.XL_INTERFACE_VERSION self.xlHandle = [0] # internal use for error self.last_error = xl.XL_SUCCESS # # Setup Driver. see 4.2 Flowchart in "XL Driver Library - Description.pdf" # status = xl.OpenDriver() if status != xl.XL_SUCCESS: self.log.error( f"[{self.appName:8}][{self.__init__.__name__:8}] !! OpenDriver() returned {status} !!" ) status = xl.SetApplConfig(bytes(self.appName.encode()), self.appChannel, self.pHwType, self.pHwIndex, self.pHwChannel, self.busType) if status != xl.XL_SUCCESS: self.log.debug( f"[{self.appName:8}][{self.__init__.__name__:8}] SetApplConfig returned {status}. appName:{self.appName}, appChannel:{self.appChannel}, pHwType:{self.pHwType}, pHwIndex:{self.pHwIndex}, pHwChannel:{self.pHwChannel}, busType:{self.busType}" ) status = xl.GetApplConfig(bytes(self.appName.encode()), self.appChannel, self.pHwType, self.pHwIndex, self.pHwChannel, self.busType) if status != xl.XL_SUCCESS: self.log.debug( f"[{self.appName:8}][{self.__init__.__name__:8}] GetApplConfig returned {status}. appName:{self.appName}, appChannel:{self.appChannel}, pHwType:{self.pHwType}, pHwIndex:{self.pHwIndex}, pHwChannel:{self.pHwChannel}, busType:{self.busType}" ) # accessMask should be OR(|=), if multi-HwChannels are used. (In this case, OR(|=) has little meaning.) self.accessMask |= xl.GetChannelMask(self.pHwType[0], self.pHwIndex[0], self.pHwChannel[0]) if self.accessMask == 0: self.log.error( f"[{self.appName:8}][{self.__init__.__name__:8}]!! GetChannelMask returned accessMask={self.accessMask}!! pHwType:{self.pHwType}, pHwIndex:{self.pHwIndex}, pHwChannel:{self.pHwChannel}" ) # permissionMask should be same as accessMask at when OpenPort timing. self.permissionMask = [self.accessMask] status = xl.OpenPort(self.portHandle, bytes(self.appName.encode()), self.accessMask, self.permissionMask, self.rxQueueSize, self.xlInterfaceVersion, self.busType) if status != xl.XL_SUCCESS: self.log.error( f"[{self.appName:8}][{self.__init__.__name__:8}]!! OpenPort returned {status} !! portHandle:{self.portHandle}, appName:{self.appName}, accessMask:{self.accessMask}, permissionMask:{self.permissionMask}, rxQueueSize:{self.rxQueueSize}, xlInterfaceVersion:{self.xlInterfaceVersion}, busType:{self.busType}" ) # check permissionMask for logging. see 3.2.9 xlOpenPort in "XL Driver Library - Description.pdf" if self.permissionMask[0] == 0: self.log.debug( f"[{self.appName:8}][{self.__init__.__name__:8}] permissionMask({self.permissionMask[0]}) is 0. If this is not init access for CANs, this is no issue." ) # check portHandle for logging. if self.portHandle[0] == xl.XL_INVALID_PORTHANDLE: self.log.error( f"[{self.appName:8}][{self.__init__.__name__:8}]!! portHandle({self.portHandle[0]}) is XL_INVALID_PORTHANDLE !!" ) status = xl.ActivateChannel(self.portHandle[0], self.accessMask, self.busType, self.flags) if status != xl.XL_SUCCESS: self.log.debug( f"[{self.appName:8}][{self.__init__.__name__:8}] ActivateChannel returned {status}. portHandle:{self.portHandle}, accessMask:{self.accessMask}, busType:{self.busType}, flags:{self.flags}" ) status = xl.SetNotification(self.portHandle[0], self.xlHandle, self.queueLevel) if status != xl.XL_SUCCESS: self.log.debug( f"[{self.appName:8}][{self.__init__.__name__:8}] SetNotification returned {status}. portHandle:{self.portHandle}, xlHandle:{self.xlHandle}, queueLevel:{self.queueLevel}" )