parent
3ad975dfc9
commit
85058fcf29
@ -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…
Reference in new issue