Dependencies:   I2CMotor I2CServo Robot XBee

Dependents:   OBROT_ALL

Committer:
inst
Date:
Wed Oct 14 03:50:56 2015 +0000
Revision:
2:6c60a3006881
Parent:
1:01d881dc1170

        

Who changed what in which revision?

UserRevisionLine numberNew 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, &regAddr, 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