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 */ /* duplicated saved data onto sram to be able to modify marker/trace */
memcpy(dst, src, sizeof(setting_t)); memcpy(dst, src, sizeof(setting_t));
update_frequencies(); update_frequencies();
SetScale(setting.scale); set_scale(setting.scale);
SetReflevel(setting.reflevel); set_reflevel(setting.reflevel);
return 0; return 0;
load_default: load_default:
load_default_properties(); load_default_properties();

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

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

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

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

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

Loading…
Cancel
Save

Powered by TurnKey Linux.