meal_pager_transmit.c 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  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. } Meal_PagerTransmitModel;
  23. void meal_pager_transmit_set_callback(
  24. Meal_PagerTransmit* instance,
  25. Meal_PagerTransmitCallback callback,
  26. void* context) {
  27. furi_assert(instance);
  28. furi_assert(callback);
  29. instance->callback = callback;
  30. instance->context = context;
  31. }
  32. void meal_pager_transmit_draw(Canvas* canvas, Meal_PagerTransmitModel* model) {
  33. UNUSED(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(canvas, 0, 10, AlignLeft, AlignTop, pager_type_text_long[model->pager_type]);
  44. canvas_set_font(canvas, FontSecondary);
  45. canvas_draw_str_aligned(canvas, 0, 22, AlignLeft, AlignTop, "Generating Data");
  46. canvas_draw_str_aligned(canvas, 0, 32, AlignLeft, AlignTop, stationText);
  47. canvas_draw_str_aligned(canvas, 0, 42, AlignLeft, AlignTop, pagerText);
  48. }
  49. static void meal_pager_transmit_model_init(Meal_PagerTransmitModel* const model) {
  50. FURI_LOG_D(TAG, "Scene 1 Model Init");
  51. model->pager_type = 0;
  52. model->station = 0;
  53. model->pager = 0;
  54. }
  55. void meal_pager_transmit_model_set_type(Meal_PagerTransmit* instance, uint32_t type) {
  56. furi_assert(instance);
  57. Meal_PagerTransmitModel* model = view_get_model(instance->view);
  58. model->pager_type = type;
  59. view_commit_model(instance->view, false);
  60. }
  61. void meal_pager_transmit_model_set_station(Meal_PagerTransmit* instance, uint32_t station) {
  62. furi_assert(instance);
  63. Meal_PagerTransmitModel* model = view_get_model(instance->view);
  64. model->station = station;
  65. view_commit_model(instance->view, false);
  66. with_view_model(
  67. instance->view,
  68. Meal_PagerTransmitModel* model,
  69. {
  70. UNUSED(model);
  71. },
  72. true);
  73. }
  74. void meal_pager_transmit_model_set_pager(Meal_PagerTransmit* instance, uint32_t pager) {
  75. furi_assert(instance);
  76. Meal_PagerTransmitModel* model = view_get_model(instance->view);
  77. model->pager = pager;
  78. view_commit_model(instance->view, false);
  79. with_view_model(
  80. instance->view,
  81. Meal_PagerTransmitModel* model,
  82. {
  83. UNUSED(model);
  84. },
  85. true);
  86. }
  87. bool meal_pager_transmit_input(InputEvent* event, void* context) {
  88. furi_assert(context);
  89. Meal_PagerTransmit* instance = context;
  90. if (event->type == InputTypeRelease) {
  91. switch(event->key) {
  92. case InputKeyBack:
  93. with_view_model(
  94. instance->view,
  95. Meal_PagerTransmitModel * model,
  96. {
  97. UNUSED(model);
  98. instance->callback(Meal_PagerCustomEventTransmitBack, instance->context);
  99. },
  100. true);
  101. break;
  102. case InputKeyLeft:
  103. case InputKeyRight:
  104. case InputKeyUp:
  105. case InputKeyDown:
  106. case InputKeyOk:
  107. with_view_model(
  108. instance->view,
  109. Meal_PagerTransmitModel* model,
  110. {
  111. UNUSED(model);
  112. },
  113. true);
  114. break;
  115. case InputKeyMAX:
  116. break;
  117. }
  118. }
  119. return true;
  120. }
  121. void meal_pager_transmit_exit(void* context) {
  122. furi_assert(context);
  123. FURI_LOG_D(TAG, "Scene 1 Exit");
  124. }
  125. void meal_pager_transmit_enter(void* context) {
  126. FURI_LOG_D(TAG, "Scene 1 Enter");
  127. furi_assert(context);
  128. Meal_PagerTransmit* instance = (Meal_PagerTransmit*)context;
  129. with_view_model(
  130. instance->view,
  131. Meal_PagerTransmitModel * model,
  132. {
  133. UNUSED(model);
  134. },
  135. true
  136. );
  137. }
  138. Meal_PagerTransmit* meal_pager_transmit_alloc(void* context) {
  139. FURI_LOG_D(TAG, "Scene 1 Alloc");
  140. furi_assert(context);
  141. Meal_PagerTransmit* instance = malloc(sizeof(Meal_PagerTransmit));
  142. instance->view = view_alloc();
  143. view_allocate_model(instance->view, ViewModelTypeLocking, sizeof(Meal_PagerTransmitModel));
  144. view_set_context(instance->view, instance); // furi_assert crashes in events without this
  145. view_set_draw_callback(instance->view, (ViewDrawCallback)meal_pager_transmit_draw);
  146. view_set_input_callback(instance->view, meal_pager_transmit_input);
  147. view_set_enter_callback(instance->view, meal_pager_transmit_enter);
  148. view_set_exit_callback(instance->view, meal_pager_transmit_exit);
  149. with_view_model(
  150. instance->view,
  151. Meal_PagerTransmitModel * model,
  152. {
  153. meal_pager_transmit_model_init(model);
  154. //meal_pager_transmit_model_set_type(instance, 0);
  155. },
  156. true
  157. );
  158. return instance;
  159. }
  160. void meal_pager_transmit_free(Meal_PagerTransmit* instance) {
  161. FURI_LOG_D(TAG, "Transmit Free");
  162. furi_assert(instance);
  163. with_view_model(
  164. instance->view,
  165. Meal_PagerTransmitModel * model,
  166. {
  167. UNUSED(model);
  168. },
  169. true);
  170. view_free(instance->view);
  171. free(instance);
  172. }
  173. View* meal_pager_transmit_get_view(Meal_PagerTransmit* instance) {
  174. furi_assert(instance);
  175. return instance->view;
  176. }