Various fixes
Set actual power bug fixed, storage added to web page. External gain part done - needs menu mods. Some prep for RBW adjusts
This commit is contained in:
parent
78becf0d64
commit
c467ac55f1
@ -184,6 +184,11 @@ static uint16_t chunkIndex;
|
|||||||
old_settingAttenuate = setting.Attenuate;
|
old_settingAttenuate = setting.Attenuate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// pre-calculate adjustment for RSSI values
|
||||||
|
dBadjust = (double)setting.Attenuate - 120.0 + setting.LevelOffset - setting.ExternalGain;
|
||||||
|
Serial.printf("Bandscope dBadjust = %f; leveloffset = %f; attenuate = %i, ext gain = %f\n",
|
||||||
|
dBadjust, setting.LevelOffset, setting.Attenuate, setting.ExternalGain);
|
||||||
|
|
||||||
resetAverage = changedSetting;
|
resetAverage = changedSetting;
|
||||||
|
|
||||||
maxGrid = setting.BandscopeMaxGrid;
|
maxGrid = setting.BandscopeMaxGrid;
|
||||||
|
@ -93,6 +93,11 @@ static uint16_t chunkIndex;
|
|||||||
|
|
||||||
att.SetAtten ( 0 ); // Set the internal attenuator
|
att.SetAtten ( 0 ); // Set the internal attenuator
|
||||||
|
|
||||||
|
// pre-calculate adjustment for RSSI values
|
||||||
|
dBadjust = 120.0 + setting.LevelOffset - setting.ExternalGain;
|
||||||
|
Serial.printf("IFSweep dBadjust = %f; leveloffset = %f; attenuate = %i, ext gain = %f\n",
|
||||||
|
dBadjust, setting.LevelOffset, setting.Attenuate, setting.ExternalGain);
|
||||||
|
|
||||||
xmit.SetPowerReference ( setting.ReferenceOut ); // Set the GPIO reference output
|
xmit.SetPowerReference ( setting.ReferenceOut ); // Set the GPIO reference output
|
||||||
|
|
||||||
maxGrid = setting.MaxGrid;
|
maxGrid = setting.MaxGrid;
|
||||||
|
@ -99,6 +99,11 @@ static uint16_t chunkIndex;
|
|||||||
|
|
||||||
att.SetAtten ( 0 ); // Set the internal attenuator
|
att.SetAtten ( 0 ); // Set the internal attenuator
|
||||||
|
|
||||||
|
// pre-calculate adjustment for RSSI values
|
||||||
|
dBadjust = 120.0 + setting.LevelOffset - setting.ExternalGain;
|
||||||
|
Serial.printf("RXSweep dBadjust = %f; leveloffset = %f; attenuate = %i, ext gain = %f\n",
|
||||||
|
dBadjust, setting.LevelOffset, setting.Attenuate, setting.ExternalGain);
|
||||||
|
|
||||||
xmit.SetPowerReference ( setting.ReferenceOut ); // Set the GPIO reference output
|
xmit.SetPowerReference ( setting.ReferenceOut ); // Set the GPIO reference output
|
||||||
|
|
||||||
maxGrid = setting.MaxGrid;
|
maxGrid = setting.MaxGrid;
|
||||||
|
22
SweepLo.ino
22
SweepLo.ino
@ -91,7 +91,7 @@ static uint32_t offsetIF; // IF frequency offset by half the bandwidth to pos
|
|||||||
{
|
{
|
||||||
if ( initSweep || changedSetting ) // Something has changed, or a first start, so need to owrk out some basic things
|
if ( initSweep || changedSetting ) // Something has changed, or a first start, so need to owrk out some basic things
|
||||||
{
|
{
|
||||||
//Serial.println("InitSweep or changedSetting");
|
Serial.println("InitSweep or changedSetting");
|
||||||
autoSweepFreqStep = ( setting.ScanStop - setting.ScanStart ) / displayPoints;
|
autoSweepFreqStep = ( setting.ScanStop - setting.ScanStart ) / displayPoints;
|
||||||
|
|
||||||
vbw = autoSweepFreqStep / 1000.0; // Set the video resolution
|
vbw = autoSweepFreqStep / 1000.0; // Set the video resolution
|
||||||
@ -137,6 +137,11 @@ static uint32_t offsetIF; // IF frequency offset by half the bandwidth to pos
|
|||||||
old_settingAttenuate = setting.Attenuate;
|
old_settingAttenuate = setting.Attenuate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// pre-calculate adjustment for RSSI values
|
||||||
|
dBadjust = (double)setting.Attenuate - 120.0 + setting.LevelOffset - setting.ExternalGain;
|
||||||
|
Serial.printf("SweepLo dBadjust = %f; leveloffset = %f; attenuate = %i, ext gain = %f\n",
|
||||||
|
dBadjust, setting.LevelOffset, setting.Attenuate, setting.ExternalGain);
|
||||||
|
|
||||||
resetAverage = changedSetting;
|
resetAverage = changedSetting;
|
||||||
|
|
||||||
xmit.SetPowerReference ( setting.ReferenceOut ); // Set the GPIO reference output if wanted
|
xmit.SetPowerReference ( setting.ReferenceOut ); // Set the GPIO reference output if wanted
|
||||||
@ -258,14 +263,6 @@ static uint32_t offsetIF; // IF frequency offset by half the bandwidth to pos
|
|||||||
startFreq = setting.ScanStart + tempIF; // Start freq for the LO
|
startFreq = setting.ScanStart + tempIF; // Start freq for the LO
|
||||||
stopFreq = setting.ScanStop + tempIF; // Stop freq for the LO
|
stopFreq = setting.ScanStop + tempIF; // Stop freq for the LO
|
||||||
|
|
||||||
if ( setActualPowerRequested )
|
|
||||||
{
|
|
||||||
SetPowerLevel ( actualPower );
|
|
||||||
setActualPowerRequested = false;
|
|
||||||
|
|
||||||
// Serial.printf ( "Setting actual Power %f \n", actualPower );
|
|
||||||
}
|
|
||||||
|
|
||||||
pointMinGain = 100; // Reset min/max values
|
pointMinGain = 100; // Reset min/max values
|
||||||
pointMaxRSSI = 0;
|
pointMaxRSSI = 0;
|
||||||
|
|
||||||
@ -301,6 +298,13 @@ static uint32_t offsetIF; // IF frequency offset by half the bandwidth to pos
|
|||||||
initSweep = false;
|
initSweep = false;
|
||||||
changedSetting = false;
|
changedSetting = false;
|
||||||
|
|
||||||
|
if ( setActualPowerRequested )
|
||||||
|
{
|
||||||
|
SetPowerLevel ( actualPower );
|
||||||
|
setActualPowerRequested = false;
|
||||||
|
// Serial.printf ( "Setting actual Power %f \n", actualPower );
|
||||||
|
}
|
||||||
|
|
||||||
lastSweepStartMicros = sweepStartMicros; // Set last time we got here
|
lastSweepStartMicros = sweepStartMicros; // Set last time we got here
|
||||||
sweepStartMicros = micros(); // Current time
|
sweepStartMicros = micros(); // Current time
|
||||||
sweepMicros = sweepStartMicros - lastSweepStartMicros; // Calculate sweep time (no rollover handling)
|
sweepMicros = sweepStartMicros - lastSweepStartMicros; // Calculate sweep time (no rollover handling)
|
||||||
|
20
cmd.cpp
20
cmd.cpp
@ -1446,9 +1446,9 @@ uint8_t reg69; // Ditto
|
|||||||
case MSG_ACT_PWR: // Calibrate the indicated power level
|
case MSG_ACT_PWR: // Calibrate the indicated power level
|
||||||
if ( dataLen != 0 ) // Value specified?
|
if ( dataLen != 0 ) // Value specified?
|
||||||
{
|
{
|
||||||
tempValue = atoi ( dataBuff ); // Yes, get new power reading
|
tempValue = atof ( dataBuff ); // Yes, get new power reading
|
||||||
RequestSetPowerLevel ( tempValue );
|
RequestSetPowerLevel ( tempValue );
|
||||||
Serial.printf ( "Indicated power set to: %d\n", tempValue );
|
Serial.printf ( "Indicated power set to: %f\n", tempValue );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2230,6 +2230,9 @@ int oldAtten = setting.Attenuate;
|
|||||||
void SetExtGain ( double a )
|
void SetExtGain ( double a )
|
||||||
{
|
{
|
||||||
setting.ExternalGain = a;
|
setting.ExternalGain = a;
|
||||||
|
changedSetting = true;
|
||||||
|
WriteSettings ();
|
||||||
|
pushSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
double GetExtGain (void )
|
double GetExtGain (void )
|
||||||
@ -2294,16 +2297,16 @@ void RequestSetPowerLevel ( float o )
|
|||||||
* "SetPowerLevel"
|
* "SetPowerLevel"
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void SetPowerLevel ( int o )
|
void SetPowerLevel ( double o )
|
||||||
{
|
{
|
||||||
int oldOffset = setting.LevelOffset;
|
double oldOffset = setting.LevelOffset;
|
||||||
|
|
||||||
if ( o != 100 )
|
if ( o != 100.0 )
|
||||||
setting.LevelOffset = (int) ( o - (( oldPeakLevel / 2.0 + setting.Attenuate ) - 120.0 )); // WA2FZW
|
setting.LevelOffset = ( o - ( (double)oldPeakLevel / 2.0 + setting.Attenuate - setting.ExternalGain - 120.0) ); // WA2FZW
|
||||||
else
|
else
|
||||||
setting.LevelOffset = 0;
|
setting.LevelOffset = 0.0;
|
||||||
|
|
||||||
// Serial.printf ( "Peak level: %i, Actual: %i, Level offset: %i \n",
|
// Serial.printf ( "Peak level: %i, Actual: %f, Level offset: %f \n",
|
||||||
// oldPeakLevel, o, setting.LevelOffset );
|
// oldPeakLevel, o, setting.LevelOffset );
|
||||||
|
|
||||||
if ( oldOffset != setting.LevelOffset )
|
if ( oldOffset != setting.LevelOffset )
|
||||||
@ -2312,6 +2315,7 @@ int oldOffset = setting.LevelOffset;
|
|||||||
RedrawHisto (); // Redraw labels and restart sweep with new settings
|
RedrawHisto (); // Redraw labels and restart sweep with new settings
|
||||||
WriteSettings ();
|
WriteSettings ();
|
||||||
pushSettings();
|
pushSettings();
|
||||||
|
// Serial.println("Power level changed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
cmd.h
2
cmd.h
@ -159,7 +159,7 @@ void SetClearStorage ( void ); // Logically erases the saved scan
|
|||||||
void SetSubtractStorage(void); // Sets the "setting.SubtractStorage" flag
|
void SetSubtractStorage(void); // Sets the "setting.SubtractStorage" flag
|
||||||
|
|
||||||
void RequestSetPowerLevel ( float o ); // Power level calibration
|
void RequestSetPowerLevel ( float o ); // Power level calibration
|
||||||
void SetPowerLevel ( int o ); // ???
|
void SetPowerLevel ( double o ); // ???
|
||||||
|
|
||||||
void SetRBW ( int v ); // Sets the resolution bandwidth
|
void SetRBW ( int v ); // Sets the resolution bandwidth
|
||||||
|
|
||||||
|
176
data/index.html
176
data/index.html
@ -114,6 +114,8 @@
|
|||||||
<div class="setting" >
|
<div class="setting" >
|
||||||
<label for="setAtten" class="setting-label">Atten:</label>
|
<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>
|
||||||
|
<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> -->
|
<!--<select class="select-input" id="setAtten" name="setAtten"></select> -->
|
||||||
dB
|
dB
|
||||||
</div>
|
</div>
|
||||||
@ -135,15 +137,14 @@
|
|||||||
<br />
|
<br />
|
||||||
<div id="spur">
|
<div id="spur">
|
||||||
<div class="setting" >
|
<div class="setting" >
|
||||||
<label class="setting-label">Spur Reduction:</label>
|
<label class="setting-label">Spur Reduce:</label>
|
||||||
<input class="value-input" type="checkbox" id="spurReduction" size="1" value="0" />
|
<input class="checkbox-input" type="checkbox" id="spurReduction" size="1" value="0" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br />
|
|
||||||
<div id="tracking">
|
<div id="tracking">
|
||||||
<div class="setting" >
|
<div class="setting" >
|
||||||
<label class="setting-label">Tracking Generator:</label>
|
<label class="setting-label">TrackGen:</label>
|
||||||
<input class="value-input" type="checkbox" id="trackGen" size="1" value="0" />
|
<input class="checkbox-input" type="checkbox" id="trackGen" size="1" value="0" />
|
||||||
<input class="value-input" type="number" id="setTrackGenPower" placeholder="setTrackGenPower" maxlength = "9" min="-60" max="20" value="0" />
|
<input class="value-input" type="number" id="setTrackGenPower" placeholder="setTrackGenPower" maxlength = "9" min="-60" max="20" value="0" />
|
||||||
dBm
|
dBm
|
||||||
</div>
|
</div>
|
||||||
@ -158,7 +159,15 @@
|
|||||||
ms
|
ms
|
||||||
</div>
|
</div>
|
||||||
</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 -->
|
<!-- form for device settings -->
|
||||||
@ -268,6 +277,7 @@ var setStop = document.getElementById('setStop');
|
|||||||
var setCenter = document.getElementById('setCenter');
|
var setCenter = document.getElementById('setCenter');
|
||||||
var setSpan = document.getElementById('setSpan');
|
var setSpan = document.getElementById('setSpan');
|
||||||
var setAtten = document.getElementById('setAtten');
|
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 levelOffset = document.getElementById('levelOffset');
|
||||||
var setRefOut = document.getElementById('setRefOut');
|
var setRefOut = document.getElementById('setRefOut');
|
||||||
@ -282,7 +292,10 @@ var setPreAmp = document.getElementById('setPreAmp');
|
|||||||
var setAverage = document.getElementById('Average');
|
var setAverage = document.getElementById('Average');
|
||||||
var setTrackGen = document.getElementById('trackGen');
|
var setTrackGen = document.getElementById('trackGen');
|
||||||
var setTrackGenPower = document.getElementById('setTrackGenPower');
|
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;
|
var tempCenter;
|
||||||
@ -295,6 +308,7 @@ var oldSetRefOut = -2;
|
|||||||
var oldSetRBW = -10;
|
var oldSetRBW = -10;
|
||||||
var oldLevelOffset = 1000;
|
var oldLevelOffset = 1000;
|
||||||
var oldAttenuation = 1000;
|
var oldAttenuation = 1000;
|
||||||
|
var oldExternalGain = 1000;
|
||||||
var oldDrive = -1;
|
var oldDrive = -1;
|
||||||
var oldIF = 0;
|
var oldIF = 0;
|
||||||
var oldPreAmp = 0;
|
var oldPreAmp = 0;
|
||||||
@ -340,11 +354,60 @@ var gainSamples = [
|
|||||||
{x:100, y:40},
|
{x:100, y:40},
|
||||||
]; // dummy for test
|
]; // 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",
|
var chartSA = new CanvasJS.Chart("chartSA",
|
||||||
{
|
{
|
||||||
animationEnabled: false,
|
animationEnabled: false,
|
||||||
zoomEnabled: true,
|
zoomEnabled: true,
|
||||||
|
zoomType: "xy",
|
||||||
//height:800,
|
//height:800,
|
||||||
title: {
|
title: {
|
||||||
text: "ESP32 TinySA",
|
text: "ESP32 TinySA",
|
||||||
@ -425,6 +488,34 @@ var chartSA = new CanvasJS.Chart("chartSA",
|
|||||||
dataPoints : dBSamples,
|
dataPoints : dBSamples,
|
||||||
showInLegend : true,
|
showInLegend : true,
|
||||||
visible : false
|
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
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
@ -473,6 +564,10 @@ setAtten.addEventListener('change', (event) => {
|
|||||||
sendValue("A", setAtten.value);
|
sendValue("A", setAtten.value);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
setExtern.addEventListener('change', (event) => {
|
||||||
|
sendValue("E", setExtern.value);
|
||||||
|
});
|
||||||
|
|
||||||
setRBW.addEventListener('change', (event) => {
|
setRBW.addEventListener('change', (event) => {
|
||||||
sendValue("R", setRBW.value);
|
sendValue("R", setRBW.value);
|
||||||
});
|
});
|
||||||
@ -502,6 +597,62 @@ setTrackGen.addEventListener('change', (event) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
store1.addEventListener('change', (event) => {
|
||||||
|
if (store1.checked) {
|
||||||
|
var b = parseFloat(levelOffset.value) + parseFloat(setAtten.value) - 120 - parseFloat(setExtern.value);
|
||||||
|
chartSA.options.data[5].dataPoints = chartSA.options.data[1].dataPoints.map(obj => {
|
||||||
|
let rObj = {}
|
||||||
|
rObj.x = obj.x
|
||||||
|
rObj.y = obj.y/2+b
|
||||||
|
return rObj
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
chartSA.options.data[5].dataPoints.length = 2; // reset
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
store2.addEventListener('change', (event) => {
|
||||||
|
if (store2.checked) {
|
||||||
|
var b = parseInt(levelOffset.value) + parseInt(setAtten.value) - 120 - parseFloat(setExtern.value);
|
||||||
|
chartSA.options.data[6].dataPoints = chartSA.options.data[1].dataPoints.map(obj => {
|
||||||
|
let rObj = {}
|
||||||
|
rObj.x = obj.x
|
||||||
|
rObj.y = obj.y/2+b
|
||||||
|
return rObj
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
chartSA.options.data[6].dataPoints.length = 2; // reset
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
store3.addEventListener('change', (event) => {
|
||||||
|
if (store3.checked) {
|
||||||
|
var b = parseInt(levelOffset.value) + parseInt(setAtten.value) - 120 - parseFloat(setExtern.value);
|
||||||
|
chartSA.options.data[7].dataPoints = chartSA.options.data[1].dataPoints.map(obj => {
|
||||||
|
let rObj = {}
|
||||||
|
rObj.x = obj.x
|
||||||
|
rObj.y = obj.y/2+b
|
||||||
|
return rObj
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
chartSA.options.data[7].dataPoints.length = 2; // reset
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
store4.addEventListener('change', (event) => {
|
||||||
|
if (store4.checked) {
|
||||||
|
var b = parseInt(levelOffset.value) + parseInt(setAtten.value) - 120 - parseFloat(setExtern.value);
|
||||||
|
chartSA.options.data[8].dataPoints = chartSA.options.data[1].dataPoints.map(obj => {
|
||||||
|
let rObj = {}
|
||||||
|
rObj.x = obj.x
|
||||||
|
rObj.y = obj.y/2+b
|
||||||
|
return rObj
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
chartSA.options.data[8].dataPoints.length = 2; // reset
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
//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');
|
||||||
@ -583,6 +734,11 @@ function handleSettings (settings)
|
|||||||
oldAttenuation = settings.attenuation;
|
oldAttenuation = settings.attenuation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (settings.extGain != oldExternalGain) {
|
||||||
|
setExtern.value = settings.extGain;
|
||||||
|
oldExternalGain = settings.extGain;
|
||||||
|
}
|
||||||
|
|
||||||
if (settings.setRBW != oldSetRBW) {
|
if (settings.setRBW != oldSetRBW) {
|
||||||
setRBW.value = settings.setRBW;
|
setRBW.value = settings.setRBW;
|
||||||
oldSetRBW = settings.setRBW;
|
oldSetRBW = settings.setRBW;
|
||||||
@ -639,7 +795,7 @@ function handleSettings (settings)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleData (data)
|
function handleData (data) // rarely used! see handleChunkData for most sweeps
|
||||||
{
|
{
|
||||||
|
|
||||||
if (data.sweepPoints != sweepPoints.value) {
|
if (data.sweepPoints != sweepPoints.value) {
|
||||||
@ -651,7 +807,7 @@ function handleData (data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var b = parseInt(levelOffset.value) + parseInt(setAtten.value) - 120;
|
var b = parseFloat(levelOffset.value) + parseFloat(setAtten.value) - 120 - parseFloat(setExtern.value);
|
||||||
//chartSA.options.data[0].dataPoints = data.Points; // First series dB
|
//chartSA.options.data[0].dataPoints = data.Points; // First series dB
|
||||||
chartSA.options.data[0].dataPoints = data.Points.map(obj => {
|
chartSA.options.data[0].dataPoints = data.Points.map(obj => {
|
||||||
let rObj = {}
|
let rObj = {}
|
||||||
@ -732,7 +888,7 @@ function handleChunkData (data)
|
|||||||
|
|
||||||
var dataStart = data.StartIndex;
|
var dataStart = data.StartIndex;
|
||||||
|
|
||||||
var b = parseInt(levelOffset.value) + parseInt(setAtten.value) - 120;
|
var b = parseInt(levelOffset.value) + parseInt(setAtten.value) - 120 - parseFloat(setExtern.value);
|
||||||
|
|
||||||
var a = 1/setAverage.value;
|
var a = 1/setAverage.value;
|
||||||
|
|
||||||
|
@ -406,6 +406,7 @@ var chartSA = new CanvasJS.Chart("chartSA",
|
|||||||
{
|
{
|
||||||
animationEnabled: false,
|
animationEnabled: false,
|
||||||
zoomEnabled: true,
|
zoomEnabled: true,
|
||||||
|
zoomType: "xy",
|
||||||
//height:800,
|
//height:800,
|
||||||
title: {
|
title: {
|
||||||
text: "ESP32 TinySA",
|
text: "ESP32 TinySA",
|
||||||
@ -413,13 +414,34 @@ var chartSA = new CanvasJS.Chart("chartSA",
|
|||||||
},
|
},
|
||||||
axisX: {
|
axisX: {
|
||||||
title: "Frequency (MHz)",
|
title: "Frequency (MHz)",
|
||||||
titleFontSize: 24
|
titleFontSize: 24,
|
||||||
|
crosshair: {
|
||||||
|
enabled:true
|
||||||
|
},
|
||||||
|
stripLines:[
|
||||||
|
{
|
||||||
|
startValue:434.12,
|
||||||
|
thickness:1,
|
||||||
|
color:"#d8d8d8",
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
axisY:
|
axisY:
|
||||||
{
|
{
|
||||||
title: "dB",
|
title: "dB",
|
||||||
titleFontSize: 24,
|
titleFontSize: 24,
|
||||||
minimum: -120
|
minimum: -120,
|
||||||
|
crosshair: {
|
||||||
|
enabled:true
|
||||||
|
},
|
||||||
|
stripLines:[
|
||||||
|
{
|
||||||
|
startValue:-33,
|
||||||
|
endValue:-30,
|
||||||
|
color:"#d8d8d8",
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
},
|
},
|
||||||
axisY2: [
|
axisY2: [
|
||||||
{
|
{
|
||||||
@ -822,6 +844,7 @@ function handleData (data)
|
|||||||
|
|
||||||
chartSA.options.axisX.minimum = setStart.value;
|
chartSA.options.axisX.minimum = setStart.value;
|
||||||
chartSA.options.axisX.maximum = setStop.value;
|
chartSA.options.axisX.maximum = setStop.value;
|
||||||
|
chartSA.options.axisX.stripLines[0].value = setIF.value;
|
||||||
// chartSA.options.axisY.minimum = -120;
|
// chartSA.options.axisY.minimum = -120;
|
||||||
// chartSA.options.axisY.maximum = 0;
|
// chartSA.options.axisY.maximum = 0;
|
||||||
chartSA.options.axisY2.minimum = 0;
|
chartSA.options.axisY2.minimum = 0;
|
||||||
|
@ -234,7 +234,7 @@ typedef struct {
|
|||||||
double ExternalGain = 0.0; // External gain or attenuation
|
double ExternalGain = 0.0; // External gain or attenuation
|
||||||
int8_t Generate = 0; // Signal generator mode if not zero (***)
|
int8_t Generate = 0; // Signal generator mode if not zero (***)
|
||||||
int16_t Bandwidth10 = 0; // Resolution Bandwidth setting*10; 0 = auto
|
int16_t Bandwidth10 = 0; // Resolution Bandwidth setting*10; 0 = auto
|
||||||
int16_t LevelOffset = 0; // Calibration value (move to config?)
|
double LevelOffset = 0; // Calibration value (move to config?)
|
||||||
int8_t ReferenceOut = 1; // Transmitter GPIO2 set to 15MHz
|
int8_t ReferenceOut = 1; // Transmitter GPIO2 set to 15MHz
|
||||||
int16_t PowerGrid = 10; // dB/vertical divison on the grid
|
int16_t PowerGrid = 10; // dB/vertical divison on the grid
|
||||||
bool Spur = 0; // Spur reduction on or off
|
bool Spur = 0; // Spur reduction on or off
|
||||||
|
@ -391,6 +391,7 @@ uint32_t sweepPoints; // Number of points in the sweep. Can be more than DIS
|
|||||||
uint32_t startFreq = 0; // Default start frequency is 0MHz
|
uint32_t startFreq = 0; // Default start frequency is 0MHz
|
||||||
uint32_t stopFreq = 100000000; // Default stop frequency is 100MHz
|
uint32_t stopFreq = 100000000; // Default stop frequency is 100MHz
|
||||||
uint32_t tempIF; // IF used for this sweep. Changes if Spur reduction is on
|
uint32_t tempIF; // IF used for this sweep. Changes if Spur reduction is on
|
||||||
|
double dBadjust; // Sum of attenuation, external gain, calibration offset and RBW correction
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Variables for offset frequency tuning
|
* Variables for offset frequency tuning
|
||||||
@ -1746,7 +1747,7 @@ uint16_t rssiToImgY ( uint8_t rSSI )
|
|||||||
|
|
||||||
double rssiTodBm ( uint8_t rSSI )
|
double rssiTodBm ( uint8_t rSSI )
|
||||||
{
|
{
|
||||||
return (( rSSI / 2.0 + setting.Attenuate ) - 120.0 ) + setting.LevelOffset;
|
return ( rSSI / 2.0 + dBadjust );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1756,7 +1757,7 @@ double rssiTodBm ( uint8_t rSSI )
|
|||||||
|
|
||||||
uint8_t dBmToRSSI ( double dBm )
|
uint8_t dBmToRSSI ( double dBm )
|
||||||
{
|
{
|
||||||
return ( 2 * ( dBm - setting.Attenuate + 120.0 - setting.LevelOffset ) );
|
return ( 2 * ( dBm - dBadjust ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1775,7 +1776,7 @@ void DisplayPoint ( uint8_t* data, int i, int color )
|
|||||||
|
|
||||||
int lastPoint = i - 1;
|
int lastPoint = i - 1;
|
||||||
int delta = maxGrid - minGrid;
|
int delta = maxGrid - minGrid;
|
||||||
double f0 = (( data[i] / 2.0 + setting.Attenuate ) - 120.0 ) + setting.LevelOffset; // Current point
|
double f0 = data[i] / 2.0 + dBadjust; // Current point
|
||||||
f0 = ( f0 - minGrid ) * gridHeight / delta;
|
f0 = ( f0 - minGrid ) * gridHeight / delta;
|
||||||
|
|
||||||
if ( f0 >= gridHeight )
|
if ( f0 >= gridHeight )
|
||||||
@ -1784,7 +1785,7 @@ void DisplayPoint ( uint8_t* data, int i, int color )
|
|||||||
if ( f0 < 0 )
|
if ( f0 < 0 )
|
||||||
f0 = 0;
|
f0 = 0;
|
||||||
|
|
||||||
double f1 = (( data[lastPoint] / 2.0 + setting.Attenuate ) - 120.0) + setting.LevelOffset; // Previous point
|
double f1 = data[lastPoint] / 2.0 + dBadjust; // Previous point
|
||||||
|
|
||||||
f1 = ( f1 - minGrid ) * gridHeight / delta;
|
f1 = ( f1 - minGrid ) * gridHeight / delta;
|
||||||
|
|
||||||
|
@ -468,6 +468,7 @@ void onGetSweep ( AsyncWebServerRequest *request )
|
|||||||
root["stop"] = setting.ScanStop / 1000.0;
|
root["stop"] = setting.ScanStop / 1000.0;
|
||||||
root["IF"] = setting.IF_Freq / 1000000.0;
|
root["IF"] = setting.IF_Freq / 1000000.0;
|
||||||
root["attenuation"] = setting.Attenuate;
|
root["attenuation"] = setting.Attenuate;
|
||||||
|
root["extGain"] = setting.ExternalGain;
|
||||||
root["levelOffset"] = setting.LevelOffset;
|
root["levelOffset"] = setting.LevelOffset;
|
||||||
root["setRBW"] = setting.Bandwidth10;
|
root["setRBW"] = setting.Bandwidth10;
|
||||||
root["bandwidth"] = bandwidth;
|
root["bandwidth"] = bandwidth;
|
||||||
@ -601,6 +602,7 @@ static DynamicJsonDocument jsonDocument ( capacity ); // buffer for json data to
|
|||||||
jsonDocument["stop"] = stopFreq_IF / 1000.0;
|
jsonDocument["stop"] = stopFreq_IF / 1000.0;
|
||||||
jsonDocument["IF"] = sigFreq_IF / 1000000.0;
|
jsonDocument["IF"] = sigFreq_IF / 1000000.0;
|
||||||
jsonDocument["attenuation"] = setting.Attenuate;
|
jsonDocument["attenuation"] = setting.Attenuate;
|
||||||
|
jsonDocument["extGain"] = setting.ExternalGain;
|
||||||
jsonDocument["levelOffset"] = setting.LevelOffset;
|
jsonDocument["levelOffset"] = setting.LevelOffset;
|
||||||
jsonDocument["setRBW"] = setting.Bandwidth10;
|
jsonDocument["setRBW"] = setting.Bandwidth10;
|
||||||
jsonDocument["bandwidth"] = bandwidth;
|
jsonDocument["bandwidth"] = bandwidth;
|
||||||
@ -645,6 +647,7 @@ static DynamicJsonDocument jsonDocument ( capacity ); // buffer for json data to
|
|||||||
jsonDocument["stop"] = stopFreq_RX / 1000.0;
|
jsonDocument["stop"] = stopFreq_RX / 1000.0;
|
||||||
jsonDocument["IF"] = setting.IF_Freq / 1000000.0;
|
jsonDocument["IF"] = setting.IF_Freq / 1000000.0;
|
||||||
jsonDocument["attenuation"] = setting.Attenuate;
|
jsonDocument["attenuation"] = setting.Attenuate;
|
||||||
|
jsonDocument["extGain"] = setting.ExternalGain;
|
||||||
jsonDocument["levelOffset"] = setting.LevelOffset;
|
jsonDocument["levelOffset"] = setting.LevelOffset;
|
||||||
jsonDocument["setRBW"] = setting.Bandwidth10;
|
jsonDocument["setRBW"] = setting.Bandwidth10;
|
||||||
jsonDocument["bandwidth"] = bandwidth;
|
jsonDocument["bandwidth"] = bandwidth;
|
||||||
@ -689,6 +692,7 @@ static DynamicJsonDocument jsonDocument ( capacity ); // buffer for json data to
|
|||||||
jsonDocument["stop"] = ( setting.BandscopeStart + setting.BandscopeSpan ) / 1000.0;
|
jsonDocument["stop"] = ( setting.BandscopeStart + setting.BandscopeSpan ) / 1000.0;
|
||||||
jsonDocument["IF"] = setting.IF_Freq / 1000000.0;
|
jsonDocument["IF"] = setting.IF_Freq / 1000000.0;
|
||||||
jsonDocument["attenuation"] = setting.Attenuate;
|
jsonDocument["attenuation"] = setting.Attenuate;
|
||||||
|
jsonDocument["extGain"] = setting.ExternalGain;
|
||||||
jsonDocument["levelOffset"] = setting.LevelOffset;
|
jsonDocument["levelOffset"] = setting.LevelOffset;
|
||||||
jsonDocument["setRBW"] = setting.Bandwidth10;
|
jsonDocument["setRBW"] = setting.Bandwidth10;
|
||||||
jsonDocument["bandwidth"] = bandwidth;
|
jsonDocument["bandwidth"] = bandwidth;
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include "ESPAsyncWebServer.h" // ESP32 Webserver library
|
#include "ESPAsyncWebServer.h" // ESP32 Webserver library
|
||||||
#include "SPIFFS.h" // ESP32 File system
|
#include "SPIFFS.h" // ESP32 File system
|
||||||
#include <TFT_eSPI.h> // Display library
|
#include <TFT_eSPI.h> // Display library
|
||||||
|
#include "cmd.h"
|
||||||
|
|
||||||
#include <AsyncJson.h>
|
#include <AsyncJson.h>
|
||||||
#include <ArduinoJson.h> // Install using Library Manager or go to arduinojson.org
|
#include <ArduinoJson.h> // Install using Library Manager or go to arduinojson.org
|
||||||
@ -53,17 +54,17 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
int GetPointsAsXML ( void textHandler (char *s) );
|
int GetPointsAsXML ( void textHandler (char *s) );
|
||||||
void set_sweep_frequency ( int type, int32_t frequency );
|
// void set_sweep_frequency ( int type, int32_t frequency );
|
||||||
void SetRBW ( int );
|
// void SetRBW ( int );
|
||||||
void SetAttenuation ( int a );
|
// void SetAttenuation ( int a );
|
||||||
void RequestSetPowerLevel ( float o );
|
// void RequestSetPowerLevel ( float o );
|
||||||
void SetPowerLevel ( int o );
|
// void SetPowerLevel ( double o );
|
||||||
void SetPowerReference (int freq );
|
// void SetPowerReference (int freq );
|
||||||
void SetLoDrive ( uint8_t level );
|
// void SetLoDrive ( uint8_t level );
|
||||||
bool SetIFFrequency ( int32_t f );
|
// bool SetIFFrequency ( int32_t f );
|
||||||
void SetPreAmpGain ( int g );
|
// void SetPreAmpGain ( int g );
|
||||||
void WriteSettings ();
|
void WriteSettings ();
|
||||||
void SetSpur ( int v );
|
// void SetSpur ( int v );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* variables and objects outside of TinySA_wifi
|
* variables and objects outside of TinySA_wifi
|
||||||
|
Loading…
Reference in New Issue
Block a user