SSD1306 OLED display driver 1.7.8 This library is developed to control SSD1306/SSD1331/SSD1351/IL9163/PCD8554 RGB i2c/spi LED displays

nano_gfx_types.h
Go to the documentation of this file.
1 /*
2 MIT License
3
4 Copyright (c) 2017-2018, Alexey Dynda
5
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12
13 The above copyright notice and this permission notice shall be included in all
14 copies or substantial portions of the Software.
15
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 SOFTWARE.
23 */
28 #ifndef _NANO_GFX_TYPES_H_
29 #define _NANO_GFX_TYPES_H_
30
31 #include "ssd1306_hal/io.h"
32
33 #ifndef min
34
35 #define min(a,b) ((a)<(b)?(a):(b))
36 #endif
37
38 #ifndef max
39
40 #define max(a,b) ((a)>(b)?(a):(b))
41 #endif
42
44 #define RGB_COLOR8(r,g,b) ( (r & 0xE0) | ((g >> 3)&0x1C) | (b>>6) )
45
47 #define RGB_COLOR16(r,g,b) ( ((r<<8) & 0xF800) | ((g << 3)&0x07E0) | (b>>3) )
48
50 #define RGB8_TO_RGB16(c) ( (((uint16_t)c & 0b11100000) << 8) | \
51 (((uint16_t)c & 0b00011100) << 6) | \
52 (((uint16_t)c & 0b00000011) << 3) )
53
55 typedef void (*InitFunction)(void);
56
58 typedef enum
59 {
60 STYLE_NORMAL,
61 STYLE_BOLD,
62 STYLE_ITALIC,
63 } EFontStyle;
64
66 typedef enum
67 {
68 FONT_SIZE_NORMAL = 0,
69 FONT_SIZE_2X = 1,
70 FONT_SIZE_4X = 2,
71 FONT_SIZE_8X = 3,
72 } EFontSize;
73
74 #pragma pack(push, 1)
75
76 typedef struct
77 {
78 uint8_t type;
79 uint8_t width;
80 uint8_t height;
81 uint8_t ascii_offset;
82 } SFontHeaderRecord;
83
85 typedef struct
86 {
87 uint16_t start_code;
88 uint8_t count;
89 } SUnicodeBlockRecord;
90
91 #pragma pack(pop)
92
94 typedef struct
95 {
96 SFontHeaderRecord h;
97 uint8_t count;
98 uint8_t pages;
99 uint8_t glyph_size;
100 const uint8_t *primary_table;
101 #ifdef CONFIG_SSD1306_UNICODE_ENABLE
102 const uint8_t *secondary_table;
103 #endif
104 } SFixedFontInfo;
105
107 typedef struct
108 {
109 uint8_t width;
110 uint8_t height;
111 uint8_t spacing;
112 const uint8_t *glyph;
113 } SCharInfo;
114
118 typedef struct
119 {
121 uint8_t left;
123 uint8_t top;
125 uint8_t right;
127 uint8_t bottom;
128 } SSD1306_RECT;
129
130
135 typedef struct SPRITE
136 {
138 uint8_t x;
140 uint8_t y;
142 uint8_t w;
144 uint8_t lx;
146 uint8_t ly;
148 const uint8_t * data;
150 const uint8_t * transparentMask;
151
152 #ifdef __cplusplus
153
158 void setPos(uint8_t x, uint8_t y);
159
164 void draw();
165
169 void eraseTrace();
170
174 void erase();
175
180 inline bool isNearMove() const
181 {
182 /* We emulate abs function for unsigned vars here */
183 return (((uint8_t)(x-lx)<w) || ((uint8_t)(lx-x)<w)) &&
184 (((uint8_t)(y-ly)<8) || ((uint8_t)(ly-y)<8));
185 };
186
195 inline SSD1306_RECT getRect() const
196 {
197 uint8_t right = ((x + w - 1)>>3);
198 uint8_t bottom = ((y + 7)>>3);
199 uint8_t left = x>>3; left = left < right ? left: 0;
200 uint8_t top = y>>3; top = top < bottom ? top: 0;
201 return (SSD1306_RECT){ left, top, right, bottom };
202 };
203
211 inline SSD1306_RECT getLRect() const
212 {
213 uint8_t left = lx;
214 uint8_t top = ly;
215 uint8_t right = (uint8_t)(lx + w - 1);
216 uint8_t bottom = (uint8_t)(ly + 7);
217 left = left < right ? left: 0;
218 top = top < bottom ? top: 0;
219 return (SSD1306_RECT){ left, top, right, bottom };
220 };
221
228 inline SSD1306_RECT getUpdateRect() const
229 {
230 uint8_t left = min(x,lx);
231 uint8_t top = min(y,ly);
232 uint8_t right = max((uint8_t)(x + w - 1), (uint8_t)(lx + w - 1));
233 if (((uint8_t)(lx + w - 1) < w) && (right > 2*w))
234 {
235 right = (uint8_t)(lx + w - 1);
236 }
237 uint8_t bottom = max((uint8_t)(y + 7), (uint8_t)(ly + 7));
238 if (((uint8_t)(ly + 7) < 8) && (bottom > 16))
239 {
240 bottom = (uint8_t)(ly + 7);
241 }
242 if ( left > right ) left = 0;
243 if ( top > bottom ) top = 0;
244 return (SSD1306_RECT){ left, top, right, bottom };
245 };
246 #endif
247 } SPRITE;
248
249 // ----------------------------------------------------------------------------
250 #endif // _NANO_GFX_TYPES_H_
SPRITE
struct SPRITE SPRITE
SCharInfo::height
uint8_t height
char height in pixels
Definition: nano_gfx_types.h:110
SSD1306_RECT::top
uint8_t top
top
Definition: nano_gfx_types.h:123
SPRITE::data
const uint8_t * data
Pointer to PROGMEM data, representing sprite image.
Definition: nano_gfx_types.h:148
SFixedFontInfo::primary_table
const uint8_t * primary_table
font chars bits
Definition: nano_gfx_types.h:100
SCharInfo
Definition: nano_gfx_types.h:107
SUnicodeBlockRecord::start_code
uint16_t start_code
unicode start code
Definition: nano_gfx_types.h:87
SFontHeaderRecord::width
uint8_t width
width in pixels
Definition: nano_gfx_types.h:79
SPRITE::transparentMask
const uint8_t * transparentMask
Pointer to PROGMEM data, representing sprite transparencyMask (can be nullptr)
Definition: nano_gfx_types.h:150
SPRITE::eraseTrace
void eraseTrace()
io.h
SFontHeaderRecord::type
uint8_t type
font type: 0 - Fixed Font
Definition: nano_gfx_types.h:78
SFontHeaderRecord::height
uint8_t height
height in pixels
Definition: nano_gfx_types.h:80
SPRITE::erase
void erase()
SFixedFontInfo
Definition: nano_gfx_types.h:94
SPRITE
Definition: nano_gfx_types.h:135
SUnicodeBlockRecord
Definition: nano_gfx_types.h:85
SFontHeaderRecord::ascii_offset
uint8_t ascii_offset
ascii offset
Definition: nano_gfx_types.h:81
InitFunction
void(* InitFunction)(void)
Definition: nano_gfx_types.h:55
SPRITE::draw
void draw()
SPRITE::setPos
void setPos(uint8_t x, uint8_t y)
SSD1306_RECT::bottom
uint8_t bottom
bottom
Definition: nano_gfx_types.h:127
max
#define max(a, b)
Definition: nano_gfx_types.h:40
SPRITE::y
uint8_t y
draw position Y on the screen
Definition: nano_gfx_types.h:140
min
#define min(a, b)
Definition: nano_gfx_types.h:35
SUnicodeBlockRecord::count
uint8_t count
count of unicode chars in block
Definition: nano_gfx_types.h:88
SCharInfo::width
uint8_t width
char width in pixels
Definition: nano_gfx_types.h:109
SFixedFontInfo::secondary_table
const uint8_t * secondary_table
font chars bits
Definition: nano_gfx_types.h:102
SPRITE::getUpdateRect
SSD1306_RECT getUpdateRect() const
Definition: nano_gfx_types.h:228
SFixedFontInfo::h
SFontHeaderRecord h
record, containing information on font
Definition: nano_gfx_types.h:96
SPRITE::x
uint8_t x
draw position X on the screen
Definition: nano_gfx_types.h:138
SCharInfo::glyph
const uint8_t * glyph
char data, located in progmem.
Definition: nano_gfx_types.h:112
SFontHeaderRecord
Definition: nano_gfx_types.h:76
SPRITE::w
uint8_t w
sprite width
Definition: nano_gfx_types.h:142
SPRITE::getRect
SSD1306_RECT getRect() const
Definition: nano_gfx_types.h:195
SCharInfo::spacing
uint8_t spacing
additional spaces after char in pixels
Definition: nano_gfx_types.h:111
SPRITE::lx
uint8_t lx
last draw position X on the screen
Definition: nano_gfx_types.h:144
SSD1306_RECT
Definition: nano_gfx_types.h:118
EFontStyle
EFontStyle
Definition: nano_gfx_types.h:58
SPRITE::isNearMove
bool isNearMove() const
Definition: nano_gfx_types.h:180
EFontSize
EFontSize
Definition: nano_gfx_types.h:66
SFixedFontInfo::glyph_size
uint8_t glyph_size
glyph size in bytes
Definition: nano_gfx_types.h:99
SFixedFontInfo::pages
uint8_t pages
height in pages (each page height is 8-pixels)
Definition: nano_gfx_types.h:98
SSD1306_RECT::right
uint8_t right
right
Definition: nano_gfx_types.h:125
SFixedFontInfo::count
uint8_t count
count of characters
Definition: nano_gfx_types.h:97
SPRITE::ly
uint8_t ly
last draw position Y on the screen
Definition: nano_gfx_types.h:146
SPRITE::getLRect
SSD1306_RECT getLRect() const
Definition: nano_gfx_types.h:211
SSD1306_RECT::left
uint8_t left
left
Definition: nano_gfx_types.h:121