Dependencies: I2CMotor I2CServo Robot XBee
Diff: I2CDevice.h
- Revision:
- 2:6c60a3006881
- Parent:
- 1:01d881dc1170
diff -r 01d881dc1170 -r 6c60a3006881 I2CDevice.h --- a/I2CDevice.h Fri Aug 21 04:51:59 2015 +0000 +++ b/I2CDevice.h Wed Oct 14 03:50:56 2015 +0000 @@ -5,36 +5,69 @@ class I2CDevice{ public: - static void initI2C( PinName sda, PinName scl ){ - mI2C = new I2C( sda, scl ); + static void resetI2C(){ + destroyI2C(); + createI2C(); + } + static void createI2C(){ + for ( int i = 0; i < mNumOfI2C; ++i ){ + mI2C[ i ] = new I2C( mSDA[ i ], mSCL[ i ] ); + } + } + static void destroyI2C(){ + for ( int i = 0; i < mNumOfI2C; ++i ){ + delete mI2C[ i ]; + } } I2CDevice( char address ) : mAddress( address ){ } - virtual void write() = 0; - virtual void read() = 0; + virtual int write(){ + return 0; + } + virtual int read(){ + return 0; + } - void write( char* data, size_t len ) const{ - mI2C->write( mAddress, data, len ); + void writeI2C(){ + if ( write() ){ + resetI2C(); + } } - void read( char* data, size_t len ) const{ - mI2C->read( mAddress, data, len ); + + void readI2C(){ + if ( read() ){ + resetI2C(); + } } - void writeReg( char devAddr, char regAddr, char data ){ + int write( char* data, size_t len ) const{ + return getI2C()->write( mAddress, data, len ); + } + int read( char* data, size_t len ) const{ + return getI2C()->read( mAddress, data, len ); + } + + int writeReg( char devAddr, char regAddr, char data ){ char d[ 2 ] = { regAddr, data }; - mI2C->write( devAddr, d, 2 ); + return getI2C()->write( devAddr, d, 2 ); } - void readReg( char devAddr, char regAddr, char* data, size_t len ){ + int readReg( char devAddr, char regAddr, char* data, size_t len ){ regAddr |= 0x80; - mI2C->write( devAddr, ®Addr, 1, true ); - mI2C->read( devAddr | 1, data, len ); + getI2C()->write( devAddr, ®Addr, 1, true ); + return getI2C()->read( devAddr | 1, data, len ); } - static I2C* mI2C; protected: + I2C* getI2C() const; + + static const uint32_t mNumOfI2C; + static const PinName mSDA[]; + static const PinName mSCL[]; + static I2C* mI2C[]; + const char mAddress; };