def _send_packet(self, dest, packet):
        if self.software_only: return True
        self._select(dest);
        self.ser.flushInput()
        self.ser.flushOutput()

        crc = 0
        for ch in packet:
            crc = crc16_update(crc, ord(ch))

        encoded = pack7.pack_7bit(packet + pack("<H", crc))
        if len(encoded) != RAW_PACKET_SIZE:
            self.log.info("send_packet: Encoded packet size is wrong: %d vs %s" % (len(encoded), RAW_PACKET_SIZE))
            return False

        try:
            t0 = time()
            written = self.ser.write(chr(0xFF) + chr(0xFF) + encoded)
            if written != RAW_PACKET_SIZE + 2:
                self.log.info("Send timeout")
                return False

            if dest == DEST_BROADCAST:
                return True

            ch = self.ser.read(1)
            t1 = time()
            #self.log.info("packet time: %f" % (t1 - t0))
            if len(ch) < 1:
                self.log.info("send packet: read timeout")
                return False
        except Exception, err:
            self.log.info("SerialException: %s" % err);
            return False
Beispiel #2
0
    def _send_packet(self, dest, packet):
        if self.software_only: return True

        self._select(dest)
        self.ser.flushInput()
        self.ser.flushOutput()

        crc = 0
        for ch in packet:
            crc = crc16_update(crc, ord(ch))

        encoded = pack7.pack_7bit(packet + pack("<H", crc))
        if len(encoded) != RAW_PACKET_SIZE:
            log.error("send_packet: Encoded packet size is wrong: %d vs %s" %
                      (len(encoded), RAW_PACKET_SIZE))
            return False

        t0 = time()
        written = self.ser.write(chr(0xFF) + chr(0xFF) + encoded)
        if written != RAW_PACKET_SIZE + 2:
            log.error("Send timeout")
            return False

        if dest == DEST_BROADCAST:
            return True

        ch = self.ser.read(1)
        t1 = time()
        log.debug("packet time: %f" % (t1 - t0))
        if len(ch) < 1:
            log.error("send packet: read timeout")
            return False

        ack = ord(ch)
        if ack == PACKET_ACK_OK:
            return True
        if ack == PACKET_CRC_FAIL:
            log.error("send packet: packet ack crc fail")
            return False
        if ack == PACKET_ACK_TIMEOUT:
            log.error("send_packet: ack timeout")
            return False
        if ack == PACKET_ACK_INVALID:
            log.error("send_packet: dispenser received invalid packet")
            return False
        if ack == PACKET_ACK_INVALID_HEADER:
            log.error("send_packet: dispenser received invalid header")
            return False
        if ack == PACKET_ACK_HEADER_IN_PACKET:
            log.error("send_packet: header in packet error")
            return False

        # if we get an invalid ack code, it might be ok.
        log.error("send_packet: Invalid ACK code %d" % ord(ch))
        return False
Beispiel #3
0
    def send_packet(self, dest, packet):
        if self.software_only: return True

        self.select(dest)
        for attempt in xrange(3):
            self.ser.flushInput()
            self.ser.flushOutput()

            crc = 0
            for ch in packet:
                crc = self.crc16_update(crc, ord(ch))

            encoded = pack7.pack_7bit(packet + pack("<H", crc))
            if len(encoded) != RAW_PACKET_SIZE:
                print "ERROR: Encoded packet size is wrong: %d vs %s" % (
                    len(encoded), RAW_PACKET_SIZE)
                return False

            t0 = time()
            written = self.ser.write(chr(0xFF) + chr(0xFF) + encoded)
            if written != RAW_PACKET_SIZE + 2:
                print "ERROR: Send timeout"
                continue

            if dest == DEST_BROADCAST:
                return True

            ch = self.ser.read(1)
            t1 = time()
            #print "packet time: %f" % (t1 - t0)
            if len(ch) < 1:
                print "*** read timeout"
                continue

            ack = ord(ch)
            if ack == PACKET_ACK_OK: return True
            if ack == PACKET_CRC_FAIL:
                print "*** crc fail"
                continue
            if ack == PACKET_ACK_TIMEOUT:
                print "*** ack timeout"
                continue
            if ack == PACKET_ACK_INVALID:
                print "*** dispenser received invalid packet"
                continue
            if ack == PACKET_ACK_INVALID_HEADER:
                print "*** dispenser received invalid header"
                continue
            if ack == PACKET_ACK_HEADER_IN_PACKET:
                print "*** header in packet error"
                continue

            # if we get an invalid ack code, it might be ok.
            print "  * Invalid ACK code %d" % ord(ch)
        return False
