czwartek, 4 czerwca 2020

[38] Arduino - FT801 z biblioteką GameDuino

W tym poście chciałbym opisać sposób obsługi wyświetlacza ze sterownikiem FT801 za pomocą biblioteki GameDuino.



[Źródło: https://store.arduino.cc/usa/arduino-uno-rev3]

Modyfikacja biblioteki:


Biblioteka została w delikatny sposób zmodyfikowana w stosunku do udostępnionej oryginalnej wersji. Zmiany dotyczą obsługi karty SD dla Arduino Uno oraz odczytu plików z czcionkami umieszczonymi na karcie SD. Zmodyfikowana biblioteka jest do pobrania z dysku Google pod tym linkiem.

W celu obsługi biblioteki można skorzystać z książki "Gameduino 2 Tutorial, Reference and Cookbook", która jest ogólnie dostępna w internecie. Można ją znaleźć np. tutaj: https://excamera.com/files/gd2book_v0.pdf

Kalibracja wyświetlacza:



Wyświetlacz można kalibrować na dwa sposoby. Jeden z nich dotyczy wpisywania danych. Drugi sposób polega na uruchomieniu procedury kalibracji self_calibrate(). Gdzie należy nacisnąć odpowiednie punkty na ekranie. Jest to dosyć niewygodne ponieważ należy to wykonać za każdym razem gdy urządzenie/wyświetlacz zostanie uruchomiony.

Funkcja odpowiedzialna za procedurą samo kalibracji wygląda następująco:

  1. void GDClass::self_calibrate(void) {
  2.   cmd_dlstart();
  3.   Clear();
  4.   cmd_text((GD.w / 2), (GD.h / 2), 27, OPT_CENTERX, "Self calibrate procedure");
  5.   cmd_number((GD.w / 2)-(GD.w / 13), (GD.h / 2)+(GD.h / 18), 27, 0, GD.w);
  6.   cmd_number((GD.w / 2)+(GD.w / 80), (GD.h / 2)+(GD.h / 18), 27, 0, GD.h);
  7.   cmd_text(GD.w / 2, (GD.h / 2)+(GD.h / 18), 27, OPT_CENTERX, "x");
  8.   cmd_calibrate();
  9.   finish();
  10.   cmd_loadidentity();
  11.   cmd_dlstart();
  12.   GDTR.flush();
  13. }

Teraz najłatwiejszą opcją jest uruchomienie funkcji delay. Po której należy odczekać na jej zakończenie i dopiero po tym można odczytać dane z rejestrów. Co pozwoli w późniejszym etapie pominąć funkcje samo kalibracji i przyśpieszyć uruchamianie wyświetlacza. Ponieważ procedurę należy powtarzać po każdym uruchomieniu układu.

Poniżej przykład wywołania biblioteki z procedurą samo kalibracji.

  1. Serial.begin(115200);
  2. GD.begin();
  3. GD.h = 272;
  4. GD.w = 480;
  5. //Delay oczekujący na zakończenie procedury samo kalibracji
  6. delay(6000);   
  7. uint8_t arraya[24] = {0x00};
  8. GD.readCalibrationValues(&arraya[0]);
  9. for (int i = 0; i < 24; i++)
  10. {
  11.     Serial.print(i, DEC)
  12.     Serial.print(" - ");
  13.     Serial.println(arraya[i], HEX);
  14. }

  1. void GDClass::readCalibrationValues(uint8_t *array)
  2. {
  3.     for (int i = 0; i < 24; i++)
  4.     {
  5.         *(array + i) = GDTR.rd(REG_TOUCH_TRANSFORM_A + i);
  6.     }
  7. }

Po odczytaniu danych można zmienić dane w pliku GD.h gdzie zostaną uzupełnione dane pobrane przy procedurze kalibracji:

  1. #define USE_SELF_CALIBRATE 1
  2. #define CANNED_CALIBRATION_DATA         0xF8, 0xA4, 0xFF, 0xFF, 0xE9, 0xF6, 0xFF, 0xFF, \
  3.                                         0x2E, 0x4C, 0xE3, 0x01, 0x70, 0x01, 0x00, 0x00, \
  4.                                         0xCE, 0xA3, 0xFF, 0xFF, 0xE0, 0xF2, 0x14, 0x01

Cała procedura kalibracji wygląda następująco umieszczona w funkcji begin wygląda następująco

  1. #if (USE_SELF_CALIBRATE == 1)
  2.     //Self calibration
  3.     self_calibrate();
  4. #else
  5.     //Automated calibration
  6.     static const byte canned_calibration[24] = { CANNED_CALIBRATION_DATA };
  7.     for (int i = 0; i < 24; i++){
  8.         GDTR.wr(REG_TOUCH_TRANSFORM_A + i, canned_calibration[i]);
  9.     }
  10. #endif

Obsługa czcionek:


W projekcie można użyć standardowego zestawu czcionek. Posiadają one numery od 16 do 31. Czcionki o numerach 26-31 to czcionki o wygładzone o wysokiej rozdzielczości. 

W calu załadowania własnych czcionek można się posłużyć generatorem czcionek gd2asset.exe. Pozwala on na konwersję czcionek typu *.ttf   (True Type). W celu wygenerowania czcionki w oknie konsoli (w folderze w którym zlokalizowany jest plik gd2assets.exe) należy wywołać następującą komendę:

  1. gd2asset anonymous_pro.ttf,size=30

Powyższa linia generuje plik default_assets.h z czcionką anonymous_pro w rozmiarze 30. 

W celu ograniczenia ilości znaków można użyć parametru topchar czyli maksymalnej wartości znaku do jakiej zostanie wygenerowana biblioteka. W takim przypadku konwersja czcionki może wyglądać np. tak:

  1. gd2asset anonymous_pro.ttf,size=30,topchar=0x5a

Zakres znaków jest też ograniczony. Oznacza to, że zostanie wygenerowany podstawowy zestaw znaków ASCII. Natomiast przeważnie nie ma potrzeby wykorzystywania wszystkich znaków dostępnych w tym zakresie. Dlatego polskie czcionki (a przynajmniej małe litery, ponieważ są zdecydowanie częściej używane) można uzyskać przez zamianę znaków przy użyciu programu np. Type Light 3.2. 

W programie po otwarciu pliku *ttf kopiuje polską literę i wklejam je w miejsce znaku który jest mi niepotrzebny np. ! -> ę. 


Teraz po zapisaniu oraz wygenerowaniu czcionki przez gd2assets.exe. Otrzymam plik default_assets.exe który należy dołożyć do projekt *.ino

Poniżej wygenerowany plik:

  1. // This file was generated with the command-line:
  2. //    gd2asset anonymous_pro.ttf,size=30
  3. #define ANONYMOUS_PRO_HANDLE 0
  4. #define ANONYMOUS_PRO_WIDTH 16
  5. #define ANONYMOUS_PRO_HEIGHT 28
  6. #define ANONYMOUS_PRO_CELLS 96
  7. #define ASSETS_END 21652UL
  8. static const PROGMEM uint8_t __assets[5052] = {
  9. 0, 0, 0, 5, 0, 0, 0, 1, 28, 32, 0, 8, 28, 16, 16, 7, 0, 228, 127, 1,
  10. 43, 255, 255, 255, 0, 0, 0, 0, 0, 84, 0, 0, 34, 255, 255, 255, 0, 0,
  11. 0, 0, 120, 218, 237, 92, 91, 140, 27, 215, 121, 62, 156, 25, 222, 47,
  12. 203, 181, 228, 218, 168, 173, 213, 24, 109, 128, 56, 141, 68, 250,
  13. 165, 168, 28, 100, 151, 46, 250, 146, 75, 151, 27, 244, 165, 136, 97,
  14. 115, 141, 190, 180, 176, 37, 174, 211, 2, 5, 154, 198, 92, 187, 125,
  15. 179, 33, 178, 117, 210, 135, 22, 17, 89, 199, 233, 131, 27, 139, 180,
  16. 99, 231, 161, 64, 76, 218, 205, 173, 169, 69, 174, 4, 72, 174, 108,
  17. 137, 164, 46, 137, 100, 105, 151, 212, 222, 151, 183, 153, 254, 255,
  18. 249, 255, 161, 150, 171, 149, 173, 149, 71, 55, 39, 7, 144, 190, 157,
  19. 153, 115, 206, 156, 115, 254, 255, 252, 231, 191, 13, 133, 248, 109,
  20. 249, 232, 242, 217, 242, 7, 79, 3, 120, 154, 31, 188, 101, 196, 132,
  21. 72, 31, 21, 98, 223, 89, 161, 24, 81, 33, 156, 61, 225, 93, 195, 58,
  22. 197, 88, 112, 1, 49, 53, 29, 234, 190, 11, 165, 150, 27, 234, 157,
  23. 196, 146, 11, 205, 83, 47, 190, 21, 66, 173, 135, 255, 63, 34, 68,
  24. 254, 53, 33, 92, 179, 66, 248, 141, 127, 249, 203, 202, 17, 184, 183,
  25. 215, 52, 63, 12, 227, 195, 223, 255, 106, 140, 234, 142, 240, 8, 34,
  26. 58, 97, 240, 53, 238, 163, 145, 161, 63, 238, 158, 184, 250, 176, 85,
  27. 115, 210, 223, 5, 84, 204, 152, 175, 131, 55, 204, 168, 167, 141, 216,
  28. 212, 221, 45, 196, 154, 112, 201, 177, 191, 37, 52, 57, 182, 87, 133,
  29. 186, 252, 105, 164, 159, 53, 191, 65, 28, 50, 101, 201, 88, 120, 181,
  30. 122, 91, 175, 191, 229, 18, 41, 13, 160, 150, 62, 134, 108, 160, 213,
  31. 76, 243, 28, 224, 120, 55, 123, 188, 57, 13, 228, 202, 68, 74, 227,
  32. 75, 66, 237, 65, 61, 79, 71, 56, 59, 128, 234, 44, 93, 75, 114, 254,
  33. 59, 225, 120, 47, 43, 81, 173, 152, 191, 162, 254, 242, 230, 81, 234,
  34. 127, 206, 204, 208, 123, 210, 43, 132, 30, 96, 198, 40, 160, 98, 134,
  35. 129, 127, 35, 37, 135, 169, 3, 143, 68, 74, 154, 33, 28, 205, 169, 72,
  36. 233, 126, 96, 144, 241, 78, 250, 120, 19, 122, 84, 139, 192, 159, 216,
  37. 76, 73, 29, 13, 111, 54, 238, 173, 148, 251, 116, 177, 247, 34, 108,
  38. 160, 108, 204, 99, 154, 75, 66, 107, 137, 145, 151, 212, 19, 34, 120,
  39. 88, 196, 163, 34, 37, 210, 19, 242, 90, 189, 0, 219, 14, 158, 7, 78,
  40. 225, 246, 184, 24, 75, 77, 202, 198, 202, 69, 234, 196, 127, 154, 48,
  41. 57, 37, 193, 49, 203, 59, 237, 12, 97, 98, 218, 85, 125, 3, 110, 159,
  42. 20, 105, 211, 140, 9, 239, 146, 210, 214, 191, 56, 35, 226, 25, 109,
  43. 81, 184, 47, 137, 147, 97, 121, 237, 1, 158, 199, 231, 174, 28, 108,
  44. 199, 234, 79, 236, 99, 59, 231, 91, 179, 114, 184, 208, 121, 71, 110,
  45. 199, 127, 114, 54, 97, 160, 64, 58, 145, 42, 192, 40, 87, 133, 136,
  46. 195, 194, 121, 129, 20, 73, 32, 175, 179, 37, 148, 57, 92, 215, 178,
  47. 216, 247, 14, 182, 27, 253, 207, 243, 178, 159, 113, 83, 74, 3, 117,
  48. 238, 79, 97, 94, 222, 201, 192, 178, 82, 141, 137, 68, 33, 82, 23,
  49. 187, 126, 45, 138, 147, 208, 135, 163, 246, 55, 61, 17, 175, 11, 113,
  50. 191, 177, 44, 70, 96, 62, 78, 115, 70, 120, 140, 39, 212, 3, 70, 39,
  51. 44, 242, 166, 105, 60, 81, 41, 224, 120, 158, 198, 117, 183, 175, 164,
  52. 22, 120, 253, 47, 17, 226, 16, 176, 140, 205, 48, 95, 20, 8, 119, 230,
  53. 8, 67, 153, 219, 84, 66, 56, 121, 96, 143, 31, 166, 13, 51, 71, 252,
  54. 61, 194, 252, 149, 39, 41, 171, 182, 7, 217, 46, 194, 211, 74, 197,
  55. 44, 57, 67, 133, 185, 211, 209, 34, 84, 86, 89, 30, 175, 14, 94, 91,
  56. 207, 173, 250, 253, 246, 86, 127, 86, 255, 214, 251, 52, 126, 191, 53,
  57. 158, 254, 248, 172, 241, 138, 125, 135, 7, 231, 211, 223, 107, 52,
  58. 187, 35, 252, 212, 170, 158, 228, 23, 120, 89, 236, 59, 230, 184, 69,
  59. 114, 146, 9, 198, 27, 219, 195, 132, 238, 203, 55, 107, 232, 39, 24,
  60. 15, 109, 152, 194, 161, 13, 207, 91, 131, 237, 189, 11, 131, 253, 243,
  61. 251, 172, 247, 251, 150, 7, 198, 103, 141, 215, 26, 191, 173, 60, 188,
  62. 158, 47, 251, 56, 141, 131, 57, 38, 130, 211, 142, 127, 21, 74, 229,
  63. 245, 192, 212, 99, 32, 248, 156, 213, 23, 254, 173, 141, 175, 118,
  64. 213, 58, 81, 172, 230, 106, 118, 17, 181, 242, 119, 127, 0, 247, 149,
  65. 226, 127, 7, 166, 246, 157, 231, 118, 175, 244, 251, 217, 164, 255,
  66. 155, 93, 134, 114, 91, 192, 43, 207, 185, 173, 181, 255, 20, 149, 32,
  67. 111, 184, 56, 239, 179, 44, 207, 175, 161, 15, 236, 71, 47, 63, 14,
  68. 241, 227, 113, 253, 86, 14, 122, 19, 250, 253, 166, 150, 244, 194,
  69. 230, 104, 67, 249, 43, 198, 147, 44, 82, 89, 176, 5, 248, 228, 75, 76,
  70. 14, 200, 65, 141, 69, 126, 128, 15, 200, 248, 20, 139, 75, 18, 108,
  71. 234, 26, 11, 250, 83, 124, 126, 178, 220, 56, 72, 143, 21, 150, 158,
  72. 62, 230, 179, 221, 76, 211, 3, 196, 103, 202, 5, 102, 195, 69, 62, 21,
  73. 152, 13, 211, 81, 18, 170, 214, 113, 244, 242, 86, 231, 248, 96, 249,
  74. 4, 218, 61, 238, 166, 105, 246, 160, 175, 228, 121, 125, 123, 229, 52,
  75. 232, 133, 112, 250, 128, 97, 225, 105, 73, 165, 134, 236, 158, 29,
  76. 205, 76, 100, 6, 85, 173, 68, 41, 1, 175, 223, 245, 118, 168, 14, 58,
  77. 141, 114, 34, 28, 154, 79, 77, 195, 165, 8, 46, 36, 167, 225, 82, 4,
  78. 231, 19, 57, 184, 20, 161, 122, 228, 29, 184, 4, 85, 33, 212, 64, 45,
  79. 33, 149, 241, 74, 187, 168, 22, 83, 154, 176, 118, 62, 48, 92, 82,
  80. 173, 232, 246, 226, 25, 126, 63, 30, 137, 123, 202, 179, 79, 219, 202,
  81. 31, 99, 124, 252, 164, 24, 107, 132, 94, 147, 48, 75, 215, 95, 237,
  82. 161, 154, 38, 66, 230, 17, 169, 231, 14, 189, 71, 250, 174, 114, 165,
  83. 254, 123, 125, 168, 193, 46, 237, 173, 67, 219, 202, 158, 170, 92, 47,
  84. 47, 244, 139, 118, 107, 234, 156, 190, 189, 8, 244, 67, 233, 229, 107,
  85. 9, 55, 242, 36, 24, 15, 62, 164, 159, 210, 19, 1, 84, 226, 180, 142,
  86. 80, 144, 171, 252, 124, 2, 167, 136, 151, 92, 93, 62, 144, 223, 150,
  87. 224, 238, 16, 99, 166, 10, 124, 41, 196, 243, 200, 112, 112, 153, 7,
  88. 101, 1, 197, 98, 158, 165, 101, 30, 116, 81, 89, 132, 139, 209, 190,
  89. 226, 250, 241, 220, 139, 56, 246, 10, 116, 11, 59, 102, 71, 59, 170,
  90. 236, 135, 125, 152, 157, 146, 118, 185, 144, 202, 68, 83, 168, 114,
  91. 247, 52, 132, 250, 29, 108, 210, 33, 179, 57, 47, 85, 137, 157, 230,
  92. 49, 210, 79, 205, 30, 105, 84, 119, 237, 229, 125, 172, 52, 194, 142,
  93. 63, 38, 85, 75, 174, 147, 72, 79, 170, 114, 13, 138, 19, 162, 130,
  94. 253, 27, 97, 177, 187, 29, 83, 246, 195, 67, 21, 236, 52, 3, 55, 180,
  95. 251, 45, 57, 30, 27, 75, 156, 4, 131, 163, 70, 232, 237, 17, 198, 127,
  96. 78, 88, 253, 67, 137, 158, 85, 178, 227, 71, 75, 132, 101, 93, 162,
  97. 103, 149, 236, 251, 209, 2, 97, 89, 151, 232, 129, 41, 34, 134, 54,
  98. 57, 39, 92, 44, 136, 54, 96, 154, 159, 167, 237, 60, 79, 52, 249, 218,
  99. 246, 101, 108, 15, 106, 185, 87, 226, 61, 229, 217, 231, 208, 127, 66,
  100. 235, 173, 153, 231, 163, 106, 126, 69, 168, 39, 65, 54, 185, 12, 86,
  101. 105, 139, 44, 120, 19, 25, 167, 148, 177, 241, 92, 96, 145, 174, 165,
  102. 188, 2, 250, 41, 40, 191, 220, 61, 148, 47, 186, 154, 63, 75, 242, 5,
  103. 247, 135, 120, 176, 122, 209, 86, 249, 162, 190, 208, 248, 145, 148,
  104. 35, 48, 63, 216, 56, 190, 222, 55, 196, 195, 96, 145, 167, 208, 137,
  105. 163, 131, 178, 75, 67, 118, 49, 203, 249, 231, 181, 131, 200, 63, 161,
  106. 195, 69, 185, 204, 67, 239, 126, 24, 85, 158, 105, 139, 157, 13, 24,
  107. 175, 210, 140, 237, 108, 145, 74, 28, 90, 146, 44, 91, 167, 121, 133,
  108. 46, 145, 242, 190, 179, 174, 241, 115, 81, 198, 250, 181, 152, 24,
  109. 165, 246, 66, 107, 50, 217, 238, 41, 219, 201, 159, 68, 55, 115, 138,
  110. 113, 146, 116, 251, 119, 73, 199, 247, 29, 38, 100, 83, 70, 249, 112,
  111. 243, 19, 140, 143, 40, 193, 122, 191, 101, 96, 185, 121, 73, 124, 75,
  112. 124, 108, 90, 230, 2, 187, 210, 134, 216, 222, 220, 201, 199, 105,
  113. 100, 131, 221, 105, 83, 249, 82, 21, 249, 77, 248, 76, 218, 223, 249,
  114. 247, 244, 109, 7, 150, 133, 98, 232, 82, 32, 58, 91, 36, 95, 156, 44,
  115. 95, 36, 61, 157, 48, 131, 228, 49, 93, 121, 6, 38, 234, 4, 62, 189, 8,
  116. 117, 61, 128, 179, 176, 14, 197, 55, 245, 187, 190, 181, 74, 231, 166,
  117. 163, 172, 135, 234, 196, 151, 59, 229, 160, 199, 10, 161, 83, 68, 63,
  118. 127, 91, 238, 248, 73, 181, 249, 51, 125, 219, 126, 16, 58, 143, 155,
  119. 196, 63, 142, 111, 86, 231, 190, 111, 231, 252, 190, 94, 253, 0, 197,
  120. 222, 231, 161, 251, 110, 24, 94, 249, 211, 240, 246, 98, 73, 120, 81,
  121. 68, 122, 215, 68, 72, 210, 170, 202, 135, 100, 54, 22, 207, 145, 127,
  122. 147, 174, 211, 57, 122, 94, 43, 200, 250, 158, 102, 137, 218, 103, 11,
  123. 178, 191, 213, 72, 6, 251, 63, 174, 91, 138, 80, 145, 85, 102, 168,
  124. 172, 162, 76, 130, 198, 7, 159, 115, 236, 193, 179, 126, 20, 234, 163,
  125. 163, 202, 241, 194, 220, 207, 195, 183, 133, 158, 248, 228, 235, 54,
  126. 45, 240, 75, 55, 76, 255, 188, 165, 243, 115, 60, 192, 251, 177, 181,
  127. 193, 62, 202, 12, 218, 71, 173, 13, 246, 81, 198, 118, 251, 232, 115,
  128. 60, 160, 42, 201, 153, 251, 201, 225, 41, 42, 196, 117, 126, 86, 187,
  129. 243, 164, 79, 123, 91, 131, 102, 156, 133, 214, 125, 171, 94, 191,
  130. 157, 213, 79, 191, 95, 71, 53, 58, 240, 222, 59, 201, 206, 187, 237,
  131. 236, 66, 53, 115, 205, 203, 111, 249, 167, 170, 236, 248, 218, 117,
  132. 118, 0, 173, 251, 86, 189, 143, 38, 191, 106, 219, 212, 159, 108, 252,
  133. 34, 204, 7, 4, 58, 222, 210, 71, 195, 95, 232, 16, 251, 59, 154, 58,
  134. 29, 12, 197, 152, 208, 222, 192, 33, 17, 227, 104, 6, 31, 128, 52, 82,
  135. 165, 70, 99, 217, 209, 98, 61, 143, 71, 202, 231, 96, 228, 212, 160,
  136. 159, 110, 155, 126, 83, 229, 203, 158, 234, 128, 253, 151, 122, 79,
  137. 87, 15, 158, 22, 202, 44, 158, 115, 23, 97, 87, 107, 229, 239, 253,
  138. 69, 42, 22, 204, 141, 154, 198, 106, 40, 19, 153, 200, 231, 118, 173,
  139. 250, 102, 18, 15, 52, 132, 107, 213, 93, 79, 170, 29, 64, 231, 124,
  140. 202, 137, 182, 134, 115, 33, 9, 232, 93, 117, 205, 39, 126, 175, 35,
  141. 130, 171, 222, 153, 200, 68, 227, 145, 87, 91, 187, 51, 161, 92, 218,
  142. 60, 106, 26, 81, 239, 105, 239, 92, 244, 153, 163, 212, 191, 134, 71,
  143. 205, 49, 208, 207, 38, 232, 253, 107, 52, 158, 247, 99, 182, 78, 48,
  144. 207, 252, 210, 164, 245, 118, 118, 26, 242, 252, 241, 173, 144, 131,
  145. 53, 116, 42, 33, 23, 62, 81, 24, 145, 132, 200, 79, 146, 89, 212, 8,
  146. 187, 218, 178, 58, 216, 82, 97, 10, 236, 129, 89, 32, 181, 147, 36,
  147. 152, 64, 9, 56, 32, 119, 66, 131, 60, 110, 51, 120, 134, 234, 151,
  148. 217, 145, 38, 137, 80, 141, 176, 111, 141, 88, 52, 68, 241, 194, 66,
  149. 66, 158, 167, 35, 167, 242, 82, 95, 245, 175, 216, 53, 57, 208, 203,
  150. 140, 19, 47, 90, 122, 218, 180, 212, 163, 183, 131, 254, 34, 245, 105,
  151. 48, 217, 36, 58, 122, 131, 232, 110, 73, 220, 150, 61, 66, 237, 218,
  152. 58, 97, 55, 38, 239, 163, 254, 66, 245, 171, 58, 233, 229, 233, 41,
  153. 194, 228, 52, 95, 19, 58, 106, 49, 170, 223, 229, 247, 191, 45, 209,
  154. 94, 253, 229, 94, 176, 7, 134, 50, 194, 137, 250, 123, 60, 35, 198,
  155. 219, 15, 169, 121, 216, 80, 184, 137, 92, 102, 134, 108, 214, 124,
  156. 134, 104, 22, 207, 144, 126, 181, 99, 58, 50, 51, 104, 252, 199, 11,
  157. 131, 215, 214, 115, 170, 175, 176, 41, 60, 62, 69, 253, 21, 163, 178,
  158. 127, 52, 121, 199, 219, 96, 127, 192, 190, 119, 242, 254, 192, 241,
  159. 60, 107, 175, 126, 141, 246, 187, 92, 63, 131, 214, 95, 205, 159, 161,
  160. 245, 247, 48, 189, 68, 101, 130, 48, 145, 35, 12, 213, 9, 131, 11,
  161. 132, 254, 69, 198, 165, 193, 107, 235, 185, 85, 63, 81, 224, 254, 38,
  162. 215, 247, 143, 246, 17, 189, 127, 130, 198, 243, 156, 221, 246, 131,
  163. 113, 25, 63, 214, 254, 219, 128, 216, 108, 113, 29, 110, 181, 125,
  164. 123, 243, 113, 124, 234, 230, 183, 1, 111, 199, 253, 23, 50, 205, 101,
  165. 188, 70, 164, 231, 254, 69, 170, 31, 154, 167, 246, 99, 37, 238, 111,
  166. 138, 250, 7, 123, 31, 247, 95, 118, 153, 246, 159, 49, 193, 227, 177,
  167. 145, 63, 165, 28, 51, 174, 31, 55, 163, 191, 227, 147, 163, 173, 12,
  168. 58, 232, 119, 180, 199, 159, 121, 219, 248, 63, 215, 173, 215, 141,
  169. 192, 48, 249, 77, 253, 117, 178, 107, 165, 31, 198, 179, 38, 212, 57,
  170. 208, 210, 118, 195, 134, 77, 159, 211, 239, 174, 21, 100, 2, 3, 218,
  171. 215, 66, 60, 92, 189, 56, 105, 51, 127, 122, 12, 58, 135, 147, 116,
  172. 46, 104, 13, 58, 39, 70, 87, 228, 115, 165, 54, 37, 113, 199, 26, 213,
  173. 175, 228, 36, 82, 54, 144, 214, 206, 46, 145, 74, 218, 235, 18, 25,
  174. 14, 231, 81, 27, 213, 122, 250, 142, 37, 170, 175, 245, 194, 244, 30,
  175. 180, 148, 16, 131, 212, 47, 180, 209, 233, 253, 233, 2, 97, 144, 245,
  176. 2, 181, 17, 181, 117, 126, 183, 3, 222, 176, 243, 1, 136, 19, 192,
  177. 126, 97, 23, 140, 33, 34, 207, 0, 162, 147, 247, 36, 238, 247, 67, 66,
  178. 91, 67, 76, 69, 189, 103, 16, 35, 153, 208, 107, 136, 129, 122, 252,
  179. 9, 68, 215, 210, 193, 97, 68, 199, 133, 11, 36, 31, 138, 203, 132,
  180. 201, 58, 225, 72, 238, 22, 202, 23, 205, 44, 176, 28, 92, 100, 236,
  181. 16, 118, 154, 81, 122, 95, 42, 71, 56, 178, 64, 232, 105, 19, 58, 26,
  182. 58, 141, 39, 155, 33, 220, 125, 138, 208, 187, 70, 168, 52, 134, 105,
  183. 188, 249, 103, 9, 199, 78, 19, 250, 90, 132, 170, 193, 243, 41, 50,
  184. 198, 25, 3, 54, 202, 207, 141, 241, 177, 212, 121, 25, 95, 145, 254,
  185. 101, 216, 98, 100, 110, 214, 98, 172, 231, 103, 72, 216, 141, 149,
  186. 200, 166, 8, 213, 147, 210, 244, 11, 98, 124, 76, 234, 99, 116, 29,
  187. 154, 167, 231, 67, 117, 170, 31, 153, 177, 218, 91, 253, 201, 254,
  188. 189, 93, 126, 223, 141, 139, 143, 89, 250, 122, 95, 127, 135, 245, 83,
  189. 246, 118, 197, 122, 253, 30, 253, 129, 172, 255, 103, 6, 174, 249,
  190. 185, 172, 47, 219, 191, 67, 253, 253, 199, 237, 164, 191, 108, 18,
  191. 223, 188, 146, 126, 81, 43, 175, 115, 144, 126, 67, 117, 139, 94, 125,
  192. 250, 17, 50, 253, 66, 151, 198, 6, 233, 151, 243, 81, 127, 19, 42,
  193. 234, 42, 62, 56, 232, 210, 76, 63, 43, 62, 39, 190, 220, 100, 251,
  194. 193, 82, 145, 130, 236, 255, 118, 27, 223, 96, 131, 149, 253, 54, 218,
  195. 171, 205, 204, 117, 209, 239, 91, 22, 253, 154, 177, 65, 251, 45, 149,
  196. 25, 184, 118, 52, 163, 84, 191, 195, 237, 95, 147, 104, 188, 73, 231,
  197. 201, 10, 159, 15, 232, 232, 195, 122, 233, 18, 97, 96, 141, 80, 105,
  198. 210, 57, 36, 82, 135, 9, 253, 150, 189, 217, 156, 178, 211, 127, 125,
  199. 252, 1, 232, 244, 62, 24, 216, 175, 81, 24, 28, 13, 127, 166, 12, 194,
  200. 1, 67, 65, 190, 182, 116, 197, 11, 5, 6, 201, 177, 75, 97, 45, 217,
  201. 227, 198, 63, 208, 2, 85, 204, 247, 164, 189, 175, 29, 148, 121, 150,
  202. 80, 30, 53, 217, 24, 252, 226, 154, 208, 38, 165, 189, 206, 97, 245,
  203. 154, 78, 252, 208, 12, 123, 81, 110, 131, 50, 234, 53, 58, 49, 229,
  204. 192, 89, 225, 93, 170, 73, 253, 211, 123, 233, 30, 91, 245, 207, 141,
  205. 254, 186, 161, 28, 234, 75, 67, 87, 69, 255, 52, 162, 127, 234, 78,
  206. 209, 207, 236, 210, 135, 175, 134, 106, 135, 244, 51, 69, 250, 93,
  207. 186, 152, 246, 44, 253, 27, 34, 15, 27, 20, 147, 36, 71, 219, 209,
  208. 187, 49, 194, 239, 194, 253, 175, 203, 248, 223, 172, 141, 220, 153,
  209. 159, 36, 127, 78, 162, 64, 254, 29, 142, 239, 20, 40, 15, 188, 56,
  210. 233, 196, 241, 161, 3, 9, 125, 72, 232, 80, 194, 6, 104, 236, 96, 3,
  211. 116, 56, 97, 3, 20, 38, 152, 13, 135, 14, 41, 100, 104, 233, 160, 106,
  212. 16, 111, 195, 77, 74, 148, 75, 228, 40, 150, 20, 170, 147, 236, 241,
  213. 45, 147, 255, 202, 217, 105, 12, 248, 183, 250, 254, 46, 91, 74, 69,
  214. 250, 226, 124, 171, 89, 57, 207, 192, 82, 138, 229, 97, 156, 228, 94,
  215. 157, 130, 115, 137, 2, 200, 191, 248, 12, 200, 79, 255, 146, 72, 206,
  216. 195, 36, 61, 171, 34, 187, 8, 114, 213, 213, 18, 149, 21, 140, 203,
  217. 119, 69, 163, 133, 244, 105, 40, 237, 89, 156, 88, 237, 51, 43, 101,
  218. 168, 36, 242, 127, 190, 152, 253, 28, 72, 192, 212, 223, 213, 19, 143,
  219. 129, 16, 141, 191, 90, 136, 164, 161, 211, 72, 109, 58, 84, 147, 70,
  220. 227, 132, 31, 227, 254, 126, 83, 247, 152, 48, 8, 175, 33, 156, 102,
  221. 212, 206, 253, 55, 21, 160, 253, 39, 81, 236, 62, 77, 249, 16, 158,
  222. 22, 144, 45, 138, 180, 227, 60, 250, 84, 142, 18, 49, 131, 167, 233,
  223. 44, 176, 252, 136, 162, 194, 14, 104, 43, 79, 150, 195, 248, 174, 86,
  224. 85, 39, 158, 32, 199, 110, 58, 19, 92, 36, 94, 112, 113, 236, 13, 142,
  225. 121, 224, 79, 160, 127, 178, 36, 18, 166, 25, 118, 153, 102, 221, 66,
  226. 187, 230, 23, 231, 254, 44, 148, 217, 28, 56, 17, 28, 76, 58, 35, 121,
  227. 82, 250, 55, 129, 86, 158, 53, 226, 51, 242, 131, 6, 22, 82, 114, 159,
  228. 56, 219, 27, 230, 153, 168, 223, 78, 242, 101, 32, 191, 160, 69, 241,
  229. 232, 29, 167, 9, 179, 211, 18, 213, 57, 202, 73, 13, 0, 155, 41, 47,
  230. 247, 211, 93, 20, 158, 151, 229, 140, 37, 23, 109, 63, 250, 227, 93,
  231. 187, 28, 110, 126, 94, 250, 224, 100, 190, 11, 250, 4, 17, 145, 79,
  232. 16, 139, 83, 18, 85, 206, 123, 209, 174, 63, 255, 37, 205, 235, 210,
  233. 71, 14, 147, 222, 113, 184, 97, 30, 155, 23, 55, 135, 129, 124, 28,
  234. 253, 80, 173, 248, 16, 167, 195, 245, 211, 227, 172, 116, 57, 43, 187,
  235. 206, 74, 167, 235, 167, 215, 89, 217, 120, 86, 118, 94, 63, 45, 217,
  236. 138, 74, 7, 185, 130, 203, 18, 140, 156, 206, 39, 146, 28, 104, 10,
  237. 50, 167, 186, 89, 19, 19, 252, 137, 65, 63, 71, 123, 132, 21, 6, 15,
  238. 39, 223, 57, 126, 184, 25, 35, 46, 172, 71, 120, 221, 29, 137, 87,
  239. 206, 227, 227, 74, 145, 214, 93, 101, 114, 251, 215, 106, 114, 221,
  240. 199, 78, 37, 228, 186, 23, 167, 3, 43, 20, 19, 145, 177, 17, 255, 26,
  241. 69, 238, 198, 240, 220, 155, 145, 174, 62, 1, 21, 84, 212, 231, 180,
  242. 158, 252, 94, 226, 114, 72, 240, 183, 229, 198, 197, 123, 239, 227,
  243. 67, 244, 113, 214, 138, 149, 60, 231, 11, 104, 101, 94, 125, 103, 225,
  244. 55, 105, 37, 191, 78, 121, 64, 123, 209, 0, 130, 5, 40, 127, 39, 44,
  245. 237, 182, 135, 132, 180, 51, 136, 197, 123, 151, 253, 130, 202, 55,
  246. 15, 53, 78, 0, 238, 39, 127, 145, 199, 248, 199, 48, 222, 151, 103,
  247. 60, 216, 19, 50, 137, 105, 151, 33, 252, 221, 71, 28, 127, 52, 11,
  248. 122, 42, 198, 7, 95, 50, 240, 51, 195, 185, 23, 237, 244, 191, 92,
  249. 179, 93, 237, 42, 99, 222, 155, 214, 41, 82, 156, 201, 60, 39, 237,
  250. 82, 233, 252, 243, 178, 189, 8, 58, 192, 134, 120, 95, 102, 16, 173,
  251. 251, 80, 175, 203, 237, 204, 99, 186, 134, 253, 116, 43, 28, 191, 162,
  252. 247, 220, 252, 242, 96, 249, 226, 68, 17, 115, 148, 64, 13, 40, 74,
  253. 187, 91, 171, 52, 225, 144, 143, 162, 238, 40, 164, 110, 163, 52, 57,
  254. 201, 172, 2, 150, 59, 226, 48, 35, 136, 32, 150, 236, 30, 235, 115,
  255. 30, 244, 15, 56, 126, 9, 83, 111, 71, 149, 189, 107, 100, 63, 200,
  256. 252, 207, 123, 203, 179, 255, 108, 239, 200, 3, 236, 111, 180, 112,
  257. 115, 127, 244, 158, 234, 197, 175, 25, 228, 71, 232, 2, 102, 207, 235,
  258. 234, 1, 224, 43, 249, 125, 170, 65, 218, 10, 242, 223, 2, 161, 156,
  259. 215, 58, 180, 238, 91, 245, 172, 118, 178, 159, 44, 247, 123, 158,
  260. 222, 115, 225, 33, 227, 22, 208, 111, 79, 85, 250, 69, 60, 236, 39,
  261. 201, 126, 168, 111, 203, 159, 129, 113, 194, 223, 238, 174, 240, 13,
  262. 124, 127, 155, 156, 98, 121, 151, 99, 44, 4, 57, 105, 208, 107, 125,
  263. 126, 37, 117, 247, 255, 145, 254, 51, 229, 153, 21, 206, 255, 68, 193,
  264. 246, 89, 91, 237, 119, 121, 112, 254, 88, 58, 29, 28, 21, 146, 191,
  265. 222, 222, 19, 50, 106, 16, 98, 150, 162, 188, 69, 141, 229, 179, 214,
  266. 151, 211, 119, 78, 124, 229, 26, 233, 39, 249, 6, 233, 215, 50, 228,
  267. 254, 67, 190, 82, 144, 126, 235, 248, 83, 238, 179, 205, 248, 115,
  268. 158, 80, 218, 205, 128, 78, 180, 213, 93, 208, 79, 17, 243, 67, 12,
  269. 74, 191, 89, 67, 190, 252, 242, 101, 254, 84, 120, 162, 96, 100, 43,
  270. 255, 39, 164, 30, 225, 168, 188, 25, 190, 187, 82, 34, 127, 145, 140,
  271. 199, 60, 90, 125, 127, 194, 150, 248, 195, 83, 141, 159, 33, 250, 145,
  272. 237, 0, 247, 63, 167, 236, 95, 6, 185, 247, 43, 153, 201, 163, 33, 73,
  273. 225, 124, 208, 76, 157, 242, 44, 122, 236, 167, 232, 220, 226, 248,
  274. 223, 149, 121, 67, 143, 190, 126, 21, 67, 170, 180, 30, 239, 32, 254,
  275. 12, 244, 6, 209, 243, 95, 87, 177, 175, 214, 6, 240, 106, 121, 240,
  276. 182, 161, 252, 166, 32, 76, 223, 254, 122, 192, 92, 68, 31, 177, 187,
  277. 247, 53, 181, 88, 32, 39, 47, 30, 189, 248, 189, 238, 179, 118, 197,
  278. 199, 238, 255, 101, 24, 209, 81, 163, 56, 225, 174, 158, 78, 241, 193,
  279. 35, 242, 249, 174, 174, 140, 243, 41, 232, 85, 1, 220, 69, 241, 192,
  280. 110, 13, 51, 207, 129, 44, 171, 227, 103, 101, 156, 112, 210, 217,
  281. 136, 81, 127, 201, 179, 132, 110, 56, 43, 100, 255, 89, 206, 75, 241,
  282. 25, 246, 57, 96, 110, 52, 223, 221, 33, 242, 115, 104, 254, 224, 81,
  283. 173, 252, 19, 49, 212, 50, 141, 125, 166, 161, 15, 245, 30, 40, 118,
  284. 135, 107, 83, 67, 43, 34, 190, 36, 82, 153, 161, 5, 60, 71, 18, 153,
  285. 161, 75, 24, 55, 32, 44, 125, 2, 188, 217, 243, 187, 82, 126, 30, 32,
  286. 249, 217, 187, 237, 229, 231, 214, 244, 23, 31, 219, 15, 197, 115,
  287. 112, 254, 173, 10, 23, 158, 99, 78, 67, 15, 74, 223, 67, 118, 154,
  288. 148, 129, 177, 210, 88, 129, 226, 75, 22, 82, 48, 104, 172, 68, 193,
  289. 160, 244, 180, 91, 6, 229, 27, 186, 236, 231, 0, 8, 146, 223, 229,
  290. 239, 19, 172, 239, 21, 110, 58, 253, 54, 218, 15, 199, 182, 96, 63,
  291. 36, 62, 210, 126, 216, 110, 217, 15, 189, 203, 246, 195, 173, 136, 19,
  292. 146, 254, 210, 36, 61, 56, 77, 250, 181, 210, 32, 253, 197, 243, 49,
  293. 250, 75, 128, 245, 107, 171, 158, 108, 167, 93, 238, 135, 236, 18,
  294. 227, 242, 123, 174, 170, 231, 111, 130, 246, 248, 9, 194, 15, 87, 223,
  295. 143, 250, 94, 105, 222, 99, 226, 239, 100, 136, 90, 226, 104, 248,
  296. 110, 164, 197, 255, 178, 219, 154, 253, 108, 156, 157, 12, 52, 98, 12,
  297. 95, 11, 162, 30, 190, 176, 14, 111, 122, 81, 158, 175, 206, 126, 27,
  298. 112, 31, 170, 215, 175, 3, 95, 189, 28, 86, 158, 92, 36, 122, 136, 40,
  299. 126, 38, 71, 38, 124, 243, 251, 58, 185, 61, 76, 243, 131, 191, 198,
  300. 63, 190, 84, 198, 184, 53, 150, 109, 79, 89, 130, 191, 18, 117, 63,
  301. 75, 24, 52, 190, 29, 118, 124, 165, 39, 148, 131, 216, 239, 17, 180,
  302. 251, 171, 179, 182, 230, 183, 94, 251, 250, 226, 185, 100, 225, 181,
  303. 182, 27, 68, 85, 80, 142, 58, 254, 84, 7, 102, 251, 96, 84, 103, 180,
  304. 173, 63, 136, 29, 162, 129, 43, 127, 82, 229, 225, 234, 241, 240, 45,
  305. 144, 47, 215, 33, 231, 21, 70, 149, 207, 9, 183, 65, 46, 154, 32, 236,
  306. 155, 38, 76, 243, 7, 134, 140, 23, 127, 101, 25, 112, 23, 172, 219,
  307. 19, 128, 142, 239, 206, 125, 239, 22, 156, 15, 99, 148, 31, 48, 19,
  308. 144, 252, 88, 155, 146, 190, 80, 205, 8, 139, 218, 132, 252, 78, 87,
  309. 126, 86, 59, 2, 194, 101, 100, 129, 127, 56, 6, 227, 67, 19, 210, 39,
  310. 74, 191, 37, 85, 153, 32, 223, 104, 146, 243, 212, 67, 167, 41, 174,
  311. 228, 89, 163, 175, 14, 148, 6, 135, 192, 243, 43, 183, 96, 251, 197,
  312. 75, 98, 172, 46, 118, 98, 60, 48, 185, 0, 87, 96, 167, 103, 151, 64,
  313. 254, 251, 150, 69, 121, 21, 248, 204, 189, 38, 46, 92, 0, 222, 211,
  314. 218, 234, 202, 33, 252, 142, 174, 231, 92, 204, 222, 5, 35, 174, 221,
  315. 91, 79, 252, 9, 198, 107, 191, 80, 138, 252, 45, 140, 60, 181, 47, 19,
  316. 122, 5, 214, 33, 94, 156, 244, 159, 128, 195, 114, 103, 51, 234, 49,
  317. 74, 146, 166, 82, 71, 240, 117, 133, 195, 188, 249, 238, 225, 33, 242,
  318. 177, 246, 255, 161, 206, 226, 64, 250, 32, 93, 164, 207, 104, 244, 20,
  319. 5, 144, 92, 29, 254, 48, 202, 162, 67, 133, 63, 235, 109, 81, 44, 53,
  320. 81, 26, 61, 44, 227, 128, 81, 25, 74, 194, 207, 87, 138, 83, 24, 167,
  321. 139, 249, 40, 78, 39, 241, 166, 243, 167, 140, 109, 166, 75, 204, 159,
  322. 147, 146, 63, 157, 204, 159, 126, 230, 207, 200, 2, 241, 39, 254, 141,
  323. 147, 198, 103, 170, 65, 223, 60, 136, 202, 36, 125, 137, 147, 40, 209,
  324. 7, 45, 193, 197, 52, 241, 103, 187, 41, 249, 211, 209, 220, 192, 159,
  325. 41, 158, 100, 101, 154, 13, 1, 92, 54, 45, 250, 249, 54, 249, 194, 76,
  326. 57, 34, 79, 249, 162, 45, 182, 70, 63, 62, 184, 62, 78, 152, 122, 91,
  327. 34, 250, 26, 16, 199, 225, 141, 234, 27, 253, 236, 198, 93, 244, 57,
  328. 152, 131, 194, 25, 34, 176, 74, 113, 192, 98, 70, 198, 253, 124, 214,
  329. 247, 239, 210, 152, 235, 199, 253, 62, 65, 252, 79, 60, 69, 31, 200,
  330. 122, 217, 254, 24, 99, 59, 61, 197, 11, 144, 178, 236, 216, 45, 226,
  331. 171, 4, 247, 208, 9, 168, 25, 211, 3, 40, 126, 231, 156, 21, 120, 187,
  332. 206, 254, 83, 58, 139, 0, 30, 175, 207, 178, 159, 246, 206, 13, 76,
  333. 239, 214, 216, 117, 246, 227, 85, 24, 204, 120, 137, 25, 77, 102, 121,
  334. 161, 134, 193, 245, 189, 236, 154, 116, 47, 108, 13, 93, 236, 63, 212,
  335. 172, 176, 229, 33, 238, 248, 62, 94, 223, 63, 96, 60, 73, 247, 157,
  336. 203, 215, 247, 30, 235, 103, 154, 30, 159, 225, 141, 50, 65, 243, 249,
  337. 225, 77, 21, 64, 158, 230, 107, 66, 60, 54, 45, 178, 115, 248, 209,
  338. 254, 148, 218, 11, 23, 167, 69, 49, 6, 122, 219, 200, 105, 165, 129,
  339. 122, 183, 187, 247, 247, 171, 82, 223, 206, 130, 253, 168, 192, 166,
  340. 80, 255, 236, 38, 232, 37, 55, 40, 191, 255, 147, 126, 103, 96, 119,
  341. 9, 15, 135, 195, 225, 97, 252, 143, 202, 48, 255, 111, 221, 2, 28,
  342. 166, 219, 195, 252, 128, 238, 246, 155, 12, 247, 235, 88, 205, 135,
  343. 47, 63, 31, 14, 43, 72, 98, 114, 135, 137, 251, 241, 133, 103, 77,
  344. 243, 255, 1, 182, 189, 175, 245, 0
  345. };
  346. #define LOAD_ASSETS()  (GD.copy(__assets, sizeof(__assets)), GD.loadptr = ASSETS_END)
  347. static const shape_t ANONYMOUS_PRO_SHAPE = {0, 16, 28, 0};
  348. struct {
  349.   Bitmap anonymous_pro;
  350. } bitmaps = {
  351.  /*    anonymous_pro */  {{ 16,  28}, {  8,  14},      0x0UL,  2,  0}
  352. };

Część w pętli loop może wyglądać następująco:

  1.   GD.ClearColorRGB(0x013162);
  2.   GD.Clear();
  3.   GD.cmd_text(240136, ANONYMOUS_PRO_HANDLE, OPT_CENTER, "Dziala!!!");
  4.   GD.swap();

Znak ! zostanie na wyświetlaczu zastąpiony przez ę ponieważ pod kodem znaku wykrzyknika znajduje się polska litera e.

Do tego przydałaby się jakaś prosta funkcja pozwalająca na zamianę znaku z litery polskiej (dokładniej to odpowiedniemu kodowi przypisanemu do danego znaku) na znak zdefiniowany w bibliotece.

  1. static unsigned char SelectPolishSign(unsigned char c)
  2. {
  3.     if(== POLSKIE_A)          { c = '"'; }
  4.     else if(== POLSKIE_C)     { c = '#'; }
  5.     else if(== POLSKIE_E)     { c = '!'; }
  6.     else if(== POLSKIE_L)     { c = '%'; }
  7.     else if(== POLSKIE_N)     { c = '&'; }
  8.     else if(== POLSKIE_O)     { c = '\''; }
  9.     else if(== POLSKIE_S)     { c = '('; }
  10.     else if(== POLSKIE_ZI)    { c = ')'; }
  11.     else if(== POLSKIE_ZY)    { c = '/'; }
  12.     return c;
  13. }

W celu wyświetlenia podanego tekstu na ekranie wykorzystuje funkcje cmd_text. Jako argumenty podaje się pozycje, wskaźnik do czcionki, sposób pozycjonowania tekstu oraz sam tekst.

  1. static void DisplayStatus(const char *txtToDisplay)
  2. {
  3.       GD.cmd_text((GD.w / 3) + 20, (GD.h / 6) - 20, 29, OPT_CENTER, txtToDisplay);
  4. }
  5. static void DisplayTime(const char *txtToDisplay)
  6. {
  7.       GD.cmd_text((GD.w / 3) + 20, (GD.h / 4) + 10, 31, OPT_CENTER, txtToDisplay);
  8. }
  9. static void DisplayDate(const char *txtToDisplay)
  10. {
  11.       GD.cmd_text((GD.w / 3) + 20, (GD.h / 3) + 20, 28, OPT_CENTER, txtToDisplay);
  12. }


Obsługa grafik:


W celu wgrania grafik na wyświetlacz można wykorzystać dwie drogi. Jedną z nich jest wgranie grafiki na kartę SD. W takim przypadku załadowanie danych na ekran wygląda następująco:

  1. GD.BitmapHandle(0);
  2. GD.cmd_loadimage(0, 0);
  3. GD.load(fileName);

Jako argument do funkcji cmd_loadimage podajemy wskaźnik do załadowanego pliku tekstowego oraz dodatkową opcję pozycjonującą wyświetlacz.

Przykładowa funkcja wykonująca powyższe operacje:

  1. static void LoadImageIntoMemmory(const char *fileName, uint8_t bitmapHandle, int loadImagePtr)
  2. {
  3.   GD.BitmapHandle(bitmapHandle);
  4.   GD.cmd_loadimage(loadImagePtr, 0);
  5.   GD.load(fileName);
  6. }

Aby wyświetlić dane na ekranie:

  1. GD.Clear();
  2. GD.Begin(BITMAPS);
  3. GD.Vertex2ii(0, 0, 0);
  4. GD.swap();

Powyższy przykład ładuje obraz na ekran. Pozycja startowa to ( 0, 0 ). Wskaźnik do obrazu w pamięci oznaczony jako 0.

Można też załadować większą ilość obrazów do pamięci. Warunkiem koniecznym jest ich odpowiedni rozmiar. Tak aby zmieściły się w pamięci sterownika:

  1. LoadImageIntoMemmory("sidebar.jpg",0,0);
  2. LoadImageIntoMemmory("lhs.jpg",1,-1);
  3. GD.Begin(BITMAPS);
  4. GD.Vertex2ii(360, 0, 0);
  5. GD.Vertex2ii(95, 170, 1);

Po załadowaniu zdjęcia do pamięci oraz gdy następuje podmiana zdjęcia na inne należy odczekać dosyć pewien interwał czasowy tak aby dane zostały z obrazem zostały zamienione w pamięci. 

W przypadku wyświetlania jednego obrazu gdy nastąpi podmiana danych np. przez umiejscowienie dużego obrazu w pamięci może spowodować nakładanie danych (w miejscu wyświetlenia starego obrazu zaczną się pojawiać dane z nowego).

Najrozsądniejszym rozwiązaniem jakie udało mi się wprowadzić jest wyczyszczenie ekranu z wyświetlanego obrazka. Następnie wykonuje podmianę obrazów i dopiero wyświetlenie nowych zdjęć na ekranie.

Obsługa przycisku dotykowego:


Poniżej przykład załadowania kilkunastu przycisków na ekranie:

  1. static void LoadKeypadButtons(void)
  2. {
  3.   GD.ColorA(200);
  4.   GD.ColorRGB(0xFFFFFF);
  5.   //Display whole numeric keyboard on screen
  6.   GD.Tag(TAG_BUTTON_KEYPAD_1);
  7.   GD.cmd_button(KEYPAD_FIR_ROW_X_POS, KEYPAD_FIR_COL_Y_POS, KEYPAD_BTN_WIDTH, KEYPAD_BTN_HEIGH, KEYPAD_FONT, OPT_FLAT, " ");
  8.   GD.Tag(TAG_BUTTON_KEYPAD_2);
  9.   GD.cmd_button(KEYPAD_SEC_ROW_X_POS, KEYPAD_FIR_COL_Y_POS, KEYPAD_BTN_WIDTH, KEYPAD_BTN_HEIGH, KEYPAD_FONT, OPT_FLAT, " ");
  10.   GD.Tag(TAG_BUTTON_KEYPAD_3);
  11.   GD.cmd_button(KEYPAD_THI_ROW_X_POS, KEYPAD_FIR_COL_Y_POS, KEYPAD_BTN_WIDTH, KEYPAD_BTN_HEIGH, KEYPAD_FONT, OPT_FLAT, " ");
  12.   GD.Tag(TAG_BUTTON_KEYPAD_4);
  13.   GD.cmd_button(KEYPAD_FIR_ROW_X_POS, KEYPAD_SEC_COL_Y_POS, KEYPAD_BTN_WIDTH, KEYPAD_BTN_HEIGH, KEYPAD_FONT, OPT_FLAT, " ");
  14.   GD.Tag(TAG_BUTTON_KEYPAD_5);
  15.   GD.cmd_button(KEYPAD_SEC_ROW_X_POS, KEYPAD_SEC_COL_Y_POS, KEYPAD_BTN_WIDTH, KEYPAD_BTN_HEIGH, KEYPAD_FONT, OPT_FLAT, " ");
  16.   GD.Tag(TAG_BUTTON_KEYPAD_6);
  17.   GD.cmd_button(KEYPAD_THI_ROW_X_POS, KEYPAD_SEC_COL_Y_POS, KEYPAD_BTN_WIDTH, KEYPAD_BTN_HEIGH, KEYPAD_FONT, OPT_FLAT, " ");
  18.   GD.Tag(TAG_BUTTON_KEYPAD_7);
  19.   GD.cmd_button(KEYPAD_FIR_ROW_X_POS, KEYPAD_THI_COL_Y_POS, KEYPAD_BTN_WIDTH, KEYPAD_BTN_HEIGH, KEYPAD_FONT, OPT_FLAT, " ");
  20.   GD.Tag(TAG_BUTTON_KEYPAD_8);
  21.   GD.cmd_button(KEYPAD_SEC_ROW_X_POS, KEYPAD_THI_COL_Y_POS, KEYPAD_BTN_WIDTH, KEYPAD_BTN_HEIGH, KEYPAD_FONT, OPT_FLAT, " ");
  22.   GD.Tag(TAG_BUTTON_KEYPAD_9);
  23.   GD.cmd_button(KEYPAD_THI_ROW_X_POS, KEYPAD_THI_COL_Y_POS, KEYPAD_BTN_WIDTH, KEYPAD_BTN_HEIGH, KEYPAD_FONT, OPT_FLAT, " ");
  24.   GD.Tag(TAG_BUTTON_KEYPAD_0);
  25.   GD.cmd_button(KEYPAD_FIR_ROW_X_POS, KEYPAD_FOR_COL_Y_POS, KEYPAD_BTN_WIDTH, KEYPAD_BTN_HEIGH, KEYPAD_FONT, OPT_FLAT, " ");
  26.        
  27.   GD.Tag(TAG_BUTTON_KEYPAD_STAR);
  28.   GD.cmd_button(KEYPAD_SEC_ROW_X_POS, KEYPAD_FOR_COL_Y_POS, KEYPAD_BTN_WIDTH, KEYPAD_BTN_HEIGH, KEYPAD_FONT, OPT_FLAT, " ");
  29.   GD.Tag(TAG_BUTTON_KEYPAD_HASH);
  30.   GD.cmd_button(KEYPAD_THI_ROW_X_POS, KEYPAD_FOR_COL_Y_POS, KEYPAD_BTN_WIDTH, KEYPAD_BTN_HEIGH, KEYPAD_FONT, OPT_FLAT, " ");
  31.   //Display txt for all btn
  32.   GD.ColorA(255);
  33.   GD.cmd_text(KEYPAD_FIR_ROW_X_POS + (KEYPAD_TXT_POSITION_X), KEYPAD_FIR_COL_Y_POS + (KEYPAD_TXT_POSITION_Y), KEYPAD_FONT, OPT_CENTER, "1");
  34.   GD.cmd_text(KEYPAD_SEC_ROW_X_POS + (KEYPAD_TXT_POSITION_X), KEYPAD_FIR_COL_Y_POS + (KEYPAD_TXT_POSITION_Y), KEYPAD_FONT, OPT_CENTER, "2");
  35.   GD.cmd_text(KEYPAD_THI_ROW_X_POS + (KEYPAD_TXT_POSITION_X), KEYPAD_FIR_COL_Y_POS + (KEYPAD_TXT_POSITION_Y), KEYPAD_FONT, OPT_CENTER, "3");
  36.   GD.cmd_text(KEYPAD_FIR_ROW_X_POS + (KEYPAD_TXT_POSITION_X), KEYPAD_SEC_COL_Y_POS + (KEYPAD_TXT_POSITION_Y), KEYPAD_FONT, OPT_CENTER, "4");
  37.   GD.cmd_text(KEYPAD_SEC_ROW_X_POS + (KEYPAD_TXT_POSITION_X), KEYPAD_SEC_COL_Y_POS + (KEYPAD_TXT_POSITION_Y), KEYPAD_FONT, OPT_CENTER, "5");
  38.   GD.cmd_text(KEYPAD_THI_ROW_X_POS + (KEYPAD_TXT_POSITION_X), KEYPAD_SEC_COL_Y_POS + (KEYPAD_TXT_POSITION_Y), KEYPAD_FONT, OPT_CENTER, "6");
  39.   GD.cmd_text(KEYPAD_FIR_ROW_X_POS + (KEYPAD_TXT_POSITION_X), KEYPAD_THI_COL_Y_POS + (KEYPAD_TXT_POSITION_Y), KEYPAD_FONT, OPT_CENTER, "7");
  40.   GD.cmd_text(KEYPAD_SEC_ROW_X_POS + (KEYPAD_TXT_POSITION_X), KEYPAD_THI_COL_Y_POS + (KEYPAD_TXT_POSITION_Y), KEYPAD_FONT, OPT_CENTER, "8");
  41.   GD.cmd_text(KEYPAD_THI_ROW_X_POS + (KEYPAD_TXT_POSITION_X), KEYPAD_THI_COL_Y_POS + (KEYPAD_TXT_POSITION_Y), KEYPAD_FONT, OPT_CENTER, "9");
  42.   GD.cmd_text(KEYPAD_FIR_ROW_X_POS + (KEYPAD_TXT_POSITION_X), KEYPAD_FOR_COL_Y_POS + (KEYPAD_TXT_POSITION_Y), KEYPAD_FONT, OPT_CENTER, "0");
  43.   GD.cmd_text(KEYPAD_SEC_ROW_X_POS + (KEYPAD_TXT_POSITION_X), KEYPAD_FOR_COL_Y_POS + (KEYPAD_TXT_POSITION_Y), KEYPAD_FONT, OPT_CENTER, "*");
  44.   GD.cmd_text(KEYPAD_THI_ROW_X_POS + (KEYPAD_TXT_POSITION_X), KEYPAD_FOR_COL_Y_POS + (KEYPAD_TXT_POSITION_Y), KEYPAD_FONT, OPT_CENTER, "#");
  45. }

Powyższe komendy trzeba zakończyć oczywiście funkcją GD.swap()

W celu sprawdzenia jaki przycisk został wciśnięty należy wykorzystać funkcję GD.get_inputs()

  1. static void CheckClickedBtn(void)
  2. {
  3.   uint8_t checkIfDefaultTagClick = 0;
  4.   GD.get_inputs();
  5.   //Check if any btn Clicked
  6.   if(GD.inputs.tag == 0)
  7.   {
  8.     return;
  9.   }
  10.   switch (GD.inputs.tag) {
  11.     case TAG_BUTTON_KEY_BACK:
  12.         PrepareAndSendTouchFrame(KEYPAD_WINDOW_NUMBER, 4, 1);
  13.         selected_Window = 1;
  14.         break;
  15.     case TAG_BUTTON_FUNCT_BACK:
  16.         PrepareAndSendTouchFrame(KEYPAD_WINDOW_NUMBER, 4, 1);
  17.         selected_Window = 1;
  18.         break;
  19.     case TAG_BUTTON_KEYPAD_1:
  20.         PrepareAndSendTouchFrame(KEYPAD_WINDOW_NUMBER, 3, 1);
  21.         break;
  22.     case TAG_BUTTON_KEYPAD_2:
  23.         PrepareAndSendTouchFrame(KEYPAD_WINDOW_NUMBER, 6, 1);
  24.         break;
  25.     case TAG_BUTTON_KEYPAD_3:
  26.         PrepareAndSendTouchFrame(KEYPAD_WINDOW_NUMBER, 7, 1);
  27.         break;
  28.     case TAG_BUTTON_KEYPAD_4:
  29.         PrepareAndSendTouchFrame(KEYPAD_WINDOW_NUMBER, 5, 1);
  30.         break;
  31.     case TAG_BUTTON_KEYPAD_5:
  32.         PrepareAndSendTouchFrame(KEYPAD_WINDOW_NUMBER, 8, 1);
  33.         break;
  34.     case TAG_BUTTON_KEYPAD_6:
  35.         PrepareAndSendTouchFrame(KEYPAD_WINDOW_NUMBER, 9, 1);
  36.         break;
  37.     case TAG_BUTTON_KEYPAD_7:
  38.         PrepareAndSendTouchFrame(KEYPAD_WINDOW_NUMBER, 10, 1);
  39.         break;
  40.     case TAG_BUTTON_KEYPAD_8:
  41.         PrepareAndSendTouchFrame(KEYPAD_WINDOW_NUMBER, 11, 1);
  42.         break;
  43.     case TAG_BUTTON_KEYPAD_9:
  44.         PrepareAndSendTouchFrame(KEYPAD_WINDOW_NUMBER, 12, 1);
  45.         break;
  46.     case TAG_BUTTON_KEYPAD_0:
  47.         PrepareAndSendTouchFrame(KEYPAD_WINDOW_NUMBER, 14, 1);
  48.         break;
  49.     case TAG_BUTTON_KEYPAD_STAR:
  50.         PrepareAndSendTouchFrame(KEYPAD_WINDOW_NUMBER, 13, 1);
  51.         break;
  52.     case TAG_BUTTON_KEYPAD_HASH:
  53.         PrepareAndSendTouchFrame(KEYPAD_WINDOW_NUMBER, 15, 1);
  54.         break;
  55.     default:
  56.         //Program should not come to this place
  57.         checkIfDefaultTagClick = 0xFF;
  58.         break;
  59.     }

Do każdego przycisku został przyporządkowany odpowiedni tag. Na jego podstawie określane jest który z przycisków został wybrany. Dzięki takiemu rozwiązaniu nie ma konieczności bezpośredniego sprawdzania w programie w którym punkcie na ekranie nastąpiło kliknięcie.

Zmodyfikowaną biblioteki można pobrać z dysku Google pod tym linkiem.