Add spur menu and cleanup code

tinySA-v0.2
erikkaashoek 6 years ago
parent 2898c02d36
commit d7763cec48

@ -197,8 +197,8 @@ caldata_recall(int id)
/* duplicated saved data onto sram to be able to modify marker/trace */
memcpy(dst, src, sizeof(setting_t));
update_frequencies();
SetScale(setting.scale);
SetReflevel(setting.reflevel);
set_scale(setting.scale);
set_reflevel(setting.reflevel);
return 0;
load_default:
load_default_properties();

@ -2282,8 +2282,8 @@ return; // Don't use!!!!
shell_printf("SI4432 init done\r\n");
if (argc == 1) {
rvalue = xtoi(argv[0]);
SetRX(rvalue);
SetMode(rvalue);
set_switches(rvalue);
set_mode(rvalue);
shell_printf("SI4432 mode %d set\r\n", rvalue);
}
}
@ -2349,11 +2349,11 @@ VNA_SHELL_FUNCTION(cmd_m)
(void)argc;
(void)argv;
SetMode(0);
set_mode(0);
setting.tracking = false; //Default test setup
setting.step_atten = false;
SetAttenuation(0);
SetReflevel(-10);
set_attenuation(0);
set_reflevel(-10);
set_sweep_frequency(ST_START,frequencyStart - setting.frequency_IF );
set_sweep_frequency(ST_STOP, frequencyStop - setting.frequency_IF);
draw_cal_status();
@ -2389,9 +2389,9 @@ return;
int p = my_atoi(argv[0]);
int a = my_atoi(argv[1]);
if (p==5)
SetAttenuation(-a);
set_attenuation(-a);
if (p==6)
SetMode(a);
set_mode(a);
if (p==1)
if (get_refer_output() != a)
set_refer_output(a);
@ -2402,7 +2402,7 @@ VNA_SHELL_FUNCTION(cmd_w)
(void)argc;
int p = my_atoi(argv[0]);
return;
SetRBW(p);
set_RBW(p);
}
//=============================================================================
VNA_SHELL_FUNCTION(cmd_help);

