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
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
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
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
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
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