From 48b177defad424af2d307f956936221863aa9aa5 Mon Sep 17 00:00:00 2001 From: Jakob Ketterl Date: Sun, 17 May 2020 21:21:37 +0200 Subject: [PATCH] provision for a custom gain control --- htdocs/settings.js | 106 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 89 insertions(+), 17 deletions(-) diff --git a/htdocs/settings.js b/htdocs/settings.js index 7936176..278e1c0 100644 --- a/htdocs/settings.js +++ b/htdocs/settings.js @@ -1,7 +1,8 @@ -function Input(name, value, label) { +function Input(name, value, options) { this.name = name; this.value = value; - this.label = label; + this.options = options; + this.label = options && options.label || name; }; Input.prototype.bootstrapify = function(input) { @@ -36,6 +37,16 @@ NumberInput.prototype.render = function() { return this.bootstrapify($('')); }; +function SoapyGainInput() { + Input.apply(this, arguments); +} + +SoapyGainInput.prototype = new Input(); + +SoapyGainInput.prototype.render = function(){ + return this.bootstrapify($('
Soapy gain settings go here
')); +}; + function ProfileInput() { Input.apply(this, arguments); }; @@ -94,37 +105,49 @@ SdrDevice.prototype.getMappings = function() { return { "name": { constructor: TextInput, - label: "Name", + inputOptions: { + label: "Name" + }, initialValue: "", includeInDefault: true }, "type": { constructor: TextInput, - label: "Type", + inputOptions: { + label: "Type" + }, initialValue: '', includeInDefault: true }, "ppm": { constructor: NumberInput, - label: "PPM", + inputOptions: { + label: "PPM" + }, initialValue: 0 }, "profiles": { constructor: ProfileInput, - label: "Profiles", + inputOptions: { + label: "Profiles" + }, initialValue: [], includeInDefault: true, position: 100 }, "scheduler": { constructor: SchedulerInput, - label: "Scheduler", + inputOptions: { + label: "Scheduler", + }, initialValue: {}, position: 101 }, "rf_gain": { constructor: TextInput, - label: "Gain", + inputOptions: { + label: "Gain", + }, initialValue: 0 } }; @@ -140,11 +163,6 @@ SdrDevice.prototype.getInputClass = function(key) { return mapping && mapping.constructor || TextInput; }; -SdrDevice.prototype.getLabel = function(key) { - var mapping = this.getMapping(key); - return mapping && mapping.label || key; -}; - SdrDevice.prototype.getInitialValue = function(key) { var mapping = this.getMapping(key); return mapping && ('initialValue' in mapping) ? mapping['initialValue'] : false; @@ -155,6 +173,16 @@ SdrDevice.prototype.getPosition = function(key) { return mapping && mapping.position || 10; }; +SdrDevice.prototype.getInputOptions = function(key) { + var mapping = this.getMapping(key); + return mapping && mapping.inputOptions || {}; +}; + +SdrDevice.prototype.getLabel = function(key) { + var options = this.getInputOptions(key); + return options && options.label || key; +}; + SdrDevice.prototype.render = function() { var self = this; self.el.empty(); @@ -164,7 +192,7 @@ SdrDevice.prototype.render = function() { }).forEach(function(key){ var value = data[key]; var inputClass = self.getInputClass(key); - var input = new inputClass(key, value, self.getLabel(key)); + var input = new inputClass(key, value, self.getInputOptions(key)); self.inputs[key] = input; self.el.append(input.render()); }); @@ -190,7 +218,7 @@ SdrDevice.prototype.renderFieldSelector = function() { ''; }; -RtlSdrDevice = function(el, data) { +RtlSdrDevice = function() { SdrDevice.apply(this, arguments); }; @@ -202,14 +230,58 @@ RtlSdrDevice.prototype.getMappings = function() { return $.extend(new Object(), mappings, { "device": { constructor: TextInput, - label: "Serial Number", + inputOptions:{ + label: "Serial number" + }, initialValue: "" } }); }; +SoapySdrDevice = function() { + SdrDevice.apply(this, arguments); +}; + +SoapySdrDevice.prototype = Object.create(SdrDevice.prototype); +SoapySdrDevice.prototype.constructor = SoapySdrDevice; + +SoapySdrDevice.prototype.getMappings = function() { + var mappings = SdrDevice.prototype.getMappings.apply(this, arguments); + return $.extend(new Object(), mappings, { + "device": { + constructor: TextInput, + inputOptions:{ + label: "Soapy device selector" + }, + initialValue: "" + } + }); +}; + +SdrplaySdrDevice = function() { + SoapySdrDevice.apply(this, arguments); +}; + +SdrplaySdrDevice.prototype = Object.create(SoapySdrDevice.prototype); +SdrplaySdrDevice.prototype.constructor = SdrplaySdrDevice; + +SdrplaySdrDevice.prototype.getMappings = function() { + var mappings = SoapySdrDevice.prototype.getMappings.apply(this, arguments); + return $.extend(new Object(), mappings, { + "rf_gain": { + constructor: SoapyGainInput, + initialValue: 0, + inputOptions: { + label: "Gain", + gains: ['RFGR', 'IFGR'] + } + } + }); +}; + SdrDevice.types = { - 'rtl_sdr': RtlSdrDevice + 'rtl_sdr': RtlSdrDevice, + 'sdrplay': SdrplaySdrDevice }; $.fn.sdrdevice = function() {