implement first stages of active mode communication
This commit is contained in:
@ -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
28
htdocs/lib/Modes.js
Normal 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);
|
||||
}
|
@ -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":
|
||||
|
Reference in New Issue
Block a user