flip_weather_alloc.c 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #include <alloc/flip_weather_alloc.h>
  2. // Function to allocate resources for the FlipWeatherApp
  3. FlipWeatherApp *flip_weather_app_alloc()
  4. {
  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. {
  10. FURI_LOG_E(TAG, "Failed to initialize flipper http");
  11. return NULL;
  12. }
  13. // Allocate the text input buffer
  14. app->uart_text_input_buffer_size_ssid = 64;
  15. app->uart_text_input_buffer_size_password = 64;
  16. if (!easy_flipper_set_buffer(&app->uart_text_input_buffer_ssid, app->uart_text_input_buffer_size_ssid))
  17. {
  18. return NULL;
  19. }
  20. if (!easy_flipper_set_buffer(&app->uart_text_input_temp_buffer_ssid, app->uart_text_input_buffer_size_ssid))
  21. {
  22. return NULL;
  23. }
  24. if (!easy_flipper_set_buffer(&app->uart_text_input_buffer_password, app->uart_text_input_buffer_size_password))
  25. {
  26. return NULL;
  27. }
  28. if (!easy_flipper_set_buffer(&app->uart_text_input_temp_buffer_password, app->uart_text_input_buffer_size_password))
  29. {
  30. return NULL;
  31. }
  32. // Allocate ViewDispatcher
  33. if (!easy_flipper_set_view_dispatcher(&app->view_dispatcher, gui, app))
  34. {
  35. return NULL;
  36. }
  37. // Main view
  38. if (!easy_flipper_set_view(&app->view_weather, FlipWeatherViewWeather, flip_weather_view_draw_callback_weather, NULL, callback_to_submenu, &app->view_dispatcher, app))
  39. {
  40. return NULL;
  41. }
  42. if (!easy_flipper_set_view(&app->view_gps, FlipWeatherViewGPS, flip_weather_view_draw_callback_gps, NULL, callback_to_submenu, &app->view_dispatcher, app))
  43. {
  44. return NULL;
  45. }
  46. // Widget
  47. if (!easy_flipper_set_widget(&app->widget, FlipWeatherViewAbout, "FlipWeather v1.1\n-----\nUse WiFi to get GPS and \nWeather information.\n-----\nwww.github.com/jblanked", callback_to_submenu, &app->view_dispatcher))
  48. {
  49. return NULL;
  50. }
  51. // Text Input
  52. if (!easy_flipper_set_uart_text_input(&app->uart_text_input_ssid, FlipWeatherViewTextInputSSID, "Enter SSID", app->uart_text_input_temp_buffer_ssid, app->uart_text_input_buffer_size_ssid, text_updated_ssid, callback_to_wifi_settings, &app->view_dispatcher, app))
  53. {
  54. return NULL;
  55. }
  56. if (!easy_flipper_set_uart_text_input(&app->uart_text_input_password, FlipWeatherViewTextInputPassword, "Enter Password", app->uart_text_input_temp_buffer_password, app->uart_text_input_buffer_size_password, text_updated_password, callback_to_wifi_settings, &app->view_dispatcher, app))
  57. {
  58. return NULL;
  59. }
  60. // Variable Item List
  61. if (!easy_flipper_set_variable_item_list(&app->variable_item_list, FlipWeatherViewSettings, settings_item_selected, callback_to_submenu, &app->view_dispatcher, app))
  62. {
  63. return NULL;
  64. }
  65. app->variable_item_ssid = variable_item_list_add(app->variable_item_list, "SSID", 0, NULL, NULL);
  66. app->variable_item_password = variable_item_list_add(app->variable_item_list, "Password", 0, NULL, NULL);
  67. variable_item_set_current_value_text(app->variable_item_ssid, "");
  68. variable_item_set_current_value_text(app->variable_item_password, "");
  69. // Submenu
  70. if (!easy_flipper_set_submenu(&app->submenu, FlipWeatherViewSubmenu, "FlipWeather v1.1", callback_exit_app, &app->view_dispatcher))
  71. {
  72. return NULL;
  73. }
  74. submenu_add_item(app->submenu, "Weather", FlipWeatherSubmenuIndexWeather, callback_submenu_choices, app);
  75. submenu_add_item(app->submenu, "GPS", FlipWeatherSubmenuIndexGPS, callback_submenu_choices, app);
  76. submenu_add_item(app->submenu, "About", FlipWeatherSubmenuIndexAbout, callback_submenu_choices, app);
  77. submenu_add_item(app->submenu, "Settings", FlipWeatherSubmenuIndexSettings, callback_submenu_choices, app);
  78. // load settings
  79. if (load_settings(app->uart_text_input_buffer_ssid, app->uart_text_input_buffer_size_ssid, app->uart_text_input_buffer_password, app->uart_text_input_buffer_size_password))
  80. {
  81. // Update variable items
  82. if (app->variable_item_ssid)
  83. variable_item_set_current_value_text(app->variable_item_ssid, app->uart_text_input_buffer_ssid);
  84. // dont show password
  85. // Copy items into their temp buffers with safety checks
  86. if (app->uart_text_input_buffer_ssid && app->uart_text_input_temp_buffer_ssid)
  87. {
  88. strncpy(app->uart_text_input_temp_buffer_ssid, app->uart_text_input_buffer_ssid, app->uart_text_input_buffer_size_ssid - 1);
  89. app->uart_text_input_temp_buffer_ssid[app->uart_text_input_buffer_size_ssid - 1] = '\0';
  90. }
  91. if (app->uart_text_input_buffer_password && app->uart_text_input_temp_buffer_password)
  92. {
  93. strncpy(app->uart_text_input_temp_buffer_password, app->uart_text_input_buffer_password, app->uart_text_input_buffer_size_password - 1);
  94. app->uart_text_input_temp_buffer_password[app->uart_text_input_buffer_size_password - 1] = '\0';
  95. }
  96. }
  97. // Popup
  98. if (!easy_flipper_set_popup(&app->popup_error, FlipWeatherViewPopupError, "[ERROR]", 0, 0, "Wifi Dev Board disconnected.\nPlease connect to the board.\nIf your board is connected,\nmake sure you have flashed\nyour WiFi Devboard with the\nlatest FlipperHTTP flash.", 0, 7, flip_weather_popup_callback, callback_to_submenu, &app->view_dispatcher, app))
  99. {
  100. return NULL;
  101. }
  102. // Switch to the main view
  103. view_dispatcher_switch_to_view(app->view_dispatcher, FlipWeatherViewSubmenu);
  104. return app;
  105. }