Add EzTune to the settings.yaml
[inav.git] / src / main / drivers / display_ug2864hsweg01.c
blob118acff5730601e1a0e0f4b42f99798fed34328c
1 /*
2 * This file is part of Cleanflight.
4 * Cleanflight is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
9 * Cleanflight is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with Cleanflight. If not, see <http://www.gnu.org/licenses/>.
18 #include <stdbool.h>
19 #include <stdint.h>
20 #include <string.h>
23 #include "platform.h"
25 #ifdef USE_OLED_UG2864
27 #include "drivers/bus.h"
28 #include "drivers/bus_i2c.h"
29 #include "drivers/time.h"
31 #include "display_ug2864hsweg01.h"
33 #define INVERSE_CHAR_FORMAT 0x7f // 0b01111111
34 #define NORMAL_CHAR_FORMAT 0x00 // 0b00000000
36 unsigned char CHAR_FORMAT = NORMAL_CHAR_FORMAT;
38 static const uint8_t multiWiiFont[][5] = { // Refer to "Times New Roman" Font Database... 5 x 7 font
39 { 0x00, 0x00, 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x4F, 0x00, 0x00 }, // ( 1) ! - 0x0021 Exclamation Mark
40 { 0x00, 0x07, 0x00, 0x07, 0x00 }, // ( 2) " - 0x0022 Quotation Mark
41 { 0x14, 0x7F, 0x14, 0x7F, 0x14 }, // ( 3) # - 0x0023 Number Sign
42 { 0x24, 0x2A, 0x7F, 0x2A, 0x12 }, // ( 4) $ - 0x0024 Dollar Sign
43 { 0x23, 0x13, 0x08, 0x64, 0x62 }, // ( 5) % - 0x0025 Percent Sign
44 { 0x36, 0x49, 0x55, 0x22, 0x50 }, // ( 6) & - 0x0026 Ampersand
45 { 0x00, 0x05, 0x03, 0x00, 0x00 }, // ( 7) ' - 0x0027 Apostrophe
46 { 0x00, 0x1C, 0x22, 0x41, 0x00 }, // ( 8) ( - 0x0028 Left Parenthesis
47 { 0x00, 0x41, 0x22, 0x1C, 0x00 }, // ( 9) ) - 0x0029 Right Parenthesis
48 { 0x14, 0x08, 0x3E, 0x08, 0x14 }, // ( 10) * - 0x002A Asterisk
49 { 0x08, 0x08, 0x3E, 0x08, 0x08 }, // ( 11) + - 0x002B Plus Sign
50 { 0x00, 0x50, 0x30, 0x00, 0x00 }, // ( 12) , - 0x002C Comma
51 { 0x08, 0x08, 0x08, 0x08, 0x08 }, // ( 13) - - 0x002D Hyphen-Minus
52 { 0x00, 0x60, 0x60, 0x00, 0x00 }, // ( 14) . - 0x002E Full Stop
53 { 0x20, 0x10, 0x08, 0x04, 0x02 }, // ( 15) / - 0x002F Solidus
54 { 0x3E, 0x51, 0x49, 0x45, 0x3E }, // ( 16) 0 - 0x0030 Digit Zero
55 { 0x00, 0x42, 0x7F, 0x40, 0x00 }, // ( 17) 1 - 0x0031 Digit One
56 { 0x42, 0x61, 0x51, 0x49, 0x46 }, // ( 18) 2 - 0x0032 Digit Two
57 { 0x21, 0x41, 0x45, 0x4B, 0x31 }, // ( 19) 3 - 0x0033 Digit Three
58 { 0x18, 0x14, 0x12, 0x7F, 0x10 }, // ( 20) 4 - 0x0034 Digit Four
59 { 0x27, 0x45, 0x45, 0x45, 0x39 }, // ( 21) 5 - 0x0035 Digit Five
60 { 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // ( 22) 6 - 0x0036 Digit Six
61 { 0x01, 0x71, 0x09, 0x05, 0x03 }, // ( 23) 7 - 0x0037 Digit Seven
62 { 0x36, 0x49, 0x49, 0x49, 0x36 }, // ( 24) 8 - 0x0038 Digit Eight
63 { 0x06, 0x49, 0x49, 0x29, 0x1E }, // ( 25) 9 - 0x0039 Dight Nine
64 { 0x00, 0x36, 0x36, 0x00, 0x00 }, // ( 26) : - 0x003A Colon
65 { 0x00, 0x56, 0x36, 0x00, 0x00 }, // ( 27) ; - 0x003B Semicolon
66 { 0x08, 0x14, 0x22, 0x41, 0x00 }, // ( 28) < - 0x003C Less-Than Sign
67 { 0x14, 0x14, 0x14, 0x14, 0x14 }, // ( 29) = - 0x003D Equals Sign
68 { 0x00, 0x41, 0x22, 0x14, 0x08 }, // ( 30) > - 0x003E Greater-Than Sign
69 { 0x02, 0x01, 0x51, 0x09, 0x06 }, // ( 31) ? - 0x003F Question Mark
70 { 0x32, 0x49, 0x79, 0x41, 0x3E }, // ( 32) @ - 0x0040 Commercial At
71 { 0x7E, 0x11, 0x11, 0x11, 0x7E }, // ( 33) A - 0x0041 Latin Capital Letter A
72 { 0x7F, 0x49, 0x49, 0x49, 0x36 }, // ( 34) B - 0x0042 Latin Capital Letter B
73 { 0x3E, 0x41, 0x41, 0x41, 0x22 }, // ( 35) C - 0x0043 Latin Capital Letter C
74 { 0x7F, 0x41, 0x41, 0x22, 0x1C }, // ( 36) D - 0x0044 Latin Capital Letter D
75 { 0x7F, 0x49, 0x49, 0x49, 0x41 }, // ( 37) E - 0x0045 Latin Capital Letter E
76 { 0x7F, 0x09, 0x09, 0x09, 0x01 }, // ( 38) F - 0x0046 Latin Capital Letter F
77 { 0x3E, 0x41, 0x49, 0x49, 0x7A }, // ( 39) G - 0x0047 Latin Capital Letter G
78 { 0x7F, 0x08, 0x08, 0x08, 0x7F }, // ( 40) H - 0x0048 Latin Capital Letter H
79 { 0x00, 0x41, 0x7F, 0x41, 0x00 }, // ( 41) I - 0x0049 Latin Capital Letter I
80 { 0x20, 0x40, 0x41, 0x3F, 0x01 }, // ( 42) J - 0x004A Latin Capital Letter J
81 { 0x7F, 0x08, 0x14, 0x22, 0x41 }, // ( 43) K - 0x004B Latin Capital Letter K
82 { 0x7F, 0x40, 0x40, 0x40, 0x40 }, // ( 44) L - 0x004C Latin Capital Letter L
83 { 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // ( 45) M - 0x004D Latin Capital Letter M
84 { 0x7F, 0x04, 0x08, 0x10, 0x7F }, // ( 46) N - 0x004E Latin Capital Letter N
85 { 0x3E, 0x41, 0x41, 0x41, 0x3E }, // ( 47) O - 0x004F Latin Capital Letter O
86 { 0x7F, 0x09, 0x09, 0x09, 0x06 }, // ( 48) P - 0x0050 Latin Capital Letter P
87 { 0x3E, 0x41, 0x51, 0x21, 0x5E }, // ( 49) Q - 0x0051 Latin Capital Letter Q
88 { 0x7F, 0x09, 0x19, 0x29, 0x46 }, // ( 50) R - 0x0052 Latin Capital Letter R
89 { 0x46, 0x49, 0x49, 0x49, 0x31 }, // ( 51) S - 0x0053 Latin Capital Letter S
90 { 0x01, 0x01, 0x7F, 0x01, 0x01 }, // ( 52) T - 0x0054 Latin Capital Letter T
91 { 0x3F, 0x40, 0x40, 0x40, 0x3F }, // ( 53) U - 0x0055 Latin Capital Letter U
92 { 0x1F, 0x20, 0x40, 0x20, 0x1F }, // ( 54) V - 0x0056 Latin Capital Letter V
93 { 0x3F, 0x40, 0x38, 0x40, 0x3F }, // ( 55) W - 0x0057 Latin Capital Letter W
94 { 0x63, 0x14, 0x08, 0x14, 0x63 }, // ( 56) X - 0x0058 Latin Capital Letter X
95 { 0x07, 0x08, 0x70, 0x08, 0x07 }, // ( 57) Y - 0x0059 Latin Capital Letter Y
96 { 0x61, 0x51, 0x49, 0x45, 0x43 }, // ( 58) Z - 0x005A Latin Capital Letter Z
97 { 0x00, 0x7F, 0x41, 0x41, 0x00 }, // ( 59) [ - 0x005B Left Square Bracket
98 { 0x02, 0x04, 0x08, 0x10, 0x20 }, // ( 60) \ - 0x005C Reverse Solidus
99 { 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ( 61) ] - 0x005D Right Square Bracket
100 { 0x04, 0x02, 0x01, 0x02, 0x04 }, // ( 62) ^ - 0x005E Circumflex Accent
101 { 0x40, 0x40, 0x40, 0x40, 0x40 }, // ( 63) _ - 0x005F Low Line
102 { 0x01, 0x02, 0x04, 0x00, 0x00 }, // ( 64) ` - 0x0060 Grave Accent
103 { 0x20, 0x54, 0x54, 0x54, 0x78 }, // ( 65) a - 0x0061 Latin Small Letter A
104 { 0x7F, 0x48, 0x44, 0x44, 0x38 }, // ( 66) b - 0x0062 Latin Small Letter B
105 { 0x38, 0x44, 0x44, 0x44, 0x20 }, // ( 67) c - 0x0063 Latin Small Letter C
106 { 0x38, 0x44, 0x44, 0x48, 0x7F }, // ( 68) d - 0x0064 Latin Small Letter D
107 { 0x38, 0x54, 0x54, 0x54, 0x18 }, // ( 69) e - 0x0065 Latin Small Letter E
108 { 0x08, 0x7E, 0x09, 0x01, 0x02 }, // ( 70) f - 0x0066 Latin Small Letter F
109 { 0x06, 0x49, 0x49, 0x49, 0x3F }, // ( 71) g - 0x0067 Latin Small Letter G
110 { 0x7F, 0x08, 0x04, 0x04, 0x78 }, // ( 72) h - 0x0068 Latin Small Letter H
111 { 0x00, 0x44, 0x7D, 0x40, 0x00 }, // ( 73) i - 0x0069 Latin Small Letter I
112 { 0x20, 0x40, 0x44, 0x3D, 0x00 }, // ( 74) j - 0x006A Latin Small Letter J
113 { 0x7F, 0x10, 0x28, 0x44, 0x00 }, // ( 75) k - 0x006B Latin Small Letter K
114 { 0x00, 0x41, 0x7F, 0x40, 0x00 }, // ( 76) l - 0x006C Latin Small Letter L
115 { 0x7C, 0x04, 0x18, 0x04, 0x7C }, // ( 77) m - 0x006D Latin Small Letter M
116 { 0x7C, 0x08, 0x04, 0x04, 0x78 }, // ( 78) n - 0x006E Latin Small Letter N
117 { 0x38, 0x44, 0x44, 0x44, 0x38 }, // ( 79) o - 0x006F Latin Small Letter O
118 { 0x7C, 0x14, 0x14, 0x14, 0x08 }, // ( 80) p - 0x0070 Latin Small Letter P
119 { 0x08, 0x14, 0x14, 0x18, 0x7C }, // ( 81) q - 0x0071 Latin Small Letter Q
120 { 0x7C, 0x08, 0x04, 0x04, 0x08 }, // ( 82) r - 0x0072 Latin Small Letter R
121 { 0x48, 0x54, 0x54, 0x54, 0x20 }, // ( 83) s - 0x0073 Latin Small Letter S
122 { 0x04, 0x3F, 0x44, 0x40, 0x20 }, // ( 84) t - 0x0074 Latin Small Letter T
123 { 0x3C, 0x40, 0x40, 0x20, 0x7C }, // ( 85) u - 0x0075 Latin Small Letter U
124 { 0x1C, 0x20, 0x40, 0x20, 0x1C }, // ( 86) v - 0x0076 Latin Small Letter V
125 { 0x3C, 0x40, 0x30, 0x40, 0x3C }, // ( 87) w - 0x0077 Latin Small Letter W
126 { 0x44, 0x28, 0x10, 0x28, 0x44 }, // ( 88) x - 0x0078 Latin Small Letter X
127 { 0x0C, 0x50, 0x50, 0x50, 0x3C }, // ( 89) y - 0x0079 Latin Small Letter Y
128 { 0x44, 0x64, 0x54, 0x4C, 0x44 }, // ( 90) z - 0x007A Latin Small Letter Z
129 { 0x00, 0x08, 0x36, 0x41, 0x00 }, // ( 91) { - 0x007B Left Curly Bracket
130 { 0x00, 0x00, 0x7F, 0x00, 0x00 }, // ( 92) | - 0x007C Vertical Line
131 { 0x00, 0x41, 0x36, 0x08, 0x00 }, // ( 93) } - 0x007D Right Curly Bracket
132 { 0x02, 0x01, 0x02, 0x04, 0x02 }, // ( 94) ~ - 0x007E Tilde
133 { 0x3E, 0x55, 0x55, 0x41, 0x22 }, // ( 95) C - 0x0080 <Control>
134 { 0x00, 0x00, 0x00, 0x00, 0x00 }, // ( 96) - 0x00A0 No-Break Space
135 { 0x00, 0x00, 0x79, 0x00, 0x00 }, // ( 97) ! - 0x00A1 Inverted Exclamation Mark
136 { 0x18, 0x24, 0x74, 0x2E, 0x24 }, // ( 98) c - 0x00A2 Cent Sign
137 { 0x48, 0x7E, 0x49, 0x42, 0x40 }, // ( 99) L - 0x00A3 Pound Sign
138 { 0x5D, 0x22, 0x22, 0x22, 0x5D }, // (100) o - 0x00A4 Currency Sign
139 { 0x15, 0x16, 0x7C, 0x16, 0x15 }, // (101) Y - 0x00A5 Yen Sign
140 { 0x00, 0x00, 0x77, 0x00, 0x00 }, // (102) | - 0x00A6 Broken Bar
141 { 0x0A, 0x55, 0x55, 0x55, 0x28 }, // (103) - 0x00A7 Section Sign
142 { 0x00, 0x01, 0x00, 0x01, 0x00 }, // (104) " - 0x00A8 Diaeresis
143 { 0x00, 0x0A, 0x0D, 0x0A, 0x04 }, // (105) - 0x00AA Feminine Ordinal Indicator
144 { 0x08, 0x14, 0x2A, 0x14, 0x22 }, // (106) << - 0x00AB Left-Pointing Double Angle Quotation Mark
145 { 0x04, 0x04, 0x04, 0x04, 0x1C }, // (107) - 0x00AC Not Sign
146 { 0x00, 0x08, 0x08, 0x08, 0x00 }, // (108) - - 0x00AD Soft Hyphen
147 { 0x01, 0x01, 0x01, 0x01, 0x01 }, // (109) - 0x00AF Macron
148 { 0x00, 0x02, 0x05, 0x02, 0x00 }, // (110) - 0x00B0 Degree Sign
149 { 0x44, 0x44, 0x5F, 0x44, 0x44 }, // (111) +- - 0x00B1 Plus-Minus Sign
150 { 0x00, 0x00, 0x04, 0x02, 0x01 }, // (112) ` - 0x00B4 Acute Accent
151 { 0x7E, 0x20, 0x20, 0x10, 0x3E }, // (113) u - 0x00B5 Micro Sign
152 { 0x06, 0x0F, 0x7F, 0x00, 0x7F }, // (114) - 0x00B6 Pilcrow Sign
153 { 0x00, 0x18, 0x18, 0x00, 0x00 }, // (115) . - 0x00B7 Middle Dot
154 { 0x00, 0x40, 0x50, 0x20, 0x00 }, // (116) - 0x00B8 Cedilla
155 { 0x00, 0x0A, 0x0D, 0x0A, 0x00 }, // (117) - 0x00BA Masculine Ordinal Indicator
156 { 0x22, 0x14, 0x2A, 0x14, 0x08 }, // (118) >> - 0x00BB Right-Pointing Double Angle Quotation Mark
157 { 0x17, 0x08, 0x34, 0x2A, 0x7D }, // (119) /4 - 0x00BC Vulgar Fraction One Quarter
158 { 0x17, 0x08, 0x04, 0x6A, 0x59 }, // (120) /2 - 0x00BD Vulgar Fraction One Half
159 { 0x30, 0x48, 0x45, 0x40, 0x20 }, // (121) ? - 0x00BE Inverted Question Mark
160 { 0x42, 0x00, 0x42, 0x00, 0x42 }, // (122) - 0x00BF Horizontal Bargraph - 0 (empty)
161 { 0x7E, 0x42, 0x00, 0x42, 0x00 }, // (123) - 0x00C0 Horizontal Bargraph - 1
162 { 0x7E, 0x7E, 0x00, 0x42, 0x00 }, // (124) - 0x00C1 Horizontal Bargraph - 2
163 { 0x7E, 0x7E, 0x7E, 0x42, 0x00 }, // (125) - 0x00C2 Horizontal Bargraph - 3
164 { 0x7E, 0x7E, 0x7E, 0x7E, 0x00 }, // (126) - 0x00C3 Horizontal Bargraph - 4
165 { 0x7E, 0x7E, 0x7E, 0x7E, 0x7E }, // (127) - 0x00C4 Horizontal Bargraph - 5 (full)
166 { 0x5A, 0x00, 0x00, 0x00, 0x5A }, // (128) - 0x00C5 Vertical Bargraph - 0 (empty)
167 { 0x5A, 0x40, 0x40, 0x40, 0x5A }, // (129) - 0x00C6 Vertical Bargraph - 1
168 { 0x7A, 0x60, 0x60, 0x60, 0x7A }, // (130) - 0x00C7 Vertical Bargraph - 2
169 { 0x7A, 0x70, 0x70, 0x70, 0x7A }, // (131) - 0x00C8 Vertical Bargraph - 3
170 { 0x7A, 0x78, 0x78, 0x78, 0x7A }, // (131) - 0x00C8 Vertical Bargraph - 4
171 { 0x7A, 0x7C, 0x7C, 0x7C, 0x7A }, // (131) - 0x00C8 Vertical Bargraph - 5
172 { 0x7A, 0x7E, 0x7E, 0x7E, 0x7A }, // (131) - 0x00C8 Vertical Bargraph - 6 (full)
175 // #define OLED_address 0x3C // OLED at address 0x3C in 7bit
177 static busDevice_t *busDev = NULL;
179 static bool i2c_OLED_send_cmd(uint8_t command)
181 if (!busDev) {
182 return false;
185 return busWrite(busDev, 0x80, command);
188 bool i2c_OLED_send_byte(uint8_t val)
190 if (!busDev) {
191 return false;
194 return busWrite(busDev, 0x40, val);
197 void i2c_OLED_clear_display(void)
199 i2c_OLED_send_cmd(0xa6); // Set Normal Display
200 i2c_OLED_send_cmd(0xae); // Display OFF
201 i2c_OLED_send_cmd(0x20); // Set Memory Addressing Mode
202 i2c_OLED_send_cmd(0x00); // Set Memory Addressing Mode to Horizontal addressing mode
203 i2c_OLED_send_cmd(0xb0); // set page address to 0
204 i2c_OLED_send_cmd(0x40); // Display start line register to 0
205 i2c_OLED_send_cmd(0); // Set low col address to 0
206 i2c_OLED_send_cmd(0x10); // Set high col address to 0
207 for (uint16_t i = 0; i < 1024; i++) { // fill the display's RAM with graphic... 128*64 pixel picture
208 i2c_OLED_send_byte(0x00); // clear
210 i2c_OLED_send_cmd(0x81); // Setup CONTRAST CONTROL, following byte is the contrast Value... always a 2 byte instruction
211 i2c_OLED_send_cmd(200); // Here you can set the brightness 1 = dull, 255 is very bright
212 i2c_OLED_send_cmd(0xaf); // display on
215 void i2c_OLED_clear_display_quick(void)
217 i2c_OLED_send_cmd(0xb0); // set page address to 0
218 i2c_OLED_send_cmd(0x40); // Display start line register to 0
219 i2c_OLED_send_cmd(0); // Set low col address to 0
220 i2c_OLED_send_cmd(0x10); // Set high col address to 0
221 for (uint16_t i = 0; i < 1024; i++) { // fill the display's RAM with graphic... 128*64 pixel picture
222 i2c_OLED_send_byte(0x00); // clear
226 void i2c_OLED_set_xy(uint8_t col, uint8_t row)
228 i2c_OLED_send_cmd(0xb0 + row); //set page address
229 i2c_OLED_send_cmd(0x00 + ((CHARACTER_WIDTH_TOTAL * col) & 0x0f)); //set low col address
230 i2c_OLED_send_cmd(0x10 + (((CHARACTER_WIDTH_TOTAL * col) >> 4) & 0x0f)); //set high col address
233 void i2c_OLED_set_line(uint8_t row)
235 i2c_OLED_send_cmd(0xb0 + row); //set page address
236 i2c_OLED_send_cmd(0); //set low col address
237 i2c_OLED_send_cmd(0x10); //set high col address
240 void i2c_OLED_send_char(unsigned char ascii)
242 unsigned char i;
243 uint8_t buffer;
244 for (i = 0; i < 5; i++) {
245 buffer = multiWiiFont[ascii - 32][i];
246 buffer ^= CHAR_FORMAT; // apply
247 i2c_OLED_send_byte(buffer);
249 i2c_OLED_send_byte(CHAR_FORMAT); // the gap
252 void i2c_OLED_send_string(const char *string)
254 // Sends a string of chars until null terminator
255 while (*string) {
256 i2c_OLED_send_char(*string);
257 string++;
262 * according to http://www.adafruit.com/datasheets/UG-2864HSWEG01.pdf Chapter 4.4 Page 15
264 bool ug2864hsweg01InitI2C(void)
266 busDev = busDeviceInit(BUSTYPE_I2C, DEVHW_UG2864, 0, OWNER_OLED_DISPLAY);
268 if (!busDev) {
269 return false;
272 // Set display OFF
273 if (!i2c_OLED_send_cmd(0xAE)) {
274 return false;
277 i2c_OLED_send_cmd(0xD4); // Set Display Clock Divide Ratio / OSC Frequency
278 i2c_OLED_send_cmd(0x80); // Display Clock Divide Ratio / OSC Frequency
279 i2c_OLED_send_cmd(0xA8); // Set Multiplex Ratio
280 i2c_OLED_send_cmd(0x3F); // Multiplex Ratio for 128x64 (64-1)
281 i2c_OLED_send_cmd(0xD3); // Set Display Offset
282 i2c_OLED_send_cmd(0x00); // Display Offset
283 i2c_OLED_send_cmd(0x40); // Set Display Start Line
284 i2c_OLED_send_cmd(0x8D); // Set Charge Pump
285 i2c_OLED_send_cmd(0x14); // Charge Pump (0x10 External, 0x14 Internal DC/DC)
286 i2c_OLED_send_cmd(0xA1); // Set Segment Re-Map
287 i2c_OLED_send_cmd(0xC8); // Set Com Output Scan Direction
288 i2c_OLED_send_cmd(0xDA); // Set COM Hardware Configuration
289 i2c_OLED_send_cmd(0x12); // COM Hardware Configuration
290 i2c_OLED_send_cmd(0x81); // Set Contrast
291 i2c_OLED_send_cmd(0xCF); // Contrast
292 i2c_OLED_send_cmd(0xD9); // Set Pre-Charge Period
293 i2c_OLED_send_cmd(0xF1); // Set Pre-Charge Period (0x22 External, 0xF1 Internal)
294 i2c_OLED_send_cmd(0xDB); // Set VCOMH Deselect Level
295 i2c_OLED_send_cmd(0x40); // VCOMH Deselect Level
296 i2c_OLED_send_cmd(0xA4); // Set all pixels OFF
297 i2c_OLED_send_cmd(0xA6); // Set display not inverted
298 i2c_OLED_send_cmd(0xAF); // Set display On
300 i2c_OLED_clear_display();
302 return true;
305 #endif // USE_OLED_UG2864