diff --git a/SigLo.ino b/SigLo.ino index c589816..1c35242 100644 --- a/SigLo.ino +++ b/SigLo.ino @@ -107,6 +107,11 @@ void initSigLow() oldFreq = 0; // Force write of frequency on first loop +#ifdef USE_WIFI + if ( numberOfWebsocketClients > 0 ) + pushSettings (); +#endif + } @@ -128,6 +133,7 @@ void doSigGenLow () showUpDownButtons = 1; #endif + boolean changedSetting = false; // Get current touch state and coordinates boolean pressed = tft.getTouch(&t_x, &t_y); // Just uses standard TFT_eSPI function as not bothered about speed @@ -155,6 +161,7 @@ void doSigGenLow () case 5: case 6: incrementFreq( pow(10, 8-b) ); + changedSetting=true; break; case 7: // Decrement buttons @@ -165,6 +172,7 @@ void doSigGenLow () case 12: case 13: decrementFreq( pow(10, 15-b) ); + changedSetting=true; break; case 14: // Return to SAlo mode @@ -231,6 +239,7 @@ void doSigGenLow () tft.setTextColor(TFT_WHITE, SIG_BACKGROUND_COLOR ); tft.print("OFF"); } + changedSetting = true; } break; @@ -250,6 +259,7 @@ void doSigGenLow () drawSlider ( SLIDER_X, SLIDER_Y, p, pwr, "dBm" ); att.SetAtten ( ( 100.0 - p ) / 100.0 * ATTENUATOR_RANGE ); // set attenuator to give required output sigGenSetting.Power = pwr; + changedSetting = true; } @@ -278,13 +288,20 @@ void doSigGenLow () if (sigGenOutputOn) { delayMicroseconds(300); - SetRX(3); + SetRX(3); // both LO and RX in tx mode } + changedSetting = true; } oldFreq = sigGenSetting.Frequency; oldIF = setting.IF_Freq; oldSigGenOutputOn = sigGenOutputOn; + +#ifdef USE_WIFI + if ( numberOfWebsocketClients > 0 ) + pushSettings (); +#endif + } diff --git a/data/index.html b/data/index.html index 4faeb04..f8469a5 100644 --- a/data/index.html +++ b/data/index.html @@ -32,7 +32,7 @@ -TinySA-ESP +simpleSA @@ -41,7 +41,7 @@ -
+
+
+ + +
@@ -62,7 +83,7 @@ - + @@ -283,6 +304,10 @@
@@ -62,7 +62,7 @@ - + @@ -70,132 +70,26 @@
- - - MHz -
-
- - + + MHz

-
- - - MHz -
- - - - MHz + + + dBm
- -
- -
-
- - - kHz -
-
-
- - - kHz -
- -
-
- - - dB - - - - dB -
-
-
- - - MHz -
-
-
-
- - -
-
-
-
- - - - - dBm -
-
-
-
-
- - - - - ms -
-
-
-
- - - - - -
-
- - -

Settings

- - + + dB
- - + + dBm

