Dependencies: I2CMotor I2CServo Robot XBee
I2CDevice.h@4:13f38f93942d, 2015-11-13 (annotated)
- Committer:
- inst
- Date:
- Fri Nov 13 08:16:11 2015 +0000
- Revision:
- 4:13f38f93942d
- Parent:
- 2:6c60a3006881
;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
inst | 1:01d881dc1170 | 1 | #ifndef INCLUDED_I2CDEVICE_H |
inst | 1:01d881dc1170 | 2 | #define INCLUDED_I2CDEVICE_H |
inst | 1:01d881dc1170 | 3 | |
inst | 1:01d881dc1170 | 4 | #include "mbed.h" |
inst | 1:01d881dc1170 | 5 | |
inst | 1:01d881dc1170 | 6 | class I2CDevice{ |
inst | 1:01d881dc1170 | 7 | public: |
inst | 2:6c60a3006881 | 8 | static void resetI2C(){ |
inst | 2:6c60a3006881 | 9 | destroyI2C(); |
inst | 2:6c60a3006881 | 10 | createI2C(); |
inst | 2:6c60a3006881 | 11 | } |
inst | 2:6c60a3006881 | 12 | static void createI2C(){ |
inst | 2:6c60a3006881 | 13 | for ( int i = 0; i < mNumOfI2C; ++i ){ |
inst | 2:6c60a3006881 | 14 | mI2C[ i ] = new I2C( mSDA[ i ], mSCL[ i ] ); |
inst | 2:6c60a3006881 | 15 | } |
inst | 2:6c60a3006881 | 16 | } |
inst | 2:6c60a3006881 | 17 | static void destroyI2C(){ |
inst | 2:6c60a3006881 | 18 | for ( int i = 0; i < mNumOfI2C; ++i ){ |
inst | 2:6c60a3006881 | 19 | delete mI2C[ i ]; |
inst | 2:6c60a3006881 | 20 | } |
inst | 1:01d881dc1170 | 21 | } |
inst | 1:01d881dc1170 | 22 | |
inst | 1:01d881dc1170 | 23 | I2CDevice( char address ) : mAddress( address ){ |
inst | 1:01d881dc1170 | 24 | } |
inst | 1:01d881dc1170 | 25 | |
inst | 2:6c60a3006881 | 26 | virtual int write(){ |
inst | 2:6c60a3006881 | 27 | return 0; |
inst | 2:6c60a3006881 | 28 | } |
inst | 2:6c60a3006881 | 29 | virtual int read(){ |
inst | 2:6c60a3006881 | 30 | return 0; |
inst | 2:6c60a3006881 | 31 | } |
inst | 1:01d881dc1170 | 32 | |
inst | 2:6c60a3006881 | 33 | void writeI2C(){ |
inst | 2:6c60a3006881 | 34 | if ( write() ){ |
inst | 2:6c60a3006881 | 35 | resetI2C(); |
inst | 2:6c60a3006881 | 36 | } |
inst | 1:01d881dc1170 | 37 | } |
inst | 2:6c60a3006881 | 38 | |
inst | 2:6c60a3006881 | 39 | void readI2C(){ |
inst | 2:6c60a3006881 | 40 | if ( read() ){ |
inst | 2:6c60a3006881 | 41 | resetI2C(); |
inst | 2:6c60a3006881 | 42 | } |
inst | 1:01d881dc1170 | 43 | } |
inst | 1:01d881dc1170 | 44 | |
inst | 2:6c60a3006881 | 45 | int write( char* data, size_t len ) const{ |
inst | 2:6c60a3006881 | 46 | return getI2C()->write( mAddress, data, len ); |
inst | 2:6c60a3006881 | 47 | } |
inst | 2:6c60a3006881 | 48 | int read( char* data, size_t len ) const{ |
inst | 2:6c60a3006881 | 49 | return getI2C()->read( mAddress, data, len ); |
inst | 2:6c60a3006881 | 50 | } |
inst | 2:6c60a3006881 | 51 | |
inst | 2:6c60a3006881 | 52 | int writeReg( char devAddr, char regAddr, char data ){ |
inst | 1:01d881dc1170 | 53 | char d[ 2 ] = { regAddr, data }; |
inst | 2:6c60a3006881 | 54 | return getI2C()->write( devAddr, d, 2 ); |
inst | 1:01d881dc1170 | 55 | } |
inst | 1:01d881dc1170 | 56 | |
inst | 2:6c60a3006881 | 57 | int readReg( char devAddr, char regAddr, char* data, size_t len ){ |
inst | 1:01d881dc1170 | 58 | regAddr |= 0x80; |
inst | 2:6c60a3006881 | 59 | getI2C()->write( devAddr, ®Addr, 1, true ); |
inst | 2:6c60a3006881 | 60 | return getI2C()->read( devAddr | 1, data, len ); |
inst | 1:01d881dc1170 | 61 | } |
inst | 1:01d881dc1170 | 62 | |
inst | 1:01d881dc1170 | 63 | protected: |
inst | 2:6c60a3006881 | 64 | I2C* getI2C() const; |
inst | 2:6c60a3006881 | 65 | |
inst | 2:6c60a3006881 | 66 | static const uint32_t mNumOfI2C; |
inst | 2:6c60a3006881 | 67 | static const PinName mSDA[]; |
inst | 2:6c60a3006881 | 68 | static const PinName mSCL[]; |
inst | 2:6c60a3006881 | 69 | static I2C* mI2C[]; |
inst | 2:6c60a3006881 | 70 | |
inst | 1:01d881dc1170 | 71 | const char mAddress; |
inst | 1:01d881dc1170 | 72 | }; |
inst | 1:01d881dc1170 | 73 | |
inst | 1:01d881dc1170 | 74 | #endif |