esp_flasher_scene_quick.c 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. #include "../esp_flasher_app_i.h"
  2. enum QuickState {
  3. QuickStart,
  4. QuickWifidevS2,
  5. QuickWifidevS2Blackmagic,
  6. QuickWifidevS2Marauder,
  7. QuickDevproWroom,
  8. QuickDevproWroomMarauder,
  9. };
  10. void esp_flasher_scene_quick_submenu_callback(void* context, uint32_t index) {
  11. furi_assert(context);
  12. EspFlasherApp* app = context;
  13. view_dispatcher_send_custom_event(app->view_dispatcher, index);
  14. }
  15. void esp_flasher_scene_quick_on_enter(void* context) {
  16. furi_assert(context);
  17. EspFlasherApp* app = context;
  18. Submenu* submenu = app->submenu;
  19. uint32_t state = scene_manager_get_scene_state(app->scene_manager, EspFlasherSceneQuick);
  20. switch(state) {
  21. case QuickStart:
  22. case QuickWifidevS2:
  23. case QuickDevproWroom:
  24. submenu_set_header(submenu, "Choose Board:");
  25. submenu_add_item(
  26. submenu,
  27. "WiFi Dev (ESP32-S2)",
  28. QuickWifidevS2,
  29. esp_flasher_scene_quick_submenu_callback,
  30. app);
  31. submenu_add_item(
  32. submenu,
  33. "Dev Pro (ESP32-WROOM)",
  34. QuickDevproWroom,
  35. esp_flasher_scene_quick_submenu_callback,
  36. app);
  37. break;
  38. case QuickWifidevS2Blackmagic:
  39. case QuickWifidevS2Marauder:
  40. submenu_set_header(submenu, "Choose Firmware:");
  41. submenu_add_item(
  42. submenu,
  43. "Black Magic",
  44. QuickWifidevS2Blackmagic,
  45. esp_flasher_scene_quick_submenu_callback,
  46. app);
  47. submenu_add_item(
  48. submenu,
  49. "Marauder (has Evil Portal)",
  50. QuickWifidevS2Marauder,
  51. esp_flasher_scene_quick_submenu_callback,
  52. app);
  53. break;
  54. case QuickDevproWroomMarauder:
  55. submenu_set_header(submenu, "Choose Firmware:");
  56. submenu_add_item(
  57. submenu,
  58. "Marauder (has Evil Portal)",
  59. QuickDevproWroomMarauder,
  60. esp_flasher_scene_quick_submenu_callback,
  61. app);
  62. break;
  63. default:
  64. break;
  65. }
  66. submenu_set_selected_item(submenu, state);
  67. view_dispatcher_switch_to_view(app->view_dispatcher, EspFlasherAppViewSubmenu);
  68. }
  69. bool esp_flasher_scene_quick_on_event(void* context, SceneManagerEvent event) {
  70. furi_assert(context);
  71. EspFlasherApp* app = context;
  72. bool consumed = false;
  73. if(event.type == SceneManagerEventTypeCustom) {
  74. consumed = true;
  75. bool flash = true;
  76. bool enter_bootloader = false;
  77. const char* boot = NULL; // 0x1000
  78. const char* part = NULL; // 0x8000
  79. const char* app0 = NULL; // 0xE000
  80. const char* firm = NULL; // 0x10000
  81. switch(event.event) {
  82. case QuickWifidevS2:
  83. case QuickDevproWroom:
  84. scene_manager_set_scene_state(
  85. app->scene_manager, EspFlasherSceneQuick, event.event + 1);
  86. scene_manager_next_scene(app->scene_manager, EspFlasherSceneQuick);
  87. flash = false;
  88. break;
  89. case QuickWifidevS2Blackmagic:
  90. boot = APP_DATA_PATH("assets/blackmagic/bootloader.bin");
  91. part = APP_DATA_PATH("assets/blackmagic/partition-table.bin");
  92. firm = APP_DATA_PATH("assets/blackmagic/blackmagic.bin");
  93. enter_bootloader = true;
  94. break;
  95. case QuickWifidevS2Marauder:
  96. boot = APP_DATA_PATH("assets/marauder/WifidevS2/esp32_marauder.ino.bootloader.bin");
  97. part = APP_DATA_PATH("assets/marauder/esp32_marauder.ino.partitions.bin");
  98. app0 = APP_DATA_PATH("assets/marauder/boot_app0.bin");
  99. firm = APP_DATA_PATH("assets/marauder/WifidevS2/esp32_marauder_flipper_sd_serial.bin");
  100. enter_bootloader = true;
  101. break;
  102. case QuickDevproWroomMarauder:
  103. boot = APP_DATA_PATH("assets/marauder/DevproWroom/esp32_marauder.ino.bootloader.bin");
  104. part = APP_DATA_PATH("assets/marauder/esp32_marauder.ino.partitions.bin");
  105. app0 = APP_DATA_PATH("assets/marauder/boot_app0.bin");
  106. firm = APP_DATA_PATH("assets/marauder/DevproWroom/esp32_marauder_dev_board_pro.bin");
  107. break;
  108. default:
  109. flash = false;
  110. consumed = false;
  111. break;
  112. }
  113. if(flash) {
  114. scene_manager_set_scene_state(app->scene_manager, EspFlasherSceneQuick, event.event);
  115. memset(app->selected_flash_options, 0, sizeof(app->selected_flash_options));
  116. app->bin_file_path_boot[0] = '\0';
  117. app->bin_file_path_part[0] = '\0';
  118. app->bin_file_path_nvs[0] = '\0';
  119. app->bin_file_path_boot_app0[0] = '\0';
  120. app->bin_file_path_app_a[0] = '\0';
  121. app->bin_file_path_app_b[0] = '\0';
  122. app->bin_file_path_custom[0] = '\0';
  123. if(boot) {
  124. app->selected_flash_options[SelectedFlashBoot] = true;
  125. strncpy(app->bin_file_path_boot, boot, sizeof(app->bin_file_path_boot));
  126. }
  127. if(part) {
  128. app->selected_flash_options[SelectedFlashPart] = true;
  129. strncpy(app->bin_file_path_part, part, sizeof(app->bin_file_path_part));
  130. }
  131. if(app0) {
  132. app->selected_flash_options[SelectedFlashBootApp0] = true;
  133. strncpy(app->bin_file_path_boot_app0, app0, sizeof(app->bin_file_path_boot_app0));
  134. }
  135. if(firm) {
  136. app->selected_flash_options[SelectedFlashAppA] = true;
  137. strncpy(app->bin_file_path_app_a, firm, sizeof(app->bin_file_path_app_a));
  138. }
  139. app->reset = false;
  140. app->quickflash = true;
  141. app->turbospeed = true;
  142. app->boot = enter_bootloader;
  143. scene_manager_next_scene(app->scene_manager, EspFlasherSceneConsoleOutput);
  144. }
  145. } else if(event.type == SceneManagerEventTypeBack) {
  146. uint32_t state = scene_manager_get_scene_state(app->scene_manager, EspFlasherSceneQuick);
  147. if(state > QuickDevproWroom)
  148. state = QuickDevproWroom;
  149. else if(state > QuickWifidevS2)
  150. state = QuickWifidevS2;
  151. scene_manager_set_scene_state(app->scene_manager, EspFlasherSceneQuick, state);
  152. }
  153. return consumed;
  154. }
  155. void esp_flasher_scene_quick_on_exit(void* context) {
  156. furi_assert(context);
  157. EspFlasherApp* app = context;
  158. submenu_reset(app->submenu);
  159. }