Started on sig gen web page
This commit is contained in:
parent
8928adfeed
commit
acd6e2b6f4
19
SigLo.ino
19
SigLo.ino
@ -107,6 +107,11 @@ void initSigLow()
|
|||||||
|
|
||||||
oldFreq = 0; // Force write of frequency on first loop
|
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;
|
showUpDownButtons = 1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
boolean changedSetting = false;
|
||||||
|
|
||||||
// Get current touch state and coordinates
|
// 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
|
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 5:
|
||||||
case 6:
|
case 6:
|
||||||
incrementFreq( pow(10, 8-b) );
|
incrementFreq( pow(10, 8-b) );
|
||||||
|
changedSetting=true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 7: // Decrement buttons
|
case 7: // Decrement buttons
|
||||||
@ -165,6 +172,7 @@ void doSigGenLow ()
|
|||||||
case 12:
|
case 12:
|
||||||
case 13:
|
case 13:
|
||||||
decrementFreq( pow(10, 15-b) );
|
decrementFreq( pow(10, 15-b) );
|
||||||
|
changedSetting=true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 14: // Return to SAlo mode
|
case 14: // Return to SAlo mode
|
||||||
@ -231,6 +239,7 @@ void doSigGenLow ()
|
|||||||
tft.setTextColor(TFT_WHITE, SIG_BACKGROUND_COLOR );
|
tft.setTextColor(TFT_WHITE, SIG_BACKGROUND_COLOR );
|
||||||
tft.print("OFF");
|
tft.print("OFF");
|
||||||
}
|
}
|
||||||
|
changedSetting = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -250,6 +259,7 @@ void doSigGenLow ()
|
|||||||
drawSlider ( SLIDER_X, SLIDER_Y, p, pwr, "dBm" );
|
drawSlider ( SLIDER_X, SLIDER_Y, p, pwr, "dBm" );
|
||||||
att.SetAtten ( ( 100.0 - p ) / 100.0 * ATTENUATOR_RANGE ); // set attenuator to give required output
|
att.SetAtten ( ( 100.0 - p ) / 100.0 * ATTENUATOR_RANGE ); // set attenuator to give required output
|
||||||
sigGenSetting.Power = pwr;
|
sigGenSetting.Power = pwr;
|
||||||
|
changedSetting = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -278,13 +288,20 @@ void doSigGenLow ()
|
|||||||
if (sigGenOutputOn)
|
if (sigGenOutputOn)
|
||||||
{
|
{
|
||||||
delayMicroseconds(300);
|
delayMicroseconds(300);
|
||||||
SetRX(3);
|
SetRX(3); // both LO and RX in tx mode
|
||||||
}
|
}
|
||||||
|
changedSetting = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
oldFreq = sigGenSetting.Frequency;
|
oldFreq = sigGenSetting.Frequency;
|
||||||
oldIF = setting.IF_Freq;
|
oldIF = setting.IF_Freq;
|
||||||
oldSigGenOutputOn = sigGenOutputOn;
|
oldSigGenOutputOn = sigGenOutputOn;
|
||||||
|
|
||||||
|
#ifdef USE_WIFI
|
||||||
|
if ( numberOfWebsocketClients > 0 )
|
||||||
|
pushSettings ();
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<title>TinySA-ESP</title>
|
<title>simpleSA</title>
|
||||||
<link rel="stylesheet" type="text/css" href="styles.css">
|
<link rel="stylesheet" type="text/css" href="styles.css">
|
||||||
<!-- get file below from http://canvasjs.com/ -->
|
<!-- get file below from http://canvasjs.com/ -->
|
||||||
<script type="text/javascript" src="canvasjs.min.js"></script>
|
<script type="text/javascript" src="canvasjs.min.js"></script>
|
||||||
@ -41,7 +41,7 @@
|
|||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body style="min-width:100vw">
|
<body style="min-width:100vw">
|
||||||
<div class='norm'>
|
<div class='norm' id="top">
|
||||||
|
|
||||||
<button id="homeButton" onclick="window.location.href='index.html';">Home</button>
|
<button id="homeButton" onclick="window.location.href='index.html';">Home</button>
|
||||||
<!-- <button id="settingsButton" onclick="window.location.href='settings.html';">Settings</button>
|
<!-- <button id="settingsButton" onclick="window.location.href='settings.html';">Settings</button>
|
||||||
@ -50,7 +50,28 @@
|
|||||||
<button id="aboutButton" onclick="window.location.href='about.html';">About</button>
|
<button id="aboutButton" onclick="window.location.href='about.html';">About</button>
|
||||||
</div>
|
</div>
|
||||||
<div class ="Grid">
|
<div class ="Grid">
|
||||||
<div class = "Grid-cell" id="chartSA" ></div>
|
<div class = "Grid-cell" id="chartSA" >
|
||||||
|
<!-- container for chart -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class = "Grid-cell" id="sigGen" style="display:none">
|
||||||
|
<!-- container for sig gen controls -->
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<label for="setSigFreq" class="FreqLabel">Frequency:</label>
|
||||||
|
<input class="sigFreqInput" id="setSigFreq" name="setSigFreq" type="number" min="0" max="250000000">
|
||||||
|
Hz
|
||||||
|
<br />
|
||||||
|
<label for="setSigLevel" class = "SigLevel">Level:</label>
|
||||||
|
<input class="sigLevelInput" id="setSigLevel" name="setSigLevel" type="number" min="-70" max="20">
|
||||||
|
dBm
|
||||||
|
|
||||||
|
<div class="slidecontainer">
|
||||||
|
<input type="range" min="-70" max="20" value="10" class="slider" id="sigLevelSlider">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
<br />
|
<br />
|
||||||
|
|
||||||
<div class = "Grid-cell-side" id="postSweepSettings" >
|
<div class = "Grid-cell-side" id="postSweepSettings" >
|
||||||
@ -62,7 +83,7 @@
|
|||||||
<option class="sweep-option" value="2">Sig Gen</option>
|
<option class="sweep-option" value="2">Sig Gen</option>
|
||||||
<!-- <option class="sweep-option" value="3">Sig Gen High</option> -->
|
<!-- <option class="sweep-option" value="3">Sig Gen High</option> -->
|
||||||
<option class="sweep-option" value="4">SAW Test</option>
|
<option class="sweep-option" value="4">SAW Test</option>
|
||||||
<option class="sweep-option" value="5">Zero Span</option>
|
<!-- <option class="sweep-option" value="5">Zero Span</option> -->
|
||||||
<!-- <option class="sweep-option" value="6">Zero Span High</option> -->
|
<!-- <option class="sweep-option" value="6">Zero Span High</option> -->
|
||||||
<option class="sweep-option" value="7">Bandscope</option>
|
<option class="sweep-option" value="7">Bandscope</option>
|
||||||
<option class="sweep-option" value="8">RBW Test</option>
|
<option class="sweep-option" value="8">RBW Test</option>
|
||||||
@ -283,6 +304,10 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
var chartDiv = document.getElementById('chartSA');
|
||||||
|
var sigDiv = document.getElementById('sigGen');
|
||||||
|
|
||||||
var refreshInterval = document.getElementById('refreshInterval');
|
var refreshInterval = document.getElementById('refreshInterval');
|
||||||
|
|
||||||
var refresh = document.getElementById('refresh');
|
var refresh = document.getElementById('refresh');
|
||||||
@ -315,6 +340,10 @@ var store3 = document.getElementById('store3');
|
|||||||
var store4 = document.getElementById('store4');
|
var store4 = document.getElementById('store4');
|
||||||
//var messageWindow = document.getElementById('message');
|
//var messageWindow = document.getElementById('message');
|
||||||
|
|
||||||
|
var sigLevelSlider = document.getElementById('sigLevelSlider');
|
||||||
|
var setSigLevel = document.getElementById('setSigLevel');
|
||||||
|
var setSigFreq = document.getElementById('setSigFreq');
|
||||||
|
|
||||||
var tempCenter;
|
var tempCenter;
|
||||||
|
|
||||||
// initialise these to silly values to force an update first time round
|
// initialise these to silly values to force an update first time round
|
||||||
@ -427,7 +456,7 @@ var chartSA = new CanvasJS.Chart("chartSA",
|
|||||||
zoomType: "xy",
|
zoomType: "xy",
|
||||||
//height:800,
|
//height:800,
|
||||||
title: {
|
title: {
|
||||||
text: "ESP32 TinySA",
|
text: "simpleSA",
|
||||||
fontSize: 28
|
fontSize: 28
|
||||||
},
|
},
|
||||||
axisX: {
|
axisX: {
|
||||||
@ -677,6 +706,21 @@ store4.addEventListener('change', (event) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
setSigFreq.addEventListener('change', (event) => {
|
||||||
|
sendValue("F", setSigFreq.value);
|
||||||
|
});
|
||||||
|
|
||||||
|
setSigLevel.addEventListener('change', (event) => {
|
||||||
|
sendValue("L", setSigLevel.value);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Update the current level value (each time you drag the slider handle)
|
||||||
|
sigLevelSlider.oninput = function() {
|
||||||
|
setSigLevel.innerHTML = this.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//var roundtripTime = document.getElementById('roundtripTime');
|
//var roundtripTime = document.getElementById('roundtripTime');
|
||||||
//var messageCount = document.getElementById('messageCount');
|
//var messageCount = document.getElementById('messageCount');
|
||||||
//var missedReplies = document.getElementById('missedReplies');
|
//var missedReplies = document.getElementById('missedReplies');
|
||||||
@ -709,7 +753,7 @@ function renderChart()
|
|||||||
//missedReplies.value = missedMessageCounter;
|
//missedReplies.value = missedMessageCounter;
|
||||||
hostName.value = "ws://" + location.host + ":81";
|
hostName.value = "ws://" + location.host + ":81";
|
||||||
|
|
||||||
// connect to TinySA server
|
// connect to simpleSA server
|
||||||
connect(hostName.value);
|
connect(hostName.value);
|
||||||
|
|
||||||
// At this point the page is running
|
// At this point the page is running
|
||||||
@ -732,6 +776,7 @@ function handleSettings (settings)
|
|||||||
setStart.max = settings.IF;
|
setStart.max = settings.IF;
|
||||||
setStop.max = 600;
|
setStop.max = 600;
|
||||||
setStart.min = 350;
|
setStart.min = 350;
|
||||||
|
setStart.disabled = false;
|
||||||
setStop.min = settings.IF;
|
setStop.min = settings.IF;
|
||||||
setStop.disabled = false;
|
setStop.disabled = false;
|
||||||
setCenter.disabled = true;
|
setCenter.disabled = true;
|
||||||
@ -741,11 +786,14 @@ function handleSettings (settings)
|
|||||||
setSpur.disabled = true;
|
setSpur.disabled = true;
|
||||||
setTrackGen.disabled = true;
|
setTrackGen.disabled = true;
|
||||||
setTrackGenPower.disabled = true;
|
setTrackGenPower.disabled = true;
|
||||||
|
sigDiv.style.display = "none";
|
||||||
|
chartDiv.style.display = "block";
|
||||||
} else if (settings.mode == 4 ) { // IF Sweep (SAW test)
|
} else if (settings.mode == 4 ) { // IF Sweep (SAW test)
|
||||||
setStart.max = settings.IF;
|
setStart.max = settings.IF;
|
||||||
setStop.max = 460;
|
setStop.max = 460;
|
||||||
setStart.min = 400;
|
setStart.min = 400;
|
||||||
setStop.min = settings.IF;
|
setStop.min = settings.IF;
|
||||||
|
setStart.disabled = false;
|
||||||
setStop.disabled = false;
|
setStop.disabled = false;
|
||||||
setCenter.disabled = true;
|
setCenter.disabled = true;
|
||||||
setSpan.disabled = true;
|
setSpan.disabled = true;
|
||||||
@ -754,11 +802,14 @@ function handleSettings (settings)
|
|||||||
setSpur.disabled = true;
|
setSpur.disabled = true;
|
||||||
setTrackGen.disabled = true;
|
setTrackGen.disabled = true;
|
||||||
setTrackGenPower.disabled = true;
|
setTrackGenPower.disabled = true;
|
||||||
|
sigDiv.style.display = "none";
|
||||||
|
chartDiv.style.display = "block";
|
||||||
} else if (settings.mode == 7 ) { // BANDSCOPE
|
} else if (settings.mode == 7 ) { // BANDSCOPE
|
||||||
setStart.max = 350;
|
setStart.max = 350;
|
||||||
setStop.max = 350;
|
setStop.max = 350;
|
||||||
setStart.min = 0;
|
setStart.min = 0;
|
||||||
setStop.min = 0;
|
setStop.min = 0;
|
||||||
|
setStart.disabled = false;
|
||||||
setStop.disabled = true;
|
setStop.disabled = true;
|
||||||
setCenter.disabled = true;
|
setCenter.disabled = true;
|
||||||
setSpan.disabled = false;
|
setSpan.disabled = false;
|
||||||
@ -767,11 +818,30 @@ function handleSettings (settings)
|
|||||||
setSpur.disabled = true;
|
setSpur.disabled = true;
|
||||||
setTrackGen.disabled = true;
|
setTrackGen.disabled = true;
|
||||||
setTrackGenPower.disabled = true;
|
setTrackGenPower.disabled = true;
|
||||||
|
sigDiv.style.display = "none";
|
||||||
|
chartDiv.style.display = "block";
|
||||||
|
} else if (settings.mode == 2 ) { // Signal Generator
|
||||||
|
setStart.max = 350;
|
||||||
|
setStop.max = 350;
|
||||||
|
setStart.min = 0;
|
||||||
|
setStop.min = 0;
|
||||||
|
setStart.disabled = true;
|
||||||
|
setStop.disabled = true;
|
||||||
|
setCenter.disabled = true;
|
||||||
|
setSpan.disabled = true;
|
||||||
|
setRBW.disabled = true;
|
||||||
|
setRefOut.disabled = true;
|
||||||
|
setSpur.disabled = true;
|
||||||
|
setTrackGen.disabled = true;
|
||||||
|
setTrackGenPower.disabled = true;
|
||||||
|
sigDiv.style.display = "block";
|
||||||
|
chartDiv.style.display = "none";
|
||||||
} else {
|
} else {
|
||||||
setStart.max = 350;
|
setStart.max = 350;
|
||||||
setStop.max = 350;
|
setStop.max = 350;
|
||||||
setStart.min = 0;
|
setStart.min = 0;
|
||||||
setStop.min = 0;
|
setStop.min = 0;
|
||||||
|
setStart.disabled = false;
|
||||||
setStop.disabled = false;
|
setStop.disabled = false;
|
||||||
setCenter.disabled = false;
|
setCenter.disabled = false;
|
||||||
setSpan.disabled = false;
|
setSpan.disabled = false;
|
||||||
@ -780,6 +850,8 @@ function handleSettings (settings)
|
|||||||
setSpur.disabled = false;
|
setSpur.disabled = false;
|
||||||
setTrackGen.disabled = false;
|
setTrackGen.disabled = false;
|
||||||
setTrackGenPower.disabled = false;
|
setTrackGenPower.disabled = false;
|
||||||
|
sigDiv.style.display = "none";
|
||||||
|
chartDiv.style.display = "block";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1304,6 +1376,11 @@ function sendValue(c, val)
|
|||||||
// S Spur reduction Off/On
|
// S Spur reduction Off/On
|
||||||
// t trackGen Off/On/Fixed
|
// t trackGen Off/On/Fixed
|
||||||
// T trackGen output level
|
// T trackGen output level
|
||||||
|
// f trackgen signal generator frequency
|
||||||
|
// F Sig Gen frequency
|
||||||
|
// 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("# " + messageCounter + " " + sampleThreshold + " " + sampleSize);
|
||||||
connection.send("#" + c + " " + val);
|
connection.send("#" + c + " " + val);
|
||||||
|
419
data/siggen.html
419
data/siggen.html
@ -32,7 +32,7 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<title>TinySA-ESP</title>
|
<title>simpleSA-ESP</title>
|
||||||
<link rel="stylesheet" type="text/css" href="styles.css">
|
<link rel="stylesheet" type="text/css" href="styles.css">
|
||||||
<!-- get file below from http://canvasjs.com/ -->
|
<!-- get file below from http://canvasjs.com/ -->
|
||||||
<script type="text/javascript" src="canvasjs.min.js"></script>
|
<script type="text/javascript" src="canvasjs.min.js"></script>
|
||||||
@ -62,7 +62,7 @@
|
|||||||
<option class="sweep-option" value="2">Sig Gen</option>
|
<option class="sweep-option" value="2">Sig Gen</option>
|
||||||
<!-- <option class="sweep-option" value="3">Sig Gen High</option> -->
|
<!-- <option class="sweep-option" value="3">Sig Gen High</option> -->
|
||||||
<option class="sweep-option" value="4">SAW Test</option>
|
<option class="sweep-option" value="4">SAW Test</option>
|
||||||
<option class="sweep-option" value="5">Zero Span</option>
|
<!-- <option class="sweep-option" value="5">Zero Span</option> -->
|
||||||
<!-- <option class="sweep-option" value="6">Zero Span High</option> -->
|
<!-- <option class="sweep-option" value="6">Zero Span High</option> -->
|
||||||
<option class="sweep-option" value="7">Bandscope</option>
|
<option class="sweep-option" value="7">Bandscope</option>
|
||||||
<option class="sweep-option" value="8">RBW Test</option>
|
<option class="sweep-option" value="8">RBW Test</option>
|
||||||
@ -70,132 +70,26 @@
|
|||||||
<img src="refresh.png" id="refresh" name = "refresh" height = "18">
|
<img src="refresh.png" id="refresh" name = "refresh" height = "18">
|
||||||
</div>
|
</div>
|
||||||
<div class="setting" >
|
<div class="setting" >
|
||||||
<label for="setStart" class="setting-label">Start:</label>
|
<label for="setFreq" class="setting-label">Frequency:</label>
|
||||||
<input class="value-input" name='setStart' type="number" id="setStart" maxlength="9" min="0" max="350" required>
|
<input class="value-input" name='setFreq' type="number" id="setFreq" maxlength="9" min="0" max="350" required>
|
||||||
MHz
|
|
||||||
</div>
|
|
||||||
<div class="setting" >
|
|
||||||
<label for="setStop" class="setting-label">Stop:</label>
|
|
||||||
<input class="value-input" name='setStop' type="number" id ="setStop" maxlength="9" min="0" max="350" required>
|
|
||||||
MHz
|
MHz
|
||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
<div class="setting" >
|
<div class="setting" >
|
||||||
<label for="setCenter" class="setting-label">Centre:</label>
|
<label for="setLevel" class="setting-label">Level:</label>
|
||||||
<input class="value-input" name='setCenter' type="number" id ="setCenter" maxlength="9" min="0" max="350" required>
|
<input class="value-input" name='setLevel' type="number" step="1" id ="setLevel" maxlength="4" min="-31" max="0" required>
|
||||||
MHz
|
|
||||||
</div>
|
|
||||||
<div class="setting" >
|
|
||||||
<label for="setSpan" class="setting-label">Span:</label>
|
|
||||||
<!--<select class="select-input" id="setSpan" name="setSpan">
|
|
||||||
<option class="select-option" value="250">250</option>
|
|
||||||
<option class="select-option" value="100">100</option>
|
|
||||||
<option class="select-option" value="50">50</option>
|
|
||||||
<option class="select-option" value="20">20</option>
|
|
||||||
<option class="select-option" value="10">10</option>
|
|
||||||
<option class="select-option" value="4">4</option>
|
|
||||||
<option class="select-option" value="2">2</option>
|
|
||||||
<option class="select-option" value="1">1</option>
|
|
||||||
<option class="select-option" value="0.5">0.5</option>
|
|
||||||
</select> -->
|
|
||||||
<input class="value-input" name='setSpan' type="number" id ="setSpan" maxlength="9" min="0" max="350" step="0.1" required>
|
|
||||||
MHz
|
|
||||||
</div>
|
|
||||||
<!--
|
|
||||||
<label class="setting-label">Width:</label>
|
|
||||||
<input class="value-input" name='setWidth' type="text" id ="setWidth" placeholder="width" maxlength="9" min="0" max="250" required>
|
|
||||||
MHz
|
|
||||||
</div> -->
|
|
||||||
<br />
|
|
||||||
<!-- <div style="width:180px; display: inline-block">Ext gain:<input style = "width:100px" name='setExtGain' type="text" placeholder="extGain" maxlength="9" min="-100" max="40" required></div> -->
|
|
||||||
<div id="signal_info">
|
|
||||||
<div class="setting" >
|
|
||||||
<label class="setting-label">RBW:</label>
|
|
||||||
<input class="value-display" type="text" disabled="1" id="actRBW" size="1" value="300" />
|
|
||||||
kHz
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="setting" >
|
|
||||||
<label for="setRBW" class="setting-label">RBW:</label>
|
|
||||||
<select class="select-input" id="setRBW" name="setRBW"></select>
|
|
||||||
kHz
|
|
||||||
</div>
|
|
||||||
<!-- <div style="width:150px; display: inline-block">
|
|
||||||
<button type="submit">Update</button>
|
|
||||||
</div> -->
|
|
||||||
<br />
|
|
||||||
<div class="setting" >
|
|
||||||
<label for="setAtten" class="setting-label">Atten:</label>
|
|
||||||
<input class="value-input" name='setAtten' type="number" step="1" id ="setAtten" maxlength="3" min="0" max="31" required>
|
|
||||||
dB
|
|
||||||
<label for="setExtern" class="setting-label">External:</label>
|
|
||||||
<input class="value-input" name='setExtern' type="number" step="1" id ="setExtern" maxlength="3" min="-60" max="60" required>
|
|
||||||
<!--<select class="select-input" id="setAtten" name="setAtten"></select> -->
|
|
||||||
dB
|
|
||||||
</div>
|
|
||||||
<br />
|
|
||||||
<div class="setting" >
|
|
||||||
<label for="setRefOut" class="setting-label">Reference:</label>
|
|
||||||
<select class="select-input" id="setRefOut" name="setRefOut">
|
|
||||||
<option class="select-option" value="-1">Off</option>
|
|
||||||
<option class="select-option" value="0">30</option>
|
|
||||||
<option class="select-option" value="1">15</option>
|
|
||||||
<option class="select-option" value="2">10</option>
|
|
||||||
<option class="select-option" value="3">4</option>
|
|
||||||
<option class="select-option" value="4">3</option>
|
|
||||||
<option class="select-option" value="5">2</option>
|
|
||||||
<option class="select-option" value="6">1</option>
|
|
||||||
</select>
|
|
||||||
MHz
|
|
||||||
</div>
|
|
||||||
<br />
|
|
||||||
<div id="spur">
|
|
||||||
<div class="setting" >
|
|
||||||
<label class="setting-label">Spur Reduce:</label>
|
|
||||||
<input class="checkbox-input" type="checkbox" id="spurReduction" size="1" value="0" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="tracking">
|
|
||||||
<div class="setting" >
|
|
||||||
<label class="setting-label">TrackGen:</label>
|
|
||||||
<input class="checkbox-input" type="checkbox" id="trackGen" size="1" value="0" />
|
|
||||||
<label class="setting-label">Level:</label>
|
|
||||||
<input class="value-input" type="number" id="setTrackGenPower" placeholder="setTrackGenPower" maxlength = "6" min="-60" max="20" value="0" />
|
|
||||||
dBm
|
dBm
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<br />
|
|
||||||
<div id="signal_info">
|
|
||||||
<div class="setting" >
|
|
||||||
<label class="setting-label">Points:</label>
|
|
||||||
<input class="value-display" type="text" disabled="1" id="sweepPoints" size="1" value="65000" />
|
|
||||||
<label class="setting-label">Time:</label>
|
|
||||||
<input class="value-display" type="text" disabled="1" id="sweepTime" size="1" value="290" />
|
|
||||||
ms
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="store">
|
|
||||||
<div class = "setting" >
|
|
||||||
<label class="setting-label">Store:</label>
|
|
||||||
<input class="checkbox-input" type="checkbox" id="store1" size="1" value="0" />
|
|
||||||
<input class="checkbox-input" type="checkbox" id="store2" size="1" value="0" />
|
|
||||||
<input class="checkbox-input" type="checkbox" id="store3" size="1" value="0" />
|
|
||||||
<input class="checkbox-input" type="checkbox" id="store4" size="1" value="0" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- form for device settings -->
|
|
||||||
<hr />
|
<hr />
|
||||||
<h1>Settings</h1>
|
<h1>Settings</h1>
|
||||||
<div class="setting" >
|
<div class="setting" >
|
||||||
<label for="levelOffset" class="setting-label">Offset:</label>
|
<label for="calLevel" class="setting-label">Max Level:</label>
|
||||||
<input class="value-display" type="text" disabled="1" id="levelOffset" size="1" value="10" />
|
<input class="value-display" type="text" disabled="1" id="calLevel" size="1" value="0" />
|
||||||
dB
|
dB
|
||||||
</div>
|
</div>
|
||||||
<div class="setting" >
|
<div class="setting" >
|
||||||
<button class = "set-button" type="submit" id="setActPower">Set Actual</button>
|
<button class = "set-button" type="submit" id="setActPower">Set Max</button>
|
||||||
<input class="value-input" type="number" id="setPowerValue" placeholder="setPowerValue" maxlength = "9" min="-60" max="20" value="0" />
|
<input class="value-input" type="number" id="setMaxPower" placeholder="setMaxPower" maxlength = "9" min="-60" max="20" value="0" />
|
||||||
dBm
|
dBm
|
||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
@ -212,40 +106,11 @@
|
|||||||
<option class="select-option" value="7">20</option>
|
<option class="select-option" value="7">20</option>
|
||||||
</select>
|
</select>
|
||||||
dBm
|
dBm
|
||||||
</div>
|
|
||||||
<div class="setting" >
|
|
||||||
<label for="setPreAmp" class="setting-label">Pre-amp:</label>
|
|
||||||
<select class="select-input" id="setPreAmp" name="setPreAmp">
|
|
||||||
<option value="96">Auto</option> <!--0x60 Auto -->
|
|
||||||
<option value="0">5</option> <!--0x00 LNA Min 5dB-->
|
|
||||||
<option value="1">8</option> <!--0x01 -->
|
|
||||||
<option value="2">11</option> <!--0x02 -->
|
|
||||||
<option value="3">14</option> <!--0x03 -->
|
|
||||||
<option value="4">17</option> <!--0x04 -->
|
|
||||||
<option value="5">20</option> <!--0x05 -->
|
|
||||||
<option value="6">23</option> <!--0x06 -->
|
|
||||||
<option value="7">27</option> <!--0x07 -->
|
|
||||||
<option value="8">30</option> <!--0x08 -->
|
|
||||||
<option value="16">25</option> <!--0x10 LNA Max 25dB-->
|
|
||||||
<option value="17">28</option> <!--0x11 -->
|
|
||||||
<option value="18">31</option> <!--0x12 -->
|
|
||||||
<option value="19">34</option> <!--0x13 -->
|
|
||||||
<option value="20">37</option> <!--0x14 -->
|
|
||||||
<option value="21">40</option> <!--0x15 -->
|
|
||||||
<option value="22">43</option> <!--0x16 -->
|
|
||||||
<option value="23">46</option> <!--0x17 -->
|
|
||||||
<option value="24">49</option> <!--0x18 -->
|
|
||||||
</select>
|
|
||||||
dB
|
|
||||||
</div>
|
</div>
|
||||||
<div class="setting" >
|
<div class="setting" >
|
||||||
<label for="setIF" class="setting-label">IF:</label>
|
<label for="setIF" class="setting-label">IF:</label>
|
||||||
<input class="value-input" type="number" id="setIF" size="1" value="433.92" min="433" max=435 step=0.01 />
|
<input class="value-input" type="number" id="setIF" size="1" value="433.92" min="433" max=435 step=0.01 />
|
||||||
MHz
|
MHz
|
||||||
</div>
|
|
||||||
<div class="setting" >
|
|
||||||
<label for="Average" class="setting-label">Average:</label>
|
|
||||||
<input class="value-input" type="number" id="Average" size="1" value="10" min="2" max=100 step=1 />
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@ -287,258 +152,27 @@ var refreshInterval = document.getElementById('refreshInterval');
|
|||||||
|
|
||||||
var refresh = document.getElementById('refresh');
|
var refresh = document.getElementById('refresh');
|
||||||
var setMode = document.getElementById('setMode');
|
var setMode = document.getElementById('setMode');
|
||||||
var sweepStart = document.getElementById('sweepStart');
|
var setFreq = document.getElementById('setFreq');
|
||||||
var sweepStop = document.getElementById('sweepStop');
|
var setLevel = document.getElementById('setLevel');
|
||||||
var setStart = document.getElementById('setStart');
|
var calLevel = document.getElementByID('calLevel');
|
||||||
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 setActPower = document.getElementById('setActPower');
|
var setActPower = document.getElementById('setActPower');
|
||||||
var levelOffset = document.getElementById('levelOffset');
|
var setMaxPower = document.getElementByID('setMaxPower');
|
||||||
var setRefOut = document.getElementById('setRefOut');
|
|
||||||
var sweepPoints = document.getElementById('sweepPoints');
|
var setLODrive = document.getElementById('setLODrive');
|
||||||
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 setIF = document.getElementById('setIF');
|
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 messageWindow = document.getElementById('message');
|
||||||
|
|
||||||
var tempCenter;
|
|
||||||
|
|
||||||
// initialise these to silly values to force an update first time round
|
// initialise these to silly values to force an update first time round
|
||||||
var oldSweepStart = -1;
|
var oldFreq = 0
|
||||||
var oldSweepStop = -1;
|
var oldSetLevel = 100;
|
||||||
var oldSweepCenter = -1;
|
var oldCalLevel = 100;
|
||||||
var oldSetRefOut = -2;
|
var oldMaxPower = 100;
|
||||||
var oldSetRBW = -10;
|
var oldLODrive = -1;
|
||||||
var oldLevelOffset = 1000;
|
|
||||||
var oldAttenuation = 1000;
|
|
||||||
var oldExternalGain = 1000;
|
|
||||||
var oldDrive = -1;
|
|
||||||
var oldIF = 0;
|
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
|
// Add handlers for the change events in the input fields
|
||||||
@ -551,7 +185,7 @@ setMode.addEventListener('change', (event) => {
|
|||||||
sendValue("m", setMode.value);
|
sendValue("m", setMode.value);
|
||||||
});
|
});
|
||||||
|
|
||||||
setStart.addEventListener('change', (event) => {
|
setFreq.addEventListener('change', (event) => {
|
||||||
sendValue("a", setStart.value);
|
sendValue("a", setStart.value);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -1287,7 +921,7 @@ function sendValue(c, val)
|
|||||||
//
|
//
|
||||||
// Message format
|
// Message format
|
||||||
// #(code) value where code is a single char. Case is important
|
// #(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
|
// b stop frequency
|
||||||
// c centre frequency
|
// c centre frequency
|
||||||
// s Span
|
// s Span
|
||||||
@ -1304,6 +938,9 @@ function sendValue(c, val)
|
|||||||
// S Spur reduction Off/On
|
// S Spur reduction Off/On
|
||||||
// t trackGen Off/On/Fixed
|
// t trackGen Off/On/Fixed
|
||||||
// T trackGen output level
|
// 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("# " + messageCounter + " " + sampleThreshold + " " + sampleSize);
|
||||||
connection.send("#" + c + " " + val);
|
connection.send("#" + c + " " + val);
|
||||||
|
@ -192,8 +192,55 @@ input[type="number"] {
|
|||||||
.setting-label {
|
.setting-label {
|
||||||
width: 80px;
|
width: 80px;
|
||||||
display: inline-block;
|
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 {
|
TH, .bold {
|
||||||
background-color: lightblue;
|
background-color: lightblue;
|
||||||
color: black;
|
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;
|
||||||
|
}
|
||||||
|
@ -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) )
|
* E external gain ( eg attenuator(-ve) or preamp(+ve) )
|
||||||
* R requested RBW
|
* R requested RBW
|
||||||
* S Spur reduction Off/On
|
* S Spur reduction Off/On
|
||||||
* t trackGen Off/On/Fixed
|
* t trackGen Off/On/Generate
|
||||||
* T trackGen output level
|
* T trackGen output level
|
||||||
|
* f trackgen signal generator frequency
|
||||||
* F Sig Gen frequency
|
* F Sig Gen frequency
|
||||||
* L Sig Gen level (dBm)
|
* L Sig Gen level (dBm)
|
||||||
* G Sig Gen Off/On
|
* 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 );
|
SetSpur ( (int8_t)value );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 't': // Tracking Generator on/off
|
case 't': // Tracking Generator off/on/generate
|
||||||
SetTracking ( (int8_t)value );
|
SetTracking ( (int8_t)value );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user