RSeries astromech firmware
Font.h
Go to the documentation of this file.
1 #ifndef Font_h
2 #define Font_h
3 
11 class Font4x4
12 {
13 public:
14  virtual bool getLetter(const char inChar, byte* outBuffer) = 0;
15 
16 protected:
17  bool getLetter4x4(const char inChar, byte* outBuffer, const byte* fontData, size_t fontDataSize)
18  {
19  const byte* ptr = fontData;
20  const byte* end = fontData + fontDataSize;
21  for (; ptr < end; ptr += 3)
22  {
23  if (pgm_read_byte(ptr++) == inChar)
24  {
25  for (byte i = 0; i < 3; i++)
26  {
27  outBuffer[i] = pgm_read_byte(ptr++);
28  }
29  return true;
30  }
31  }
32  ptr = &fontData[1];
33  for (byte i = 0; i < 3; i++)
34  {
35  outBuffer[i] = pgm_read_byte(ptr++);
36  }
37  return false;
38  }
39 };
40 
48 class Font8x5
49 {
50 public:
51  virtual bool getLetter(const char inChar, byte* outBuffer) = 0;
52 
53 protected:
54  bool getLetter8x5(const char inChar, byte* outBuffer, const byte* fontData, size_t fontDataSize)
55  {
56  const byte* ptr = fontData;
57  const byte* end = fontData + fontDataSize;
58  for (; ptr < end; ptr += 5)
59  {
60  if (pgm_read_byte(ptr++) == inChar)
61  {
62  for (byte i = 0; i < 5; i++)
63  {
64  outBuffer[i] = pgm_read_byte(ptr++);
65  }
66  return true;
67  }
68  }
69  ptr = &fontData[1];
70  for (byte i = 0; i < 5; i++)
71  {
72  outBuffer[i] = pgm_read_byte(ptr++);
73  }
74  return false;
75  }
76 };
77 
85 class Font8x8
86 {
87 public:
88  virtual bool getLetter(const char inChar, byte* outBuffer) = 0;
89 };
90 
99 {
100 public:
101  virtual bool getLetter(const char inChar, byte* outBuffer, byte &rowBytes, byte& advance);
102 
103 protected:
104  bool getLetterVar4Pt(const char inChar, byte* outBuffer, byte &rowBytes, byte& advance, const byte* fontData, size_t fontDataSize)
105  {
106  const byte* ptr = fontData;
107  const byte* end = fontData + fontDataSize;
108  for (; ptr < end;)
109  {
110  char ch = pgm_read_byte(ptr++);
111  advance = pgm_read_byte(ptr++);
112  rowBytes = (advance <= 4) ? 1 : 2;
113  if (ch == inChar)
114  {
115  byte* dst = outBuffer;
116  for (byte y = 0; y < 4; y++)
117  {
118  for (byte i = 0; i < rowBytes; i++)
119  *dst++ = pgm_read_byte(ptr++);
120  }
121  return true;
122  }
123  ptr += rowBytes * 4;
124  }
125  // interpret missing glyph as white-space
126  advance = 3;
127  rowBytes = 0;
128  return false;
129  }
130 };
131 
140 {
141 public:
143  {
144  static LatinFontVar4pt font;
145  return &font;
146  }
147 
148  virtual bool getLetter(const char inChar, byte* outBuffer, byte &rowBytes, byte& advance)
149  {
150  static const byte sData[] PROGMEM =
151  {
152  '.', 1,
153  0b00000000,
154  0b00000000,
155  0b00000000,
156  0b11000000,
157 
158  'A', 3,
159  0b10111000,
160  0b11001100,
161  0b11111100,
162  0b11001100,
163 
164  'B', 3,
165  0b11000000,
166  0b11111000,
167  0b11001100,
168  0b11111000,
169 
170  'C', 3,
171  0b10111100,
172  0b11000000,
173  0b11000000,
174  0b10111100,
175 
176  'D', 3,
177  0b11111000,
178  0b11001100,
179  0b11001100,
180  0b11111000,
181 
182  'E', 3,
183  0b11111100,
184  0b11000000,
185  0b11110000,
186  0b11111100,
187 
188  'F', 3,
189  0b11111100,
190  0b11000000,
191  0b11110000,
192  0b11000000,
193 
194  'G', 3,
195  0b10111100,
196  0b11000000,
197  0b11001100,
198  0b10111100,
199 
200  'H', 3,
201  0b11001100,
202  0b11001100,
203  0b11111100,
204  0b11001100,
205 
206  'I', 1,
207  0b11000000,
208  0b11000000,
209  0b11000000,
210  0b11000000,
211 
212  'J', 2,
213  0b00110000,
214  0b00110000,
215  0b00110000,
216  0b11100000,
217 
218  'K', 3,
219  0b11001100,
220  0b11110000,
221  0b11001100,
222  0b11001100,
223 
224  'L', 3,
225  0b11000000,
226  0b11000000,
227  0b11000000,
228  0b11111100,
229 
230  'M', 3,
231  0b11101100,
232  0b11111100,
233  0b11001100,
234  0b11001100,
235 
236  'N', 3,
237  0b11001100,
238  0b11111100,
239  0b11111100,
240  0b11001100,
241 
242  'O', 3,
243  0b10111000,
244  0b11001100,
245  0b11001100,
246  0b10111000,
247 
248  'P', 3,
249  0b11111000,
250  0b11001100,
251  0b11111000,
252  0b11000000,
253 
254  'Q', 4,
255  0b10111000,
256  0b11001100,
257  0b11001100,
258  0b10111111,
259 
260  'R', 3,
261  0b11110000,
262  0b11001100,
263  0b11110000,
264  0b11001100,
265 
266  'S', 3,
267  0b11111100,
268  0b11000000,
269  0b00001100,
270  0b11111100,
271 
272  'T', 3,
273  0b11111100,
274  0b00110000,
275  0b00110000,
276  0b00110000,
277 
278  'U', 3,
279  0b11001100,
280  0b11001100,
281  0b11001100,
282  0b10111000,
283 
284  'V', 3,
285  0b11001100,
286  0b11001100,
287  0b11001100,
288  0b00110000,
289 
290  'W', 5,
291  0b11000000, 0b11000000,
292  0b11001100, 0b11000000,
293  0b11101110, 0b11000000,
294  0b00110011, 0b00000000,
295 
296  'X', 3,
297  0b11001100,
298  0b00110000,
299  0b00110000,
300  0b11001100,
301 
302  'Y', 3,
303  0b11001100,
304  0b11001100,
305  0b00110000,
306  0b00110000,
307 
308  'Z', 3,
309  0b11111100,
310  0b00101100,
311  0b11100000,
312  0b11111100,
313 
314  '\'', 1,
315  0b11000000,
316  0b00000000,
317  0b00000000,
318  0b00000000,
319 
320  '!', 1,
321  0b11000000,
322  0b11000000,
323  0b00000000,
324  0b11000000,
325 
326  '-', 3,
327  0b00000000,
328  0b00000000,
329  0b00111100,
330  0b00000000,
331 
332  '0', 3,
333  0b10111000,
334  0b11001100,
335  0b11001100,
336  0b10111000,
337 
338  '1', 2,
339  0b00110000,
340  0b10110000,
341  0b00110000,
342  0b00110000,
343 
344  '2', 3,
345  0b11110000,
346  0b10001100,
347  0b00110000,
348  0b11111100,
349 
350  '3', 3,
351  0b11111100,
352  0b00111100,
353  0b00001100,
354  0b11111100,
355 
356  '4', 3,
357  0b11001100,
358  0b11001100,
359  0b11111100,
360  0b00001100,
361 
362  '5', 3,
363  0b11111100,
364  0b11000000,
365  0b00001100,
366  0b11111100,
367 
368  '6', 3,
369  0b11000000,
370  0b11111000,
371  0b11001100,
372  0b11111100,
373 
374  '7', 3,
375  0b11111100,
376  0b00001100,
377  0b00001100,
378  0b00001100,
379 
380  '8', 3,
381  0b11111100,
382  0b11001100,
383  0b11101100,
384  0b11111100,
385 
386  '9', 3,
387  0b11111100,
388  0b11001100,
389  0b10111100,
390  0b00001100,
391  };
392  return getLetterVar4Pt(inChar, outBuffer, rowBytes, advance, sData, sizeof(sData));
393  }
394 };
395 
403 class LatinFont4x4 : public Font4x4
404 {
405 public:
406  static Font4x4* instance()
407  {
408  static LatinFont4x4 font;
409  return &font;
410  }
411 
412  virtual bool getLetter(const char inChar, byte* outBuffer)
413  {
414  static const byte sData[] PROGMEM =
415  {
416  'A',
417  0b11111001,
418  0b11111001,
419 
420  'B',
421  0b10001110,
422  0b10101110,
423 
424  'C',
425  0b11111000,
426  0b10001111,
427 
428  'D',
429  0b11101001,
430  0b10011110,
431 
432  'E',
433  0b11111110,
434  0b10001111,
435 
436  'F',
437  0b11111110,
438  0b10001000,
439 
440  'G',
441  0b11111000,
442  0b10011111,
443 
444  'H',
445  0b10001000,
446  0b11111001,
447 
448  'I',
449  0b01000100,
450  0b01000100,
451 
452  'J',
453  0b01000100,
454  0b01001100,
455 
456  'K',
457  0b10101100,
458  0b10101001,
459 
460  'L',
461  0b10001000,
462  0b10001111,
463 
464  'M',
465  0b10011111,
466  0b10011001,
467 
468  'N',
469  0b10011101,
470  0b10111001,
471 
472  'O',
473  0b11111001,
474  0b10011111,
475 
476  'P',
477  0b11111001,
478  0b11101000,
479 
480  'Q',
481  0b11111001,
482  0b11110001,
483 
484  'R',
485  0b11101001,
486  0b11001010,
487 
488  'S',
489  0b11111000,
490  0b00011111,
491 
492  'T',
493  0b11110100,
494  0b01000100,
495 
496  'U',
497  0b10011001,
498  0b10011111,
499 
500  'V',
501  0b10010101,
502  0b00110001,
503 
504  'W',
505  0b10011001,
506  0b10010110,
507 
508  'X',
509  0b00001010,
510  0b01001010,
511 
512  'Y',
513  0b10010110,
514  0b00100010,
515 
516  'Z',
517  0b11110100,
518  0b00101111,
519  };
520  return getLetter4x4(inChar, outBuffer, sData, sizeof(sData));
521  }
522 };
523 
531 class LatinFont8x5 : public Font8x5
532 {
533 public:
534  static Font8x5* instance()
535  {
536  static LatinFont8x5 font;
537  return &font;
538  }
539 
540  virtual bool getLetter(const char inChar, byte* outBuffer)
541  {
543  // Latin Alphabet
544  static const byte sData[] PROGMEM =
545  {
546  ' ', // space
547  0b00000000,
548  0b00000000,
549  0b00000000,
550  0b00000000,
551  0b00000000,
552 
553  'A',
554  0b01100000,
555  0b10010000,
556  0b11110000,
557  0b10010000,
558  0b10010000,
559 
560  'B',
561  0b11100000,
562  0b10010000,
563  0b11100000,
564  0b10010000,
565  0b11100000,
566 
567  'C',
568  0b01100000,
569  0b10010000,
570  0b10000000,
571  0b10010000,
572  0b01100000,
573 
574  'D',
575  0b1110000,
576  0b1001000,
577  0b1001000,
578  0b1001000,
579  0b1110000,
580 
581  'E',
582  0b1111000,
583  0b1000000,
584  0b1110000,
585  0b1000000,
586  0b1111000,
587 
588  'F',
589  0b11110000,
590  0b10000000,
591  0b11100000,
592  0b10000000,
593  0b10000000,
594 
595  'G',
596  0b01110000,
597  0b10000000,
598  0b10110000,
599  0b10010000,
600  0b01100000,
601 
602  'H',
603  0b10010000,
604  0b10010000,
605  0b11110000,
606  0b10010000,
607  0b10010000,
608 
609  'I',
610  0b11100000,
611  0b01000000,
612  0b01000000,
613  0b01000000,
614  0b11100000,
615 
616  'J',
617  0b00010000,
618  0b00010000,
619  0b00010000,
620  0b10010000,
621  0b01100000,
622 
623  'K',
624  0b10010000,
625  0b10100000,
626  0b11000000,
627  0b10100000,
628  0b10010000,
629 
630  'L',
631  0b10000000,
632  0b10000000,
633  0b10000000,
634  0b10000000,
635  0b11110000,
636 
637  'M',
638  0b10001000,
639  0b11011000,
640  0b10101000,
641  0b10001000,
642  0b10001000,
643 
644  'N',
645  0b10010000,
646  0b11010000,
647  0b10110000,
648  0b10010000,
649  0b10010000,
650 
651  'O',
652  0b01100000,
653  0b10010000,
654  0b10010000,
655  0b10010000,
656  0b01100000,
657 
658  'P',
659  0b11100000,
660  0b10010000,
661  0b11100000,
662  0b10000000,
663  0b10000000,
664 
665  'Q',
666  0b01100000,
667  0b10010000,
668  0b10110000,
669  0b10010000,
670  0b01101000,
671 
672  'R',
673  0b11100000,
674  0b10010000,
675  0b11100000,
676  0b10100000,
677  0b10010000,
678 
679  'S',
680  0b01110000,
681  0b10000000,
682  0b01100000,
683  0b00010000,
684  0b11100000,
685 
686  'T',
687  0b11111000,
688  0b00100000,
689  0b00100000,
690  0b00100000,
691  0b00100000,
692 
693  'U',
694  0b10010000,
695  0b10010000,
696  0b10010000,
697  0b10010000,
698  0b01100000,
699 
700  'V',
701  0b10010000,
702  0b10010000,
703  0b10010000,
704  0b01100000,
705  0b01100000,
706 
707  'W',
708  0b10001000,
709  0b10001000,
710  0b10101000,
711  0b11011000,
712  0b10001000,
713 
714  'X',
715  0b10010000,
716  0b10010000,
717  0b01100000,
718  0b10010000,
719  0b10010000,
720 
721  'Y',
722  0b10010000,
723  0b10010000,
724  0b01100000,
725  0b01100000,
726  0b01100000,
727 
728  'Z',
729  0b11110000,
730  0b00100000,
731  0b01000000,
732  0b10000000,
733  0b11110000,
734 
735  '0',
736  0b01100000,
737  0b10110000,
738  0b11010000,
739  0b10010000,
740  0b01100000,
741 
742  '1',
743  0b01100000,
744  0b10100000,
745  0b00100000,
746  0b00100000,
747  0b11110000,
748 
749  '2',
750  0b01100000,
751  0b10010000,
752  0b00100000,
753  0b01000000,
754  0b11110000,
755 
756  '3',
757  0b11110000,
758  0b00010000,
759  0b01110000,
760  0b00010000,
761  0b11110000,
762 
763  '4',
764  0b10010000,
765  0b10010000,
766  0b11110000,
767  0b00010000,
768  0b00010000,
769 
770  '5',
771  0b11110000,
772  0b10000000,
773  0b11100000,
774  0b00010000,
775  0b11100000,
776 
777  '6',
778  0b01100000,
779  0b10000000,
780  0b11100000,
781  0b10010000,
782  0b01100000,
783 
784  '7',
785  0b11110000,
786  0b00010000,
787  0b00100000,
788  0b00100000,
789  0b00100000,
790 
791  '8',
792  0b01100000,
793  0b10010000,
794  0b01100000,
795  0b10010000,
796  0b01100000,
797 
798  '9',
799  0b01100000,
800  0b10010000,
801  0b01110000,
802  0b00010000,
803  0b01100000,
804 
805  '*', // Heart symbol
806  0b01101100,
807  0b10010010,
808  0b10000010,
809  0b01000100,
810  0b00010000,
811 
812  '#', // Hash
813  0b01010000,
814  0b11111000,
815  0b01010000,
816  0b11111000,
817  0b01010000,
818 
819  '@', // @
820  0b01100000,
821  0b10010000,
822  0b10110000,
823  0b10000000,
824  0b01110000,
825 
826  '-', // dash - Symbol
827  0b00000000,
828  0b00000000,
829  0b11100000,
830  0b00000000,
831  0b00000000,
832 
833  '|', // vertical bar
834  0b10000000,
835  0b10000000,
836  0b10000000,
837  0b10000000,
838  0b10000000,
839 
840  '<', // up symbol
841  0b10000000,
842  0b01000000,
843  0b00100000,
844  0b00010000,
845  0b00001000,
846 
847  '>', // down symbol
848  0b00001000,
849  0b00010000,
850  0b00100000,
851  0b01000000,
852  0b10000000,
853 
854  '.', // dot symbol
855  0b00000000,
856  0b00000000,
857  0b00000000,
858  0b00000000,
859  0b10000000,
860 
861  '?', // question mark
862  0b11000000,
863  0b00100000,
864  0b01000000,
865  0b00000000,
866  0b01000000,
867 
868  '!', // exclamation point
869  0b10000000,
870  0b10000000,
871  0b10000000,
872  0b00000000,
873  0b10000000,
874  };
875  return getLetter8x5(inChar, outBuffer, sData, sizeof(sData));
876  }
877 };
878 
886 class AurabeshFont8x5 : public Font8x5
887 {
888 public:
889  static Font8x5* instance()
890  {
891  static AurabeshFont8x5 font;
892  return &font;
893  }
894 
895  virtual bool getLetter(const char inChar, byte* outBuffer)
896  {
898  // Aurabesh Alphabet
899  static const byte sData[] PROGMEM =
900  {
901  ' ', // space
902  0b00000000,
903  0b00000000,
904  0b00000000,
905  0b00000000,
906  0b00000000,
907 
908  '2',
909  0b11110000,
910  0b10010000,
911  0b00100000,
912  0b10010000,
913  0b11110000,
914 
915  'A',
916  0b10001000,
917  0b01111000,
918  0b00000000,
919  0b01111000,
920  0b10001000,
921 
922  'B',
923  0b01110000,
924  0b10001000,
925  0b01110000,
926  0b10001000,
927  0b01110000,
928 
929  'C',
930  0b00001000,
931  0b00001000,
932  0b00100000,
933  0b10000000,
934  0b10000000,
935 
936  'D',
937  0b11111000,
938  0b01000000,
939  0b00111000,
940  0b00010000,
941  0b00001000,
942 
943  'E',
944  0b11001000,
945  0b11001000,
946  0b11001000,
947  0b10110000,
948  0b10100000,
949 
950  'F',
951  0b10000000,
952  0b01010000,
953  0b00111000,
954  0b00011000,
955  0b11111000,
956 
957  'G',
958  0b11101000,
959  0b10101000,
960  0b10001000,
961  0b01001000,
962  0b00111000,
963 
964  'H',
965  0b11111000,
966  0b00000000,
967  0b01110000,
968  0b00000000,
969  0b11111000,
970 
971  'I',
972  0b10000000,
973  0b11000000,
974  0b10000000,
975  0b10000000,
976  0b10000000,
977 
978  'J',
979  0b10000000,
980  0b11000000,
981  0b01111000,
982  0b00100000,
983  0b00011000,
984 
985  'K',
986  0b11111000,
987  0b10000000,
988  0b10000000,
989  0b10000000,
990  0b11111000,
991 
992  'L',
993  0b10000000,
994  0b10001000,
995  0b10010000,
996  0b10100000,
997  0b11000000,
998 
999  'M',
1000  0b11000000,
1001  0b00100000,
1002  0b00010000,
1003  0b00001000,
1004  0b11111000,
1005 
1006  'N',
1007  0b01010000,
1008  0b10101000,
1009  0b10101000,
1010  0b10011000,
1011  0b10010000,
1012 
1013  'O',
1014  0b00000000,
1015  0b01110000,
1016  0b10001000,
1017  0b10001000,
1018  0b11111000,
1019 
1020  'P',
1021  0b10110000,
1022  0b10101000,
1023  0b10001000,
1024  0b10001000,
1025  0b11110000,
1026 
1027  'Q',
1028  0b11111000,
1029  0b10001000,
1030  0b00001000,
1031  0b00001000,
1032  0b00111000,
1033 
1034  'R',
1035  0b11111000,
1036  0b01000000,
1037  0b00100000,
1038  0b00010000,
1039  0b00001000,
1040 
1041  'S',
1042  0b10000000,
1043  0b10010000,
1044  0b10101000,
1045  0b11010000,
1046  0b10100000,
1047 
1048  'T',
1049  0b01000000,
1050  0b01000000,
1051  0b01000000,
1052  0b11100000,
1053  0b01000000,
1054 
1055  'U',
1056  0b11001000,
1057  0b10001000,
1058  0b10001000,
1059  0b10001000,
1060  0b01110000,
1061 
1062  'V',
1063  0b10001000,
1064  0b01010000,
1065  0b00100000,
1066  0b00100000,
1067  0b00100000,
1068 
1069  'W',
1070  0b11111000,
1071  0b10001000,
1072  0b10001000,
1073  0b10001000,
1074  0b11111000,
1075 
1076  'X',
1077  0b00100000,
1078  0b01010000,
1079  0b10001000,
1080  0b10001000,
1081  0b11111000,
1082 
1083  'Y',
1084  0b10011000,
1085  0b10101000,
1086  0b01010000,
1087  0b01010000,
1088  0b00100000,
1089 
1090  'Z',
1091  0b10110000,
1092  0b10101000,
1093  0b10000000,
1094  0b10001000,
1095  0b11111000
1096  };
1097  return getLetter8x5(inChar, outBuffer, sData, sizeof(sData));
1098  }
1099 };
1100 
1108 class LatinFont8x8 : public Font8x8
1109 {
1110 public:
1111  static Font8x8* instance()
1112  {
1113  static LatinFont8x8 font;
1114  return &font;
1115  }
1116 
1117  virtual bool getLetter(const char inChar, byte* outBuffer)
1118  {
1120  // Latin Alphabet
1121  // --------------------------- 0-127 ---------------------------
1122  static const byte sData[128][8] PROGMEM = {
1123  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0000 (uni0000.dup1)
1124  {0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e}, // 0001 (uni0001)
1125  {0x7e, 0xff, 0xdb, 0xff, 0xc3, 0xe7, 0xff, 0x7e}, // 0002 (uni0002)
1126  {0x6c, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00}, // 0003 (uni0003)
1127  {0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00}, // 0004 (uni0004)
1128  {0x38, 0x7c, 0x38, 0xfe, 0xfe, 0x7c, 0x38, 0x7c}, // 0005 (uni0005)
1129  {0x10, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x7c}, // 0006 (uni0006)
1130  {0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00}, // 0007 (uni0007)
1131  {0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff}, // 0008 (uni0008)
1132  {0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00}, // 0009 (uni0009)
1133  {0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff}, // 000a (uni000A)
1134  {0x0f, 0x07, 0x0f, 0x7d, 0xcc, 0xcc, 0xcc, 0x78}, // 000b (uni000B)
1135  {0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18}, // 000c (uni000C)
1136  {0x3f, 0x33, 0x3f, 0x30, 0x30, 0x70, 0xf0, 0xe0}, // 000d (uni000D)
1137  {0x7f, 0x63, 0x7f, 0x63, 0x63, 0x67, 0xe6, 0xc0}, // 000e (uni000E)
1138  {0x99, 0x5a, 0x3c, 0xe7, 0xe7, 0x3c, 0x5a, 0x99}, // 000f (uni000F)
1139  {0x80, 0xe0, 0xf8, 0xfe, 0xf8, 0xe0, 0x80, 0x00}, // 0010 (uni0010)
1140  {0x02, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x02, 0x00}, // 0011 (uni0011)
1141  {0x18, 0x3c, 0x7e, 0x18, 0x18, 0x7e, 0x3c, 0x18}, // 0012 (uni0012)
1142  {0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00}, // 0013 (uni0013)
1143  {0x7f, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x00}, // 0014 (uni0014)
1144  {0x3e, 0x63, 0x38, 0x6c, 0x6c, 0x38, 0xcc, 0x78}, // 0015 (uni0015)
1145  {0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x00}, // 0016 (uni0016)
1146  {0x18, 0x3c, 0x7e, 0x18, 0x7e, 0x3c, 0x18, 0xff}, // 0017 (uni0017)
1147  {0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00}, // 0018 (uni0018)
1148  {0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00}, // 0019 (uni0019)
1149  {0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00}, // 001a (uni001A)
1150  {0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00}, // 001b (uni001B)
1151  {0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00}, // 001c (uni001C)
1152  {0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00}, // 001d (uni001D)
1153  {0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x00, 0x00}, // 001e (uni001E)
1154  {0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18, 0x00, 0x00}, // 001f (uni001F)
1155  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0020 (space)
1156  {0x30, 0x78, 0x78, 0x30, 0x30, 0x00, 0x30, 0x00}, // 0021 (exclam)
1157  {0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0022 (quotedbl)
1158  {0x6c, 0x6c, 0xfe, 0x6c, 0xfe, 0x6c, 0x6c, 0x00}, // 0023 (numbersign)
1159  {0x30, 0x7c, 0xc0, 0x78, 0x0c, 0xf8, 0x30, 0x00}, // 0024 (dollar)
1160  {0x00, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xc6, 0x00}, // 0025 (percent)
1161  {0x38, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0x76, 0x00}, // 0026 (ampersand)
1162  {0x60, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0027 (quotesingle)
1163  {0x18, 0x30, 0x60, 0x60, 0x60, 0x30, 0x18, 0x00}, // 0028 (parenleft)
1164  {0x60, 0x30, 0x18, 0x18, 0x18, 0x30, 0x60, 0x00}, // 0029 (parenright)
1165  {0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00}, // 002a (asterisk)
1166  {0x00, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x00, 0x00}, // 002b (plus)
1167  {0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x60}, // 002c (comma)
1168  {0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00}, // 002d (hyphen)
1169  {0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00}, // 002e (period)
1170  {0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00}, // 002f (slash)
1171  {0x7c, 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0x7c, 0x00}, // 0030 (zero)
1172  {0x30, 0x70, 0x30, 0x30, 0x30, 0x30, 0xfc, 0x00}, // 0031 (one)
1173  {0x78, 0xcc, 0x0c, 0x38, 0x60, 0xc4, 0xfc, 0x00}, // 0032 (two)
1174  {0x78, 0xcc, 0x0c, 0x38, 0x0c, 0xcc, 0x78, 0x00}, // 0033 (three)
1175  {0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x1e, 0x00}, // 0034 (four)
1176  {0xfc, 0xc0, 0xf8, 0x0c, 0x0c, 0xcc, 0x78, 0x00}, // 0035 (five)
1177  {0x38, 0x60, 0xc0, 0xf8, 0xcc, 0xcc, 0x78, 0x00}, // 0036 (six)
1178  {0xfc, 0xcc, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x00}, // 0037 (seven)
1179  {0x78, 0xcc, 0xcc, 0x78, 0xcc, 0xcc, 0x78, 0x00}, // 0038 (eight)
1180  {0x78, 0xcc, 0xcc, 0x7c, 0x0c, 0x18, 0x70, 0x00}, // 0039 (nine)
1181  {0x00, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, 0x00}, // 003a (colon)
1182  {0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0x00}, // 003b (semicolon)
1183  {0x18, 0x30, 0x60, 0xc0, 0x60, 0x30, 0x18, 0x00}, // 003c (less)
1184  {0x00, 0x00, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00}, // 003d (equal)
1185  {0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00}, // 003e (greater)
1186  {0x78, 0xcc, 0x0c, 0x18, 0x30, 0x00, 0x30, 0x00}, // 003f (question)
1187  {0x7c, 0xc6, 0xde, 0xde, 0xde, 0xc0, 0x78, 0x00}, // 0040 (at)
1188  {0x30, 0x78, 0xcc, 0xcc, 0xfc, 0xcc, 0xcc, 0x00}, // 0041 (A)
1189  {0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xfc, 0x00}, // 0042 (B)
1190  {0x3c, 0x66, 0xc0, 0xc0, 0xc0, 0x66, 0x3c, 0x00}, // 0043 (C)
1191  {0xf8, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00}, // 0044 (D)
1192  {0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00}, // 0045 (E)
1193  {0xfe, 0x62, 0x68, 0x78, 0x68, 0x60, 0xf0, 0x00}, // 0046 (F)
1194  {0x3c, 0x66, 0xc0, 0xc0, 0xce, 0x66, 0x3e, 0x00}, // 0047 (G)
1195  {0xcc, 0xcc, 0xcc, 0xfc, 0xcc, 0xcc, 0xcc, 0x00}, // 0048 (H)
1196  {0x78, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00}, // 0049 (I)
1197  {0x1e, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00}, // 004a (J)
1198  {0xe6, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00}, // 004b (K)
1199  {0xf0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00}, // 004c (L)
1200  {0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0x00}, // 004d (M)
1201  {0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0x00}, // 004e (N)
1202  {0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00}, // 004f (O)
1203  {0xfc, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00}, // 0050 (P)
1204  {0x78, 0xcc, 0xcc, 0xcc, 0xdc, 0x78, 0x1c, 0x00}, // 0051 (Q)
1205  {0xfc, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0xe6, 0x00}, // 0052 (R)
1206  {0x78, 0xcc, 0xe0, 0x70, 0x1c, 0xcc, 0x78, 0x00}, // 0053 (S)
1207  {0xfc, 0xb4, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00}, // 0054 (T)
1208  {0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xfc, 0x00}, // 0055 (U)
1209  {0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x00}, // 0056 (V)
1210  {0xc6, 0xc6, 0xc6, 0xd6, 0xfe, 0xee, 0xc6, 0x00}, // 0057 (W)
1211  {0xc6, 0xc6, 0x6c, 0x38, 0x38, 0x6c, 0xc6, 0x00}, // 0058 (X)
1212  {0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x30, 0x78, 0x00}, // 0059 (Y)
1213  {0xfe, 0xc6, 0x8c, 0x18, 0x32, 0x66, 0xfe, 0x00}, // 005a (Z)
1214  {0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x78, 0x00}, // 005b (bracketleft)
1215  {0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, 0x00}, // 005c (backslash)
1216  {0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00}, // 005d (bracketright)
1217  {0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00}, // 005e (asciicircum)
1218  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff}, // 005f (underscore)
1219  {0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0060 (grave)
1220  {0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00}, // 0061 (a)
1221  {0xe0, 0x60, 0x60, 0x7c, 0x66, 0x66, 0xdc, 0x00}, // 0062 (b)
1222  {0x00, 0x00, 0x78, 0xcc, 0xc0, 0xcc, 0x78, 0x00}, // 0063 (c)
1223  {0x1c, 0x0c, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00}, // 0064 (d)
1224  {0x00, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00}, // 0065 (e)
1225  {0x38, 0x6c, 0x60, 0xf0, 0x60, 0x60, 0xf0, 0x00}, // 0066 (f)
1226  {0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8}, // 0067 (g)
1227  {0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0xe6, 0x00}, // 0068 (h)
1228  {0x30, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00}, // 0069 (i)
1229  {0x0c, 0x00, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78}, // 006a (j)
1230  {0xe0, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0xe6, 0x00}, // 006b (k)
1231  {0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00}, // 006c (l)
1232  {0x00, 0x00, 0xcc, 0xfe, 0xfe, 0xd6, 0xc6, 0x00}, // 006d (m)
1233  {0x00, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0xcc, 0x00}, // 006e (n)
1234  {0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0x78, 0x00}, // 006f (o)
1235  {0x00, 0x00, 0xdc, 0x66, 0x66, 0x7c, 0x60, 0xf0}, // 0070 (p)
1236  {0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0x1e}, // 0071 (q)
1237  {0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0xf0, 0x00}, // 0072 (r)
1238  {0x00, 0x00, 0x7c, 0xc0, 0x78, 0x0c, 0xf8, 0x00}, // 0073 (s)
1239  {0x10, 0x30, 0x7c, 0x30, 0x30, 0x34, 0x18, 0x00}, // 0074 (t)
1240  {0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00}, // 0075 (u)
1241  {0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x00}, // 0076 (v)
1242  {0x00, 0x00, 0xc6, 0xd6, 0xfe, 0xfe, 0x6c, 0x00}, // 0077 (w)
1243  {0x00, 0x00, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0x00}, // 0078 (x)
1244  {0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8}, // 0079 (y)
1245  {0x00, 0x00, 0xfc, 0x98, 0x30, 0x64, 0xfc, 0x00}, // 007a (z)
1246  {0x1c, 0x30, 0x30, 0xe0, 0x30, 0x30, 0x1c, 0x00}, // 007b (braceleft)
1247  {0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, // 007c (bar)
1248  {0xe0, 0x30, 0x30, 0x1c, 0x30, 0x30, 0xe0, 0x00}, // 007d (braceright)
1249  {0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 007e (asciitilde)
1250  {0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0x00} // 007f (uni007F)
1251  };
1252  if (unsigned(inChar) >= 128)
1253  {
1254  for (byte i = 0; i < 8; i++)
1255  outBuffer[i] = 0;
1256  return false;
1257  }
1258  const byte* ptr = &sData[unsigned(inChar)][0];
1259  for (byte i = 0; i < 8; i++)
1260  outBuffer[i] = pgm_read_byte(ptr++);
1261  return true;
1262  }
1263 };
1264 
1265 #endif
LatinFontVar4pt::getLetter
virtual bool getLetter(const char inChar, byte *outBuffer, byte &rowBytes, byte &advance)
Definition: Font.h:148
LatinFont8x8::getLetter
virtual bool getLetter(const char inChar, byte *outBuffer)
Definition: Font.h:1117
Font8x5::getLetter
virtual bool getLetter(const char inChar, byte *outBuffer)=0
Font4x4::getLetter4x4
bool getLetter4x4(const char inChar, byte *outBuffer, const byte *fontData, size_t fontDataSize)
Definition: Font.h:17
Font8x8::getLetter
virtual bool getLetter(const char inChar, byte *outBuffer)=0
LatinFont8x5::getLetter
virtual bool getLetter(const char inChar, byte *outBuffer)
Definition: Font.h:540
AurabeshFont8x5::getLetter
virtual bool getLetter(const char inChar, byte *outBuffer)
Definition: Font.h:895
FontVar4Pt
Base class for variable width 4pt fonts.
Definition: Font.h:98
Font4x4::getLetter
virtual bool getLetter(const char inChar, byte *outBuffer)=0
FontVar4Pt::getLetter
virtual bool getLetter(const char inChar, byte *outBuffer, byte &rowBytes, byte &advance)
Font8x8
Base class for 8x8 fonts.
Definition: Font.h:85
LatinFont8x5::instance
static Font8x5 * instance()
Definition: Font.h:534
AurabeshFont8x5
Aurabesh font 8x5.
Definition: Font.h:886
Font4x4
Base class for 4x4 fonts.
Definition: Font.h:11
LatinFont8x8::instance
static Font8x8 * instance()
Definition: Font.h:1111
LatinFont8x8
Latin font 8x8.
Definition: Font.h:1108
LatinFont4x4::instance
static Font4x4 * instance()
Definition: Font.h:406
Font8x5::getLetter8x5
bool getLetter8x5(const char inChar, byte *outBuffer, const byte *fontData, size_t fontDataSize)
Definition: Font.h:54
LatinFont4x4::getLetter
virtual bool getLetter(const char inChar, byte *outBuffer)
Definition: Font.h:412
FontVar4Pt::getLetterVar4Pt
bool getLetterVar4Pt(const char inChar, byte *outBuffer, byte &rowBytes, byte &advance, const byte *fontData, size_t fontDataSize)
Definition: Font.h:104
LatinFont4x4
Variable width 4pt Latin font.
Definition: Font.h:403
LatinFontVar4pt
Variable width 4pt Latin font.
Definition: Font.h:139
LatinFontVar4pt::instance
static FontVar4Pt * instance()
Definition: Font.h:142
Font8x5
Base class for 8x5 fonts.
Definition: Font.h:48
LatinFont8x5
Latin font 8x5.
Definition: Font.h:531
AurabeshFont8x5::instance
static Font8x5 * instance()
Definition: Font.h:889