فهرست منبع

chore: implement example MTP page

Alex4386 1 سال پیش
والد
کامیت
4b632c0c98
9فایلهای تغییر یافته به همراه137 افزوده شده و 6 حذف شده
  1. BIN
      icons/Connect_me.png
  2. BIN
      icons/DFU.png
  3. BIN
      icons/Pin_back_arrow.png
  4. 5 3
      src/scenes/about/main.c
  5. 8 2
      src/scenes/home/main.c
  6. 2 1
      src/scenes/import.h
  7. 1 0
      src/scenes/list.h
  8. 103 0
      src/scenes/mtp/main.c
  9. 18 0
      src/scenes/mtp/main.h

BIN
icons/Connect_me.png


BIN
icons/DFU.png


BIN
icons/Pin_back_arrow.png


+ 5 - 3
src/scenes/about/main.c

@@ -49,7 +49,9 @@ View* About_get_view(void* ptr) {
 }
 
 void About_on_enter(void* context) {
-    UNUSED(context);
+    App* app = (App*)context;
+
+    view_dispatcher_switch_to_view(app->view_dispatcher, THIS_SCENE);
 }
 
 bool About_on_event(void* context, SceneManagerEvent event) {
@@ -69,6 +71,6 @@ void About_on_exit(void* context) {
         return;
     }
 
-    if(app->view_dispatcher) view_dispatcher_switch_to_view(app->view_dispatcher, Home);
-    if(app->scene_manager) scene_manager_previous_scene(app->scene_manager);
+    //if(app->view_dispatcher) view_dispatcher_switch_to_view(app->view_dispatcher, Home);
+    //if(app->scene_manager) scene_manager_previous_scene(app->scene_manager);
 }

+ 8 - 2
src/scenes/home/main.c

