mbed library for the TCA9548 mux

Fork of libTCS34725 by Michael Wilkens

Revision:
4:cc00e3842f1b
Parent:
3:afb107db7994
Child:
6:79996efbdcb2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TCA9548.h	Thu Mar 09 18:42:41 2017 +0000
@@ -0,0 +1,88 @@
+// TCA9548 I2C Mux
+#ifndef MBED_TCA9548_H
+#define MBED_TCA9548_H
+
+#include "mbed.h"
+
+//These pins should be the only piece specific to the F030R8
+#define SCL            PB_8
+#define SDA            PB_9
+
+//I2C Address
+
+#define DEV_ADDR (0x70<<1)
+
+// CHANNEL VALUES
+#define CH0 0x01
+#define CH1 0x02
+#define CH2 0x04
+#define CH3 0x08
+#define CH4 0x10
+#define CH5 0x20
+#define CH6 0x40
+#define CH7 0x80
+
+
+/** TCA9548 control class.
+ *
+ * Example:
+ * @code
+ * //Perform readings on two i2c devices with the same address
+ * #include "TCA9548.h"
+ * #include "mbed.h"
+ * #include "VL6180.h"
+ *
+ * TCA9548 i2cMux(SDA, SCL);
+ * VL6180 laser1(SDA, SCL); // on SD0 and SC0
+ * VL6180 laser2(SDA, SCL); // on SD1 and SC1
+ * Serial pc(USBTX, USBRX); //USB serial
+ *
+ * int main() {
+ *   float reading;
+ *   i2cMux.ch(CH0);
+ *   reading = laser1.read();
+ *   pc.printf("Laser 1: %f\n", reading);
+ *   i2cMux.ch(CH1); //for two channels: i2cMux.ch(CH1 | CH5);
+ *   pc.printf("Laser 2: %f\n", reading);
+ *   reading = laser2.read();
+ *       
+ *   while(1) {
+ *   }
+ * }
+ * @endcode
+ */
+
+class TCA9548 {
+    private:
+        I2C i2c;
+        uint8_t channel;
+        void i2cWrite8(uint8_t addr, char data);
+    public:
+        /** Initialize object with default i2c pins */
+        TCA9548();
+        
+        /** Initialize object with specific i2c pins
+        * 
+        * @param i2c_sda SDA pin
+        * @param i2c_scl SCL pin
+        */
+        TCA9548(PinName i2c_sda, PinName i2c_scl);
+        
+        /** Boot up the mux and change to initial channel (defaults to 0)
+        * 
+        * @param iCh Initial Channel
+        * @return 
+        *   1 if failed
+        *`  0 if successful
+        */
+        bool init(uint8_t iCh);
+        bool init();
+        
+        /** Changes the i2c channel
+        * 
+        * @param newCh New channel for mux
+        */
+        void ch(uint8_t newCh);
+};
+
+#endif
\ No newline at end of file