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) {
switch (get_str_index(argv[0], cmd_scale_ref_list)) {
case 0:
if (UNIT_IS_LINEAR(setting.unit))
set_auto_reflevel(false);
set_scale(my_atof(argv[1]));
if (UNIT_IS_LINEAR(setting.unit) && setting.reflevel < setting.scale*NGRIDY)
set_reflevel(setting.scale*NGRIDY);
if (strcmp(argv[1],"auto") == 0) {
set_auto_reflevel(true);
} else {
user_set_scale(my_atof(argv[1]));
}
goto update;
case 1:
//trace[t].refpos = my_atof(argv[2]);
if (strcmp(argv[1],"auto") == 0) {
set_auto_reflevel(true);
} else {
set_auto_reflevel(false);
set_reflevel(my_atof(argv[1]));
user_set_reflevel(my_atof(argv[1]));
}
goto update;
}

@ -202,9 +202,11 @@ void toggle_waterfall(void);
void set_mode(int);
int GetMode(void);
void set_reflevel(float);
void user_set_reflevel(float);
#define REFLEVEL_MAX 9999.0
#define REFLEVEL_MIN 1.0e-12
void set_scale(float);
void user_set_scale(float);
void AllDirty(void);
void MenuDirty(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 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)
{
@ -593,6 +603,30 @@ void set_reflevel(float level)
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) {
if (UNIT_IS_LINEAR(setting.unit)) {
if (t < REFLEVEL_MIN/10.0)
@ -623,12 +657,7 @@ void set_scale(float t) {
set_trace_scale(0, t);
set_trace_scale(1, t);
set_trace_scale(2, t);
// if (!UNIT_IS_LINEAR(setting.unit)) {
// 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);
// }
round_reflevel_to_scale();
#if 0
if (UNIT_IS_LINEAR(setting.unit)) { // Never negative bottom

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

Loading…
Cancel
Save

Powered by TurnKey Linux.