Bela
Real-time, ultra-low-latency audio and sensor processing system for BeagleBone Black
Loading...
Searching...
No Matches
Trill.h
1#pragma once
2#include <I2c.h>
3#include <stdint.h>
4#include <string>
5#include <vector>
6
12
13class Trill : public I2c
14{
15 public:
19 typedef enum {
20 AUTO = -1,
23 RAW = 1,
25 DIFF = 3,
26 } Mode;
27
31 typedef enum {
32 NONE = -1,
33 ANY = 0,
34 BAR = 1,
35 SQUARE = 2,
36 CRAFT = 3,
37 RING = 4,
38 HEX = 5,
39 FLEX = 6,
41 } Device;
42
56
65 private:
66 Mode mode_; // Which mode the device is in
67 Device device_type_ = NONE; // Which type of device is connected (if any)
68 uint32_t frameId;
69 uint8_t statusByte;
70 uint8_t address;
71 uint8_t firmware_version_ = 0; // Firmware version running on the device
72 uint8_t num_touches_; // Number of touches on last read
73 bool dataBufferIncludesStatusByte = false;
74 bool quiet = false;
75 std::vector<uint8_t> dataBuffer;
76 uint16_t commandSleepTime = 1000;
77 size_t currentReadOffset = -1;
78 bool shouldReadFrameId = false;
79 unsigned int numBits;
80 unsigned int transmissionWidth = 16;
81 unsigned int transmissionRightShift = 0;
82 uint32_t channelMask;
83 uint8_t numChannels;
84 float posRescale;
85 float posHRescale;
86 float sizeRescale;
87 float rawRescale;
88 ScanTriggerMode scanTriggerMode;
89 int identify();
90 void updateRescale();
91 void parseNewData(bool includesStatusByte);
92 void processStatusByte(uint8_t newStatusByte);
93 int writeCommandAndHandle(const i2c_char_t* data, size_t size, const char* name);
94 int writeCommandAndHandle(i2c_char_t command, const char* name);
95 int readBytesFrom(uint8_t offset, i2c_char_t* data, size_t size, const char* name);
96 int readBytesFrom(uint8_t offset, i2c_char_t& byte, const char* name);
97 int waitForAck(uint8_t command, const char* name);
98 void updateChannelMask(uint32_t mask);
99 int verbose = 0;
100 uint8_t cmdCounter = 0;
101 bool readErrorOccurred;
102 bool enableVersionCheck = true;
103 public:
140 std::vector<float> rawData;
142
147 static constexpr uint8_t speedValues[4] = {0, 1, 2, 3};
151 static constexpr uint8_t prescalerMax = 8;
152 Trill();
153 ~Trill();
174 Trill(unsigned int i2c_bus, Device device, uint8_t i2c_address = 255);
180 int setup(unsigned int i2c_bus, Device device = ANY, uint8_t i2c_address = 255);
181
188 static Device probe(unsigned int i2c_bus, uint8_t i2c_address);
189
202 static std::vector<std::pair<Device,uint8_t> > probeRange(unsigned int i2c_bus, size_t maxCount = 0);
203
207 int updateBaseline();
211 int reset();
212
225 int readI2C(bool shouldReadStatusByte = false);
226
241 void newData(const uint8_t* newData, size_t len, bool includesStatusByte = false);
242
246 Device deviceType() { return device_type_; }
250 static const std::string& getNameFromDevice(Device device);
254 static Device getDeviceFromName(const std::string& name);
258 static const std::string& getNameFromMode(Mode mode);
262 static Mode getModeFromName(const std::string& name);
266 int firmwareVersion() { return firmware_version_; }
270 Mode getMode() { return mode_; }
274 uint8_t getAddress() { return address; }
278 void printDetails() ;
282 void setVerbose(int verbose);
286 unsigned int getNumChannels() const;
290 unsigned int getDefaultNumChannels() const;
291
308 int setMode(Mode mode);
321 int setScanSettings(uint8_t speed, uint8_t num_bits = 12);
332 int setPrescaler(uint8_t prescaler);
347 int setNoiseThreshold(float threshold);
356 int setIDACValue(uint8_t value);
364 int setMinimumTouchSize(float minSize);
374 int setScanTrigger(ScanTriggerMode scanTriggerMode);
391 int setTimerPeriod(float ms);
399 int setAutoScanInterval(uint16_t interval);
408 int setEventMode(EventMode mode);
420 int setChannelMask(uint32_t mask);
433 int setTransmissionFormat(uint8_t width, uint8_t shift); // end of Scan Configuration Settings
452 int readStatusByte();
461 bool hasReset();
469 bool hasActivity();
476 uint8_t getFrameId();
488 uint32_t getFrameIdUnwrapped();
492
530 bool is1D();
538 bool is2D();
542 unsigned int getBytesToRead(bool includesStatusByte);
546 unsigned int getNumButtons() { return 2 * (getMode() == CENTROID && RING == deviceType());};
553 unsigned int getNumTouches();
565 float touchLocation(uint8_t touch_num);
574 float touchSize(uint8_t touch_num);
581 unsigned int getNumHorizontalTouches();
593 float touchHorizontalLocation(uint8_t touch_num);
602 float touchHorizontalSize(uint8_t touch_num);
609 float compoundTouchLocation();
623 float compoundTouchSize();
633 float getButtonValue(uint8_t button_num);
634 // end of centroid mode
636};
void newData(const uint8_t *newData, size_t len, bool includesStatusByte=false)
Set data retrieved from the device.
Definition Trill.cpp:713
static const std::string & getNameFromMode(Mode mode)
Definition Trill.cpp:303
unsigned int getNumChannels() const
Definition Trill.cpp:976
int setPrescaler(uint8_t prescaler)
Definition Trill.cpp:529
bool is1D()
Definition Trill.cpp:831
int setMinimumTouchSize(float minSize)
Definition Trill.cpp:551
int updateBaseline()
Definition Trill.cpp:654
float touchHorizontalSize(uint8_t touch_num)
Definition Trill.cpp:932
uint8_t getAddress()
Definition Trill.h:274
int reset()
Definition Trill.cpp:658
int setup(unsigned int i2c_bus, Device device=ANY, uint8_t i2c_address=255)
Definition Trill.cpp:127
void printDetails()
Definition Trill.cpp:492
int setIDACValue(uint8_t value)
Definition Trill.cpp:546
EventMode
Definition Trill.h:51
@ kEventModeTouch
Only set the EVT pin if activity is detected in the current frame.
Definition Trill.h:52
@ kEventModeChange
Only set the EVT pin if activity is detected in the current or past frame.
Definition Trill.h:53
@ kEventModeAlways
Set the EVT pin every time a new frame is available.
Definition Trill.h:54
ScanTriggerMode
Definition Trill.h:59
@ kScanTriggerDisabled
Do not scan capacitive channels.
Definition Trill.h:60
@ kScanTriggerI2c
Scan capacitive channels after every I2C transaction.
Definition Trill.h:61
@ kScanTriggerTimer
Scan capacitive channels every time the timer set by setAutoScanInterval() expires.
Definition Trill.h:62
@ kScanTriggerI2cOrTimer
Scan capacitive channels after every I2C transaction or when timer expires, whichever comes first.
Definition Trill.h:63
Device
Definition Trill.h:31
@ FLEX
Trill Flex
Definition Trill.h:39
@ RING
Trill Ring
Definition Trill.h:37
@ HEX
Trill Hex
Definition Trill.h:38
@ UNKNOWN
same as ANY, for backwards compatibility
Definition Trill.h:40
@ CRAFT
Trill Craft
Definition Trill.h:36
@ BAR
Trill Bar
Definition Trill.h:34
@ SQUARE
Trill Square
Definition Trill.h:35
@ NONE
No device.
Definition Trill.h:32
@ ANY
A valid device of unknown type.
Definition Trill.h:33
unsigned int getNumTouches()
Definition Trill.cpp:859
float compoundTouchLocation()
Definition Trill.cpp:958
int readStatusByte()
Definition Trill.cpp:803
uint8_t getFrameId()
Definition Trill.cpp:823
bool hasReset()
Definition Trill.cpp:813
static Mode getModeFromName(const std::string &name)
Definition Trill.cpp:312
unsigned int getNumHorizontalTouches()
Definition Trill.cpp:868
int setChannelMask(uint32_t mask)
Definition Trill.cpp:627
float touchLocation(uint8_t touch_num)
Definition Trill.cpp:878
int setScanTrigger(ScanTriggerMode scanTriggerMode)
Definition Trill.cpp:614
int setAutoScanInterval(uint16_t interval)
Definition Trill.cpp:597
int setNoiseThreshold(float threshold)
Definition Trill.cpp:534
int readI2C(bool shouldReadStatusByte=false)
Read data from the device.
Definition Trill.cpp:691
int setMode(Mode mode)
Definition Trill.cpp:504
void setVerbose(int verbose)
Definition Trill.cpp:499
float compoundTouchSize()
Definition Trill.cpp:968
float touchHorizontalLocation(uint8_t touch_num)
Definition Trill.cpp:919
unsigned int getDefaultNumChannels() const
Definition Trill.cpp:981
static constexpr uint8_t speedValues[4]
Definition Trill.h:147
int setEventMode(EventMode mode)
Definition Trill.cpp:621
bool hasActivity()
Definition Trill.cpp:818
unsigned int getNumButtons()
Definition Trill.h:546
float compoundTouchHorizontalLocation()
Definition Trill.cpp:963
Mode getMode()
Definition Trill.h:270
std::vector< float > rawData
Definition Trill.h:140
int setScanSettings(uint8_t speed, uint8_t num_bits=12)
Definition Trill.cpp:514
static Device getDeviceFromName(const std::string &name)
Definition Trill.cpp:291
static const std::string & getNameFromDevice(Device device)
Definition Trill.cpp:267
int setTimerPeriod(float ms)
Definition Trill.cpp:563
Device deviceType()
Definition Trill.h:246
int setTransmissionFormat(uint8_t width, uint8_t shift)
Definition Trill.cpp:643
bool is2D()
Definition Trill.cpp:846
static std::vector< std::pair< Device, uint8_t > > probeRange(unsigned int i2c_bus, size_t maxCount=0)
Definition Trill.cpp:249
static Device probe(unsigned int i2c_bus, uint8_t i2c_address)
Definition Trill.cpp:236
uint32_t getFrameIdUnwrapped()
Definition Trill.cpp:827
unsigned int getBytesToRead(bool includesStatusByte)
Definition Trill.cpp:676
Mode
Definition Trill.h:19
@ RAW
Definition Trill.h:23
@ AUTO
Definition Trill.h:20
@ BASELINE
Definition Trill.h:24
@ DIFF
Definition Trill.h:25
@ CENTROID
Definition Trill.h:22
float getButtonValue(uint8_t button_num)
Definition Trill.cpp:891
float touchSize(uint8_t touch_num)
Definition Trill.cpp:906
static constexpr uint8_t prescalerMax
Definition Trill.h:151
int firmwareVersion()
Definition Trill.h:266