]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_A5_SAMA5D2x_Xplained_IAR/AtmelFiles/utils/lcd_font.c
Add SAMA5D2 Xplained IAR demo.
[freertos] / FreeRTOS / Demo / CORTEX_A5_SAMA5D2x_Xplained_IAR / AtmelFiles / utils / lcd_font.c
1 /* ----------------------------------------------------------------------------\r
2  *         SAM Software Package License\r
3  * ----------------------------------------------------------------------------\r
4  * Copyright (c) 2015, Atmel Corporation\r
5  *\r
6  * All rights reserved.\r
7  *\r
8  * Redistribution and use in source and binary forms, with or without\r
9  * modification, are permitted provided that the following conditions are met:\r
10  *\r
11  * - Redistributions of source code must retain the above copyright notice,\r
12  * this list of conditions and the disclaimer below.\r
13  *\r
14  * Atmel's name may not be used to endorse or promote products derived from\r
15  * this software without specific prior written permission.\r
16  *\r
17  * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
18  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
20  * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
21  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
23  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
24  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
25  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
26  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
27  * ----------------------------------------------------------------------------\r
28  */\r
29 \r
30 /** \file\r
31  *\r
32  * Implementation of draw font on LCD.\r
33  *\r
34  */\r
35 \r
36 /*----------------------------------------------------------------------------\r
37  *        Headers\r
38  *----------------------------------------------------------------------------*/\r
39 \r
40 #include "lcd_font.h"\r
41 #include "lcd_draw.h"\r
42 \r
43 #include "font.h"\r
44 \r
45 #include <assert.h>\r
46 \r
47 /*----------------------------------------------------------------------------\r
48  *        Local variables\r
49  *----------------------------------------------------------------------------*/\r
50 \r
51 /** Global variable describing the font being instanced. */\r
52 //const Font gFont = { 10, 14 };\r
53 \r
54 static uint8_t font_sel = FONT10x14;\r
55 \r
56 /*----------------------------------------------------------------------------\r
57  *        Exported functions\r
58  *----------------------------------------------------------------------------*/\r
59 \r
60 struct _font_parameters* lcdd_select_font (_FONT_enum font)\r
61 {\r
62         font_sel = font;\r
63         return &font_param[font];\r
64 }\r
65 \r
66 uint8_t lcdd_get_selected_font (void)\r
67 {\r
68         return font_sel;\r
69 }\r
70 \r
71 void lcdd_draw_char(uint32_t x, uint32_t y, uint8_t c, uint32_t color)\r
72 {\r
73         uint32_t row, col;\r
74         uint8_t Ch;\r
75         uint8_t width = font_param[font_sel].width ;\r
76     uint8_t height = font_param[font_sel].height;\r
77         const uint8_t* pfont = font_param[font_sel].pfont;\r
78 \r
79         assert((c >= 0x20) && (c <= 0x7F));\r
80 \r
81     switch (font_sel)\r
82     {\r
83       case FONT10x14:\r
84         for (col=0 ; col < width ; col++ ) {\r
85           for (row=0 ; row<8 ; row++ ) {\r
86             Ch = (pfont[((c - 0x20) * 20) + col * 2] >> (7 - row)) & 0x1;\r
87             if (Ch) lcdd_draw_pixel( x+col, y+row, color) ;\r
88           }\r
89           for (row=0; row<6; row++ ) {\r
90             Ch = (pfont[((c - 0x20) * 20) + col * 2 + 1] >> (7 - row)) & 0x1;\r
91             if (Ch) lcdd_draw_pixel( x+col, y+row+8, color) ;\r
92           }\r
93         }\r
94         break;\r
95 \r
96        case FONT10x8:\r
97         for (col=0 ; col < width ; col++ ) {\r
98           Ch = pfont[((c-0x20)*width)+ col];\r
99                   if (Ch) {\r
100             for (row=0 ; row < height; row++ ) {\r
101               if ((Ch>>row)&0x1) {\r
102                   lcdd_draw_pixel( x+(height-row), y+col, color) ;\r
103               }\r
104             }\r
105           }\r
106         }\r
107         break;\r
108 \r
109       case FONT8x8:\r
110       case FONT6x8:\r
111         for (col=0 ; col < width ; col++ ) {\r
112           Ch = pfont[((c-0x20)*width)+ col];\r
113           if (Ch) {\r
114             for (row=0 ; row < height; row++ ) {\r
115               if ((Ch>>row)&0x1)  {\r
116                 if (font_sel == FONT8x8)\r
117                   lcdd_draw_pixel( x+row, y+col, color) ;\r
118                 else\r
119                   lcdd_draw_pixel( x+col, y+row, color) ;\r
120               }\r
121             }\r
122           }\r
123         }\r
124         break;\r
125     }\r
126 }\r
127 \r
128 /**\r
129  * \brief Draws an ASCII character on LCD with given background color.\r
130  *\r
131  * \param x          X-coordinate of character upper-left corner.\r
132  * \param y          Y-coordinate of character upper-left corner.\r
133  * \param c          Character to output.\r
134  * \param fontColor  Character color.\r
135  * \param bgColor    Background color.\r
136  */\r
137 void lcdd_draw_char_with_bgcolor(uint32_t x, uint32_t y, uint8_t c, uint32_t fontColor,\r
138                          uint32_t bgColor)\r
139 {\r
140         uint32_t row, col;\r
141         uint8_t Ch;\r
142         uint8_t width = font_param[font_sel].width ;\r
143     uint8_t height = font_param[font_sel].height;\r
144         const uint8_t* pfont = font_param[font_sel].pfont;\r
145 \r
146         assert((c >= 0x20) && (c <= 0x7F));\r
147 \r
148     switch (font_sel)\r
149     {\r
150       case FONT10x14:\r
151         for (col=0 ; col < width ; col++ ) {\r
152           for (row=0 ; row<8 ; row++ ) {\r
153             Ch = (pfont[((c - 0x20) * 20) + col * 2] >> (7 - row)) & 0x1;\r
154             if (Ch) lcdd_draw_pixel( x+col, y+row, fontColor) ;\r
155                         else lcdd_draw_pixel( x+col, y+row, bgColor) ;\r
156           }\r
157           for (row=0; row<6; row++ ) {\r
158             Ch = (pfont[((c - 0x20) * 20) + col * 2 + 1] >> (7 - row)) & 0x1;\r
159             if (Ch) lcdd_draw_pixel( x+col, y+row+8, fontColor) ;\r
160                         else lcdd_draw_pixel( x+col, y+row+8, bgColor) ;\r
161           }\r
162         }\r
163         break;\r
164 \r
165        case FONT10x8:\r
166         for (col=0 ; col < width ; col++ ) {\r
167           Ch = pfont[((c-0x20)*width)+ col];\r
168                   if (Ch) {\r
169             for (row=0 ; row < height; row++ ) {\r
170               if ((Ch>>row)&0x1) {\r
171                   lcdd_draw_pixel( x+(height-row), y+col, fontColor) ;\r
172                           }\r
173                           else {\r
174                                   lcdd_draw_pixel( x+(height-row), y+col, bgColor) ;\r
175                           }\r
176             }\r
177           }\r
178         }\r
179         break;\r
180 \r
181       case FONT8x8:\r
182       case FONT6x8:\r
183         for (col=0 ; col < width ; col++ ) {\r
184           Ch = pfont[((c-0x20)*width)+ col];\r
185           if (Ch) {\r
186             for (row=0 ; row < height; row++ ) {\r
187               if ((Ch>>row)&0x1)  {\r
188                 if (font_sel == FONT8x8)\r
189                   lcdd_draw_pixel( x+row, y+col, fontColor) ;\r
190                 else\r
191                   lcdd_draw_pixel( x+col, y+row, fontColor) ;\r
192               }\r
193                           else {\r
194                                   if (font_sel == FONT8x8)\r
195                   lcdd_draw_pixel( x+row, y+col, bgColor) ;\r
196                 else\r
197                   lcdd_draw_pixel( x+col, y+row, bgColor) ;\r
198                           }\r
199             }\r
200           }\r
201         }\r
202         break;\r
203     }\r
204 }\r