Beispiel #4
0
    def send_packet(self, dest, packet):
        if self.software_only: return True

        self.select(dest);
        for attempt in xrange(3):
            self.ser.flushInput()
            self.ser.flushOutput()

            crc = 0
            for ch in packet:
                crc = self.crc16_update(crc, ord(ch))

            encoded = pack7.pack_7bit(packet + pack("<H", crc))
            if len(encoded) != RAW_PACKET_SIZE:
                print "ERROR: Encoded packet size is wrong: %d vs %s" % (len(encoded), RAW_PACKET_SIZE)
                return False

            t0 = time()
            written = self.ser.write(chr(0xFF) + chr(0xFF) + encoded)
            if written != RAW_PACKET_SIZE + 2:
                print "ERROR: Send timeout"
                continue

            if dest == DEST_BROADCAST:
                return True

            ch = self.ser.read(1)
            t1 = time()
            #print "packet time: %f" % (t1 - t0)
            if len(ch) < 1:
                print "*** read timeout"
                continue

            ack = ord(ch)
            if ack == PACKET_ACK_OK: return True
            if ack == PACKET_CRC_FAIL: 
                print "*** crc fail"
                continue
            if ack == PACKET_ACK_TIMEOUT: 
                print "*** ack timeout"
                continue
            if ack == PACKET_ACK_INVALID: 
                print "*** dispenser received invalid packet"
                continue
            if ack == PACKET_ACK_INVALID_HEADER: 
                print "*** dispenser received invalid header"
                continue
            if ack == PACKET_ACK_HEADER_IN_PACKET:
                print "*** header in packet error"
                continue

            # if we get an invalid ack code, it might be ok. 
            print "  * Invalid ACK code %d" % ord(ch)
        return False
Beispiel #5
0
    def _send_packet(self, dest, packet):
        if self.software_only: return True

        self._select(dest);
        self.ser.flushInput()
        self.ser.flushOutput()

        crc = 0
        for ch in packet:
            crc = crc16_update(crc, ord(ch))

        encoded = pack7.pack_7bit(packet + pack("<H", crc))
        if len(encoded) != RAW_PACKET_SIZE:
            log.error("send_packet: Encoded packet size is wrong: %d vs %s" % (len(encoded), RAW_PACKET_SIZE))
            return False

        t0 = time()
        written = self.ser.write(chr(0xFF) + chr(0xFF) + encoded)
        if written != RAW_PACKET_SIZE + 2:
            log.error("Send timeout")
            return False

        if dest == DEST_BROADCAST:
            return True

        ch = self.ser.read(1)
        t1 = time()
        log.debug("packet time: %f" % (t1 - t0))
        if len(ch) < 1:
            log.error("send packet: read timeout")
            return False

        ack = ord(ch)
        if ack == PACKET_ACK_OK: 
            return True
        if ack == PACKET_CRC_FAIL: 
            log.error("send packet: packet ack crc fail")
            return False
        if ack == PACKET_ACK_TIMEOUT: 
            log.error("send_packet: ack timeout")
            return False
        if ack == PACKET_ACK_INVALID: 
            log.error("send_packet: dispenser received invalid packet")
            return False
        if ack == PACKET_ACK_INVALID_HEADER: 
            log.error("send_packet: dispenser received invalid header")
            return False
        if ack == PACKET_ACK_HEADER_IN_PACKET:
            log.error("send_packet: header in packet error")
            return False

        # if we get an invalid ack code, it might be ok. 
        log.error("send_packet: Invalid ACK code %d" % ord(ch))
        return False
Beispiel #6
0
    def _send_packet(self, dest, packet):
        if self.software_only:
            return True

        self._select(dest)
        self.ser.flushInput()
        self.ser.flushOutput()

        crc = 0
        for ch in packet:
            crc = crc16_update(crc, ord(ch))

        encoded = pack7.pack_7bit(packet + pack("<H", crc))
        if len(encoded) != RAW_PACKET_SIZE:
            log.error("send_packet: Encoded packet size is wrong: %d vs %s" %
                      (len(encoded), RAW_PACKET_SIZE))
            return False

        try:
            t0 = time()
            written = self.ser.write(chr(0xFF) + chr(0xFF) + encoded)
            if written != RAW_PACKET_SIZE + 2:
                log.error("*** send timeout")
                log.error("*** dispenser: %d, type: %d" %
                          (dest + 1, ord(packet[1:2])))
                return False

            if dest == DEST_BROADCAST:
                return True

            ch = self.ser.read(1)
            t1 = time()
            log.debug("packet time: %f" % (t1 - t0))
            if len(ch) < 1:
                log.error("*** send packet: read timeout")
                log.error("*** dispenser: %d, type: %d" %
                          (dest + 1, ord(packet[1:2])))
                return False
        except SerialException, err:
            log.error("SerialException: %s" % err)
            return False