def run(self): """ Start SWAP server thread """ try: # Network configuration settings self._xmlnetwork = XmlNetwork(self._xmlSettings.network_file) self.devaddress = self._xmlnetwork.devaddress self.security = self._xmlnetwork.security self.password = Password(self._xmlnetwork.password) # Serial configuration settings self._xmlserial = XmlSerial(self._xmlSettings.serial_file) # Create and start serial modem object self.modem = SerialModem(self._xmlserial.port, self._xmlserial.speed, self.verbose) # Declare receiving callback function self.modem.setRxCallback(self._ccPacketReceived) # Set modem configuration from _xmlnetwork param_changed = False # Device address if self._xmlnetwork.devaddress is not None: if self.modem.devaddress != self._xmlnetwork.devaddress: if self.modem.setDevAddress(self._xmlnetwork.devaddress) == False: raise SwapException("Unable to set modem's device address to " + self._xmlnetwork.devaddress) else: param_changed = True # Device address if self._xmlnetwork.network_id is not None: if self.modem.syncword != self._xmlnetwork.network_id: if self.modem.setSyncWord(self._xmlnetwork.network_id) == False: raise SwapException("Unable to set modem's network ID to " + self._xmlnetwork.network_id) else: param_changed = True # Frequency channel if self._xmlnetwork.freq_channel is not None: if self.modem.freq_channel != self._xmlnetwork.freq_channel: if self.modem.setFreqChannel(self._xmlnetwork.freq_channel) == False: raise SwapException("Unable to set modem's frequency channel to " + self._xmlnetwork.freq_channel) else: param_changed = True # Return to data mode if necessary if param_changed == True: self.modem.goToDataMode() self.is_running = True # Notify parent about the start of the server self._eventHandler.swapServerStarted() # Discover motes in the current SWAP network self._discoverMotes() except SwapException: threading.Thread.__init__(self) raise threading.Thread.__init__(self)