flip_trader_alloc.c 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. #include "alloc/flip_trader_alloc.h"
  2. // Function to allocate resources for the FlipTraderApp
  3. FlipTraderApp* flip_trader_app_alloc() {
  4. FlipTraderApp* app = (FlipTraderApp*)malloc(sizeof(FlipTraderApp));
  5. Gui* gui = furi_record_open(RECORD_GUI);
  6. // initialize uart
  7. if(!flipper_http_init(flipper_http_rx_callback, app)) {
  8. FURI_LOG_E(TAG, "Failed to initialize flipper http");
  9. return NULL;
  10. }
  11. // Allocate the text input buffer
  12. app->uart_text_input_buffer_size_ssid = 64;
  13. app->uart_text_input_buffer_size_password = 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. asset_names = asset_names_alloc();
  32. if(!asset_names) {
  33. return NULL;
  34. }
  35. // Allocate ViewDispatcher
  36. if(!easy_flipper_set_view_dispatcher(&app->view_dispatcher, gui, app)) {
  37. return NULL;
  38. }
  39. view_dispatcher_set_custom_event_callback(
  40. app->view_dispatcher, flip_trader_custom_event_callback);
  41. // Main view
  42. if(!easy_flipper_set_view(
  43. &app->view_loader,
  44. FlipTraderViewLoader,
  45. flip_trader_loader_draw_callback,
  46. NULL,
  47. callback_to_assets_submenu,
  48. &app->view_dispatcher,
  49. app)) {
  50. return NULL;
  51. }
  52. flip_trader_loader_init(app->view_loader);
  53. // Widget
  54. if(!easy_flipper_set_widget(
  55. &app->widget_about,
  56. FlipTraderViewAbout,
  57. "FlipTrader v1.2\n-----\nUse WiFi to get the price of\nstocks and currency pairs.\n-----\nwww.github.com/jblanked",
  58. callback_to_submenu,
  59. &app->view_dispatcher)) {
  60. return NULL;
  61. }
  62. if(!easy_flipper_set_widget(
  63. &app->widget_result,
  64. FlipTraderViewWidgetResult,
  65. "Error, try again.",
  66. callback_to_assets_submenu,
  67. &app->view_dispatcher)) {
  68. return NULL;
  69. }
  70. // Text Input
  71. if(!easy_flipper_set_uart_text_input(
  72. &app->uart_text_input_ssid,
  73. FlipTraderViewTextInputSSID,
  74. "Enter SSID",
  75. app->uart_text_input_temp_buffer_ssid,
  76. app->uart_text_input_buffer_size_ssid,
  77. text_updated_ssid,
  78. callback_to_wifi_settings,
  79. &app->view_dispatcher,
  80. app)) {
  81. return NULL;
  82. }
  83. if(!easy_flipper_set_uart_text_input(
  84. &app->uart_text_input_password,
  85. FlipTraderViewTextInputPassword,
  86. "Enter password",
  87. app->uart_text_input_temp_buffer_password,
  88. app->uart_text_input_buffer_size_password,
  89. text_updated_password,
  90. callback_to_wifi_settings,
  91. &app->view_dispatcher,
  92. app)) {
  93. return NULL;
  94. }
  95. // Variable Item List
  96. if(!easy_flipper_set_variable_item_list(
  97. &app->variable_item_list_wifi,
  98. FlipTraderViewWiFiSettings,
  99. settings_item_selected,
  100. callback_to_submenu,
  101. &app->view_dispatcher,
  102. app)) {
  103. return NULL;
  104. }
  105. app->variable_item_ssid =
  106. variable_item_list_add(app->variable_item_list_wifi, "SSID", 0, NULL, NULL);
  107. app->variable_item_password =
  108. variable_item_list_add(app->variable_item_list_wifi, "Password", 0, NULL, NULL);
  109. variable_item_set_current_value_text(app->variable_item_ssid, "");
  110. variable_item_set_current_value_text(app->variable_item_password, "");
  111. // Submenu
  112. if(!easy_flipper_set_submenu(
  113. &app->submenu_main,
  114. FlipTraderViewMainSubmenu,
  115. "FlipTrader v1.2",
  116. easy_flipper_callback_exit_app,
  117. &app->view_dispatcher)) {
  118. return NULL;
  119. }
  120. if(!easy_flipper_set_submenu(
  121. &app->submenu_assets,
  122. FlipTraderViewAssetsSubmenu,
  123. "Assets",
  124. callback_to_submenu,
  125. &app->view_dispatcher)) {
  126. return NULL;
  127. }
  128. submenu_add_item(
  129. app->submenu_main, "Assets", FlipTradeSubmenuIndexAssets, callback_submenu_choices, app);
  130. submenu_add_item(
  131. app->submenu_main, "About", FlipTraderSubmenuIndexAbout, callback_submenu_choices, app);
  132. submenu_add_item(
  133. app->submenu_main, "WiFi", FlipTraderSubmenuIndexSettings, callback_submenu_choices, app);
  134. // add the assets
  135. for(uint32_t i = 0; i < ASSET_COUNT; i++) {
  136. submenu_add_item(
  137. app->submenu_assets,
  138. asset_names[i],
  139. FlipTraderSubmenuIndexAssetStartIndex + i,
  140. callback_submenu_choices,
  141. app);
  142. }
  143. // load settings
  144. if(load_settings(
  145. app->uart_text_input_buffer_ssid,
  146. app->uart_text_input_buffer_size_ssid,
  147. app->uart_text_input_buffer_password,
  148. app->uart_text_input_buffer_size_password)) {
  149. // Update variable items
  150. if(app->variable_item_ssid)
  151. variable_item_set_current_value_text(
  152. app->variable_item_ssid, app->uart_text_input_buffer_ssid);
  153. // dont show password
  154. // Copy items into their temp buffers with safety checks
  155. if(app->uart_text_input_buffer_ssid && app->uart_text_input_temp_buffer_ssid) {
  156. strncpy(
  157. app->uart_text_input_temp_buffer_ssid,
  158. app->uart_text_input_buffer_ssid,
  159. app->uart_text_input_buffer_size_ssid - 1);
  160. app->uart_text_input_temp_buffer_ssid[app->uart_text_input_buffer_size_ssid - 1] =
  161. '\0';
  162. }
  163. if(app->uart_text_input_buffer_password && app->uart_text_input_temp_buffer_password) {
  164. strncpy(
  165. app->uart_text_input_temp_buffer_password,
  166. app->uart_text_input_buffer_password,
  167. app->uart_text_input_buffer_size_password - 1);
  168. app->uart_text_input_temp_buffer_password[app->uart_text_input_buffer_size_password - 1] =
  169. '\0';
  170. }
  171. }
  172. // start with the main view
  173. view_dispatcher_switch_to_view(app->view_dispatcher, FlipTraderViewMainSubmenu);
  174. return app;
  175. }