flip_store_alloc.c 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. #include <alloc/flip_store_alloc.h>
  2. // Function to allocate resources for the FlipStoreApp
  3. FlipStoreApp *flip_store_app_alloc()
  4. {
  5. FlipStoreApp *app = (FlipStoreApp *)malloc(sizeof(FlipStoreApp));
  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_pass = 64;
  15. if (!easy_flipper_set_buffer(&app->uart_text_input_buffer_ssid, app->uart_text_input_buffer_size_ssid))
  16. {
  17. return NULL;
  18. }
  19. if (!easy_flipper_set_buffer(&app->uart_text_input_temp_buffer_ssid, app->uart_text_input_buffer_size_ssid))
  20. {
  21. return NULL;
  22. }
  23. if (!easy_flipper_set_buffer(&app->uart_text_input_buffer_pass, app->uart_text_input_buffer_size_pass))
  24. {
  25. return NULL;
  26. }
  27. if (!easy_flipper_set_buffer(&app->uart_text_input_temp_buffer_pass, app->uart_text_input_buffer_size_pass))
  28. {
  29. return NULL;
  30. }
  31. // Allocate ViewDispatcher
  32. if (!easy_flipper_set_view_dispatcher(&app->view_dispatcher, gui, app))
  33. {
  34. return NULL;
  35. }
  36. // Main view
  37. if (!easy_flipper_set_view(&app->view_main, FlipStoreViewMain, flip_store_view_draw_callback_main, NULL, callback_to_app_list, &app->view_dispatcher, app))
  38. {
  39. return NULL;
  40. }
  41. if (!easy_flipper_set_view(&app->view_app_info, FlipStoreViewAppInfo, flip_store_view_draw_callback_app_list, flip_store_input_callback, callback_to_app_list, &app->view_dispatcher, app))
  42. {
  43. return NULL;
  44. }
  45. if (!easy_flipper_set_view(&app->view_firmware_download, FlipStoreViewFirmwareDownload, flip_store_view_draw_callback_firmware, NULL, callback_to_firmware_list, &app->view_dispatcher, app))
  46. {
  47. return NULL;
  48. }
  49. // Widget
  50. if (!easy_flipper_set_widget(
  51. &app->widget,
  52. FlipStoreViewAbout,
  53. "Welcome to the FlipStore!\n------\nDownload apps via WiFi and\nrun them on your Flipper!\n------\nwww.github.com/jblanked",
  54. callback_to_submenu,
  55. &app->view_dispatcher))
  56. {
  57. return NULL;
  58. }
  59. // Popup
  60. if (!easy_flipper_set_popup(&app->popup, FlipStoreViewPopup, "Failed", 0, 0, "You are not connected to Wifi.\n\nIf you have the FlipperHTTP\nflash installed, then update\nyour WiFi credentials.", 0, 10, popup_callback, callback_to_submenu, &app->view_dispatcher, app))
  61. {
  62. FURI_LOG_E(TAG, "Failed to create popup");
  63. }
  64. // Dialog
  65. if (!easy_flipper_set_dialog_ex(
  66. &app->dialog_delete,
  67. FlipStoreViewAppDelete,
  68. "Delete App",
  69. 0,
  70. 0,
  71. "Are you sure you want to delete this app?",
  72. 0,
  73. 10,
  74. "No",
  75. "Yes",
  76. NULL,
  77. dialog_delete_callback,
  78. callback_to_app_list,
  79. &app->view_dispatcher,
  80. app))
  81. {
  82. return NULL;
  83. }
  84. if (!easy_flipper_set_dialog_ex(
  85. &app->dialog_firmware,
  86. FlipStoreViewFirmwareDialog,
  87. "Download Firmware",
  88. 0,
  89. 0,
  90. "Are you sure you want to\ndownload this firmware?",
  91. 0,
  92. 10,
  93. "No",
  94. "Yes",
  95. NULL,
  96. dialog_firmware_callback,
  97. callback_to_firmware_list,
  98. &app->view_dispatcher,
  99. app))
  100. {
  101. return NULL;
  102. }
  103. // Text Input
  104. if (!easy_flipper_set_uart_text_input(&app->uart_text_input_ssid, FlipStoreViewTextInputSSID, "Enter SSID", app->uart_text_input_temp_buffer_ssid, app->uart_text_input_buffer_size_ssid, flip_store_text_updated_ssid, callback_to_submenu, &app->view_dispatcher, app))
  105. {
  106. return NULL;
  107. }
  108. if (!easy_flipper_set_uart_text_input(&app->uart_text_input_pass, FlipStoreViewTextInputPass, "Enter Password", app->uart_text_input_temp_buffer_pass, app->uart_text_input_buffer_size_pass, flip_store_text_updated_pass, callback_to_submenu, &app->view_dispatcher, app))
  109. {
  110. return NULL;
  111. }
  112. // Variable Item List
  113. if (!easy_flipper_set_variable_item_list(&app->variable_item_list, FlipStoreViewSettings, settings_item_selected, callback_to_submenu, &app->view_dispatcher, app))
  114. {
  115. return NULL;
  116. }
  117. app->variable_item_ssid = variable_item_list_add(app->variable_item_list, "SSID", 0, NULL, NULL);
  118. app->variable_item_pass = variable_item_list_add(app->variable_item_list, "Password", 0, NULL, NULL);
  119. // Submenu
  120. if (!easy_flipper_set_submenu(&app->submenu_main, FlipStoreViewSubmenu, "FlipStore v0.6", callback_exit_app, &app->view_dispatcher))
  121. {
  122. return NULL;
  123. }
  124. if (!easy_flipper_set_submenu(&app->submenu_options, FlipStoreViewSubmenuOptions, "Browse", callback_to_submenu, &app->view_dispatcher))
  125. {
  126. return NULL;
  127. }
  128. if (!easy_flipper_set_submenu(&app->submenu_app_list, FlipStoreViewAppList, "App Catalog", callback_to_submenu_options, &app->view_dispatcher))
  129. {
  130. return NULL;
  131. }
  132. if (!easy_flipper_set_submenu(&app->submenu_firmwares, FlipStoreViewFirmwares, "ESP32 Firmwares", callback_to_submenu_options, &app->view_dispatcher))
  133. {
  134. return NULL;
  135. }
  136. if (!easy_flipper_set_submenu(&app->submenu_app_list_bluetooth, FlipStoreViewAppListBluetooth, "Bluetooth", callback_to_app_list, &app->view_dispatcher))
  137. {
  138. return NULL;
  139. }
  140. if (!easy_flipper_set_submenu(&app->submenu_app_list_games, FlipStoreViewAppListGames, "Games", callback_to_app_list, &app->view_dispatcher))
  141. {
  142. return NULL;
  143. }
  144. if (!easy_flipper_set_submenu(&app->submenu_app_list_gpio, FlipStoreViewAppListGPIO, "GPIO", callback_to_app_list, &app->view_dispatcher))
  145. {
  146. return NULL;
  147. }
  148. if (!easy_flipper_set_submenu(&app->submenu_app_list_infrared, FlipStoreViewAppListInfrared, "Infrared", callback_to_app_list, &app->view_dispatcher))
  149. {
  150. return NULL;
  151. }
  152. if (!easy_flipper_set_submenu(&app->submenu_app_list_ibutton, FlipStoreViewAppListiButton, "iButton", callback_to_app_list, &app->view_dispatcher))
  153. {
  154. return NULL;
  155. }
  156. if (!easy_flipper_set_submenu(&app->submenu_app_list_media, FlipStoreViewAppListMedia, "Media", callback_to_app_list, &app->view_dispatcher))
  157. {
  158. return NULL;
  159. }
  160. if (!easy_flipper_set_submenu(&app->submenu_app_list_nfc, FlipStoreViewAppListNFC, "NFC", callback_to_app_list, &app->view_dispatcher))
  161. {
  162. return NULL;
  163. }
  164. if (!easy_flipper_set_submenu(&app->submenu_app_list_rfid, FlipStoreViewAppListRFID, "RFID", callback_to_app_list, &app->view_dispatcher))
  165. {
  166. return NULL;
  167. }
  168. if (!easy_flipper_set_submenu(&app->submenu_app_list_subghz, FlipStoreViewAppListSubGHz, "Sub-GHz", callback_to_app_list, &app->view_dispatcher))
  169. {
  170. return NULL;
  171. }
  172. if (!easy_flipper_set_submenu(&app->submenu_app_list_tools, FlipStoreViewAppListTools, "Tools", callback_to_app_list, &app->view_dispatcher))
  173. {
  174. return NULL;
  175. }
  176. if (!easy_flipper_set_submenu(&app->submenu_app_list_usb, FlipStoreViewAppListUSB, "USB", callback_to_app_list, &app->view_dispatcher))
  177. {
  178. return NULL;
  179. }
  180. //
  181. submenu_add_item(app->submenu_main, "Browse", FlipStoreSubmenuIndexOptions, callback_submenu_choices, app);
  182. submenu_add_item(app->submenu_main, "About", FlipStoreSubmenuIndexAbout, callback_submenu_choices, app);
  183. submenu_add_item(app->submenu_main, "Settings", FlipStoreSubmenuIndexSettings, callback_submenu_choices, app);
  184. //
  185. submenu_add_item(app->submenu_options, "App Catalog", FlipStoreSubmenuIndexAppList, callback_submenu_choices, app);
  186. submenu_add_item(app->submenu_options, "ESP32 Firmwares", FlipStoreSubmenuIndexFirmwares, callback_submenu_choices, app);
  187. //
  188. submenu_add_item(app->submenu_app_list, "Bluetooth", FlipStoreSubmenuIndexAppListBluetooth, callback_submenu_choices, app);
  189. submenu_add_item(app->submenu_app_list, "Games", FlipStoreSubmenuIndexAppListGames, callback_submenu_choices, app);
  190. submenu_add_item(app->submenu_app_list, "GPIO", FlipStoreSubmenuIndexAppListGPIO, callback_submenu_choices, app);
  191. submenu_add_item(app->submenu_app_list, "Infrared", FlipStoreSubmenuIndexAppListInfrared, callback_submenu_choices, app);
  192. submenu_add_item(app->submenu_app_list, "iButton", FlipStoreSubmenuIndexAppListiButton, callback_submenu_choices, app);
  193. submenu_add_item(app->submenu_app_list, "Media", FlipStoreSubmenuIndexAppListMedia, callback_submenu_choices, app);
  194. submenu_add_item(app->submenu_app_list, "NFC", FlipStoreSubmenuIndexAppListNFC, callback_submenu_choices, app);
  195. submenu_add_item(app->submenu_app_list, "RFID", FlipStoreSubmenuIndexAppListRFID, callback_submenu_choices, app);
  196. submenu_add_item(app->submenu_app_list, "Sub-GHz", FlipStoreSubmenuIndexAppListSubGHz, callback_submenu_choices, app);
  197. submenu_add_item(app->submenu_app_list, "Tools", FlipStoreSubmenuIndexAppListTools, callback_submenu_choices, app);
  198. submenu_add_item(app->submenu_app_list, "USB", FlipStoreSubmenuIndexAppListUSB, callback_submenu_choices, app);
  199. //
  200. // dont add any items to the app list submenu of each category yet
  201. // load settings
  202. if (load_settings(app->uart_text_input_buffer_ssid, app->uart_text_input_buffer_size_ssid, app->uart_text_input_buffer_pass, app->uart_text_input_buffer_size_pass))
  203. {
  204. // Update variable items
  205. if (app->variable_item_ssid)
  206. variable_item_set_current_value_text(app->variable_item_ssid, app->uart_text_input_buffer_ssid);
  207. // do not display the password
  208. // Copy items into their temp buffers with safety checks
  209. if (app->uart_text_input_buffer_ssid && app->uart_text_input_temp_buffer_ssid)
  210. {
  211. strncpy(app->uart_text_input_temp_buffer_ssid, app->uart_text_input_buffer_ssid, app->uart_text_input_buffer_size_ssid - 1);
  212. app->uart_text_input_temp_buffer_ssid[app->uart_text_input_buffer_size_ssid - 1] = '\0';
  213. }
  214. if (app->uart_text_input_buffer_pass && app->uart_text_input_temp_buffer_pass)
  215. {
  216. strncpy(app->uart_text_input_temp_buffer_pass, app->uart_text_input_buffer_pass, app->uart_text_input_buffer_size_pass - 1);
  217. app->uart_text_input_temp_buffer_pass[app->uart_text_input_buffer_size_pass - 1] = '\0';
  218. }
  219. }
  220. // Switch to the main view
  221. view_dispatcher_switch_to_view(app->view_dispatcher, FlipStoreViewSubmenu);
  222. return app;
  223. }