Temp reading, input correction curve editing

Removed_REF_marker
erikkaashoek 5 years ago
parent f99a9ddbf7
commit ba60a0e615

@ -1020,13 +1020,13 @@ config_t config = {
{
{ 10000, 100000, 300000, 1000000, 30000000, 500000000, 750000000, 750000010, 1000000000, 1500000000, 1520000000, 2000000000, 2500000000, 3000000000, 3500000000, 4000000000, 4500000000, 5000000000, 5500000000, 6000000000 },
{ 10000, 100000, 300000, 1000000, 30000000, 500000000, 750000000, 750000010, 1000000000, 1500000000, 1520000000, 2000000000, 2500000000, 3000000000, 3500000000, 4000000000, 4500000000, 5000000000, 5500000000, 6000000000 },
{ 10000, 80000, 150000, 300000, 1000000, 5000000, 80000000, 180000000, 650000000, 700000000, 760000000, 780000000, 790000000, 800000000, 800000000, 800000000, 800000000, 800000000, 800000000, 800000000 },
{ 10000, 50000, 80000, 150000, 300000, 1000000, 5000000, 80000000, 100000000, 180000000, 650000000, 700000000, 760000000, 780000000, 790000000, 800000000, 800000000, 800000000, 800000000, 800000000},
},
.correction_value =
{
{ 10.5, +4.9, +1.6, +0.6, 0, 0, +2, +0, +2, +2, +2, +2, +3.5, +6.5, +6.5, +9, +9, +9, +11, +11,}, // low in
{ 10.5, +4.9, +1.6, +0.6, 0, 0, +2, +0, +2, +2, +2, +2, +6, +9, +11.5, +14.5, +23, +25, +36, +46,}, // LNA in
{ 11.5, 6, 3.5, 1.5, 0.5, -0.2, 0, -0.5, +1.5, +2, +4, +6.5, +9, +13, +13, +13, +13, +13, +13, +13, }, // low out
{ 10.5, +4.9, +1.6, +0.6, 0, 0, +2, +0, +2, +2, +2, +2, +3.5, +6.5, +6.5, +9, +9, +9, +11, +11,}, // low in
{ 10.5, +4.9, +1.6, +0.6, 0, 0, +2, +0, +2, +2, +2, +2, +6, +9, +11.5, +14.5, +23, +25, +36, +46,}, // LNA in
{ 11.5, 7, 6, 3.5, 1.5, 0.5, -0.2, 0, 0, -0.5, +1.5, +2, +4, +6.5, +9, +13, +13, +13, +13, +13, }, // low out
},
.setting_frequency_30mhz = 30000000,
.cor_am = 0,
@ -2503,7 +2503,8 @@ static const VNAShellCommand commands[] =
{ "v", cmd_v, CMD_WAIT_MUTEX },
{ "a", cmd_a, CMD_WAIT_MUTEX },
{ "b", cmd_b, CMD_WAIT_MUTEX },
{ "t", cmd_t, CMD_WAIT_MUTEX },
{ "t", cmd_t, CMD_WAIT_MUTEX },
{ "k", cmd_k, CMD_WAIT_MUTEX },
{ "e", cmd_e, CMD_WAIT_MUTEX },
{ "s", cmd_s, CMD_WAIT_MUTEX },
{ "m", cmd_m, CMD_WAIT_MUTEX },

@ -18,7 +18,7 @@
*/
#include "ch.h"
#ifdef TINYSA_F303
//#ifdef TINYSA_F303
#include "adc_F303.h"
#ifdef TINYSA_F072
#error "Remove comment for #ifdef TINYSA_F303"
@ -27,7 +27,7 @@
#define TINYSA4
#endif
#define TINYSA4_PROTO
#endif
//#endif
#ifdef TINYSA_F072
#ifdef TINYSA_F303
@ -64,6 +64,11 @@
//#define __HAM_BAND__
#define __SPUR__ // Does spur reduction by shifting IF
//#define __USE_SERIAL_CONSOLE__ // Enable serial I/O connection (need enable HAL_USE_SERIAL as TRUE in halconf.h)
#ifdef __USE_SERIAL_CONSOLE__
#if (HAL_USE_SERIAL != TRUE)
//#error "HAL_USE_SERIAL must be set to true"
#endif
#endif
#define __SINGLE_LETTER__ // Add fast console commands
#define __NICE_BIG_FONT__ // Add not scaled big font for menus
#define __QUASI_PEAK__ // Add quasi peak average option
@ -74,6 +79,7 @@
#ifdef TINYSA4
#define __HARMONIC__
#define __VBW__
#define __SWEEP_RESTART__
#else
#endif
@ -946,6 +952,7 @@ typedef struct setting
bool tracking_output; // bool
bool mute; // bool
bool auto_IF; // bool
bool sweep; // bool
uint8_t mode; // enum
uint8_t below_IF; // enum
@ -1203,9 +1210,11 @@ void menu_push_lowoutput(void);
void menu_push_highoutput(void);
void menu_move_top(void);
void draw_menu(void);
void refres_sweep_menu(void);
int check_touched(void);
int invoke_quick_menu(int);
bool ui_process_listen_lever(void);
void refresh_sweep_menu(int i);
// Irq operation process set
#define OP_NONE 0x00
@ -1319,7 +1328,7 @@ int plot_printf(char *str, int, const char *fmt, ...);
typedef uint8_t deviceRSSI_t;
typedef int16_t pureRSSI_t;
extern int current_index;
// RSSI values conversion macro
#define DEVICE_TO_PURE_RSSI(rssi) ((rssi)<<4)

@ -1320,6 +1320,7 @@ static void trace_print_value_string( // Only used at one place
int ri, // reference Marker number
float coeff[POINTS_COUNT])
{
(void) bold;
int mtype = markers[mi].mtype;
int idx = markers[mi].index;
float v = value(coeff[idx]);

@ -1005,6 +1005,15 @@ VNA_SHELL_FUNCTION(cmd_q)
}
goto again;
}
extern float Si446x_get_temp(void);
VNA_SHELL_FUNCTION(cmd_k)
{
float value;
shell_printf("temperature: %f\r\n", Si446x_get_temp());
}
#endif

