def open(self): import pygatt kx_protocol_bus.open(self) mac_addr = evkit_config.get(self.config_section, 'mac_address') logger.info('Connecting to MAC address %s' % mac_addr) self._kx_port = proto.pygatt_com( mac_addr) ####kx_com_port(comport,baudrate, timeout = 1) self._kx_connection = proto.ProtocolEngine(self._kx_port) # run version request # FIXME improve try: self.send_message(proto.version_req()) response_data = self.receive_message(proto.EVKIT_MSG_VERSION_RESP) message_type, major_version, minor_version = proto.unpack_response_data( response_data) except Exception, e: # retry if error logger.debug('Version REQ failed. Flushing data and retry.') sleep(0.1) self._kx_port.flush() sleep(0.1) self.send_message(proto.version_req()) response_data = self.receive_message(proto.EVKIT_MSG_VERSION_RESP) message_type, major_version, minor_version = proto.unpack_response_data( response_data)
def open(self): kx_protocol_bus.open(self) if evkit_config.has_option(self.socket_config_block[self.index],'host'): host = evkit_config.get(self.socket_config_block[self.index],'host') else: host = 'localhost' if evkit_config.has_option(self.socket_config_block[self.index],'port'): port = evkit_config.getint(self.socket_config_block[self.index],'port') else: port = 8100 self._kx_port = self.socket_module_index[self.index](host=host, port=port, timeout = 3) self._kx_connection = proto.ProtocolEngine(self._kx_port) # run version request # FIXME improve try: self.send_message(proto.version_req()) reponse_data = self.receive_message(proto.EVKIT_MSG_VERSION_RESP, cache_messages = False) except proto.ProtocolException: raise proto.ProtocolException('No response from socket') try: message_type, major_version, minor_version = proto.unpack_response_data(reponse_data) except Exception,e: # retry if error logger.warning('Version REQ failed. Flushing data and retry.') sleep(0.1) self._kx_port.flush() sleep(0.1) self.send_message(proto.version_req()) reponse_data = self.receive_message(proto.EVKIT_MSG_VERSION_RESP, cache_messages = False) message_type, major_version, minor_version = proto.unpack_response_data(reponse_data)
def read_register(self, sensor, register, length=1): sad = self._sensortable[sensor] self.send_message(proto.read_req(sad, register, length)) resp = self.receive_message(proto.EVKIT_MSG_READ_RESP) try: resp = proto.unpack_response_data(resp) except proto.ProtocolBus1Exception: raise BusException('No response from bus 1') return self._format_resp(resp[1])
def wait_indication(self): # TODO consider sending list of accepted messages try: reponse_data = self.receive_message() except proto.ProtocolTimeoutException: # timeout is acceptable when waiting indcation message return None msg_id, payload = proto.unpack_response_data(reponse_data) return self._format_resp(payload)
def open(self): kx_protocol_bus.open(self) config_section = evkit_config.get('__com__','config') if evkit_config.get(config_section, 'com_port').lower() == 'auto': if os.name == 'posix': #Linux etc... if _platform == "darwin": # Apple comport = self.get_dev_darwin() else: # Linux comport = self.get_dev() else: comport = self.get_com_port() # windows OS else: comport = evkit_config.get(config_section, 'com_port') baudrate = evkit_config.getint(config_section, 'baudrate') delay_s = evkit_config.getint(config_section, 'start_delay_s') self._kx_port = kx_com_port(comport,baudrate, timeout = 2) self._reset_protocol_engine() if delay_s>0: logger.info('Waiting %d seconds', delay_s) sleep(delay_s) # run version request self._kx_port.flush() # Flush com port in case there is already some unwanted data self.send_message(proto.version_req()) # TODO if getting error message instead of EVKIT_MSG_VERSION_RESP, then resend version_req # TODO congfigure port latency if possible # Ref # windows user guide 4.1.4. FTDI USB Serial driver and # linux /sys/bus/usb-serial/devices/ttyUSB0/latency_timer # https://github.com/pyserial/pyserial/issues/287 try: reponse_data = self.receive_message(proto.EVKIT_MSG_VERSION_RESP, cache_messages = False) except ProtocolTimeoutException: logger.warning('Version REQ failed. Flushing data and retry.') self._kx_port.flush() # Flush com port in case there is already some unwanted data reponse_data = self.receive_message(proto.EVKIT_MSG_VERSION_RESP, cache_messages = False) message_type, major_version, minor_version = proto.unpack_response_data(reponse_data) self.verify_protocol_version(major_version, minor_version)
def gpio_read(self, gpio): "Reads physical GPIO pin" self.send_message(proto.gpio_state_req(gpio)) resp = self.receive_message(proto.EVKIT_MSG_GPIO_STATE_RESP) return proto.unpack_response_data(resp)[1]