def run(self): """run when our device driver thread is started""" self.apply_settings() addr = SettingsBase.get_setting(self, 'extended_address') xbee_manager = SettingsBase.get_setting(self, 'xbee_device_manager') dm = self.__core.get_service("device_driver_manager") xbee_manager = dm.instance_get(xbee_manager) self.__autotap = AutoTapStreamer(xbee_manager, addr) while 1: if self.__stopevent.isSet(): self.__stopevent.clear() break if self.property_get("ready_for_communication").value == 0: if self.__autotap.readyForCommunication(): vin = self.__autotap.getVIN() supported_parameters = [] for pid in self.__autotap.getSupportedParameters(): supported_parameters.append( AutoTapStreamer.PID_NAME_MAP[pid]) self.property_set("ready_for_communication", Sample(0, 1)) self.property_set("vin", Sample(0, vin)) self.property_set("supported_parameters", Sample(0, str(supported_parameters))) if self.property_get("ready_for_communication").value == 1: for pid in self.__autotap.getSupportedParameters(): val = self.__autotap.getParameterValues([pid]) pidValue = self.__autotap.\ convertValueToReadableFormat(pid, val[pid]) self.property_set(PID_NAME_MAP[pid], Sample(0, PID_TYPE_MAP[pid](pidValue))) time.sleep(SettingsBase.get_setting(self, "update_rate"))