flip_library_alloc.c 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. #include "alloc/flip_library_alloc.h"
  2. // Function to allocate resources for the FlipLibraryApp
  3. FlipLibraryApp *flip_library_app_alloc()
  4. {
  5. FlipLibraryApp *app = (FlipLibraryApp *)malloc(sizeof(FlipLibraryApp));
  6. Gui *gui = furi_record_open(RECORD_GUI);
  7. if (!flipper_http_init(flipper_http_rx_callback, app))
  8. {
  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. app->uart_text_input_buffer_size_dictionary = 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. if (!easy_flipper_set_buffer(&app->uart_text_input_buffer_dictionary, app->uart_text_input_buffer_size_dictionary))
  33. {
  34. return NULL;
  35. }
  36. if (!easy_flipper_set_buffer(&app->uart_text_input_temp_buffer_dictionary, app->uart_text_input_buffer_size_dictionary))
  37. {
  38. return NULL;
  39. }
  40. // Allocate ViewDispatcher
  41. if (!easy_flipper_set_view_dispatcher(&app->view_dispatcher, gui, app))
  42. {
  43. return NULL;
  44. }
  45. // Main view
  46. if (!easy_flipper_set_view(&app->view_random_facts, FlipLibraryViewRandomFactsRun, view_draw_callback_random_facts, NULL, callback_to_random_facts, &app->view_dispatcher, app))
  47. {
  48. return NULL;
  49. }
  50. if (!easy_flipper_set_view(&app->view_dictionary, FlipLibraryViewDictionaryRun, view_draw_callback_dictionary_run, NULL, callback_to_submenu, &app->view_dispatcher, app))
  51. {
  52. return NULL;
  53. }
  54. // Widget
  55. if (!easy_flipper_set_widget(&app->widget, FlipLibraryViewAbout, "FlipLibrary v1.2\n-----\nDictionary, random facts, and\nmore.\n-----\nwww.github.com/jblanked", callback_to_submenu, &app->view_dispatcher))
  56. {
  57. return NULL;
  58. }
  59. if (!easy_flipper_set_widget(&app->widget_random_fact, FlipLibraryViewRandomFactWidget, "Error, try again.", callback_to_random_facts, &app->view_dispatcher))
  60. {
  61. return NULL;
  62. }
  63. if (!easy_flipper_set_widget(&app->widget_dictionary, FlipLibraryViewDictionaryWidget, "Error, try again.", callback_to_submenu, &app->view_dispatcher))
  64. {
  65. return NULL;
  66. }
  67. // Text Input
  68. if (!easy_flipper_set_uart_text_input(&app->uart_text_input_ssid, FlipLibraryViewTextInputSSID, "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))
  69. {
  70. return NULL;
  71. }
  72. if (!easy_flipper_set_uart_text_input(&app->uart_text_input_password, FlipLibraryViewTextInputPassword, "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))
  73. {
  74. return NULL;
  75. }
  76. if (!easy_flipper_set_uart_text_input(&app->uart_text_input_dictionary, FlipLibraryViewDictionaryTextInput, "Enter a word", app->uart_text_input_temp_buffer_dictionary, app->uart_text_input_buffer_size_dictionary, text_updated_dictionary, callback_to_submenu, &app->view_dispatcher, app))
  77. {
  78. return NULL;
  79. }
  80. // Variable Item List
  81. if (!easy_flipper_set_variable_item_list(&app->variable_item_list_wifi, FlipLibraryViewSettings, settings_item_selected, callback_to_submenu, &app->view_dispatcher, app))
  82. {
  83. return NULL;
  84. }
  85. app->variable_item_ssid = variable_item_list_add(app->variable_item_list_wifi, "SSID", 0, NULL, NULL);
  86. app->variable_item_password = variable_item_list_add(app->variable_item_list_wifi, "Password", 0, NULL, NULL);
  87. variable_item_set_current_value_text(app->variable_item_ssid, "");
  88. variable_item_set_current_value_text(app->variable_item_password, "");
  89. // Submenu
  90. if (!easy_flipper_set_submenu(&app->submenu_main, FlipLibraryViewSubmenuMain, "FlipLibrary v1.2", callback_exit_app, &app->view_dispatcher))
  91. {
  92. return NULL;
  93. }
  94. if (!easy_flipper_set_submenu(&app->submenu_random_facts, FlipLibraryViewRandomFacts, "Random Facts", callback_to_submenu, &app->view_dispatcher))
  95. {
  96. return NULL;
  97. }
  98. submenu_add_item(app->submenu_main, "Random Fact", FlipLibrarySubmenuIndexRandomFacts, callback_submenu_choices, app);
  99. submenu_add_item(app->submenu_main, "Dictionary", FlipLibrarySubmenuIndexDictionary, callback_submenu_choices, app);
  100. submenu_add_item(app->submenu_main, "About", FlipLibrarySubmenuIndexAbout, callback_submenu_choices, app);
  101. submenu_add_item(app->submenu_main, "WiFi", FlipLibrarySubmenuIndexSettings, callback_submenu_choices, app);
  102. //
  103. submenu_add_item(app->submenu_random_facts, "Cats", FlipLibrarySubmenuIndexRandomFactsCats, callback_submenu_choices, app);
  104. submenu_add_item(app->submenu_random_facts, "Dogs", FlipLibrarySubmenuIndexRandomFactsDogs, callback_submenu_choices, app);
  105. submenu_add_item(app->submenu_random_facts, "Quotes", FlipLibrarySubmenuIndexRandomFactsQuotes, callback_submenu_choices, app);
  106. submenu_add_item(app->submenu_random_facts, "Random", FlipLibrarySubmenuIndexRandomFactsAll, callback_submenu_choices, app);
  107. // load settings
  108. 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))
  109. {
  110. // Update variable items
  111. if (app->variable_item_ssid)
  112. variable_item_set_current_value_text(app->variable_item_ssid, app->uart_text_input_buffer_ssid);
  113. // dont show password
  114. // Copy items into their temp buffers with safety checks
  115. if (app->uart_text_input_buffer_ssid && app->uart_text_input_temp_buffer_ssid)
  116. {
  117. strncpy(app->uart_text_input_temp_buffer_ssid, app->uart_text_input_buffer_ssid, app->uart_text_input_buffer_size_ssid - 1);
  118. app->uart_text_input_temp_buffer_ssid[app->uart_text_input_buffer_size_ssid - 1] = '\0';
  119. }
  120. if (app->uart_text_input_buffer_password && app->uart_text_input_temp_buffer_password)
  121. {
  122. strncpy(app->uart_text_input_temp_buffer_password, app->uart_text_input_buffer_password, app->uart_text_input_buffer_size_password - 1);
  123. app->uart_text_input_temp_buffer_password[app->uart_text_input_buffer_size_password - 1] = '\0';
  124. }
  125. }
  126. // assign app instance
  127. app_instance = app;
  128. // start with the main view
  129. view_dispatcher_switch_to_view(app->view_dispatcher, FlipLibraryViewSubmenuMain);
  130. return app;
  131. }