Add set_marker_index function

multi_trace
DiSlord 5 years ago
parent 791113251d
commit 14720c9a3f

@ -194,9 +194,7 @@ static THD_FUNCTION(Thread1, arg)
if (uistat.marker_tracking) { if (uistat.marker_tracking) {
int i = marker_search_max(active_marker); int i = marker_search_max(active_marker);
if (i != -1 && active_marker != MARKER_INVALID) { if (i != -1 && active_marker != MARKER_INVALID) {
markers[active_marker].index = i; set_marker_index(active_marker, i);
markers[active_marker].frequency = getFrequency(i);
redraw_request |= REDRAW_MARKER; redraw_request |= REDRAW_MARKER;
} }
} }
@ -1066,7 +1064,7 @@ VNA_SHELL_FUNCTION(cmd_hop)
#endif #endif
static void static void
update_marker_index(void) update_markers_index(void)
{ {
int m, idx; int m, idx;
freq_t fstart = get_sweep_frequency(ST_START); freq_t fstart = get_sweep_frequency(ST_START);
@ -1092,11 +1090,18 @@ update_marker_index(void)
idx = r * (sweep_points-1); idx = r * (sweep_points-1);
#endif #endif
} }
markers[m].index = idx; set_marker_index(m, idx);
markers[m].frequency = getFrequency(idx);
} }
} }
void
set_marker_index(int m, int16_t idx)
{
if ((uint32_t)m >= MARKERS_MAX || (uint16_t)idx >= sweep_points) return;
markers[m].index = idx;
markers[m].frequency = getFrequency(idx);
}
void set_marker_frequency(int m, freq_t f) void set_marker_frequency(int m, freq_t f)
{ {
if (m == MARKER_INVALID || !markers[m].enabled) if (m == MARKER_INVALID || !markers[m].enabled)
@ -1182,7 +1187,7 @@ update_frequencies(void)
set_frequencies(start, stop, sweep_points); set_frequencies(start, stop, sweep_points);
// operation_requested|= OP_FREQCHANGE; // operation_requested|= OP_FREQCHANGE;
update_marker_index(); update_markers_index();
// set grid layout // set grid layout
update_grid(); update_grid();
@ -1491,8 +1496,7 @@ VNA_SHELL_FUNCTION(cmd_marker)
case 2: markers[t].enabled = TRUE; active_marker = t; case 2: markers[t].enabled = TRUE; active_marker = t;
int i = marker_search_max(active_marker); int i = marker_search_max(active_marker);
if (i == -1) i = 0; if (i == -1) i = 0;
markers[active_marker].index = i; set_marker_index(active_marker, i);
markers[active_marker].frequency = getFrequency(i);
goto display_marker; goto display_marker;
default: default:
// select active marker and move to index or frequency // select active marker and move to index or frequency
@ -1502,10 +1506,8 @@ VNA_SHELL_FUNCTION(cmd_marker)
active_marker = t; active_marker = t;
if (value > sweep_points) if (value > sweep_points)
set_marker_frequency(active_marker, value); set_marker_frequency(active_marker, value);
else { else
markers[t].index = value; set_marker_index(t, value);
markers[t].frequency = getFrequency(value);
}
return; return;
} }
usage: usage:

@ -205,6 +205,7 @@ void send_buffer(uint8_t * buf, int s);
#endif #endif
void set_marker_frequency(int m, freq_t f); void set_marker_frequency(int m, freq_t f);
void set_marker_time(int m, float f); void set_marker_time(int m, float f);
void set_marker_index(int m, int16_t idx);
void toggle_sweep(void); void toggle_sweep(void);
void toggle_mute(void); void toggle_mute(void);
void toggle_pulse(void); void toggle_pulse(void);

