flip_trader_i.h 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. #ifndef FLIP_TRADER_I_H
  2. #define FLIP_TRADER_I_H
  3. // Function to allocate resources for the FlipTraderApp
  4. static FlipTraderApp* flip_trader_app_alloc() {
  5. FlipTraderApp* app = (FlipTraderApp*)malloc(sizeof(FlipTraderApp));
  6. Gui* gui = furi_record_open(RECORD_GUI);
  7. // initialize uart
  8. if(!flipper_http_init(flipper_http_rx_callback, app)) {
  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. if(!easy_flipper_set_buffer(
  16. &app->uart_text_input_buffer_ssid, app->uart_text_input_buffer_size_ssid)) {
  17. return NULL;
  18. }
  19. if(!easy_flipper_set_buffer(
  20. &app->uart_text_input_temp_buffer_ssid, app->uart_text_input_buffer_size_ssid)) {
  21. return NULL;
  22. }
  23. if(!easy_flipper_set_buffer(
  24. &app->uart_text_input_buffer_password, app->uart_text_input_buffer_size_password)) {
  25. return NULL;
  26. }
  27. if(!easy_flipper_set_buffer(
  28. &app->uart_text_input_temp_buffer_password,
  29. app->uart_text_input_buffer_size_password)) {
  30. return NULL;
  31. }
  32. // Allocate ViewDispatcher
  33. if(!easy_flipper_set_view_dispatcher(&app->view_dispatcher, gui, app)) {
  34. return NULL;
  35. }
  36. // Main view
  37. if(!easy_flipper_set_view(
  38. &app->view_main,
  39. FlipTraderViewMain,
  40. flip_trader_view_draw_callback,
  41. NULL,
  42. callback_to_assets_submenu,
  43. &app->view_dispatcher,
  44. app)) {
  45. return NULL;
  46. }
  47. // Widget
  48. if(!easy_flipper_set_widget(
  49. &app->widget,
  50. FlipTraderViewAbout,
  51. "FlipTrader v1.1\n-----\nUse WiFi to get the price of\nstocks and currency pairs.\n-----\nwww.github.com/jblanked",
  52. callback_to_submenu,
  53. &app->view_dispatcher)) {
  54. return NULL;
  55. }
  56. // Text Input
  57. if(!easy_flipper_set_uart_text_input(
  58. &app->uart_text_input_ssid,
  59. FlipTraderViewTextInputSSID,
  60. "Enter SSID",
  61. app->uart_text_input_temp_buffer_ssid,
  62. app->uart_text_input_buffer_size_ssid,
  63. text_updated_ssid,
  64. callback_to_wifi_settings,
  65. &app->view_dispatcher,
  66. app)) {
  67. return NULL;
  68. }
  69. if(!easy_flipper_set_uart_text_input(
  70. &app->uart_text_input_password,
  71. FlipTraderViewTextInputPassword,
  72. "Enter password",
  73. app->uart_text_input_temp_buffer_password,
  74. app->uart_text_input_buffer_size_password,
  75. text_updated_password,
  76. callback_to_wifi_settings,
  77. &app->view_dispatcher,
  78. app)) {
  79. return NULL;
  80. }
  81. // Variable Item List
  82. if(!easy_flipper_set_variable_item_list(
  83. &app->variable_item_list_wifi,
  84. FlipTraderViewWiFiSettings,
  85. settings_item_selected,
  86. callback_to_submenu,
  87. &app->view_dispatcher,
  88. app)) {
  89. return NULL;
  90. }
  91. app->variable_item_ssid =
  92. variable_item_list_add(app->variable_item_list_wifi, "SSID", 0, NULL, NULL);
  93. app->variable_item_password =
  94. variable_item_list_add(app->variable_item_list_wifi, "Password", 0, NULL, NULL);
  95. variable_item_set_current_value_text(app->variable_item_ssid, "");
  96. variable_item_set_current_value_text(app->variable_item_password, "");
  97. // Submenu
  98. if(!easy_flipper_set_submenu(
  99. &app->submenu_main,
  100. FlipTraderViewMainSubmenu,
  101. "FlipTrader v1.1",
  102. easy_flipper_callback_exit_app,
  103. &app->view_dispatcher)) {
  104. return NULL;
  105. }
  106. if(!easy_flipper_set_submenu(
  107. &app->submenu_assets,
  108. FlipTraderViewAssetsSubmenu,
  109. "Assets",
  110. callback_to_submenu,
  111. &app->view_dispatcher)) {
  112. return NULL;
  113. }
  114. submenu_add_item(
  115. app->submenu_main, "Assets", FlipTradeSubmenuIndexAssets, callback_submenu_choices, app);
  116. submenu_add_item(
  117. app->submenu_main, "About", FlipTraderSubmenuIndexAbout, callback_submenu_choices, app);
  118. submenu_add_item(
  119. app->submenu_main, "WiFi", FlipTraderSubmenuIndexSettings, callback_submenu_choices, app);
  120. // add the assets
  121. for(uint32_t i = 0; i < sizeof(asset_names) / sizeof(asset_names[0]); i++) {
  122. submenu_add_item(
  123. app->submenu_assets,
  124. asset_names[i],
  125. FlipTraderSubmenuIndexAssetStartIndex + i,
  126. callback_submenu_choices,
  127. app);
  128. }
  129. // load settings
  130. if(load_settings(
  131. app->uart_text_input_buffer_ssid,
  132. app->uart_text_input_buffer_size_ssid,
  133. app->uart_text_input_buffer_password,
  134. app->uart_text_input_buffer_size_password)) {
  135. // Update variable items
  136. if(app->variable_item_ssid)
  137. variable_item_set_current_value_text(
  138. app->variable_item_ssid, app->uart_text_input_buffer_ssid);
  139. // dont show password
  140. // Copy items into their temp buffers with safety checks
  141. if(app->uart_text_input_buffer_ssid && app->uart_text_input_temp_buffer_ssid) {
  142. strncpy(
  143. app->uart_text_input_temp_buffer_ssid,
  144. app->uart_text_input_buffer_ssid,
  145. app->uart_text_input_buffer_size_ssid - 1);
  146. app->uart_text_input_temp_buffer_ssid[app->uart_text_input_buffer_size_ssid - 1] =
  147. '\0';
  148. }
  149. if(app->uart_text_input_buffer_password && app->uart_text_input_temp_buffer_password) {
  150. strncpy(
  151. app->uart_text_input_temp_buffer_password,
  152. app->uart_text_input_buffer_password,
  153. app->uart_text_input_buffer_size_password - 1);
  154. app->uart_text_input_temp_buffer_password[app->uart_text_input_buffer_size_password - 1] =
  155. '\0';
  156. }
  157. }
  158. // start with the main view
  159. view_dispatcher_switch_to_view(app->view_dispatcher, FlipTraderViewMainSubmenu);
  160. return app;
  161. }
  162. #endif // FLIP_TRADER_I_H