flip_library_alloc.c 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. #include "alloc/flip_library_alloc.h"
  2. // Function to allocate resources for the FlipLibraryApp
  3. FlipLibraryApp* flip_library_app_alloc() {
  4. FlipLibraryApp* app = (FlipLibraryApp*)malloc(sizeof(FlipLibraryApp));
  5. Gui* gui = furi_record_open(RECORD_GUI);
  6. if(!flipper_http_init(flipper_http_rx_callback, app)) {
  7. FURI_LOG_E(TAG, "Failed to initialize flipper http");
  8. return NULL;
  9. }
  10. // Allocate the text input buffer
  11. app->uart_text_input_buffer_size_ssid = 64;
  12. app->uart_text_input_buffer_size_password = 64;
  13. app->uart_text_input_buffer_size_dictionary = 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. if(!easy_flipper_set_buffer(
  32. &app->uart_text_input_buffer_dictionary, app->uart_text_input_buffer_size_dictionary)) {
  33. return NULL;
  34. }
  35. if(!easy_flipper_set_buffer(
  36. &app->uart_text_input_temp_buffer_dictionary,
  37. app->uart_text_input_buffer_size_dictionary)) {
  38. return NULL;
  39. }
  40. // Allocate ViewDispatcher
  41. if(!easy_flipper_set_view_dispatcher(&app->view_dispatcher, gui, app)) {
  42. return NULL;
  43. }
  44. // Main view
  45. if(!easy_flipper_set_view(
  46. &app->view_random_facts,
  47. FlipLibraryViewRandomFactsRun,
  48. view_draw_callback_random_facts,
  49. NULL,
  50. callback_to_random_facts,
  51. &app->view_dispatcher,
  52. app)) {
  53. return NULL;
  54. }
  55. if(!easy_flipper_set_view(
  56. &app->view_dictionary,
  57. FlipLibraryViewDictionaryRun,
  58. view_draw_callback_dictionary_run,
  59. NULL,
  60. callback_to_submenu,
  61. &app->view_dispatcher,
  62. app)) {
  63. return NULL;
  64. }
  65. // Widget
  66. if(!easy_flipper_set_widget(
  67. &app->widget,
  68. FlipLibraryViewAbout,
  69. "FlipLibrary v1.2\n-----\nDictionary, random facts, and\nmore.\n-----\nwww.github.com/jblanked",
  70. callback_to_submenu,
  71. &app->view_dispatcher)) {
  72. return NULL;
  73. }
  74. if(!easy_flipper_set_widget(
  75. &app->widget_random_fact,
  76. FlipLibraryViewRandomFactWidget,
  77. "Error, try again.",
  78. callback_to_random_facts,
  79. &app->view_dispatcher)) {
  80. return NULL;
  81. }
  82. if(!easy_flipper_set_widget(
  83. &app->widget_dictionary,
  84. FlipLibraryViewDictionaryWidget,
  85. "Error, try again.",
  86. callback_to_submenu,
  87. &app->view_dispatcher)) {
  88. return NULL;
  89. }
  90. // Text Input
  91. if(!easy_flipper_set_uart_text_input(
  92. &app->uart_text_input_ssid,
  93. FlipLibraryViewTextInputSSID,
  94. "Enter SSID",
  95. app->uart_text_input_temp_buffer_ssid,
  96. app->uart_text_input_buffer_size_ssid,
  97. text_updated_ssid,
  98. callback_to_wifi_settings,
  99. &app->view_dispatcher,
  100. app)) {
  101. return NULL;
  102. }
  103. if(!easy_flipper_set_uart_text_input(
  104. &app->uart_text_input_password,
  105. FlipLibraryViewTextInputPassword,
  106. "Enter Password",
  107. app->uart_text_input_temp_buffer_password,
  108. app->uart_text_input_buffer_size_password,
  109. text_updated_password,
  110. callback_to_wifi_settings,
  111. &app->view_dispatcher,
  112. app)) {
  113. return NULL;
  114. }
  115. if(!easy_flipper_set_uart_text_input(
  116. &app->uart_text_input_dictionary,
  117. FlipLibraryViewDictionaryTextInput,
  118. "Enter a word",
  119. app->uart_text_input_temp_buffer_dictionary,
  120. app->uart_text_input_buffer_size_dictionary,
  121. text_updated_dictionary,
  122. callback_to_submenu,
  123. &app->view_dispatcher,
  124. app)) {
  125. return NULL;
  126. }
  127. // Variable Item List
  128. if(!easy_flipper_set_variable_item_list(
  129. &app->variable_item_list_wifi,
  130. FlipLibraryViewSettings,
  131. settings_item_selected,
  132. callback_to_submenu,
  133. &app->view_dispatcher,
  134. app)) {
  135. return NULL;
  136. }
  137. app->variable_item_ssid =
  138. variable_item_list_add(app->variable_item_list_wifi, "SSID", 0, NULL, NULL);
  139. app->variable_item_password =
  140. variable_item_list_add(app->variable_item_list_wifi, "Password", 0, NULL, NULL);
  141. variable_item_set_current_value_text(app->variable_item_ssid, "");
  142. variable_item_set_current_value_text(app->variable_item_password, "");
  143. // Submenu
  144. if(!easy_flipper_set_submenu(
  145. &app->submenu_main,
  146. FlipLibraryViewSubmenuMain,
  147. "FlipLibrary v1.2",
  148. callback_exit_app,
  149. &app->view_dispatcher)) {
  150. return NULL;
  151. }
  152. if(!easy_flipper_set_submenu(
  153. &app->submenu_random_facts,
  154. FlipLibraryViewRandomFacts,
  155. "Random Facts",
  156. callback_to_submenu,
  157. &app->view_dispatcher)) {
  158. return NULL;
  159. }
  160. submenu_add_item(
  161. app->submenu_main,
  162. "Random Fact",
  163. FlipLibrarySubmenuIndexRandomFacts,
  164. callback_submenu_choices,
  165. app);
  166. submenu_add_item(
  167. app->submenu_main,
  168. "Dictionary",
  169. FlipLibrarySubmenuIndexDictionary,
  170. callback_submenu_choices,
  171. app);
  172. submenu_add_item(
  173. app->submenu_main, "About", FlipLibrarySubmenuIndexAbout, callback_submenu_choices, app);
  174. submenu_add_item(
  175. app->submenu_main, "WiFi", FlipLibrarySubmenuIndexSettings, callback_submenu_choices, app);
  176. //
  177. submenu_add_item(
  178. app->submenu_random_facts,
  179. "Cats",
  180. FlipLibrarySubmenuIndexRandomFactsCats,
  181. callback_submenu_choices,
  182. app);
  183. submenu_add_item(
  184. app->submenu_random_facts,
  185. "Dogs",
  186. FlipLibrarySubmenuIndexRandomFactsDogs,
  187. callback_submenu_choices,
  188. app);
  189. submenu_add_item(
  190. app->submenu_random_facts,
  191. "Quotes",
  192. FlipLibrarySubmenuIndexRandomFactsQuotes,
  193. callback_submenu_choices,
  194. app);
  195. submenu_add_item(
  196. app->submenu_random_facts,
  197. "Random",
  198. FlipLibrarySubmenuIndexRandomFactsAll,
  199. callback_submenu_choices,
  200. app);
  201. // load settings
  202. if(load_settings(
  203. app->uart_text_input_buffer_ssid,
  204. app->uart_text_input_buffer_size_ssid,
  205. app->uart_text_input_buffer_password,
  206. app->uart_text_input_buffer_size_password)) {
  207. // Update variable items
  208. if(app->variable_item_ssid)
  209. variable_item_set_current_value_text(
  210. app->variable_item_ssid, app->uart_text_input_buffer_ssid);
  211. // dont show password
  212. // Copy items into their temp buffers with safety checks
  213. if(app->uart_text_input_buffer_ssid && app->uart_text_input_temp_buffer_ssid) {
  214. strncpy(
  215. app->uart_text_input_temp_buffer_ssid,
  216. app->uart_text_input_buffer_ssid,
  217. app->uart_text_input_buffer_size_ssid - 1);
  218. app->uart_text_input_temp_buffer_ssid[app->uart_text_input_buffer_size_ssid - 1] =
  219. '\0';
  220. }
  221. if(app->uart_text_input_buffer_password && app->uart_text_input_temp_buffer_password) {
  222. strncpy(
  223. app->uart_text_input_temp_buffer_password,
  224. app->uart_text_input_buffer_password,
  225. app->uart_text_input_buffer_size_password - 1);
  226. app->uart_text_input_temp_buffer_password[app->uart_text_input_buffer_size_password - 1] =
  227. '\0';
  228. }
  229. }
  230. // assign app instance
  231. app_instance = app;
  232. // start with the main view
  233. view_dispatcher_switch_to_view(app->view_dispatcher, FlipLibraryViewSubmenuMain);
  234. return app;
  235. }