flip_weather_alloc.c 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. #include <alloc/flip_weather_alloc.h>
  2. // Function to allocate resources for the FlipWeatherApp
  3. FlipWeatherApp* flip_weather_app_alloc() {
  4. FlipWeatherApp* app = (FlipWeatherApp*)malloc(sizeof(FlipWeatherApp));
  5. Gui* gui = furi_record_open(RECORD_GUI);
  6. // initialize uart
  7. if(!flipper_http_init(flipper_http_rx_callback, app)) {
  8. FURI_LOG_E(TAG, "Failed to initialize flipper http");
  9. return NULL;
  10. }
  11. // Allocate the text input buffer
  12. app->uart_text_input_buffer_size_ssid = 64;
  13. app->uart_text_input_buffer_size_password = 64;
  14. if(!easy_flipper_set_buffer(
  15. &app->uart_text_input_buffer_ssid, app->uart_text_input_buffer_size_ssid)) {
  16. return NULL;
  17. }
  18. if(!easy_flipper_set_buffer(
  19. &app->uart_text_input_temp_buffer_ssid, app->uart_text_input_buffer_size_ssid)) {
  20. return NULL;
  21. }
  22. if(!easy_flipper_set_buffer(
  23. &app->uart_text_input_buffer_password, app->uart_text_input_buffer_size_password)) {
  24. return NULL;
  25. }
  26. if(!easy_flipper_set_buffer(
  27. &app->uart_text_input_temp_buffer_password,
  28. app->uart_text_input_buffer_size_password)) {
  29. return NULL;
  30. }
  31. // Allocate ViewDispatcher
  32. if(!easy_flipper_set_view_dispatcher(&app->view_dispatcher, gui, app)) {
  33. return NULL;
  34. }
  35. // Main view
  36. if(!easy_flipper_set_view(
  37. &app->view_weather,
  38. FlipWeatherViewWeather,
  39. flip_weather_view_draw_callback_weather,
  40. NULL,
  41. callback_to_submenu,
  42. &app->view_dispatcher,
  43. app)) {
  44. return NULL;
  45. }
  46. if(!easy_flipper_set_view(
  47. &app->view_gps,
  48. FlipWeatherViewGPS,
  49. flip_weather_view_draw_callback_gps,
  50. NULL,
  51. callback_to_submenu,
  52. &app->view_dispatcher,
  53. app)) {
  54. return NULL;
  55. }
  56. // Widget
  57. if(!easy_flipper_set_widget(
  58. &app->widget,
  59. FlipWeatherViewAbout,
  60. "FlipWeather v1.1\n-----\nUse WiFi to get GPS and \nWeather information.\n-----\nwww.github.com/jblanked",
  61. callback_to_submenu,
  62. &app->view_dispatcher)) {
  63. return NULL;
  64. }
  65. // Text Input
  66. if(!easy_flipper_set_uart_text_input(
  67. &app->uart_text_input_ssid,
  68. FlipWeatherViewTextInputSSID,
  69. "Enter SSID",
  70. app->uart_text_input_temp_buffer_ssid,
  71. app->uart_text_input_buffer_size_ssid,
  72. text_updated_ssid,
  73. callback_to_wifi_settings,
  74. &app->view_dispatcher,
  75. app)) {
  76. return NULL;
  77. }
  78. if(!easy_flipper_set_uart_text_input(
  79. &app->uart_text_input_password,
  80. FlipWeatherViewTextInputPassword,
  81. "Enter Password",
  82. app->uart_text_input_temp_buffer_password,
  83. app->uart_text_input_buffer_size_password,
  84. text_updated_password,
  85. callback_to_wifi_settings,
  86. &app->view_dispatcher,
  87. app)) {
  88. return NULL;
  89. }
  90. // Variable Item List
  91. if(!easy_flipper_set_variable_item_list(
  92. &app->variable_item_list,
  93. FlipWeatherViewSettings,
  94. settings_item_selected,
  95. callback_to_submenu,
  96. &app->view_dispatcher,
  97. app)) {
  98. return NULL;
  99. }
  100. app->variable_item_ssid =
  101. variable_item_list_add(app->variable_item_list, "SSID", 0, NULL, NULL);
  102. app->variable_item_password =
  103. variable_item_list_add(app->variable_item_list, "Password", 0, NULL, NULL);
  104. variable_item_set_current_value_text(app->variable_item_ssid, "");
  105. variable_item_set_current_value_text(app->variable_item_password, "");
  106. // Submenu
  107. if(!easy_flipper_set_submenu(
  108. &app->submenu,
  109. FlipWeatherViewSubmenu,
  110. "FlipWeather v1.1",
  111. callback_exit_app,
  112. &app->view_dispatcher)) {
  113. return NULL;
  114. }
  115. submenu_add_item(
  116. app->submenu, "Weather", FlipWeatherSubmenuIndexWeather, callback_submenu_choices, app);
  117. submenu_add_item(
  118. app->submenu, "GPS", FlipWeatherSubmenuIndexGPS, callback_submenu_choices, app);
  119. submenu_add_item(
  120. app->submenu, "About", FlipWeatherSubmenuIndexAbout, callback_submenu_choices, app);
  121. submenu_add_item(
  122. app->submenu, "Settings", FlipWeatherSubmenuIndexSettings, callback_submenu_choices, app);
  123. // load settings
  124. if(load_settings(
  125. app->uart_text_input_buffer_ssid,
  126. app->uart_text_input_buffer_size_ssid,
  127. app->uart_text_input_buffer_password,
  128. app->uart_text_input_buffer_size_password)) {
  129. // Update variable items
  130. if(app->variable_item_ssid)
  131. variable_item_set_current_value_text(
  132. app->variable_item_ssid, app->uart_text_input_buffer_ssid);
  133. // dont show password
  134. // Copy items into their temp buffers with safety checks
  135. if(app->uart_text_input_buffer_ssid && app->uart_text_input_temp_buffer_ssid) {
  136. strncpy(
  137. app->uart_text_input_temp_buffer_ssid,
  138. app->uart_text_input_buffer_ssid,
  139. app->uart_text_input_buffer_size_ssid - 1);
  140. app->uart_text_input_temp_buffer_ssid[app->uart_text_input_buffer_size_ssid - 1] =
  141. '\0';
  142. }
  143. if(app->uart_text_input_buffer_password && app->uart_text_input_temp_buffer_password) {
  144. strncpy(
  145. app->uart_text_input_temp_buffer_password,
  146. app->uart_text_input_buffer_password,
  147. app->uart_text_input_buffer_size_password - 1);
  148. app->uart_text_input_temp_buffer_password[app->uart_text_input_buffer_size_password - 1] =
  149. '\0';
  150. }
  151. }
  152. // Popup
  153. if(!easy_flipper_set_popup(
  154. &app->popup_error,
  155. FlipWeatherViewPopupError,
  156. "[ERROR]",
  157. 0,
  158. 0,
  159. "Wifi Dev Board disconnected.\nIf your board is connected,\nmake sure you have the\nlatest FlipperHTTP flash.",
  160. 0,
  161. 12,
  162. flip_weather_popup_callback,
  163. callback_to_submenu,
  164. &app->view_dispatcher,
  165. app)) {
  166. return NULL;
  167. }
  168. // Switch to the main view
  169. view_dispatcher_switch_to_view(app->view_dispatcher, FlipWeatherViewSubmenu);
  170. return app;
  171. }