Преглед изворни кода

UART tx is working\! Now to handle rx and rest of menu

0xchocolate пре 3 година
родитељ
комит
1633d3cf68

+ 1 - 1
applications/wifi_marauder_companion/application.fam

@@ -1,6 +1,6 @@
 App(
 App(
     appid="wifi_marauder",
     appid="wifi_marauder",
-    name="WIFI_MARAUDER",
+    name="WiFi (Marauder)",
     apptype=FlipperAppType.APP,
     apptype=FlipperAppType.APP,
     entry_point="wifi_marauder_app",
     entry_point="wifi_marauder_app",
     cdefines=["APP_WIFI_MARAUDER"],
     cdefines=["APP_WIFI_MARAUDER"],

+ 5 - 1
applications/wifi_marauder_companion/scenes/wifi_marauder_scene_start.c

@@ -76,10 +76,14 @@ void wifi_marauder_scene_start_on_enter(void* context) {
 
 
 bool wifi_marauder_scene_start_on_event(void* context, SceneManagerEvent event) {
 bool wifi_marauder_scene_start_on_event(void* context, SceneManagerEvent event) {
     UNUSED(context);
     UNUSED(context);
-    //WifiMarauderApp* app = context;
+    WifiMarauderApp* app = context;
     bool consumed = false;
     bool consumed = false;
 
 
     if(event.type == SceneManagerEventTypeCustom) {
     if(event.type == SceneManagerEventTypeCustom) {
+        // TODO remove when done debugging
+        variable_item_list_add(app->var_item_list, "FEEDBACK", 0, NULL, NULL);
+        const char *attack_str = "attack -t rickroll\n";
+        wifi_marauder_uart_tx((uint8_t*)attack_str, strlen(attack_str));
         // TODO
         // TODO
         // if (event.event == WifiMarauderStartEventScan) {
         // if (event.event == WifiMarauderStartEventScan) {
         //     scene_manager_set_scene_state(app->scene_manager, WifiMarauderSceneStart, WifiMarauderItemScan);
         //     scene_manager_set_scene_state(app->scene_manager, WifiMarauderSceneStart, WifiMarauderItemScan);

+ 6 - 0
applications/wifi_marauder_companion/wifi_marauder_app.c

@@ -24,6 +24,8 @@ static void wifi_marauder_app_tick_event_callback(void* context) {
 WifiMarauderApp* wifi_marauder_app_alloc() {
 WifiMarauderApp* wifi_marauder_app_alloc() {
     WifiMarauderApp* app = malloc(sizeof(WifiMarauderApp));
     WifiMarauderApp* app = malloc(sizeof(WifiMarauderApp));
 
 
+    app->uart = wifi_marauder_uart_init();
+
     app->selected_wifi_channel = 1;
     app->selected_wifi_channel = 1;
 
 
     app->gui = furi_record_open("gui");
     app->gui = furi_record_open("gui");
@@ -72,6 +74,8 @@ void wifi_marauder_app_free(WifiMarauderApp* app) {
     view_dispatcher_free(app->view_dispatcher);
     view_dispatcher_free(app->view_dispatcher);
     scene_manager_free(app->scene_manager);
     scene_manager_free(app->scene_manager);
 
 
+    wifi_marauder_uart_free(app->uart);
+
     // Close records
     // Close records
     furi_record_close("gui");
     furi_record_close("gui");
 
 
@@ -82,6 +86,8 @@ int32_t wifi_marauder_app(void* p) {
     UNUSED(p);
     UNUSED(p);
     WifiMarauderApp* wifi_marauder_app = wifi_marauder_app_alloc();
     WifiMarauderApp* wifi_marauder_app = wifi_marauder_app_alloc();
 
 
+    wifi_marauder_uart_init();
+
     view_dispatcher_run(wifi_marauder_app->view_dispatcher);
     view_dispatcher_run(wifi_marauder_app->view_dispatcher);
 
 
     wifi_marauder_app_free(wifi_marauder_app);
     wifi_marauder_app_free(wifi_marauder_app);

+ 3 - 0
applications/wifi_marauder_companion/wifi_marauder_app_i.h

@@ -3,6 +3,7 @@
 #include "wifi_marauder_app.h"
 #include "wifi_marauder_app.h"
 #include "scenes/wifi_marauder_scene.h"
 #include "scenes/wifi_marauder_scene.h"
 #include "wifi_marauder_custom_event.h"
 #include "wifi_marauder_custom_event.h"
+#include "wifi_marauder_uart.h"
 
 
 #include <gui/gui.h>
 #include <gui/gui.h>
 #include <gui/view_dispatcher.h>
 #include <gui/view_dispatcher.h>
@@ -17,6 +18,8 @@ struct WifiMarauderApp {
 
 
     VariableItemList* var_item_list;
     VariableItemList* var_item_list;
 
 
+    WifiMarauderUart* uart;
+
     int selected_wifi_channel;
     int selected_wifi_channel;
 };
 };
 
 

+ 38 - 4
applications/wifi_marauder_companion/wifi_marauder_uart.c

@@ -1,12 +1,46 @@
 #include "wifi_marauder_uart.h"
 #include "wifi_marauder_uart.h"
 
 
-const FuriHalUartId UART_CH = FuriHalUartIdUSART1;
-const int BAUDRATE = 115200;
+#include <stream_buffer.h>
+
+#define UART_CH (FuriHalUartIdUSART1)
+#define BAUDRATE (115200)
+#define RX_BUF_SIZE (64)
+
+struct WifiMarauderUart {
+    StreamBufferHandle_t rx_stream;
+    uint8_t rx_buf[RX_BUF_SIZE];
+};
+
+void wifi_marauder_uart_on_irq_cb(UartIrqEvent ev, uint8_t data, void* context) {
+    WifiMarauderUart* uart = (WifiMarauderUart*)context;
+    BaseType_t xHigherPriorityTaskWoken = pdFALSE;
+
+    if(ev == UartIrqEventRXNE) {
+        xStreamBufferSendFromISR(uart->rx_stream, &data, 1, &xHigherPriorityTaskWoken);
+        //furi_thread_flags_set(furi_thread_get_id(usb_uart->thread), WorkerEvtRxDone);
+        portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
+    }
+}
+
+// TODO: need rx worker thread to receive into rx_stream / rx_buf
+// add a "Console" menu item to print output?
 
 
 void wifi_marauder_uart_tx(uint8_t *data, size_t len) {
 void wifi_marauder_uart_tx(uint8_t *data, size_t len) {
     furi_hal_uart_tx(UART_CH, data, len);
     furi_hal_uart_tx(UART_CH, data, len);
 }
 }
 
 
-void wifi_marauder_uart_init() {
-    furi_hal_uart_init(UART_CH, BAUDRATE);
+WifiMarauderUart* wifi_marauder_uart_init() {
+    furi_hal_console_disable();
+    furi_hal_uart_set_br(UART_CH, BAUDRATE);
+
+    WifiMarauderUart *uart = malloc(sizeof(WifiMarauderUart));
+    uart->rx_stream = xStreamBufferCreate(RX_BUF_SIZE, 1);
+
+    return uart;
 }
 }
+
+void wifi_marauder_uart_free(WifiMarauderUart* uart) {
+    furi_assert(uart);
+    vStreamBufferDelete(uart->rx_stream);
+    free(uart);
+}

+ 4 - 1
applications/wifi_marauder_companion/wifi_marauder_uart.h

@@ -2,5 +2,8 @@
 
 
 #include "furi_hal.h"
 #include "furi_hal.h"
 
 
+typedef struct WifiMarauderUart WifiMarauderUart;
+
 void wifi_marauder_uart_tx(uint8_t *data, size_t len);
 void wifi_marauder_uart_tx(uint8_t *data, size_t len);
-void wifi_marauder_uart_init();
+WifiMarauderUart* wifi_marauder_uart_init();
+void wifi_marauder_uart_free(WifiMarauderUart* uart);