I2CRTOS Driver by Helmut Schmücker. Removed included mbed-rtos library to prevent multiple definition. Make sure to include mbed-rtos library in your program!

Fork of I2cRtosDriver by Helmut Schmücker

Revision:
1:90455d5bdd8c
Parent:
0:13c962fecb13
Child:
2:514105beb343
--- a/I2CDriver.h	Sat Apr 13 13:37:29 2013 +0000
+++ b/I2CDriver.h	Sun Apr 14 06:39:04 2013 +0000
@@ -26,12 +26,6 @@
      */
     I2CDriver(PinName sda, PinName scl);
 
-    /** Set the frequency of the I2C interface
-     *
-     *  @param hz The bus frequency in hertz
-     */
-    void frequency(int hz);
-
     /** Read from an I2C slave
      *
      * Performs a complete read transaction. The bottom bit of
@@ -48,6 +42,8 @@
      */
     int read(int address, char *data, int length, bool repeated = false);
 
+    int read(int address, uint8_t regist, char *data, int length, bool repeated = false);
+
     /** Read a single byte from the I2C bus
      *
      *  @param ack indicates if the byte is to be acknowledged (1 = acknowledge)
@@ -90,15 +86,15 @@
     void stop(void);
 
     /// Wait until the i2c driver becomes available.
-    void lock() {
+     void lock()  {
         // if one and the same thread can lock twice, but then it needs also to unlock twice.
         // exactly what we need here
-        m_channel.mutex.lock(osWaitForever);
+        m_channel->mutex.lock(osWaitForever);
     }
 
     /// Unlock the driver that has previously been locked by the same thread
-    void osStatus unlock() {
-        m_channel.mutex.unlock(osWaitForever);
+     void unlock() {
+        m_channel->mutex.unlock();
     }
 
 
@@ -112,41 +108,43 @@
         READ_BYTE,
         READ,
         READ_FROM_REGISTER
-    }
+    };
 
     struct Transfer {
+        osThreadId caller;
         Command cmd;
         int freq;
         int adr;
-        int reg;
+        uint8_t reg;
         char* dta;
+        const char* wdta;
         int len;
+        int ack;
         bool rep;
-        int res;
-    }
+        int ret;
+    };
 
     struct Channel {
-        osThreadId caller;
-        osThreadId driver;
-        Mutex  mutex;
-        Transfer transfer;
-        int freq;
-    }
+        volatile osThreadId driver;
+        rtos::Mutex  mutex;
+        volatile Transfer transfer;
+        volatile int freq;
+    };
 
-    static const PinName c_sda[]= {p9,p28};
-    static const PinName c_scl[]= {p10,p27};
+    static const PinName c_sdas[2];
+    static const PinName c_scls[2];
 
-    static Channel* s_channels[2];
+     static Channel* s_channels[2];
 
-    Channel& m_channel;
+     Channel* m_channel;
 
     static void channel_0_ISR();
     static void channel_1_ISR();
 
-    static void threadFun(void* const args);
+    static void threadFun(void const *args);
 
     void sendNwait();
 
-}
+};
 }
 #endif