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

Committer:
humlet
Date:
Fri Apr 19 21:33:29 2013 +0000
Revision:
3:967dde37e712
Child:
5:8a418c89e515
refactored, compiles and crashes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
humlet 3:967dde37e712 1 #ifndef I2CMASTERRTOS_H
humlet 3:967dde37e712 2 #define I2CMASTERRTOS_H
humlet 3:967dde37e712 3
humlet 3:967dde37e712 4 #include "I2CDriver.h"
humlet 3:967dde37e712 5
humlet 3:967dde37e712 6 namespace mbed
humlet 3:967dde37e712 7 {
humlet 3:967dde37e712 8
humlet 3:967dde37e712 9 /// I2C master interface to the RTOS-I2CDriver.
humlet 3:967dde37e712 10 /// The interface is compatible to the original mbed I2C class.
humlet 3:967dde37e712 11 /// Provides an additonal read from register function.
humlet 3:967dde37e712 12 class I2CMasterRtos
humlet 3:967dde37e712 13 {
humlet 3:967dde37e712 14 I2CDriver m_drv;
humlet 3:967dde37e712 15
humlet 3:967dde37e712 16 public:
humlet 3:967dde37e712 17 /** Create an I2C Master interface, connected to the specified pins
humlet 3:967dde37e712 18 *
humlet 3:967dde37e712 19 * @param sda I2C data line pin
humlet 3:967dde37e712 20 * @param scl I2C clock line pin
humlet 3:967dde37e712 21 */
humlet 3:967dde37e712 22 I2CMasterRtos(PinName sda, PinName scl, int freq=100000):m_drv(sda,scl,freq) {}
humlet 3:967dde37e712 23
humlet 3:967dde37e712 24 /** Set the frequency of the I2C interface
humlet 3:967dde37e712 25 *
humlet 3:967dde37e712 26 * @param hz The bus frequency in hertz
humlet 3:967dde37e712 27 */
humlet 3:967dde37e712 28 void frequency(int hz) {
humlet 3:967dde37e712 29 m_drv.frequency(hz);
humlet 3:967dde37e712 30 }
humlet 3:967dde37e712 31
humlet 3:967dde37e712 32 /** Read from an I2C slave
humlet 3:967dde37e712 33 *
humlet 3:967dde37e712 34 * Performs a complete read transaction. The bottom bit of
humlet 3:967dde37e712 35 * the address is forced to 1 to indicate a read.
humlet 3:967dde37e712 36 *
humlet 3:967dde37e712 37 * @param address 8-bit I2C slave address [ addr | 1 ]
humlet 3:967dde37e712 38 * @param data Pointer to the byte-array to read data in to
humlet 3:967dde37e712 39 * @param length Number of bytes to read
humlet 3:967dde37e712 40 * @param repeated Repeated start, true - don't send stop at end
humlet 3:967dde37e712 41 *
humlet 3:967dde37e712 42 * @returns
humlet 3:967dde37e712 43 * 0 on success (ack),
humlet 3:967dde37e712 44 * non-0 on failure (nack)
humlet 3:967dde37e712 45 */
humlet 3:967dde37e712 46 int read(int address, char *data, int length, bool repeated = false) {
humlet 3:967dde37e712 47 return m_drv.readMaster( address, data, length, repeated);
humlet 3:967dde37e712 48 }
humlet 3:967dde37e712 49
humlet 3:967dde37e712 50 /** Read from a given I2C slave register
humlet 3:967dde37e712 51 *
humlet 3:967dde37e712 52 * Performs a complete write-register-read-data-transaction. The bottom bit of
humlet 3:967dde37e712 53 * the address is forced to 1 to indicate a read.
humlet 3:967dde37e712 54 *
humlet 3:967dde37e712 55 * @param address 8-bit I2C slave address [ addr | 1 ]
humlet 3:967dde37e712 56 * @param _register 8-bit regster address
humlet 3:967dde37e712 57 * @param data Pointer to the byte-array to read data in to
humlet 3:967dde37e712 58 * @param length Number of bytes to read
humlet 3:967dde37e712 59 * @param repeated Repeated start, true - don't send stop at end
humlet 3:967dde37e712 60 *
humlet 3:967dde37e712 61 * @returns
humlet 3:967dde37e712 62 * 0 on success (ack),
humlet 3:967dde37e712 63 * non-0 on failure (nack)
humlet 3:967dde37e712 64 */
humlet 3:967dde37e712 65 int read(int address, uint8_t _register, char *data, int length, bool repeated = false) {
humlet 3:967dde37e712 66 return m_drv.readMaster( address, _register, data, length, repeated);
humlet 3:967dde37e712 67 }
humlet 3:967dde37e712 68
humlet 3:967dde37e712 69 /** Read a single byte from the I2C bus
humlet 3:967dde37e712 70 *
humlet 3:967dde37e712 71 * @param ack indicates if the byte is to be acknowledged (1 = acknowledge)
humlet 3:967dde37e712 72 *
humlet 3:967dde37e712 73 * @returns
humlet 3:967dde37e712 74 * the byte read
humlet 3:967dde37e712 75 */
humlet 3:967dde37e712 76 int read(int ack) {
humlet 3:967dde37e712 77 return m_drv.readMaster(ack);
humlet 3:967dde37e712 78 }
humlet 3:967dde37e712 79
humlet 3:967dde37e712 80 /** Write to an I2C slave
humlet 3:967dde37e712 81 *
humlet 3:967dde37e712 82 * Performs a complete write transaction. The bottom bit of
humlet 3:967dde37e712 83 * the address is forced to 0 to indicate a write.
humlet 3:967dde37e712 84 *
humlet 3:967dde37e712 85 * @param address 8-bit I2C slave address [ addr | 0 ]
humlet 3:967dde37e712 86 * @param data Pointer to the byte-array data to send
humlet 3:967dde37e712 87 * @param length Number of bytes to send
humlet 3:967dde37e712 88 * @param repeated Repeated start, true - do not send stop at end
humlet 3:967dde37e712 89 *
humlet 3:967dde37e712 90 * @returns
humlet 3:967dde37e712 91 * 0 on success (ack),
humlet 3:967dde37e712 92 * non-0 on failure (nack)
humlet 3:967dde37e712 93 */
humlet 3:967dde37e712 94 int write(int address, const char *data, int length, bool repeated = false) {
humlet 3:967dde37e712 95 return m_drv.writeMaster(address, data, length, repeated);
humlet 3:967dde37e712 96 }
humlet 3:967dde37e712 97
humlet 3:967dde37e712 98 /** Write single byte out on the I2C bus
humlet 3:967dde37e712 99 *
humlet 3:967dde37e712 100 * @param data data to write out on bus
humlet 3:967dde37e712 101 *
humlet 3:967dde37e712 102 * @returns
humlet 3:967dde37e712 103 * '1' if an ACK was received,
humlet 3:967dde37e712 104 * '0' otherwise
humlet 3:967dde37e712 105 */
humlet 3:967dde37e712 106 int write(int data) {
humlet 3:967dde37e712 107 return m_drv.writeMaster(data);
humlet 3:967dde37e712 108 }
humlet 3:967dde37e712 109
humlet 3:967dde37e712 110 /** Creates a start condition on the I2C bus
humlet 3:967dde37e712 111 */
humlet 3:967dde37e712 112
humlet 3:967dde37e712 113 void startMaster(void) {
humlet 3:967dde37e712 114 m_drv.startMaster();
humlet 3:967dde37e712 115 }
humlet 3:967dde37e712 116
humlet 3:967dde37e712 117 /** Creates a stop condition on the I2C bus
humlet 3:967dde37e712 118 */
humlet 3:967dde37e712 119 void stop(void) {
humlet 3:967dde37e712 120 m_drv.stopMaster();
humlet 3:967dde37e712 121 }
humlet 3:967dde37e712 122
humlet 3:967dde37e712 123 };
humlet 3:967dde37e712 124 }
humlet 3:967dde37e712 125
humlet 3:967dde37e712 126
humlet 3:967dde37e712 127 #endif