OSD: separate page for UART settings.

This commit is contained in:
sorgelig
2019-01-18 07:24:20 +08:00
parent f2af0772bf
commit c4cf5e3687

148
menu.cpp
View File

@@ -122,6 +122,9 @@ enum MENU
MENU_ARCHIE_MAIN2,
MENU_ARCHIE_MAIN_FILE_SELECTED,
MENU_UART1,
MENU_UART2,
// 8bit menu entries
MENU_8BIT_MAIN1,
MENU_8BIT_MAIN2,
@@ -166,9 +169,8 @@ const char *config_button_turbo_msg[] = { "OFF", "FAST", "MEDIUM", "SLOW" };
const char *config_button_turbo_choice_msg[] = { "A only", "B only", "A & B" };
const char *joy_button_map[] = { "RIGHT", "LEFT", "DOWN", "UP", "BUTTON 1", "BUTTON 2", "BUTTON 3", "BUTTON 4", "KBD TOGGLE", "BUTTON OSD" };
const char *config_stereo_msg[] = { "0%", "25%", "50%", "100%" };
const char *config_uart_msg[] = { " None", " PPP", " Console", " MLINK", "MLINK-38K" };
const char *config_uart_msg[] = { " None", " PPP", " Console", " MIDI", " MIDI-38K" };
const char *config_scaler_msg[] = { "Internal","Custom" };
const char *config_softsynth_msg[] = {"FluidSynth", " MUNT", " TCP", " UDP"};
char joy_bnames[12][32];
int joy_bcount = 0;
@@ -1279,10 +1281,10 @@ void HandleUI(void)
parentstate = MENU_8BIT_SYSTEM1;
int n = 0;
if (!user_io_get_uart_mode() || user_io_get_scaler_flt() < 0) OsdWrite(n++); //enough place to skip first line
OsdWrite(n++);
OsdWrite(n++, " Core \x16", menusub == 0, 0);
sprintf(s, " Define %s buttons ", is_menu_core() ? "System" : user_io_get_core_name_ex());
sprintf(s, " Define %s buttons ", is_menu_core() ? "System" : user_io_get_core_name_ex());
s[27] = '\x16';
s[28] = 0;
OsdWrite(n++, s, menusub == 1, 0);
@@ -1290,14 +1292,14 @@ void HandleUI(void)
if (user_io_get_uart_mode())
{
menumask |= 0x8;
OsdWrite(n++);
struct stat filestat;
int mode = GetUARTMode();
menumask |= 0x18;
sprintf(s, " UART connection %s", config_uart_msg[mode]);
OsdWrite(n++, s, menusub == 3, 0);
sprintf(s, " MidiLink %s", config_softsynth_msg[GetMidiLinkMode()]);
OsdWrite(n++, s, menusub == 4, (mode == 3 || mode == 4) && stat("/dev/midi", &filestat) ? 0 : 1);
const char *p = config_uart_msg[GetUARTMode()];
while (*p == ' ') p++;
sprintf(s, " UART mode (%s) ",p);
s[27] = '\x16';
s[28] = 0;
OsdWrite(n++, s, menusub == 3);
}
if (user_io_get_scaler_flt() >= 0)
@@ -1387,39 +1389,14 @@ void HandleUI(void)
break;
case 3:
{
uint mode = GetUARTMode() + 1;
if (mode > sizeof(config_uart_msg)/sizeof(config_uart_msg[0])) mode = 0;
sprintf(s, "uartmode %d", mode);
system(s);
menustate = MENU_8BIT_SYSTEM1;
mode |= GetMidiLinkMode() << 8;
sprintf(s, "uartmode.%s", user_io_get_core_name_ex());
FileSaveConfig(s, &mode, 4);
}
break;
case 4:
{
int mode = GetUARTMode();
if (mode == 3 or mode == 4)
{
uint midilink = GetMidiLinkMode();
midilink++;
if (midilink > sizeof(config_softsynth_msg)/sizeof(config_softsynth_msg[0])) midilink = 0;
SetMidiLinkMode(midilink);
sprintf(s, "uartmode %d", 0);
system(s);
sprintf(s, "uartmode %d", mode);
system(s);
menustate = MENU_UART1;
mode |= GetMidiLinkMode() << 8;
sprintf(s, "uartmode.%s", user_io_get_core_name_ex());
FileSaveConfig(s, &mode, 4);
}
menustate = MENU_8BIT_SYSTEM1;
struct stat filestat;
int mode = GetUARTMode();
//jump straght to Softsynth selection if enabled
menusub = ((mode != 3 && mode != 4) || !stat("/dev/midi", &filestat)) ? 0 : 2;
}
break;
@@ -1526,6 +1503,93 @@ void HandleUI(void)
if(!hold_cnt && reboot_req) fpga_load_rbf("menu.rbf");
break;
case MENU_UART1:
{
helptext = 0;
menumask = 0x1F;
OsdSetTitle("UART mode");
menustate = MENU_UART2;
parentstate = MENU_UART1;
struct stat filestat;
int hasmidi = !stat("/dev/midi", &filestat);
int mode = GetUARTMode();
int midilink = GetMidiLinkMode();
int m = (mode != 3 && mode != 4) || hasmidi;
OsdWrite(0);
sprintf(s, " Connection: %s", config_uart_msg[mode]);
OsdWrite(1, s, menusub == 0, 0);
OsdWrite(2);
sprintf(s, " MIDI link: %s", (midilink & 2) ? "Remote" : " Local");
OsdWrite(3, s, menusub == 1, m);
sprintf(s, " Type: %s", (midilink & 2) ? ((midilink & 1) ? " UDP" : " TCP") : ((midilink & 1) ? " MUNT" : "FluidSynth"));
OsdWrite(4, s, menusub == 2, m);
OsdWrite(5);
OsdWrite(6, " Save", menusub == 3);
for (int i = 7; i < 15; i++) OsdWrite(i);
OsdWrite(15, STD_EXIT, menusub == 4);
}
break;
case MENU_UART2:
if (menu)
{
menustate = MENU_8BIT_SYSTEM1;
menusub = 3;
break;
}
if (select)
{
switch (menusub)
{
case 0:
{
uint mode = GetUARTMode() + 1;
if (mode > sizeof(config_uart_msg) / sizeof(config_uart_msg[0])) mode = 0;
sprintf(s, "uartmode %d", mode);
system(s);
menustate = MENU_UART1;
}
break;
case 1:
case 2:
if (!m)
{
int mode = GetUARTMode();
SetMidiLinkMode(GetMidiLinkMode() ^ ((menusub == 1) ? 2 : 1));
sprintf(s, "uartmode %d", 0);
system(s);
sprintf(s, "uartmode %d", mode);
system(s);
menustate = MENU_UART1;
}
break;
case 3:
{
int mode = GetUARTMode() | (GetMidiLinkMode() << 8);
sprintf(s, "uartmode.%s", user_io_get_core_name_ex());
FileSaveConfig(s, &mode, 4);
menustate = MENU_8BIT_SYSTEM1;
menusub = 3;
}
break;
default:
menustate = MENU_NONE1;
break;
}
}
break;
case MENU_COEFF_FILE_SELECTED:
{
char *p = strrchr(SelectedPath, '/');