Enhance UART handling and improve TUI input management

This commit is contained in:
2025-04-06 17:56:32 +02:00
parent 248af2bc4d
commit f44bd795d5
4 changed files with 66 additions and 41 deletions
+2
View File
@@ -51,4 +51,6 @@ modules.order
Module.symvers Module.symvers
Mkfile.old Mkfile.old
dkms.conf dkms.conf
output/
.vscode/
BIN
View File
Binary file not shown.
+13 -2
View File
@@ -12,7 +12,15 @@
void *uartListener(void *arg) void *uartListener(void *arg)
{ {
char *uart_address = (char *)arg;
int uart = open(uart_address, O_RDWR | O_NOCTTY | O_NDELAY);
if (uart == -1)
{
perror("Failed to open UART");
return NULL;
}
close(uart);
return NULL; return NULL;
} }
@@ -27,12 +35,15 @@ int main(int argc, char const *argv[])
getmaxyx(stdscr, y_max, x_max); getmaxyx(stdscr, y_max, x_max);
if (x_max <= MIN_X_TERMINAL_SIZE || y_max <= MIN_Y_TERMINAL_SIZE) if (x_max <= MIN_X_TERMINAL_SIZE || y_max <= MIN_Y_TERMINAL_SIZE)
{ {
endwin();
clear();
puts("Terminal is too small. Exiting...\n"); puts("Terminal is too small. Exiting...\n");
return EXIT_FAILURE; return EXIT_FAILURE;
} }
noecho(); noecho();
noraw(); noraw();
cbreak();
start_color(); start_color();
curs_set(0); curs_set(0);
@@ -42,7 +53,7 @@ int main(int argc, char const *argv[])
uartDialog(uart_address, x_max, y_max); uartDialog(uart_address, x_max, y_max);
pthread_create(&uart_thread, NULL, uartListener, NULL); pthread_create(&uart_thread, NULL, uartListener, uart_address);
// //
+51 -39
View File
@@ -29,64 +29,76 @@ void uartDialog(char *uart_adress, int terminal_x, int terminal_y)
wattroff(uartwin, COLOR_PAIR(1)); wattroff(uartwin, COLOR_PAIR(1));
wrefresh(uartwin); wrefresh(uartwin);
// menu... char choice;
int choice;
int highlight = 0; int highlight = 0;
keypad(uartwin, TRUE); int text_x = (win_width - 52) / 2;
int button_x = (win_width - 7) / 2;
keypad(uartwin, true);
while (1) while (1)
{ {
int text_x = (win_width - 52) / 2; // Input array
if (highlight == 0) if (highlight == 0)
{
wattron(uartwin, COLOR_PAIR(2)); wattron(uartwin, COLOR_PAIR(2));
mvwprintw(uartwin, 5, text_x, "[__________________________________________________]"); else
wattroff(uartwin, COLOR_PAIR(2)); wattron(uartwin, COLOR_PAIR(1));
}
mvwprintw(uartwin, 5, text_x, "[%50s]", input); mvwprintw(uartwin, 5, text_x, "[%50s]", input);
if (!strcmp(input, "\0"))
mvwprintw(uartwin, 5, text_x, "[__________________________________________________]");
int button_x = (win_width - 7) / 2; if (highlight == 0)
if (highlight == 1)
{
wattron(uartwin, COLOR_PAIR(2));
mvwprintw(uartwin, 7, button_x, "<Enter>");
wattroff(uartwin, COLOR_PAIR(2)); wattroff(uartwin, COLOR_PAIR(2));
} else
mvwprintw(uartwin, 7, button_x, "<Enter>"); wattroff(uartwin, COLOR_PAIR(1));
// Enter button
if (highlight == 1)
wattron(uartwin, COLOR_PAIR(2));
else
wattron(uartwin, COLOR_PAIR(1));
mvwprintw(uartwin, 7, button_x - 2, " %s ", "<Enter>");
if (highlight == 1)
wattroff(uartwin, COLOR_PAIR(2));
else
wattroff(uartwin, COLOR_PAIR(1));
wrefresh(uartwin); wrefresh(uartwin);
flushinp();
choice = wgetch(uartwin); choice = wgetch(uartwin);
if (choice == '\t') if (choice == '\t')
{ {
highlight=!highlight; highlight = !highlight;
} }
if (highlight == 0) else if (choice == '\n')
{ {
wattron(uartwin, COLOR_PAIR(2)); if (highlight == 0)
mvwprintw(uartwin, 5, (win_width - 52) / 2, "[__________________________________________________]");
echo();
wmove(uartwin, 5, ((win_width - 52) / 2) + 1);
curs_set(1);
flushinp();
wgetnstr(uartwin, input, 50);
curs_set(0);
wattroff(uartwin, COLOR_PAIR(2));
noecho();
}
else if (highlight == 1)
{
if (choice == '\n')
{ {
wclear(uartwin); mvwprintw(uartwin, 5, (win_width - 52) / 2, "[__________________________________________________]");
wrefresh(uartwin); echo();
touchwin(stdscr); wmove(uartwin, 5, ((win_width - 52) / 2) + 1);
refresh(); curs_set(1);
delwin(uartwin); flushinp();
refresh(); wgetnstr(uartwin, input, 50);
strcpy(uart_adress, input); curs_set(0);
break; noecho();
}
else if (highlight == 1)
{
if (choice == '\n')
{
wclear(uartwin);
wrefresh(uartwin);
touchwin(stdscr);
refresh();
delwin(uartwin);
refresh();
strcpy(uart_adress, input);
break;
}
} }
} }
} }