From f44bd795d5edc2d98eca1aef77309717d7bf571b Mon Sep 17 00:00:00 2001 From: "DLABAL, Eduard" Date: Sun, 6 Apr 2025 17:56:32 +0200 Subject: [PATCH] Enhance UART handling and improve TUI input management --- .gitignore | 2 ++ output/main | Bin 22480 -> 22920 bytes src/main.c | 15 +++++++-- src/tui.c | 90 +++++++++++++++++++++++++++++----------------------- 4 files changed, 66 insertions(+), 41 deletions(-) diff --git a/.gitignore b/.gitignore index cd531cf..38f188a 100644 --- a/.gitignore +++ b/.gitignore @@ -51,4 +51,6 @@ modules.order Module.symvers Mkfile.old dkms.conf +output/ +.vscode/ diff --git a/output/main b/output/main index 8a6e9646fd9008ff4eb10548a26d1563d9c67426..0d57115e99cca4542984e868bc3bed421b8e8b1e 100755 GIT binary patch delta 6400 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 CJt~O+ delta 5612 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 diff --git a/src/main.c b/src/main.c index 116373f..93995ed 100644 --- a/src/main.c +++ b/src/main.c @@ -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); // diff --git a/src/tui.c b/src/tui.c index ee257ba..cd5bf2b 100644 --- a/src/tui.c +++ b/src/tui.c @@ -29,64 +29,76 @@ 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, ""); + if (highlight == 0) wattroff(uartwin, COLOR_PAIR(2)); - } - mvwprintw(uartwin, 7, button_x, ""); + 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 ", ""); + 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; } - if (highlight == 0) + else if (choice == '\n') { - wattron(uartwin, COLOR_PAIR(2)); - 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') + if (highlight == 0) { - wclear(uartwin); - wrefresh(uartwin); - touchwin(stdscr); - refresh(); - delwin(uartwin); - refresh(); - strcpy(uart_adress, input); - break; + 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); + noecho(); + } + else if (highlight == 1) + { + if (choice == '\n') + { + wclear(uartwin); + wrefresh(uartwin); + touchwin(stdscr); + refresh(); + delwin(uartwin); + refresh(); + strcpy(uart_adress, input); + break; + } } } }