Arduino-TWI
Two-Wire Interface (TWI) library for Arduino
TWI.h
Go to the documentation of this file.
1 
19 #ifndef TWI_H
20 #define TWI_H
21 
22 #include "iovec.h"
23 #include "bswap.h"
24 
28 class TWI {
29 public:
33  class Device {
34  public:
41  Device(TWI& twi, uint8_t addr) :
42  m_twi(twi),
43  m_addr(addr << 1)
44  {
45  }
46 
52  bool acquire()
53  {
54  return (m_twi.acquire());
55  }
56 
62  bool release()
63  {
64  return (m_twi.release());
65  }
66 
73  int read(void* buf, size_t count)
74  {
75  return (m_twi.read(m_addr, buf, count));
76  }
77 
84  int write(const void* buf, size_t count)
85  {
86  return (m_twi.write(m_addr, buf, count));
87  }
88 
94  int write(iovec_t* vp)
95  {
96  return (m_twi.write(m_addr, vp));
97  }
98 
99  protected:
102 
104  uint8_t m_addr;
105  };
106 
108  static const uint32_t DEFAULT_FREQ = 100000L;
109 
113  TWI() :
114  m_busy(false)
115  {}
116 
123  virtual bool acquire() = 0;
124 
131  virtual bool release() = 0;
132 
141  virtual int read(uint8_t addr, void* buf, size_t count) = 0;
142 
151  virtual int write(uint8_t addr, const void* buf, size_t count)
152  {
153  iovec_t vec[2];
154  iovec_t* vp = vec;
155  iovec_arg(vp, buf, count);
156  iovec_end(vp);
157  return (write(addr, vec));
158  }
159 
167  virtual int write(uint8_t addr, iovec_t* vp) = 0;
168 
169 protected:
171  volatile bool m_busy;
172 
176  void lock()
177  {
178  while (m_busy) yield();
179  m_busy = true;
180  }
181 
185  void unlock()
186  {
187  m_busy = false;
188  }
189 };
190 #endif
TWI()
Definition: TWI.h:113
Definition: TWI.h:28
void lock()
Definition: TWI.h:176
bool release()
Definition: TWI.h:62
uint8_t m_addr
Definition: TWI.h:104
virtual int read(uint8_t addr, void *buf, size_t count)=0
volatile bool m_busy
Definition: TWI.h:171
TWI & m_twi
Definition: TWI.h:101
Hardware::TWI twi(100000UL)
virtual bool release()=0
static const uint32_t DEFAULT_FREQ
Definition: TWI.h:108
virtual bool acquire()=0
virtual int write(uint8_t addr, const void *buf, size_t count)
Definition: TWI.h:151
int write(const void *buf, size_t count)
Definition: TWI.h:84
Device(TWI &twi, uint8_t addr)
Definition: TWI.h:41
bool acquire()
Definition: TWI.h:52
int read(void *buf, size_t count)
Definition: TWI.h:73
int write(iovec_t *vp)
Definition: TWI.h:94
void unlock()
Definition: TWI.h:185