@ -32,7 +32,7 @@
#define __CALIBRATE__
//#define __ULTRA__ // Add harmonics mode on low input.
//#define __ULTRA_SA__ // Adds ADF4351 control for extra high 1st IF stage
#define __SPUR__ // Does spur reduction by shifting IF
/*
* main.c
@ -314,7 +314,7 @@ typedef struct config {
extern config_t config;
//#define settingLevelOffset config.level_offset
int settingLevelOffset(void);
int get_level_offset(void);
void set_trace_type(int t, int type);
void set_trace_channel(int t, int channel);
@ -494,6 +494,7 @@ typedef struct setting
int freq_mode;
int measurement;
int refer;
int spur;
trace_t _trace[TRACES_MAX];
marker_t _markers[MARKERS_MAX];
int8_t _active_marker;
@ -690,7 +691,7 @@ int plot_printf(char *str, int, const char *fmt, ...);
//extern int actualStepDelay;
//extern int setting_mode;
void update_rbw(void);
int GetActualRBW(void);
int get_actual_RBW(void);
#define byte uint8_t
extern volatile int SI4432_Sel; // currently selected SI4432
@ -718,10 +719,10 @@ int get_waterfall(void);
void toggle_tracking(void);
void calibrate(void);
void reset_calibration(void);
void SetReflevel(int);
void SetScale(int);
void SetRBW(int);
void SetRX(int);
void set_reflevel(int);
void set_scale(int);
void set_RBW(int);
void set_switches(int);
//extern int setting_measurement;
void self_test(int);
//extern int setting_test;

@ -804,9 +804,9 @@ static void trace_get_value_string(
} else {
dfreq = frequencies[i];
}
if (GetActualRBW() < 10)
if (get_actual_RBW() < 10)
plot_printf(&buf2[1], sizeof(buf2) -1, "%3.3f" , (dfreq + 500) / 1000000.0);
else if (GetActualRBW() < 100)
else if (get_actual_RBW() < 100)
plot_printf(&buf2[1], sizeof(buf2) -1, "%3.2f" , (dfreq + 5000) / 1000000.0);
else
plot_printf(&buf2[1], sizeof(buf2) -1, "%3.1f" , (dfreq + 50000) / 1000000.0);
@ -814,7 +814,7 @@ static void trace_get_value_string(
// frequency_string(&buf2[1], sizeof(buf2) -1, dfreq);
v = logmag(&coeff[i]);
if (mtype & M_NOISE)
v = v - 10*log10(GetActualRBW()*1000.0);
v = v - 10*log10(get_actual_RBW()*1000.0);
if (v == -INFINITY)
plot_printf(buf, len, "-INF");
else

@ -2,38 +2,6 @@
int dirty = true;
int scandirty = true;
#if 0
int setting.mode = -1; // To force initialzation
int setting.attenuate = 0;
int setting.auto_attenuation;
int setting.step_atten;
int setting.rbw = 0;
int setting.below_IF;
int setting.average = 0;
int setting.show_stored = 0;
int setting.subtract_stored = 0;
int setting.drive; // 0-7 , 7=+20dBm, 3dB steps
int setting.agc = true;
int setting.lna = false;
int setting.auto_reflevel;
int setting.reflevel;
int setting.scale;
int setting.tracking = false;
int setting.modulation = MO_NONE;
int setting.step_delay = 0;
int setting.frequency_step;
int setting.test;
int setting.harmonic;
int setting.decay;
int setting.noise;
float setting.vbw = 0;
int setting.tracking_output;
int setting.repeat;
uint32_t setting.frequency0;
uint32_t setting.frequency1;
uint32_t setting.setting.frequency_IF;
int setting.measurement;
#endif
extern int actualStepDelay;
@ -41,12 +9,7 @@ setting_t setting;
uint32_t frequencies[POINTS_COUNT];
float actual_rbw = 0;
int vbwSteps = 1;
#ifdef __ULTRA__
int setting.spur = 0;
#endif
float minFreq = 0;
float maxFreq = 520000000;
@ -58,8 +21,8 @@ int in_selftest = false;
void reset_settings(int m)
{
setting.mode = m;
SetScale(10);
SetReflevel(-10);
set_scale(10);
set_reflevel(-10);
setting.attenuate = 0;
setting.rbw = 0;
setting.average = 0;
@ -85,7 +48,7 @@ void reset_settings(int m)
setting.frequency_IF = 433800000;
trace[TRACE_STORED].enabled = false;
trace[TRACE_TEMP].enabled = false;
#ifdef __ULTRA__
#ifdef __SPUR__
setting.spur = 0;
#endif
switch(m) {
@ -181,7 +144,7 @@ void set_measurement(int m)
setting.measurement = m;
dirty = true;
}
void SetDrive(int d)
void set_drive(int d)
{
setting.drive = d;
dirty = true;
@ -204,7 +167,7 @@ void toggle_below_IF(void)
dirty = true;
}
void SetModulation(int m)
void set_modulation(int m)
{
setting.modulation = m;
dirty = true;
@ -218,7 +181,7 @@ void set_repeat(int r)
}
}
void SetIF(int f)
void set_IF(int f)
{
setting.frequency_IF = f;
dirty = true;
@ -235,7 +198,7 @@ int GetMode(void)
#define POWER_OFFSET 20
#define SWITCH_ATTENUATION 29
int GetAttenuation(void)
int get_attenuation(void)
{
if (setting.mode == M_GENLOW) {
if (setting.step_atten)
@ -257,7 +220,7 @@ void set_auto_reflevel(void)
setting.auto_reflevel = true;
}
void SetAttenuation(int a)
void set_attenuation(int a)
{
if (setting.mode == M_GENLOW) {
setting.drive = 8; // Start at lowest drive level;
@ -296,7 +259,7 @@ void SetAttenuation(int a)
dirty = true;
}
void SetStorage(void)
void set_storage(void)
{
for (int i=0; i<POINTS_COUNT;i++)
stored_t[i] = actual_t[i];
@ -310,7 +273,7 @@ int GetStorage(void)
return(setting.show_stored);
}
void SetClearStorage(void)
void set_clear_storage(void)
{
setting.show_stored = false;
setting.subtract_stored = false;
@ -318,11 +281,11 @@ void SetClearStorage(void)
dirty = true;
}
void SetSubtractStorage(void)
void set_subtract_storage(void)
{
if (!setting.subtract_stored) {
if (!setting.show_stored)
SetStorage();
set_storage();
setting.subtract_stored = true;
} else {
setting.subtract_stored = false;
@ -336,9 +299,9 @@ int GetSubtractStorage(void)
}
extern float peakLevel;
void SetPowerLevel(int o)
void set_power_level(int o)
{
float new_offset = o - peakLevel - setting.attenuate + settingLevelOffset();
float new_offset = o - peakLevel - setting.attenuate + get_level_offset();
if (o != 100) {
if (setting.mode == M_HIGH)
config.high_level_offset = new_offset;
@ -356,7 +319,7 @@ void SetPowerLevel(int o)
dirty = true;
}
int settingLevelOffset(void)
int get_level_offset(void)
{
if (setting.mode == M_HIGH) {
if (config.high_level_offset == 100)
@ -380,7 +343,7 @@ int level_is_calibrated(void)
return(0);
}
void SetRBW(int v)
void set_RBW(int v)
{
setting.rbw = v;
update_rbw();
@ -392,17 +355,17 @@ int GetRBW(void)
return(setting.rbw);
}
int GetActualRBW(void)
int get_actual_RBW(void)
{
return((int) actual_rbw);
}
#ifdef __ULTRA__
#ifdef __SPUR__
void SetSpur(int v)
{
setting.spur = v;
if (setting.spur && actual_rbw > 360)
SetRBW(300);
set_RBW(300);
dirty = true;
}
#endif
@ -420,13 +383,13 @@ void set_harmonic(int h)
set_sweep_frequency(ST_STOP, (uint32_t) maxFreq);
}
void SetStepDelay(int d)
void set_step_delay(int d)
{
setting.step_delay = d;
dirty = true;
}
void SetAverage(int v)
void set_average(int v)
{
setting.average = v;
trace[TRACE_TEMP].enabled = (v != 0);
@ -438,7 +401,7 @@ int GetAverage(void)
return(setting.average);
}
void ToggleLNA(void)
void toggle_LNA(void)
{
setting.lna = !setting.lna;
dirty = true;
@ -460,7 +423,7 @@ int GetLNA(void)
return(setting.lna);
}
void ToggleAGC(void)
void toggle_AGC(void)
{
setting.agc = !setting.agc;
dirty = true;
@ -471,7 +434,7 @@ int GetAGC(void)
return(setting.agc);
}
void SetReflevel(int level)
void set_reflevel(int level)
{
setting.reflevel = (level / setting.scale) * setting.scale;
set_trace_refpos(0, NGRIDY - level / get_trace_scale(0));
@ -484,7 +447,7 @@ void SetReflevel(int level)
// return (NGRIDY - get_trace_refpos(2)) * get_trace_scale(2);
//}
void SetScale(int s) {
void set_scale(int s) {
setting.scale = s;
set_trace_scale(0, s);
set_trace_scale(1, s);
@ -494,7 +457,7 @@ void SetScale(int s) {
//int GetScale(void) {
// return get_trace_refpos(2);
//}
void SetMode(int m)
void set_mode(int m)
{
#ifdef __ULTRA__
if (m == 6)
@ -523,7 +486,7 @@ void apply_settings(void)
SI4432_Write_Byte(0x79, 0); // IF no FM back to channel 0
}
#endif
SetRX(setting.mode);
set_switches(setting.mode);
SI4432_SetReference(setting.refer);
update_rbw();
if (setting.step_delay == 0){
@ -573,29 +536,29 @@ void setFreq(int V, unsigned long freq)
}
}
void SetSwitchTransmit(void) {
void set_switch_transmit(void) {
SI4432_Write_Byte(0x0b, 0x1f);// Set switch to transmit
SI4432_Write_Byte(0x0c, 0x1d);
}
void SetSwitchReceive(void) {
void set_switch_receive(void) {
SI4432_Write_Byte(0x0b, 0x1d);// Set switch to receive
SI4432_Write_Byte(0x0c, 0x1f);
}
void SetSwitchOff(void) {
void set_switch_off(void) {
SI4432_Write_Byte(0x0b, 0x1d);// Set both switch off
SI4432_Write_Byte(0x0c, 0x1f);
}
void SetAGCLNA(void) {
void set_AGC_LNA(void) {
unsigned char v = 0x40;
if (setting.agc) v |= 0x20;
if (setting.lna) v |= 0x10;
SI4432_Write_Byte(0x69, v);
}
void SetRX(int m)
void set_switches(int m)
{
switch(m) {
case M_LOW: // Mixed into 0
@ -605,17 +568,17 @@ case M_ULTRA:
SI4432_Sel = 0;
SI4432_Receive();
if (setting.step_atten) {
SetSwitchTransmit();
set_switch_transmit();
} else {
SetSwitchReceive();
set_switch_receive();
}
SetAGCLNA();
set_AGC_LNA();
SI4432_Sel = 1;
if (setting.tracking_output)
SetSwitchTransmit();
set_switch_transmit();
else
SetSwitchOff();
set_switch_off();
// SI4432_Receive(); For noise testing only
SI4432_Transmit(setting.drive);
// SI4432_SetReference(setting.refer);
@ -623,43 +586,43 @@ case M_ULTRA:
case M_HIGH: // Direct into 1
// SI4432_SetReference(-1); // Stop reference output
SI4432_Sel = 0; // both as receiver to avoid spurs
SetSwitchReceive();
set_switch_receive();
SI4432_Receive();
SI4432_Sel = 1;
SI4432_Receive();
SetSwitchReceive();
SetAGCLNA();
set_switch_receive();
set_AGC_LNA();
break;
case M_GENLOW: // Mixed output from 0
SI4432_Sel = 0;
if (setting.step_atten) {
SetSwitchOff();
set_switch_off();
} else {
SetSwitchTransmit();
set_switch_transmit();
}
SI4432_Transmit(setting.drive);
SI4432_Sel = 1;
if (setting.modulation == MO_EXTERNAL) {
SetSwitchTransmit(); // High input for external LO scuh as tracking output of other tinySA
set_switch_transmit(); // High input for external LO scuh as tracking output of other tinySA
SI4432_Receive();
} else {
SetSwitchOff();
set_switch_off();
SI4432_Transmit(12); // Fix LO drive a 10dBm
}
break;
case M_GENHIGH: // Direct output from 1
SI4432_Sel = 0;
SI4432_Receive();
SetSwitchReceive();
set_switch_receive();
SI4432_Sel = 1;
if (setting.drive < 8) {
SetSwitchOff();
set_switch_off();
} else {
SetSwitchTransmit();
set_switch_transmit();
}
SI4432_Transmit(setting.drive);
@ -802,7 +765,8 @@ static const int spur_table[] =
16960000,
22960000,
28960000,
29800000,
49500000,
/*
0.52
6.96
@ -959,7 +923,7 @@ float perform(bool break_on_operation, int i, uint32_t f, int tracking)
// if (-offs > (uint32_t)f) // Ensure lf >0 0
// offs = -(uint32_t)(f + offs);
uint32_t lf = (uint32_t)(f + offs);
#ifdef __ULTRA__
#ifdef __SPUR__
float spur_RSSI = 0;
again:
#endif
@ -969,6 +933,10 @@ again:
} else if (MODE_LOW(setting.mode)) {
if (setting.mode == M_LOW && !in_selftest && avoid_spur(f)) {
local_IF = spur_alternate_IF;
#ifdef __SPUR__
} else if (setting.mode== M_LOW && setting.spur){
local_IF = setting.frequency_IF + (int)(actual_rbw < 350.0 ? setting.spur*300000 : 0 );
#endif
} else {
// local_IF = setting.frequency_IF ;
}
@ -1030,8 +998,8 @@ again:
signal_path_loss = -5.5; // Loss in dB, -9.5 for v0.1, -12.5 for v0.2
else
signal_path_loss = +7; // Loss in dB (+ is gain)
float subRSSI = SI4432_RSSI(lf, MODE_SELECT(setting.mode))+settingLevelOffset()+ setting.attenuate - signal_path_loss;
#ifdef __ULTRA__
float subRSSI = SI4432_RSSI(lf, MODE_SELECT(setting.mode))+get_level_offset()+ setting.attenuate - signal_path_loss;
#ifdef __SPUR__
if (setting.spur == 1) { // First pass
spur_RSSI = subRSSI;
setting.spur = -1;
@ -1180,15 +1148,15 @@ static bool sweep(bool break_on_operation)
}
if (!in_selftest && MODE_INPUT(setting.mode) && setting.auto_reflevel && max_index[0] > 0) {
if (actual_t[max_index[0]] > setting.reflevel - setting.scale/2) {
SetReflevel(setting.reflevel + setting.scale);
set_reflevel(setting.reflevel + setting.scale);
redraw_request |= REDRAW_CAL_STATUS;
dirty = true; // Must be above if(scandirty!!!!!)
} else if (temp_min_level < setting.reflevel - 9 * setting.scale - 2 && actual_t[max_index[0]] < setting.reflevel - setting.scale * 3 / 2) {
SetReflevel(setting.reflevel - setting.scale);
set_reflevel(setting.reflevel - setting.scale);
redraw_request |= REDRAW_CAL_STATUS;
dirty = true; // Must be above if(scandirty!!!!!)
} else if (temp_min_level > setting.reflevel - 9 * setting.scale + setting.scale + 2) {
SetReflevel(setting.reflevel + setting.scale);
set_reflevel(setting.reflevel + setting.scale);
redraw_request |= REDRAW_CAL_STATUS;
dirty = true; // Must be above if(scandirty!!!!!)
}
@ -1269,12 +1237,12 @@ static bool sweep(bool break_on_operation)
int scale = setting.scale;
int rp = GetRepos();
if (scale > 0 && peakLevel > rp && peakLevel - min_level < 8 * scale ) {
SetReflevel((((int)(peakLevel/scale)) + 1) * scale);
set_reflevel((((int)(peakLevel/scale)) + 1) * scale);
}
if (scale > 0 && min_level < rp - 9*scale && peakLevel - min_level < 8 * scale ) {
int new_rp = (((int)((min_level + 9*scale)/scale)) - 1) * scale;
if (new_rp < rp)
SetReflevel(new_rp);
set_reflevel(new_rp);
}
#endif
@ -1475,7 +1443,7 @@ void draw_cal_status(void)
buf[5]=0;
ili9341_drawstring(buf, x, y);
}
#ifdef __ULTRA__
#ifdef __SPUR__
if (setting.spur) {
ili9341_set_foreground(BRIGHT_COLOR_BLUE);
y += YSTEP*2;
@ -1524,7 +1492,7 @@ void draw_cal_status(void)
y += YSTEP;
int32_t t = (int)((2* vbwSteps * sweep_points * ( actualStepDelay / 100) )) /10
#ifdef __ULTRA__
#ifdef __SPUR__
* (setting.spur ? 2 : 1)
#endif
; // in mS
@ -1765,9 +1733,9 @@ int test_validate(int i)
case TC_SET:
if (test_case[i].pass == 0) {
if (test_value != 0)
SetPowerLevel(test_value);
set_power_level(test_value);
} else
SetPowerLevel(test_case[i].pass);
set_power_level(test_case[i].pass);
goto common;
case TC_MEASURE:
case TC_SIGNAL: // Validate signal
@ -1813,31 +1781,31 @@ void test_prepare(int i)
{
setting.tracking = false; //Default test setup
setting.step_atten = false;
SetAttenuation(0);
set_attenuation(0);
switch(test_case[i].setup) { // Prepare test conditions
case TPH_SILENT: // No input signal
SetMode(M_HIGH);
set_mode(M_HIGH);
goto common_silent;
case TP_SILENT: // No input signal
SetMode(M_LOW);
set_mode(M_LOW);
common_silent:
set_refer_output(-1);
for (int j = 0; j < POINTS_COUNT; j++)
stored_t[j] = test_case[i].pass;
break;
case TP_10MHZ_SWITCH:
SetMode(M_LOW);
set_mode(M_LOW);
set_refer_output(2);
setting.step_atten = true;
goto common;
case TP_10MHZEXTRA: // Swept receiver
SetMode(M_LOW);
set_mode(M_LOW);
setting.tracking = true; //Sweep BPF
setting.frequency_IF = 434000000; // Center on SAW filters
set_refer_output(2);
goto common;
case TP_10MHZ: // 10MHz input
SetMode(M_LOW);
set_mode(M_LOW);
set_refer_output(2);
common:
@ -1849,18 +1817,18 @@ common_silent:
stored_t[j] = test_case[i].pass;
break;
case TP_30MHZ:
SetMode(M_LOW);
set_mode(M_LOW);
set_refer_output(0);
goto common;
case TPH_30MHZ:
SetMode(M_HIGH);
set_mode(M_HIGH);
set_refer_output(0);
goto common;
}
setting.auto_attenuation = false;
setting.attenuate = 0;
trace[TRACE_STORED].enabled = true;
SetReflevel(test_case[i].pass+10);
set_reflevel(test_case[i].pass+10);
set_sweep_frequency(ST_CENTER, (int32_t)(test_case[i].center * 1000000));
set_sweep_frequency(ST_SPAN, (int32_t)(test_case[i].span * 1000000));
draw_cal_status();
@ -1898,7 +1866,7 @@ void self_test(int test)
#define FREQ_STEP 3000
SetRBW(FREQ_STEP/1000);
set_RBW(FREQ_STEP/1000);
last_spur = 0;
for (int j = 0; j < 10; j++) {
@ -1938,7 +1906,7 @@ void self_test(int test)
test_prepare(i);
for (int j= 0; j < 32; j++ ) {
test_prepare(i);
SetAttenuation(j);
set_attenuation(j);
float summed_peak_level = 0;
for (int k=0; k<10; k++) {
test_acquire(i); // Acquire test
@ -2021,7 +1989,7 @@ void self_test(int test)
void reset_calibration(void)
{
SetPowerLevel(100);
set_power_level(100);
}
#define CALIBRATE_RBWS 1
@ -2033,11 +2001,11 @@ void calibrate(void)
int local_test_status;
float last_peak_level;
in_selftest = true;
SetPowerLevel(100);
set_power_level(100);
reset_settings(M_LOW);
int i = 11; // calibrate low mode power on 30 MHz;
for (int j= 0; j < CALIBRATE_RBWS; j++ ) {
SetRBW(power_rbw[j]);
set_RBW(power_rbw[j]);
test_prepare(i);
test_acquire(i); // Acquire test
local_test_status = test_validate(i); // Validate test
@ -2047,12 +2015,12 @@ void calibrate(void)
ili9341_drawstring_7x13("Calibration failed", 30, 120);
goto quit;
} else {
SetPowerLevel(-22); // Should be -22.5dBm
set_power_level(-22); // Should be -22.5dBm
chThdSleepMilliseconds(1000);
}
}
i = 12; // Measure 270MHz in low mode
SetRBW(100);
set_RBW(100);
test_prepare(i);
test_acquire(i); // Acquire test
last_peak_level = peakLevel;
@ -2063,7 +2031,7 @@ void calibrate(void)
i = 13; // Calibrate 270MHz in high mode
for (int j = 0; j < CALIBRATE_RBWS; j++) {
SetRBW(power_rbw[j]);
set_RBW(power_rbw[j]);
test_prepare(i);
test_acquire(i); // Acquire test
local_test_status = test_validate(i); // Validate test
@ -2072,7 +2040,7 @@ void calibrate(void)
// ili9341_drawstring_7x13("Calibration failed", 30, 120);
// goto quit;
// } else
SetPowerLevel(last_peak_level);
set_power_level(last_peak_level);
chThdSleepMilliseconds(1000);
}
ili9341_set_foreground(BRIGHT_COLOR_GREEN);
@ -2085,7 +2053,7 @@ quit:
in_selftest = false;
sweep_mode = SWEEP_ENABLE;
set_refer_output(0);
SetMode(M_LOW);
set_mode(M_LOW);
#endif
}

@ -11,42 +11,42 @@ void SetRefLevel(int);
void set_refer_output(int);
void toggle_below_IF(void);
int get_refer_output(void);
void SetAttenuation(int);
int GetAttenuation(void);
void set_attenuation(int);
int get_attenuation(void);
void set_harmonic(int);
//extern int setting.harmonic;
int search_is_greater(void);
void set_auto_attenuation(void);
void set_auto_reflevel(void);
int is_paused(void);
void SetPowerLevel(int);
void set_power_level(int);
void SetGenerate(int);
void SetRBW(int);
void SetDrive(int d);
void SetIF(int f);
void SetStepDelay(int t);
void set_RBW(int);
void set_drive(int d);
void set_IF(int f);
void set_step_delay(int t);
void set_repeat(int);
//extern int setting.repeat;
//extern int setting.rbw;
#ifdef __ULTRA__
#ifdef __SPUR__
//extern int setting.spur;
void SetSpur(int v);
#endif
void SetAverage(int);
void set_average(int);
int GetAverage(void);
//extern int setting.average;
void SetStorage(void);
void SetClearStorage(void);
void SetSubtractStorage(void);
void set_storage(void);
void set_clear_storage(void);
void set_subtract_storage(void);
void toggle_waterfall(void);
void SetMode(int);
void set_mode(int);
int GetMode(void);
void SetReflevel(int);
void SetScale(int);
void set_reflevel(int);
void set_scale(int);
void AllDirty(void);
void MenuDirty(void);
void ToggleLNA(void);
void ToggleAGC(void);
void toggle_LNA(void);
void toggle_AGC(void);
void redrawHisto(void);
void self_test(int);
void set_decay(int);
@ -68,7 +68,7 @@ extern int setting.scale;
extern int setting.10mhz;
#endif
void set_10mhz(int);
void SetModulation(int);
void set_modulation(int);
//extern int setting.modulation;
void set_measurement(int);
// extern int settingSpeed;
@ -488,7 +488,7 @@ extern const menuitem_t menu_topultra[];
void menu_mode_cb(int item, uint8_t data)
{
(void)data;
SetMode(item-1);
set_mode(item-1);
// draw_cal_status();
switch (item) {
case 1:
@ -550,7 +550,7 @@ void menu_autosettings_cb(int item, uint8_t data)
// set_refer_output(1);
// SetPowerLevel(100); // Reset
SetClearStorage();
set_clear_storage();
dirty = true;
// menu_move_back(); // stay in input menu
ui_mode_normal();
@ -621,7 +621,7 @@ static void menu_modulation_cb(int item, uint8_t data)
{
(void)item;
//Serial.println(item);
SetModulation(menu_modulation_value[data]);
set_modulation(menu_modulation_value[data]);
menu_move_back();
// ui_mode_normal(); // Stay in menu mode
// draw_cal_status();
@ -644,7 +644,7 @@ static void menu_drive_cb(int item, uint8_t data)
{
(void)item;
//Serial.println(item);
SetDrive(data);
set_drive(data);
menu_move_back();
// ui_mode_normal();
// draw_cal_status();
@ -652,7 +652,7 @@ static void menu_drive_cb(int item, uint8_t data)
#ifdef __ULTRA__
#ifdef __SPUR__
static void menu_spur_cb(int item, uint8_t data)
{
(void)data;
@ -729,7 +729,7 @@ static void menu_measure_cb(int item, uint8_t data)
ui_process_keypad();
set_sweep_frequency(ST_SPAN, uistat.value*4);
set_measurement(M_PHASE_NOISE);
SetAverage(4);
set_average(4);
break;
case M_STOP_BAND: // STop band measurement
@ -797,13 +797,13 @@ static void menu_storage_cb(int item, uint8_t data)
(void)item;
switch(data) {
case 0:
SetStorage();
set_storage();
break;
case 1:
SetClearStorage();
set_clear_storage();
break;
case 2:
SetSubtractStorage();
set_subtract_storage();
break;
case 3:
toggle_waterfall();
@ -817,7 +817,7 @@ static void menu_storage_cb(int item, uint8_t data)
static void menu_average_cb(int item, uint8_t data)
{
(void)data;
SetAverage(item);
set_average(item);
menu_move_back();
ui_mode_normal();
draw_cal_status();
@ -877,7 +877,7 @@ const int rbwsel[]={0,3,10,30,100,300,600};
static void menu_rbw_cb(int item, uint8_t data)
{
(void)item;
SetRBW(rbwsel[data]);
set_RBW(rbwsel[data]);
menu_move_back();
ui_mode_normal();
// draw_cal_status();
@ -888,7 +888,7 @@ int menu_dBper_value[]={1,2,5,10,20};
static void menu_dBper_cb(int item, uint8_t data)
{
(void)item;
SetScale(data);
set_scale(data);
menu_move_back();
ui_mode_normal();
// draw_cal_status();
@ -933,10 +933,10 @@ static void menu_settings2_cb(int item, uint8_t data)
(void)item;
switch(data) {
case 0:
ToggleAGC();
toggle_AGC();
break;
case 1:
ToggleLNA();;
toggle_LNA();;
break;
case 2:
toggle_tracking();
@ -1361,6 +1361,21 @@ static const menuitem_t menu_acquirehigh[] = {
static const menuitem_t menu_display[] = {
{ MT_CALLBACK,0, "\2PAUSE\0SWEEP", menu_pause_cb},
// { MT_SUBMENU, 0, "\2REF\0LEVEL", menu_reflevel},
// { MT_SUBMENU, 0, "\2SCALE/\0DIV",menu_dBper},
{ MT_CALLBACK,0, "STORE", menu_storage_cb},
{ MT_CALLBACK,1, "CLEAR", menu_storage_cb},
{ MT_CALLBACK,2, "SUBTRACT", menu_storage_cb},
{ MT_CALLBACK,3, "WATERFALL", menu_storage_cb},
#ifdef __SPUR__
{ MT_CALLBACK,0, "\2SPUR\0REMOVAL", menu_spur_cb},
#endif
{ MT_CANCEL, 0, S_LARROW" BACK", NULL },
{ MT_NONE, 0, NULL, NULL } // sentinel
};
static const menuitem_t menu_displayhigh[] = {
{ MT_CALLBACK,0, "\2PAUSE\0SWEEP", menu_pause_cb},
// { MT_SUBMENU, 0, "\2REF\0LEVEL", menu_reflevel},
// { MT_SUBMENU, 0, "\2SCALE/\0DIV",menu_dBper},
{ MT_CALLBACK,0, "STORE", menu_storage_cb},
{ MT_CALLBACK,1, "CLEAR", menu_storage_cb},
@ -1394,9 +1409,6 @@ static const menuitem_t menu_stimulus[] = {
{ MT_KEYPAD, KM_SPAN, "SPAN", NULL},
{ MT_KEYPAD, KM_CW, "\2ZERO\0SPAN", NULL},
{ MT_SUBMENU,0, "RBW", menu_rbw},
#ifdef __ULTRA__
{ MT_CALLBACK,0, "\2SPUR\0REMOVAL", menu_spur_cb},
#endif
{ MT_CANCEL, 0, S_LARROW" BACK", NULL },
{ MT_NONE, 0, NULL, NULL } // sentinel
};
@ -1451,7 +1463,7 @@ const menuitem_t menu_tophigh[] = {
{ MT_SUBMENU, 0, "PRESET", menu_load_preset_high},
{ MT_SUBMENU, 0, "FREQ", menu_stimulus},
{ MT_SUBMENU, 0, "LEVEL", menu_levelhigh},
{ MT_SUBMENU, 0, "DISPLAY", menu_display},
{ MT_SUBMENU, 0, "DISPLAY", menu_displayhigh},
{ MT_SUBMENU, 0, "MARKER", menu_marker},
{ MT_SUBMENU, 0, "MEASURE", menu_measure},
{ MT_SUBMENU, 0, "SETTINGS", menu_settingshigh},
@ -1533,11 +1545,6 @@ static void menu_item_modify_attribute(
if (item == 5 /* PAUSE */ && !(sweep_mode&SWEEP_ENABLE)) {
mark = true;
}
#ifdef __ULTRA__
if (item == 6 && setting.spur) {
mark = true;
}
#endif
} else if (menu == menu_average) {
if (item == GetAverage()){
mark = true;
@ -1563,7 +1570,7 @@ static void menu_item_modify_attribute(
if (data == setting.modulation){
mark = true;
}
} else if (menu == menu_display) {
} else if (menu == menu_display || menu == menu_displayhigh) {
if (item ==0 && is_paused()){
mark = true;
}
@ -1576,6 +1583,11 @@ static void menu_item_modify_attribute(
if (item == 4 && get_waterfall()){
mark = true;
}
#ifdef __SPUR__
if (item == 5 && setting.spur) {
mark = true;
}
#endif
} else if (menu == menu_settings) {
if (item ==0 && setting.tracking_output){
mark = true;
@ -1670,11 +1682,11 @@ static void fetch_numeric_target(void)
plot_printf(uistat.text, sizeof uistat.text, "%ddB", ((int32_t)uistat.value));
break;
case KM_ATTENUATION:
uistat.value = GetAttenuation();
uistat.value = get_attenuation();
plot_printf(uistat.text, sizeof uistat.text, "%ddB", ((int32_t)uistat.value));
break;
case KM_ACTUALPOWER:
uistat.value = settingLevelOffset();
uistat.value = get_level_offset();
plot_printf(uistat.text, sizeof uistat.text, "%ddB", ((int32_t)uistat.value));
break;
case KM_IF:
@ -1694,7 +1706,7 @@ static void fetch_numeric_target(void)
plot_printf(uistat.text, sizeof uistat.text, "%3ddB", ((int32_t)uistat.value));
break;
case KM_LOWOUTLEVEL:
uistat.value = GetAttenuation(); // compensation for dB offset during low output mode
uistat.value = get_attenuation(); // compensation for dB offset during low output mode
plot_printf(uistat.text, sizeof uistat.text, "%ddB", ((int32_t)uistat.value));
break;
case KM_DECAY:
@ -1748,31 +1760,31 @@ set_numeric_value(void)
break;
case KM_REFPOS:
setting.auto_reflevel = false;
SetReflevel(uistat.value);
set_reflevel(uistat.value);
break;
case KM_ATTENUATION:
setting.auto_attenuation = false;
SetAttenuation(uistat.value);
set_attenuation(uistat.value);
break;
case KM_ACTUALPOWER:
SetPowerLevel(uistat.value);
set_power_level(uistat.value);
config_save();
break;
case KM_IF:
SetIF(uistat.value);
set_IF(uistat.value);
config_save();
break;
case KM_SAMPLETIME:
SetStepDelay(uistat.value);
set_step_delay(uistat.value);
break;
case KM_REPEAT:
set_repeat(uistat.value);
break;
case KM_DRIVE:
SetDrive(uistat.value);
set_drive(uistat.value);
break;
case KM_LOWOUTLEVEL:
SetAttenuation(uistat.value);
set_attenuation(uistat.value);
break;
case KM_DECAY:
set_decay(uistat.value);

Loading…
Cancel
Save

Powered by TurnKey Linux.