Skip to content

Commit 51c4c0f

Browse files
authored
Merge pull request #25 from tcfranks/main
Add Missing Type Annotations
2 parents b16f664 + 2412bf8 commit 51c4c0f

File tree

1 file changed

+50
-35
lines changed

1 file changed

+50
-35
lines changed

adafruit_stmpe610.py

Lines changed: 50 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,21 @@
2626
import time
2727
from micropython import const
2828

29+
try:
30+
from typing import Dict, List, Optional, Tuple
31+
from typing_extensions import Literal
32+
from microcontroller import Pin
33+
from busio import I2C, SPI
34+
except ImportError:
35+
pass
2936

3037
__version__ = "0.0.0+auto.0"
3138
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_STMPE610.git"
3239

3340

34-
def map_range(x, in_min, in_max, out_min, out_max):
41+
def map_range(
42+
x: float, in_min: float, in_max: float, out_min: float, out_max: float
43+
) -> float:
3544
"""
3645
Maps a value from one range to another. Values beyond the input minimum or
3746
maximum will be limited to the minimum or maximum of the output range.
@@ -155,7 +164,7 @@ class Adafruit_STMPE610:
155164
156165
See the examples folder for instantiation kwargs and properties."""
157166

158-
def __init__(self):
167+
def __init__(self) -> None:
159168
"""Reset the controller."""
160169
self._write_register_byte(_STMPE_SYS_CTRL1, _STMPE_SYS_CTRL1_RESET)
161170
time.sleep(0.001)
@@ -185,7 +194,7 @@ def __init__(self):
185194
_STMPE_INT_CTRL, _STMPE_INT_CTRL_POL_HIGH | _STMPE_INT_CTRL_ENABLE
186195
)
187196

188-
def read_data(self):
197+
def read_data(self) -> Tuple[int, int, int]:
189198
"""Request next stored reading - return tuple containing (x,y,pressure)."""
190199
d_1 = self._read_byte(0xD7)
191200
d_2 = self._read_byte(0xD7)
@@ -199,23 +208,23 @@ def read_data(self):
199208
self._write_register_byte(_STMPE_INT_STA, 0xFF)
200209
return (x_loc, y_loc, pressure)
201210

202-
def _read_byte(self, register):
211+
def _read_byte(self, register: int) -> int:
203212
"""Read a byte register value and return it."""
204213
return self._read_register(register, 1)[0]
205214

206-
def _read_register(self, register, length):
215+
def _read_register(self, register: int, length: int) -> bytearray:
207216
"""Read an arbitrarily long register (specified by length number of
208217
bytes) and return a bytearray of the retrieved data.
209218
Subclasses MUST implement this!"""
210219
raise NotImplementedError
211220

212-
def _write_register_byte(self, register, value):
221+
def _write_register_byte(self, register: int, value: int) -> None:
213222
"""Write a single byte register at the specified register address.
214223
Subclasses MUST implement this!"""
215224
raise NotImplementedError
216225

217226
@property
218-
def touches(self):
227+
def touches(self) -> List[Dict[str, int]]:
219228
"""Returns a list of touchpoint dicts, with 'x' and 'y' containing the
220229
touch coordinates, and 'pressure'."""
221230
touchpoints = []
@@ -226,7 +235,7 @@ def touches(self):
226235
return touchpoints
227236

228237
@property
229-
def get_version(self):
238+
def get_version(self) -> int:
230239
"""Read the version number from the sensor."""
231240
v_1 = self._read_byte(0)
232241
v_2 = self._read_byte(1)
@@ -235,24 +244,24 @@ def get_version(self):
235244
return version
236245

237246
@property
238-
def touched(self):
247+
def touched(self) -> bool:
239248
"""Report if any touches were detected."""
240249
touch = self._read_byte(_STMPE_TSC_CTRL) & 0x80
241250
return touch == 0x80
242251

243252
@property
244-
def buffer_size(self):
253+
def buffer_size(self) -> int:
245254
"""The amount of touch data in the buffer."""
246255
return self._read_byte(_STMPE_FIFO_SIZE)
247256

248257
@property
249-
def buffer_empty(self):
258+
def buffer_empty(self) -> bool:
250259
"""Buffer empty status."""
251260
empty = self._read_byte(_STMPE_FIFO_STA) & _STMPE_FIFO_STA_EMPTY
252261
return empty != 0
253262

254263
@property
255-
def get_point(self):
264+
def get_point(self) -> Dict[str, int]:
256265
"""Read one touch from the buffer."""
257266
(x_loc, y_loc, pressure) = self.read_data()
258267
point = {"x": x_loc, "y": y_loc, "pressure": pressure}
@@ -291,13 +300,13 @@ class Adafruit_STMPE610_I2C(Adafruit_STMPE610):
291300

