Beispiel #1
0
    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')
Beispiel #4
0
 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)
Beispiel #5
0
    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()
Beispiel #6
0
    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