spi_mem_scene_chip_detect_fail.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include "../spi_mem_app_i.h"
  2. #include "../lib/spi/spi_mem_chip.h"
  3. static void spi_mem_scene_chip_detect_fail_widget_callback(
  4. GuiButtonType result,
  5. InputType type,
  6. void* context) {
  7. SPIMemApp* app = context;
  8. if(type == InputTypeShort) {
  9. view_dispatcher_send_custom_event(app->view_dispatcher, result);
  10. }
  11. }
  12. void spi_mem_scene_chip_detect_fail_on_enter(void* context) {
  13. SPIMemApp* app = context;
  14. FuriString* str = furi_string_alloc();
  15. widget_add_button_element(
  16. app->widget,
  17. GuiButtonTypeCenter,
  18. "Retry",
  19. spi_mem_scene_chip_detect_fail_widget_callback,
  20. app);
  21. widget_add_string_element(
  22. app->widget, 64, 9, AlignCenter, AlignBottom, FontPrimary, "Detected");
  23. widget_add_string_element(
  24. app->widget, 64, 20, AlignCenter, AlignBottom, FontPrimary, "unknown SPI chip");
  25. furi_string_printf(str, "Vendor\nid: 0x%02X", spi_mem_chip_get_vendor_id(app->chip_info));
  26. widget_add_string_multiline_element(
  27. app->widget, 16, 44, AlignCenter, AlignBottom, FontSecondary, furi_string_get_cstr(str));
  28. furi_string_printf(str, "Type\nid: 0x%02X", spi_mem_chip_get_type_id(app->chip_info));
  29. widget_add_string_multiline_element(
  30. app->widget, 64, 44, AlignCenter, AlignBottom, FontSecondary, furi_string_get_cstr(str));
  31. furi_string_printf(str, "Capacity\nid: 0x%02X", spi_mem_chip_get_capacity_id(app->chip_info));
  32. widget_add_string_multiline_element(
  33. app->widget, 110, 44, AlignCenter, AlignBottom, FontSecondary, furi_string_get_cstr(str));
  34. furi_string_free(str);
  35. view_dispatcher_switch_to_view(app->view_dispatcher, SPIMemViewWidget);
  36. }
  37. bool spi_mem_scene_chip_detect_fail_on_event(void* context, SceneManagerEvent event) {
  38. SPIMemApp* app = context;
  39. bool success = false;
  40. if(event.type == SceneManagerEventTypeBack) {
  41. success = true;
  42. scene_manager_search_and_switch_to_previous_scene(app->scene_manager, SPIMemSceneStart);
  43. } else if(event.type == SceneManagerEventTypeCustom) {
  44. success = true;
  45. if(event.event == GuiButtonTypeCenter) {
  46. scene_manager_previous_scene(app->scene_manager);
  47. }
  48. }
  49. return success;
  50. }
  51. void spi_mem_scene_chip_detect_fail_on_exit(void* context) {
  52. SPIMemApp* app = context;
  53. widget_reset(app->widget);
  54. }