flip_weather_i.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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. {
  6. FlipWeatherApp *app = (FlipWeatherApp *)malloc(sizeof(FlipWeatherApp));
  7. Gui *gui = furi_record_open(RECORD_GUI);
  8. // initialize uart
  9. if (!flipper_http_init(flipper_http_rx_callback, app))
  10. {
  11. FURI_LOG_E(TAG, "Failed to initialize flipper http");
  12. return NULL;
  13. }
  14. // Allocate the text input buffer
  15. app->uart_text_input_buffer_size_ssid = 64;
  16. app->uart_text_input_buffer_size_password = 64;
  17. if (!easy_flipper_set_buffer(&app->uart_text_input_buffer_ssid, app->uart_text_input_buffer_size_ssid))
  18. {
  19. return NULL;
  20. }
  21. if (!easy_flipper_set_buffer(&app->uart_text_input_temp_buffer_ssid, app->uart_text_input_buffer_size_ssid))
  22. {
  23. return NULL;
  24. }
  25. if (!easy_flipper_set_buffer(&app->uart_text_input_buffer_password, app->uart_text_input_buffer_size_password))
  26. {
  27. return NULL;
  28. }
  29. if (!easy_flipper_set_buffer(&app->uart_text_input_temp_buffer_password, app->uart_text_input_buffer_size_password))
  30. {
  31. return NULL;
  32. }
  33. // Allocate ViewDispatcher
  34. if (!easy_flipper_set_view_dispatcher(&app->view_dispatcher, gui, app))
  35. {
  36. return NULL;
  37. }
  38. // Main view
  39. if (!easy_flipper_set_view(&app->view_weather, FlipWeatherViewWeather, flip_weather_view_draw_callback_weather, flip_weather_view_input_callback_weather, callback_to_submenu, &app->view_dispatcher, app))
  40. {
  41. return NULL;
  42. }
  43. if (!easy_flipper_set_view(&app->view_gps, FlipWeatherViewGPS, flip_weather_view_draw_callback_gps, flip_weather_view_input_callback_gps, callback_to_submenu, &app->view_dispatcher, app))
  44. {
  45. return NULL;
  46. }
  47. // Widget
  48. if (!easy_flipper_set_widget(&app->widget, FlipWeatherViewAbout, "FlipWeather v1.0\n-----\nUse WiFi to get GPS and \nWeather information.\n-----\nwww.github.com/jblanked", callback_to_submenu, &app->view_dispatcher))
  49. {
  50. return NULL;
  51. }
  52. // Text Input
  53. 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_submenu, &app->view_dispatcher, app))
  54. {
  55. return NULL;
  56. }
  57. 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_submenu, &app->view_dispatcher, app))
  58. {
  59. return NULL;
  60. }
  61. // Variable Item List
  62. if (!easy_flipper_set_variable_item_list(&app->variable_item_list, FlipWeatherViewSettings, settings_item_selected, callback_to_submenu, &app->view_dispatcher, app))
  63. {
  64. return NULL;
  65. }
  66. app->variable_item_ssid = variable_item_list_add(app->variable_item_list, "SSID", 0, NULL, NULL);
  67. app->variable_item_password = variable_item_list_add(app->variable_item_list, "Password", 0, NULL, NULL);
  68. variable_item_set_current_value_text(app->variable_item_ssid, "");
  69. variable_item_set_current_value_text(app->variable_item_password, "");
  70. // Submenu
  71. if (!easy_flipper_set_submenu(&app->submenu, FlipWeatherViewSubmenu, "FlipWeather v1.0", callback_exit_app, &app->view_dispatcher))
  72. {
  73. return NULL;
  74. }
  75. submenu_add_item(app->submenu, "Weather", FlipWeatherSubmenuIndexWeather, callback_submenu_choices, app);
  76. submenu_add_item(app->submenu, "GPS", FlipWeatherSubmenuIndexGPS, callback_submenu_choices, app);
  77. submenu_add_item(app->submenu, "About", FlipWeatherSubmenuIndexAbout, callback_submenu_choices, app);
  78. submenu_add_item(app->submenu, "Settings", FlipWeatherSubmenuIndexSettings, callback_submenu_choices, app);
  79. // load settings
  80. 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))
  81. {
  82. // Update variable items
  83. if (app->variable_item_ssid)
  84. variable_item_set_current_value_text(app->variable_item_ssid, app->uart_text_input_buffer_ssid);
  85. // dont show password
  86. // Copy items into their temp buffers with safety checks
  87. if (app->uart_text_input_buffer_ssid && app->uart_text_input_temp_buffer_ssid)
  88. {
  89. strncpy(app->uart_text_input_temp_buffer_ssid, app->uart_text_input_buffer_ssid, app->uart_text_input_buffer_size_ssid - 1);
  90. app->uart_text_input_temp_buffer_ssid[app->uart_text_input_buffer_size_ssid - 1] = '\0';
  91. }
  92. if (app->uart_text_input_buffer_password && app->uart_text_input_temp_buffer_password)
  93. {
  94. strncpy(app->uart_text_input_temp_buffer_password, app->uart_text_input_buffer_password, app->uart_text_input_buffer_size_password - 1);
  95. app->uart_text_input_temp_buffer_password[app->uart_text_input_buffer_size_password - 1] = '\0';
  96. }
  97. }
  98. // Switch to the main view
  99. view_dispatcher_switch_to_view(app->view_dispatcher, FlipWeatherViewSubmenu);
  100. return app;
  101. }
  102. #endif