spi_mem_view_detect.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include "spi_mem_view_detect.h"
  2. #include "spi_mem_manager_icons.h"
  3. #include <gui/elements.h>
  4. #include <assets_icons.h>
  5. struct SPIMemDetectView {
  6. View* view;
  7. IconAnimation* icon;
  8. SPIMemDetectViewCallback callback;
  9. void* cb_ctx;
  10. };
  11. typedef struct {
  12. IconAnimation* icon;
  13. } SPIMemDetectViewModel;
  14. View* spi_mem_view_detect_get_view(SPIMemDetectView* app) {
  15. return app->view;
  16. }
  17. static void spi_mem_view_detect_draw_callback(Canvas* canvas, void* context) {
  18. SPIMemDetectViewModel* model = context;
  19. canvas_set_font(canvas, FontPrimary);
  20. canvas_draw_icon_animation(canvas, 0, 0, model->icon);
  21. canvas_draw_str_aligned(canvas, 64, 26, AlignLeft, AlignCenter, "Detecting");
  22. canvas_draw_str_aligned(canvas, 64, 36, AlignLeft, AlignCenter, "SPI chip...");
  23. }
  24. static void spi_mem_view_detect_enter_callback(void* context) {
  25. SPIMemDetectView* app = context;
  26. with_view_model(
  27. app->view, SPIMemDetectViewModel * model, { icon_animation_start(model->icon); }, false);
  28. }
  29. static void spi_mem_view_detect_exit_callback(void* context) {
  30. SPIMemDetectView* app = context;
  31. with_view_model(
  32. app->view, SPIMemDetectViewModel * model, { icon_animation_stop(model->icon); }, false);
  33. }
  34. SPIMemDetectView* spi_mem_view_detect_alloc() {
  35. SPIMemDetectView* app = malloc(sizeof(SPIMemDetectView));
  36. app->view = view_alloc();
  37. view_set_context(app->view, app);
  38. view_allocate_model(app->view, ViewModelTypeLocking, sizeof(SPIMemDetectViewModel));
  39. with_view_model(
  40. app->view,
  41. SPIMemDetectViewModel * model,
  42. {
  43. model->icon = icon_animation_alloc(&A_ChipLooking_64x64);
  44. view_tie_icon_animation(app->view, model->icon);
  45. },
  46. false);
  47. view_set_draw_callback(app->view, spi_mem_view_detect_draw_callback);
  48. view_set_enter_callback(app->view, spi_mem_view_detect_enter_callback);
  49. view_set_exit_callback(app->view, spi_mem_view_detect_exit_callback);
  50. return app;
  51. }
  52. void spi_mem_view_detect_free(SPIMemDetectView* app) {
  53. with_view_model(
  54. app->view, SPIMemDetectViewModel * model, { icon_animation_free(model->icon); }, false);
  55. view_free(app->view);
  56. free(app);
  57. }