292301
def __init__( # pylint: disable=too-many-arguments
293302
self,
294-
i2c,
295-
address=_STMPE_ADDR,
296-
calibration=None,
297-
size=None,
298-
disp_rotation=0,
299-
touch_flip=(False, False),
300-
):
303+
i2c: I2C,
304+
address: int = _STMPE_ADDR,
305+
calibration: Optional[Tuple[Tuple[int, int], Tuple[int, int]]] = None,
306+
size: Optional[Tuple[Tuple[int, int], Tuple[int, int]]] = None,
307+
disp_rotation: Literal[0, 90, 180, 270] = 0,
308+
touch_flip: Tuple[bool, bool] = (False, False),
309+
) -> None:
301310

302311
self._calib = calibration
303312
self._disp_size = size
@@ -320,11 +329,15 @@ def __init__( # pylint: disable=too-many-arguments
320329
# Check device version.
321330
version = self.get_version
322331
if _STMPE_VERSION != version:
323-
raise RuntimeError("Failed to find STMPE610! Chip Version 0x%x" % version)
332+
raise RuntimeError(
333+
f"Failed to find STMPE610! Chip Version {hex(version).upper()}."
334+
)
324335
super().__init__()
325336

326337
@property
327-
def touch_point(self): # pylint: disable=too-many-branches
338+
def touch_point( # pylint: disable=too-many-branches
339+
self,
340+
) -> Optional[Tuple[int, int, int]]:
328341
"""Read latest touched point value and convert to calibration-adjusted
329342
and rotated display coordinates. Commpatible with Displayio Button.
330343
:return: x, y, pressure
@@ -368,7 +381,7 @@ def touch_point(self): # pylint: disable=too-many-branches
368381
return (x, y, pressure)
369382
return None
370383

371-
def _read_register(self, register, length):
384+
def _read_register(self, register: int, length: int) -> bytearray:
372385
"""Low level register reading over I2C, returns a list of values."""
373386
with self._i2c as i2c:
374387
i2c.write(bytearray([register & 0xFF]))
@@ -377,7 +390,7 @@ def _read_register(self, register, length):
377390
# print("$%02X => %s" % (register, [hex(i) for i in result]))
378391
return result
379392

380-
def _write_register_byte(self, register, value):
393+
def _write_register_byte(self, register: int, value: int) -> None:
381394
"""Low level register writing over I2C, writes one 8-bit value."""
382395
with self._i2c as i2c:
383396
i2c.write(bytes([register & 0xFF, value & 0xFF]))
@@ -419,14 +432,14 @@ class Adafruit_STMPE610_SPI(Adafruit_STMPE610):
419432

420433
def __init__( # pylint: disable=too-many-arguments
421434
self,
422-
spi,
423-
cs,
424-
baudrate=1000000,
425-
calibration=None,
426-
size=None,
427-
disp_rotation=0,
428-
touch_flip=(False, False),
429-
):
435+
spi: SPI,
436+
cs: Pin,
437+
baudrate: int = 1000000,
438+
calibration: Optional[Tuple[Tuple[int, int], Tuple[int, int]]] = None,
439+
size: Optional[Tuple[int, int]] = None,
440+
disp_rotation: Literal[0, 90, 180, 270] = 0,
441+
touch_flip: Tuple[bool, bool] = (False, False),
442+
) -> None:
430443

431444
self._calib = calibration
432445
self._disp_size = size
@@ -456,14 +469,16 @@ def __init__( # pylint: disable=too-many-arguments
456469
version = self.get_version
457470
if _STMPE_VERSION != version:
458471
raise RuntimeError(
459-
"Failed to find STMPE610 controller! Chip Version 0x%x. "
472+
f"Failed to find STMPE610 controller! Chip Version {hex(version).upper()}. "
460473
"If you are using the breakout, verify you are in SPI mode."
461474
% version
462475
)
463476
super().__init__()
464477

465478
@property
466-
def touch_point(self): # pylint: disable=too-many-branches
479+
def touch_point( # pylint: disable=too-many-branches
480+
self,
481+
) -> Optional[Tuple[int, int, int]]:
467482
"""Read latest touched point value and convert to calibration-adjusted
468483
and rotated display coordinates. Commpatible with Displayio Button.
469484
:return: x, y, pressure
@@ -509,7 +524,7 @@ def touch_point(self): # pylint: disable=too-many-branches
509524

510525
# pylint: disable=no-member
511526
# Disable should be reconsidered when refactor can be tested.
512-
def _read_register(self, register, length):
527+
def _read_register(self, register: int, length: int) -> bytearray:
513528
"""Low level register reading over SPI, returns a list of values."""
514529
register = (register | 0x80) & 0xFF # Read single byte, bit 7 high.
515530
with self._spi as spi:
@@ -519,7 +534,7 @@ def _read_register(self, register, length):
519534
# print("$%02X => %s" % (register, [hex(i) for i in result]))
520535
return result
521536

522-
def _write_register_byte(self, register, value):
537+
def _write_register_byte(self, register: int, value: int) -> None:
523538
"""Low level register writing over SPI, writes one 8-bit value."""
524539
register &= 0x7F # Write, bit 7 low.
525540
with self._spi as spi:

0 commit comments

Comments
 (0)