Slider span

master
erikkaashoek 5 years ago
parent 802ab82ce9
commit 606ec95b5f

@ -123,7 +123,8 @@ const char *info_about[]={
"Platform: " PLATFORM_NAME, "Platform: " PLATFORM_NAME,
0 // sentinel 0 // sentinel
}; };
extern int dirty;
uint16_t dirty = true;
bool completed = false; bool completed = false;
@ -2530,10 +2531,12 @@ static void shell_init_connection(void){
// Only USB console, shell_stream always on USB // Only USB console, shell_stream always on USB
#define PREPARE_STREAM #define PREPARE_STREAM
#if 0 // Not used
// Check connection as Active, if no suspend input // Check connection as Active, if no suspend input
static bool shell_check_connect(void){ static bool shell_check_connect(void){
return SDU1.config->usbp->state == USB_ACTIVE; return SDU1.config->usbp->state == USB_ACTIVE;
} }
#endif
// Init shell I/O connection over USB // Init shell I/O connection over USB
static void shell_init_connection(void){ static void shell_init_connection(void){

@ -747,7 +747,7 @@ typedef struct setting
// uint32_t _frequency0; // uint32_t _frequency0;
// uint32_t _frequency1; // uint32_t _frequency1;
int mode; int mode;
uint16_t _sweep_points; int _sweep_points;
float attenuate; float attenuate;
int auto_attenuation; int auto_attenuation;
int atten_step; int atten_step;
@ -810,6 +810,9 @@ typedef struct setting
int modulation_frequency; int modulation_frequency;
int trigger_mode; int trigger_mode;
uint32_t checksum; uint32_t checksum;
int slider_position;
int32_t slider_span;
}setting_t; }setting_t;
extern setting_t setting; extern setting_t setting;

@ -342,7 +342,7 @@ VNA_SHELL_FUNCTION(cmd_y)
} }
#endif #endif
} }
#if 0 // not used
VNA_SHELL_FUNCTION(cmd_z) VNA_SHELL_FUNCTION(cmd_z)
{ {
static const char cmd_z_list[] = "t|r|i"; static const char cmd_z_list[] = "t|r|i";
@ -368,7 +368,7 @@ VNA_SHELL_FUNCTION(cmd_z)
#endif #endif
} }
} }
#endif
VNA_SHELL_FUNCTION(cmd_selftest) VNA_SHELL_FUNCTION(cmd_selftest)
{ {

@ -30,14 +30,14 @@
#undef __FAST_SWEEP__ #undef __FAST_SWEEP__
#endif #endif
#endif #endif
int dirty = true; // uint8_t dirty = true;
int scandirty = true; int scandirty = true;
setting_t setting; setting_t setting;
uint32_t frequencies[POINTS_COUNT]; uint32_t frequencies[POINTS_COUNT];
uint16_t actual_rbw_x10 = 0; uint16_t actual_rbw_x10 = 0;
int vbwSteps = 1; uint16_t vbwSteps = 1;
uint32_t minFreq = 0; uint32_t minFreq = 0;
uint32_t maxFreq = 520000000; uint32_t maxFreq = 520000000;
@ -135,6 +135,9 @@ void reset_settings(int m)
setting.spur_removal = S_OFF; setting.spur_removal = S_OFF;
#endif #endif
setting.mirror_masking = 0; setting.mirror_masking = 0;
setting.slider_position = 0;
setting.slider_span = 100000;
#endif #endif
switch(m) { switch(m) {
case M_LOW: case M_LOW:
@ -171,7 +174,7 @@ void reset_settings(int m)
setting.sweep_time_us = 10*ONE_SECOND_TIME; setting.sweep_time_us = 10*ONE_SECOND_TIME;
break; break;
} }
for (int i = 0; i< MARKERS_MAX; i++) { for (uint8_t i = 0; i< MARKERS_MAX; i++) {
markers[i].enabled = M_DISABLED; markers[i].enabled = M_DISABLED;
markers[i].mtype = M_NORMAL; markers[i].mtype = M_NORMAL;
} }
@ -2801,11 +2804,11 @@ enum {
TP_SILENT, TPH_SILENT, TP_10MHZ, TP_10MHZEXTRA, TP_10MHZ_SWITCH, TP_30MHZ, TPH_30MHZ, TPH_30MHZ_SWITCH TP_SILENT, TPH_SILENT, TP_10MHZ, TP_10MHZEXTRA, TP_10MHZ_SWITCH, TP_30MHZ, TPH_30MHZ, TPH_30MHZ_SWITCH
}; };
#define TEST_COUNT 21 #define TEST_COUNT (sizeof test_case / sizeof test_case[0])
#define W2P(w) (sweep_points * w / 100) // convert width in % to actual sweep points #define W2P(w) (sweep_points * w / 100) // convert width in % to actual sweep points
static const struct { typedef struct test_case {
int kind; int kind;
int setup; int setup;
float center; // In MHz float center; // In MHz
@ -2813,7 +2816,9 @@ static const struct {
float pass; float pass;
int width; int width;
float stop; float stop;
} test_case [TEST_COUNT] = } test_case_t;
const test_case_t test_case [] =
{// Condition Preparation Center Span Pass Width(%)Stop {// Condition Preparation Center Span Pass Width(%)Stop
{TC_BELOW, TP_SILENT, 0.005, 0.01, 0, 0, 0}, // 1 Zero Hz leakage {TC_BELOW, TP_SILENT, 0.005, 0.01, 0, 0, 0}, // 1 Zero Hz leakage
{TC_BELOW, TP_SILENT, 0.015, 0.01, -30, 0, 0}, // 2 Phase noise of zero Hz {TC_BELOW, TP_SILENT, 0.015, 0.01, -30, 0, 0}, // 2 Phase noise of zero Hz
@ -2852,8 +2857,8 @@ static const char *(test_text [4]) =
{ {
"Waiting", "Pass", "Fail", "Critical" "Waiting", "Pass", "Fail", "Critical"
}; };
static const char *(test_fail_cause [TEST_COUNT]);
static const char *(test_fail_cause [TEST_COUNT]);
static int test_status[TEST_COUNT]; static int test_status[TEST_COUNT];
static int show_test_info = FALSE; static int show_test_info = FALSE;
static volatile int test_wait = false; static volatile int test_wait = false;
@ -3105,7 +3110,7 @@ common_silent:
set_mode(M_LOW); set_mode(M_LOW);
setting.tracking = true; //Sweep BPF setting.tracking = true; //Sweep BPF
setting.auto_IF = false; setting.auto_IF = false;
setting.frequency_IF = DEFAULT_IF; // Center on SAW filters setting.frequency_IF = DEFAULT_IF+200000; // 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
@ -3200,7 +3205,7 @@ void self_test(int test)
reset_settings(M_LOW); // Make sure we are in a defined state reset_settings(M_LOW); // Make sure we are in a defined state
in_selftest = true; in_selftest = true;
menu_autosettings_cb(0); menu_autosettings_cb(0);
for (int i=0; i < TEST_COUNT; i++) { // All test cases waiting for (uint16_t i=0; i < TEST_COUNT; i++) { // All test cases waiting
if (test_case[i].kind == TC_END) if (test_case[i].kind == TC_END)
break; break;
test_status[i] = TS_WAITING; test_status[i] = TS_WAITING;
@ -3219,7 +3224,7 @@ void self_test(int test)
test_step = TEST_END; test_step = TEST_END;
ili9341_set_foreground(LCD_BRIGHT_COLOR_RED); ili9341_set_foreground(LCD_BRIGHT_COLOR_RED);
ili9341_drawstring_7x13("Signal level too low", 30, 140); ili9341_drawstring_7x13("Signal level too low", 30, 140);
ili9341_drawstring_7x13("Check cable between High and Low connectors", 30, 160); ili9341_drawstring_7x13("Did you connect high and low ports with cable?", 0, 210);
goto resume2; goto resume2;
} }

60
ui.c

@ -87,9 +87,6 @@ static int8_t kp_index = 0;
static char *kp_help_text = NULL; static char *kp_help_text = NULL;
static uint8_t menu_current_level = 0; static uint8_t menu_current_level = 0;
static int selection = 0; static int selection = 0;
static int slider_position = 0;
static int slider_delta = 100000;
static const uint8_t slider_bitmap[]= static const uint8_t slider_bitmap[]=
{ {
@ -1833,7 +1830,7 @@ draw_menu_buttons(const menuitem_t *menu)
int local_slider_positions = 0; int local_slider_positions = 0;
if (MT_MASK(menu[i].type) == MT_KEYPAD) { if (MT_MASK(menu[i].type) == MT_KEYPAD) {
if (menu[i].data == KM_CENTER) { if (menu[i].data == KM_CENTER) {
local_slider_positions = LCD_WIDTH/2+slider_position; local_slider_positions = LCD_WIDTH/2+setting.slider_position;
goto draw_slider; goto draw_slider;
} else if (menu[i].data == KM_LOWOUTLEVEL) { } else if (menu[i].data == KM_LOWOUTLEVEL) {
local_slider_positions = (get_attenuation() + 76 ) * MENU_FORM_WIDTH / 70 + OFFSETX; local_slider_positions = (get_attenuation() + 76 ) * MENU_FORM_WIDTH / 70 + OFFSETX;
@ -1887,15 +1884,15 @@ void set_keypad_value(int v)
void check_frequency_slider(uint32_t slider_freq) void check_frequency_slider(uint32_t slider_freq)
{ {
if ( (maxFreq - minFreq) < (uint32_t)(MENU_FORM_WIDTH * slider_delta) ) { if ( (maxFreq - minFreq) < (uint32_t)setting.slider_span ) {
slider_delta = (maxFreq - minFreq)/MENU_FORM_WIDTH; // absolute mode with max step size setting.slider_span = maxFreq - minFreq; // absolute mode with max step size
} }
uint32_t half_span = (MENU_FORM_WIDTH / 2) * slider_delta; uint32_t half_span = setting.slider_span >> 1;
if (minFreq + half_span > slider_freq) { if (minFreq + (uint32_t)half_span > slider_freq) {
slider_position -= (minFreq + half_span - slider_freq) / slider_delta; // reposition if needed setting.slider_position -= (minFreq + half_span - slider_freq) / (setting.slider_span /MENU_FORM_WIDTH); // reposition if needed
} }
if (maxFreq < slider_freq + half_span) { if (maxFreq < slider_freq + (uint32_t)half_span) {
slider_position += (slider_freq + half_span - maxFreq) / slider_delta; // reposition if needed setting.slider_position += (slider_freq + half_span - maxFreq) / (setting.slider_span /MENU_FORM_WIDTH); // reposition if needed
} }
} }
@ -1930,9 +1927,9 @@ menu_select_touch(int i)
if (new_slider > MENU_FORM_WIDTH/2) if (new_slider > MENU_FORM_WIDTH/2)
new_slider = MENU_FORM_WIDTH/2; new_slider = MENU_FORM_WIDTH/2;
if (menu_is_form(menu) && MT_MASK(menu[i].type) == MT_KEYPAD && keypad == KM_CENTER){ if (menu_is_form(menu) && MT_MASK(menu[i].type) == MT_KEYPAD && keypad == KM_CENTER){
#define TOUCH_DEAD_ZONE 20 #define TOUCH_DEAD_ZONE 40
if (mode == SL_UNKNOWN ) { if (mode == SL_UNKNOWN ) {
if (slider_position - TOUCH_DEAD_ZONE < new_slider && new_slider < slider_position + TOUCH_DEAD_ZONE) { // Pick up slider if (setting.slider_position - TOUCH_DEAD_ZONE < new_slider && new_slider < setting.slider_position + TOUCH_DEAD_ZONE) { // Pick up slider
mode = SL_MOVE; mode = SL_MOVE;
} else { } else {
mode = SL_SPAN; mode = SL_SPAN;
@ -1940,12 +1937,12 @@ menu_select_touch(int i)
} }
} }
if (mode == SL_MOVE ) { if (mode == SL_MOVE ) {
uistat.value = uistat.value - slider_position * slider_delta + new_slider * slider_delta; uistat.value = uistat.value - setting.slider_position * (setting.slider_span/MENU_FORM_WIDTH) + new_slider * (setting.slider_span/MENU_FORM_WIDTH);
if (uistat.value < minFreq) if (uistat.value < minFreq)
uistat.value = minFreq; uistat.value = minFreq;
if (uistat.value > maxFreq) if (uistat.value > maxFreq)
uistat.value = maxFreq; uistat.value = maxFreq;
slider_position = new_slider; setting.slider_position = new_slider;
set_keypad_value(keypad); set_keypad_value(keypad);
perform(false, 0, (uint32_t)uistat.value, false); perform(false, 0, (uint32_t)uistat.value, false);
draw_menu(); draw_menu();
@ -1954,22 +1951,39 @@ menu_select_touch(int i)
first_span: first_span:
slider_freq = (uint32_t) uistat.value; slider_freq = (uint32_t) uistat.value;
int pw=new_slider + LCD_WIDTH/2; int pw=new_slider + LCD_WIDTH/2;
slider_position = pw - LCD_WIDTH/2; // Show delta on slider setting.slider_position = pw - LCD_WIDTH/2; // Show delta on slider
slider_delta = 10; setting.slider_span = 10;
while (pw>0) { while (pw>0) {
slider_delta *=10; setting.slider_span += setting.slider_span;
pw -= LCD_WIDTH/6; pw -= 12;
if (pw <=0)
break;
setting.slider_span += setting.slider_span + (setting.slider_span >>1);
pw -= 12;
if (pw<=0)
break;
setting.slider_span *= 2;
pw -= 12;
} }
if ((uint32_t)setting.slider_span > (maxFreq - minFreq))
setting.slider_span = (maxFreq - minFreq);
uint32_t old_minFreq = minFreq; // Save when in high mode uint32_t old_minFreq = minFreq; // Save when in high mode
minFreq = 0; // And set minFreq to 0 for span display minFreq = 0; // And set minFreq to 0 for span display
uistat.value = slider_delta; uistat.value = setting.slider_span;
set_keypad_value(keypad); set_keypad_value(keypad);
center_text[0] = 'S';
center_text[1] = 'P';
center_text[2] = 'A';
center_text[3] = 'N';
draw_menu(); // Show slider span draw_menu(); // Show slider span
minFreq = old_minFreq; // and restore minFreq minFreq = old_minFreq; // and restore minFreq
uistat.value = (float) slider_freq; // and restore current slider freq uistat.value = (float) slider_freq; // and restore current slider freq
set_keypad_value(keypad); set_keypad_value(keypad);
center_text[0] = 'F';
slider_position = 0; // reset slider after span change center_text[1] = 'R';
center_text[2] = 'E';
center_text[3] = 'Q';
setting.slider_position = 0; // reset slider after span change
check_frequency_slider(slider_freq); check_frequency_slider(slider_freq);
} }
} else if (menu_is_form(menu) && MT_MASK(menu[i].type) == MT_KEYPAD && keypad == KM_LOWOUTLEVEL) { } else if (menu_is_form(menu) && MT_MASK(menu[i].type) == MT_KEYPAD && keypad == KM_LOWOUTLEVEL) {
@ -1993,7 +2007,7 @@ menu_select_touch(int i)
draw_menu(); draw_menu();
return; return;
} }
slider_position = 0; // Reset slider when entering frequency setting.slider_position = 0; // Reset slider when entering frequency
prev_touch_button = -1; prev_touch_button = -1;
#endif #endif

@ -406,7 +406,10 @@ enum {
KM_REFLEVEL, KM_SCALE, KM_ATTENUATION, KM_REFLEVEL, KM_SCALE, KM_ATTENUATION,
KM_ACTUALPOWER, KM_IF, KM_SAMPLETIME, KM_DRIVE, KM_LOWOUTLEVEL, KM_DECAY, KM_NOISE, KM_ACTUALPOWER, KM_IF, KM_SAMPLETIME, KM_DRIVE, KM_LOWOUTLEVEL, KM_DECAY, KM_NOISE,
KM_10MHZ, KM_REPEAT, KM_OFFSET, KM_TRIGGER, KM_LEVELSWEEP, KM_SWEEP_TIME, KM_OFFSET_DELAY, KM_10MHZ, KM_REPEAT, KM_OFFSET, KM_TRIGGER, KM_LEVELSWEEP, KM_SWEEP_TIME, KM_OFFSET_DELAY,
KM_FAST_SPEEDUP, KM_GRIDLINES, KM_MARKER, KM_MODULATION,KM_COR_AM,KM_COR_WFM, KM_COR_NFM, KM_FAST_SPEEDUP, KM_GRIDLINES, KM_MARKER, KM_MODULATION,
#if 0
KM_COR_AM,KM_COR_WFM, KM_COR_NFM,
#endif
KM_ATTACK, KM_ATTACK,
KM_NONE // always at enum end KM_NONE // always at enum end
}; };
@ -441,9 +444,11 @@ static const struct {
{keypads_positive , "MINIMUM\nGRIDLINES"}, // KM_GRIDLINES {keypads_positive , "MINIMUM\nGRIDLINES"}, // KM_GRIDLINES
{keypads_freq , "MARKER\nFREQ"}, // KM_MARKER {keypads_freq , "MARKER\nFREQ"}, // KM_MARKER
{keypads_freq , "MODULATION\nFREQ"}, // KM_MODULATION {keypads_freq , "MODULATION\nFREQ"}, // KM_MODULATION
#if 0
{keypads_plusmin , "COR\nAM"}, // KM_COR_AM {keypads_plusmin , "COR\nAM"}, // KM_COR_AM
{keypads_plusmin , "COR\nWFM"}, // KM_COR_WFM {keypads_plusmin , "COR\nWFM"}, // KM_COR_WFM
{keypads_plusmin , "COR\nNFM"}, // KM_COR_NFM {keypads_plusmin , "COR\nNFM"}, // KM_COR_NFM
#endif
{keypads_positive , "ATTACK"}, // KM_ATTACK {keypads_positive , "ATTACK"}, // KM_ATTACK
}; };
@ -1487,10 +1492,11 @@ static const menuitem_t menu_sweep[] = {
}; };
char low_level_help_text[12] = "-76..-6"; char low_level_help_text[12] = "-76..-6";
char center_text[10] = "FREQ: %s";
static const menuitem_t menu_lowoutputmode[] = { static const menuitem_t menu_lowoutputmode[] = {
{ MT_FORM | MT_ADV_CALLBACK, 0, "LOW OUTPUT %s", menu_outputmode_acb}, { MT_FORM | MT_ADV_CALLBACK, 0, "LOW OUTPUT %s", menu_outputmode_acb},
{ MT_FORM | MT_KEYPAD, KM_CENTER, "FREQ: %s", "10kHz..350MHz"}, { MT_FORM | MT_KEYPAD, KM_CENTER, center_text, "10kHz..350MHz"},
{ MT_FORM | MT_KEYPAD, KM_LOWOUTLEVEL, "LEVEL: %s", low_level_help_text /* "-76..-6" */}, { MT_FORM | MT_KEYPAD, KM_LOWOUTLEVEL, "LEVEL: %s", low_level_help_text /* "-76..-6" */},
{ MT_FORM | MT_ADV_CALLBACK, 0, "MOD: %s", menu_smodulation_acb}, { MT_FORM | MT_ADV_CALLBACK, 0, "MOD: %s", menu_smodulation_acb},
{ MT_FORM | MT_ADV_CALLBACK, 0, "%s", menu_sweep_acb}, { MT_FORM | MT_ADV_CALLBACK, 0, "%s", menu_sweep_acb},
@ -1504,7 +1510,7 @@ static const menuitem_t menu_lowoutputmode[] = {
static const menuitem_t menu_highoutputmode[] = { static const menuitem_t menu_highoutputmode[] = {
{ MT_FORM | MT_ADV_CALLBACK, 0, "HIGH OUTPUT %s", menu_outputmode_acb}, { MT_FORM | MT_ADV_CALLBACK, 0, "HIGH OUTPUT %s", menu_outputmode_acb},
{ MT_FORM | MT_KEYPAD, KM_CENTER, "FREQ: %s", "240MHz..960MHz"}, { MT_FORM | MT_KEYPAD, KM_CENTER, center_text, "240MHz..960MHz"},
{ MT_FORM | MT_ADV_CALLBACK, 0, "LEVEL: %+ddBm", menu_sdrive_acb}, { MT_FORM | MT_ADV_CALLBACK, 0, "LEVEL: %+ddBm", menu_sdrive_acb},
{ MT_FORM | MT_ADV_CALLBACK, 0, "MOD: %s", menu_smodulation_acb}, { MT_FORM | MT_ADV_CALLBACK, 0, "MOD: %s", menu_smodulation_acb},
{ MT_FORM | MT_KEYPAD, KM_SPAN, "SPAN: %s", NULL}, { MT_FORM | MT_KEYPAD, KM_SPAN, "SPAN: %s", NULL},
@ -1729,9 +1735,11 @@ static const menuitem_t menu_settings3[] =
{ {
{ MT_KEYPAD, KM_10MHZ, "CORRECT\nFREQUENCY", "Enter actual l0MHz frequency"}, { MT_KEYPAD, KM_10MHZ, "CORRECT\nFREQUENCY", "Enter actual l0MHz frequency"},
{ MT_KEYPAD, KM_GRIDLINES, "MINIMUM\nGRIDLINES", "Enter minimum horizontal grid divisions"}, { MT_KEYPAD, KM_GRIDLINES, "MINIMUM\nGRIDLINES", "Enter minimum horizontal grid divisions"},
// { MT_KEYPAD, KM_COR_AM, "COR\nAM", "Enter AM modulation correction"}, #if 0 // only used during development
{ MT_KEYPAD, KM_COR_AM, "COR\nAM", "Enter AM modulation correction"},
{ MT_KEYPAD, KM_COR_WFM, "COR\nWFM", "Enter WFM modulation correction"}, { MT_KEYPAD, KM_COR_WFM, "COR\nWFM", "Enter WFM modulation correction"},
{ MT_KEYPAD, KM_COR_NFM, "COR\nNFM", "Enter NFM modulation correction"}, { MT_KEYPAD, KM_COR_NFM, "COR\nNFM", "Enter NFM modulation correction"},
#endif
#ifdef __HAM_BAND__ #ifdef __HAM_BAND__
{ MT_ADV_CALLBACK, 0, "HAM\nBANDS", menu_settings_ham_bands}, { MT_ADV_CALLBACK, 0, "HAM\nBANDS", menu_settings_ham_bands},
#endif #endif
@ -2252,6 +2260,7 @@ set_numeric_value(void)
case KM_MODULATION: case KM_MODULATION:
set_modulation_frequency((int)uistat.value); set_modulation_frequency((int)uistat.value);
break; break;
#if 0
case KM_COR_AM: case KM_COR_AM:
config.cor_am =(int)uistat.value; config.cor_am =(int)uistat.value;
config_save(); config_save();
@ -2264,7 +2273,7 @@ set_numeric_value(void)
config.cor_nfm =(int)uistat.value; config.cor_nfm =(int)uistat.value;
config_save(); config_save();
break; break;
#endif
} }
} }

Loading…
Cancel
Save

Powered by TurnKey Linux.