2014-11-29 00:07:10 +00:00
<!DOCTYPE HTML>
<!--
2018-09-25 12:56:47 +00:00
This file is part of OpenWebRX,
an open-source SDR receiver software with a web UI.
Copyright (c) 2013-2015 by Andras Retzler < randras @ sdr . hu >
2021-01-22 17:10:51 +00:00
Copyright (c) 2019-2021 by Jakob Ketterl < dd5jfk @ darc . de >
2014-11-29 00:07:10 +00:00
2015-08-17 18:32:58 +00:00
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
2014-11-29 00:07:10 +00:00
2015-08-17 18:32:58 +00:00
This program is distributed in the hope that it will be useful,
2014-11-29 00:07:10 +00:00
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2015-08-17 18:32:58 +00:00
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see < http: / / www . gnu . org / licenses / > .
2014-11-29 00:07:10 +00:00
-->
< html >
2018-09-25 12:56:47 +00:00
< head >
< title > OpenWebRX | Open Source SDR Web App for Everyone!< / title >
2021-05-17 15:14:14 +00:00
< link rel = "shortcut icon" type = "image/x-icon" href = "static/favicon.ico" sizes = "16x16 32x32" / >
< link rel = "icon" type = "image/png" sizes = "32x32" href = "static/gfx/favicon32.png" / >
< link rel = "icon" type = "image/png" sizes = "44x44" href = "static/gfx/favicon44.png" / >
< link rel = "icon" type = "image/png" sizes = "64x64" href = "static/gfx/favicon64.png" / >
2021-05-17 15:19:12 +00:00
< link rel = "icon" type = "image/png" sizes = "96x96" href = "static/gfx/favicon96.png" / >
2021-05-17 15:14:14 +00:00
< link rel = "icon" type = "image/png" sizes = "128x128" href = "static/gfx/favicon128.png" / >
< link rel = "apple-touch-icon" href = "apple-touch-icon.png" >
< meta name = "msapplication-TileImage" content = "mstile-144x144.png" >
2020-05-02 11:35:42 +00:00
< script src = "compiled/receiver.js" > < / script >
2019-07-08 19:01:30 +00:00
< link rel = "stylesheet" type = "text/css" href = "static/lib/nanoscroller.css" / >
2019-07-11 11:44:04 +00:00
< link rel = "stylesheet" type = "text/css" href = "static/css/openwebrx.css" / >
2018-09-25 12:56:47 +00:00
< meta charset = "utf-8" >
2021-01-20 22:09:56 +00:00
< meta name = "viewport" content = "width=device-width, initial-scale=1, shrink-to-fit=no" / >
< meta name = "theme-color" content = "#222" / >
2018-09-25 12:56:47 +00:00
< / head >
< body onload = "openwebrx_init();" >
2014-11-29 00:07:10 +00:00
< div id = "webrx-page-container" >
2019-07-11 11:40:12 +00:00
${header}
2021-05-17 19:14:00 +00:00
< div class = "openwebrx-waterfall-container" >
< div id = "openwebrx-frequency-container" >
< div id = "openwebrx-bookmarks-container" > < / div >
< div id = "openwebrx-scale-container" >
< canvas id = "openwebrx-scale-canvas" width = "0" height = "0" > < / canvas >
< / div >
2019-11-01 18:48:08 +00:00
< / div >
2021-05-17 19:14:00 +00:00
< div id = "webrx-canvas-background" >
< div id = "webrx-canvas-container" >
<!-- add canvas here by javascript -->
2021-05-09 14:06:03 +00:00
< / div >
2021-05-17 19:14:00 +00:00
< / div >
< div id = "openwebrx-panels-container" >
< div id = "openwebrx-panels-container-left" >
< div class = "openwebrx-panel" id = "openwebrx-panel-digimodes" style = "display: none; width: 619px;" data-panel-name = "digimodes" >
< div id = "openwebrx-digimode-canvas-container" >
< div id = "openwebrx-digimode-select-channel" > < / div >
2019-10-26 19:32:00 +00:00
< / div >
2021-05-17 19:14:00 +00:00
< div id = "openwebrx-digimode-content-container" >
< div class = "gradient" > < / div >
< div id = "openwebrx-digimode-content" >
< span id = "openwebrx-cursor-blink" > < / span >
< / div >
2021-05-16 20:47:35 +00:00
< / div >
2019-10-26 19:32:00 +00:00
< / div >
2021-05-17 19:14:00 +00:00
< div class = "openwebrx-panel openwebrx-message-panel" id = "openwebrx-panel-wsjt-message" style = "display: none; width: 619px;" data-panel-name = "wsjt-message" > < / div >
< div class = "openwebrx-panel openwebrx-message-panel" id = "openwebrx-panel-js8-message" style = "display:none; width: 619px;" data-panel-name = "js8-message" > < / div >
< div class = "openwebrx-panel openwebrx-message-panel" id = "openwebrx-panel-packet-message" style = "display: none; width: 619px;" data-panel-name = "aprs-message" > < / div >
< div class = "openwebrx-panel openwebrx-message-panel" id = "openwebrx-panel-pocsag-message" style = "display: none; width: 619px;" data-panel-name = "pocsag-message" > < / div >
2021-12-21 20:18:17 +00:00
< div class = "openwebrx-panel openwebrx-meta-panel" id = "openwebrx-panel-metadata-m17" style = "display: none;" data-panel-name = "metadata-m17" >
< div class = "openwebrx-meta-slot" >
< div class = "openwebrx-meta-user-image" >
< img class = "directcall" src = "static/gfx/openwebrx-directcall.svg" >
< / div >
< div class = "openwebrx-m17-source" > < / div >
< div class = "openwebrx-m17-destination" > < / div >
< / div >
< / div >
2021-05-17 19:14:00 +00:00
< div class = "openwebrx-panel openwebrx-meta-panel" id = "openwebrx-panel-metadata-ysf" style = "display: none;" data-panel-name = "metadata-ysf" >
< div class = "openwebrx-meta-slot" >
< div class = "openwebrx-ysf-mode" > < / div >
< div class = "openwebrx-meta-user-image" >
< img class = "directcall" src = "static/gfx/openwebrx-directcall.svg" >
< / div >
< div class = "openwebrx-ysf-source" > < span class = "location" > < / span > < span class = "callsign" > < / span > < / div >
< div class = "openwebrx-ysf-up" > < / div >
< div class = "openwebrx-ysf-down" > < / div >
2021-05-16 20:47:35 +00:00
< / div >
2021-01-16 18:40:22 +00:00
< / div >
2021-06-08 11:37:13 +00:00
< div class = "openwebrx-panel openwebrx-meta-panel" id = "openwebrx-panel-metadata-dstar" style = "display: none;" data-panel-name = "metadata-dstar" >
< div class = "openwebrx-meta-slot" >
< div class = "openwebrx-meta-user-image" >
< img class = "directcall" src = "static/gfx/openwebrx-directcall.svg" >
< / div >
< div class = "openwebrx-dstar-ourcall" > < span class = "location" > < / span > < span class = "callsign" > < / span > < / div >
< div class = "openwebrx-dstar-message" > < / div >
< div class = "openwebrx-dstar-yourcall" > < / div >
< div class = "openwebrx-dstar-departure" > < / div >
< div class = "openwebrx-dstar-destination" > < / div >
< / div >
< / div >
2021-06-15 20:50:30 +00:00
< div class = "openwebrx-panel openwebrx-meta-panel" id = "openwebrx-panel-metadata-nxdn" style = "display: none;" data-panel-name = "metadata-nxdn" >
< div class = "openwebrx-meta-slot" >
< div class = "openwebrx-meta-user-image" >
< img class = "directcall" src = "static/gfx/openwebrx-directcall.svg" >
< img class = "groupcall" src = "static/gfx/openwebrx-groupcall.svg" >
< / div >
< div class = "openwebrx-nxdn-source" > < / div >
< div class = "openwebrx-nxdn-name" > < / div >
< div class = "openwebrx-nxdn-destination" > < / div >
< / div >
< / div >
2021-05-17 19:14:00 +00:00
< div class = "openwebrx-panel openwebrx-meta-panel" id = "openwebrx-panel-metadata-dmr" style = "display: none;" data-panel-name = "metadata-dmr" >
< div class = "openwebrx-meta-slot openwebrx-dmr-timeslot-panel" >
< div class = "openwebrx-dmr-slot" > Timeslot 1< / div >
< div class = "openwebrx-meta-user-image" >
< img class = "directcall" src = "static/gfx/openwebrx-directcall.svg" >
< img class = "groupcall" src = "static/gfx/openwebrx-groupcall.svg" >
< / div >
2021-09-17 16:24:33 +00:00
< div class = "openwebrx-dmr-id" > < span class = "location" > < / span > < span class = "dmr-id" > < / span > < / div >
2021-05-17 19:14:00 +00:00
< div class = "openwebrx-dmr-name" > < / div >
< div class = "openwebrx-dmr-target" > < / div >
< div class = "mute" >
< svg viewBox = "0 0 400 400" > < use xlink:href = "static/gfx/svg-defs.svg#meta-mute" > < / use > < / svg >
< / div >
2021-05-16 20:47:35 +00:00
< / div >
2021-05-17 19:14:00 +00:00
< div class = "openwebrx-meta-slot openwebrx-dmr-timeslot-panel" >
< div class = "openwebrx-dmr-slot" > Timeslot 2< / div >
< div class = "openwebrx-meta-user-image" >
< img class = "directcall" src = "static/gfx/openwebrx-directcall.svg" >
< img class = "groupcall" src = "static/gfx/openwebrx-groupcall.svg" >
< / div >
2021-09-17 16:24:33 +00:00
< div class = "openwebrx-dmr-id" > < span class = "location" > < / span > < span class = "dmr-id" > < / span > < / div >
2021-05-17 19:14:00 +00:00
< div class = "openwebrx-dmr-name" > < / div >
< div class = "openwebrx-dmr-target" > < / div >
< div class = "mute" >
< svg viewBox = "0 0 400 400" > < use xlink:href = "static/gfx/svg-defs.svg#meta-mute" > < / use > < / svg >
< / div >
2021-05-16 20:47:35 +00:00
< / div >
2019-10-26 19:32:00 +00:00
< / div >
2021-05-17 19:14:00 +00:00
< div class = "openwebrx-panel" id = "openwebrx-panel-log" data-panel-name = "debug" style = "width: 619px;" >
< div class = "openwebrx-panel-inner nano" id = "openwebrx-log-scroll" >
< div class = "nano-content" >
< div id = "openwebrx-client-log-title" > OpenWebRX client log< / div >
< div >
Author contact: < a href = "http://www.justjakob.de/" target = "_blank" > Jakob Ketterl, DD5JFK< / a > |
< a href = "https://www.openwebrx.de" target = "_blank" > OpenWebRX homepage< / a >
< / div >
< div > Support and information: < a href = "https://groups.io/g/openwebrx" target = "_blank" > Groups.io Mailinglist< / a > < / div >
< div id = "openwebrx-debugdiv" > < / div >
2020-05-08 21:49:02 +00:00
< / div >
2019-10-26 19:32:00 +00:00
< / div >
< / div >
2021-05-17 19:14:00 +00:00
< div class = "openwebrx-panel" id = "openwebrx-panel-status" data-panel-name = "status" style = "width: 615px;" data-panel-transparent = "true" >
< div class = "openwebrx-progressbar" id = "openwebrx-bar-audio-buffer" data-type = "audiobuffer" > < / div >
< div class = "openwebrx-progressbar" id = "openwebrx-bar-audio-output" data-type = "audiooutput" > < / div >
< div class = "openwebrx-progressbar" id = "openwebrx-bar-audio-speed" data-type = "audiospeed" > < / div >
< div class = "openwebrx-progressbar" id = "openwebrx-bar-network-speed" data-type = "networkspeed" > < / div >
< div class = "openwebrx-progressbar" id = "openwebrx-bar-server-cpu" data-type = "cpu" > < / div >
< div class = "openwebrx-progressbar" id = "openwebrx-bar-clients" data-type = "clients" > < / div >
< / div >
2019-10-26 19:32:00 +00:00
< / div >
2021-05-17 19:14:00 +00:00
< div id = "openwebrx-panels-container-right" >
< div class = "openwebrx-panel" id = "openwebrx-panel-receiver" data-panel-name = "client-params" style = "width: 259px;" >
< div class = "openwebrx-panel-line frequencies-container" >
< div class = "frequencies" >
< div class = "webrx-actual-freq" > < / div >
< div class = "webrx-mouse-freq" > < / div >
< / div >
< div class = "openwebrx-button openwebrx-square-button openwebrx-bookmark-button" style = "display:none;" title = "Add bookmark..." >
< svg viewBox = "0 0 80 80" > < use xlink:href = "static/gfx/svg-defs.svg#bookmark" > < / use > < / svg >
< / div >
2019-09-28 14:50:21 +00:00
< / div >
2021-05-17 19:14:00 +00:00
< div class = "openwebrx-panel-line" >
< select id = "openwebrx-sdr-profiles-listbox" onchange = "sdr_profile_changed();" >
< / select >
2021-05-15 21:02:06 +00:00
< / div >
2021-05-17 19:14:00 +00:00
< div class = "openwebrx-modes openwebrx-panel-line" > < / div >
< div class = "openwebrx-panel-line" >
< div title = "Mute on/off" class = "openwebrx-button openwebrx-slider-button openwebrx-mute-button" onclick = "toggleMute();" >
< svg class = "unmuted" viewBox = "0 0 80 80" > < use xlink:href = "static/gfx/svg-defs.svg#speaker" > < / use > < / svg >
< svg class = "muted" viewBox = "0 0 80 80" > < use xlink:href = "static/gfx/svg-defs.svg#speaker-muted" > < / use > < / svg >
< / div >
< input title = "Volume" id = "openwebrx-panel-volume" class = "openwebrx-panel-slider" type = "range" min = "0" max = "150" value = "50" step = "1" onchange = "updateVolume()" oninput = "updateVolume()" >
2022-11-21 01:26:24 +00:00
< div title = "Tuning step" class = "openwebrx-button openwebrx-slider-button" onclick = "tuning_step_reset();" >
2022-11-20 19:35:19 +00:00
< svg viewBox = "0 0 80 80" > < use xlink:href = "static/gfx/svg-defs.svg#tuning-step" > < / use > < / svg >
2022-11-20 04:37:27 +00:00
< / div >
< select id = "openwebrx-tuning-step-listbox" class = "openwebrx-panel-listbox" onchange = "tuning_step_changed();" >
< option value = "1" > < / option >
< option value = "100" > 100Hz< / option >
< option value = "500" > 500Hz< / option >
< option value = "1000" > 1kHz< / option >
< option value = "2500" > 2.5kHz< / option >
< option value = "3000" > 3kHz< / option >
< option value = "5000" > 5kHz< / option >
< option value = "6000" > 6kHz< / option >
< option value = "10000" > 10kHz< / option >
< option value = "12000" > 12kHz< / option >
< option value = "50000" > 50kHz< / option >
< / select >
2022-11-19 19:34:47 +00:00
< / div >
2022-11-20 19:35:19 +00:00
< div class = "openwebrx-panel-line" >
< div title = "Auto-set squelch level" class = "openwebrx-squelch-auto openwebrx-button openwebrx-slider-button" >
< svg viewBox = "0 0 80 80" > < use xlink:href = "static/gfx/svg-defs.svg#squelch" > < / use > < / svg >
< /div>
< input title = "Squelch" class = "openwebrx-squelch-slider openwebrx-panel-slider" type = "range" min = "-150" max = "0" value = "-150" step = "1" >
< div title = "Auto-adjust waterfall colors (right-click for continuous)" id = "openwebrx-waterfall-colors-auto" class = "openwebrx-button openwebrx-slider-button" >
< svg class = "auto" viewBox = "0 0 80 80" > < use xlink:href = "static/gfx/svg-defs.svg#waterfall-auto" > < / use > < / svg >
< svg class = "continuous" viewBox = "0 0 80 80" > < use xlink:href = "static/gfx/svg-defs.svg#waterfall-continuous" > < / use > < / svg >
< / div >
< input title = "Waterfall minimum level" id = "openwebrx-waterfall-color-min" class = "openwebrx-panel-slider" type = "range" min = "-200" max = "100" value = "50" step = "1" onchange = "updateWaterfallColors(0);" oninput = "updateVolume()" >
< / div >
< div class = "openwebrx-panel-line" >
< div title = "Noise reduction on/off" class = "openwebrx-nr-toggle openwebrx-button openwebrx-slider-button" onclick = "toggleNR();" >
< svg viewBox = "0 0 80 80" > < use xlink:href = "static/gfx/svg-defs.svg#noise-reduce" > < / use > < / svg >
< / div >
< input title = "Noise reduction level" disabled id = "openwebrx-panel-nr" class = "openwebrx-panel-slider" type = "range" min = "-10" max = "10" value = "0" step = "1" onchange = "updateNR()" oninput = "updateNR()" >
< div title = "Set waterfall colors to default" id = "openwebrx-waterfall-colors-default" class = "openwebrx-button openwebrx-slider-button" onclick = "waterfallColorsDefault()" >
< svg viewBox = "0 0 80 80" > < use xlink:href = "static/gfx/svg-defs.svg#waterfall-default" > < / use > < / svg >
< / div >
< input title = "Waterfall maximum level" id = "openwebrx-waterfall-color-max" class = "openwebrx-panel-slider" type = "range" min = "-200" max = "100" value = "50" step = "1" onchange = "updateWaterfallColors(1);" oninput = "updateVolume()" >
< / div >
2021-05-17 19:14:00 +00:00
< div class = "openwebrx-panel-line" >
< div class = "openwebrx-button openwebrx-square-button openwebrx-zoom-button" onclick = "zoomInOneStep();" title = "Zoom in one step" > < svg viewBox = "0 0 80 80" > < use xlink:href = "static/gfx/svg-defs.svg#zoom-in" > < / use > < / svg > < / div >
< div class = "openwebrx-button openwebrx-square-button openwebrx-zoom-button" onclick = "zoomOutOneStep();" title = "Zoom out one step" > < svg viewBox = "0 0 80 80" > < use xlink:href = "static/gfx/svg-defs.svg#zoom-out" > < / use > < / svg > < / div >
< div class = "openwebrx-button openwebrx-square-button openwebrx-zoom-button" onclick = "zoomInTotal();" title = "Zoom in totally" > < svg viewBox = "0 0 80 80" > < use xlink:href = "static/gfx/svg-defs.svg#zoom-in-total" > < / use > < / svg > < / div >
< div class = "openwebrx-button openwebrx-square-button openwebrx-zoom-button" onclick = "zoomOutTotal();" title = "Zoom out totally" > < svg viewBox = "0 0 80 80" > < use xlink:href = "static/gfx/svg-defs.svg#zoom-out-total" > < / use > < / svg > < / div >
< div id = "openwebrx-smeter-db" > 0 dB< / div >
2021-05-15 22:22:11 +00:00
< / div >
2021-05-17 19:14:00 +00:00
< div class = "openwebrx-panel-line" >
< div id = "openwebrx-smeter" >
< div class = "openwebrx-smeter-bar" > < / div >
< / div >
2018-09-25 12:56:47 +00:00
< / div >
2019-09-27 23:57:34 +00:00
< / div >
< / div >
< / div >
2021-05-17 19:14:00 +00:00
< div id = "openwebrx-error-overlay" class = "openwebrx-overlay" style = "display:none;" >
< div class = "overlay-content" >
< div > This receiver is currently unavailable due to technical issues.< / div >
< div > Error Message:< / div >
< div class = "errormessage" > < / div >
< / div >
< / div >
2018-09-25 12:56:47 +00:00
< / div >
2014-11-29 00:07:10 +00:00
< / div >
2021-05-16 15:47:02 +00:00
< div id = "openwebrx-autoplay-overlay" class = "openwebrx-overlay" style = "display:none;" >
< div class = "overlay-content" >
< svg viewBox = "0 0 700 700" > < use xlink:href = "static/gfx/svg-defs.svg#play-button" > < / use > < / svg >
< div > Start OpenWebRX< / div >
< / div >
< / div >
2019-09-28 17:20:21 +00:00
< div id = "openwebrx-dialog-bookmark" class = "openwebrx-dialog" style = "display:none;" >
< form >
< div class = "form-field" >
< label for = "name" > Name:< / label >
< input type = "text" id = "name" name = "name" required = "required" >
< / div >
< div class = "form-field" >
< label for = "frequency" > Frequency:< / label >
2019-09-28 18:15:47 +00:00
< input type = "number" id = "frequency" name = "frequency" >
2019-09-28 17:20:21 +00:00
< / div >
< div class = "form-field" >
< label for = "modulation" > Modulation:< / label >
2020-05-03 21:56:22 +00:00
< select name = "modulation" id = "modulation" > < / select >
2019-09-28 17:20:21 +00:00
< / div >
2019-09-28 18:15:47 +00:00
< div class = "buttons" >
< div class = "openwebrx-button" data-action = "cancel" > Cancel< / div >
< div class = "openwebrx-button" data-action = "submit" > Ok< / div >
< / div >
< input type = "submit" style = "display:none;" >
2019-09-28 17:20:21 +00:00
< / form >
< / div >
2018-09-25 12:56:47 +00:00
< / body >
2014-11-29 00:07:10 +00:00
< / html >