Dependencies: I2CMotor I2CServo Robot XBee
Revision 2:6c60a3006881, committed 2015-10-14
- Comitter:
- inst
- Date:
- Wed Oct 14 03:50:56 2015 +0000
- Parent:
- 1:01d881dc1170
- Child:
- 3:49d3d84b737d
- Commit message:
Changed in this revision
--- a/I2CDevice.cpp Fri Aug 21 04:51:59 2015 +0000 +++ b/I2CDevice.cpp Wed Oct 14 03:50:56 2015 +0000 @@ -1,3 +1,38 @@ #include "I2CDevice.h" +#include "OBROT.h" +#include "mbed.h" +#include "Robot.h" -I2C* I2CDevice::mI2C = NULL; +I2C* I2CDevice::mI2C[] = { + NULL, + NULL, + NULL +}; +const PinName I2CDevice::mSDA[] = { + D14, + D3, + D5 +}; +const PinName I2CDevice::mSCL[] = { + D15, + D6, + D7 +}; +const uint32_t I2CDevice::mNumOfI2C = 3; + +I2C* I2CDevice::getI2C() const{ + for ( int i = I2CDeviceID::STEERING_MOTOR_0; i <= I2CDeviceID::STEERING_SERVO_2; ++i ){ + // Steering + if ( mAddress == OBROT::mI2CDeviceAddress[ i ] ){ + return mI2C[ 0 ]; + } + } + for ( int i = I2CDeviceID::ANGLE_MANAGER; i < Robot::mNumOfI2CDevice; ++i ){ + // NOT Steering and XBee + if ( mAddress == OBROT::mI2CDeviceAddress[ i ] ){ + return mI2C[ 1 ]; + } + } + + return mI2C[ 2 ]; +}
--- 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; };
--- a/I2CMotor.lib Fri Aug 21 04:51:59 2015 +0000 +++ b/I2CMotor.lib Wed Oct 14 03:50:56 2015 +0000 @@ -1,1 +1,1 @@ -I2CMotor#46cf8d086b38 +I2CMotor#5b17e7dffb3d
--- a/I2CServo.lib Fri Aug 21 04:51:59 2015 +0000 +++ b/I2CServo.lib Wed Oct 14 03:50:56 2015 +0000 @@ -1,1 +1,1 @@ -I2CServo#e06cf312e9f0 +I2CServo#0f03a5729afc
--- a/Robot.lib Fri Aug 21 04:51:59 2015 +0000 +++ b/Robot.lib Wed Oct 14 03:50:56 2015 +0000 @@ -1,1 +1,1 @@ -Robot#48028dcad4e2 +Robot#0d9bb8e1876b
--- a/XBee.lib Fri Aug 21 04:51:59 2015 +0000 +++ b/XBee.lib Wed Oct 14 03:50:56 2015 +0000 @@ -1,1 +1,1 @@ -XBee#7f0b90daef14 +XBee#869012d317b5