diff --git a/CHANGELOG.md b/CHANGELOG.md index 4af0dc6..f3df74f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ - Removed `port` configuration option; `rtltcp_compat` takes the port number with the new connectors - Added support for new WSJT-X modes FST4 and FST4W (only available with WSJT-X 2.3) - Added support for demodulating M17 digital voice signals using m17-cxx-demod +- New reporting infrastructur, allowing WSPR and FST4W spots to be sent to wsprnet.org - New devices supported: - HPSDR devices (Hermes Lite 2) - BBRF103 / RX666 / RX888 devices supported by libsddc diff --git a/config_webrx.py b/config_webrx.py index 2134508..2d68c81 100644 --- a/config_webrx.py +++ b/config_webrx.py @@ -361,7 +361,7 @@ aprs_symbols_path = "/usr/share/aprs-symbols/png" # Antenna direction (N, NE, E, SE, S, SW, W, NW). Omnidirectional by default # aprs_igate_dir = "NE" -# === PSK Reporter setting === +# === PSK Reporter settings === # enable this if you want to upload all ft8, ft4 etc spots to pskreporter.info # this also uses the receiver_gps setting from above, so make sure it contains a correct locator pskreporter_enabled = False @@ -369,6 +369,12 @@ pskreporter_callsign = "N0CALL" # optional antenna information, uncomment to enable #pskreporter_antenna_information = "Dipole" +# === WSPRNet reporting settings +# enable this if you want to upload WSPR spots to wsprnet.ort +# in addition to these settings also make sure that receiver_gps contains your correct location +wsprnet_enabled = False +wsprnet_callsign = "N0CALL" + # === Web admin settings === # this feature is experimental at the moment. it should not be enabled on shared receivers since it allows remote # changes to the receiver settings. enable for testing in controlled environment only. diff --git a/csdr/csdr.py b/csdr/csdr.py index 623d53c..c47220d 100644 --- a/csdr/csdr.py +++ b/csdr/csdr.py @@ -556,12 +556,12 @@ class dsp(object): # wideband fm has a much higher frequency deviation (75kHz). # we cannot cover this if we immediately decimate to the sample rate the audio will have later on, so we need # to compensate here. - # the factor of 5 is by experimentation only, with a minimum audio rate of 36kHz (enforced by the client) - # this allows us to cover at least +/- 80kHz of frequency spectrum (may be higher, but that's the worst case). + # the factor of 6 is by experimentation only, with a minimum audio rate of 36kHz (enforced by the client) + # this allows us to cover at least +/- 108kHz of frequency spectrum (may be higher, but that's the worst case). # the correction factor is automatically compensated for by the secondary decimation stage, which comes # after the demodulator. if self.get_demodulator() == "wfm": - correction = 5 + correction = 6 while input_rate / (decimation + 1) >= output_rate * correction: decimation += 1 fraction = float(input_rate / decimation) / output_rate @@ -933,6 +933,3 @@ class dsp(object): return self.stop() self.start() - - def __del__(self): - self.stop() diff --git a/debian/changelog b/debian/changelog index b4f9544..3f4e41b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -7,6 +7,8 @@ openwebrx (0.21.0) UNRELEASED; urgency=low WSJT-X 2.3) * Added support for demodulating M17 digital voice signals using m17-cxx-demod + * New reporting infrastructur, allowing WSPR and FST4W spots to be sent to + wsprnet.org * New devices supported: - HPSDR devices (Hermes Lite 2) (`"type": "hpsdr"`) - BBRF103 / RX666 / RX888 devices supported by libsddc (`"type": "sddc"`) diff --git a/debian/control b/debian/control index 3538a8d..6654e6a 100644 --- a/debian/control +++ b/debian/control @@ -11,6 +11,6 @@ Vcs-Git: https://github.com/jketterl/openwebrx.git Package: openwebrx Architecture: all Depends: adduser, python3 (>= 3.5), python3-pkg-resources, csdr (>= 0.17), netcat, owrx-connector (>= 0.4), soapysdr-tools, python3-js8py (>= 0.1), ${python3:Depends}, ${misc:Depends} -Recommends: digiham (>= 0.3), dsd (>= 1.7), sox, direwolf (>= 1.4), wsjtx, eb200-connector, hpsdrconnector, aprs-symbols +Recommends: digiham (>= 0.3), dsd (>= 1.7), sox, direwolf (>= 1.4), wsjtx, eb200-connector, hpsdrconnector, aprs-symbols, m17-demod Description: multi-user web sdr Open source, multi-user SDR receiver with a web interface \ No newline at end of file diff --git a/htdocs/css/map.css b/htdocs/css/map.css index de6ef3e..44601e0 100644 --- a/htdocs/css/map.css +++ b/htdocs/css/map.css @@ -25,12 +25,19 @@ ul { padding-inline-start: 25px; } +/* don't show the filter in it's initial position */ .openwebrx-map-legend { + display: none; background-color: #fff; padding: 10px; margin: 10px; } +/* show it as soon as google maps has moved it to its container */ +.openwebrx-map .openwebrx-map-legend { + display: block; +} + .openwebrx-map-legend ul { list-style-type: none; padding: 0; diff --git a/htdocs/css/openwebrx-header.css b/htdocs/css/openwebrx-header.css index b22da87..83061f3 100644 --- a/htdocs/css/openwebrx-header.css +++ b/htdocs/css/openwebrx-header.css @@ -1,32 +1,36 @@ -#webrx-top-container -{ +#webrx-top-container { position: relative; z-index:1000; background-color: #575757; -} -#webrx-top-photo -{ - width: 100%; - display: block; -} + background-image: url(../gfx/openwebrx-top-photo.jpg); + background-position-x: center; + background-position-y: top; + background-repeat: no-repeat; + background-size: cover; -#webrx-top-photo-clip -{ - min-height: 67px; - max-height: 67px; - height: 350px; overflow: hidden; - position: relative; } -.webrx-top-bar-parts -{ +#openwebrx-description-container { + transition-property: height, opacity; + transition-duration: 1s; + transition-timing-function: ease-out; + opacity: 0; + height: 0; + /* originally, top-bar + description was 350px */ + max-height: 283px; + overflow: hidden; +} + +#openwebrx-description-container.expanded { + opacity: 1; + height: 283px; +} + +.webrx-top-bar-parts { height:67px; -} -#webrx-top-bar -{ background: rgba(128, 128, 128, 0.15); margin:0; padding:0; @@ -37,31 +41,28 @@ -moz-user-select: none; -ms-user-select: none; overflow: hidden; - position: absolute; - left: 0; - top: 0; - right: 0; + + display: flex; + flex-direction: row; } -#webrx-tob-container, #webrx-top-container * { +.webrx-top-bar-parts > * { + flex: 0; +} + +#webrx-top-container, #webrx-top-container * { line-height: initial; box-sizing: initial; } -#webrx-top-container img { - vertical-align: initial; -} - -#webrx-top-logo -{ +#webrx-top-logo { padding: 12px; - float: left; + /* overwritten by media queries */ + display: none; } -#webrx-rx-avatar -{ +#webrx-rx-avatar { background-color: rgba(154, 154, 154, .5); - float: left; margin: 7px; cursor:pointer; @@ -73,49 +74,45 @@ } #webrx-rx-texts { - float: left; - padding: 10px; + /* minimum layout width */ + width: 0; + /* will be getting wider with flex */ + flex: 1; + overflow: hidden; } #webrx-rx-texts div { + margin: 0 10px; padding: 3px; -} - -#webrx-rx-title -{ white-space:nowrap; overflow: hidden; cursor:pointer; - font-family: "DejaVu Sans", Verdana, Geneva, sans-serif; color: #909090; +} + +#webrx-rx-texts div:first-child { + margin-top: 10px; +} + +#webrx-rx-title { + font-family: "DejaVu Sans", Verdana, Geneva, sans-serif; font-size: 11pt; font-weight: bold; } -#webrx-rx-desc -{ - white-space:nowrap; - overflow: hidden; - cursor:pointer; +#webrx-rx-desc { font-size: 10pt; - color: #909090; } -#webrx-rx-desc a -{ - color: #909090; -} - -#openwebrx-rx-details-arrow -{ +#openwebrx-rx-details-arrow { cursor:pointer; position: absolute; - left: 470px; - top: 55px; + bottom: 0; + left: 50%; + transform: translate(-50%, 0); } -#openwebrx-rx-details-arrow a -{ +#openwebrx-rx-details-arrow a { margin: 0; padding: 0; line-height: 0; @@ -128,6 +125,11 @@ cursor:pointer; } +#openwebrx-main-buttons .button[data-toggle-panel] { + /* will be enabled by javascript if the panel is present in the DOM */ + display: none; +} + #openwebrx-main-buttons .button img { height: 38px; } @@ -137,23 +139,19 @@ text-decoration: inherit; } -#openwebrx-main-buttons .button:hover -{ +#openwebrx-main-buttons .button:hover { background-color: rgba(255, 255, 255, 0.3); } -#openwebrx-main-buttons .button:active -{ +#openwebrx-main-buttons .button:active { background-color: rgba(255, 255, 255, 0.55); } -#openwebrx-main-buttons -{ +#openwebrx-main-buttons { padding: 5px 15px; display: flex; list-style: none; - float: right; margin:0; color: white; text-shadow: 0px 0px 4px #000000; @@ -162,23 +160,17 @@ font-weight: bold; } -#webrx-rx-photo-title -{ - position: absolute; - left: 15px; - top: 78px; - color: White; +#webrx-rx-photo-title { + margin: 10px 15px; + color: white; font-size: 16pt; text-shadow: 1px 1px 4px #444; opacity: 1; } -#webrx-rx-photo-desc -{ - position: absolute; - left: 15px; - top: 109px; - color: White; +#webrx-rx-photo-desc { + margin: 10px 15px; + color: white; font-size: 10pt; font-weight: bold; text-shadow: 0px 0px 6px #444; @@ -186,12 +178,37 @@ line-height: 1.5em; } -#webrx-rx-photo-desc a -{ +#webrx-rx-photo-desc a { color: #5ca8ff; text-shadow: none; } +/* + * Responsive stuff + */ + +@media (min-width: 576px) { + #webrx-rx-texts { + display: initial; + } +} + +@media (min-width: 768px) { +} + +@media (min-width: 992px) { + #webrx-top-logo { + display: initial; + } +} + +@media (min-width: 1200px) { +} + +/* + * Sprites (images) + */ + .sprite-panel-status { background-position: 0 0; width: 44px; diff --git a/htdocs/css/openwebrx.css b/htdocs/css/openwebrx.css index c2e87fc..5ede36a 100644 --- a/htdocs/css/openwebrx.css +++ b/htdocs/css/openwebrx.css @@ -573,9 +573,10 @@ img.openwebrx-mirror-img .openwebrx-progressbar-text { position: absolute; - left:0px; - top:4px; - width: inherit; + left:50; + top:50%; + transform: translate(-50%, -50%); + white-space: nowrap; z-index: 1; } @@ -907,18 +908,30 @@ img.openwebrx-mirror-img border-color: Red; } +.openwebrx-meta-panel { + display: flex; + flex-direction: row; + gap: 10px; +} + .openwebrx-meta-slot { + flex: 1; width: 145px; height: 196px; - float: left; - margin-right: 10px; background-color: #676767; padding: 2px 0; color: #333; text-align: center; - position: relative; + + display: flex; + flex-direction: column; +} + +.openwebrx-meta-slot > * { + flex: 0; + flex-basis: 1.125em; } .openwebrx-meta-slot, .openwebrx-meta-slot.muted:before { @@ -960,13 +973,8 @@ img.openwebrx-mirror-img box-shadow: rgba(0, 0, 0, 0.2) 0 -1px 7px 1px, inset #304701 0 -1px 9px, #89FF00 0 2px 12px; } -.openwebrx-meta-slot:last-child { - margin-right: 0; -} - .openwebrx-meta-slot .openwebrx-meta-user-image { - width:100%; - height:133px; + flex: 1; background-position: center; background-repeat: no-repeat; } @@ -1233,12 +1241,12 @@ img.openwebrx-mirror-img height: 15px; } -#openwebrx-mute-on .sprite-speaker { - background-position: -117px -38px; +.openwebrx-mute-button .sprite-speaker { + background-position: -103px -38px; } -#openwebrx-mute-off .sprite-speaker { - background-position: -103px -38px; +.openwebrx-mute-button.muted .sprite-speaker { + background-position: -117px -38px; } .sprite-squelch { diff --git a/htdocs/include/header.include.html b/htdocs/include/header.include.html index c66aed1..ec31619 100644 --- a/htdocs/include/header.include.html +++ b/htdocs/include/header.include.html @@ -1,26 +1,25 @@
-
- Receiver panorama -
- - Receiver avatar -
-
-
-
-
- - -
-
-

Status
-

Log
-

Receiver
-
Map
- ${settingslink} -
+
+ + Receiver avatar +
+
+
+
+

Status
+

Log
+

Receiver
+
Map
+ ${settingslink} +
+
+
+
+ + +
diff --git a/htdocs/index.html b/htdocs/index.html index 3932923..a1e98d1 100644 --- a/htdocs/index.html +++ b/htdocs/index.html @@ -65,32 +65,28 @@