Skip to main content

A CircuitPython driver for Cirque Pinnacle (1CA027) touch controller used in Cirque Trackpads implementing the Adafruit_BusDevice library.

Project description

Documentation Status Build Status latest version on PyPI Total PyPI downloads


A CircuitPython driver library that implements the Adafruit_BusDevice library for interfacing with the Cirque Pinnacle (1CA027) touch controller used in Cirque Circle Trackpads.

Supported Features

  • Use SPI or I2C bus protocols to interface with the Pinnacle touch controller ASIC (Application Specific Integrated Circuit).

  • Relative mode data reporting (AKA Mouse mode) with optional tap detection.

  • Absolute mode data reporting (x, y, & z axis positions).

  • AnyMeas mode data reporting. This mode exposes the ADC (Analog to Digital Converter) values and is not well documented in the numerous datasheets provided by the Cirque corporation about the Pinnacle (1CA027), thus this is a rather experimental mode.

  • Hardware input buttons’ states included in data reports. There are 3 button input lines on the Cirque circle trackpads – see Pinout section.

  • Ability to identify finger & stylus or only stylus or only finger touch events. The Cirque circle trackpads are natively capable of measuring only 1 touch point per event.

  • Download/upload the underlying compensation matrix for ADC measurements.

  • Adjust the ADC matrix gain (sensitivity).

Unsupported Features

  • The legacy PS\2 interface is pretty limited and not accessible by some CircuitPython MCUs. Therefore, it has been neglected in this library.

  • Cirque’s circle trackpads ship with the newer non-AG (Advanced Gestures) variant of the Pinnacle touch controller ASIC. Thus, this library focuses on the the non-AG variant’s functionality via testing, and it does not provide access to the older AG variant’s features (register addresses slightly differ which breaks compatibility).


The above picture is a example of the Cirque GlidePoint circle trackpad. This picture is chosen as the test pads (larger copper circular pads) are clearly labeled. The test pads are extended to the 12-pin FFC/FPC cable connector (the white block near the bottom). The following table shows how the pins are connected in the examples (tested on an ItsyBitys M4)

pinout (ordered the same as the FFC/FPC cable connector)


MCU pin




SPI clock line



Master Input Slave Output



Slave Select (AKA Chip Select)



“data ready” interrupt



SPI Master Output Slave Input



Hardware input button #2



Hardware input button #3



Hardware input button #1



I2C clock line



I2C data line






3V power supply

Model Labeling Scheme



stands for the vertical & horizontal width of the trackpad, respectively.


stands for the hardwired interface protocol (3 = I2C, 4 = SPI). Notice, if there is a resistor populated at the R1 (470K ohm) junction (located just above the Pinnacle ASIC), it is configured for SPI, otherwise it is configured for I2C.


stands for Custom Configuration (if a 470K ohm resistor is populated at junction R4). “30” (with a resistor at R4) means that the hardware is configured to disable certain features despite what this library does. “00” (no resistor at R4) means that the hardware is configured to allow certain features to manipulated by this library. These features include “secondary tap” (thought of as “right mouse button” in relative data mode), Intellimouse scrolling (Microsoft patented scroll wheel behavior – a throw back to when scroll wheels were first introduced), and 180 degree orientation (your application can invert the axis data anyway).


stands for the overlay type (0 = none, 1 = adhesive, 2 = flat, 3 = curved)


This driver depends on:

Please ensure all dependencies are available on the CircuitPython filesystem. This is easily achieved by downloading the Adafruit library and driver bundle.

How to Install

This library is deployed to, so you can easily install this library using pip3 install circuitpython-cirque-pinnacle or use the following commands:

git clone
cd CircuitPython_Cirque_Pinnacle
python3 install

To install globally, prefix the last command with sudo.

Usage Example

Ensure you’ve connected the TMyyyxxx correctly by running the examples/ located in the examples folder of this library.


Contributions are welcome! Please read our Code of Conduct before contributing to help this project stay welcoming.

Sphinx documentation

Sphinx is used to build the documentation based on rST files and comments in the code. First, install dependencies (feel free to reuse the virtual environment from above):

python3 -m venv .env
source .env/bin/activate
pip install Sphinx sphinx-rtd-theme

Now, once you have the virtual environment activated:

cd docs
sphinx-build -E -W -b html . _build/html

This will output the documentation to docs/_build/html. Open the index.html in your browser to view them. It will also (due to -W) error out on any warning like Travis will. This is a good way to locally verify it will pass.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

circuitpython-cirque-pinnacle-0.0.2.tar.gz (336.8 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page