main.c 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #include <gui/view.h>
  2. #include <gui/modules/submenu.h>
  3. #include "../../main.h"
  4. #include "main.h"
  5. #include <demo_app_icons.h>
  6. #include "usb.h"
  7. #include "usb_desc.h"
  8. #define THIS_SCENE MTP
  9. AppMTP* tmp;
  10. void MTP_on_draw(Canvas* canvas, void* context);
  11. AppMTP* MTP_alloc() {
  12. AppMTP* about = (AppMTP*)malloc(sizeof(AppMTP));
  13. about->view = view_alloc();
  14. view_set_context(about->view, about);
  15. view_set_draw_callback(about->view, MTP_on_draw);
  16. about->usb_connected = false;
  17. tmp = about;
  18. return about;
  19. }
  20. void MTP_on_draw(Canvas* canvas, void* context) {
  21. AppMTP* about = (AppMTP*)context;
  22. canvas_clear(canvas);
  23. canvas_set_bitmap_mode(canvas, true);
  24. bool usb_connected = false;
  25. if(about == NULL) {
  26. // facepalm
  27. if(tmp != NULL) {
  28. usb_connected = tmp->usb_connected;
  29. }
  30. } else {
  31. usb_connected = about->usb_connected;
  32. }
  33. if(usb_connected) {
  34. canvas_set_bitmap_mode(canvas, true);
  35. canvas_draw_icon(canvas, 0, 14, &I_DFU);
  36. canvas_draw_icon(canvas, 2, 2, &I_Pin_back_arrow);
  37. canvas_set_font(canvas, FontPrimary);
  38. canvas_draw_str(canvas, 43, 10, "MTP Connection");
  39. canvas_set_font(canvas, FontSecondary);
  40. canvas_draw_str(canvas, 15, 10, "Back");
  41. canvas_draw_str(canvas, 3, 22, "Disconnect or");
  42. canvas_draw_icon(canvas, 28, 23, &I_Pin_back_arrow);
  43. canvas_draw_str(canvas, 3, 31, "Press");
  44. } else {
  45. canvas_draw_icon(canvas, 1, 31, &I_Connect_me);
  46. canvas_set_font(canvas, FontPrimary);
  47. canvas_draw_str(canvas, 10, 25, "Plug me into computer!");
  48. canvas_draw_icon(canvas, 2, 2, &I_Pin_back_arrow);
  49. canvas_set_font(canvas, FontSecondary);
  50. canvas_draw_str(canvas, 15, 10, "Back");
  51. canvas_draw_str(canvas, 61, 41, "Waiting for USB");
  52. canvas_draw_str(canvas, 72, 50, "Connection...");
  53. }
  54. }
  55. void MTP_free(void* ptr) {
  56. AppMTP* home = (AppMTP*)ptr;
  57. FURI_LOG_I("DemoApp", "Triggering Free for view");
  58. view_free(home->view);
  59. home->view = NULL;
  60. free(home);
  61. }
  62. View* MTP_get_view(void* ptr) {
  63. AppMTP* home = (AppMTP*)ptr;
  64. return home->view;
  65. }
  66. void MTP_on_enter(void* context) {
  67. App* app = (App*)context;
  68. view_dispatcher_switch_to_view(app->view_dispatcher, THIS_SCENE);
  69. furi_assert(app->allocated_scenes != NULL, "App allocated scenes is NULL");
  70. AppMTP* mtp = app->allocated_scenes[THIS_SCENE];
  71. if(mtp != NULL) {
  72. mtp->old_usb = furi_hal_usb_get_config();
  73. furi_hal_usb_set_config(&usb_mtp_interface, mtp);
  74. }
  75. }
  76. bool MTP_on_event(void* context, SceneManagerEvent event) {
  77. UNUSED(context);
  78. UNUSED(event);
  79. if(event.type == SceneManagerEventTypeBack) {
  80. return false;
  81. }
  82. return true;
  83. }
  84. void MTP_on_exit(void* context) {
  85. App* app = (App*)context;
  86. if(app == NULL) {
  87. return;
  88. }
  89. // revert to old usb mode
  90. furi_hal_usb_set_config(tmp->old_usb, NULL);
  91. // if(app->view_dispatcher) view_dispatcher_switch_to_view(app->view_dispatcher, Home);
  92. // if(app->scene_manager) scene_manager_previous_scene(app->scene_manager);
  93. }