pokemon_app.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. #include <furi_hal_light.h>
  2. #include <pokemon_icons.h>
  3. #include <src/include/pokemon_app.h>
  4. #include <src/include/pokemon_data.h>
  5. #include <src/views/trade.h>
  6. #include <src/include/pokemon_char_encode.h>
  7. #include <src/scenes/include/pokemon_scene.h>
  8. #include <gblink/include/gblink_pinconf.h>
  9. #include <gblink.h>
  10. bool pokemon_custom_event_callback(void* context, uint32_t event) {
  11. furi_assert(context);
  12. PokemonFap* pokemon_fap = context;
  13. return scene_manager_handle_custom_event(pokemon_fap->scene_manager, event);
  14. }
  15. bool pokemon_back_event_callback(void* context) {
  16. furi_assert(context);
  17. PokemonFap* pokemon_fap = context;
  18. return scene_manager_handle_back_event(pokemon_fap->scene_manager);
  19. }
  20. PokemonFap* pokemon_alloc() {
  21. PokemonFap* pokemon_fap = (PokemonFap*)malloc(sizeof(PokemonFap));
  22. ViewDispatcher* view_dispatcher = NULL;
  23. // View dispatcher
  24. view_dispatcher = view_dispatcher_alloc();
  25. pokemon_fap->view_dispatcher = view_dispatcher;
  26. view_dispatcher_enable_queue(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,
  32. (Gui*)furi_record_open(RECORD_GUI),
  33. ViewDispatcherTypeFullscreen);
  34. // Text input
  35. pokemon_fap->text_input = text_input_alloc();
  36. view_dispatcher_add_view(
  37. view_dispatcher, AppViewTextInput, text_input_get_view(pokemon_fap->text_input));
  38. // Submenu
  39. pokemon_fap->submenu = submenu_alloc();
  40. view_dispatcher_add_view(
  41. view_dispatcher, AppViewSubmenu, submenu_get_view(pokemon_fap->submenu));
  42. // Variable Item List
  43. pokemon_fap->variable_item_list = variable_item_list_alloc();
  44. view_dispatcher_add_view(
  45. view_dispatcher, AppViewVariableItem, 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. PokemonFap* pokemon_fap = pokemon_alloc();
  86. furi_hal_light_set(LightRed, 0x00);
  87. furi_hal_light_set(LightGreen, 0x00);
  88. furi_hal_light_set(LightBlue, 0x00);
  89. //switch view and run dispatcher
  90. view_dispatcher_run(pokemon_fap->view_dispatcher);
  91. // Free resources
  92. free_app(pokemon_fap);
  93. return 0;
  94. }