Corrected auto agc error in linear mode

tinySA-v0.2
erikkaashoek 6 years ago
parent a5dff1a84a
commit dbb685f794

@ -849,6 +849,7 @@ static void trace_get_value_string(
(void) point_count;
float v;
char buf2[11];
char buf3[6];
buf2[0]=' ';
uint32_t dfreq = 0;
float rlevel = 0;
@ -902,10 +903,17 @@ static void trace_get_value_string(
if (v == -INFINITY)
plot_printf(buf, len, "-INF");
else {
if (setting.unit)
plot_printf(buf, len, "%s %.4f%s%s", buf2, v - rlevel,unit_string[setting.unit],(mtype & M_NOISE?"/Hz":""));
v = v - rlevel;
if (UNIT_IS_LINEAR(setting.unit)) {
if (v < 100000)
plot_printf(buf3, sizeof(buf3), "%5f", v);
else
plot_printf(buf, len, "%s %.1f%s%s", buf2, v - rlevel,unit_string[setting.unit],(mtype & M_NOISE?"/Hz":""));
strcpy(buf3,"*****");
}
else
plot_printf(buf3, sizeof(buf3), "%5.1f", v);
buf3[5] = 0;
plot_printf(buf, len, "%s %s%s%s", buf2, buf3,unit_string[setting.unit],(mtype & M_NOISE?"/Hz":""));
}
}
@ -2069,20 +2077,18 @@ static void cell_draw_marker_info(int x0, int y0)
buf[k++] = 0;
ili9341_set_background(DEFAULT_BG_COLOR);
ili9341_set_foreground(marker_color(markers[i].mtype));
if (setting.unit)
cell_drawstring(buf, xpos, ypos);
else
// if (setting.unit)
// cell_drawstring(buf, xpos, ypos);
// else
cell_drawstring_7x13(buf, xpos, ypos);
xpos += strlen(buf)*7;
// cell_drawstring_size(buf, xpos, ypos, 2);
trace_get_value_string(
t, buf, sizeof buf,
idx, measured[trace[t].channel], frequencies, sweep_points, ridx, markers[i].mtype);
if (setting.unit)
cell_drawstring(buf, xpos, ypos);
else
// if (setting.unit)
// cell_drawstring(buf, xpos, ypos);
// else
cell_drawstring_7x13(buf, xpos, ypos);
// cell_drawstring_size(buf, xpos+3*7, ypos, 2);
j++;
}
}

@ -473,7 +473,7 @@ void toggle_AGC(void)
if (S_IS_AUTO(setting.agc ))
setting.agc = false;
else if (setting.agc)
setting.agc = S_AUTO_OFF;
setting.agc = S_AUTO_ON;
else
setting.agc = true;
dirty = true;
@ -503,9 +503,9 @@ void set_unit(int u)
set_scale(r/NGRIDY);
set_reflevel(setting.scale*NGRIDY);
if (S_IS_AUTO(setting.agc))
setting.agc = S_AUTO_OFF;
setting.agc = S_AUTO_ON;
if (S_IS_AUTO(setting.lna))
setting.agc = S_AUTO_OFF;
setting.lna = S_AUTO_OFF;
} else {
r = 10 * round((r*1.2)/10.0);
set_reflevel(r);
@ -513,7 +513,7 @@ void set_unit(int u)
if (S_IS_AUTO(setting.agc))
setting.agc = S_AUTO_ON;
if (S_IS_AUTO(setting.lna))
setting.agc = S_AUTO_OFF;
setting.lna = S_AUTO_OFF;
}
dirty = true;
}
@ -1491,10 +1491,12 @@ again:
dirty = true; // Must be above if(scandirty!!!!!)
}
}
if (!in_selftest && MODE_INPUT(setting.mode) && setting.auto_reflevel && (max_index[0] > 0 || FREQ_IS_CW())) { // Auto reflevel
if (max_index[0] > 0)
temppeakLevel = actual_t[max_index[0]];
float r = value(temppeakLevel);
if (!in_selftest && MODE_INPUT(setting.mode) && setting.auto_reflevel) { // Auto reflevel
if (UNIT_IS_LINEAR(setting.unit)) { // Linear scales can not have negative values
float r = value(actual_t[max_index[0]]);
if ((setting.reflevel > REFLEVEL_MIN && r < setting.reflevel / 2 ) || (setting.reflevel < REFLEVEL_MAX && r > setting.reflevel) ) { // ensure minimum and maximum reflevel
if ((setting.reflevel > REFLEVEL_MIN && r < setting.reflevel / 2.5 ) || (setting.reflevel < REFLEVEL_MAX && r > setting.reflevel) ) { // ensure minimum and maximum reflevel
// r = setting.scale * (floor(r / setting.scale) + 1);
#if 0
float m = 1;
@ -1513,20 +1515,22 @@ again:
r = REFLEVEL_MIN;
if (r > REFLEVEL_MAX)
r = REFLEVEL_MAX;
if (r != setting.reflevel) {
//if (setting.scale * NGRIDY > r)
set_scale(r / NGRIDY);
set_reflevel(setting.scale*NGRIDY);
}
}
} else {
if (value(actual_t[max_index[0]]) < setting.reflevel - setting.scale*NGRIDY || temp_min_level > setting.reflevel) {
set_reflevel(setting.scale*(floor(value(actual_t[max_index[0]])/setting.scale)+1));
if (r < setting.reflevel - setting.scale*NGRIDY || temp_min_level > setting.reflevel) {
set_reflevel(setting.scale*(floor(r/setting.scale)+1));
redraw_request |= REDRAW_CAL_STATUS;
dirty = true; // Must be above if(scandirty!!!!!)
}else if (value(actual_t[max_index[0]]) > setting.reflevel - setting.scale/2) {
}else if (r > setting.reflevel - setting.scale/2) {
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 - 10.1 * setting.scale && value(actual_t[max_index[0]]) < setting.reflevel - setting.scale * 1.5) {
} else if (temp_min_level < setting.reflevel - 10.1 * setting.scale && r < setting.reflevel - setting.scale * 1.5) {
set_reflevel(setting.reflevel - setting.scale);
redraw_request |= REDRAW_CAL_STATUS;
dirty = true; // Must be above if(scandirty!!!!!)
@ -2039,6 +2043,11 @@ void draw_cal_status(void)
buf[5] = 'B';
ili9341_drawstring(buf, x, y);
y += YSTEP + YSTEP/2 ;
strncpy(buf,&VERSION[8],6);
buf[6]=0;
ili9341_drawstring(buf, x, y);
// ili9341_set_background(DEFAULT_BG_COLOR);
y = HEIGHT-7 + OFFSETY;

Loading…
Cancel
Save

Powered by TurnKey Linux.