def getInputs(self) -> List[Input]: return [ CheckboxInput("enabled", "Enable this device", converter=OptionalConverter(defaultFormValue=True)), GainInput("rf_gain", "Device gain", self.hasAgc()), NumberInput( "ppm", "Frequency correction", append="ppm", ), CheckboxInput( "always-on", "Keep device running at all times", infotext="Prevents shutdown of the device when idle. Useful for devices with unreliable startup.", ), CheckboxInput( "services", "Run background services on this device", ), ExponentialInput( "lfo_offset", "Oscillator offset", "Hz", infotext="Use this when the actual receiving frequency differs from the frequency to be tuned on the" + " device. <br/> Formula: Center frequency + oscillator offset = sdr tune frequency", ), WaterfallLevelsInput("waterfall_levels", "Waterfall levels"), SchedulerInput("scheduler", "Scheduler"), ExponentialInput("center_freq", "Center frequency", "Hz"), ExponentialInput("samp_rate", "Sample rate", "S/s"), ExponentialInput("start_freq", "Initial frequency", "Hz"), ModesInput("start_mod", "Initial modulation"), NumberInput("initial_squelch_level", "Initial squelch level", append="dBFS"), ]
def getInputs(self) -> List[Input]: return super().getInputs() + [ RemoteInput(), NumberInput("rf_gain", "LNA Gain", "LNA gain between 0 (-12dB) and 60 (48dB)", validator=RangeValidator(0, 60)), ]
def getInputs(self) -> List[Input]: return super().getInputs() + [ NumberInput( "rtltcp_compat", "Port for rtl_tcp compatible data", infotext="Activate an rtl_tcp compatible interface on the port number specified.<br />" + "Note: Port is only available on the local machine, not on the network.<br />" + "Note: IQ data may be degraded by the downsampling process to 8 bits.", ), CheckboxInput( "iqswap", "Swap I and Q channels", infotext="Swapping inverts the spectrum, so this is useful in combination with an inverting mixer", ), ]
def getSections(self): return [ Section( "Receiver information", TextInput("receiver_name", "Receiver name"), TextInput("receiver_location", "Receiver location"), NumberInput( "receiver_asl", "Receiver elevation", append="meters above mean sea level", ), TextInput("receiver_admin", "Receiver admin"), LocationInput("receiver_gps", "Receiver coordinates"), TextInput("photo_title", "Photo title"), TextAreaInput("photo_desc", "Photo description", infotext="HTML supported "), ), Section( "Receiver images", AvatarInput( "receiver_avatar", "Receiver Avatar", infotext="For performance reasons, images are cached. " + "It can take a few hours until they appear on the site.", ), TopPhotoInput( "receiver_top_photo", "Receiver Panorama", infotext="For performance reasons, images are cached. " + "It can take a few hours until they appear on the site.", ), ), Section( "Receiver limits", NumberInput( "max_clients", "Maximum number of clients", ), ), Section( "Receiver listings", TextAreaInput( "receiver_keys", "Receiver keys", converter=ReceiverKeysConverter(), infotext="Put the keys you receive on listing sites (e.g. " + '<a href="https://www.receiverbook.de" target="_blank">Receiverbook</a>) here, one per line', ), ), Section( "Waterfall settings", DropdownInput( "waterfall_scheme", "Waterfall color scheme", options=WaterfallOptions, ), TextAreaInput( "waterfall_colors", "Custom waterfall colors", infotext= "Please provide 6-digit hexadecimal RGB colors in HTML notation (#RRGGBB)" + " or HEX notation (0xRRGGBB), one per line", converter=WaterfallColorsConverter(), ), NumberInput( "fft_fps", "FFT speed", infotext= "This setting specifies how many lines are being added to the waterfall per second. " + "Higher values will give you a faster waterfall, but will also use more CPU.", append="frames per second", ), NumberInput("fft_size", "FFT size", append="bins"), FloatInput( "fft_voverlap_factor", "FFT vertical overlap factor", infotext= "If fft_voverlap_factor is above 0, multiple FFTs will be used for creating a line on the " + "diagram.", ), WaterfallLevelsInput("waterfall_levels", "Waterfall levels"), WaterfallAutoLevelsInput( "waterfall_auto_levels", "Automatic adjustment margins", infotext= "Specifies the upper and lower dynamic headroom that should be added when automatically " + "adjusting waterfall colors", ), NumberInput( "waterfall_auto_min_range", "Automatic adjustment minimum range", append="dB", infotext= "Minimum dynamic range the waterfall should cover after automatically adjusting " + "waterfall colors", ), ), Section( "Compression", DropdownInput( "audio_compression", "Audio compression", options=[ Option("adpcm", "ADPCM"), Option("none", "None"), ], ), DropdownInput( "fft_compression", "Waterfall compression", options=[ Option("adpcm", "ADPCM"), Option("none", "None"), ], ), ), Section( "Display settings", DropdownInput( "tuning_precision", "Tuning precision", options=[ Option(str(i), "{} Hz".format(10**i)) for i in range(0, 6) ], converter=IntConverter(), ), ), Section( "Map settings", TextInput( "google_maps_api_key", "Google Maps API key", infotext="Google Maps requires an API key, check out " + '<a href="https://developers.google.com/maps/documentation/embed/get-api-key" target="_blank">' + "their documentation</a> on how to obtain one.", ), NumberInput( "map_position_retention_time", "Map retention time", infotext= "Specifies how log markers / grids will remain visible on the map", append="s", ), ), ]
def getSections(self): return [ Section( "Demodulator settings", NumberInput( "squelch_auto_margin", "Auto-Squelch threshold", infotext= "Offset to be added to the current signal level when using the auto-squelch", append="dB", ), DropdownInput( "wfm_deemphasis_tau", "Tau setting for WFM (broadcast FM) deemphasis", WfmTauValues, infotext= 'See <a href="https://en.wikipedia.org/wiki/FM_broadcasting#Pre-emphasis_and_de-emphasis"' + ' target="_blank">this Wikipedia article</a> for more information', ), ), Section( "Digital voice", TextInput( "digital_voice_codecserver", "Codecserver address", infotext= "Address of a remote codecserver instance (name[:port]). Leave empty to use local" + " codecserver", converter=OptionalConverter(), ), CheckboxInput( "digital_voice_dmr_id_lookup", 'Enable lookup of DMR ids in the <a href="https://www.radioid.net/" target="_blank">' + "radioid</a> database to show callsigns and names", ), CheckboxInput( "digital_voice_nxdn_id_lookup", 'Enable lookup of NXDN ids in the <a href="https://www.radioid.net/" target="_blank">' + "radioid</a> database to show callsigns and names", ), ), Section( "Digimodes", NumberInput("digimodes_fft_size", "Digimodes FFT size", append="bins"), ), Section( "Decoding settings", NumberInput("decoding_queue_workers", "Number of decoding workers"), NumberInput("decoding_queue_length", "Maximum length of decoding job queue"), NumberInput( "wsjt_decoding_depth", "Default WSJT decoding depth", infotext= "A higher decoding depth will allow more results, but will also consume more cpu", ), WsjtDecodingDepthsInput( "wsjt_decoding_depths", "Individual decoding depths", ), NumberInput( "js8_decoding_depth", "Js8Call decoding depth", infotext= "A higher decoding depth will allow more results, but will also consume more cpu", ), Js8ProfileCheckboxInput("js8_enabled_profiles", "Js8Call enabled modes"), MultiCheckboxInput( "fst4_enabled_intervals", "Enabled FST4 intervals", [ Option(v, "{}s".format(v)) for v in Fst4Profile.availableIntervals ], ), MultiCheckboxInput( "fst4w_enabled_intervals", "Enabled FST4W intervals", [ Option(v, "{}s".format(v)) for v in Fst4wProfile.availableIntervals ], ), Q65ModeMatrix("q65_enabled_combinations", "Enabled Q65 Mode combinations"), ), ]
def getSections(self): return [ Section( "Demodulator settings", NumberInput( "squelch_auto_margin", "Auto-Squelch threshold", infotext= "Offset to be added to the current signal level when using the auto-squelch", append="dB", ), DropdownInput( "wfm_deemphasis_tau", "Tau setting for WFM (broadcast FM) deemphasis", WfmTauValues, infotext= 'See <a href="https://en.wikipedia.org/wiki/FM_broadcasting#Pre-emphasis_and_de-emphasis"' + ' target="_blank">this Wikipedia article</a> for more information', ), ), Section( "Digital voice", NumberInput( "digital_voice_unvoiced_quality", "Quality of unvoiced sounds in synthesized voice", infotext= "Determines the quality, and thus the cpu usage, for the ambe codec used by digital voice" + " modes.<br />If you're running on a Raspberry Pi (up to 3B+) you should leave this set at 1", ), CheckboxInput( "digital_voice_dmr_id_lookup", 'Enable lookup of DMR ids in the <a href="https://www.radioid.net/" target="_blank">' + "radioid</a> database to show callsigns and names", ), ), Section( "Digimodes", NumberInput("digimodes_fft_size", "Digimodes FFT size", append="bins"), ), Section( "Decoding settings", NumberInput("decoding_queue_workers", "Number of decoding workers"), NumberInput("decoding_queue_length", "Maximum length of decoding job queue"), NumberInput( "wsjt_decoding_depth", "Default WSJT decoding depth", infotext= "A higher decoding depth will allow more results, but will also consume more cpu", ), WsjtDecodingDepthsInput( "wsjt_decoding_depths", "Individual decoding depths", ), NumberInput( "js8_decoding_depth", "Js8Call decoding depth", infotext= "A higher decoding depth will allow more results, but will also consume more cpu", ), Js8ProfileCheckboxInput("js8_enabled_profiles", "Js8Call enabled modes"), MultiCheckboxInput( "fst4_enabled_intervals", "Enabled FST4 intervals", [ Option(v, "{}s".format(v)) for v in Fst4Profile.availableIntervals ], ), MultiCheckboxInput( "fst4w_enabled_intervals", "Enabled FST4W intervals", [ Option(v, "{}s".format(v)) for v in Fst4wProfile.availableIntervals ], ), Q65ModeMatrix("q65_enabled_combinations", "Enabled Q65 Mode combinations"), ), ]
def getSections(self): return [ Section( "APRS-IS reporting", CheckboxInput( "aprs_igate_enabled", "Send received APRS data to APRS-IS", infotext= "Due to limits of the APRS-IS network, reporting will only work for background decoders" ), TextInput( "aprs_callsign", "APRS callsign", infotext= "This callsign will be used to send data to the APRS-IS network", ), TextInput("aprs_igate_server", "APRS-IS server"), TextInput("aprs_igate_password", "APRS-IS network password"), CheckboxInput( "aprs_igate_beacon", "Send the receiver position to the APRS-IS network", infotext= "Please check that your receiver location is setup correctly before enabling the beacon", ), DropdownInput( "aprs_igate_symbol", "APRS beacon symbol", AprsBeaconSymbols, ), TextInput( "aprs_igate_comment", "APRS beacon text", infotext= "This text will be sent as APRS comment along with your beacon", converter=OptionalConverter(), ), NumberInput( "aprs_igate_height", "Antenna height", infotext="Antenna height above average terrain (HAAT)", append="m", converter=OptionalConverter(), ), NumberInput( "aprs_igate_gain", "Antenna gain", append="dBi", converter=OptionalConverter(), ), DropdownInput("aprs_igate_dir", "Antenna direction", AprsAntennaDirections), ), Section( "pskreporter settings", CheckboxInput( "pskreporter_enabled", "Enable sending spots to pskreporter.info", ), TextInput( "pskreporter_callsign", "pskreporter callsign", infotext= "This callsign will be used to send spots to pskreporter.info", ), TextInput( "pskreporter_antenna_information", "Antenna information", infotext= "Antenna description to be sent along with spots to pskreporter", converter=OptionalConverter(), ), ), Section( "WSPRnet settings", CheckboxInput( "wsprnet_enabled", "Enable sending spots to wsprnet.org", ), TextInput( "wsprnet_callsign", "wsprnet callsign", infotext= "This callsign will be used to send spots to wsprnet.org", ), ), ]