diff --git a/esp32_marauder/MenuFunctions.cpp b/esp32_marauder/MenuFunctions.cpp index 76a8b8b..0972798 100644 --- a/esp32_marauder/MenuFunctions.cpp +++ b/esp32_marauder/MenuFunctions.cpp @@ -108,6 +108,45 @@ void MenuFunctions::deinitLVGL() { //lv_deinit(); } +void MenuFunctions::writeBadUSB(){ + // Create a keyboard and apply the styles + kb = lv_keyboard_create(lv_scr_act(), NULL); + lv_obj_set_size(kb, LV_HOR_RES, LV_VER_RES / 2); + lv_obj_set_event_cb(kb, write_bad_usb_keyboard_event_cb); + + // Create one text area + // Store all SSIDs + ta1 = lv_textarea_create(lv_scr_act(), NULL); + lv_textarea_set_cursor_hidden(ta1, false); + lv_textarea_set_one_line(ta1, false); + lv_obj_set_width(ta1, LV_HOR_RES); + lv_obj_set_height(ta1, (LV_VER_RES / 2) - 35); + lv_obj_set_pos(ta1, 5, 20); + lv_textarea_set_cursor_hidden(ta1, true); + lv_obj_align(ta1, NULL, LV_ALIGN_IN_TOP_MID, NULL, NULL); + lv_textarea_set_text(ta1, ""); + lv_textarea_set_placeholder_text(ta1, "Ducky script"); + + // Create second text area + // Add SSIDs + //ta2 = lv_textarea_create(lv_scr_act(), ta1); + //lv_textarea_set_cursor_hidden(ta2, false); + //lv_textarea_set_one_line(ta2, true); + //lv_obj_align(ta2, NULL, LV_ALIGN_IN_TOP_MID, NULL, (LV_VER_RES / 2) - 35); + //lv_textarea_set_text(ta2, ""); + //lv_textarea_set_placeholder_text(ta2, "Add SSIDs"); + + // After generating text areas, add text to first text box + //for (int i = 0; i < ssids->size(); i++) + // display_string.concat((String)ssids->get(i).essid + "\n"); + + //lv_textarea_set_text(ta1, display_string.c_str()); + + // Focus it on one of the text areas to start + lv_keyboard_set_textarea(kb, ta1); + lv_keyboard_set_cursor_manage(kb, true); +} + void MenuFunctions::addSSIDGFX(){ extern LinkedList* ssids; @@ -188,6 +227,31 @@ void MenuFunctions::joinWiFiGFX(){ } +void write_bad_usb_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event) { + extern Display display_obj; + extern MenuFunctions menu_function_obj; + extern A32u4Interface a32u4_obj; + extern WiFiScan wifi_scan_obj; + + lv_keyboard_def_event_cb(kb, event); + if(event == LV_EVENT_APPLY){ + String display_string = ""; + printf("LV_EVENT_APPLY\n"); + + String ta1_text = lv_textarea_get_text(ta1); + + Serial.println(ta1_text); + + a32u4_obj.runScript(ta1_text); + } + else if(event == LV_EVENT_CANCEL) { + printf("LV_EVENT_CANCEL\n"); + menu_function_obj.deinitLVGL(); + wifi_scan_obj.StartScan(WIFI_SCAN_OFF); + display_obj.exit_draw = true; // set everything back to normal + } +} + // Keyboard callback dedicated to joining wifi void add_ssid_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event){ extern Display display_obj; @@ -944,6 +1008,12 @@ void MenuFunctions::RunSetup() addNodes(&badusbMenu, "Test BadUSB", TFT_PURPLE, NULL, TEST_BAD_USB_ICO, [this]() { a32u4_obj.test(); }); + addNodes(&badusbMenu, "Run Ducky Script", TFT_RED, NULL, BAD_USB_ICO, [this](){ + display_obj.clearScreen(); + wifi_scan_obj.currentScanMode = LV_ADD_SSID; + wifi_scan_obj.StartScan(LV_ADD_SSID, TFT_RED); + writeBadUSB(); + }); // General apps menu generalMenu.parentMenu = &mainMenu; diff --git a/esp32_marauder/MenuFunctions.h b/esp32_marauder/MenuFunctions.h index 79c1cf4..f015212 100644 --- a/esp32_marauder/MenuFunctions.h +++ b/esp32_marauder/MenuFunctions.h @@ -87,6 +87,7 @@ PROGMEM static lv_color_t buf[LV_HOR_RES_MAX * 10]; PROGMEM static void ta_event_cb(lv_obj_t * ta, lv_event_t event); PROGMEM static void join_wifi_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event); PROGMEM static void add_ssid_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event); +PROGMEM static void write_bad_usb_keyboard_event_cb(lv_obj_t * keyboard, lv_event_t event); // lvgl stuff PROGMEM static lv_obj_t *kb; @@ -181,6 +182,7 @@ class MenuFunctions void deinitLVGL(); void joinWiFiGFX(); void addSSIDGFX(); + void writeBadUSB(); void buildButtons(Menu* menu); void changeMenu(Menu* menu); diff --git a/esp32_marauder/a32u4_interface.cpp b/esp32_marauder/a32u4_interface.cpp index d9eebf5..759707f 100644 --- a/esp32_marauder/a32u4_interface.cpp +++ b/esp32_marauder/a32u4_interface.cpp @@ -10,6 +10,10 @@ void A32u4Interface::begin() { this->initTime = millis(); } +void A32u4Interface::runScript(String script) { + MySerial_two.println(script); +} + void A32u4Interface::test() { MySerial_two.println("STRING Hello, World!"); } diff --git a/esp32_marauder/a32u4_interface.h b/esp32_marauder/a32u4_interface.h index bb01c97..caeb802 100644 --- a/esp32_marauder/a32u4_interface.h +++ b/esp32_marauder/a32u4_interface.h @@ -18,6 +18,7 @@ class A32u4Interface { void main(uint32_t current_time); void test(); + void runScript(String script); }; #endif