def start_receiver(): print(""" OpenWebRX - Open Source SDR Web App for Everyone! | for license see LICENSE file in the package _________________________________________________________________________________________________ Author contact info: Jakob Ketterl, DD5JFK <*****@*****.**> Documentation: https://github.com/jketterl/openwebrx/wiki Support and info: https://groups.io/g/openwebrx """) logger.info( "OpenWebRX version {0} starting up...".format(openwebrx_version)) for sig in [signal.SIGINT, signal.SIGTERM]: signal.signal(sig, handleSignal) # config warmup Config.validateConfig() coreConfig = CoreConfig() featureDetector = FeatureDetector() failed = featureDetector.get_failed_requirements("core") if failed: logger.error( "you are missing required dependencies to run openwebrx. " "please check that the following core requirements are installed and up to date: %s", ", ".join(failed)) for f in failed: description = featureDetector.get_requirement_description(f) if description: logger.error("description for %s:\n%s", f, description) return 1 # Get error messages about unknown / unavailable features as soon as possible # start up "always-on" sources right away SdrService.getAllSources() Services.start() try: server = ThreadedHttpServer(("0.0.0.0", coreConfig.get_web_port()), RequestHandler) server.serve_forever() except SignalException: pass WebSocketConnection.closeAll() Services.stop() SdrService.stopAllSources() ReportingEngine.stopAll() DecoderQueue.stopAll() return 0
def _sdrTypeAvailable(self, value): featureDetector = FeatureDetector() try: if not featureDetector.is_available(value["type"]): logger.error( 'The SDR source type "{0}" is not available. please check requirements.' .format(value["type"])) return False return True except UnknownFeatureException: logger.error( 'The SDR source type "{0}" is invalid. Please check your configuration' .format(value["type"])) return False
def getTypes(): def get_description(module_name): try: description = SdrDeviceDescription.getByType(module_name) return description.getName() except SdrDeviceDescriptionMissing: return None descriptions = { module_name: get_description(module_name) for _, module_name, _ in pkgutil.walk_packages(__path__) } # filter out empty names and unavailable types fd = FeatureDetector() return {k: v for k, v in descriptions.items() if v is not None and fd.is_available(k)}
def main(): print(""" OpenWebRX - Open Source SDR Web App for Everyone! | for license see LICENSE file in the package _________________________________________________________________________________________________ Author contact info: Jakob Ketterl, DD5JFK <*****@*****.**> Documentation: https://github.com/jketterl/openwebrx/wiki Support and info: https://groups.io/g/openwebrx """) logger.info( "OpenWebRX version {0} starting up...".format(openwebrx_version)) pm = Config.get() configErrors = Config.validateConfig() if configErrors: logger.error( "your configuration contains errors. please address the following errors:" ) for e in configErrors: logger.error(e) return featureDetector = FeatureDetector() if not featureDetector.is_available("core"): logger.error( "you are missing required dependencies to run openwebrx. " "please check that the following core requirements are installed and up to date:" ) logger.error(", ".join(featureDetector.get_requirements("core"))) return # Get error messages about unknown / unavailable features as soon as possible SdrService.loadProps() Services.start() try: server = ThreadedHttpServer(("0.0.0.0", pm["web_port"]), RequestHandler) server.serve_forever() except KeyboardInterrupt: WebSocketConnection.closeAll() Services.stop() PskReporter.stop()
def loadProps(): if SdrService.sdrProps is None: pm = PropertyManager.getSharedInstance() featureDetector = FeatureDetector() def loadIntoPropertyManager(dict: dict): propertyManager = PropertyManager() for (name, value) in dict.items(): propertyManager[name] = value return propertyManager def sdrTypeAvailable(value): try: if not featureDetector.is_available(value["type"]): logger.error( 'The RTL source type "{0}" is not available. please check requirements.' .format(value["type"])) return False return True except UnknownFeatureException: logger.error( 'The RTL source type "{0}" is invalid. Please check your configuration' .format(value["type"])) return False # transform all dictionary items into PropertyManager object, filtering out unavailable ones SdrService.sdrProps = { name: loadIntoPropertyManager(value) for (name, value) in pm["sdrs"].items() if sdrTypeAvailable(value) } logger.info("SDR sources loaded. Available SDRs: {0}".format( ", ".join( map(lambda x: x["name"], SdrService.sdrProps.values()))))
def __init__(self, conn): super().__init__(conn) self.dsp = None self.dspLock = threading.Lock() self.sdr = None self.configSubs = [] self.bookmarkSub = None self.connectionProperties = {} try: ClientRegistry.getSharedInstance().addClient(self) except TooManyClientsException: self.write_backoff_message("Too many clients") self.close() raise self.setupGlobalConfig() self.stack = self.setupStack() self.setSdr() features = FeatureDetector().feature_availability() self.write_features(features) modes = Modes.getModes() self.write_modes(modes) self.configSubs.append(SdrService.getActiveSources().wire( self._onSdrDeviceChanges)) self.configSubs.append(SdrService.getAvailableProfiles().wire( self._sendProfiles)) self._sendProfiles() CpuUsageThread.getSharedInstance().add_client(self)
def __init__(self, conn): super().__init__(conn) self.dsp = None self.sdr = None self.configSub = None self.connectionProperties = {} try: ClientRegistry.getSharedInstance().addClient(self) except TooManyClientsException: self.write_backoff_message("Too many clients") self.close() raise self.setSdr() features = FeatureDetector().feature_availability() self.write_features(features) modes = Modes.getModes() self.write_modes(modes) self.__sendProfiles() CpuUsageThread.getSharedInstance().add_client(self)
def isSupported(self, mode): # TODO this should be in a more central place (the frontend also needs this) requirements = { "ft8": "wsjt-x", "ft4": "wsjt-x", "jt65": "wsjt-x", "jt9": "wsjt-x", "wspr": "wsjt-x", "packet": "packet", } fd = FeatureDetector() # this looks overly complicated... but i'd like modes with no requirements to be always available without # being listed in the hash above unavailable = [mode for mode, req in requirements.items() if not fd.is_available(req)] configured = PropertyManager.getSharedInstance()["services_decoders"] available = [mode for mode in configured if mode not in unavailable] return mode in available
def main(): print(""" OpenWebRX - Open Source SDR Web App for Everyone! | for license see LICENSE file in the package _________________________________________________________________________________________________ Author contact info: Jakob Ketterl, DD5JFK <*****@*****.**> """) pm = PropertyManager.getSharedInstance().loadConfig() featureDetector = FeatureDetector() if not featureDetector.is_available("core"): print( "you are missing required dependencies to run openwebrx. " "please check that the following core requirements are installed:") print(", ".join(featureDetector.get_requirements("core"))) return # Get error messages about unknown / unavailable features as soon as possible SdrService.loadProps() if "sdrhu_key" in pm and pm["sdrhu_public_listing"]: updater = SdrHuUpdater() updater.start() Services.start() try: server = ThreadedHttpServer( ("0.0.0.0", pm.getPropertyValue("web_port")), RequestHandler) server.serve_forever() except KeyboardInterrupt: WebSocketConnection.closeAll() Services.stop() PskReporter.stop()
def __init__(self, conn): super().__init__(conn) self.dsp = None self.sdr = None self.configSub = None self.connectionProperties = {} try: ClientRegistry.getSharedInstance().addClient(self) except TooManyClientsException: self.write_backoff_message("Too many clients") self.close() raise pm = PropertyManager.getSharedInstance() self.setSdr() # send receiver info receiver_keys = [ "receiver_name", "receiver_location", "receiver_asl", "receiver_gps", "photo_title", "photo_desc", ] receiver_details = dict((key, pm.getPropertyValue(key)) for key in receiver_keys) receiver_details["locator"] = Locator.fromCoordinates(receiver_details["receiver_gps"]) self.write_receiver_details(receiver_details) self.__sendProfiles() features = FeatureDetector().feature_availability() self.write_features(features) CpuUsageThread.getSharedInstance().add_client(self)
def is_available(self): fd = FeatureDetector() return reduce(lambda a, b: a and b, [fd.is_available(r) for r in self.requirements], True)
def indexAction(self): data = json.dumps(FeatureDetector().feature_report()) self.send_response(data, content_type="application/json")