示例#1
0
    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)