@@ -213,39 +107,10 @@ dBm -
- - - dB -
-
+
MHz -
-
- -
@@ -287,258 +152,27 @@ var refreshInterval = document.getElementById('refreshInterval'); var refresh = document.getElementById('refresh'); var setMode = document.getElementById('setMode'); -var sweepStart = document.getElementById('sweepStart'); -var sweepStop = document.getElementById('sweepStop'); -var setStart = document.getElementById('setStart'); -var setStop = document.getElementById('setStop'); -var setCenter = document.getElementById('setCenter'); -var setSpan = document.getElementById('setSpan'); -var setAtten = document.getElementById('setAtten'); -var setExtern = document.getElementById('setExtern'); +var setFreq = document.getElementById('setFreq'); +var setLevel = document.getElementById('setLevel'); +var calLevel = document.getElementByID('calLevel'); + var setActPower = document.getElementById('setActPower'); -var levelOffset = document.getElementById('levelOffset'); -var setRefOut = document.getElementById('setRefOut'); -var sweepPoints = document.getElementById('sweepPoints'); -var sweepTime = document.getElementById('sweepTime'); -var setSpur = document.getElementById('spurReduction'); -var actRBW = document.getElementById('actRBW'); -var setRBW = document.getElementById('setRBW'); -var setDrive = document.getElementById('setLODrive'); +var setMaxPower = document.getElementByID('setMaxPower'); + +var setLODrive = document.getElementById('setLODrive'); var setIF = document.getElementById('setIF'); -var setPreAmp = document.getElementById('setPreAmp'); -var setAverage = document.getElementById('Average'); -var setTrackGen = document.getElementById('trackGen'); -var setTrackGenPower = document.getElementById('setTrackGenPower'); -var store1 = document.getElementById('store1'); -var store2 = document.getElementById('store2'); -var store3 = document.getElementById('store3'); -var store4 = document.getElementById('store4'); + //var messageWindow = document.getElementById('message'); -var tempCenter; // initialise these to silly values to force an update first time round -var oldSweepStart = -1; -var oldSweepStop = -1; -var oldSweepCenter = -1; -var oldSetRefOut = -2; -var oldSetRBW = -10; -var oldLevelOffset = 1000; -var oldAttenuation = 1000; -var oldExternalGain = 1000; -var oldDrive = -1; +var oldFreq = 0 +var oldSetLevel = 100; +var oldCalLevel = 100; +var oldMaxPower = 100; +var oldLODrive = -1; var oldIF = 0; -var oldPreAmp = 0; -var oldSweepPoints = 0; -var oldSpur = 2; -var oldTrackGen = 2; -var oldTrackGenPower = 1000; -// Chart configuration - Scope -var RSSISamples = [ - {y:10}, - {y:11}, - {y:12}, - {y:13}, - {y:14}, - {y:15}, - {y:16}, - {y:17}, - {y:18}, - ]; // dummy for test - -var dBSamples = [ - {y:-10}, - {y:-20}, - {y:-23}, - {y:-90}, - {y:-120}, - {y:-100}, - {y:-80}, - {y:-30}, - {y:-40}, - ]; // dummy for test - -var gainSamples = [ - {x:0, y:42}, - {x:10, y:43}, - {x:20, y:44}, - {x:30, y:45}, - {x:40, y:46}, - {x:50, y:47}, - {x:80, y:48}, - {x:90, y:49}, - {x:100, y:40}, - ]; // dummy for test - -var store1Samples = [ - {x:0, y:42}, - {x:10, y:43}, - {x:20, y:44}, - {x:30, y:45}, - {x:40, y:46}, - {x:50, y:47}, - {x:80, y:48}, - {x:90, y:49}, - {x:100, y:40}, - ]; - -var store2Samples = [ - {x:0, y:42}, - {x:10, y:43}, - {x:20, y:44}, - {x:30, y:45}, - {x:40, y:46}, - {x:50, y:47}, - {x:80, y:48}, - {x:90, y:49}, - {x:100, y:40}, - ]; - - var store3Samples = [ - {x:0, y:42}, - {x:10, y:43}, - {x:20, y:44}, - {x:30, y:45}, - {x:40, y:46}, - {x:50, y:47}, - {x:80, y:48}, - {x:90, y:49}, - {x:100, y:40}, - ]; - - var store4Samples = [ - {x:0, y:42}, - {x:10, y:43}, - {x:20, y:44}, - {x:30, y:45}, - {x:40, y:46}, - {x:50, y:47}, - {x:80, y:48}, - {x:90, y:49}, - {x:100, y:40}, - ]; - - -var chartSA = new CanvasJS.Chart("chartSA", - { - animationEnabled: false, - zoomEnabled: true, - zoomType: "xy", - //height:800, - title: { - text: "ESP32 TinySA", - fontSize: 28 - }, - axisX: { - title: "Frequency (MHz)", - titleFontSize: 24 - }, - axisY: - { - title: "dB", - titleFontSize: 24, - minimum: -120 - }, - axisY2: [ - { - title: "RSSI", - titleFontSize: 24, - minimum: 0, - maximum: 255 - }, - { - title: "Gain", - titleFontSize: 24, - minimum: 0, - maximum: 50 - }], - exportEnabled: true, - legend: { - cursor: "pointer", - itemclick: function (e) { - //console.log("legend click: " + e.dataPointIndex); - //console.log(e); - if (typeof (e.dataSeries.visible) === "undefined" || e.dataSeries.visible) { - e.dataSeries.visible = false; - } else { - e.dataSeries.visible = true; - } - - e.chart.render(); - } - }, - data: [ - { - type: "line", - name: "dB", - dataPoints : dBSamples, - showInLegend : true - }, - { - type: "line", - name: "RSSI", - axisYType: "secondary", - dataPoints : RSSISamples, - showInLegend : true, - visible : false - }, - { - type: "line", - name: "gain", - axisYType: "secondary", - axisYIndex: 1, - dataPoints : gainSamples, - showInLegend : true, - visible : false - }, - { - type: "line", - name: "average", - dataPoints : dBSamples, - showInLegend : true, - visible : false - }, - { - type: "line", - name: "min", - dataPoints : dBSamples, - showInLegend : true, - visible : false - }, - { - type: "line", - name: "store1", - dataPoints : store1Samples, - showInLegend : true, - visible : false - }, - { - type: "line", - name: "store2", - dataPoints : store2Samples, - showInLegend : true, - visible : false - }, - { - type: "line", - name: "store3", - dataPoints : store3Samples, - showInLegend : true, - visible : false - }, - { - type: "line", - name: "store4", - dataPoints : store4Samples, - showInLegend : true, - visible : false - } - ] - }); - - -renderChart(); // Add handlers for the change events in the input fields @@ -551,7 +185,7 @@ setMode.addEventListener('change', (event) => { sendValue("m", setMode.value); }); -setStart.addEventListener('change', (event) => { +setFreq.addEventListener('change', (event) => { sendValue("a", setStart.value); }); @@ -1287,7 +921,7 @@ function sendValue(c, val) // // Message format // #(code) value where code is a single char. Case is important - // a start freq (MHz) + // a start freq (MHz) - sig gen freq if in sig gen mode // b stop frequency // c centre frequency // s Span @@ -1304,6 +938,9 @@ function sendValue(c, val) // S Spur reduction Off/On // t trackGen Off/On/Fixed // T trackGen output level + // L Sig Gen level (dBm) + // G Sig Gen Off/On + // P Sig Gen set max output level (dBm) // //connection.send("# " + messageCounter + " " + sampleThreshold + " " + sampleSize); connection.send("#" + c + " " + val); diff --git a/data/styles.css b/data/styles.css index 9a58f19..de25140 100644 --- a/data/styles.css +++ b/data/styles.css @@ -192,8 +192,55 @@ input[type="number"] { .setting-label { width: 80px; display: inline-block; + } + +.freq-label { + width: 160px; + display: inline-block; + font-weight: bolder; + font-size: 32px; } + +.freq-input { + border: solid 1px grey; + text-align: right; + width: 160px; + display: inline-block; + font-weight: bolder; + font-size: 32px; + } + TH, .bold { background-color: lightblue; color: black; } + +.slider { + -webkit-appearance: none; + width: 100%; + height: 15px; + border-radius: 5px; + background: #d3d3d3; + outline: none; + opacity: 0.7; + -webkit-transition: .2s; + transition: opacity .2s; +} + +.slider::-webkit-slider-thumb { + -webkit-appearance: none; + appearance: none; + width: 25px; + height: 25px; + border-radius: 50%; + background: #4CAF50; + cursor: pointer; +} + +.slider::-moz-range-thumb { + width: 25px; + height: 25px; + border-radius: 50%; + background: #4CAF50; + cursor: pointer; +} diff --git a/simpleSA_wifi.cpp b/simpleSA_wifi.cpp index 1f41d21..0af1df8 100644 --- a/simpleSA_wifi.cpp +++ b/simpleSA_wifi.cpp @@ -239,8 +239,9 @@ void webSocketEvent ( uint8_t num, WStype_t type, uint8_t* payload, size_t paylo * E external gain ( eg attenuator(-ve) or preamp(+ve) ) * R requested RBW * S Spur reduction Off/On - * t trackGen Off/On/Fixed + * t trackGen Off/On/Generate * T trackGen output level + * f trackgen signal generator frequency * F Sig Gen frequency * L Sig Gen level (dBm) * G Sig Gen Off/On @@ -372,7 +373,7 @@ void webSocketEvent ( uint8_t num, WStype_t type, uint8_t* payload, size_t paylo SetSpur ( (int8_t)value ); break; - case 't': // Tracking Generator on/off + case 't': // Tracking Generator off/on/generate SetTracking ( (int8_t)value ); break;