mass_storage_scene_start.c 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include "../mass_storage_app_i.h"
  2. static const struct {
  3. char* name;
  4. uint32_t value;
  5. } image_size[] = {
  6. {"1.44M", 1440 * 1024},
  7. {"2M", 2 * 1024 * 1024},
  8. {"4M", 4 * 1024 * 1024},
  9. {"8M", 8 * 1024 * 1024},
  10. {"16M", 16 * 1024 * 1024},
  11. {"32M", 32 * 1024 * 1024},
  12. {"64M", 64 * 1024 * 1024},
  13. {"128M", 128 * 1024 * 1024},
  14. {"256M", 256 * 1024 * 1024},
  15. {"512M", 512 * 1024 * 1024},
  16. {"700M", 700 * 1024 * 1024},
  17. {"1G", 1024 * 1024 * 1024},
  18. {"2G", 2u * 1024 * 1024 * 1024},
  19. };
  20. static void mass_storage_item_select(void* context, uint32_t index) {
  21. MassStorageApp* app = context;
  22. if(index == 0) {
  23. view_dispatcher_send_custom_event(app->view_dispatcher, MassStorageCustomEventFileSelect);
  24. } else {
  25. view_dispatcher_send_custom_event(app->view_dispatcher, MassStorageCustomEventNewImage);
  26. }
  27. }
  28. static void mass_storage_image_size(VariableItem* item) {
  29. MassStorageApp* app = variable_item_get_context(item);
  30. uint8_t index = variable_item_get_current_value_index(item);
  31. variable_item_set_current_value_text(item, image_size[index].name);
  32. app->new_file_size = image_size[index].value;
  33. }
  34. void mass_storage_scene_start_on_enter(void* context) {
  35. MassStorageApp* app = context;
  36. VariableItem* item =
  37. variable_item_list_add(app->variable_item_list, "Select disk image", 0, NULL, NULL);
  38. item = variable_item_list_add(
  39. app->variable_item_list, "New image", COUNT_OF(image_size), mass_storage_image_size, app);
  40. variable_item_list_set_enter_callback(app->variable_item_list, mass_storage_item_select, app);
  41. variable_item_set_current_value_index(item, 2);
  42. variable_item_set_current_value_text(item, image_size[2].name);
  43. app->new_file_size = image_size[2].value;
  44. view_dispatcher_switch_to_view(app->view_dispatcher, MassStorageAppViewStart);
  45. }
  46. bool mass_storage_scene_start_on_event(void* context, SceneManagerEvent event) {
  47. UNUSED(context);
  48. UNUSED(event);
  49. MassStorageApp* app = context;
  50. if(event.type == SceneManagerEventTypeCustom) {
  51. if(event.event == MassStorageCustomEventFileSelect) {
  52. scene_manager_next_scene(app->scene_manager, MassStorageSceneFileSelect);
  53. } else if(event.event == MassStorageCustomEventNewImage) {
  54. scene_manager_next_scene(app->scene_manager, MassStorageSceneFileName);
  55. }
  56. }
  57. return false;
  58. }
  59. void mass_storage_scene_start_on_exit(void* context) {
  60. UNUSED(context);
  61. MassStorageApp* app = context;
  62. variable_item_list_reset(app->variable_item_list);
  63. }