Slider span

master
erikkaashoek 5 years ago
parent 802ab82ce9
commit 606ec95b5f

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

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

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

@ -30,14 +30,14 @@
#undef __FAST_SWEEP__
#endif
#endif
int dirty = true;
// uint8_t dirty = true;
int scandirty = true;
setting_t setting;
uint32_t frequencies[POINTS_COUNT];
uint16_t actual_rbw_x10 = 0;
int vbwSteps = 1;
uint16_t vbwSteps = 1;
uint32_t minFreq = 0;
uint32_t maxFreq = 520000000;
@ -135,6 +135,9 @@ void reset_settings(int m)
setting.spur_removal = S_OFF;
#endif
setting.mirror_masking = 0;
setting.slider_position = 0;
setting.slider_span = 100000;
#endif
switch(m) {
case M_LOW:
@ -171,7 +174,7 @@ void reset_settings(int m)
setting.sweep_time_us = 10*ONE_SECOND_TIME;
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].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
};
#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
static const struct {
typedef struct test_case {
int kind;
int setup;
float center; // In MHz
@ -2813,7 +2816,9 @@ static const struct {
float pass;
int width;
float stop;
} test_case [TEST_COUNT] =
} test_case_t;
const test_case_t test_case [] =
{// 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.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"
};
static const char *(test_fail_cause [TEST_COUNT]);
static const char *(test_fail_cause [TEST_COUNT]);
static int test_status[TEST_COUNT];
static int show_test_info = FALSE;
static volatile int test_wait = false;
@ -3105,7 +3110,7 @@ common_silent:
set_mode(M_LOW);
setting.tracking = true; //Sweep BPF
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);
goto common;
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
in_selftest = true;
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)
break;
test_status[i] = TS_WAITING;
@ -3219,7 +3224,7 @@ void self_test(int test)
test_step = TEST_END;
ili9341_set_foreground(LCD_BRIGHT_COLOR_RED);
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;
}

60
ui.c

@ -87,9 +87,6 @@ static int8_t kp_index = 0;
static char *kp_help_text = NULL;
static uint8_t menu_current_level = 0;
static int selection = 0;
static int slider_position = 0;
static int slider_delta = 100000;
static const uint8_t slider_bitmap[]=
{
@ -1833,7 +1830,7 @@ draw_menu_buttons(const menuitem_t *menu)
int local_slider_positions = 0;
if (MT_MASK(menu[i].type) == MT_KEYPAD) {
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;
} else if (menu[i].data == KM_LOWOUTLEVEL) {
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)
{
if ( (maxFreq - minFreq) < (uint32_t)(MENU_FORM_WIDTH * slider_delta) ) {
slider_delta = (maxFreq - minFreq)/MENU_FORM_WIDTH; // absolute mode with max step size
if ( (maxFreq - minFreq) < (uint32_t)setting.slider_span ) {
setting.slider_span = maxFreq - minFreq; // absolute mode with max step size
}
uint32_t half_span = (MENU_FORM_WIDTH / 2) * slider_delta;
if (minFreq + half_span > slider_freq) {
slider_position -= (minFreq + half_span - slider_freq) / slider_delta; // reposition if needed
uint32_t half_span = setting.slider_span >> 1;
if (minFreq + (uint32_t)half_span > slider_freq) {
setting.slider_position -= (minFreq + half_span - slider_freq) / (setting.slider_span /MENU_FORM_WIDTH); // reposition if needed
}
if (maxFreq < slider_freq + half_span) {
slider_position += (slider_freq + half_span - maxFreq) / slider_delta; // reposition if needed
if (maxFreq < slider_freq + (uint32_t)half_span) {
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)
new_slider = MENU_FORM_WIDTH/2;
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 (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;
} else {
mode = SL_SPAN;
@ -1940,12 +1937,12 @@ menu_select_touch(int i)
}
}
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)
uistat.value = minFreq;
if (uistat.value > maxFreq)
uistat.value = maxFreq;
slider_position = new_slider;
setting.slider_position = new_slider;
set_keypad_value(keypad);
perform(false, 0, (uint32_t)uistat.value, false);
draw_menu();
@ -1954,22 +1951,39 @@ menu_select_touch(int i)
first_span:
slider_freq = (uint32_t) uistat.value;
int pw=new_slider + LCD_WIDTH/2;
slider_position = pw - LCD_WIDTH/2; // Show delta on slider
slider_delta = 10;
setting.slider_position = pw - LCD_WIDTH/2; // Show delta on slider
setting.slider_span = 10;
while (pw>0) {
slider_delta *=10;
pw -= LCD_WIDTH/6;
setting.slider_span += setting.slider_span;
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
minFreq = 0; // And set minFreq to 0 for span display
uistat.value = slider_delta;
uistat.value = setting.slider_span;
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
minFreq = old_minFreq; // and restore minFreq
uistat.value = (float) slider_freq; // and restore current slider freq
set_keypad_value(keypad);
slider_position = 0; // reset slider after span change
center_text[0] = 'F';
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);
}
} 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();
return;
}
slider_position = 0; // Reset slider when entering frequency
setting.slider_position = 0; // Reset slider when entering frequency
prev_touch_button = -1;
#endif

@ -406,7 +406,10 @@ enum {
KM_REFLEVEL, KM_SCALE, KM_ATTENUATION,
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_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_NONE // always at enum end
};
@ -441,9 +444,11 @@ static const struct {
{keypads_positive , "MINIMUM\nGRIDLINES"}, // KM_GRIDLINES
{keypads_freq , "MARKER\nFREQ"}, // KM_MARKER
{keypads_freq , "MODULATION\nFREQ"}, // KM_MODULATION
#if 0
{keypads_plusmin , "COR\nAM"}, // KM_COR_AM
{keypads_plusmin , "COR\nWFM"}, // KM_COR_WFM
{keypads_plusmin , "COR\nNFM"}, // KM_COR_NFM
#endif
{keypads_positive , "ATTACK"}, // KM_ATTACK
};
@ -1487,10 +1492,11 @@ static const menuitem_t menu_sweep[] = {
};
char low_level_help_text[12] = "-76..-6";
char center_text[10] = "FREQ: %s";
static const menuitem_t menu_lowoutputmode[] = {
{ 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_ADV_CALLBACK, 0, "MOD: %s", menu_smodulation_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[] = {
{ 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, "MOD: %s", menu_smodulation_acb},
{ 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_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_NFM, "COR\nNFM", "Enter NFM modulation correction"},
#endif
#ifdef __HAM_BAND__
{ MT_ADV_CALLBACK, 0, "HAM\nBANDS", menu_settings_ham_bands},
#endif
@ -2252,6 +2260,7 @@ set_numeric_value(void)
case KM_MODULATION:
set_modulation_frequency((int)uistat.value);
break;
#if 0
case KM_COR_AM:
config.cor_am =(int)uistat.value;
config_save();
@ -2264,7 +2273,7 @@ set_numeric_value(void)
config.cor_nfm =(int)uistat.value;
config_save();
break;
#endif
}
}

Loading…
Cancel
Save

Powered by TurnKey Linux.