uhf_scene_verify.c 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. #include "../uhf_app_i.h"
  2. bool verify_success = false;
  3. FuriString* temp_str;
  4. void uhf_scene_verify_callback_event(UHFWorkerEvent event, void* ctx) {
  5. UNUSED(ctx);
  6. UHFApp* uhf_app = ctx;
  7. if(event == UHFWorkerEventSuccess) verify_success = true;
  8. view_dispatcher_send_custom_event(uhf_app->view_dispatcher, UHFCustomEventVerifyDone);
  9. }
  10. void uhf_scene_verify_widget_callback(GuiButtonType result, InputType type, void* ctx) {
  11. furi_assert(ctx);
  12. UHFApp* uhf_app = ctx;
  13. if(type == InputTypeShort) {
  14. view_dispatcher_send_custom_event(uhf_app->view_dispatcher, result);
  15. }
  16. }
  17. void uhf_scene_verify_on_enter(void* ctx) {
  18. UHFApp* uhf_app = ctx;
  19. uhf_worker_start(
  20. uhf_app->worker, UHFWorkerStateVerify, uhf_scene_verify_callback_event, uhf_app);
  21. temp_str = furi_string_alloc();
  22. view_dispatcher_switch_to_view(uhf_app->view_dispatcher, UHFViewWidget);
  23. }
  24. bool uhf_scene_verify_on_event(void* ctx, SceneManagerEvent event) {
  25. UHFApp* uhf_app = ctx;
  26. bool consumed = false;
  27. if(event.event == SceneManagerEventTypeBack) {
  28. uhf_app->worker->state = UHFWorkerStateStop;
  29. } else if(event.type == SceneManagerEventTypeCustom) {
  30. if(event.event == GuiButtonTypeRight) {
  31. scene_manager_next_scene(uhf_app->scene_manager, UHFSceneStart);
  32. consumed = true;
  33. } else if(event.event == GuiButtonTypeLeft) {
  34. if(!verify_success) {
  35. widget_reset(uhf_app->widget);
  36. furi_string_reset(temp_str);
  37. uhf_worker_stop(uhf_app->worker);
  38. uhf_worker_start(
  39. uhf_app->worker,
  40. UHFWorkerStateVerify,
  41. uhf_scene_verify_callback_event,
  42. uhf_app);
  43. }
  44. } else if(event.event == UHFCustomEventVerifyDone) {
  45. if(verify_success) {
  46. widget_reset(uhf_app->widget);
  47. furi_string_reset(temp_str);
  48. M100Module* module = uhf_app->worker->module;
  49. widget_add_string_element(
  50. uhf_app->widget, 64, 5, AlignCenter, AlignCenter, FontPrimary, "Module Info");
  51. // hardware info
  52. furi_string_cat_str(temp_str, "HW Version: ");
  53. furi_string_cat_str(temp_str, module->info->hw_version);
  54. widget_add_string_element(
  55. uhf_app->widget,
  56. 1,
  57. 15,
  58. AlignLeft,
  59. AlignTop,
  60. FontSecondary,
  61. furi_string_get_cstr(temp_str));
  62. furi_string_reset(temp_str);
  63. // software info
  64. furi_string_cat_str(temp_str, "SW Version: ");
  65. furi_string_cat_str(temp_str, module->info->sw_version);
  66. widget_add_string_element(
  67. uhf_app->widget,
  68. 1,
  69. 27,
  70. AlignLeft,
  71. AlignTop,
  72. FontSecondary,
  73. furi_string_get_cstr(temp_str));
  74. furi_string_reset(temp_str);
  75. // manufacturer info
  76. furi_string_cat_str(temp_str, "Manufacturer: ");
  77. furi_string_cat_str(temp_str, module->info->manufacturer);
  78. widget_add_string_element(
  79. uhf_app->widget,
  80. 1,
  81. 39,
  82. AlignLeft,
  83. AlignTop,
  84. FontSecondary,
  85. furi_string_get_cstr(temp_str));
  86. widget_add_button_element(
  87. uhf_app->widget,
  88. GuiButtonTypeRight,
  89. "Continue",
  90. uhf_scene_verify_widget_callback,
  91. uhf_app);
  92. } else {
  93. widget_add_string_element(
  94. uhf_app->widget,
  95. 64,
  96. 5,
  97. AlignCenter,
  98. AlignCenter,
  99. FontPrimary,
  100. "No UHF Module found");
  101. widget_add_string_multiline_element(
  102. uhf_app->widget,
  103. 64,
  104. 30,
  105. AlignCenter,
  106. AlignCenter,
  107. FontSecondary,
  108. "Please connect your module.\nPlease refer to the git@frux-c/uhf_rfid for help.");
  109. widget_add_button_element(
  110. uhf_app->widget,
  111. GuiButtonTypeLeft,
  112. "Retry",
  113. uhf_scene_verify_widget_callback,
  114. uhf_app);
  115. widget_add_button_element(
  116. uhf_app->widget,
  117. GuiButtonTypeRight,
  118. "Skip",
  119. uhf_scene_verify_widget_callback,
  120. uhf_app);
  121. }
  122. }
  123. }
  124. return consumed;
  125. }
  126. void uhf_scene_verify_on_exit(void* ctx) {
  127. UHFApp* uhf_app = ctx;
  128. // Clear string
  129. furi_string_free(temp_str);
  130. // Stop worker
  131. uhf_worker_stop(uhf_app->worker);
  132. // Clear view
  133. // popup_reset(uhf_app->popup);
  134. // clear widget
  135. widget_reset(uhf_app->widget);
  136. }