display.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #include "display.h"
  2. #include "config.h"
  3. #include "logo.h"
  4. // ---------------------------------------------------------------------------
  5. // Helpers
  6. // ---------------------------------------------------------------------------
  7. static void drawStatusScreen(TFT_eSPI &tft,
  8. uint16_t bgColour,
  9. uint16_t letterColour,
  10. const char *letter) {
  11. tft.fillScreen(bgColour);
  12. // Outer ring
  13. tft.drawCircle(DISPLAY_CX, DISPLAY_CY, DISPLAY_RADIUS, COL_RING);
  14. tft.drawCircle(DISPLAY_CX, DISPLAY_CY, DISPLAY_RADIUS - 1, COL_RING);
  15. tft.drawCircle(DISPLAY_CX, DISPLAY_CY, DISPLAY_RADIUS - 2, COL_RING);
  16. tft.drawCircle(DISPLAY_CX, DISPLAY_CY, DISPLAY_RADIUS - 3, COL_RING);
  17. // "SYSTEM" label
  18. tft.setTextDatum(MC_DATUM);
  19. tft.setTextFont(4);
  20. tft.setTextSize(1);
  21. tft.setTextColor(COL_LABEL, bgColour);
  22. tft.drawString("SYSTEM", DISPLAY_CX, 72);
  23. // Separator line under label
  24. tft.drawFastHLine(DISPLAY_CX - 55, 88, 110, COL_LABEL);
  25. // Large system letter (A or B)
  26. tft.setTextFont(4);
  27. tft.setTextSize(3);
  28. tft.setTextColor(letterColour, bgColour);
  29. tft.setTextDatum(MC_DATUM);
  30. tft.drawString(letter, DISPLAY_CX, 135);
  31. // Separator line above ACTIVE
  32. tft.drawFastHLine(DISPLAY_CX - 55, 164, 110, COL_LABEL);
  33. // "ACTIVE" label
  34. tft.setTextFont(4);
  35. tft.setTextSize(1);
  36. tft.setTextColor(COL_LABEL, bgColour);
  37. tft.drawString("ACTIVE", DISPLAY_CX, 185);
  38. }
  39. // ---------------------------------------------------------------------------
  40. // Public API
  41. // ---------------------------------------------------------------------------
  42. void displayShowSplash(TFT_eSPI &tft) {
  43. tft.fillScreen(TFT_BLACK);
  44. tft.setTextDatum(MC_DATUM);
  45. // "MMC" — large
  46. tft.setTextFont(4);
  47. tft.setTextSize(1);
  48. tft.setTextColor(TFT_WHITE, TFT_BLACK);
  49. tft.drawString("MMC", DISPLAY_CX, 80);
  50. // "SCOTTSDALE"
  51. tft.drawString("SCOTTSDALE", DISPLAY_CX, 120);
  52. // "2026"
  53. tft.drawString("2026", DISPLAY_CX, 160);
  54. tft.setTextSize(1);
  55. delay(SPLASH_MS);
  56. }
  57. void displayInit(TFT_eSPI &tft) {
  58. tft.init();
  59. tft.setRotation(0);
  60. tft.fillScreen(TFT_BLACK);
  61. }
  62. void displayShowLogo(TFT_eSPI &tft) {
  63. drawLogo(tft);
  64. }
  65. void displayBlank(TFT_eSPI &tft) {
  66. tft.fillScreen(TFT_BLACK);
  67. }
  68. void displayShowSystemA(TFT_eSPI &tft) {
  69. drawStatusScreen(tft, COL_BG_SYS_A, COL_LETTER_A, "A");
  70. }
  71. void displayShowSystemB(TFT_eSPI &tft) {
  72. drawStatusScreen(tft, COL_BG_SYS_B, COL_LETTER_B, "B");
  73. }