lfrfid_view_read.c 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #include "lfrfid_view_read.h"
  2. #include <gui/elements.h>
  3. #include <assets_icons.h>
  4. #define TEMP_STR_LEN 128
  5. struct LfRfidReadView {
  6. View* view;
  7. };
  8. typedef struct {
  9. IconAnimation* icon;
  10. LfRfidReadViewMode read_mode;
  11. } LfRfidReadViewModel;
  12. static void lfrfid_view_read_draw_callback(Canvas* canvas, void* _model) {
  13. LfRfidReadViewModel* model = _model;
  14. canvas_set_color(canvas, ColorBlack);
  15. canvas_draw_icon(canvas, 0, 8, &I_NFC_manual_60x50);
  16. canvas_set_font(canvas, FontPrimary);
  17. if(model->read_mode == LfRfidReadAsk) {
  18. canvas_draw_str(canvas, 70, 16, "Reading 1/2");
  19. canvas_draw_str(canvas, 77, 29, "ASK");
  20. canvas_draw_icon(canvas, 70, 22, &I_ButtonRight_4x7);
  21. canvas_draw_icon_animation(canvas, 102, 21, model->icon);
  22. canvas_set_font(canvas, FontSecondary);
  23. canvas_draw_str(canvas, 77, 43, "PSK");
  24. } else if(model->read_mode == LfRfidReadPsk) {
  25. canvas_draw_str(canvas, 70, 16, "Reading 2/2");
  26. canvas_draw_str(canvas, 77, 43, "PSK");
  27. canvas_draw_icon(canvas, 70, 36, &I_ButtonRight_4x7);
  28. canvas_draw_icon_animation(canvas, 102, 35, model->icon);
  29. canvas_set_font(canvas, FontSecondary);
  30. canvas_draw_str(canvas, 77, 29, "ASK");
  31. } else {
  32. canvas_draw_str(canvas, 72, 16, "Reading");
  33. if(model->read_mode == LfRfidReadAskOnly) {
  34. canvas_draw_str(canvas, 77, 35, "ASK");
  35. } else {
  36. canvas_draw_str(canvas, 77, 35, "PSK");
  37. }
  38. canvas_draw_icon_animation(canvas, 102, 27, model->icon);
  39. }
  40. canvas_set_font(canvas, FontSecondary);
  41. canvas_draw_str(canvas, 61, 56, "Don't move card");
  42. }
  43. void lfrfid_view_read_enter(void* context) {
  44. LfRfidReadView* read_view = context;
  45. with_view_model(
  46. read_view->view, LfRfidReadViewModel * model, { icon_animation_start(model->icon); }, true);
  47. }
  48. void lfrfid_view_read_exit(void* context) {
  49. LfRfidReadView* read_view = context;
  50. with_view_model(
  51. read_view->view, LfRfidReadViewModel * model, { icon_animation_stop(model->icon); }, false);
  52. }
  53. LfRfidReadView* lfrfid_view_read_alloc() {
  54. LfRfidReadView* read_view = malloc(sizeof(LfRfidReadView));
  55. read_view->view = view_alloc();
  56. view_set_context(read_view->view, read_view);
  57. view_allocate_model(read_view->view, ViewModelTypeLocking, sizeof(LfRfidReadViewModel));
  58. with_view_model(
  59. read_view->view,
  60. LfRfidReadViewModel * model,
  61. {
  62. model->icon = icon_animation_alloc(&A_Round_loader_8x8);
  63. view_tie_icon_animation(read_view->view, model->icon);
  64. },
  65. false);
  66. view_set_draw_callback(read_view->view, lfrfid_view_read_draw_callback);
  67. view_set_enter_callback(read_view->view, lfrfid_view_read_enter);
  68. view_set_exit_callback(read_view->view, lfrfid_view_read_exit);
  69. return read_view;
  70. }
  71. void lfrfid_view_read_free(LfRfidReadView* read_view) {
  72. with_view_model(
  73. read_view->view, LfRfidReadViewModel * model, { icon_animation_free(model->icon); }, false);
  74. view_free(read_view->view);
  75. free(read_view);
  76. }
  77. View* lfrfid_view_read_get_view(LfRfidReadView* read_view) {
  78. return read_view->view;
  79. }
  80. void lfrfid_view_read_set_read_mode(LfRfidReadView* read_view, LfRfidReadViewMode mode) {
  81. with_view_model(
  82. read_view->view,
  83. LfRfidReadViewModel * model,
  84. {
  85. icon_animation_stop(model->icon);
  86. icon_animation_start(model->icon);
  87. model->read_mode = mode;
  88. },
  89. true);
  90. }