uhf_scene_verify.c 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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* response_data = uhf_app->worker->data;
  49. UHFData* hardware_version = uhf_response_data_get_uhf_data(response_data, 0);
  50. UHFData* software_version = uhf_response_data_get_uhf_data(response_data, 1);
  51. UHFData* manufacturer = uhf_response_data_get_uhf_data(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 < 10; 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. AlignCenter,
  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 < 10; 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. AlignCenter,
  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 < 10; 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. AlignCenter,
  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_button_element(
  112. uhf_app->widget,
  113. GuiButtonTypeLeft,
  114. "Retry",
  115. uhf_scene_verify_widget_callback,
  116. uhf_app);
  117. widget_add_button_element(
  118. uhf_app->widget,
  119. GuiButtonTypeRight,
  120. "Skip",
  121. uhf_scene_verify_widget_callback,
  122. uhf_app);
  123. }
  124. }
  125. }
  126. return consumed;
  127. }
  128. void uhf_scene_verify_on_exit(void* ctx) {
  129. UHFApp* uhf_app = ctx;
  130. // Clear string
  131. furi_string_free(temp_str);
  132. // Stop worker
  133. uhf_worker_stop(uhf_app->worker);
  134. // Clear view
  135. // popup_reset(uhf_app->popup);
  136. // clear widget
  137. widget_reset(uhf_app->widget);
  138. }