flip_trader_alloc.c 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #include "alloc/flip_trader_alloc.h"
  2. // Function to allocate resources for the FlipTraderApp
  3. FlipTraderApp *flip_trader_app_alloc()
  4. {
  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. {
  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. if (!easy_flipper_set_buffer(&app->uart_text_input_buffer_ssid, app->uart_text_input_buffer_size_ssid))
  17. {
  18. return NULL;
  19. }
  20. if (!easy_flipper_set_buffer(&app->uart_text_input_temp_buffer_ssid, app->uart_text_input_buffer_size_ssid))
  21. {
  22. return NULL;
  23. }
  24. if (!easy_flipper_set_buffer(&app->uart_text_input_buffer_password, app->uart_text_input_buffer_size_password))
  25. {
  26. return NULL;
  27. }
  28. if (!easy_flipper_set_buffer(&app->uart_text_input_temp_buffer_password, app->uart_text_input_buffer_size_password))
  29. {
  30. return NULL;
  31. }
  32. asset_names = asset_names_alloc();
  33. if (!asset_names)
  34. {
  35. return NULL;
  36. }
  37. // Allocate ViewDispatcher
  38. if (!easy_flipper_set_view_dispatcher(&app->view_dispatcher, gui, app))
  39. {
  40. return NULL;
  41. }
  42. view_dispatcher_set_custom_event_callback(app->view_dispatcher, flip_trader_custom_event_callback);
  43. // Main view
  44. if (!easy_flipper_set_view(&app->view_loader, FlipTraderViewLoader, flip_trader_loader_draw_callback, NULL, callback_to_assets_submenu, &app->view_dispatcher, app))
  45. {
  46. return NULL;
  47. }
  48. flip_trader_loader_init(app->view_loader);
  49. // Widget
  50. if (!easy_flipper_set_widget(&app->widget_about, FlipTraderViewAbout, "FlipTrader v1.2\n-----\nUse WiFi to get the price of\nstocks and currency pairs.\n-----\nwww.github.com/jblanked", callback_to_submenu, &app->view_dispatcher))
  51. {
  52. return NULL;
  53. }
  54. if (!easy_flipper_set_widget(&app->widget_result, FlipTraderViewWidgetResult, "Error, try again.", callback_to_assets_submenu, &app->view_dispatcher))
  55. {
  56. return NULL;
  57. }
  58. // Text Input
  59. if (!easy_flipper_set_uart_text_input(&app->uart_text_input_ssid, FlipTraderViewTextInputSSID, "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))
  60. {
  61. return NULL;
  62. }
  63. if (!easy_flipper_set_uart_text_input(&app->uart_text_input_password, FlipTraderViewTextInputPassword, "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))
  64. {
  65. return NULL;
  66. }
  67. // Variable Item List
  68. if (!easy_flipper_set_variable_item_list(&app->variable_item_list_wifi, FlipTraderViewWiFiSettings, settings_item_selected, callback_to_submenu, &app->view_dispatcher, app))
  69. {
  70. return NULL;
  71. }
  72. app->variable_item_ssid = variable_item_list_add(app->variable_item_list_wifi, "SSID", 0, NULL, NULL);
  73. app->variable_item_password = variable_item_list_add(app->variable_item_list_wifi, "Password", 0, NULL, NULL);
  74. variable_item_set_current_value_text(app->variable_item_ssid, "");
  75. variable_item_set_current_value_text(app->variable_item_password, "");
  76. // Submenu
  77. if (!easy_flipper_set_submenu(&app->submenu_main, FlipTraderViewMainSubmenu, "FlipTrader v1.2", easy_flipper_callback_exit_app, &app->view_dispatcher))
  78. {
  79. return NULL;
  80. }
  81. if (!easy_flipper_set_submenu(&app->submenu_assets, FlipTraderViewAssetsSubmenu, "Assets", callback_to_submenu, &app->view_dispatcher))
  82. {
  83. return NULL;
  84. }
  85. submenu_add_item(app->submenu_main, "Assets", FlipTradeSubmenuIndexAssets, callback_submenu_choices, app);
  86. submenu_add_item(app->submenu_main, "About", FlipTraderSubmenuIndexAbout, callback_submenu_choices, app);
  87. submenu_add_item(app->submenu_main, "WiFi", FlipTraderSubmenuIndexSettings, callback_submenu_choices, app);
  88. // add the assets
  89. for (uint32_t i = 0; i < ASSET_COUNT; i++)
  90. {
  91. submenu_add_item(app->submenu_assets, asset_names[i], FlipTraderSubmenuIndexAssetStartIndex + i, callback_submenu_choices, app);
  92. }
  93. // load settings
  94. 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))
  95. {
  96. // Update variable items
  97. if (app->variable_item_ssid)
  98. variable_item_set_current_value_text(app->variable_item_ssid, app->uart_text_input_buffer_ssid);
  99. // dont show password
  100. // Copy items into their temp buffers with safety checks
  101. if (app->uart_text_input_buffer_ssid && app->uart_text_input_temp_buffer_ssid)
  102. {
  103. strncpy(app->uart_text_input_temp_buffer_ssid, app->uart_text_input_buffer_ssid, app->uart_text_input_buffer_size_ssid - 1);
  104. app->uart_text_input_temp_buffer_ssid[app->uart_text_input_buffer_size_ssid - 1] = '\0';
  105. }
  106. if (app->uart_text_input_buffer_password && app->uart_text_input_temp_buffer_password)
  107. {
  108. strncpy(app->uart_text_input_temp_buffer_password, app->uart_text_input_buffer_password, app->uart_text_input_buffer_size_password - 1);
  109. app->uart_text_input_temp_buffer_password[app->uart_text_input_buffer_size_password - 1] = '\0';
  110. }
  111. }
  112. // start with the main view
  113. view_dispatcher_switch_to_view(app->view_dispatcher, FlipTraderViewMainSubmenu);
  114. return app;
  115. }