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
Mkfile.old
dkms.conf
output/
.vscode/
BIN
View File
Binary file not shown.
+12 -1
View File
@@ -12,7 +12,15 @@
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;
}
@@ -27,12 +35,15 @@ int main(int argc, char const *argv[])
getmaxyx(stdscr, y_max, x_max);
if (x_max <= MIN_X_TERMINAL_SIZE || y_max <= MIN_Y_TERMINAL_SIZE)
{
endwin();
clear();
puts("Terminal is too small. Exiting...\n");
return EXIT_FAILURE;
}
noecho();
noraw();
cbreak();
start_color();
curs_set(0);
@@ -42,7 +53,7 @@ int main(int argc, char const *argv[])
uartDialog(uart_address, x_max, y_max);
pthread_create(&uart_thread, NULL, uartListener, NULL);
pthread_create(&uart_thread, NULL, uartListener, uart_address);
//
+30 -18
View File
@@ -29,42 +29,54 @@ void uartDialog(char *uart_adress, int terminal_x, int terminal_y)
wattroff(uartwin, COLOR_PAIR(1));
wrefresh(uartwin);
// menu...
int choice;
char choice;
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)
{
int text_x = (win_width - 52) / 2;
// Input array
if (highlight == 0)
{
wattron(uartwin, COLOR_PAIR(2));
mvwprintw(uartwin, 5, text_x, "[__________________________________________________]");
wattroff(uartwin, COLOR_PAIR(2));
}
else
wattron(uartwin, COLOR_PAIR(1));
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 == 1)
{
wattron(uartwin, COLOR_PAIR(2));
mvwprintw(uartwin, 7, button_x, "<Enter>");
if (highlight == 0)
wattroff(uartwin, COLOR_PAIR(2));
}
mvwprintw(uartwin, 7, button_x, "<Enter>");
else
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);
flushinp();
choice = wgetch(uartwin);
if (choice == '\t')
{
highlight=!highlight;
highlight = !highlight;
}
else if (choice == '\n')
{
if (highlight == 0)
{
wattron(uartwin, COLOR_PAIR(2));
mvwprintw(uartwin, 5, (win_width - 52) / 2, "[__________________________________________________]");
echo();
wmove(uartwin, 5, ((win_width - 52) / 2) + 1);
@@ -72,7 +84,6 @@ void uartDialog(char *uart_adress, int terminal_x, int terminal_y)
flushinp();
wgetnstr(uartwin, input, 50);
curs_set(0);
wattroff(uartwin, COLOR_PAIR(2));
noecho();
}
else if (highlight == 1)
@@ -90,4 +101,5 @@ void uartDialog(char *uart_adress, int terminal_x, int terminal_y)
}
}
}
}
}