Dependencies:   I2CMotor I2CServo Robot XBee

Dependents:   OBROT_ALL

Files at this revision

API Documentation at this revision

Comitter:
inst
Date:
Wed Oct 14 03:50:56 2015 +0000
Parent:
1:01d881dc1170
Child:
3:49d3d84b737d
Commit message:

Changed in this revision

I2CDevice.cpp Show annotated file Show diff for this revision Revisions of this file
I2CDevice.h Show annotated file Show diff for this revision Revisions of this file
I2CMotor.lib Show annotated file Show diff for this revision Revisions of this file
I2CServo.lib Show annotated file Show diff for this revision Revisions of this file
Robot.lib Show annotated file Show diff for this revision Revisions of this file
XBee.lib Show annotated file Show diff for this revision Revisions of this file
--- 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, &regAddr, 1, true );
-        mI2C->read( devAddr | 1, data, len );
+        getI2C()->write( devAddr, &regAddr, 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