Przeglądaj źródła

uart terminal configurable crlf or newline mode

MX 1 rok temu
rodzic
commit
83afe96065

+ 1 - 1
application.fam

@@ -10,6 +10,6 @@ App(
     fap_category="GPIO",
     fap_icon_assets="assets",
     fap_author="@cool4uma & @rnadyrshin & (some fixes by @xMasterX)",
-    fap_version="1.5",
+    fap_version="1.6",
     fap_description="Control various devices via the Flipper Zero UART interface.",
 )

+ 3 - 2
scenes/uart_terminal_scene.h

@@ -29,7 +29,8 @@ extern const SceneManagerHandlers uart_terminal_scene_handlers;
 #undef ADD_SCENE
 
 #define UART_PINS_ITEM_IDX (0)
-#define BAUDRATE_ITEM_IDX (1)
-#define HEX_MODE_ITEM_IDX (2)
+#define BAUDRATE_ITEM_IDX  (1)
+#define HEX_MODE_ITEM_IDX  (2)
+#define CR_MODE_ITEM_IDX   (3)
 
 #define DEFAULT_BAUDRATE_OPT_IDX (18)

+ 1 - 1
scenes/uart_terminal_scene_help.c

@@ -14,7 +14,7 @@ void uart_terminal_scene_help_on_enter(void* context) {
     temp_str = furi_string_alloc();
     furi_string_printf(
         temp_str,
-        "\nUART terminal for Flipper\n\nI'm in github: cool4uma\n\nThis app is a modified\nWiFi Marauder companion,\nThanks 0xchocolate(github)\nfor great code and app.\n\n");
+        "\nUART terminal for Flipper\n\nAT Command is using CR+LF\nSend command is using CR\nmode from Setup\n\nI'm in github: cool4uma\n\nThis app is a modified\nWiFi Marauder companion,\nThanks 0xchocolate(github)\nfor great code and app.\n\n");
     furi_string_cat_printf(temp_str, "Press BACK to return\n");
 
     widget_add_text_box_element(

+ 12 - 1
scenes/uart_terminal_scene_setup.c

@@ -16,6 +16,7 @@ static const UART_Terminal_Setup_Item items[SETUP_MENU_ITEMS] = {
                       "38400",  "56000",  "57600",  "76800", "115200", "128000", "230400",
                       "250000", "256000", "460800", "921600"}},
     {"HEX mode", 2, {"OFF", "ON"}},
+    {"CR mode", 2, {"Newline", "CR+LF"}},
 };
 
 static void uart_terminal_scene_setup_var_list_enter_callback(void* context, uint32_t index) {
@@ -64,6 +65,11 @@ static void uart_terminal_scene_setup_var_list_change_callback(VariableItem* ite
             }
         }
     }
+
+    // CR mode
+    if(app->setup_selected_menu_index == CR_MODE_ITEM_IDX) {
+        app->TERMINAL_MODE = item_index;
+    }
 }
 
 void uart_terminal_scene_setup_on_enter(void* context) {
@@ -81,7 +87,12 @@ void uart_terminal_scene_setup_on_enter(void* context) {
             items[i].num_options_menu,
             uart_terminal_scene_setup_var_list_change_callback,
             app);
-        variable_item_set_current_value_index(item, app->setup_selected_option_index[i]);
+        if(i == CR_MODE_ITEM_IDX) {
+            app->setup_selected_option_index[CR_MODE_ITEM_IDX] = app->TERMINAL_MODE;
+            variable_item_set_current_value_index(item, app->setup_selected_option_index[i]);
+        } else {
+            variable_item_set_current_value_index(item, app->setup_selected_option_index[i]);
+        }
         variable_item_set_current_value_text(
             item, items[i].options_menu[app->setup_selected_option_index[i]]);
     }

+ 13 - 1
scenes/uart_terminal_scene_start.c

@@ -11,7 +11,12 @@ typedef enum {
     OPEN_HELP
 } ActionType;
 // Command availability in different modes
-typedef enum { OFF = 0, TEXT_MODE = 1, HEX_MODE = 2, BOTH_MODES = 3 } ModeMask;
+typedef enum {
+    OFF = 0,
+    TEXT_MODE = 1,
+    HEX_MODE = 2,
+    BOTH_MODES = 3
+} ModeMask;
 
 #define MAX_OPTIONS (8)
 
