implement first stages of active mode communication

This commit is contained in:
Jakob Ketterl
2020-04-26 15:17:03 +02:00
parent e61d3a22a3
commit 907787cfdc
7 changed files with 96 additions and 30 deletions

View File

@ -33,6 +33,7 @@
<script src="static/lib/Measurement.js"></script>
<script src="static/lib/FrequencyDisplay.js"></script>
<script src="static/lib/Js8Threads.js"></script>
<script src="static/lib/Modes.js"></script>
<link rel="stylesheet" type="text/css" href="static/lib/nanoscroller.css" />
<link rel="stylesheet" type="text/css" href="static/css/openwebrx.css" />
<meta charset="utf-8">

28
htdocs/lib/Modes.js Normal file
View File

@ -0,0 +1,28 @@
var Modes = {
modes: [],
features: {},
setModes:function(json){
this.modes = json.map(function(m){ return new Mode(m); });
},
setFeatures:function(features){
this.features = features;
},
findByModulation:function(modulation){
matches = this.modes.filter(function(m) { return m.modulation === modulation; });
if (matches.length) return matches[0]
}
}
var Mode = function(json){
this.modulation = json.modulation;
this.name = json.name;
this.requirements = json.requirements;
};
Mode.prototype.isAvailable = function(){
return this.requirements.map(function(r){
return Modes.features[r];
}).reduce(function(a, b){
return a && b;
}, true);
}

View File

@ -1177,6 +1177,10 @@ function on_ws_recv(evt) {
// set a higher reconnection timeout right away to avoid additional load
reconnect_timeout = 16000;
break;
case 'modes':
Modes.setModes(json['value']);
console.info(Modes);
break;
default:
console.warn('received message of unknown type: ' + json['type']);
}
@ -2014,6 +2018,11 @@ function demodulator_digital_replace_last() {
function demodulator_digital_replace(subtype) {
if (secondary_demod === subtype) return;
var mode = Modes.findByModulation(subtype);
if (mode && !mode.isAvailable()) {
divlog('Digital mode "' + mode.name + '" not supported. Please check requirements', true);
return;
}
switch (subtype) {
case "bpsk31":
case "bpsk63":