QuadroCopter  0.1.4
i2cDevice.h
Go to the documentation of this file.
1 //
2 // Created by Michael Brookes on 09/04/2016.
3 //
4 
5 #ifndef I2CDEVICE_H
6 #define I2CDEVICE_H
7 
8 #include "../Interfaces/IDevice.h"
11 
12 #include <cstdlib>
13 #include <iostream>
14 #include <unistd.h>
15 #include <sys/ioctl.h>
16 #include <linux/i2c-dev.h>
17 #include <fcntl.h>
18 #include <sys/stat.h>
19 
20 #define I2C_BUS_COUNT 1
21 #define I2C_1 "/dev/i2c-1"
22 
23 #define ONE_BYTE 1
24 #define TWO_BYTES 2
25 #define MAX_BUFF 1024
26 
27 namespace quadro {
28 
29  namespace i2c {
30 
34  class i2cDevice : public IDevice {
35 
36  public:
40  ~i2cDevice();
41 
45  i2cDevice();
46 
47  /*i2c Specific Members*/
48 
52  void initDevice() throw( i2cSetupException& );
53 
60  short getValueFromRegister( unsigned char _registerAddress );
61 
67  void setRegisterValue( unsigned char _registerValue );
68 
74  void setRegisterAddress( unsigned char _registerAddress );
75 
83  int writeToDevice( size_t _bufferSize ) throw( i2cSetupException& );
84 
92  int stop( pthread_t threadHandle );
93 
94  private:
95 
99  struct I2CBus {
100  const char* busPath;
101  } _bus[I2C_BUS_COUNT];
102 
103  struct stat buffer;
104 
105  protected:
106 
111  On = 1,
112  Off = 0,
113  Error = 2
114  };
115 
121  int getStatus();
122 
128  void setStatus( deviceStatus _status );
129 
130  deviceStatus currentStatus;
131 
138  int getDeviceFileHandle();
139 
146  const char* getFilePath();
147 
153  void setBusPaths();
154 
162  int validateBusId() throw( i2cSetupException& );
163 
171  char* validateBusPath( char* _busProposedPath ) throw( i2cSetupException& );
172 
178  void selectABusPath();
179 
185  virtual void setDeviceAddress( unsigned char _deviceAddress ) = 0;
186 
191  virtual void setBusId( int _busId ) = 0;
192 
193  /* From IDevice Interface*/
194 
201  int connectToDevice() { return ioctl( this->fileHandle, I2C_SLAVE, this->deviceAddress ); };
202 
210  int openDevice() throw( i2cSetupException& );
211 
219  short readDevice( size_t _bufferSize ) throw( i2cSetupException& );
220 
221  const char* deviceBusPath;
222 
223  unsigned char deviceAddress;
224  unsigned char registerValue;
225  unsigned char registerAddress;
226 
229 
232  int busId;
233 
235 
236  };
237 
238  }
239 
240 }
241 
242 #endif //I2CDEVICE_H
void selectABusPath()
Definition: i2cDevice.cpp:72
const char * getFilePath()
Definition: i2cDevice.cpp:78
unsigned char registerAddress
Definition: i2cDevice.h:225
int fileHandle
Definition: i2cDevice.h:231
virtual void setBusId(int _busId)=0
void initDevice()
Definition: i2cDevice.cpp:33
int stop(pthread_t threadHandle)
Definition: i2cDevice.cpp:179
#define MAX_BUFF
Used to store fatal error.
Definition: i2cDevice.h:25
Definition: i2cSetupException.h:24
Definition: i2cDevice.h:34
i2cDevice()
Definition: i2cDevice.cpp:22
int openDevice()
Definition: i2cDevice.cpp:144
Status On (thread is active)
Definition: i2cDevice.h:111
~i2cDevice()
Definition: i2cDevice.cpp:29
int getDeviceFileHandle()
Definition: i2cDevice.cpp:90
void setStatus(deviceStatus _status)
Definition: i2cDevice.cpp:80
Status Off (thread is disabled)
Definition: i2cDevice.h:112
char errMessage[MAX_BUFF]
Definition: i2cDevice.h:230
int validateBusId()
Definition: i2cDevice.cpp:92
char writeBufferOnly[ONE_BYTE]
Definition: i2cDevice.h:228
void setRegisterValue(unsigned char _registerValue)
Definition: i2cDevice.cpp:76
int busId
Definition: i2cDevice.h:232
unsigned char deviceAddress
Definition: i2cDevice.h:223
#define I2C_BUS_COUNT
How many I2C buses are available. Add paths below as required.
Definition: i2cDevice.h:20
virtual void setDeviceAddress(unsigned char _deviceAddress)=0
int getStatus()
Definition: i2cDevice.cpp:85
Definition: aeronautics.h:23
bool deviceInitialised
Definition: i2cDevice.h:234
int writeToDevice(size_t _bufferSize)
Definition: i2cDevice.cpp:155
unsigned char registerValue
Definition: i2cDevice.h:224
#define ONE_BYTE
Used for specifying how many bytes to read.
Definition: i2cDevice.h:23
Definition: IDevice.h:27
deviceStatus
Definition: i2cDevice.h:110
Status Error (thread is disabled)
Definition: i2cDevice.h:113
short readDevice(size_t _bufferSize)
Definition: i2cDevice.cpp:130
int connectToDevice()
Definition: i2cDevice.h:201
char readAndWriteBuffer[TWO_BYTES]
Definition: i2cDevice.h:227
void setRegisterAddress(unsigned char _registerAddress)
Definition: i2cDevice.cpp:74
const char * deviceBusPath
Definition: i2cDevice.h:221
char * validateBusPath(char *_busProposedPath)
Definition: i2cDevice.cpp:103
short getValueFromRegister(unsigned char _registerAddress)
Definition: i2cDevice.cpp:114
#define TWO_BYTES
Used for specifying how many bytes to write.
Definition: i2cDevice.h:24
void setBusPaths()
Definition: i2cDevice.cpp:67