flipbip_scene_settings.c 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #include "../flipbip.h"
  2. #include <lib/toolbox/value_index.h>
  3. // From: lib/crypto
  4. #include <memzero.h>
  5. #define TEXT_LABEL_ON "ON"
  6. #define TEXT_LABEL_OFF "OFF"
  7. const char* const haptic_text[2] = {
  8. TEXT_LABEL_OFF,
  9. TEXT_LABEL_ON,
  10. };
  11. const uint32_t haptic_value[2] = {
  12. FlipBipHapticOff,
  13. FlipBipHapticOn,
  14. };
  15. const char* const led_text[2] = {
  16. TEXT_LABEL_OFF,
  17. TEXT_LABEL_ON,
  18. };
  19. const uint32_t led_value[2] = {
  20. FlipBipLedOff,
  21. FlipBipLedOn,
  22. };
  23. const char* const bip39_strength_text[3] = {
  24. "12",
  25. "18",
  26. "24",
  27. };
  28. const uint32_t bip39_strength_value[3] = {
  29. FlipBipStrength128,
  30. FlipBipStrength192,
  31. FlipBipStrength256,
  32. };
  33. const char* const passphrase_text[2] = {
  34. TEXT_LABEL_OFF,
  35. TEXT_LABEL_ON,
  36. };
  37. const uint32_t passphrase_value[2] = {
  38. FlipBipPassphraseOff,
  39. FlipBipPassphraseOn,
  40. };
  41. static void flipbip_scene_settings_set_haptic(VariableItem* item) {
  42. FlipBip* app = variable_item_get_context(item);
  43. uint8_t index = variable_item_get_current_value_index(item);
  44. variable_item_set_current_value_text(item, haptic_text[index]);
  45. app->haptic = haptic_value[index];
  46. }
  47. static void flipbip_scene_settings_set_led(VariableItem* item) {
  48. FlipBip* app = variable_item_get_context(item);
  49. uint8_t index = variable_item_get_current_value_index(item);
  50. variable_item_set_current_value_text(item, led_text[index]);
  51. app->led = led_value[index];
  52. }
  53. static void flipbip_scene_settings_set_bip39_strength(VariableItem* item) {
  54. FlipBip* app = variable_item_get_context(item);
  55. uint8_t index = variable_item_get_current_value_index(item);
  56. variable_item_set_current_value_text(item, bip39_strength_text[index]);
  57. app->bip39_strength = bip39_strength_value[index];
  58. }
  59. static void flipbip_scene_settings_set_passphrase(VariableItem* item) {
  60. FlipBip* app = variable_item_get_context(item);
  61. uint8_t index = variable_item_get_current_value_index(item);
  62. variable_item_set_current_value_text(item, passphrase_text[index]);
  63. app->passphrase = passphrase_value[index];
  64. if(app->passphrase == FlipBipPassphraseOn) {
  65. app->input_state = FlipBipTextInputPassphrase;
  66. text_input_set_header_text(app->text_input, "Enter BIP39 passphrase");
  67. view_dispatcher_switch_to_view(app->view_dispatcher, FlipBipViewIdTextInput);
  68. } else {
  69. memzero(app->passphrase_text, TEXT_BUFFER_SIZE);
  70. }
  71. }
  72. void flipbip_scene_settings_submenu_callback(void* context, uint32_t index) {
  73. FlipBip* app = context;
  74. view_dispatcher_send_custom_event(app->view_dispatcher, index);
  75. }
  76. void flipbip_scene_settings_on_enter(void* context) {
  77. FlipBip* app = context;
  78. VariableItem* item;
  79. uint8_t value_index;
  80. // BIP39 strength
  81. item = variable_item_list_add(
  82. app->variable_item_list, "BIP39 Words:", 3, flipbip_scene_settings_set_bip39_strength, app);
  83. value_index = value_index_uint32(app->bip39_strength, bip39_strength_value, 3);
  84. variable_item_set_current_value_index(item, value_index);
  85. variable_item_set_current_value_text(item, bip39_strength_text[value_index]);
  86. // Passphrase
  87. item = variable_item_list_add(
  88. app->variable_item_list,
  89. "BIP39 Passphrase:",
  90. 2,
  91. flipbip_scene_settings_set_passphrase,
  92. app);
  93. value_index = value_index_uint32(app->passphrase, passphrase_value, 2);
  94. variable_item_set_current_value_index(item, value_index);
  95. variable_item_set_current_value_text(item, passphrase_text[value_index]);
  96. // Vibro on/off
  97. item = variable_item_list_add(
  98. app->variable_item_list, "Vibro/Haptic:", 2, flipbip_scene_settings_set_haptic, app);
  99. value_index = value_index_uint32(app->haptic, haptic_value, 2);
  100. variable_item_set_current_value_index(item, value_index);
  101. variable_item_set_current_value_text(item, haptic_text[value_index]);
  102. // LED Effects on/off
  103. item = variable_item_list_add(
  104. app->variable_item_list, "LED FX:", 2, flipbip_scene_settings_set_led, app);
  105. value_index = value_index_uint32(app->led, led_value, 2);
  106. variable_item_set_current_value_index(item, value_index);
  107. variable_item_set_current_value_text(item, led_text[value_index]);
  108. view_dispatcher_switch_to_view(app->view_dispatcher, FlipBipViewIdSettings);
  109. }
  110. bool flipbip_scene_settings_on_event(void* context, SceneManagerEvent event) {
  111. FlipBip* app = context;
  112. UNUSED(app);
  113. bool consumed = false;
  114. if(event.type == SceneManagerEventTypeCustom) {
  115. }
  116. return consumed;
  117. }
  118. void flipbip_scene_settings_on_exit(void* context) {
  119. FlipBip* app = context;
  120. variable_item_list_set_selected_item(app->variable_item_list, 0);
  121. variable_item_list_reset(app->variable_item_list);
  122. }