uhf_scene_verify.c 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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. UHFResponseData* uhf_response_data = uhf_app->worker->response_data;
  49. UHFData* hardware_version = uhf_response_data_get_uhf_data(uhf_response_data, 0);
  50. UHFData* software_version = uhf_response_data_get_uhf_data(uhf_response_data, 1);
  51. UHFData* manufacturer = uhf_response_data_get_uhf_data(uhf_response_data, 2);
  52. uint offset = 6;
  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. for(int i = 0; i < (int)hardware_version->data[4]; i++) {
  58. furi_string_cat_printf(temp_str, "%c", hardware_version->data[offset + i]);
  59. }
  60. widget_add_string_element(
  61. uhf_app->widget,
  62. 1,
  63. 15,
  64. AlignLeft,
  65. AlignTop,
  66. FontSecondary,
  67. furi_string_get_cstr(temp_str));
  68. furi_string_reset(temp_str);
  69. // software info
  70. furi_string_cat_str(temp_str, "SW Version: ");
  71. for(int i = 0; i < (int)software_version->data[4]; i++) {
  72. furi_string_cat_printf(temp_str, "%c", software_version->data[offset + i]);
  73. }
  74. widget_add_string_element(
  75. uhf_app->widget,
  76. 1,
  77. 27,
  78. AlignLeft,
  79. AlignTop,
  80. FontSecondary,
  81. furi_string_get_cstr(temp_str));
  82. furi_string_reset(temp_str);
  83. // manufacturer info
  84. furi_string_cat_str(temp_str, "Manufacturer: ");
  85. for(int i = 0; i < (int)manufacturer->data[4]; i++) {
  86. furi_string_cat_printf(temp_str, "%c", manufacturer->data[offset + i]);
  87. }
  88. widget_add_string_element(
  89. uhf_app->widget,
  90. 1,
  91. 39,
  92. AlignLeft,
  93. AlignTop,
  94. FontSecondary,
  95. furi_string_get_cstr(temp_str));
  96. widget_add_button_element(
  97. uhf_app->widget,
  98. GuiButtonTypeRight,
  99. "Continue",
  100. uhf_scene_verify_widget_callback,
  101. uhf_app);
  102. } else {
  103. widget_add_string_element(
  104. uhf_app->widget,
  105. 64,
  106. 5,
  107. AlignCenter,
  108. AlignCenter,
  109. FontPrimary,
  110. "No UHF Module found");
  111. widget_add_string_multiline_element(
  112. uhf_app->widget,
  113. 64,
  114. 30,
  115. AlignCenter,
  116. AlignCenter,
  117. FontSecondary,
  118. "Please connect your module.\nPlease refer to the frux-c/uhf_rfid for help.");
  119. widget_add_button_element(
  120. uhf_app->widget,
  121. GuiButtonTypeLeft,
  122. "Retry",
  123. uhf_scene_verify_widget_callback,
  124. uhf_app);
  125. widget_add_button_element(
  126. uhf_app->widget,
  127. GuiButtonTypeRight,
  128. "Skip",
  129. uhf_scene_verify_widget_callback,
  130. uhf_app);
  131. }
  132. }
  133. }
  134. return consumed;
  135. }
  136. void uhf_scene_verify_on_exit(void* ctx) {
  137. UHFApp* uhf_app = ctx;
  138. // Clear string
  139. furi_string_free(temp_str);
  140. // Stop worker
  141. uhf_worker_stop(uhf_app->worker);
  142. // Clear view
  143. // popup_reset(uhf_app->popup);
  144. // clear widget
  145. widget_reset(uhf_app->widget);
  146. }