Selaa lähdekoodia

WifiMarauder: Port and rework customizable gpio

Willy-JL 2 vuotta sitten
vanhempi
commit
9bb71e8abf

+ 8 - 4
wifi_marauder_companion/scenes/wifi_marauder_scene_console_output.c

@@ -104,9 +104,11 @@ void wifi_marauder_scene_console_output_on_enter(void* context) {
     wifi_marauder_uart_set_handle_rx_data_cb(
         app->uart,
         wifi_marauder_console_output_handle_rx_data_cb); // setup callback for general log rx thread
-    wifi_marauder_uart_set_handle_rx_data_cb(
-        app->lp_uart,
-        wifi_marauder_console_output_handle_rx_packets_cb); // setup callback for packets rx thread
+    if(app->ok_to_save_pcaps) {
+        wifi_marauder_uart_set_handle_rx_data_cb(
+            app->lp_uart,
+            wifi_marauder_console_output_handle_rx_packets_cb); // setup callback for packets rx thread
+    }
 
     // Get ready to send command
     if((app->is_command && app->selected_tx_string) || app->script) {
@@ -185,7 +187,9 @@ void wifi_marauder_scene_console_output_on_exit(void* context) {
 
     // Unregister rx callback
     wifi_marauder_uart_set_handle_rx_data_cb(app->uart, NULL);
-    wifi_marauder_uart_set_handle_rx_data_cb(app->lp_uart, NULL);
+    if(app->ok_to_save_pcaps) {
+        wifi_marauder_uart_set_handle_rx_data_cb(app->lp_uart, NULL);
+    }
 
     wifi_marauder_script_worker_free(app->script_worker);
     app->script_worker = NULL;

+ 14 - 0
wifi_marauder_companion/scenes/wifi_marauder_scene_settings_init.c

@@ -63,6 +63,13 @@ bool wifi_marauder_scene_settings_init_on_event(void* context, SceneManagerEvent
     bool consumed = false;
 
     if(event.type == SceneManagerEventTypeCustom) {
+        if(app->which_prompt == PROMPT_PCAPS) {
+            wifi_marauder_uart_free(app->uart);
+            if(app->ok_to_save_pcaps) {
+                wifi_marauder_uart_free(app->lp_uart);
+            }
+        }
+
         // get which button press: "Yes" or "No"
         if(event.event == GuiButtonTypeRight) {
             // Yes
@@ -82,6 +89,13 @@ bool wifi_marauder_scene_settings_init_on_event(void* context, SceneManagerEvent
 
         // save setting to file, load next widget or scene
         if(app->which_prompt == PROMPT_PCAPS) {
+            if(app->ok_to_save_pcaps) {
+                app->uart = wifi_marauder_usart_init(app);
+                app->lp_uart = wifi_marauder_lp_uart_init(app);
+            } else {
+                app->uart = wifi_marauder_xtreme_uart_init(app);
+            }
+
             if(storage_file_open(
                    app->save_pcap_setting_file,
                    SAVE_PCAP_SETTING_FILEPATH,

+ 9 - 3
wifi_marauder_companion/wifi_marauder_app.c

@@ -159,7 +159,9 @@ void wifi_marauder_app_free(WifiMarauderApp* app) {
     scene_manager_free(app->scene_manager);
 
     wifi_marauder_uart_free(app->uart);
-    wifi_marauder_uart_free(app->lp_uart);
+    if(app->ok_to_save_pcaps) {
+        wifi_marauder_uart_free(app->lp_uart);
+    }
 
     // Close records
     furi_record_close(RECORD_GUI);
@@ -184,8 +186,12 @@ int32_t wifi_marauder_app(void* p) {
     wifi_marauder_make_app_folder(wifi_marauder_app);
     wifi_marauder_load_settings(wifi_marauder_app);
 
-    wifi_marauder_app->uart = wifi_marauder_usart_init(wifi_marauder_app);
-    wifi_marauder_app->lp_uart = wifi_marauder_lp_uart_init(wifi_marauder_app);
+    if(wifi_marauder_app->ok_to_save_pcaps) {
+        wifi_marauder_app->uart = wifi_marauder_usart_init(wifi_marauder_app);
+        wifi_marauder_app->lp_uart = wifi_marauder_lp_uart_init(wifi_marauder_app);
+    } else {
+        wifi_marauder_app->uart = wifi_marauder_xtreme_uart_init(wifi_marauder_app);
+    }
 
     view_dispatcher_run(wifi_marauder_app->view_dispatcher);
 

+ 19 - 2
wifi_marauder_companion/wifi_marauder_uart.c

@@ -1,6 +1,11 @@
 #include "wifi_marauder_app_i.h"
 #include "wifi_marauder_uart.h"
 
+#include <xtreme.h>
+#define XTREME_UART_CH \
+    (xtreme_settings.uart_esp_channel == UARTDefault ? FuriHalUartIdUSART1 : FuriHalUartIdLPUART1)
+bool xtreme_uart = false;
+
 #define UART_CH (FuriHalUartIdUSART1)
 #define LP_UART_CH (FuriHalUartIdLPUART1)
 #define BAUDRATE (115200)
@@ -58,8 +63,13 @@ static int32_t uart_worker(void* context) {
     return 0;
 }
 
+// Will switch appropriately based on whether usart_init or xtreme_uart_init was called
 void wifi_marauder_uart_tx(uint8_t* data, size_t len) {
-    furi_hal_uart_tx(UART_CH, data, len);
+    if(xtreme_uart) {
+        furi_hal_uart_tx(XTREME_UART_CH, data, len);
+    } else {
+        furi_hal_uart_tx(UART_CH, data, len);
+    }
 }
 
 void wifi_marauder_lp_uart_tx(uint8_t* data, size_t len) {
@@ -90,7 +100,13 @@ WifiMarauderUart*
     return uart;
 }
 
+WifiMarauderUart* wifi_marauder_xtreme_uart_init(WifiMarauderApp* app) {
+    xtreme_uart = true;
+    return wifi_marauder_uart_init(app, XTREME_UART_CH, "WifiMarauderUartRxThread");
+}
+
 WifiMarauderUart* wifi_marauder_usart_init(WifiMarauderApp* app) {
+    xtreme_uart = false;
     return wifi_marauder_uart_init(app, UART_CH, "WifiMarauderUartRxThread");
 }
 
@@ -108,8 +124,9 @@ void wifi_marauder_uart_free(WifiMarauderUart* uart) {
     furi_hal_uart_set_irq_cb(uart->channel, NULL, NULL);
     if(uart->channel == FuriHalUartIdLPUART1) {
         furi_hal_uart_deinit(uart->channel);
+    } else {
+        furi_hal_console_enable();
     }
-    furi_hal_console_enable();
 
     free(uart);
 }

+ 1 - 0
wifi_marauder_companion/wifi_marauder_uart.h

@@ -11,6 +11,7 @@ void wifi_marauder_uart_set_handle_rx_data_cb(
     void (*handle_rx_data_cb)(uint8_t* buf, size_t len, void* context));
 void wifi_marauder_uart_tx(uint8_t* data, size_t len);
 void wifi_marauder_lp_uart_tx(uint8_t* data, size_t len);
+WifiMarauderUart* wifi_marauder_xtreme_uart_init(WifiMarauderApp* app);
 WifiMarauderUart* wifi_marauder_usart_init(WifiMarauderApp* app);
 WifiMarauderUart* wifi_marauder_lp_uart_init(WifiMarauderApp* app);
 void wifi_marauder_uart_free(WifiMarauderUart* uart);