flip_library_i.h 6.7 KB

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