improved touch

doublebuf
Ondřej Hruška 6 years ago
parent 3ad975dfc9
commit 85058fcf29
Signed by: MightyPork
GPG Key ID: 2C5FD5035250423D
  1. 1
      gex/__init__.py
  2. 64
      gex/units/TOUCH.py
  3. 18
      ttouch.py

@ -19,6 +19,7 @@ from gex.units.OneWire import OneWire
from gex.units.ADC import ADC
from gex.units.SIPO import SIPO
from gex.units.FCAP import FCAP
from gex.units.TOUCH import TOUCH
# General, low level

@ -0,0 +1,64 @@
import gex
from gex.Client import EventReport
CMD_READ = 0
CMD_SET_BIN_THR = 1
CMD_DISABLE_ALL_REPORTS = 2
CMD_GET_CH_COUNT = 10
class TOUCH(gex.Unit):
"""
Touch sensing
"""
def _init(self):
self._handlers = {}
def _type(self):
return 'TOUCH'
def read(self):
""" Read raw values """
msg = self._query(CMD_READ)
pp = gex.PayloadParser(msg)
items = []
while pp.length() > 0:
items.append(pp.u16())
return items
def set_button_thresholds(self, thresholds, confirm=True):
""" Set binary report thresholds """
pb = gex.PayloadBuilder()
for t in thresholds:
pb.u16(t)
self._send(CMD_SET_BIN_THR, pb.close(), confirm=confirm)
def disable_button_mode(self, confirm=True):
""" Disable all button reports by clearing the thresholds """
self._send(CMD_DISABLE_ALL_REPORTS, confirm=confirm)
def get_channel_count(self, confirm=True):
""" Read nbr of channels """
resp = self._query(CMD_GET_CH_COUNT)
pp = gex.PayloadParser(resp)
return pp.u8()
def listen(self, nb, handler):
self._handlers[nb] = handler
def _on_event(self, evt:EventReport):
l = []
pp = gex.PayloadParser(evt.payload)
snap = pp.u32()
changed = pp.u32()
for i in range(0, 32):
if changed & (1 << i):
if i in self._handlers:
self._handlers[i]((snap & (1 << i)) != 0, evt.timestamp)

@ -0,0 +1,18 @@
import time
import gex
with gex.Client(gex.TrxRawUSB()) as client:
tsc = gex.TOUCH(client, 'tsc')
print("There are %d touch channels." % tsc.get_channel_count())
tsc.set_button_thresholds([1225, 1440, 1440])
tsc.listen(0, lambda state, ts: print("Pad 1: %d" % state))
tsc.listen(1, lambda state, ts: print("Pad 2: %d" % state))
tsc.listen(2, lambda state, ts: print("Pad 3: %d" % state))
while True:
print(tsc.read())
time.sleep(0.5)
Loading…
Cancel
Save