21
21
except ImportError :
22
22
import adafruit_framebuf as framebuf
23
23
24
+ try :
25
+ from typing import Any , Optional
26
+ except ImportError :
27
+ pass
28
+
24
29
__version__ = "0.0.0-auto.0"
25
30
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_SSD1306.git"
26
31
@@ -49,7 +54,16 @@ class _SSD1306(framebuf.FrameBuffer):
49
54
"""Base class for SSD1306 display driver"""
50
55
51
56
# pylint: disable-msg=too-many-arguments
52
- def __init__ (self , buffer , width , height , * , external_vcc , reset , page_addressing ):
57
+ def __init__ (
58
+ self ,
59
+ buffer : memoryview ,
60
+ width : int ,
61
+ height : int ,
62
+ * ,
63
+ external_vcc : bool ,
64
+ reset : Any ,
65
+ page_addressing : bool
66
+ ):
53
67
super ().__init__ (buffer , width , height )
54
68
self .width = width
55
69
self .height = height
@@ -67,9 +81,9 @@ def __init__(self, buffer, width, height, *, external_vcc, reset, page_addressin
67
81
# Parameters for efficient Page Addressing Mode (typical of U8Glib libraries)
68
82
# Important as not all screens appear to support Horizontal Addressing Mode
69
83
if self .page_addressing :
70
- self .pagebuffer = bytearray (width + 1 )
84
+ self .pagebuffer = bytearray (width + 1 ) # type: Optional[bytearray]
71
85
self .pagebuffer [0 ] = 0x40 # Set first byte of data buffer to Co=0, D/C=1
72
- self .page_column_start = bytearray (2 )
86
+ self .page_column_start = bytearray (2 ) # type: Optional[bytearray]
73
87
self .page_column_start [0 ] = self .width % 32
74
88
self .page_column_start [1 ] = 0x10 + self .width // 32
75
89
else :
@@ -80,11 +94,11 @@ def __init__(self, buffer, width, height, *, external_vcc, reset, page_addressin
80
94
self .init_display ()
81
95
82
96
@property
83
- def power (self ):
97
+ def power (self ) -> bool :
84
98
"""True if the display is currently powered on, otherwise False"""
85
99
return self ._power
86
100
87
- def init_display (self ):
101
+ def init_display (self ) -> None :
88
102
"""Base class to initialize display"""
89
103
# The various screen sizes available with the ssd1306 OLED driver
90
104
# chip require differing configuration values for the display clock
@@ -136,36 +150,36 @@ def init_display(self):
136
150
self .fill (0 )
137
151
self .show ()
138
152
139
- def poweroff (self ):
153
+ def poweroff (self ) -> None :
140
154
"""Turn off the display (nothing visible)"""
141
155
self .write_cmd (SET_DISP )
142
156
self ._power = False
143
157
144
- def contrast (self , contrast ) :
158
+ def contrast (self , contrast : int ) -> None :
145
159
"""Adjust the contrast"""
146
160
self .write_cmd (SET_CONTRAST )
147
161
self .write_cmd (contrast )
148
162
149
- def invert (self , invert ) :
163
+ def invert (self , invert : bool ) -> None :
150
164
"""Invert all pixels on the display"""
151
165
self .write_cmd (SET_NORM_INV | (invert & 1 ))
152
166
153
- def rotate (self , rotate ) :
167
+ def rotate (self , rotate : bool ) -> None :
154
168
"""Rotate the display 0 or 180 degrees"""
155
169
self .write_cmd (SET_COM_OUT_DIR | ((rotate & 1 ) << 3 ))
156
170
self .write_cmd (SET_SEG_REMAP | (rotate & 1 ))
157
171
# com output (vertical mirror) is changed immediately
158
172
# you need to call show() for the seg remap to be visible
159
173
160
- def write_framebuf (self ):
174
+ def write_framebuf (self ) -> None :
161
175
"""Derived class must implement this"""
162
176
raise NotImplementedError
163
177
164
- def write_cmd (self , cmd ) :
178
+ def write_cmd (self , cmd : Any ) -> None :
165
179
"""Derived class must implement this"""
166
180
raise NotImplementedError
167
181
168
- def poweron (self ):
182
+ def poweron (self ) -> None :
169
183
"Reset device and turn on the display."
170
184
if self .reset_pin :
171
185
self .reset_pin .value = 1
@@ -177,7 +191,7 @@ def poweron(self):
177
191
self .write_cmd (SET_DISP | 0x01 )
178
192
self ._power = True
179
193
180
- def show (self ):
194
+ def show (self ) -> None :
181
195
"""Update the display"""
182
196
if not self .page_addressing :
183
197
xpos0 = 0
@@ -210,14 +224,14 @@ class SSD1306_I2C(_SSD1306):
210
224
211
225
def __init__ (
212
226
self ,
213
- width ,
214
- height ,
215
- i2c ,
227
+ width : int ,
228
+ height : int ,
229
+ i2c : Any ,
216
230
* ,
217
- addr = 0x3C ,
218
- external_vcc = False ,
219
- reset = None ,
220
- page_addressing = False
231
+ addr : int = 0x3C ,
232
+ external_vcc : bool = False ,
233
+ reset : Any = None ,
234
+ page_addressing : bool = False
221
235
):
222
236
self .i2c_device = i2c_device .I2CDevice (i2c , addr )
223
237
self .addr = addr
@@ -239,14 +253,14 @@ def __init__(
239
253
page_addressing = self .page_addressing ,
240
254
)
241
255
242
- def write_cmd (self , cmd ) :
256
+ def write_cmd (self , cmd : int ) -> None :
243
257
"""Send a command to the I2C device"""
244
258
self .temp [0 ] = 0x80 # Co=1, D/C#=0
245
259
self .temp [1 ] = cmd
246
260
with self .i2c_device :
247
261
self .i2c_device .write (self .temp )
248
262
249
- def write_framebuf (self ):
263
+ def write_framebuf (self ) -> None :
250
264
"""Blast out the frame buffer using a single I2C transaction to support
251
265
hardware I2C interfaces."""
252
266
if self .page_addressing :
@@ -281,18 +295,18 @@ class SSD1306_SPI(_SSD1306):
281
295
# Disable should be reconsidered when refactor can be tested.
282
296
def __init__ (
283
297
self ,
284
- width ,
285
- height ,
286
- spi ,
287
- dc ,
288
- reset ,
289
- cs ,
298
+ width : int ,
299
+ height : int ,
300
+ spi : Any ,
301
+ dc : Any ,
302
+ reset : bool ,
303
+ cs : int ,
290
304
* ,
291
- external_vcc = False ,
292
- baudrate = 8000000 ,
293
- polarity = 0 ,
294
- phase = 0 ,
295
- page_addressing = False
305
+ external_vcc : bool = False ,
306
+ baudrate : int = 8000000 ,
307
+ polarity : int = 0 ,
308
+ phase : int = 0 ,
309
+ page_addressing : bool = False
296
310
):
297
311
self .page_addressing = page_addressing
298
312
if self .page_addressing :
@@ -316,13 +330,13 @@ def __init__(
316
330
page_addressing = self .page_addressing ,
317
331
)
318
332
319
- def write_cmd (self , cmd ) :
333
+ def write_cmd (self , cmd : int ) -> None :
320
334
"""Send a command to the SPI device"""
321
335
self .dc_pin .value = 0
322
336
with self .spi_device as spi :
323
337
spi .write (bytearray ([cmd ]))
324
338
325
- def write_framebuf (self ):
339
+ def write_framebuf (self ) -> None :
326
340
"""write to the frame buffer via SPI"""
327
341
self .dc_pin .value = 1
328
342
with self .spi_device as spi :
0 commit comments