pocsag_pager_receiver_info.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. #include "pocsag_pager_receiver.h"
  2. #include "../pocsag_pager_app_i.h"
  3. #include "pocsag_pager_icons.h"
  4. #include "../protocols/pcsg_generic.h"
  5. #include <input/input.h>
  6. #include <gui/elements.h>
  7. #define abs(x) ((x) > 0 ? (x) : -(x))
  8. struct PCSGReceiverInfo {
  9. View* view;
  10. };
  11. typedef struct {
  12. FuriString* protocol_name;
  13. PCSGBlockGeneric* generic;
  14. } PCSGReceiverInfoModel;
  15. void pcsg_view_receiver_info_update(PCSGReceiverInfo* pcsg_receiver_info, FlipperFormat* fff) {
  16. furi_assert(pcsg_receiver_info);
  17. furi_assert(fff);
  18. with_view_model(
  19. pcsg_receiver_info->view,
  20. PCSGReceiverInfoModel * model,
  21. {
  22. flipper_format_rewind(fff);
  23. flipper_format_read_string(fff, "Protocol", model->protocol_name);
  24. pcsg_block_generic_deserialize(model->generic, fff);
  25. },
  26. true);
  27. }
  28. void pcsg_view_receiver_info_draw(Canvas* canvas, PCSGReceiverInfoModel* model) {
  29. canvas_clear(canvas);
  30. canvas_set_color(canvas, ColorBlack);
  31. canvas_set_font(canvas, FontSecondary);
  32. if(model->generic->result_ric != NULL) {
  33. elements_text_box(
  34. canvas,
  35. 0,
  36. 0,
  37. 128,
  38. 64,
  39. AlignLeft,
  40. AlignTop,
  41. furi_string_get_cstr(model->generic->result_ric),
  42. false);
  43. }
  44. if(model->generic->result_msg != NULL) {
  45. elements_text_box(
  46. canvas,
  47. 0,
  48. 12,
  49. 128,
  50. 64,
  51. AlignLeft,
  52. AlignTop,
  53. furi_string_get_cstr(model->generic->result_msg),
  54. false);
  55. }
  56. }
  57. bool pcsg_view_receiver_info_input(InputEvent* event, void* context) {
  58. furi_assert(context);
  59. //PCSGReceiverInfo* pcsg_receiver_info = context;
  60. if(event->key == InputKeyBack) {
  61. return false;
  62. }
  63. return true;
  64. }
  65. void pcsg_view_receiver_info_enter(void* context) {
  66. furi_assert(context);
  67. }
  68. void pcsg_view_receiver_info_exit(void* context) {
  69. furi_assert(context);
  70. PCSGReceiverInfo* pcsg_receiver_info = context;
  71. with_view_model(
  72. pcsg_receiver_info->view,
  73. PCSGReceiverInfoModel * model,
  74. { furi_string_reset(model->protocol_name); },
  75. false);
  76. }
  77. PCSGReceiverInfo* pcsg_view_receiver_info_alloc() {
  78. PCSGReceiverInfo* pcsg_receiver_info = malloc(sizeof(PCSGReceiverInfo));
  79. // View allocation and configuration
  80. pcsg_receiver_info->view = view_alloc();
  81. view_allocate_model(
  82. pcsg_receiver_info->view, ViewModelTypeLocking, sizeof(PCSGReceiverInfoModel));
  83. view_set_context(pcsg_receiver_info->view, pcsg_receiver_info);
  84. view_set_draw_callback(
  85. pcsg_receiver_info->view, (ViewDrawCallback)pcsg_view_receiver_info_draw);
  86. view_set_input_callback(pcsg_receiver_info->view, pcsg_view_receiver_info_input);
  87. view_set_enter_callback(pcsg_receiver_info->view, pcsg_view_receiver_info_enter);
  88. view_set_exit_callback(pcsg_receiver_info->view, pcsg_view_receiver_info_exit);
  89. with_view_model(
  90. pcsg_receiver_info->view,
  91. PCSGReceiverInfoModel * model,
  92. {
  93. model->generic = malloc(sizeof(PCSGBlockGeneric));
  94. model->protocol_name = furi_string_alloc();
  95. },
  96. true);
  97. return pcsg_receiver_info;
  98. }
  99. void pcsg_view_receiver_info_free(PCSGReceiverInfo* pcsg_receiver_info) {
  100. furi_assert(pcsg_receiver_info);
  101. with_view_model(
  102. pcsg_receiver_info->view,
  103. PCSGReceiverInfoModel * model,
  104. {
  105. furi_string_free(model->protocol_name);
  106. free(model->generic);
  107. },
  108. false);
  109. view_free(pcsg_receiver_info->view);
  110. free(pcsg_receiver_info);
  111. }
  112. View* pcsg_view_receiver_info_get_view(PCSGReceiverInfo* pcsg_receiver_info) {
  113. furi_assert(pcsg_receiver_info);
  114. return pcsg_receiver_info->view;
  115. }