spi_mem_view_detect.c 2.1 KB

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