Beispiel #1
0
 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"),
     ]
Beispiel #2
0
 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)),
     ]
Beispiel #3
0
 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",
         ),
     ]
Beispiel #4
0
 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",
             ),
         ),
     ]
Beispiel #5
0
 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"),
         ),
     ]
Beispiel #6
0
 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"),
         ),
     ]
Beispiel #7
0
 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",
             ),
         ),
     ]