Update UART Terminal

https://github.com/cool4uma/UART_Terminal/tree/main
This commit is contained in:
MX
2023-04-04 22:02:58 +03:00
parent 61ec8818db
commit ef9dd5975b
6 changed files with 89 additions and 20 deletions
+7 -2
View File
@@ -1,5 +1,9 @@
# UART Terminal for Flipper Zero
# UART Terminal for Flipper Zero
[Flipper Zero](https://flipperzero.one/) app to control various devices via UART interface.
## Download fap
| **FW Official** | **FW Unleashed** |
| - | - |
| [![FAP Factory](https://flipc.org/api/v1/cool4uma/UART_Terminal/badge)](https://flipc.org/cool4uma/UART_Terminal) | [![FAP Factory](https://flipc.org/api/v1/cool4uma/UART_Terminal/badge?firmware=unleashed)](https://flipc.org/cool4uma/UART_Terminal?firmware=unleashed) |
## Capabilities
- Read log and command output by uart
@@ -29,6 +33,7 @@ Copy the contents of the repository to the applications_user/uart_terminal folde
Or use the tool [uFBT](https://github.com/flipperdevices/flipperzero-ufbt) for building applications for Flipper Zero.
## How it works
@@ -42,4 +47,4 @@ Or use the tool [uFBT](https://github.com/flipperdevices/flipperzero-ufbt) for b
## INFO:
~70% of the source code is taken from the [Wifi Marauder](https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion) project. Many thanks to the developers of the Wifi Marauder project.
~60% of the source code is taken from the [Wifi Marauder](https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion) project. Many thanks to the developers of the Wifi Marauder project.
@@ -111,11 +111,21 @@ void uart_terminal_scene_console_output_on_enter(void* context) {
uart_terminal_uart_set_handle_rx_data_cb(
app->uart, uart_terminal_console_output_handle_rx_data_cb); // setup callback for rx thread
// Send command with newline '\n'
// Send command with CR+LF or newline '\n'
if(app->is_command && app->selected_tx_string) {
uart_terminal_uart_tx(
(uint8_t*)(app->selected_tx_string), strlen(app->selected_tx_string));
uart_terminal_uart_tx((uint8_t*)("\n"), 1);
if(app->TERMINAL_MODE == 1) {
// char buffer[240];
// snprintf(buffer, 240, "%s\r\n", (app->selected_tx_string));
// uart_terminal_uart_tx((unsigned char *)buffer, strlen(buffer));
uart_terminal_uart_tx(
(uint8_t*)(app->selected_tx_string), strlen(app->selected_tx_string));
uart_terminal_uart_tx((uint8_t*)("\r"), 1);
uart_terminal_uart_tx((uint8_t*)("\n"), 1);
} else {
uart_terminal_uart_tx(
(uint8_t*)(app->selected_tx_string), strlen(app->selected_tx_string));
uart_terminal_uart_tx((uint8_t*)("\n"), 1);
}
}
}
@@ -144,4 +154,4 @@ void uart_terminal_scene_console_output_on_exit(void* context) {
//if(app->is_command) {
// uart_terminal_uart_tx((uint8_t*)("exit\n"), strlen("exit\n"));
//}
}
}
@@ -31,6 +31,7 @@ const UART_TerminalItem items[NUM_MENU_ITEMS] = {
FOCUS_CONSOLE_TOGGLE,
NO_TIP},
{"Send command", {""}, 1, {""}, INPUT_ARGS, FOCUS_CONSOLE_END, NO_TIP},
{"Send AT command", {""}, 1, {"AT"}, INPUT_ARGS, FOCUS_CONSOLE_END, NO_TIP},
{"Fast cmd",
{"help", "uptime", "date", "df -h", "ps", "dmesg", "reboot", "poweroff"},
8,
@@ -25,7 +25,13 @@ void uart_terminal_scene_text_input_on_enter(void* context) {
// Setup view
UART_TextInput* text_input = app->text_input;
// Add help message to header
uart_text_input_set_header_text(text_input, "Send command to UART");
if(0 == strncmp("AT", app->selected_tx_string, strlen("AT"))) {
app->TERMINAL_MODE = 1;
uart_text_input_set_header_text(text_input, "Send AT command to UART");
} else {
app->TERMINAL_MODE = 0;
uart_text_input_set_header_text(text_input, "Send command to UART");
}
uart_text_input_set_result_callback(
text_input,
uart_terminal_scene_text_input_callback,
+2 -1
View File
@@ -12,7 +12,7 @@
#include <gui/modules/variable_item_list.h>
#include "uart_text_input.h"
#define NUM_MENU_ITEMS (4)
#define NUM_MENU_ITEMS (5)
#define UART_TERMINAL_TEXT_BOX_STORE_SIZE (4096)
#define UART_TERMINAL_TEXT_INPUT_STORE_SIZE (512)
@@ -40,6 +40,7 @@ struct UART_TerminalApp {
bool focus_console_start;
bool show_stopscan_tip;
int BAUDRATE;
int TERMINAL_MODE; //1=AT mode, 0=other mode
};
typedef enum {
+57 -11
View File
@@ -1,6 +1,7 @@
#include "uart_text_input.h"
#include <gui/elements.h>
#include "uart_terminal_icons.h"
#include "uart_terminal_app_i.h"
#include <furi.h>
struct UART_TextInput {
@@ -36,6 +37,8 @@ static const uint8_t keyboard_origin_x = 1;
static const uint8_t keyboard_origin_y = 29;
static const uint8_t keyboard_row_count = 4;
#define mode_AT "Send AT command to UART"
#define ENTER_KEY '\r'
#define BACKSPACE_KEY '\b'
@@ -163,6 +166,47 @@ static bool char_is_lowercase(char letter) {
return (letter >= 0x61 && letter <= 0x7A);
}
static bool char_is_uppercase(char letter) {
return (letter >= 0x41 && letter <= 0x5A);
}
static char char_to_lowercase(const char letter) {
switch(letter) {
case ' ':
return 0x5f;
break;
case ')':
return 0x28;
break;
case '}':
return 0x7b;
break;
case ']':
return 0x5b;
break;
case '\\':
return 0x2f;
break;
case ':':
return 0x3b;
break;
case ',':
return 0x2e;
break;
case '?':
return 0x21;
break;
case '>':
return 0x3c;
break;
}
if(char_is_uppercase(letter)) {
return (letter + 0x20);
} else {
return letter;
}
}
static char char_to_uppercase(const char letter) {
switch(letter) {
case '_':
@@ -193,7 +237,7 @@ static char char_to_uppercase(const char letter) {
return 0x3e;
break;
}
if(isalpha(letter)) {
if(char_is_lowercase(letter)) {
return (letter - 0x20);
} else {
return letter;
@@ -209,7 +253,7 @@ static void uart_text_input_backspace_cb(UART_TextInputModel* model) {
static void uart_text_input_view_draw_callback(Canvas* canvas, void* _model) {
UART_TextInputModel* model = _model;
uint8_t text_length = model->text_buffer ? strlen(model->text_buffer) : 0;
//uint8_t text_length = model->text_buffer ? strlen(model->text_buffer) : 0;
uint8_t needed_string_width = canvas_width(canvas) - 8;
uint8_t start_pos = 4;
@@ -291,15 +335,12 @@ static void uart_text_input_view_draw_callback(Canvas* canvas, void* _model) {
} else {
canvas_set_color(canvas, ColorBlack);
}
if(model->clear_default_text ||
(text_length == 0 && char_is_lowercase(keys[column].text))) {
if(0 == strcmp(model->header, mode_AT)) {
canvas_draw_glyph(
canvas,
keyboard_origin_x + keys[column].x,
keyboard_origin_y + keys[column].y,
//char_to_uppercase(keys[column].text));
keys[column].text);
char_to_uppercase(keys[column].text));
} else {
canvas_draw_glyph(
canvas,
@@ -372,10 +413,18 @@ static void uart_text_input_handle_ok(
char selected = get_selected_char(model);
uint8_t text_length = strlen(model->text_buffer);
if(shift) {
if(0 == strcmp(model->header, mode_AT)) {
selected = char_to_uppercase(selected);
}
if(shift) {
if(0 == strcmp(model->header, mode_AT)) {
selected = char_to_lowercase(selected);
} else {
selected = char_to_uppercase(selected);
}
}
if(selected == ENTER_KEY) {
if(model->validator_callback &&
(!model->validator_callback(
@@ -392,9 +441,6 @@ static void uart_text_input_handle_ok(
text_length = 0;
}
if(text_length < (model->text_buffer_size - 1)) {
if(text_length == 0 && char_is_lowercase(selected)) {
//selected = char_to_uppercase(selected);
}
model->text_buffer[text_length] = selected;
model->text_buffer[text_length + 1] = 0;
}