General_view.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #include "UnitempViews.h"
  2. static View* view;
  3. // const uint8_t temp_positions
  4. // static void
  5. // _draw_noSensors(Canvas* canvas) {
  6. // canvas_draw_str(canvas, 0, 24, "Sensors not found");
  7. // }
  8. static void _draw_temp(float temp, uint8_t pos) {
  9. }
  10. static void _draw_sensorsCarousel(Canvas* canvas) {
  11. static uint8_t sensor_index = 0;
  12. //Рисование рамки
  13. canvas_draw_rframe(canvas, 3, 0, 122, 63, 7);
  14. canvas_draw_rframe(canvas, 3, 0, 122, 64, 7);
  15. //Печать имени
  16. canvas_set_font(canvas, FontPrimary);
  17. canvas_draw_str_aligned(
  18. canvas, 64, 7, AlignCenter, AlignCenter, app->sensors[sensor_index]->name);
  19. //Подчёркивание
  20. uint8_t line_len = canvas_string_width(canvas, app->sensors[sensor_index]->name) + 2;
  21. canvas_draw_line(canvas, 64 - line_len / 2, 12, 64 + line_len / 2, 12);
  22. //Печать значения температуры
  23. _draw_temp(app->sensors[sensor_index]->temp, 0);
  24. }
  25. static void _draw_callback(Canvas* canvas, void* _model) {
  26. UNUSED(_model);
  27. app->sensors_ready = true;
  28. uint8_t sensors_count = unitemp_sensors_getCount();
  29. if(sensors_count == 0) {
  30. _draw_noSensors(canvas);
  31. }
  32. if(sensors_count > 0) {
  33. _draw_sensorsCarousel(canvas);
  34. }
  35. // //Рисование бара
  36. // canvas_draw_box(canvas, 0, 0, 128, 14);
  37. // canvas_set_color(canvas, ColorWhite);
  38. // canvas_set_font(canvas, FontPrimary);
  39. // canvas_draw_str_aligned(canvas, 64, 7, AlignCenter, AlignCenter, "Unitemp");
  40. // canvas_set_color(canvas, ColorBlack);
  41. // if(unitemp_sensors_getCount() > 0) {
  42. // for(uint8_t i = 0; i < unitemp_sensors_getCount(); i++) {
  43. // canvas_set_font(canvas, FontPrimary);
  44. // canvas_draw_str(canvas, 0, 24 + 10 * i, app->sensors[i]->name);
  45. // canvas_set_font(canvas, FontSecondary);
  46. // if(app->sensors[i]->status != UT_OK && app->sensors[i]->status != UT_EARLYPOOL &&
  47. // app->sensors[i]->status != UT_POLLING) {
  48. // if(app->sensors[i]->status == UT_BADCRC) {
  49. // canvas_draw_str(canvas, 96, 24 + 10 * i, "bad CRC");
  50. // } else {
  51. // canvas_draw_str(canvas, 96, 24 + 10 * i, "timeout");
  52. // }
  53. // } else {
  54. // char buff[20];
  55. // snprintf(
  56. // buff,
  57. // sizeof(buff),
  58. // "%2.1f*%c/%d%%",
  59. // (double)app->sensors[i]->temp,
  60. // app->settings.unit == CELSIUS ? 'C' : 'F',
  61. // (int8_t)app->sensors[i]->hum);
  62. // canvas_draw_str(canvas, 64, 24 + 10 * i, buff);
  63. // }
  64. // }
  65. // } else {
  66. // canvas_set_font(canvas, FontSecondary);
  67. // if(unitemp_sensors_getCount() == 0) canvas_draw_str(canvas, 0, 24, "Sensors not found");
  68. // }
  69. }
  70. static bool _input_callback(InputEvent* event, void* context) {
  71. Unitemp* app = context;
  72. //Выход по короткому нажатию "назад"
  73. if(event->key == InputKeyBack && event->type == InputTypeShort) {
  74. app->processing = false;
  75. }
  76. //Вход в главное меню по короткому нажатию "Ок"
  77. if(event->key == InputKeyOk && event->type == InputTypeShort) {
  78. app->sensors_ready = false;
  79. unitemp_MainMenu_switch();
  80. }
  81. return true;
  82. }
  83. void unitemp_General_alloc(void) {
  84. view = view_alloc();
  85. view_set_context(view, app);
  86. view_set_draw_callback(view, _draw_callback);
  87. view_set_input_callback(view, _input_callback);
  88. view_dispatcher_add_view(app->view_dispatcher, GENERAL_VIEW, view);
  89. }
  90. void unitemp_General_switch(void) {
  91. app->sensors_ready = true;
  92. view_dispatcher_switch_to_view(app->view_dispatcher, GENERAL_VIEW);
  93. }
  94. void unitemp_General_free(void) {
  95. view_free(view);
  96. }