apitest.ino 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #include <EEPROM.h>
  2. #include <SPI.h>
  3. #include <GD2.h>
  4. #include "apitest_assets.h"
  5. static int y = 0;
  6. static int null()
  7. {
  8. return 0;
  9. }
  10. static int inflate()
  11. {
  12. GD.cmd_inflate(0);
  13. GD.copy(compressed, sizeof(compressed));
  14. GD.finish();
  15. return 0;
  16. }
  17. static int setfont()
  18. {
  19. uint32_t base = 76000;
  20. GD.cmd_inflate(base);
  21. GD.copy(compressed, sizeof(compressed));
  22. GD.BitmapHandle(12);
  23. GD.BitmapSource(base + 148);
  24. GD.BitmapLayout(L4, 8, 17);
  25. GD.BitmapSize(NEAREST, BORDER, BORDER, 16, 17);
  26. GD.cmd_setfont(12, base);
  27. GD.cmd_text(200, y, 12, 0, "abcdefghijklmnopqrstuvwxyz");
  28. GD.finish();
  29. return 0;
  30. }
  31. /* atan2(): check for hangs in atan2() */
  32. static int atan2()
  33. {
  34. int16_t tricky[6] = {-32768, -32767, -1, 0, 1, 32767};
  35. byte i, j;
  36. for (i = 0; i < 6; i++)
  37. for (j = 0; j < 6; j++)
  38. GD.atan2(tricky[i], tricky[j]);
  39. return 0;
  40. }
  41. static int randrange()
  42. {
  43. const size_t N = 21;
  44. uint16_t slots[N];
  45. memset(slots, 0, sizeof(slots));
  46. for (int i = 0; i < N * 100; i++)
  47. slots[GD.random(N)]++;
  48. GD.Begin(POINTS);
  49. uint32_t total = 0;
  50. for (int i = 0; i < N; i++) {
  51. GD.PointSize(slots[i]);
  52. GD.Vertex2f(16 * 200 + i * (16 * 280UL) / N, 16 * (y + 7));
  53. if (slots[i] < 20)
  54. return 1;
  55. if (slots[i] > 180)
  56. return 1;
  57. total += slots[i];
  58. }
  59. return (total == (N * 100)) ? 0 : 1;
  60. }
  61. static int textsize()
  62. {
  63. int w, h;
  64. GD.textsize(w, h, 31, "");
  65. if ((w != 0) || (h != 49))
  66. return 1;
  67. GD.textsize(w, h, 26, "hello world");
  68. if ((w != 68) || (h != 16))
  69. return 1;
  70. return 0;
  71. }
  72. #define DOTEST(NAME) \
  73. do { \
  74. GD.cmd_text(110, y, 20, OPT_RIGHTX, #NAME); \
  75. if (NAME()) \
  76. GD.cmd_text(125, y, 21, 0, "FAIL"); \
  77. else \
  78. GD.cmd_text(125, y, 20, 0, "pass"); \
  79. y += 14; \
  80. } while (0)
  81. void setup()
  82. {
  83. Serial.begin(1000000); // JCB
  84. GD.begin(0);
  85. GD.cmd_memset(0, 0x40000UL, 0);
  86. GD.Clear();
  87. DOTEST(null);
  88. DOTEST(inflate);
  89. DOTEST(setfont);
  90. DOTEST(atan2);
  91. DOTEST(randrange);
  92. DOTEST(textsize);
  93. GD.swap();
  94. }
  95. void loop()
  96. {
  97. }