pokemon_app.c 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. #include <furi_hal_light.h>
  2. #include <pokemon_icons.h>
  3. #include <expansion/expansion.h>
  4. #include <src/include/pokemon_app.h>
  5. #include <src/include/pokemon_data.h>
  6. #include <src/views/trade.h>
  7. #include <src/include/pokemon_char_encode.h>
  8. #include <src/scenes/include/pokemon_scene.h>
  9. #include <gblink/include/gblink_pinconf.h>
  10. #include <gblink.h>
  11. bool pokemon_custom_event_callback(void* context, uint32_t event) {
  12. furi_assert(context);
  13. PokemonFap* pokemon_fap = context;
  14. return scene_manager_handle_custom_event(pokemon_fap->scene_manager, event);
  15. }
  16. bool pokemon_back_event_callback(void* context) {
  17. furi_assert(context);
  18. PokemonFap* pokemon_fap = context;
  19. return scene_manager_handle_back_event(pokemon_fap->scene_manager);
  20. }
  21. PokemonFap* pokemon_alloc() {
  22. PokemonFap* pokemon_fap = (PokemonFap*)malloc(sizeof(PokemonFap));
  23. ViewDispatcher* view_dispatcher = NULL;
  24. // View dispatcher
  25. view_dispatcher = view_dispatcher_alloc();
  26. pokemon_fap->view_dispatcher = view_dispatcher;
  27. view_dispatcher_set_event_callback_context(view_dispatcher, pokemon_fap);
  28. view_dispatcher_set_custom_event_callback(view_dispatcher, pokemon_custom_event_callback);
  29. view_dispatcher_set_navigation_event_callback(view_dispatcher, pokemon_back_event_callback);
  30. view_dispatcher_attach_to_gui(
  31. view_dispatcher, (Gui*)furi_record_open(RECORD_GUI), ViewDispatcherTypeFullscreen);
  32. // Text input
  33. pokemon_fap->text_input = text_input_alloc();
  34. view_dispatcher_add_view(
  35. view_dispatcher, AppViewTextInput, text_input_get_view(pokemon_fap->text_input));
  36. // Submenu
  37. pokemon_fap->submenu = submenu_alloc();
  38. view_dispatcher_add_view(
  39. view_dispatcher, AppViewSubmenu, submenu_get_view(pokemon_fap->submenu));
  40. // Variable Item List
  41. pokemon_fap->variable_item_list = variable_item_list_alloc();
  42. view_dispatcher_add_view(
  43. view_dispatcher,
  44. AppViewVariableItem,
  45. variable_item_list_get_view(pokemon_fap->variable_item_list));
  46. // DialogEx
  47. pokemon_fap->dialog_ex = dialog_ex_alloc();
  48. view_dispatcher_add_view(
  49. view_dispatcher, AppViewDialogEx, dialog_ex_get_view(pokemon_fap->dialog_ex));
  50. // Scene manager
  51. pokemon_fap->scene_manager = scene_manager_alloc(&pokemon_scene_handlers, pokemon_fap);
  52. scene_manager_next_scene(pokemon_fap->scene_manager, PokemonSceneMainMenu);
  53. // Allocate gblink before going to main menu
  54. pokemon_fap->gblink_handle = gblink_alloc();
  55. gblink_pinconf_load(pokemon_fap->gblink_handle);
  56. return pokemon_fap;
  57. }
  58. void free_app(PokemonFap* pokemon_fap) {
  59. furi_assert(pokemon_fap);
  60. // gblink
  61. gblink_free(pokemon_fap->gblink_handle);
  62. // Submenu
  63. view_dispatcher_remove_view(pokemon_fap->view_dispatcher, AppViewSubmenu);
  64. submenu_free(pokemon_fap->submenu);
  65. // text input
  66. view_dispatcher_remove_view(pokemon_fap->view_dispatcher, AppViewTextInput);
  67. text_input_free(pokemon_fap->text_input);
  68. // Vairable item list
  69. view_dispatcher_remove_view(pokemon_fap->view_dispatcher, AppViewVariableItem);
  70. variable_item_list_free(pokemon_fap->variable_item_list);
  71. // Dialog ex
  72. view_dispatcher_remove_view(pokemon_fap->view_dispatcher, AppViewDialogEx);
  73. dialog_ex_free(pokemon_fap->dialog_ex);
  74. view_dispatcher_free(pokemon_fap->view_dispatcher);
  75. // Free scenes
  76. scene_manager_free(pokemon_fap->scene_manager);
  77. // Close records
  78. furi_record_close(RECORD_GUI);
  79. // Free rest
  80. free(pokemon_fap);
  81. pokemon_fap = NULL;
  82. }
  83. int32_t pokemon_app(void* p) {
  84. UNUSED(p);
  85. Expansion* expansion = furi_record_open(RECORD_EXPANSION);
  86. expansion_disable(expansion);
  87. PokemonFap* pokemon_fap = pokemon_alloc();
  88. furi_hal_light_set(LightRed, 0x00);
  89. furi_hal_light_set(LightGreen, 0x00);
  90. furi_hal_light_set(LightBlue, 0x00);
  91. //switch view and run dispatcher
  92. view_dispatcher_run(pokemon_fap->view_dispatcher);
  93. // Free resources
  94. free_app(pokemon_fap);
  95. expansion_enable(expansion);
  96. furi_record_close(RECORD_EXPANSION);
  97. return 0;
  98. }