uhf_scene_module_info.c 5.4 KB

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