@ -4478,8 +4478,7 @@ static volatile int dummy;
} }
while (m < MARKERS_MAX) { // Insufficient maxima found while (m < MARKERS_MAX) { // Insufficient maxima found
if (markers[m].enabled && markers[m].mtype & M_TRACKING) { // More available markers found if (markers[m].enabled && markers[m].mtype & M_TRACKING) { // More available markers found
markers[m].index = 0; // Enabled but no max so set to left most frequency set_marker_index(m, 0); // Enabled but no max so set to left most frequency
markers[m].frequency = getFrequency(0);
} }
m++; // Try next marker m++; // Try next marker
} }
@ -4517,35 +4516,28 @@ static volatile int dummy;
if (r < l) { if (r < l) {
l = markers[1].index; l = markers[1].index;
r = markers[0].index; r = markers[0].index;
markers[0].index = l;
markers[1].index = r;
} }
freq_t lf = getFrequency(l); set_marker_index(0, l);
freq_t rf = getFrequency(r); set_marker_index(1, r);
markers[0].frequency = lf; freq_t lf = markers[0].frequency;
markers[1].frequency = rf; freq_t rf = markers[1].frequency;
markers[2].enabled = search_maximum(2, lf - (rf - lf), 12); markers[2].enabled = search_maximum(2, lf - (rf - lf), 12);
markers[3].enabled = search_maximum(3, rf + (rf - lf), 12); markers[3].enabled = search_maximum(3, rf + (rf - lf), 12);
} else if (setting.measurement == M_PHASE_NOISE && markers[0].index > 10) { // ------------Phase noise measurement } else if (setting.measurement == M_PHASE_NOISE && markers[0].index > 10) { // ------------Phase noise measurement
markers[1].index = markers[0].index + (setting.mode == M_LOW ? WIDTH/4 : -WIDTH/4); // Position phase noise marker at requested offset // Position phase noise marker at requested offset
markers[1].frequency = getFrequency(markers[1].index); set_marker_index(1, markers[0].index + (setting.mode == M_LOW ? WIDTH/4 : -WIDTH/4));
} else if ((setting.measurement == M_PASS_BAND || setting.measurement == M_FM) && markers[0].index > 10) { // ----------------Pass band measurement } else if ((setting.measurement == M_PASS_BAND || setting.measurement == M_FM) && markers[0].index > 10) { // ----------------Pass band measurement
int t = 0; int t = 0;
float v = actual_t[markers[0].index] - (in_selftest ? 6.0 : 3.0); float v = actual_t[markers[0].index] - (in_selftest ? 6.0 : 3.0);
while (t < markers[0].index && actual_t[t+1] < v) // Find left -3dB point while (t < markers[0].index && actual_t[t+1] < v) // Find left -3dB point
t++; t++;
if (t< markers[0].index) { if (t< markers[0].index)
markers[1].index = t; set_marker_index(1, t);
markers[1].frequency = getFrequency(t);
}
t = setting._sweep_points-1;; t = setting._sweep_points-1;;
while (t > markers[0].index && actual_t[t-1] < v) // find right -3dB point while (t > markers[0].index && actual_t[t-1] < v) // find right -3dB point
t--; t--;
if (t > markers[0].index) { if (t > markers[0].index)
markers[2].index = t; set_marker_index(2, t);
markers[2].frequency = getFrequency(t);
}
} else if (setting.measurement == M_AM) { // ----------------AM measurement } else if (setting.measurement == M_AM) { // ----------------AM measurement
if (S_IS_AUTO(setting.agc )) { if (S_IS_AUTO(setting.agc )) {
#ifdef __SI4432__ #ifdef __SI4432__

@ -1563,7 +1563,7 @@ static UI_FUNCTION_ADV_CALLBACK(menu_marker_select_acb)
} }
markers[data-1].enabled = true; markers[data-1].enabled = true;
// interpolate_maximum(data-1); // possibly not a maximum // interpolate_maximum(data-1); // possibly not a maximum
markers[data-1].frequency = getFrequency(markers[data-1].index); set_marker_index(data-1, markers[data-1].index);
active_marker_select(data-1); active_marker_select(data-1);
menu_push_submenu(menu_marker_modify); menu_push_submenu(menu_marker_modify);
redraw_marker(active_marker); redraw_marker(active_marker);
@ -1649,7 +1649,7 @@ static UI_FUNCTION_ADV_CALLBACK(menu_marker_ref_select_acb)
} }
markers[data-1].enabled = true; markers[data-1].enabled = true;
// interpolate_maximum(data-1); // possibly not a maximum // interpolate_maximum(data-1); // possibly not a maximum
markers[data-1].frequency = getFrequency(markers[data-1].index); set_marker_index(data-1, markers[data-1].index);
markers[active_marker].ref = data-1; markers[active_marker].ref = data-1;
redraw_marker(active_marker); redraw_marker(active_marker);
menu_move_back(false); menu_move_back(false);

Loading…
Cancel
Save

Powered by TurnKey Linux.