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 @@
-
+
+
+
+
+
+
+
+
+
+ Hz
+
+
+
+ dBm
+
+
+
+
+
+
+
@@ -62,7 +83,7 @@
-
+
@@ -283,6 +304,10 @@
@@ -62,7 +62,7 @@
-
+
@@ -70,132 +70,26 @@
-
-
- MHz
-
-
-
-
+
+
MHz
-
-
-
- MHz
-
-
-
-
- MHz
+
+
+ dBm
-
-
-
-
-
-
-
- kHz
-
-
-
-
-
-
- dB
-
-
-
- dB
-
-
-
-
-
- MHz
-
-
-
-
-
-
-
-
-
-
Settings
-
-
+
+
dB
-
-
+
+
dBm
@@ -213,39 +107,10 @@
dBm
-
-
-
- dB
-
-
@@ -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;