def receive_message(self, timeout_ms=500): """ Receives a message and stops either when the message is complete or when the allotted time expires, whichever comes first. """ self._calculate_deadline(timeout_ms=timeout_ms) if self._hook_message_signature() is False: logging.info("Failed to obtain message signature " "within allotted time") return False logging.debug("Got message signature.") header = self._receive_buffer(size=self._header.buffer_length) if header == []: logging.info("Failed to obtain message header " "within allotted time") return False logging.debug("Got message header.") self._header.unpack(packed_data="".join(header)) payload_len = \ self._header.message_len - \ self._signature.buffer_length - \ self._header.buffer_length - \ self._checksum.buffer_length if payload_len is not 0: self._payload = self._receive_buffer(size=payload_len) if self._payload == []: logging.info("Failed to obtain message payload " "within allotted time") return False logging.debug("Got message payload.") for _ in self._payload: logging.debug("payload {0}".format(binascii.hexlify(_))) else: logging.debug("Got empty message without payload.") self._payload = [] checksum = self._receive_buffer(size=self._checksum.buffer_length) if checksum == []: logging.info("Failed to obtain message checksum " "within allotted time") return False logging.debug("Got message checksum.") self._checksum.unpack(packed_data="".join(checksum)) calculated_checksum = \ MappedBuffer.calculate_checksum( [self._SIGNATURE[0], self._SIGNATURE[1], self._header.buffer_checksum, MappedBuffer.calculate_checksum(self._payload)]) if self._checksum.checksum == calculated_checksum: logging.info("RX: id = {0}\t\tpayload = {1}". format(self._header.message_id, self._payload)) logging.debug("Checksum verification successful.") return True else: logging.info("Checksum verification failed:\n" + "Received = {0}\n".format(self._checksum.checksum) + "Calculated = {0}".format(calculated_checksum)) return False
def receive_message(self, timeout_ms=500): """ Receives a message and stops either when the message is complete or when the allotted time expires, whichever comes first. """ self._calculate_deadline(timeout_ms=timeout_ms) if self._hook_message_signature() is False: logging.info("Failed to obtain message signature " "within allotted time") return False logging.debug("Got message signature.") header = self._receive_buffer(size=self._header.buffer_length) if header == []: logging.info("Failed to obtain message header " "within allotted time") return False logging.debug("Got message header.") self._header.unpack(packed_data="".join(header)) payload_len = \ self._header.message_len - \ self._signature.buffer_length - \ self._header.buffer_length - \ self._checksum.buffer_length if payload_len is not 0: self._payload = self._receive_buffer(size=payload_len) if self._payload == []: logging.info("Failed to obtain message payload " "within allotted time") return False logging.debug("Got message payload.") for _ in self._payload: logging.debug("payload {0}".format(binascii.hexlify(_))) else: logging.debug("Got empty message without payload.") self._payload = [] checksum = self._receive_buffer(size=self._checksum.buffer_length) if checksum == []: logging.info("Failed to obtain message checksum " "within allotted time") return False logging.debug("Got message checksum.") self._checksum.unpack(packed_data="".join(checksum)) calculated_checksum = \ MappedBuffer.calculate_checksum( [self._SIGNATURE[0], self._SIGNATURE[1], self._header.buffer_checksum, MappedBuffer.calculate_checksum(self._payload)]) if self._checksum.checksum == calculated_checksum: logging.info("RX: id = {0}\t\tpayload = {1}".format( self._header.message_id, self._payload)) logging.debug("Checksum verification successful.") return True else: logging.info("Checksum verification failed:\n" + "Received = {0}\n".format(self._checksum.checksum) + "Calculated = {0}".format(calculated_checksum)) return False
def transmit_message(self, payload=""): """ Transmits a message """ self._message_id = (self._message_id + 1) % 256 self._header.message_len = \ self._signature.buffer_length + \ self._header.buffer_length + \ len(payload) + \ self._checksum.buffer_length self._header.message_id = self._message_id message = self._signature.pack() + self._header.pack() + payload self._checksum.checksum = MappedBuffer.calculate_checksum(message) message = message + self._checksum.pack() logging.info("TX {0}".format(binascii.hexlify(message))) for character in message: self._write_char(character) self._flush()
def transmit_message(self, payload=""): """ Transmits a message """ self._message_id = (self._message_id + 1) % 256 self._header.message_len = \ self._signature.buffer_length + \ self._header.buffer_length + \ len(payload) + \ self._checksum.buffer_length self._header.message_id = self._message_id message = self._signature.pack() + self._header.pack() + payload self._checksum.checksum = MappedBuffer.calculate_checksum(message) message = message + self._checksum.pack() logging.info("TX {0}".format(binascii.hexlify(message))) for character in message: #check for python version if sys.version_info[0] == 2: self._write_char(character) elif sys.version_info[0] == 3: self._write_char(chr(character).encode("Latin-1")) self._flush()
def transmit_message(self, payload=""): """ Transmits a message """ self._message_id = (self._message_id + 1) % 256 self._header.message_len = \ self._signature.buffer_length + \ self._header.buffer_length + \ len(payload) + \ self._checksum.buffer_length self._header.message_id = self._message_id message = self._signature.pack() + self._header.pack() + payload self._checksum.checksum = MappedBuffer.calculate_checksum(message) message = message + self._checksum.pack() logging.info("TX {0}".format(binascii.hexlify(message))) for character in message: #check for python version if sys.version_info[0] == 2: self._write_char(character) elif sys.version_info[0] == 3: self._write_char(chr(character).encode("Latin-1")) self._flush()