Reflevel multiple of scale

tinySA-v0.2
erikkaashoek 6 years ago
parent 77f8938edd
commit 8f31d8fafd

@ -1772,19 +1772,18 @@ VNA_SHELL_FUNCTION(cmd_trace)
if (argc == 2) { if (argc == 2) {
switch (get_str_index(argv[0], cmd_scale_ref_list)) { switch (get_str_index(argv[0], cmd_scale_ref_list)) {
case 0: case 0:
if (UNIT_IS_LINEAR(setting.unit)) if (strcmp(argv[1],"auto") == 0) {
set_auto_reflevel(false); set_auto_reflevel(true);
set_scale(my_atof(argv[1])); } else {
if (UNIT_IS_LINEAR(setting.unit) && setting.reflevel < setting.scale*NGRIDY) user_set_scale(my_atof(argv[1]));
set_reflevel(setting.scale*NGRIDY); }
goto update; goto update;
case 1: case 1:
//trace[t].refpos = my_atof(argv[2]); //trace[t].refpos = my_atof(argv[2]);
if (strcmp(argv[1],"auto") == 0) { if (strcmp(argv[1],"auto") == 0) {
set_auto_reflevel(true); set_auto_reflevel(true);
} else { } else {
set_auto_reflevel(false); user_set_reflevel(my_atof(argv[1]));
set_reflevel(my_atof(argv[1]));
} }
goto update; goto update;
} }

@ -202,9 +202,11 @@ void toggle_waterfall(void);
void set_mode(int); void set_mode(int);
int GetMode(void); int GetMode(void);
void set_reflevel(float); void set_reflevel(float);
void user_set_reflevel(float);
#define REFLEVEL_MAX 9999.0 #define REFLEVEL_MAX 9999.0
#define REFLEVEL_MIN 1.0e-12 #define REFLEVEL_MIN 1.0e-12
void set_scale(float); void set_scale(float);
void user_set_scale(float);
void AllDirty(void); void AllDirty(void);
void MenuDirty(void); void MenuDirty(void);
void toggle_LNA(void); void toggle_LNA(void);

@ -559,6 +559,16 @@ void set_unit(int u)
const float unit_scale_value[]={1,0.001,0.000001,0.000000001,0.000000000001}; const float unit_scale_value[]={1,0.001,0.000001,0.000000001,0.000000000001};
const char * const unit_scale_text[]= {"","m", "u", "n", "p"}; const char * const unit_scale_text[]= {"","m", "u", "n", "p"};
void user_set_reflevel(float level)
{
set_auto_reflevel(false);
if (UNIT_IS_LINEAR(setting.unit) && level < setting.scale*NGRIDY) {
set_scale(level/NGRIDY);
set_reflevel(setting.scale*NGRIDY);
} else
set_reflevel(level);
}
void set_reflevel(float level) void set_reflevel(float level)
{ {
@ -593,6 +603,30 @@ void set_reflevel(float level)
dirty = true; dirty = true;
} }
void round_reflevel_to_scale(void) {
int multi = floor((setting.reflevel + setting.scale/2)/setting.scale);
if (UNIT_IS_LINEAR(setting.unit)) {
if (multi < NGRIDY) {
setting.reflevel = setting.scale*10; // Never negative bottom
}
} else {
}
setting.reflevel = multi*setting.scale;
set_trace_refpos(0,setting.reflevel);
set_trace_refpos(1,setting.reflevel);
set_trace_refpos(2,setting.reflevel);
}
void user_set_scale(float s)
{
if (UNIT_IS_LINEAR(setting.unit))
set_auto_reflevel(false);
set_scale(s);
if (UNIT_IS_LINEAR(setting.unit) && setting.reflevel < setting.scale*NGRIDY)
set_reflevel(setting.scale*NGRIDY);
}
void set_scale(float t) { void set_scale(float t) {
if (UNIT_IS_LINEAR(setting.unit)) { if (UNIT_IS_LINEAR(setting.unit)) {
if (t < REFLEVEL_MIN/10.0) if (t < REFLEVEL_MIN/10.0)
@ -623,12 +657,7 @@ void set_scale(float t) {
set_trace_scale(0, t); set_trace_scale(0, t);
set_trace_scale(1, t); set_trace_scale(1, t);
set_trace_scale(2, t); set_trace_scale(2, t);
// if (!UNIT_IS_LINEAR(setting.unit)) { round_reflevel_to_scale();
// setting.reflevel = t * floor(setting.reflevel/t);
// set_trace_refpos(0,setting.reflevel);
// set_trace_refpos(1,setting.reflevel);
// set_trace_refpos(2,setting.reflevel);
// }
#if 0 #if 0
if (UNIT_IS_LINEAR(setting.unit)) { // Never negative bottom if (UNIT_IS_LINEAR(setting.unit)) { // Never negative bottom

@ -1904,19 +1904,10 @@ set_numeric_value(void)
set_sweep_frequency(ST_CW, uistat.value); set_sweep_frequency(ST_CW, uistat.value);
break; break;
case KM_SCALE: case KM_SCALE:
if (UNIT_IS_LINEAR(setting.unit)) user_set_scale(uistat.value);
set_auto_reflevel(false);
set_scale(uistat.value);
if (UNIT_IS_LINEAR(setting.unit) && setting.reflevel < setting.scale*NGRIDY)
set_reflevel(setting.scale*NGRIDY);
break; break;
case KM_REFLEVEL: case KM_REFLEVEL:
set_auto_reflevel(false); user_set_reflevel(uistat.value);
if (UNIT_IS_LINEAR(setting.unit) && uistat.value < setting.scale*NGRIDY) {
set_scale(uistat.value/NGRIDY);
set_reflevel(setting.scale*NGRIDY);
} else
set_reflevel(uistat.value);
break; break;
case KM_ATTENUATION: case KM_ATTENUATION:
setting.auto_attenuation = false; setting.auto_attenuation = false;

Loading…
Cancel
Save

Powered by TurnKey Linux.