@@ -65,9 +65,12 @@ void Home_on_submenu_item(void* context, uint32_t index) {
     case 1:
         FURI_LOG_I("DemoApp", "About");
         scene_manager_next_scene(app->scene_manager, About);
-        view_dispatcher_switch_to_view(app->view_dispatcher, About);
         break;
     case 2:
+        FURI_LOG_I("DemoApp", "MTP");
+        scene_manager_next_scene(app->scene_manager, MTP);
+        break;
+    case 99:
         FURI_LOG_I("DemoApp", "Exit");
         Home_on_exit(app);
         view_dispatcher_stop(app->view_dispatcher);
@@ -83,7 +86,10 @@ void Home_on_enter(void* context) {
 
     submenu_add_item(home->menu, "Hello World", 0, Home_on_submenu_item, app);
     submenu_add_item(home->menu, "About", 1, Home_on_submenu_item, app);
-    submenu_add_item(home->menu, "Exit", 2, Home_on_submenu_item, app);
+    submenu_add_item(home->menu, "MTP", 2, Home_on_submenu_item, app);
+    submenu_add_item(home->menu, "Exit", 99, Home_on_submenu_item, app);
+
+    view_dispatcher_switch_to_view(app->view_dispatcher, THIS_SCENE);
 }
 
 bool Home_on_event(void* context, SceneManagerEvent event) {

+ 2 - 1
src/scenes/import.h

@@ -5,4 +5,5 @@
  */
 
 #include "home/main.h"
-#include "about/main.h"
+#include "about/main.h"
+#include "mtp/main.h"

+ 1 - 0
src/scenes/list.h

@@ -14,3 +14,4 @@
 
 SCENE_ACTION(Home)
 SCENE_ACTION(About)
+SCENE_ACTION(MTP)

+ 103 - 0
src/scenes/mtp/main.c

@@ -0,0 +1,103 @@
+#include <gui/view.h>
+#include <gui/modules/submenu.h>
+#include "../../main.h"
+#include "main.h"
+#include <demo_app_icons.h>
+
+#define THIS_SCENE MTP
+
+AppMTP* tmp;
+
+void MTP_on_draw(Canvas* canvas, void* context);
+AppMTP* MTP_alloc() {
+    AppMTP* about = (AppMTP*)malloc(sizeof(AppMTP));
+    about->view = view_alloc();
+    view_set_context(about->view, about);
+    view_set_draw_callback(about->view, MTP_on_draw);
+
+    about->usb_connected = true;
+    tmp = about;
+
+    return about;
+}
+
+void MTP_on_draw(Canvas* canvas, void* context) {
+    AppMTP* about = (AppMTP*)context;
+
+    canvas_clear(canvas);
+    canvas_set_bitmap_mode(canvas, true);
+
+    bool usb_connected = false;
+    if(about == NULL) {
+        // facepalm
+        if(tmp != NULL) {
+            usb_connected = tmp->usb_connected;
+        }
+    } else {
+        usb_connected = about->usb_connected;
+    }
+
+    if(usb_connected) {
+        canvas_set_bitmap_mode(canvas, true);
+        canvas_draw_icon(canvas, 0, 14, &I_DFU);
+        canvas_draw_icon(canvas, 2, 2, &I_Pin_back_arrow);
+        canvas_set_font(canvas, FontPrimary);
+        canvas_draw_str(canvas, 43, 10, "MTP Connection");
+        canvas_set_font(canvas, FontSecondary);
+        canvas_draw_str(canvas, 15, 10, "Back");
+        canvas_draw_str(canvas, 3, 22, "Disconnect or");
+        canvas_draw_icon(canvas, 28, 23, &I_Pin_back_arrow);
+        canvas_draw_str(canvas, 3, 31, "Press");
+    } else {
+        canvas_draw_icon(canvas, 1, 31, &I_Connect_me);
+        canvas_set_font(canvas, FontPrimary);
+        canvas_draw_str(canvas, 10, 25, "Plug me into computer!");
+        canvas_draw_icon(canvas, 2, 2, &I_Pin_back_arrow);
+        canvas_set_font(canvas, FontSecondary);
+        canvas_draw_str(canvas, 15, 10, "Back");
+        canvas_draw_str(canvas, 61, 41, "Waiting for USB");
+        canvas_draw_str(canvas, 72, 50, "Connection...");
+    }
+}
+
+void MTP_free(void* ptr) {
+    AppMTP* home = (AppMTP*)ptr;
+    FURI_LOG_I("DemoApp", "Triggering Free for view");
+
+    view_free(home->view);
+    home->view = NULL;
+
+    free(home);
+}
+
+View* MTP_get_view(void* ptr) {
+    AppMTP* home = (AppMTP*)ptr;
+    return home->view;
+}
+
+void MTP_on_enter(void* context) {
+    App* app = (App*)context;
+
+    view_dispatcher_switch_to_view(app->view_dispatcher, THIS_SCENE);
+}
+
+bool MTP_on_event(void* context, SceneManagerEvent event) {
+    UNUSED(context);
+    UNUSED(event);
+
+    if(event.type == SceneManagerEventTypeBack) {
+        return false;
+    }
+
+    return true;
+}
+
+void MTP_on_exit(void* context) {
+    App* app = (App*)context;
+    if(app == NULL) {
+        return;
+    }
+
+    // if(app->view_dispatcher) view_dispatcher_switch_to_view(app->view_dispatcher, Home);
+    // if(app->scene_manager) scene_manager_previous_scene(app->scene_manager);
+}

+ 18 - 0
src/scenes/mtp/main.h

@@ -0,0 +1,18 @@
+#pragma once
+#include <gui/view.h>
+#include <gui/modules/submenu.h>
+#include <gui/modules/popup.h>
+
+typedef struct AppMTP {
+    Submenu* menu;
+    View* view;
+
+    bool usb_connected;
+} AppMTP;
+
+AppMTP* MTP_alloc();
+void MTP_free(void* ptr);
+View* MTP_get_view(void* ptr);
+void MTP_on_enter(void* context);
+bool MTP_on_event(void* context, SceneManagerEvent event);
+void MTP_on_exit(void* context);