flip_weather_i.h 5.8 KB

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