@@ -107,6 +112,13 @@ static void uart_terminal_scene_start_var_list_change_callback(VariableItem* ite
 
 void uart_terminal_scene_start_on_enter(void* context) {
     UART_TerminalApp* app = context;
+
+    // Restore terminal mode
+    if(app->atmode_was_set == true) {
+        app->TERMINAL_MODE = app->old_term_mode;
+        app->atmode_was_set = false;
+    }
+
     VariableItemList* var_item_list = app->var_item_list;
 
     for(int i = 0; i < START_MENU_ITEMS; ++i) {

+ 5 - 2
scenes/uart_terminal_scene_text_input.c

@@ -26,10 +26,13 @@ void uart_terminal_scene_text_input_on_enter(void* context) {
     UART_TextInput* text_input = app->text_input;
     // Add help message to header
     if(0 == strncmp("AT", app->selected_tx_string, strlen("AT"))) {
-        app->TERMINAL_MODE = 1;
+        if(app->TERMINAL_MODE == 0) {
+            app->old_term_mode = app->TERMINAL_MODE;
+            app->TERMINAL_MODE = 1;
+            app->atmode_was_set = true;
+        }
         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(

+ 1 - 1
uart_hex_input.c

@@ -37,7 +37,7 @@ static const uint8_t keyboard_origin_x = 5;
 static const uint8_t keyboard_origin_y = 28;
 static const uint8_t keyboard_row_count = 2;
 
-#define ENTER_KEY '\r'
+#define ENTER_KEY     '\r'
 #define BACKSPACE_KEY '\b'
 
 static const UART_TextInputKey keyboard_keys_row_1[] = {

+ 5 - 1
uart_terminal_app.c

@@ -29,7 +29,7 @@ UART_TerminalApp* uart_terminal_app_alloc() {
 
     app->view_dispatcher = view_dispatcher_alloc();
     app->scene_manager = scene_manager_alloc(&uart_terminal_scene_handlers, app);
-    
+
     view_dispatcher_set_event_callback_context(app->view_dispatcher, app);
 
     view_dispatcher_set_custom_event_callback(
@@ -85,6 +85,10 @@ UART_TerminalApp* uart_terminal_app_alloc() {
 
     app->setup_selected_option_index[BAUDRATE_ITEM_IDX] = DEFAULT_BAUDRATE_OPT_IDX;
 
+    app->old_term_mode = 0;
+    app->TERMINAL_MODE = 0;
+    app->atmode_was_set = false;
+
     scene_manager_next_scene(app->scene_manager, UART_TerminalSceneStart);
 
     return app;

+ 5 - 3
uart_terminal_app_i.h

@@ -15,9 +15,9 @@
 #include "uart_hex_input.h"
 
 #define START_MENU_ITEMS (7)
-#define SETUP_MENU_ITEMS (3)
+#define SETUP_MENU_ITEMS (4)
 
-#define UART_TERMINAL_TEXT_BOX_STORE_SIZE (4096)
+#define UART_TERMINAL_TEXT_BOX_STORE_SIZE   (4096)
 #define UART_TERMINAL_TEXT_INPUT_STORE_SIZE (512)
 
 struct UART_TerminalApp {
@@ -49,7 +49,9 @@ struct UART_TerminalApp {
     uint8_t new_uart_ch;
     int BAUDRATE;
     int NEW_BAUDRATE;
-    int TERMINAL_MODE; //1=AT mode, 0=other mode
+    uint8_t TERMINAL_MODE; //1=AT mode, 0=other mode
+    uint8_t old_term_mode; //1=AT mode, 0=other mode
+    bool atmode_was_set;
 };
 
 typedef enum {

+ 2 - 2
uart_terminal_uart.c

@@ -98,6 +98,6 @@ void uart_terminal_uart_free(UART_TerminalUart* uart) {
     furi_thread_flags_set(furi_thread_get_id(uart->rx_thread), WorkerEvtStop);
     furi_thread_join(uart->rx_thread);
     furi_thread_free(uart->rx_thread);
-    
+
     free(uart);
-}
+}

+ 1 - 1
uart_text_input.c

@@ -39,7 +39,7 @@ static const uint8_t keyboard_row_count = 4;
 
 #define mode_AT "Send AT command to UART"
 
-#define ENTER_KEY '\r'
+#define ENTER_KEY     '\r'
 #define BACKSPACE_KEY '\b'
 
 static const UART_TextInputKey keyboard_keys_row_1[] = {