free.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. #include "callback/free.h"
  2. #include <callback/loader.h>
  3. void free_all(void *context)
  4. {
  5. FlipWiFiApp *app = (FlipWiFiApp *)context;
  6. furi_check(app);
  7. free_views(app);
  8. free_widgets(app);
  9. free_submenus(app);
  10. free_text_inputs(app);
  11. free_playlist();
  12. free_text_box(app);
  13. if (back_from_ap)
  14. {
  15. // cannot do this in callback_submenu_ap (we got a NULL pointer error)
  16. // so let's do it here
  17. if (app->fhttp != NULL)
  18. {
  19. app->fhttp->state = IDLE;
  20. flipper_http_send_data(app->fhttp, "[WIFI/AP/STOP]");
  21. furi_delay_ms(100);
  22. flipper_http_free(app->fhttp);
  23. app->fhttp = NULL;
  24. }
  25. back_from_ap = false;
  26. }
  27. if (app->fhttp)
  28. {
  29. flipper_http_free(app->fhttp);
  30. app->fhttp = NULL;
  31. }
  32. if (app->timer)
  33. {
  34. if (furi_timer_is_running(app->timer) > 0)
  35. furi_timer_stop(app->timer);
  36. furi_timer_free(app->timer);
  37. app->timer = NULL;
  38. }
  39. loader_view_free(app);
  40. }
  41. void free_playlist(void)
  42. {
  43. if (wifi_playlist)
  44. {
  45. free(wifi_playlist);
  46. wifi_playlist = NULL;
  47. }
  48. }
  49. void free_submenus(void *context)
  50. {
  51. FlipWiFiApp *app = (FlipWiFiApp *)context;
  52. furi_check(app);
  53. if (app->submenu_wifi)
  54. {
  55. free(app->submenu_wifi);
  56. app->submenu_wifi = NULL;
  57. view_dispatcher_remove_view(app->view_dispatcher, FlipWiFiViewSubmenu);
  58. }
  59. }
  60. void free_text_box(void *context)
  61. {
  62. FlipWiFiApp *app = (FlipWiFiApp *)context;
  63. furi_check(app, "FlipWiFiApp is NULL");
  64. // Free the text box
  65. if (app->textbox)
  66. {
  67. view_dispatcher_remove_view(app->view_dispatcher, FlipWiFiViewWiFiAP);
  68. text_box_free(app->textbox);
  69. app->textbox = NULL;
  70. }
  71. // Free the timer
  72. if (app->timer)
  73. {
  74. furi_timer_free(app->timer);
  75. app->timer = NULL;
  76. }
  77. }
  78. void free_text_inputs(void *context)
  79. {
  80. FlipWiFiApp *app = (FlipWiFiApp *)context;
  81. furi_check(app);
  82. if (app->uart_text_input)
  83. {
  84. free(app->uart_text_input);
  85. app->uart_text_input = NULL;
  86. view_dispatcher_remove_view(app->view_dispatcher, FlipWiFiViewTextInput);
  87. }
  88. if (app->uart_text_input_buffer)
  89. {
  90. free(app->uart_text_input_buffer);
  91. app->uart_text_input_buffer = NULL;
  92. }
  93. if (app->uart_text_input_temp_buffer)
  94. {
  95. free(app->uart_text_input_temp_buffer);
  96. app->uart_text_input_temp_buffer = NULL;
  97. }
  98. }
  99. void free_widgets(void *context)
  100. {
  101. FlipWiFiApp *app = (FlipWiFiApp *)context;
  102. furi_check(app);
  103. if (app->widget_info)
  104. {
  105. free(app->widget_info);
  106. app->widget_info = NULL;
  107. view_dispatcher_remove_view(app->view_dispatcher, FlipWiFiViewAbout);
  108. }
  109. };
  110. void free_views(void *context)
  111. {
  112. FlipWiFiApp *app = (FlipWiFiApp *)context;
  113. furi_check(app);
  114. if (app->view_wifi)
  115. {
  116. free(app->view_wifi);
  117. app->view_wifi = NULL;
  118. view_dispatcher_remove_view(app->view_dispatcher, FlipWiFiViewGeneric);
  119. }
  120. }