Bela
Real-time, ultra-low-latency audio and sensor processing system for BeagleBone Black
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
Trill.h
1 #pragma once
2 #include <I2c.h>
3 #include <stdint.h>
4 #include <string>
5 #include <vector>
6 
13 class Trill : public I2c
14 {
15  public:
19  typedef enum {
20  AUTO = -1,
22  CENTROID = 0,
23  RAW = 1,
24  BASELINE = 2,
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;
51  typedef enum {
55  } EventMode;
59  typedef enum {
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;
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();
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 };
bool is1D()
Definition: Trill.cpp:831
bool is2D()
Definition: Trill.cpp:846
static Device getDeviceFromName(const std::string &name)
Definition: Trill.cpp:291
int setAutoScanInterval(uint16_t interval)
Definition: Trill.cpp:597
Trill Bar
Definition: Trill.h:34
static Device probe(unsigned int i2c_bus, uint8_t i2c_address)
Definition: Trill.cpp:236
Only set the EVT pin if activity is detected in the current frame.
Definition: Trill.h:52
float touchHorizontalLocation(uint8_t touch_num)
Definition: Trill.cpp:919
int setMode(Mode mode)
Definition: Trill.cpp:504
int setEventMode(EventMode mode)
Definition: Trill.cpp:621
unsigned int getNumChannels() const
Definition: Trill.cpp:976
int setTransmissionFormat(uint8_t width, uint8_t shift)
Definition: Trill.cpp:643
uint32_t getFrameIdUnwrapped()
Definition: Trill.cpp:827
int firmwareVersion()
Definition: Trill.h:266
A valid device of unknown type.
Definition: Trill.h:33
Definition: Trill.h:22
Scan capacitive channels after every I2C transaction or when timer expires, whichever comes first...
Definition: Trill.h:63
int setChannelMask(uint32_t mask)
Definition: Trill.cpp:627
unsigned int getDefaultNumChannels() const
Definition: Trill.cpp:981
void printDetails()
Definition: Trill.cpp:492
unsigned int getNumButtons()
Definition: Trill.h:546
int setTimerPeriod(float ms)
Definition: Trill.cpp:563
float touchHorizontalSize(uint8_t touch_num)
Definition: Trill.cpp:932
Definition: Trill.h:25
ScanTriggerMode
Definition: Trill.h:59
int updateBaseline()
Definition: Trill.cpp:654
float touchSize(uint8_t touch_num)
Definition: Trill.cpp:906
int setScanTrigger(ScanTriggerMode scanTriggerMode)
Definition: Trill.cpp:614
Definition: I2c.h:23
bool hasActivity()
Definition: Trill.cpp:818
Mode getMode()
Definition: Trill.h:270
static const std::string & getNameFromMode(Mode mode)
Definition: Trill.cpp:303
std::vector< float > rawData
Definition: Trill.h:140
static std::vector< std::pair< Device, uint8_t > > probeRange(unsigned int i2c_bus, size_t maxCount=0)
Definition: Trill.cpp:249
int readI2C(bool shouldReadStatusByte=false)
Read data from the device.
Definition: Trill.cpp:691
Trill Square
Definition: Trill.h:35
Trill Craft
Definition: Trill.h:36
float compoundTouchSize()
Definition: Trill.cpp:968
float compoundTouchLocation()
Definition: Trill.cpp:958
unsigned int getBytesToRead(bool includesStatusByte)
Definition: Trill.cpp:676
Definition: Trill.h:24
Device
Definition: Trill.h:31
void newData(const uint8_t *newData, size_t len, bool includesStatusByte=false)
Set data retrieved from the device.
Definition: Trill.cpp:713
int setIDACValue(uint8_t value)
Definition: Trill.cpp:546
int setPrescaler(uint8_t prescaler)
Definition: Trill.cpp:529
Do not scan capacitive channels.
Definition: Trill.h:60
void setVerbose(int verbose)
Definition: Trill.cpp:499
Trill Ring
Definition: Trill.h:37
No device.
Definition: Trill.h:32
int setup(unsigned int i2c_bus, Device device=ANY, uint8_t i2c_address=255)
Definition: Trill.cpp:127
float compoundTouchHorizontalLocation()
Definition: Trill.cpp:963
static constexpr uint8_t speedValues[4]
Definition: Trill.h:147
A class to use the Trill family of capacitive sensors. http://bela.io/trill.
Definition: Trill.h:13
int setMinimumTouchSize(float minSize)
Definition: Trill.cpp:551
static constexpr uint8_t prescalerMax
Definition: Trill.h:151
int setNoiseThreshold(float threshold)
Definition: Trill.cpp:534
unsigned int getNumHorizontalTouches()
Definition: Trill.cpp:868
Trill Hex
Definition: Trill.h:38
Scan capacitive channels after every I2C transaction.
Definition: Trill.h:61
Definition: Trill.h:23
Scan capacitive channels every time the timer set by setAutoScanInterval() expires.
Definition: Trill.h:62
bool hasReset()
Definition: Trill.cpp:813
float getButtonValue(uint8_t button_num)
Definition: Trill.cpp:891
Mode
Definition: Trill.h:19
same as ANY, for backwards compatibility
Definition: Trill.h:40
Trill Flex
Definition: Trill.h:39
EventMode
Definition: Trill.h:51
int readStatusByte()
Definition: Trill.cpp:803
static Mode getModeFromName(const std::string &name)
Definition: Trill.cpp:312
unsigned int getNumTouches()
Definition: Trill.cpp:859
Only set the EVT pin if activity is detected in the current or past frame.
Definition: Trill.h:53
float touchLocation(uint8_t touch_num)
Definition: Trill.cpp:878
static const std::string & getNameFromDevice(Device device)
Definition: Trill.cpp:267
int setScanSettings(uint8_t speed, uint8_t num_bits=12)
Definition: Trill.cpp:514
Device deviceType()
Definition: Trill.h:246
Set the EVT pin every time a new frame is available.
Definition: Trill.h:54
uint8_t getAddress()
Definition: Trill.h:274
Definition: Trill.h:20
uint8_t getFrameId()
Definition: Trill.cpp:823
int reset()
Definition: Trill.cpp:658