meal_pager_transmit.c 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. #include "../meal_pager_i.h"
  2. #include <furi.h>
  3. #include <furi_hal.h>
  4. #include <input/input.h>
  5. #include <gui/elements.h>
  6. #include <dolphin/dolphin.h>
  7. const char* const pager_type_text_long[4] = {
  8. "Retekess T119",
  9. "Retekess TD157",
  10. "Retekess TD165",
  11. "Retekess TD174",
  12. };
  13. struct Meal_PagerTransmit {
  14. View* view;
  15. Meal_PagerTransmitCallback callback;
  16. void* context;
  17. };
  18. typedef struct {
  19. uint32_t pager_type;
  20. uint32_t station;
  21. uint32_t pager;
  22. uint32_t sending;
  23. } Meal_PagerTransmitModel;
  24. void meal_pager_transmit_set_callback(
  25. Meal_PagerTransmit* instance,
  26. Meal_PagerTransmitCallback callback,
  27. void* context) {
  28. furi_assert(instance);
  29. furi_assert(callback);
  30. instance->callback = callback;
  31. instance->context = context;
  32. }
  33. void meal_pager_transmit_draw(Canvas* canvas, Meal_PagerTransmitModel* model) {
  34. canvas_clear(canvas);
  35. canvas_set_color(canvas, ColorBlack);
  36. canvas_set_font(canvas, FontPrimary);
  37. //char* test = "";
  38. //snprintf(test, 20, "%lu", model->pager_type);
  39. char stationText[20] = "";
  40. char pagerText[20] = "";
  41. snprintf(stationText, 20, "Station: %lu", model->station);
  42. snprintf(pagerText, 20, "Pager: %lu", model->pager);
  43. canvas_draw_str_aligned(
  44. canvas, 0, 10, AlignLeft, AlignTop, pager_type_text_long[model->pager_type]);
  45. canvas_set_font(canvas, FontSecondary);
  46. if(model->sending == 0) {
  47. canvas_draw_str_aligned(canvas, 0, 22, AlignLeft, AlignTop, "Generating Data");
  48. canvas_draw_str_aligned(canvas, 0, 32, AlignLeft, AlignTop, stationText);
  49. canvas_draw_str_aligned(canvas, 0, 42, AlignLeft, AlignTop, pagerText);
  50. } else {
  51. canvas_draw_str_aligned(canvas, 0, 22, AlignLeft, AlignTop, "Sending Data");
  52. }
  53. }
  54. static void meal_pager_transmit_model_init(Meal_PagerTransmitModel* const model) {
  55. FURI_LOG_D(TAG, "Scene 1 Model Init");
  56. model->pager_type = 0;
  57. model->station = 0;
  58. model->pager = 0;
  59. model->sending = 0;
  60. }
  61. void meal_pager_transmit_model_set_type(Meal_PagerTransmit* instance, uint32_t type) {
  62. furi_assert(instance);
  63. Meal_PagerTransmitModel* model = view_get_model(instance->view);
  64. model->pager_type = type;
  65. view_commit_model(instance->view, false);
  66. }
  67. void meal_pager_transmit_model_set_station(Meal_PagerTransmit* instance, uint32_t station) {
  68. furi_assert(instance);
  69. Meal_PagerTransmitModel* model = view_get_model(instance->view);
  70. model->station = station;
  71. view_commit_model(instance->view, false);
  72. with_view_model(
  73. instance->view, Meal_PagerTransmitModel * model, { UNUSED(model); }, true);
  74. }
  75. void meal_pager_transmit_model_set_sending(Meal_PagerTransmit* instance, uint32_t value) {
  76. furi_assert(instance);
  77. Meal_PagerTransmitModel* model = view_get_model(instance->view);
  78. model->sending = value;
  79. view_commit_model(instance->view, false);
  80. with_view_model(
  81. instance->view, Meal_PagerTransmitModel * model, { UNUSED(model); }, true);
  82. }
  83. void meal_pager_transmit_model_set_pager(Meal_PagerTransmit* instance, uint32_t pager) {
  84. furi_assert(instance);
  85. Meal_PagerTransmitModel* model = view_get_model(instance->view);
  86. model->pager = pager;
  87. view_commit_model(instance->view, false);
  88. with_view_model(
  89. instance->view, Meal_PagerTransmitModel * model, { UNUSED(model); }, true);
  90. }
  91. bool meal_pager_transmit_input(InputEvent* event, void* context) {
  92. furi_assert(context);
  93. Meal_PagerTransmit* instance = context;
  94. if(event->type == InputTypeRelease) {
  95. switch(event->key) {
  96. case InputKeyBack:
  97. with_view_model(
  98. instance->view,
  99. Meal_PagerTransmitModel * model,
  100. {
  101. UNUSED(model);
  102. instance->callback(Meal_PagerCustomEventTransmitBack, instance->context);
  103. },
  104. true);
  105. break;
  106. case InputKeyLeft:
  107. case InputKeyRight:
  108. case InputKeyUp:
  109. case InputKeyDown:
  110. case InputKeyOk:
  111. with_view_model(
  112. instance->view, Meal_PagerTransmitModel * model, { UNUSED(model); }, true);
  113. break;
  114. case InputKeyMAX:
  115. break;
  116. }
  117. }
  118. return true;
  119. }
  120. void meal_pager_transmit_exit(void* context) {
  121. furi_assert(context);
  122. FURI_LOG_D(TAG, "Scene 1 Exit");
  123. }
  124. void meal_pager_transmit_enter(void* context) {
  125. FURI_LOG_D(TAG, "Scene 1 Enter");
  126. furi_assert(context);
  127. Meal_PagerTransmit* instance = (Meal_PagerTransmit*)context;
  128. with_view_model(
  129. instance->view, Meal_PagerTransmitModel * model, { UNUSED(model); }, true);
  130. }
  131. Meal_PagerTransmit* meal_pager_transmit_alloc(void* context) {
  132. FURI_LOG_D(TAG, "Scene 1 Alloc");
  133. furi_assert(context);
  134. Meal_PagerTransmit* instance = malloc(sizeof(Meal_PagerTransmit));
  135. instance->view = view_alloc();
  136. view_allocate_model(instance->view, ViewModelTypeLocking, sizeof(Meal_PagerTransmitModel));
  137. view_set_context(instance->view, instance); // furi_assert crashes in events without this
  138. view_set_draw_callback(instance->view, (ViewDrawCallback)meal_pager_transmit_draw);
  139. view_set_input_callback(instance->view, meal_pager_transmit_input);
  140. view_set_enter_callback(instance->view, meal_pager_transmit_enter);
  141. view_set_exit_callback(instance->view, meal_pager_transmit_exit);
  142. with_view_model(
  143. instance->view,
  144. Meal_PagerTransmitModel * model,
  145. {
  146. meal_pager_transmit_model_init(model);
  147. //meal_pager_transmit_model_set_type(instance, 0);
  148. },
  149. true);
  150. return instance;
  151. }
  152. void meal_pager_transmit_free(Meal_PagerTransmit* instance) {
  153. FURI_LOG_D(TAG, "Transmit Free");
  154. furi_assert(instance);
  155. with_view_model(
  156. instance->view, Meal_PagerTransmitModel * model, { UNUSED(model); }, true);
  157. view_free(instance->view);
  158. free(instance);
  159. }
  160. View* meal_pager_transmit_get_view(Meal_PagerTransmit* instance) {
  161. furi_assert(instance);
  162. return instance->view;
  163. }