diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fff3aa9..1dad804 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -40,7 +40,7 @@ jobs: source actions-ci/install.sh - name: Pip install pylint, black, & Sphinx run: | - pip install --force-reinstall pylint==1.9.2 black==19.10b0 Sphinx sphinx-rtd-theme + pip install --force-reinstall pylint black==19.10b0 Sphinx sphinx-rtd-theme - name: Library version run: git describe --dirty --always --tags - name: PyLint diff --git a/adafruit_stmpe610.py b/adafruit_stmpe610.py index d3f5d9a..a92af1b 100644 --- a/adafruit_stmpe610.py +++ b/adafruit_stmpe610.py @@ -38,7 +38,6 @@ __repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_STMPE610.git" - _STMPE_ADDR = const(0x41) _STMPE_VERSION = const(0x0811) @@ -60,7 +59,6 @@ _STMPE_INT_CTRL_DISABLE = const(0x00) - _STMPE_INT_EN = const(0x0A) _STMPE_INT_EN_TOUCHDET = const(0x01) _STMPE_INT_EN_FIFOTH = const(0x02) @@ -129,35 +127,40 @@ _STMPE_GPIO_ALT_FUNCT = const(0x17) - class Adafruit_STMPE610: """ A driver for the STMPE610 Resistive Touch sensor. """ + def __init__(self): """Reset the controller""" self._write_register_byte(_STMPE_SYS_CTRL1, _STMPE_SYS_CTRL1_RESET) - time.sleep(.001) + time.sleep(0.001) - - self._write_register_byte(_STMPE_SYS_CTRL2, 0x0) # turn on clocks! + self._write_register_byte(_STMPE_SYS_CTRL2, 0x0) # turn on clocks! self._write_register_byte( - _STMPE_TSC_CTRL, _STMPE_TSC_CTRL_XYZ | _STMPE_TSC_CTRL_EN) # XYZ and enable! + _STMPE_TSC_CTRL, _STMPE_TSC_CTRL_XYZ | _STMPE_TSC_CTRL_EN + ) # XYZ and enable! self._write_register_byte(_STMPE_INT_EN, _STMPE_INT_EN_TOUCHDET) self._write_register_byte( - _STMPE_ADC_CTRL1, _STMPE_ADC_CTRL1_10BIT | (0x6 << 4)) # 96 clocks per conversion + _STMPE_ADC_CTRL1, _STMPE_ADC_CTRL1_10BIT | (0x6 << 4) + ) # 96 clocks per conversion self._write_register_byte(_STMPE_ADC_CTRL2, _STMPE_ADC_CTRL2_6_5MHZ) self._write_register_byte( - _STMPE_TSC_CFG, _STMPE_TSC_CFG_4SAMPLE | _STMPE_TSC_CFG_DELAY_1MS - | _STMPE_TSC_CFG_SETTLE_5MS) + _STMPE_TSC_CFG, + _STMPE_TSC_CFG_4SAMPLE + | _STMPE_TSC_CFG_DELAY_1MS + | _STMPE_TSC_CFG_SETTLE_5MS, + ) self._write_register_byte(_STMPE_TSC_FRACTION_Z, 0x6) self._write_register_byte(_STMPE_FIFO_TH, 1) self._write_register_byte(_STMPE_FIFO_STA, _STMPE_FIFO_STA_RESET) - self._write_register_byte(_STMPE_FIFO_STA, 0) # unreset + self._write_register_byte(_STMPE_FIFO_STA, 0) # unreset self._write_register_byte(_STMPE_TSC_I_DRIVE, _STMPE_TSC_I_DRIVE_50MA) - self._write_register_byte(_STMPE_INT_STA, 0xFF) # reset all ints + self._write_register_byte(_STMPE_INT_STA, 0xFF) # reset all ints self._write_register_byte( - _STMPE_INT_CTRL, _STMPE_INT_CTRL_POL_HIGH | _STMPE_INT_CTRL_ENABLE) + _STMPE_INT_CTRL, _STMPE_INT_CTRL_POL_HIGH | _STMPE_INT_CTRL_ENABLE + ) def read_data(self): """Request next stored reading - return tuple containing (x,y,pressure) """ @@ -188,7 +191,6 @@ def _write_register_byte(self, register, value): # Subclasses MUST implement this! raise NotImplementedError - @property def touches(self): """ @@ -198,27 +200,25 @@ def touches(self): touchpoints = [] while (len(touchpoints) < 4) and not self.buffer_empty: (x_loc, y_loc, pressure) = self.read_data() - point = {'x':x_loc, 'y':y_loc, 'pressure':pressure} + point = {"x": x_loc, "y": y_loc, "pressure": pressure} touchpoints.append(point) return touchpoints - @property def get_version(self): "Read the version number from the sensosr" v_1 = self._read_byte(0) v_2 = self._read_byte(1) - version = v_1<<8 | v_2 - #print("version ",hex(version)) + version = v_1 << 8 | v_2 + # print("version ",hex(version)) return version @property def touched(self): "Report if any touches have been detectd" - touch = self._read_byte(_STMPE_TSC_CTRL)&0x80 + touch = self._read_byte(_STMPE_TSC_CTRL) & 0x80 return touch == 0x80 - @property def buffer_size(self): "The amount of touch data in the buffer" @@ -230,33 +230,31 @@ def buffer_empty(self): empty = self._read_byte(_STMPE_FIFO_STA) & _STMPE_FIFO_STA_EMPTY return empty != 0 - - @property def get_point(self): "Read one touch from the buffer" (x_loc, y_loc, pressure) = self.read_data() - point = {'x':x_loc, 'y':y_loc, 'pressure':pressure} - return point - - + point = {"x": x_loc, "y": y_loc, "pressure": pressure} + return point class Adafruit_STMPE610_I2C(Adafruit_STMPE610): """ I2C driver for the STMPE610 Resistive Touch sensor. """ + def __init__(self, i2c, address=_STMPE_ADDR): """ Check the STMPE610 was founnd Default address is 0x41 but another address can be passed in as an argument """ - import adafruit_bus_device.i2c_device as i2cdev + import adafruit_bus_device.i2c_device as i2cdev # pylint: disable=import-outside-toplevel + self._i2c = i2cdev.I2CDevice(i2c, address) # Check device version. version = self.get_version if _STMPE_VERSION != version: - raise RuntimeError('Failed to find STMPE610! Chip Version 0x%x' % version) + raise RuntimeError("Failed to find STMPE610! Chip Version 0x%x" % version) super().__init__() def _read_register(self, register, length): @@ -265,34 +263,40 @@ def _read_register(self, register, length): i2c.write(bytearray([register & 0xFF])) result = bytearray(length) i2c.readinto(result) - #print("$%02X => %s" % (register, [hex(i) for i in result])) + # print("$%02X => %s" % (register, [hex(i) for i in result])) return result def _write_register_byte(self, register, value): """Low level register writing over I2C, writes one 8-bit value""" with self._i2c as i2c: i2c.write(bytes([register & 0xFF, value & 0xFF])) - #print("$%02X <= 0x%02X" % (register, value)) + # print("$%02X <= 0x%02X" % (register, value)) class Adafruit_STMPE610_SPI(Adafruit_STMPE610): """ SPI driver for the STMPE610 Resistive Touch sensor. """ + def __init__(self, spi, cs, baudrate=1000000): """ Check the STMPE610 was found,Default clock rate 1000000 - can be changed with 'baudrate' """ - import adafruit_bus_device.spi_device as spidev + import adafruit_bus_device.spi_device as spidev # pylint: disable=import-outside-toplevel + self._spi = spidev.SPIDevice(spi, cs, baudrate=baudrate) # Check device version. version = self.get_version if _STMPE_VERSION != version: # if it fails try SPI MODE 1 -- that is what Arduino does - self._spi = spidev.SPIDevice(spi, cs, baudrate=baudrate, polarity=0, phase=1) + self._spi = spidev.SPIDevice( + spi, cs, baudrate=baudrate, polarity=0, phase=1 + ) version = self.get_version if _STMPE_VERSION != version: - raise RuntimeError('Failed to find STMPE610! Chip Version 0x%x' % version) + raise RuntimeError( + "Failed to find STMPE610! Chip Version 0x%x" % version + ) super().__init__() # pylint: disable=no-member @@ -304,7 +308,7 @@ def _read_register(self, register, length): spi.write(bytearray([register])) result = bytearray(length) spi.readinto(result) -# print("$%02X => %s" % (register, [hex(i) for i in result])) + # print("$%02X => %s" % (register, [hex(i) for i in result])) return result def _write_register_byte(self, register, value): diff --git a/docs/conf.py b/docs/conf.py index f7ac008..fe06d70 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -2,7 +2,8 @@ import os import sys -sys.path.insert(0, os.path.abspath('..')) + +sys.path.insert(0, os.path.abspath("..")) # -- General configuration ------------------------------------------------ @@ -10,10 +11,10 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.intersphinx', - 'sphinx.ext.napoleon', - 'sphinx.ext.todo', + "sphinx.ext.autodoc", + "sphinx.ext.intersphinx", + "sphinx.ext.napoleon", + "sphinx.ext.todo", ] # TODO: Please Read! @@ -23,29 +24,40 @@ # autodoc_mock_imports = ["micropython"] -intersphinx_mapping = {'python': ('https://docs.python.org/3.4', None),'BusDevice': ('https://circuitpython.readthedocs.io/projects/busdevice/en/latest/', None),'Register': ('https://circuitpython.readthedocs.io/projects/register/en/latest/', None),'CircuitPython': ('https://circuitpython.readthedocs.io/en/latest/', None)} +intersphinx_mapping = { + "python": ("https://docs.python.org/3.4", None), + "BusDevice": ( + "https://circuitpython.readthedocs.io/projects/busdevice/en/latest/", + None, + ), + "Register": ( + "https://circuitpython.readthedocs.io/projects/register/en/latest/", + None, + ), + "CircuitPython": ("https://circuitpython.readthedocs.io/en/latest/", None), +} # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] +templates_path = ["_templates"] -source_suffix = '.rst' +source_suffix = ".rst" # The master toctree document. -master_doc = 'index' +master_doc = "index" # General information about the project. -project = u'Adafruit stmpe610 Library' -copyright = u'2017 Jerry Needell' -author = u'Jerry Needell' +project = u"Adafruit stmpe610 Library" +copyright = u"2017 Jerry Needell" +author = u"Jerry Needell" # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. -version = u'1.0' +version = u"1.0" # The full version, including alpha/beta/rc tags. -release = u'1.0' +release = u"1.0" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -57,7 +69,7 @@ # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store', '.env', 'CODE_OF_CONDUCT.md'] +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store", ".env", "CODE_OF_CONDUCT.md"] # The reST default role (used for this markup: `text`) to use for all # documents. @@ -69,7 +81,7 @@ add_function_parentheses = True # The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' +pygments_style = "sphinx" # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False @@ -84,59 +96,62 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -on_rtd = os.environ.get('READTHEDOCS', None) == 'True' +on_rtd = os.environ.get("READTHEDOCS", None) == "True" if not on_rtd: # only import and set the theme if we're building docs locally try: import sphinx_rtd_theme - html_theme = 'sphinx_rtd_theme' - html_theme_path = [sphinx_rtd_theme.get_html_theme_path(), '.'] + + html_theme = "sphinx_rtd_theme" + html_theme_path = [sphinx_rtd_theme.get_html_theme_path(), "."] except: - html_theme = 'default' - html_theme_path = ['.'] + html_theme = "default" + html_theme_path = ["."] else: - html_theme_path = ['.'] + html_theme_path = ["."] # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] +html_static_path = ["_static"] # The name of an image file (relative to this directory) to use as a favicon of # the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. # -html_favicon = '_static/favicon.ico' +html_favicon = "_static/favicon.ico" # Output file base name for HTML help builder. -htmlhelp_basename = 'AdafruitStmpe610Librarydoc' +htmlhelp_basename = "AdafruitStmpe610Librarydoc" # -- Options for LaTeX output --------------------------------------------- latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # - # 'papersize': 'letterpaper', - - # The font size ('10pt', '11pt' or '12pt'). - # - # 'pointsize': '10pt', - - # Additional stuff for the LaTeX preamble. - # - # 'preamble': '', - - # Latex figure (float) alignment - # - # 'figure_align': 'htbp', + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - (master_doc, 'Adafruitstmpe610Library.tex', u'Adafruitstmpe610 Library Documentation', - author, 'manual'), + ( + master_doc, + "Adafruitstmpe610Library.tex", + u"Adafruitstmpe610 Library Documentation", + author, + "manual", + ), ] # -- Options for manual page output --------------------------------------- @@ -144,8 +159,13 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - (master_doc, 'Adafruitstmpe610library', u'Adafruit stmpe610 Library Documentation', - [author], 1) + ( + master_doc, + "Adafruitstmpe610library", + u"Adafruit stmpe610 Library Documentation", + [author], + 1, + ) ] # -- Options for Texinfo output ------------------------------------------- @@ -154,7 +174,13 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - (master_doc, 'Adafruitstmpe610Library', u'Adafruit stmpe610 Library Documentation', - author, 'Adafruitstmpe610Library', 'One line description of project.', - 'Miscellaneous'), + ( + master_doc, + "Adafruitstmpe610Library", + u"Adafruit stmpe610 Library Documentation", + author, + "Adafruitstmpe610Library", + "One line description of project.", + "Miscellaneous", + ), ] diff --git a/examples/stmpe610_paint_demo.py b/examples/stmpe610_paint_demo.py index 3f183b9..76c2137 100644 --- a/examples/stmpe610_paint_demo.py +++ b/examples/stmpe610_paint_demo.py @@ -30,8 +30,8 @@ ts = st.touches for point in ts: # perform transformation to get into display coordinate system! - y = point['y'] - x = 4096 - point['x'] + y = point["y"] + x = 4096 - point["x"] x = 2 * x // 30 y = 8 * y // 90 - display.fill_rectangle(x-2, y-2, 4, 4, color565(255, 0, 0)) + display.fill_rectangle(x - 2, y - 2, 4, 4, color565(255, 0, 0)) diff --git a/setup.py b/setup.py index 1544d0b..45795b7 100644 --- a/setup.py +++ b/setup.py @@ -7,6 +7,7 @@ # Always prefer setuptools over distutils from setuptools import setup, find_packages + # To use a consistent encoding from codecs import open from os import path @@ -14,48 +15,39 @@ here = path.abspath(path.dirname(__file__)) # Get the long description from the README file -with open(path.join(here, 'README.rst'), encoding='utf-8') as f: +with open(path.join(here, "README.rst"), encoding="utf-8") as f: long_description = f.read() setup( - name='adafruit-circuitpython-stmpe610', - + name="adafruit-circuitpython-stmpe610", use_scm_version=True, - setup_requires=['setuptools_scm'], - - description='CircuitPython library for STMPE610 Resistive Touch Screen Controller.', + setup_requires=["setuptools_scm"], + description="CircuitPython library for STMPE610 Resistive Touch Screen Controller.", long_description=long_description, - long_description_content_type='text/x-rst', - + long_description_content_type="text/x-rst", # The project's main homepage. - url='https://github.com/adafruit/Adafruit_CircuitPython_STMPE610', - + url="https://github.com/adafruit/Adafruit_CircuitPython_STMPE610", # Author details - author='Adafruit Industries', - author_email='circuitpython@adafruit.com', - - install_requires=['Adafruit-Blinka'], - + author="Adafruit Industries", + author_email="circuitpython@adafruit.com", + install_requires=["Adafruit-Blinka"], # Choose your license - license='MIT', - + license="MIT", # See https://pypi.python.org/pypi?%3Aaction=list_classifiers classifiers=[ - 'Development Status :: 3 - Alpha', - 'Intended Audience :: Developers', - 'Topic :: Software Development :: Libraries', - 'Topic :: System :: Hardware', - 'License :: OSI Approved :: MIT License', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.4', - 'Programming Language :: Python :: 3.5', + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Topic :: Software Development :: Libraries", + "Topic :: System :: Hardware", + "License :: OSI Approved :: MIT License", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.4", + "Programming Language :: Python :: 3.5", ], - # What does your project relate to? - keywords='adafruit stmpe610 resistive touch screen controller' - 'hardware micropython circuitpython', - + keywords="adafruit stmpe610 resistive touch screen controller" + "hardware micropython circuitpython", # You can just specify the packages manually here if your project is # simple. Or you can use find_packages(). - py_modules=['adafruit_stmpe610'], + py_modules=["adafruit_stmpe610"], )