def receivePackets(self, timeout): packets = [] endTime = time.time() + timeout while 1: if len(packets): self._s.setblocking(0) else: newTimeout = endTime - time.time() if newTimeout < 0: self._s.setblocking(0) else: self._s.settimeout(newTimeout) try: frame = self._s.recvfrom(16)[0] except (socket.timeout, BlockingIOError): break packet = self._decodeFrame(frame) if not self._filterXcp or packet.data[0] == 0xFF or packet.data[ 0] == 0xFE: packets.append(packet) if self._dumpTraffic: print('RX ' + CANInterface.ID(packet.ident).getString() + ' ' + CANInterface.getDataHexString(packet.data)) return packets
def receivePackets(self, timeout): assert self._cfgdBitrate != None and self._cfgdFilter != None packets = [] endTime = time.time() + timeout while 1: try: if len(packets): packet = self._io.getReceived(timeout=0) else: newTimeout = endTime - time.time() if newTimeout < 0: packet = self._io.getReceived(timeout=0) else: packet = self._io.getReceived(timeout=newTimeout) except queue.Empty: break if len(packet.data) > 0 and (packet.data[0] == 0xFF or packet.data[0] == 0xFE): packets.append(packet) if self._dumpTraffic: print('RX ' + CANInterface.ID(packet.ident).getString() + ' ' + CANInterface.getDataHexString(packet.data)) return packets
def _doTransmit(self, data, ident): if self._dumpTraffic: print('TX ' + CANInterface.ID(ident).getString() + ' ' + CANInterface.getDataHexString(data)) self._setTXTypeByIdent(ident) self._updateBitrateTXType() if self._cfgdHeaderIdent != ident: if ident & 0x80000000: self._runCmdWithCheck( b'ATCP' + bytes('{:02x}'.format((ident >> 24) & 0x1F), 'utf-8')) self._runCmdWithCheck( b'ATSH' + bytes('{:06x}'.format(ident & 0xFFFFFF), 'utf-8')) else: self._runCmdWithCheck(b'ATSH' + bytes('{:03x}'.format(ident & 0x7FF), 'utf-8')) self._cfgdHeaderIdent = ident else: self._io.syncAndGetPrompt( self._intfcTimeout ) # Not synchronized by calling _runCmdWithCheck(), so do it here self._io.write(binascii.hexlify(data) + b'\r')
def transmitTo(self, data, ident): if self._dumpTraffic: print('TX ' + CANInterface.ID(ident).getString() + ' ' + CANInterface.getDataHexString(data)) frame = self._buildFrame(data, ident) import binascii print(binascii.hexlify(frame).decode('utf-8')) self._sendFrame(frame)
def transmitTo(self, data, ident): assert self._cfgdBitrate != None if self._dumpTraffic: print('TX ' + CANInterface.ID(ident).getString() + ' ' + CANInterface.getDataHexString(data)) frame = self._build_frame(data, ident) res = self._dll.icsneoTxMessages(self._neoObject, ctypes.byref(frame), self._icsNetId, 1) if res != 1: raise CANInterface.Error()
def receivePackets(self, timeout): assert self._cfgdBitrate != None packets = [] if timeout != 0: endTime = time.time() + timeout else: endTime = None while 1: if endTime != None: newTimeout = int((endTime - time.time()) * 1000) if newTimeout > 0: self._dll.icsneoWaitForRxMessagesWithTimeOut( self._neoObject, newTimeout) else: break else: endTime = 0 # allow one pass, then return on the next icsMsgs = (_ICSSpyMessage * 20000)() icsNMsgs = ctypes.c_int() icsNErrors = ctypes.c_int() res = self._dll.icsneoGetMessages(self._neoObject, icsMsgs, ctypes.byref(icsNMsgs), ctypes.byref(icsNErrors)) if res != 1: raise CANInterface.Error() for iMsg in range(icsNMsgs.value): if icsMsgs[iMsg].NetworkID == self._icsNetId: ident, data = self._decode_frame(icsMsgs[iMsg]) if (ident & self._mask) == self._filter and len(data) > 0 and ( data[0] == 0xFF or data[0] == 0xFE): packets.append(CANInterface.Packet(ident, data)) if self._dumpTraffic: print('RX ' + CANInterface.ID(ident).getString() + ' ' + CANInterface.getDataHexString(data)) if len(packets) != 0: break return packets