Web Sig Gen again
Bug remains in attenuation calc Formatting of buttons on web page to do Add track Gen to signal generator web page if present (need to send a config state in settings) Add track gen level control
This commit is contained in:
parent
ed4563c0c9
commit
96a27b6005
35
SigLo.ino
35
SigLo.ino
@ -109,7 +109,7 @@ void initSigLow()
|
||||
|
||||
#ifdef USE_WIFI
|
||||
if ( numberOfWebsocketClients > 0 )
|
||||
pushSettings ();
|
||||
pushSigGenSettings ();
|
||||
#endif
|
||||
|
||||
}
|
||||
@ -126,6 +126,8 @@ void doSigGenLow ()
|
||||
static uint32_t oldIF; // to store the current IF
|
||||
static uint16_t oldSigGenOutputOn;
|
||||
float p; // temporary variable for slider percent
|
||||
static uint16_t sliderRange = ATTENUATOR_RANGE + RX_SI4432_MAX_DRIVE * 3;
|
||||
|
||||
|
||||
uint16_t t_x = 0, t_y = 0; // To store the touch coordinates
|
||||
|
||||
@ -135,10 +137,28 @@ void doSigGenLow ()
|
||||
#endif
|
||||
|
||||
if (changedSetting) {
|
||||
att.SetAtten(sigGenSetting.Calibration - sigGenSetting.Power);
|
||||
// calculate required drive and attenuator settings
|
||||
// keep drive as high as possible so nasties are attenuated
|
||||
uint16_t sgRXDrive = RX_SI4432_MAX_DRIVE;
|
||||
uint16_t attenuation = sigGenSetting.Calibration - sigGenSetting.Power;
|
||||
if (attenuation > ATTENUATOR_RANGE )
|
||||
{
|
||||
int16_t diff = sigGenSetting.Calibration - ATTENUATOR_RANGE - sigGenSetting.Power;
|
||||
sgRXDrive = RX_SI4432_MAX_DRIVE - (int16_t)(diff/3) ;
|
||||
attenuation = ATTENUATOR_RANGE - diff%3;
|
||||
}
|
||||
SetSGRxDrive(sgRXDrive);
|
||||
att.SetAtten(attenuation);
|
||||
Serial.printf("sigGenLow - rxDrive set to %i, attenuation set to %i, cal is %i\n", sgRXDrive, attenuation, sigGenSetting.Calibration);
|
||||
|
||||
#ifdef USE_WIFI
|
||||
if ( numberOfWebsocketClients > 0 )
|
||||
pushSigGenSettings ();
|
||||
#endif
|
||||
|
||||
changedSetting = false;
|
||||
}
|
||||
|
||||
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
|
||||
@ -259,13 +279,13 @@ void doSigGenLow ()
|
||||
if ( sliderPressed( pressed, t_x, t_y) )
|
||||
{
|
||||
p = sliderPercent( t_x ); // position of slider in %
|
||||
float pwr = p * (ATTENUATOR_RANGE)/100.0 + sigGenSetting.Calibration - ATTENUATOR_RANGE;
|
||||
float pwr = p * (sliderRange)/100.0 + sigGenSetting.Calibration - sliderRange;
|
||||
|
||||
drawSlider ( SLIDER_X, SLIDER_Y, p, pwr, "dBm" );
|
||||
sigGenSetting.Power = pwr;
|
||||
changedSetting = true;
|
||||
} else {
|
||||
p = ( sigGenSetting.Power - (sigGenSetting.Calibration - ATTENUATOR_RANGE) ) * 100.0 / ATTENUATOR_RANGE;
|
||||
p = ( sigGenSetting.Power - (sigGenSetting.Calibration - sliderRange) ) * 100.0 / sliderRange;
|
||||
drawSlider ( SLIDER_X, SLIDER_Y, p, sigGenSetting.Power, "dBm" );
|
||||
}
|
||||
|
||||
@ -304,11 +324,6 @@ void doSigGenLow ()
|
||||
oldIF = setting.IF_Freq;
|
||||
oldSigGenOutputOn = sigGenOutputOn;
|
||||
|
||||
#ifdef USE_WIFI
|
||||
if ( numberOfWebsocketClients > 0 )
|
||||
pushSettings ();
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
23
cmd.cpp
23
cmd.cpp
@ -269,7 +269,9 @@ void ShowMenu ()
|
||||
Serial.print ( " SGLODRIVE.....Local oscillator drive level in signal generator mode [0 to 7]; currently: " );
|
||||
Serial.println ( sigGenSetting.LO_Drive );
|
||||
|
||||
Serial.print ( " SGRXDRIVE.....Local oscillator drive level in signal generator mode [0 to 7]; currently: " );
|
||||
Serial.print ( " SGRXDRIVE.....RX SI4432 oscillator drive level in signal generator mode [0 to ");
|
||||
Serial.print ( RX_SI4432_MAX_DRIVE );
|
||||
Serial.print ( "]; currently: " );
|
||||
Serial.println ( sigGenSetting.RX_Drive );
|
||||
|
||||
#ifdef SI_TG_IF_CS
|
||||
@ -811,7 +813,7 @@ uint8_t reg69; // Ditto
|
||||
freq1 = ParseFrequency ( dataBuff ); // Yes, get new frequency
|
||||
SetSGFreq (freq1);
|
||||
}
|
||||
Serial.printf ( "Signal Generator frequency: %i\n", FormatFrequency ( sigGenSetting.Frequency ));
|
||||
Serial.printf ( "Signal Generator frequency: %i\n", FormatFrequency ( freq1 ));
|
||||
return true;
|
||||
|
||||
|
||||
@ -826,7 +828,7 @@ uint8_t reg69; // Ditto
|
||||
tempValue = atoi ( dataBuff ); // Yes, convert to a number
|
||||
|
||||
if (( tempValue < MIN_DRIVE ) || ( tempValue > MAX_DRIVE ))
|
||||
Serial.printf ( "Invalid drive specification: %d\n", tempValue );
|
||||
Serial.printf ( "Invalid LO drive: %d\n", tempValue );
|
||||
else // Set the transmitter drive level
|
||||
SetSGLoDrive ( tempValue ); // "SetSGLoDrive" saves the settings
|
||||
}
|
||||
@ -838,17 +840,17 @@ uint8_t reg69; // Ditto
|
||||
return true;
|
||||
|
||||
/*
|
||||
* The "SGLODRIVE" command sets the receiver (IF) oscillator "drive" level in signal generator mode.
|
||||
* The "SGRXDRIVE" command sets the receiver (IF) oscillator "drive" level in signal generator mode.
|
||||
*/
|
||||
case MSG_SG_RX_DRIVE:
|
||||
if ( dataLen != 0 ) // Drive level specified?
|
||||
{
|
||||
tempValue = atoi ( dataBuff ); // Yes, convert to a number
|
||||
|
||||
if (( tempValue < MIN_DRIVE ) || ( tempValue > MAX_DRIVE ))
|
||||
Serial.printf ( "Invalid drive specification: %d\n", tempValue );
|
||||
if (( tempValue < MIN_DRIVE ) || ( tempValue > RX_SI4432_MAX_DRIVE ))
|
||||
Serial.printf ( "Invalid RX drive: %d - (%d-%d)\n", tempValue, MIN_DRIVE, RX_SI4432_MAX_DRIVE );
|
||||
else // Set the transmitter drive level
|
||||
SetSGRxDrive ( tempValue ); // "SetTGRxDrive" saves the settings
|
||||
SetSGRxDrive ( tempValue ); // "SetSGRxDrive" saves the settings
|
||||
}
|
||||
|
||||
Serial.printf ( "SigGen RX Drive: %d (+%udBm)\n", sigGenSetting.RX_Drive, driveLevel[sigGenSetting.RX_Drive] );
|
||||
@ -2589,13 +2591,16 @@ int oldLevel = sigGenSetting.LO_Drive;
|
||||
* 1 => +2dBm 5 => +14dBm
|
||||
* 2 => +5dBm 6 => +17dBm
|
||||
* 3 => +8dBm 7 => +20dBm
|
||||
* Note the power limits of the B3555 SAW filter is 10dBm
|
||||
* RX_SI4432_MAX_DRIVE is set in my_SA.h to suit the attenuator pad and losses
|
||||
* in your build.
|
||||
*/
|
||||
|
||||
void SetSGRxDrive ( uint8_t level )
|
||||
{
|
||||
int oldLevel = sigGenSetting.RX_Drive;
|
||||
|
||||
if (( level < 0 ) || ( level > 7 ))
|
||||
if (( level < 0 ) || ( level > RX_SI4432_MAX_DRIVE ))
|
||||
return;
|
||||
|
||||
else
|
||||
@ -2620,7 +2625,7 @@ void SetSGPower ( int16_t dBm )
|
||||
|
||||
if ( dBm > sigGenSetting.Calibration )
|
||||
dBm = sigGenSetting.Calibration;
|
||||
if ( dBm < sigGenSetting.Calibration - ATTENUATOR_RANGE )
|
||||
if ( dBm < (sigGenSetting.Calibration - ATTENUATOR_RANGE - RX_SI4432_MAX_DRIVE * 3) )
|
||||
dBm = sigGenSetting.Calibration - ATTENUATOR_RANGE;
|
||||
|
||||
sigGenSetting.Power = dBm;
|
||||
|
312
data/index.html
312
data/index.html
@ -60,30 +60,32 @@
|
||||
<div class="sigTitle">Signal Generator</div>
|
||||
<br />
|
||||
<div class="sigFreq">
|
||||
<label for="setSigFreq8" class="sigFreqLabel">Frequency:</label>
|
||||
<input class="sigFreqInput" id="setSigFreq8" name="setSigFreq8" type="number" min=-1 max=10 value=0>
|
||||
<input class="sigFreqInput" id="setSigFreq7" name="setSigFreq7" type="number" min=-1 max=10 value=0>
|
||||
<input class="sigFreqInput" id="setSigFreq6" name="setSigFreq6" type="number" min=-1 max=10 value=0>
|
||||
<label for="setSigGenFreq8" class="sigFreqLabel">Frequency:</label>
|
||||
<input class="sigFreqInput" id="setSigGenFreq8" name="setSigGenFreq8" type="number" min=-1 max=10 value=0>
|
||||
<input class="sigFreqInput" id="setSigGenFreq7" name="setSigGenFreq7" type="number" min=-1 max=10 value=0>
|
||||
<input class="sigFreqInput" id="setSigGenFreq6" name="setSigGenFreq6" type="number" min=-1 max=10 value=0>
|
||||
<span class="sigFreqText">,</span>
|
||||
<input class="sigFreqInput" id="setSigFreq5" name="setSigFreq5" type="number" min=-1 max=10 value=0>
|
||||
<input class="sigFreqInput" id="setSigFreq4" name="setSigFreq4" type="number" min=-1 max=10 value=0>
|
||||
<input class="sigFreqInput" id="setSigFreq3" name="setSigFreq3" type="number" min=-1 max=10 value=0>
|
||||
<input class="sigFreqInput" id="setSigGenFreq5" name="setSigGenFreq5" type="number" min=-1 max=10 value=0>
|
||||
<input class="sigFreqInput" id="setSigGenFreq4" name="setSigGenFreq4" type="number" min=-1 max=10 value=0>
|
||||
<input class="sigFreqInput" id="setSigGenFreq3" name="setSigGenFreq3" type="number" min=-1 max=10 value=0>
|
||||
<span class="sigFreqText">,</span>
|
||||
<input class="sigFreqInput" id="setSigFreq2" name="setSigFreq2" type="number" min=-1 max=10 value=0>
|
||||
<input class="sigFreqInput" id="setSigFreq1" name="setSigFreq1" type="number" min=-1 max=10 value=0>
|
||||
<input class="sigFreqInput" id="setSigFreq0" name="setSigFreq0" type="number" min=0 max=10 value=0>
|
||||
<input class="sigFreqInput" id="setSigGenFreq2" name="setSigGenFreq2" type="number" min=-1 max=10 value=0>
|
||||
<input class="sigFreqInput" id="setSigGenFreq1" name="setSigGenFreq1" type="number" min=-1 max=10 value=0>
|
||||
<input class="sigFreqInput" id="setSigGenFreq0" name="setSigGenFreq0" type="number" min=0 max=10 value=0>
|
||||
<span class="sigFreqText">Hz</span>
|
||||
<button class = "set-button" id="incButton">+</button>
|
||||
<button class = "set-button" id="decButton">-</button>
|
||||
<button class = "set-button" id="incButton">+</button>
|
||||
<button class = "set-button" id="decButton">-</button>
|
||||
<button class = "set-button" id="sigOnButton">On/Off</button>
|
||||
|
||||
|
||||
</div>
|
||||
<br /><br />
|
||||
<label for="setSigLevel" class = "sigLevelLabel">Level:</label>
|
||||
<input class="sigLevelInput" id="setSigLevel" name="setSigLevel" type="number" min="-70" max="20" value="0">
|
||||
<label for="setSigGenPower" class = "sigLevelLabel">Level:</label>
|
||||
<input class="sigLevelInput" id="setSigGenPower" name="setSigGenPower" type="number" min=-70 max=20 value=0>
|
||||
dBm
|
||||
<br /><br />
|
||||
<div class="slidecontainer">
|
||||
<input type="range" min="-70" max="20" value="10" class="slider" id="sigLevelSlider">
|
||||
<input type="range" min=-70 max=20 value=0 class="slider" id="sigLevelSlider">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@ -163,10 +165,10 @@
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
@ -188,18 +190,29 @@
|
||||
<br />
|
||||
<div id="spur">
|
||||
<div class="setting" >
|
||||
<label class="setting-label">Spur Reduce:</label>
|
||||
<label class="setting-widelabel">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>
|
||||
<select class="select-input" id="trackGen" name="trackGen">
|
||||
<option class="select-option" value=0>Off</option>
|
||||
<option class="select-option" value=1>Track</option>
|
||||
<option class="select-option" value=2>Generate</option>
|
||||
</select>
|
||||
<br />
|
||||
<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 class="setting" >
|
||||
<label for="setTGFreq" class="setting-label">TG Freq:</label>
|
||||
<input class="value-input" name='setTGFreq' type="number" id="setTGFreq" maxlength="9" min=0 max=350 required>
|
||||
MHz
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<br />
|
||||
<div id="signal_info">
|
||||
@ -353,6 +366,7 @@ var setPreAmp = document.getElementById('setPreAmp');
|
||||
var setAverage = document.getElementById('Average');
|
||||
var setTrackGen = document.getElementById('trackGen');
|
||||
var setTrackGenPower = document.getElementById('setTrackGenPower');
|
||||
var setTGFreq = document.getElementById('setTGFreq');
|
||||
var store1 = document.getElementById('store1');
|
||||
var store2 = document.getElementById('store2');
|
||||
var store3 = document.getElementById('store3');
|
||||
@ -360,19 +374,19 @@ var store4 = document.getElementById('store4');
|
||||
//var messageWindow = document.getElementById('message');
|
||||
|
||||
var sigLevelSlider = document.getElementById('sigLevelSlider');
|
||||
var setSigLevel = document.getElementById('setSigLevel');
|
||||
var setSigGenPower = document.getElementById('setSigGenPower');
|
||||
var setSigGenFreq = document.getElementById('setSigGenFreq');
|
||||
var sigOnButton = document.getElementById('sigOnButton');
|
||||
|
||||
var setSigFreq = document.getElementById('setSigFreq');
|
||||
|
||||
var setSigFreq0 = document.getElementById('setSigFreq0');
|
||||
var setSigFreq1 = document.getElementById('setSigFreq1');
|
||||
var setSigFreq2 = document.getElementById('setSigFreq2');
|
||||
var setSigFreq3 = document.getElementById('setSigFreq3');
|
||||
var setSigFreq4 = document.getElementById('setSigFreq4');
|
||||
var setSigFreq5 = document.getElementById('setSigFreq5');
|
||||
var setSigFreq6 = document.getElementById('setSigFreq6');
|
||||
var setSigFreq7 = document.getElementById('setSigFreq7');
|
||||
var setSigFreq8 = document.getElementById('setSigFreq8');
|
||||
var setSigGenFreq0 = document.getElementById('setSigGenFreq0');
|
||||
var setSigGenFreq1 = document.getElementById('setSigGenFreq1');
|
||||
var setSigGenFreq2 = document.getElementById('setSigGenFreq2');
|
||||
var setSigGenFreq3 = document.getElementById('setSigGenFreq3');
|
||||
var setSigGenFreq4 = document.getElementById('setSigGenFreq4');
|
||||
var setSigGenFreq5 = document.getElementById('setSigGenFreq5');
|
||||
var setSigGenFreq6 = document.getElementById('setSigGenFreq6');
|
||||
var setSigGenFreq7 = document.getElementById('setSigGenFreq7');
|
||||
var setSigGenFreq8 = document.getElementById('setSigGenFreq8');
|
||||
|
||||
var tempCenter;
|
||||
|
||||
@ -392,6 +406,13 @@ var oldSweepPoints = 0;
|
||||
var oldSpur = 2;
|
||||
var oldTrackGen = 2;
|
||||
var oldTrackGenPower = 1000;
|
||||
var oldTGFreq = -1;
|
||||
var oldSigGen = -1;
|
||||
var oldSigGenPower = 1000;
|
||||
var oldSigGenFreq = -1;
|
||||
var oldSigGenMod = -1;
|
||||
var oldSigGenModFreq = -1;
|
||||
var oldSigOnButton = -1;
|
||||
|
||||
// Chart configuration - Scope
|
||||
var RSSISamples = [
|
||||
@ -491,12 +512,23 @@ var chartSA = new CanvasJS.Chart("chartSA",
|
||||
},
|
||||
axisX: {
|
||||
title: "Frequency (MHz)",
|
||||
titleFontSize: 24
|
||||
titleFontSize: 24,
|
||||
gridThickness: 1,
|
||||
gridColor: "WhiteSmoke",
|
||||
stripLines:[
|
||||
{
|
||||
startValue:50,
|
||||
thickness:1,
|
||||
color:"#d8d8d8",
|
||||
}
|
||||
]
|
||||
},
|
||||
axisY:
|
||||
{
|
||||
title: "dB",
|
||||
titleFontSize: 24,
|
||||
gridThickness: 1,
|
||||
gridColor: "WhiteSmoke",
|
||||
minimum: -120
|
||||
},
|
||||
axisY2: [
|
||||
@ -515,6 +547,7 @@ var chartSA = new CanvasJS.Chart("chartSA",
|
||||
exportEnabled: true,
|
||||
legend: {
|
||||
cursor: "pointer",
|
||||
fontSize: 16,
|
||||
itemclick: function (e) {
|
||||
//console.log("legend click: " + e.dataPointIndex);
|
||||
//console.log(e);
|
||||
@ -672,13 +705,17 @@ setSpur.addEventListener('change', (event) => {
|
||||
});
|
||||
|
||||
setTrackGen.addEventListener('change', (event) => {
|
||||
if (setTrackGen.checked) {
|
||||
sendValue("t", 1);
|
||||
} else {
|
||||
sendValue("t", 0);
|
||||
}
|
||||
sendValue("t", setTrackGen.value);
|
||||
});
|
||||
|
||||
setTrackGenPower.addEventListener('change', (event) => {
|
||||
sendValue("T", setTrackGenPower.value);
|
||||
});
|
||||
|
||||
|
||||
setTGFreq.addEventListener('change', (event) => {
|
||||
sendValue("f", setTGFreq.value);
|
||||
});
|
||||
|
||||
store1.addEventListener('change', (event) => {
|
||||
if (store1.checked) {
|
||||
@ -740,43 +777,43 @@ store4.addEventListener('change', (event) => {
|
||||
|
||||
function changeStep(newStep) {
|
||||
freqStep = newStep;
|
||||
setSigFreq0.style.color = "black";
|
||||
setSigFreq1.style.color = "black";
|
||||
setSigFreq2.style.color = "black";
|
||||
setSigFreq3.style.color = "black";
|
||||
setSigFreq4.style.color = "black";
|
||||
setSigFreq5.style.color = "black";
|
||||
setSigFreq6.style.color = "black";
|
||||
setSigFreq7.style.color = "black";
|
||||
setSigFreq8.style.color = "black";
|
||||
setSigGenFreq0.style.color = "black";
|
||||
setSigGenFreq1.style.color = "black";
|
||||
setSigGenFreq2.style.color = "black";
|
||||
setSigGenFreq3.style.color = "black";
|
||||
setSigGenFreq4.style.color = "black";
|
||||
setSigGenFreq5.style.color = "black";
|
||||
setSigGenFreq6.style.color = "black";
|
||||
setSigGenFreq7.style.color = "black";
|
||||
setSigGenFreq8.style.color = "black";
|
||||
|
||||
switch(freqStep) {
|
||||
case 1:
|
||||
setSigFreq0.style.color = "red";
|
||||
setSigGenFreq0.style.color = "red";
|
||||
break;
|
||||
case 10:
|
||||
setSigFreq1.style.color = "red";
|
||||
setSigGenFreq1.style.color = "red";
|
||||
break;
|
||||
case 100:
|
||||
setSigFreq2.style.color = "red";
|
||||
setSigGenFreq2.style.color = "red";
|
||||
break;
|
||||
case 1000:
|
||||
setSigFreq3.style.color = "red";
|
||||
setSigGenFreq3.style.color = "red";
|
||||
break;
|
||||
case 10000:
|
||||
setSigFreq4.style.color = "red";
|
||||
setSigGenFreq4.style.color = "red";
|
||||
break;
|
||||
case 100000:
|
||||
setSigFreq5.style.color = "red";
|
||||
setSigGenFreq5.style.color = "red";
|
||||
break;
|
||||
case 1000000:
|
||||
setSigFreq6.style.color = "red";
|
||||
setSigGenFreq6.style.color = "red";
|
||||
break;
|
||||
case 10000000:
|
||||
setSigFreq7.style.color = "red";
|
||||
setSigGenFreq7.style.color = "red";
|
||||
break;
|
||||
case 100000000:
|
||||
setSigFreq8.style.color = "red";
|
||||
setSigGenFreq8.style.color = "red";
|
||||
break;
|
||||
}
|
||||
};
|
||||
@ -797,106 +834,126 @@ function incdec(direction, factor) {
|
||||
frequency = 0;
|
||||
console.log("incdec:", frequency);
|
||||
var tempFreq = frequency;
|
||||
setSigFreq0.value = frequency%10;
|
||||
setSigGenFreq0.value = frequency%10;
|
||||
tempFreq = parseInt(tempFreq/10);
|
||||
setSigFreq1.value = tempFreq%10;
|
||||
setSigGenFreq1.value = tempFreq%10;
|
||||
tempFreq = parseInt(tempFreq/10);
|
||||
setSigFreq2.value = tempFreq%10;
|
||||
setSigGenFreq2.value = tempFreq%10;
|
||||
tempFreq = parseInt(tempFreq/10);
|
||||
setSigFreq3.value = tempFreq%10;
|
||||
setSigGenFreq3.value = tempFreq%10;
|
||||
tempFreq = parseInt(tempFreq/10);
|
||||
setSigFreq4.value = tempFreq%10;
|
||||
setSigGenFreq4.value = tempFreq%10;
|
||||
tempFreq = parseInt(tempFreq/10);
|
||||
setSigFreq5.value = tempFreq%10;
|
||||
setSigGenFreq5.value = tempFreq%10;
|
||||
tempFreq = parseInt(tempFreq/10);
|
||||
setSigFreq6.value = tempFreq%10;
|
||||
setSigGenFreq6.value = tempFreq%10;
|
||||
tempFreq = parseInt(tempFreq/10);
|
||||
setSigFreq7.value = tempFreq%10;
|
||||
setSigGenFreq7.value = tempFreq%10;
|
||||
tempFreq = parseInt(tempFreq/10);
|
||||
setSigFreq8.value = tempFreq%10;
|
||||
setSigGenFreq8.value = tempFreq%10;
|
||||
|
||||
sendValue("F", frequency);
|
||||
if (factor != 0)
|
||||
sendValue("F", frequency);
|
||||
}
|
||||
|
||||
incButton.onclick = function() {incdec(1, freqStep)};
|
||||
decButton.onclick = function() {incdec(-1, freqStep)};
|
||||
|
||||
setSigFreq0.onfocus = function() {changeStep(1)};
|
||||
setSigFreq1.onfocus = function() {changeStep(10)};
|
||||
setSigFreq2.onfocus = function() {changeStep(100)};
|
||||
setSigFreq3.onfocus = function() {changeStep(1000)};
|
||||
setSigFreq4.onfocus = function() {changeStep(10000)};
|
||||
setSigFreq5.onfocus = function() {changeStep(100000)};
|
||||
setSigFreq6.onfocus = function() {changeStep(1000000)};
|
||||
setSigFreq7.onfocus = function() {changeStep(10000000)};
|
||||
setSigFreq8.onfocus = function() {changeStep(100000000)};
|
||||
setSigGenFreq0.onfocus = function() {changeStep(1)};
|
||||
setSigGenFreq1.onfocus = function() {changeStep(10)};
|
||||
setSigGenFreq2.onfocus = function() {changeStep(100)};
|
||||
setSigGenFreq3.onfocus = function() {changeStep(1000)};
|
||||
setSigGenFreq4.onfocus = function() {changeStep(10000)};
|
||||
setSigGenFreq5.onfocus = function() {changeStep(100000)};
|
||||
setSigGenFreq6.onfocus = function() {changeStep(1000000)};
|
||||
setSigGenFreq7.onfocus = function() {changeStep(10000000)};
|
||||
setSigGenFreq8.onfocus = function() {changeStep(100000000)};
|
||||
|
||||
|
||||
setSigFreq0.addEventListener('wheel', (event) => {
|
||||
setSigGenFreq0.addEventListener('wheel', (event) => {
|
||||
event.preventDefault();
|
||||
changeStep(1);
|
||||
incdec(-event.deltaY,1);
|
||||
});
|
||||
|
||||
|
||||
setSigFreq1.addEventListener('wheel', (event) => {
|
||||
setSigGenFreq1.addEventListener('wheel', (event) => {
|
||||
event.preventDefault();
|
||||
changeStep(10);
|
||||
incdec(-event.deltaY,10);
|
||||
});
|
||||
|
||||
setSigFreq2.addEventListener('wheel', (event) => {
|
||||
setSigGenFreq2.addEventListener('wheel', (event) => {
|
||||
event.preventDefault();
|
||||
changeStep(100);
|
||||
incdec(-event.deltaY,100);
|
||||
});
|
||||
|
||||
setSigFreq3.addEventListener('wheel', (event) => {
|
||||
setSigGenFreq3.addEventListener('wheel', (event) => {
|
||||
event.preventDefault();
|
||||
changeStep(1000);
|
||||
incdec(-event.deltaY,1000);
|
||||
});
|
||||
|
||||
setSigFreq4.addEventListener('wheel', (event) => {
|
||||
setSigGenFreq4.addEventListener('wheel', (event) => {
|
||||
event.preventDefault();
|
||||
changeStep(10000);
|
||||
incdec(-event.deltaY,10000);
|
||||
});
|
||||
|
||||
setSigFreq5.addEventListener('wheel', (event) => {
|
||||
setSigGenFreq5.addEventListener('wheel', (event) => {
|
||||
event.preventDefault();
|
||||
changeStep(100000);
|
||||
incdec(-event.deltaY,100000);
|
||||
});
|
||||
|
||||
setSigFreq6.addEventListener('wheel', (event) => {
|
||||
setSigGenFreq6.addEventListener('wheel', (event) => {
|
||||
event.preventDefault();
|
||||
changeStep(1000000);
|
||||
incdec(-event.deltaY,1000000);
|
||||
});
|
||||
|
||||
setSigFreq7.addEventListener('wheel', (event) => {
|
||||
setSigGenFreq7.addEventListener('wheel', (event) => {
|
||||
event.preventDefault();
|
||||
changeStep(10000000);
|
||||
incdec(-event.deltaY,10000000);
|
||||
});
|
||||
|
||||
setSigFreq8.addEventListener('wheel', (event) => {
|
||||
setSigGenFreq8.addEventListener('wheel', (event) => {
|
||||
event.preventDefault();
|
||||
changeStep(100000000);
|
||||
incdec(-event.deltaY,100000000);
|
||||
});
|
||||
|
||||
|
||||
setSigLevel.addEventListener('change', (event) => {
|
||||
sendValue("L", setSigLevel.value);
|
||||
});
|
||||
setSigGenPower.onchange = function() {
|
||||
sendValue("L", setSigGenPower.value);
|
||||
sigLevelSlider.value = this.value;
|
||||
};
|
||||
|
||||
// Update the current level value (each time you drag the slider handle)
|
||||
sigLevelSlider.oninput = function() {
|
||||
setSigLevel.value = this.value;
|
||||
setSigGenPower.value = this.value;
|
||||
setSigGenPower.onchange();
|
||||
}
|
||||
|
||||
function styleSigGenButton ( val ) {
|
||||
if (sigOnButton.value == 1) {
|
||||
sigOnButton.style="background-color:green";
|
||||
} else {
|
||||
sigOnButton.style="background-color:lightgrey";
|
||||
}
|
||||
}
|
||||
|
||||
sigOnButton.onclick = function() {
|
||||
if (sigOnButton.value == 1) {
|
||||
sigOnButton.value = 0;
|
||||
} else {
|
||||
sigOnButton.value = 1;
|
||||
}
|
||||
styleSigGenButton (sigOnButton.value);
|
||||
sendValue("G", sigOnButton.value);
|
||||
}
|
||||
|
||||
//var roundtripTime = document.getElementById('roundtripTime');
|
||||
//var messageCount = document.getElementById('messageCount');
|
||||
@ -962,6 +1019,7 @@ function handleSettings (settings)
|
||||
setRefOut.disabled = true;
|
||||
setSpur.disabled = true;
|
||||
setTrackGen.disabled = true;
|
||||
setTGFreq.disabled = true;
|
||||
setTrackGenPower.disabled = true;
|
||||
sigDiv.style.display = "none";
|
||||
chartDiv.style.display = "block";
|
||||
@ -978,6 +1036,7 @@ function handleSettings (settings)
|
||||
setRefOut.disabled = true;
|
||||
setSpur.disabled = true;
|
||||
setTrackGen.disabled = true;
|
||||
setTGFreq.disabled = true;
|
||||
setTrackGenPower.disabled = true;
|
||||
sigDiv.style.display = "none";
|
||||
chartDiv.style.display = "block";
|
||||
@ -1010,6 +1069,7 @@ function handleSettings (settings)
|
||||
setRefOut.disabled = true;
|
||||
setSpur.disabled = true;
|
||||
setTrackGen.disabled = true;
|
||||
setTGFreq.disabled = true;
|
||||
setTrackGenPower.disabled = true;
|
||||
sigDiv.style.display = "block";
|
||||
chartDiv.style.display = "none";
|
||||
@ -1026,6 +1086,7 @@ function handleSettings (settings)
|
||||
setRefOut.disabled = false;
|
||||
setSpur.disabled = false;
|
||||
setTrackGen.disabled = false;
|
||||
setTGFreq.disabled = false;
|
||||
setTrackGenPower.disabled = false;
|
||||
sigDiv.style.display = "none";
|
||||
chartDiv.style.display = "block";
|
||||
@ -1104,16 +1165,43 @@ function handleSettings (settings)
|
||||
oldSpur = settings.spur;
|
||||
}
|
||||
|
||||
if (settings.tg != oldTrackGen) {
|
||||
if (settings.tg) {
|
||||
setTrackGen.checked = true; // Tracking Generator checkbox
|
||||
} else {
|
||||
setTrackGen.checked = false; // Tracking Generator checkbox
|
||||
}
|
||||
if (settings.sg != oldSigGen) { // Sig gen on/off
|
||||
sigOnButton.value = settings.sg;
|
||||
oldSigGen = settings.sg;
|
||||
styleSigGenButton (sigOnButton.value);
|
||||
}
|
||||
|
||||
if (settings.sgFreq != oldSigGenFreq) { // sig gen frequency
|
||||
frequency = settings.sgFreq;
|
||||
oldSigGenFreq = settings.sgFreq;
|
||||
incdec(0,0);
|
||||
console.log("sigGenFreq=" + settings.sgFreq);
|
||||
}
|
||||
|
||||
sigLevelSlider.max = settings.sgCal; // Limits for sig gen power
|
||||
sigLevelSlider.min = settings.sgCal - settings.sgRange;
|
||||
setSigGenPower.max = settings.sgCal;
|
||||
setSigGenPower.min = settings.sgCal - settings.sgRange;
|
||||
|
||||
if (settings.sgPower != oldSigGenPower) {
|
||||
setSigGenPower.value = settings.sgPower;
|
||||
sigLevelSlider.value = settings.sgPower;
|
||||
oldSigGenPower = settings.sgPower;
|
||||
}
|
||||
|
||||
|
||||
if (settings.tg != oldTrackGen) { // tracking generator state
|
||||
setTrackGen.value = settings.tg;
|
||||
oldTrackGen = settings.tg;
|
||||
}
|
||||
|
||||
if (settings.tgPower != oldTrackGenPower) {
|
||||
if (settings.tgFreq != oldTGFreq) { // tracking generator frequency for sig gen mode
|
||||
setTGFreq.value = settings.tgFreq;
|
||||
oldTGFreq = settings.tgFreq;
|
||||
}
|
||||
|
||||
|
||||
if (settings.tgPower != oldTrackGenPower) { // tracking generator output power
|
||||
setTrackGenPower.value = settings.tgPower;
|
||||
oldTrackGenPower = settings.tgPower;
|
||||
}
|
||||
@ -1451,6 +1539,18 @@ function connect(host)
|
||||
items[i].disabled = false;
|
||||
}
|
||||
|
||||
var items = document.querySelectorAll(".select-button");
|
||||
var i;
|
||||
for (i = 0; i< items.length; i++) {
|
||||
items[i].disabled = false;
|
||||
}
|
||||
|
||||
var items = document.querySelectorAll(".checkbox-input");
|
||||
var i;
|
||||
for (i = 0; i< items.length; i++) {
|
||||
items[i].disabled = false;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
connection.onclose = function(event)
|
||||
@ -1473,6 +1573,18 @@ function connect(host)
|
||||
items[i].disabled = true;
|
||||
}
|
||||
|
||||
var items = document.querySelectorAll(".select-button");
|
||||
var i;
|
||||
for (i = 0; i< items.length; i++) {
|
||||
items[i].disabled = true;
|
||||
}
|
||||
|
||||
var items = document.querySelectorAll(".checkbox-input");
|
||||
var i;
|
||||
for (i = 0; i< items.length; i++) {
|
||||
items[i].disabled = true;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
connection.onerror = function(error)
|
||||
@ -1560,8 +1672,12 @@ function sendValue(c, val)
|
||||
// P Sig Gen set max output level (dBm)
|
||||
//
|
||||
//connection.send("# " + messageCounter + " " + sampleThreshold + " " + sampleSize);
|
||||
connection.send("#" + c + " " + val);
|
||||
console.log("Command:" + c + val);
|
||||
if (connectionStatus.value == "Connected") {
|
||||
connection.send("#" + c + " " + val);
|
||||
console.log("Command:" + c + val);
|
||||
} else {
|
||||
console.log("No connection - Command:" + c + val);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -182,7 +182,9 @@ input[type="number"] {
|
||||
}
|
||||
|
||||
.set-button {
|
||||
font-size: 14px;
|
||||
width: 60px;
|
||||
font-size: 14px;
|
||||
background-color: lightgrey;
|
||||
}
|
||||
|
||||
.setting {
|
||||
@ -194,6 +196,11 @@ input[type="number"] {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.setting-widelabel {
|
||||
width: 138px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.sigTitle {
|
||||
font-size: 36px;
|
||||
font-weight: bold;
|
||||
|
3
my_SA.h
3
my_SA.h
@ -65,6 +65,9 @@
|
||||
// #define SLIDER_MAX_POWER -13.0
|
||||
#define ATTENUATOR_RANGE 30 // in dB
|
||||
|
||||
// the B3555 SAW filter has max power rating of 10dBm.
|
||||
// Drive of 4 = 11dBm but 1 dB pad in my build. If you have a larger attenuator pad you can try higher powers
|
||||
#define RX_SI4432_MAX_DRIVE 4 // corresponds to 11dBm
|
||||
|
||||
/*
|
||||
* These definitions control the values that get set when you select "AUTO SETTINGS" from
|
||||
|
@ -57,6 +57,7 @@ extern uint8_t AGC_Reg; // Fixed value for preampGain if not auto
|
||||
extern uint32_t startFreq_IF;
|
||||
extern uint32_t stopFreq_IF;
|
||||
extern uint32_t sigFreq_IF;
|
||||
extern uint16_t sigGenOutputOn;
|
||||
|
||||
extern uint32_t startFreq_RX;
|
||||
extern uint32_t stopFreq_RX;
|
||||
@ -307,6 +308,10 @@ void webSocketEvent ( uint8_t num, WStype_t type, uint8_t* payload, size_t paylo
|
||||
SetLoDrive ( (uint8_t) value );
|
||||
break;
|
||||
|
||||
case 'f':
|
||||
SetTGFreq ( value );
|
||||
break;
|
||||
|
||||
case 'g':
|
||||
SetPreampGain( (int) value ); // Set PreAmp gain register
|
||||
break;
|
||||
@ -346,6 +351,10 @@ void webSocketEvent ( uint8_t num, WStype_t type, uint8_t* payload, size_t paylo
|
||||
pushBandscopeSettings();
|
||||
break;
|
||||
|
||||
case (SIG_GEN_LOW_RANGE):
|
||||
pushSigGenSettings();
|
||||
break;
|
||||
|
||||
default:
|
||||
Serial.println("Invalid mode in Request setting handler - simpleSA_wifi.cpp");
|
||||
|
||||
@ -356,6 +365,10 @@ void webSocketEvent ( uint8_t num, WStype_t type, uint8_t* payload, size_t paylo
|
||||
SetSweepSpan ( (int32_t) ( value * 1000000.0 ));
|
||||
break;
|
||||
|
||||
case 't': // Tracking Generator off/on/generate
|
||||
SetTracking ( (int8_t)value );
|
||||
break;
|
||||
|
||||
case 'A': // Internal Attenuation (PE4302)
|
||||
SetAttenuation ( value );
|
||||
break;
|
||||
@ -365,10 +378,14 @@ void webSocketEvent ( uint8_t num, WStype_t type, uint8_t* payload, size_t paylo
|
||||
break;
|
||||
|
||||
case 'F':
|
||||
SetSGFreq ( value );
|
||||
SetSGFreq ( value ); // Signal Generator Frequency
|
||||
break;
|
||||
|
||||
case 'L': // Tracking Generator output power (dBm)
|
||||
case 'G':
|
||||
SetSGState ( (uint16_t)value ); // Signal Generator output on/off
|
||||
break;
|
||||
|
||||
case 'L': // Signal Generator output power (dBm)
|
||||
SetSGPower ( value );
|
||||
break;
|
||||
|
||||
@ -381,10 +398,6 @@ void webSocketEvent ( uint8_t num, WStype_t type, uint8_t* payload, size_t paylo
|
||||
SetSpur ( (int8_t)value );
|
||||
break;
|
||||
|
||||
case 't': // Tracking Generator off/on/generate
|
||||
SetTracking ( (int8_t)value );
|
||||
break;
|
||||
|
||||
case 'T': // Tracking Generator output power (dBm)
|
||||
SetTGPower ( value );
|
||||
break;
|
||||
@ -619,6 +632,18 @@ void onGetSettings (AsyncWebServerRequest *request)
|
||||
root["spur"] = setting.Spur;
|
||||
root["tg"] = trackGenSetting.Mode;
|
||||
root["tgPower"] = trackGenSetting.Power;
|
||||
root["tgFreq"] = trackGenSetting.Frequency;
|
||||
root["tgMod"] = trackGenSetting.ModulationType;
|
||||
root["tgModFreq"] = trackGenSetting.ModFrequency;
|
||||
root["sg"] = sigGenOutputOn; //
|
||||
root["sgPower"] = sigGenSetting.Power;
|
||||
root["sgMod"] = sigGenSetting.ModulationType;
|
||||
root["sgModFreq"] = sigGenSetting.ModFrequency;
|
||||
root["sgFreq"] = sigGenSetting.Frequency;
|
||||
root["sgCal"] = sigGenSetting.Calibration;
|
||||
root["sgRange"] = ATTENUATOR_RANGE + 11; // SI4432 output can be adjusted over 21dBm but max to SAW filter is 10dBm
|
||||
root["tgCal"] = trackGenSetting.Calibration;
|
||||
root["tgRange"] = ATTENUATOR_RANGE + 21; // no SAW filter so 20dBm output is possible.
|
||||
|
||||
if ( AGC_On )
|
||||
root["PreAmp"] = 0x60; // Auto
|
||||
@ -662,10 +687,21 @@ static DynamicJsonDocument jsonDocument ( capacity ); // buffer for json data to
|
||||
jsonDocument["spur"] = setting.Spur;
|
||||
jsonDocument["tg"] = trackGenSetting.Mode;
|
||||
jsonDocument["tgPower"] = trackGenSetting.Power;
|
||||
|
||||
jsonDocument["tgFreq"] = trackGenSetting.Frequency;
|
||||
jsonDocument["tgMod"] = trackGenSetting.ModulationType;
|
||||
jsonDocument["tgModFreq"] = trackGenSetting.ModFrequency;
|
||||
jsonDocument["sg"] = sigGenOutputOn; //
|
||||
jsonDocument["sgPower"] = sigGenSetting.Power;
|
||||
jsonDocument["sgMod"] = sigGenSetting.ModulationType;
|
||||
jsonDocument["sgModFreq"] = sigGenSetting.ModFrequency;
|
||||
jsonDocument["sgFreq"] = sigGenSetting.Frequency;
|
||||
jsonDocument["sgCal"] = sigGenSetting.Calibration;
|
||||
jsonDocument["sgRange"] = ATTENUATOR_RANGE + 11; // SI4432 output can be adjusted over 21dBm but max to SAW filter is 10dBm
|
||||
jsonDocument["tgCal"] = trackGenSetting.Calibration;
|
||||
jsonDocument["tgRange"] = ATTENUATOR_RANGE + 21; // no SAW filter so 20dBm output is possible.
|
||||
|
||||
if ( AGC_On )
|
||||
jsonDocument["PreAmp"] = 0x60; // Auto
|
||||
|
||||
else
|
||||
jsonDocument["PreAmp"] = setting.PreampGain; // Fixed gain
|
||||
|
||||
@ -676,7 +712,6 @@ static DynamicJsonDocument jsonDocument ( capacity ); // buffer for json data to
|
||||
serializeJson ( jsonDocument, wsBuffer );
|
||||
webSocket.broadcastTXT ( wsBuffer ); // Send to all connected websocket clients
|
||||
}
|
||||
|
||||
else
|
||||
Serial.println ( "No buffer :(");
|
||||
|
||||
@ -710,10 +745,19 @@ static DynamicJsonDocument jsonDocument ( capacity ); // buffer for json data to
|
||||
jsonDocument["spur"] = setting.Spur;
|
||||
jsonDocument["tg"] = trackGenSetting.Mode;
|
||||
jsonDocument["tgPower"] = trackGenSetting.Power;
|
||||
|
||||
jsonDocument["tgFreq"] = trackGenSetting.Frequency;
|
||||
jsonDocument["sg"] = sigGenOutputOn; //
|
||||
jsonDocument["sgPower"] = sigGenSetting.Power;
|
||||
jsonDocument["sgMod"] = sigGenSetting.ModulationType;
|
||||
jsonDocument["sgModFreq"] = sigGenSetting.ModFrequency;
|
||||
jsonDocument["sgFreq"] = sigGenSetting.Frequency;
|
||||
jsonDocument["sgCal"] = sigGenSetting.Calibration;
|
||||
jsonDocument["sgRange"] = ATTENUATOR_RANGE + 11; // SI4432 output can be adjusted over 21dBm but max to SAW filter is 10dBm
|
||||
jsonDocument["tgCal"] = trackGenSetting.Calibration;
|
||||
jsonDocument["tgRange"] = ATTENUATOR_RANGE + 21; // no SAW filter so 20dBm output is possible.
|
||||
|
||||
if ( AGC_On )
|
||||
jsonDocument["PreAmp"] = 0x60; // Auto
|
||||
|
||||
else
|
||||
jsonDocument["PreAmp"] = setting.PreampGain; // Fixed gain
|
||||
|
||||
@ -724,7 +768,6 @@ static DynamicJsonDocument jsonDocument ( capacity ); // buffer for json data to
|
||||
serializeJson ( jsonDocument, wsBuffer );
|
||||
webSocket.broadcastTXT ( wsBuffer ); // Send to all connected websocket clients
|
||||
}
|
||||
|
||||
else
|
||||
Serial.println ( "No buffer :(");
|
||||
|
||||
@ -758,10 +801,19 @@ static DynamicJsonDocument jsonDocument ( capacity ); // buffer for json data to
|
||||
jsonDocument["spur"] = setting.Spur;
|
||||
jsonDocument["tg"] = trackGenSetting.Mode;
|
||||
jsonDocument["tgPower"] = trackGenSetting.Power;
|
||||
|
||||
jsonDocument["tgFreq"] = trackGenSetting.Frequency;
|
||||
jsonDocument["sg"] = sigGenOutputOn; //
|
||||
jsonDocument["sgPower"] = sigGenSetting.Power;
|
||||
jsonDocument["sgMod"] = sigGenSetting.ModulationType;
|
||||
jsonDocument["sgModFreq"] = sigGenSetting.ModFrequency;
|
||||
jsonDocument["sgFreq"] = sigGenSetting.Frequency;
|
||||
jsonDocument["sgCal"] = sigGenSetting.Calibration;
|
||||
jsonDocument["sgRange"] = ATTENUATOR_RANGE + 11; // SI4432 output can be adjusted over 21dBm but max to SAW filter is 10dBm
|
||||
jsonDocument["tgCal"] = trackGenSetting.Calibration;
|
||||
jsonDocument["tgRange"] = ATTENUATOR_RANGE + 21; // no SAW filter so 20dBm output is possible.
|
||||
|
||||
if ( AGC_On )
|
||||
jsonDocument["PreAmp"] = 0x60; // Auto
|
||||
|
||||
else
|
||||
jsonDocument["PreAmp"] = setting.PreampGain; // Fixed gain
|
||||
|
||||
@ -772,7 +824,6 @@ static DynamicJsonDocument jsonDocument ( capacity ); // buffer for json data to
|
||||
serializeJson ( jsonDocument, wsBuffer );
|
||||
webSocket.broadcastTXT ( wsBuffer ); // Send to all connected websocket clients
|
||||
}
|
||||
|
||||
else
|
||||
Serial.println ( "No buffer :(");
|
||||
|
||||
@ -806,10 +857,19 @@ static DynamicJsonDocument jsonDocument ( capacity ); // buffer for json data to
|
||||
jsonDocument["spur"] = setting.Spur;
|
||||
jsonDocument["tg"] = trackGenSetting.Mode;
|
||||
jsonDocument["tgPower"] = trackGenSetting.Power;
|
||||
|
||||
jsonDocument["tgFreq"] = trackGenSetting.Frequency;
|
||||
jsonDocument["sg"] = sigGenOutputOn; //
|
||||
jsonDocument["sgPower"] = sigGenSetting.Power;
|
||||
jsonDocument["sgMod"] = sigGenSetting.ModulationType;
|
||||
jsonDocument["sgModFreq"] = sigGenSetting.ModFrequency;
|
||||
jsonDocument["sgFreq"] = sigGenSetting.Frequency;
|
||||
jsonDocument["sgCal"] = sigGenSetting.Calibration;
|
||||
jsonDocument["sgRange"] = ATTENUATOR_RANGE + 11; // SI4432 output can be adjusted over 21dBm but max to SAW filter is 10dBm
|
||||
jsonDocument["tgCal"] = trackGenSetting.Calibration;
|
||||
jsonDocument["tgRange"] = ATTENUATOR_RANGE + 21; // no SAW filter so 20dBm output is possible.
|
||||
|
||||
if ( AGC_On )
|
||||
jsonDocument["PreAmp"] = 0x60; // Auto
|
||||
|
||||
else
|
||||
jsonDocument["PreAmp"] = setting.PreampGain; // Fixed gain
|
||||
|
||||
@ -820,13 +880,74 @@ static DynamicJsonDocument jsonDocument ( capacity ); // buffer for json data to
|
||||
serializeJson ( jsonDocument, wsBuffer );
|
||||
webSocket.broadcastTXT ( wsBuffer ); // Send to all connected websocket clients
|
||||
}
|
||||
|
||||
else
|
||||
Serial.println ( "No buffer :(");
|
||||
|
||||
// Serial.printf ( "Push Settings sweepPoints %u\n", sweepPoints );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Push the settings data to the websocket clients
|
||||
*/
|
||||
void pushSigGenSettings ()
|
||||
{
|
||||
size_t capacity = JSON_ARRAY_SIZE ( SCREEN_WIDTH )
|
||||
+ SCREEN_WIDTH*JSON_OBJECT_SIZE ( 2 ) + JSON_OBJECT_SIZE ( 17 );
|
||||
static DynamicJsonDocument jsonDocument ( capacity ); // buffer for json data to be pushed to the web clients
|
||||
|
||||
jsonDocument["mType"] = "Settings";
|
||||
jsonDocument["mode"] = setting.Mode;
|
||||
jsonDocument["dispPoints"] = displayPoints;
|
||||
jsonDocument["start"] = startFreq_IF / 1000.0;
|
||||
jsonDocument["stop"] = stopFreq_IF / 1000.0;
|
||||
jsonDocument["IF"] = setting.IF_Freq / 1000000.0;
|
||||
jsonDocument["attenuation"] = setting.Attenuate;
|
||||
jsonDocument["extGain"] = setting.ExternalGain;
|
||||
jsonDocument["levelOffset"] = setting.LevelOffset;
|
||||
jsonDocument["setRBW"] = setting.Bandwidth10;
|
||||
jsonDocument["bandwidth"] = bandwidth;
|
||||
jsonDocument["RefOut"] = setting.ReferenceOut;
|
||||
jsonDocument["Drive"] = setting.Drive;
|
||||
jsonDocument["sweepPoints"] = sweepPoints;
|
||||
jsonDocument["spur"] = setting.Spur;
|
||||
jsonDocument["tg"] = trackGenSetting.Mode;
|
||||
jsonDocument["tgPower"] = trackGenSetting.Power;
|
||||
jsonDocument["tgMod"] = trackGenSetting.ModulationType;
|
||||
jsonDocument["tgModFreq"] = trackGenSetting.ModFrequency;
|
||||
jsonDocument["tgFreq"] = trackGenSetting.Frequency;
|
||||
jsonDocument["sg"] = sigGenOutputOn; //
|
||||
jsonDocument["sgPower"] = sigGenSetting.Power;
|
||||
jsonDocument["sgMod"] = sigGenSetting.ModulationType;
|
||||
jsonDocument["sgModFreq"] = sigGenSetting.ModFrequency;
|
||||
jsonDocument["sgFreq"] = sigGenSetting.Frequency;
|
||||
jsonDocument["sgCal"] = sigGenSetting.Calibration;
|
||||
jsonDocument["sgRange"] = (ATTENUATOR_RANGE + RX_SI4432_MAX_DRIVE * 3); // SI4432 output can be adjusted over 21dBm but max to SAW filter is 10dBm
|
||||
jsonDocument["tgCal"] = trackGenSetting.Calibration;
|
||||
jsonDocument["tgRange"] = ATTENUATOR_RANGE + 21; // no SAW filter so full 20dBm output is possible.
|
||||
|
||||
if ( AGC_On )
|
||||
jsonDocument["PreAmp"] = 0x60; // Auto
|
||||
else
|
||||
jsonDocument["PreAmp"] = setting.PreampGain; // Fixed gain
|
||||
|
||||
String wsBuffer;
|
||||
|
||||
if ( wsBuffer )
|
||||
{
|
||||
serializeJson ( jsonDocument, wsBuffer );
|
||||
webSocket.broadcastTXT ( wsBuffer ); // Send to all connected websocket clients
|
||||
}
|
||||
else
|
||||
Serial.println ( "No buffer :(");
|
||||
|
||||
// Serial.printf ( "Push Settings sweepPoints %u\n", sweepPoints );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Prepare a response ready for push to web clients
|
||||
*/
|
||||
|
@ -51,6 +51,7 @@
|
||||
void pushIFSweepSettings ();
|
||||
void pushRXSweepSettings ();
|
||||
void pushBandscopeSettings ();
|
||||
void pushSigGenSettings ();
|
||||
void initChunkSweepDoc (uint32_t startIndex);
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user