def get(self, timeout): # type: (int) -> Any """ Wait until the slave module replies or the timeout expires. """ try: value = self._queue.get(timeout=timeout) if value is None: # No valid data could be received raise CommunicationTimedOutException( 'Empty or invalid slave data received') return value except Empty: raise CommunicationTimedOutException( 'No slave data received in {0}s'.format(timeout))
def get(self, timeout): # type: (Union[int, float]) -> Dict[str, Any] """ Wait until the uCAN (or CC) replies or the timeout expires. :param timeout: timeout in seconds :returns: dict containing the output fields of the command """ try: value = self._queue.get(timeout=timeout) if value is None: # No valid data could be received raise CommunicationTimedOutException('Empty or invalid uCAN data received') return value except Empty: raise CommunicationTimedOutException('No uCAN data received in {0}s'.format(timeout))
def get(self, timeout): """ Wait until the uCAN (or CC) replies or the timeout expires. :param timeout: timeout in seconds :raises: :class`CommunicationTimedOutException` if Core did not respond in time :returns: dict containing the output fields of the command """ try: value = self._queue.get(timeout=timeout) if value is None: # No valid data could be received raise CommunicationTimedOutException('Empty or invalid uCAN data received') return value except Empty: raise CommunicationTimedOutException('No uCAN data received in {0}s'.format(timeout))
def get(self, timeout): """ Wait until the master replies or the timeout expires. :param timeout: timeout in seconds :raises: :class`CommunicationTimedOutException` if master did not respond in time :returns: dict containing the output fields of the command """ try: return self.__queue.get(timeout=timeout) except Empty: raise CommunicationTimedOutException()
def get(self, timeout): # type: (Union[T_co, int]) -> Dict[str, Any] """ Wait until the Core replies or the timeout expires. :param timeout: timeout in seconds :returns: dict containing the output fields of the command """ try: return self._queue.get(timeout=timeout) except Empty: raise CommunicationTimedOutException('No Core data received in {0}s'.format(timeout))
def get(self, timeout): """ Wait until the Core replies or the timeout expires. :param timeout: timeout in seconds :raises: :class`CommunicationTimedOutException` if Core did not respond in time :returns: dict containing the output fields of the command """ try: return self._queue.get(timeout=timeout) except Empty: raise CommunicationTimedOutException( 'No Core data received in {0}s'.format(timeout))
def __read_from_serial(self): # type: () -> Tuple[bytearray, bytearray] """ Read a PowerCommand from the serial port. """ phase = 0 index = 0 header = bytearray() length = 0 data = bytearray() crc = 0 command = bytearray() try: while phase < 8: byte = self.__serial.read_queue.get(True, 0.25) command += byte self.__communication_stats_bytes['bytes_read'] += 1 if phase == 0: # Skip non 'R' bytes if byte == bytearray(b'R'): phase = 1 else: phase = 0 elif phase == 1: # Expect 'T' if byte == bytearray(b'T'): phase = 2 else: raise Exception("Unexpected character") elif phase == 2: # Expect 'R' if byte == bytearray(b'R'): phase = 3 index = 0 else: raise Exception("Unexpected character") elif phase == 3: # Read the header fields header += byte index += 1 if index == 8: length = ord(byte) if length > 0: phase = 4 index = 0 else: phase = 5 elif phase == 4: # Read the data data += byte index += 1 if index == length: phase = 5 elif phase == 5: # Read the CRC code crc = ord(byte) phase = 6 elif phase == 6: # Expect '\r' if byte == bytearray(b'\r'): phase = 7 else: raise Exception("Unexpected character") elif phase == 7: # Expect '\n' if byte == bytearray(b'\n'): phase = 8 else: raise Exception("Unexpected character") if PowerCommand.get_crc(header, data) != crc: raise Exception('CRC doesn\'t match') except Empty: raise CommunicationTimedOutException('Communication timed out') except Exception: self.__debug('reading from', command) raise finally: self.__debug('reading from', command) threshold = time.time() - self.__debug_buffer_duration self.__debug_buffer['read'][time.time()] = printable(command) for t in self.__debug_buffer['read'].keys(): if t < threshold: del self.__debug_buffer['read'][t] return header, data
def __read_from_serial(self): """ Read a PowerCommand from the serial port. """ phase = 0 index = 0 header = "" length = 0 data = "" crc = 0 command = "" try: while phase < 8: byte = self.__serial.read_queue.get(True, 0.25) command += byte self.__serial_bytes_read += 1 if phase == 0: # Skip non 'R' bytes if byte == 'R': phase = 1 else: phase = 0 elif phase == 1: # Expect 'T' if byte == 'T': phase = 2 else: raise Exception("Unexpected character") elif phase == 2: # Expect 'R' if byte == 'R': phase = 3 index = 0 else: raise Exception("Unexpected character") elif phase == 3: # Read the header fields header += byte index += 1 if index == 8: length = ord(byte) if length > 0: phase = 4 index = 0 else: phase = 5 elif phase == 4: # Read the data data += byte index += 1 if index == length: phase = 5 elif phase == 5: # Read the CRC code crc = ord(byte) phase = 6 elif phase == 6: # Expect '\r' if byte == '\r': phase = 7 else: raise Exception("Unexpected character") elif phase == 7: # Expect '\n' if byte == '\n': phase = 8 else: raise Exception("Unexpected character") if crc7(header + data) != crc: raise Exception("CRC doesn't match") except Empty: raise CommunicationTimedOutException('Communication timed out') finally: if self.__verbose: PowerCommunicator.__log('reading from', command) return header, data
def __read_from_serial(self): """ Read a PowerCommand from the serial port. """ phase = 0 index = 0 header = "" length = 0 data = "" crc = 0 command = "" try: while phase < 8: byte = self.__serial.read_queue.get(True, 0.25) command += byte self.__communication_stats['bytes_read'] += 1 if phase == 0: # Skip non 'R' bytes if byte == 'R': phase = 1 else: phase = 0 elif phase == 1: # Expect 'T' if byte == 'T': phase = 2 else: raise Exception("Unexpected character") elif phase == 2: # Expect 'R' if byte == 'R': phase = 3 index = 0 else: raise Exception("Unexpected character") elif phase == 3: # Read the header fields header += byte index += 1 if index == 8: length = ord(byte) if length > 0: phase = 4 index = 0 else: phase = 5 elif phase == 4: # Read the data data += byte index += 1 if index == length: phase = 5 elif phase == 5: # Read the CRC code crc = ord(byte) phase = 6 elif phase == 6: # Expect '\r' if byte == '\r': phase = 7 else: raise Exception("Unexpected character") elif phase == 7: # Expect '\n' if byte == '\n': phase = 8 else: raise Exception("Unexpected character") crc_match = (crc7(header + data) == crc) if header[0] == 'E' else (crc8(data) == crc) if not crc_match: raise Exception('CRC{0} doesn\'t match'.format( '7' if header[0] == 'E' else '8')) except Empty: raise CommunicationTimedOutException('Communication timed out') finally: if self.__verbose: PowerCommunicator.__log('reading from', command) threshold = time.time() - self.__debug_buffer_duration self.__debug_buffer['read'][time.time()] = printable(command) for t in self.__debug_buffer['read'].keys(): if t < threshold: del self.__debug_buffer['read'][t] return header, data