@ -38,6 +38,7 @@
uint8_t scandirty = true;
bool debug_avoid = false;
bool debug_avoid_second = false;
int current_index = -1;
setting_t setting;
freq_t frequencies[POINTS_COUNT];
@ -175,6 +176,7 @@ void reset_settings(int m)
{
// strcpy((char *)spi_buffer, dummy);
setting.mode = m;
setting.sweep = false;
#ifdef TINYSA4
ultra_threshold = config.ultra_threshold;
ultra = config.ultra;
@ -2355,7 +2357,7 @@ int avoid_spur(freq_t f) // find if this frequency should be a
else
{
#ifdef TINYSA4
int w = (m >= sizeof(spur_div)/sizeof(uint8_t) ? 3 : 1);
int w = ((unsigned int)m >= sizeof(spur_div)/sizeof(uint8_t) ? 3 : 1);
fmin = f - spur_gate*w;
fplus = f + spur_gate*w;
if (spur_table[m] < fmin || spur_table[m] > fplus)
@ -3571,11 +3573,18 @@ static bool sweep(bool break_on_operation)
// if break back to top level to handle ui operation
if (refreshing)
scandirty = false;
if (break_on_operation && operation_requested) { // break loop if needed
if ((break_on_operation && operation_requested )
#ifdef __SWEEP_RESTART__
|| (MODE_OUTPUT(setting.mode) && !setting.sweep && (setting.level_sweep != 0 || get_sweep_frequency(ST_SPAN) != 0))
#endif
) { // break loop if needed
abort:
if (setting.actual_sweep_time_us > ONE_SECOND_TIME /* && MODE_INPUT(setting.mode) */) {
ili9341_set_background(LCD_BG_COLOR);
ili9341_fill(OFFSETX, CHART_BOTTOM+1, WIDTH, 1); // Erase progress bar
#ifdef __SWEEP_RESTART__
refresh_sweep_menu(-1);
#endif
}
return false;
}
@ -3621,18 +3630,20 @@ static bool sweep(bool break_on_operation)
}
}
}
if (
#ifdef TINYSA4
show_bar && (i & 0x07) == 0 && (setting.actual_sweep_time_us > ONE_SECOND_TIME || (chVTGetSystemTimeX() - start_of_sweep_timestamp) > ONE_SECOND_TIME / 100) // if required
#else
show_bar && (i & 0x07) == 0 && setting.actual_sweep_time_us > ONE_SECOND_TIME // if required
#endif
) {
systime_t local_sweep_time = (chVTGetSystemTimeX() - start_of_sweep_timestamp)*100 ;
if (setting.actual_sweep_time_us > ONE_SECOND_TIME)
local_sweep_time = setting.actual_sweep_time_us;
if (show_bar && (( local_sweep_time > ONE_SECOND_TIME && (i & 0x07) == 0) || ( local_sweep_time > ONE_SECOND_TIME*10)) )
{
int pos = i * (WIDTH+1) / sweep_points;
ili9341_set_background(LCD_SWEEP_LINE_COLOR);
ili9341_fill(OFFSETX, CHART_BOTTOM+1, pos, 1); // update sweep progress bar
ili9341_set_background(LCD_BG_COLOR);
ili9341_fill(OFFSETX+pos, CHART_BOTTOM+1, WIDTH-pos, 1);
#ifdef __SWEEP_RESTART__
if (MODE_OUTPUT(setting.mode) && (setting.level_sweep != 0 || get_sweep_frequency(ST_SPAN) != 0))
refresh_sweep_menu(i);
#endif
}
// ----------------------- debug avoid --------------------------------
if (debug_avoid) {
@ -3821,6 +3832,9 @@ static bool sweep(bool break_on_operation)
// ili9341_fill(OFFSETX, CHART_BOTTOM+1, WIDTH, 1, 0); // Erase progress bar before updating actual_sweep_time
ili9341_set_background(LCD_BG_COLOR);
ili9341_fill(OFFSETX, CHART_BOTTOM+1, WIDTH, 1);
#ifdef __SWEEP_RESTART__
refresh_sweep_menu(-1);
#endif
}
// ---------------------- process measured actual sweep time -----------------
// For CW mode value calculated in SI4432_Fill

@ -1207,6 +1207,16 @@ void Si446x_getInfo(si446x_info_t* info)
info->patch = (data[3]<<8) | data[4];
info->func = data[5];
}
float Si446x_get_temp(void)
{
uint8_t data[6] = { SI446X_CMD_GET_ADC_READING, 0x10 };
SI4463_do_api(data, 2, data, 6);
float t = (data[4] << 8) + data[5];
t = (899.0 * t /4096.0) - 293.0;
return t;
}
#ifdef notused
static uint8_t SI4463_get_device_status(void)
{

30
ui.c

@ -1820,7 +1820,7 @@ static const char *step_text[5] = {"-10dB", "-1dB", "set", "+1dB", "+10dB"};
static char step_text_freq[5][10] = { "-100MHz", "-10MHz", "set", "+10MHz", "+100MHz" };
static void
draw_menu_buttons(const menuitem_t *menu)
draw_menu_buttons(const menuitem_t *menu, int only)
{
int i = 0;
int y = 0;
@ -1830,6 +1830,14 @@ draw_menu_buttons(const menuitem_t *menu)
continue;
if (MT_MASK(menu[i].type) == MT_NONE)
break;
#ifdef __SWEEP_RESTART__
if (only != -1 && only != i) {
y += MENU_BUTTON_HEIGHT;
continue;
}
#else
(void)only;
#endif
button.icon = BUTTON_ICON_NONE;
// Border width
button.border = MENU_BUTTON_BORDER;
@ -2204,8 +2212,26 @@ menu_apply_touch(int touch_x, int touch_y)
void
draw_menu(void)
{
draw_menu_buttons(menu_stack[menu_current_level]);
draw_menu_buttons(menu_stack[menu_current_level], -1);
}
#ifdef __SWEEP_RESTART__
systime_t old_sweep_time;
void
refresh_sweep_menu(int i)
{
current_index = i;
systime_t new_sweep_time = chVTGetSystemTimeX();
if (new_sweep_time - old_sweep_time > ONE_SECOND_TIME/200 && i >= 0) {
old_sweep_time = new_sweep_time;
if (menu_stack[menu_current_level] == menu_lowoutputmode)
draw_menu_buttons(menu_stack[menu_current_level], 5);
if (menu_stack[menu_current_level] == menu_highoutputmode)
draw_menu_buttons(menu_stack[menu_current_level], 5);
}
}
#endif
static void
erase_menu_buttons(void)

@ -509,11 +509,17 @@ static const menuitem_t menu_sweep_points[];
static const menuitem_t menu_sweep_points_form[];
static const menuitem_t menu_modulation[];
static const menuitem_t menu_limit_modify[];
#ifdef __USE_SERIAL_CONSOLE__
static const menuitem_t menu_connection[];
#endif
//static const menuitem_t menu_drive_wide[];
#ifdef TINYSA4
static const menuitem_t menu_settings3[];
static const menuitem_t menu_curve[];
static const menuitem_t menu_curve_confirm[];
#endif
static const menuitem_t menu_sweep[];
extern bool dirty;
static UI_FUNCTION_ADV_CALLBACK(menu_sweep_acb)
{
@ -533,41 +539,139 @@ static UI_FUNCTION_ADV_CALLBACK(menu_sweep_acb)
}
menu_push_submenu(menu_sweep);
}
#ifdef __SWEEP_RESTART__
static UI_FUNCTION_ADV_CALLBACK(menu_restart_acb){
(void)item;
(void)data;
if(b){
if (current_index >= 0 && setting.sweep) {
float current_level = setting.level + ((float)current_index)* setting.level_sweep / (float)sweep_points;
plot_printf(uistat.text, sizeof uistat.text, "STOP %5.3QHz %+.1fdBm", frequencies[current_index], current_level);
b->param_1.text = uistat.text;
} else {
b->param_1.text = "START SWEEP";
}
return;
}
setting.sweep = !setting.sweep;
dirty = true;
}
#endif
#ifdef TINYSA4
float local_actual_level;
int current_curve;
int current_curve_index;
static UI_FUNCTION_ADV_CALLBACK(menu_curve_acb)
{
{
(void)item;
int old_m;
if (b){
plot_printf(uistat.text, sizeof uistat.text, "%.3QHz %+.1fdB",
config.correction_frequency[CORRECTION_LOW_OUT][data],
config.correction_value[CORRECTION_LOW_OUT][data]);
config.correction_frequency[current_curve][data],
config.correction_value[current_curve][data]);
b->param_1.text = uistat.text;
return;
}
if (config.low_level_output_offset == 100)
switch(current_curve) {
case CORRECTION_LOW_OUT:
old_m = setting.mode;
reset_settings(M_GENLOW);
set_level(-35);
set_sweep_frequency(ST_CW, config.correction_frequency[current_curve][data]);
setting.mute = false;
perform(false, 0, config.correction_frequency[current_curve][data], false);
perform(false, 1, config.correction_frequency[current_curve][data], false);
plot_printf(uistat.text, sizeof uistat.text, "Level of %.3QHz output",
config.correction_frequency[current_curve][data]);
kp_help_text = uistat.text;
kp_buf[0]=0;
ui_mode_keypad(KM_LEVEL);
if (kp_buf[0] != 0) {
float new_offset = (-35.0) - uistat.value + config.correction_value[current_curve][data]; // calculate offset based on difference between measured peak level and known peak level
if (new_offset > -25 && new_offset < 25) {
config.correction_value[current_curve][data] = new_offset;
config_save();
}
}
reset_settings(old_m);
break;
case CORRECTION_LNA:
reset_settings(M_LOW);
setting.extra_lna = true;
goto common;
case CORRECTION_LOW:
reset_settings(M_LOW);
common:
set_sweep_frequency(ST_SPAN, 1000000);
set_sweep_frequency(ST_CENTER, config.correction_frequency[current_curve][data]);
current_curve_index = data;
menu_push_submenu(menu_curve_confirm);
break;
}
}
extern float peakLevel;
UI_FUNCTION_CALLBACK(menu_curve_confirm_cb)
{
(void)item;
if (data) {
float new_offset = local_actual_level - peakLevel + config.correction_value[current_curve][current_curve_index]; // calculate offset based on difference between measured peak level and known peak level
if (new_offset > -25 && new_offset < 25) {
config.correction_value[current_curve][current_curve_index] = new_offset;
config_save();
}
}
menu_move_back(false);
}
static UI_FUNCTION_CALLBACK(menu_input_curve_prepare_cb)
{
(void)item;
(void)data;
if (config.low_level_offset == 100)
return;
int old_m = setting.mode;
reset_settings(M_GENLOW);
set_level(-35);
set_sweep_frequency(ST_CW, config.correction_frequency[CORRECTION_LOW_OUT][data]);
setting.mute = false;
perform(false, 0, config.correction_frequency[CORRECTION_LOW_OUT][data], false);
perform(false, 1, config.correction_frequency[CORRECTION_LOW_OUT][data], false);
plot_printf(uistat.text, sizeof uistat.text, "Level of %.3QHz output",
config.correction_frequency[CORRECTION_LOW_OUT][data]);
kp_help_text = uistat.text;
kp_help_text = "Enter actual input level";
kp_buf[0]=0;
ui_mode_keypad(KM_LEVEL);
if (kp_buf[0] != 0) {
local_actual_level = uistat.value;
current_curve = CORRECTION_LOW;
menu_push_submenu(menu_curve);
}
}
static UI_FUNCTION_CALLBACK(menu_lna_curve_prepare_cb)
{
(void)item;
(void)data;
if (config.low_level_offset == 100)
return;
kp_help_text = "Enter actual input level";
kp_buf[0]=0;
ui_mode_keypad(KM_LEVEL);
if (kp_buf[0] != 0) {
float new_offset = (-35.0) - uistat.value + config.correction_value[CORRECTION_LOW_OUT][data]; // calculate offset based on difference between measured peak level and known peak level
if (new_offset > -25 && new_offset < 25) {
config.correction_value[CORRECTION_LOW_OUT][data] = new_offset;
config_save();
}
local_actual_level = uistat.value;
current_curve = CORRECTION_LNA;
menu_push_submenu(menu_curve);
}
reset_settings(old_m);
}
static UI_FUNCTION_CALLBACK(menu_output_curve_prepare_cb)
{
(void)item;
(void)data;
if (config.low_level_output_offset == 100)
return;
current_curve = CORRECTION_LOW_OUT;
menu_push_submenu(menu_curve);
}
#endif
static UI_FUNCTION_ADV_CALLBACK(menu_output_level_acb)
@ -668,8 +772,6 @@ static UI_FUNCTION_ADV_CALLBACK(menu_store_preset_acb)
menu_move_back(true);
}
extern bool dirty;
UI_FUNCTION_CALLBACK(menu_autosettings_cb)
{
(void)item;
@ -1854,37 +1956,34 @@ char center_text[18] = "FREQ: %s";
static const menuitem_t menu_lowoutputmode[] = {
{ MT_FORM | MT_ADV_CALLBACK, 0, "LOW OUTPUT %s", menu_outputmode_acb},
// { MT_FORM | MT_ADV_CALLBACK, 0, "MOD: %s", menu_smodulation_acb},
#ifdef TINYSA4
{ MT_FORM | MT_SUBMENU, 255, S_RARROW" Settings", menu_settings3},
#endif
{ MT_FORM | MT_KEYPAD, KM_CENTER, center_text, VARIANT("10kHz..350MHz","10kHz..850MHz")},
{ MT_FORM | MT_KEYPAD, KM_LOWOUTLEVEL, "LEVEL: %s", low_level_help_text},
{ MT_FORM | MT_ADV_CALLBACK, 0, "MOD: %s", menu_smodulation_acb},
{ MT_FORM | MT_ADV_CALLBACK, 0, "%s", menu_sweep_acb},
// { MT_FORM | MT_KEYPAD, KM_SPAN, "SPAN: %s", "0..350MHz"},
// { MT_FORM | MT_KEYPAD | MT_LOW, KM_LEVELSWEEP,"LEVEL CHANGE: %s", "-70..70"},
// { MT_FORM | MT_KEYPAD, KM_SWEEP_TIME, "SWEEP TIME: %s", "0..600 seconds"},
#ifdef __SWEEP_RESTART__
{ MT_FORM | MT_ADV_CALLBACK, 0, "%s", menu_restart_acb},
#endif
{ MT_FORM | MT_KEYPAD, KM_EXT_GAIN, "EXTERNAL GAIN: %s", "-100..+100"},
#ifdef TINYSA4
{ MT_FORM | MT_SUBMENU, 255, S_RARROW" Settings", menu_settings3},
#endif
{ MT_FORM | MT_CANCEL, 0, "MODE", NULL },
{ MT_FORM | MT_NONE, 0, NULL, NULL } // sentinel
};
static const menuitem_t menu_highoutputmode[] = {
{ MT_FORM | MT_ADV_CALLBACK, 0, "HIGH OUTPUT %s", menu_outputmode_acb},
#ifdef TINYSA4
{ MT_FORM | MT_SUBMENU, 255, S_RARROW" Settings", menu_settings3},
#endif
{ MT_FORM | MT_KEYPAD, KM_CENTER, center_text, VARIANT("240MHz..960MHz","136MHz..4350MHz")},
// { MT_FORM | MT_ADV_CALLBACK, 0, "LEVEL: %+ddBm", menu_sdrive_acb},
{ MT_FORM | MT_KEYPAD, KM_HIGHOUTLEVEL, "LEVEL: %s", low_level_help_text /* "-76..-6" */},
{ MT_FORM | MT_ADV_CALLBACK, 0, "MOD: %s", menu_smodulation_acb},
#ifdef TINYSA4
{ MT_FORM | MT_ADV_CALLBACK, 0, "%s", menu_sweep_acb},
#else
{ MT_FORM | MT_KEYPAD, KM_SPAN, "SPAN: %s", NULL},
{ MT_FORM | MT_KEYPAD, KM_SWEEP_TIME,"SWEEP TIME: %s", "0..600 seconds"},
#ifdef __SWEEP_RESTART__
{ MT_FORM | MT_ADV_CALLBACK, 0, "%s", menu_restart_acb},
#endif
{ MT_FORM | MT_KEYPAD, KM_EXT_GAIN, "EXTERNAL GAIN: %s", "-100..+100"},
#ifdef TINYSA4
{ MT_FORM | MT_SUBMENU, 255, S_RARROW" Settings", menu_settings3},
#endif
{ MT_FORM | MT_CANCEL, 0, "MODE", NULL },
{ MT_FORM | MT_NONE, 0, NULL, NULL } // sentinel
};
@ -2194,6 +2293,9 @@ static const menuitem_t menu_settings3[] =
#else
{ MT_KEYPAD, KM_10MHZ, "CORRECT\nFREQUENCY", "Enter actual l0MHz frequency"},
{ MT_KEYPAD, KM_GRIDLINES, "MINIMUM\nGRIDLINES", "Enter minimum horizontal grid divisions"},
#ifdef __USE_SERIAL_CONSOLE__
{ MT_SUBMENU, 0, "CONNECTION", menu_connection},
#endif
#ifdef __HAM_BAND__
{ MT_ADV_CALLBACK, 0, "HAM\nBANDS", menu_settings_ham_bands},
#endif
@ -2277,14 +2379,23 @@ static const menuitem_t menu_curve[] = {
{ MT_FORM | MT_CANCEL, 0, S_LARROW" BACK", NULL },
{ MT_NONE, 0, NULL, NULL } // sentinel
};
static const menuitem_t menu_curve_confirm[] = {
{ MT_CALLBACK, 1, "OK", menu_curve_confirm_cb },
{ MT_CALLBACK, 0, "CANCEL", menu_curve_confirm_cb },
{ MT_NONE, 0, NULL, NULL } // sentinel
};
#endif
static const menuitem_t menu_actual_power[] =
{
{ MT_KEYPAD, KM_ACTUALPOWER, "INPUT\nLEVEL", "dBm"},
{ MT_ADV_CALLBACK, 0, "OUTPUT\nLEVEL", menu_output_level_acb},
{ MT_KEYPAD, KM_ACTUALPOWER, "INPUT\nLEVEL", "dBm"},
{ MT_ADV_CALLBACK, 0, "OUTPUT\nLEVEL", menu_output_level_acb},
#ifdef TINYSA4
{ MT_SUBMENU | MT_LOW,0, "OUTPUT\nCURVE", menu_curve},
{ MT_CALLBACK, 0, "INPUT\nCURVE", menu_input_curve_prepare_cb},
{ MT_CALLBACK, 0, "LNA\nCURVE", menu_lna_curve_prepare_cb},
{ MT_SUBMENU | MT_LOW, 0, "OUTPUT\nCURVE", menu_output_curve_prepare_cb},
#endif
{ MT_CANCEL, 0, S_LARROW" BACK", NULL },
{ MT_NONE, 0, NULL, NULL } // sentinel
@ -2374,7 +2485,7 @@ const menuitem_t menu_serial_speed[] = {
{ MT_NONE, 0, NULL, NULL } // sentinel
};
const menuitem_t menu_connection[] = {
static const menuitem_t menu_connection[] = {
{ MT_ADV_CALLBACK, _MODE_USB, "USB", menu_connection_acb },
{ MT_ADV_CALLBACK, _MODE_SERIAL, "SERIAL", menu_connection_acb },
{ MT_SUBMENU, 0, "SERIAL\nSPEED", menu_serial_speed },
@ -2400,9 +2511,6 @@ static const menuitem_t menu_config[] = {
#ifdef __SPUR__
{ MT_ADV_CALLBACK,0, "%s", menu_spur_acb},
#endif
#ifdef __USE_SERIAL_CONSOLE__
{ MT_SUBMENU, 0, "CONNECTION", menu_connection},
#endif
#ifdef TINYSA4
{ MT_KEYPAD, KM_REPEAT, "SAMPLE\nREPEAT", "1..100"},
#endif

Loading…
Cancel
Save

Powered by TurnKey Linux.