main.c 3.3 KB

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