Source code for gfxhat.touch

"""Library for the GFX HAT Cap1166 touch controller."""
import cap1xxx

_cap1166 = None
is_setup = False

I2C_ADDR = 0x2c

UP = 0
DOWN = 1
BACK = 2
MINUS = LEFT = 3
SELECT = ENTER = 4
PLUS = RIGHT = 5

LED_MAPPING = [5, 4, 3, 2, 1, 0]

NAME_MAPPING = ['up', 'down', 'back', 'minus', 'select', 'plus']


[docs]def setup(): """Set up the touch input on GFX HAT.""" global _cap1166, is_setup if is_setup: return _cap1166 = cap1xxx.Cap1166(i2c_addr=I2C_ADDR) for x in range(6): _cap1166.set_led_linking(x, 0) # Force recalibration _cap1166._write_byte(0x26, 0b00111111) _cap1166._write_byte(0x1F, 0b01000000) is_setup = True
[docs]def get_name(index): """Get the name of a touch pad from its channel index. :param index: Index of touch pad from 0 to 5 """ return NAME_MAPPING[index]
[docs]def set_led(index, state): """Set LED state. :param index: LED index :param state: LED state (1 = on, 0 = off) """ setup() _cap1166.set_led_state(LED_MAPPING[index], state)
[docs]def high_sensitivity(): """Switch to high sensitivity mode. This predetermined high sensitivity mode is for using touch through 3mm perspex or similar materials. """ setup() _cap1166._write_byte(0x00, 0b11000000) _cap1166._write_byte(0x1f, 0b00000000)
[docs]def enable_repeat(enable): """Enable touch hold repeat. If enable is true, repeat will be enabled. This will trigger new touch events at the set repeat_rate when a touch input is held. :param enable: enable/disable repeat: True/False """ setup() if enable: _cap1166.enable_repeat(0b11111111) else: _cap1166.enable_repeat(0b00000000)
[docs]def set_repeat_rate(rate): """Set hold repeat rate. Repeat rate values are clamped to the nearest 35ms, values from 35 to 560 are valid. :param rate: time in ms from 35 to 560 """ setup() _cap1166.set_repeat_rate(rate)
[docs]def on(buttons, handler=None): """Handle a press of one or more buttons. Decorator. Use with @captouch.on(UP) :param buttons: List, or single instance of cap touch button constant :param bounce: Maintained for compatibility with Dot3k joystick, unused """ setup() buttons = buttons if isinstance(buttons, list) else [buttons] def register(handler): for button in buttons: _cap1166.on(channel=button, event='press', handler=handler) _cap1166.on(channel=button, event='release', handler=handler) _cap1166.on(channel=button, event='held', handler=handler) if handler is not None: register(handler) return return register