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:
Sun Apr 28 15:08:04 2013 +0000
Revision:
7:04824382eafb
Parent:
5:8a418c89e515
Child:
13:530968937ccb
stable before perf measurements

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 5:8a418c89e515 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 5:8a418c89e515 21 *
humlet 5:8a418c89e515 22 * @note Has to be created in a thread context, i.e. within the main or some other function. A global delaration does not work
humlet 3:967dde37e712 23 */
humlet 3:967dde37e712 24 I2CMasterRtos(PinName sda, PinName scl, int freq=100000):m_drv(sda,scl,freq) {}
humlet 3:967dde37e712 25
humlet 3:967dde37e712 26 /** Set the frequency of the I2C interface
humlet 3:967dde37e712 27 *
humlet 3:967dde37e712 28 * @param hz The bus frequency in hertz
humlet 3:967dde37e712 29 */
humlet 3:967dde37e712 30 void frequency(int hz) {
humlet 3:967dde37e712 31 m_drv.frequency(hz);
humlet 3:967dde37e712 32 }
humlet 3:967dde37e712 33
humlet 3:967dde37e712 34 /** Read from an I2C slave
humlet 3:967dde37e712 35 *
humlet 3:967dde37e712 36 * Performs a complete read transaction. The bottom bit of
humlet 3:967dde37e712 37 * the address is forced to 1 to indicate a read.
humlet 3:967dde37e712 38 *
humlet 3:967dde37e712 39 * @param address 8-bit I2C slave address [ addr | 1 ]
humlet 3:967dde37e712 40 * @param data Pointer to the byte-array to read data in to
humlet 3:967dde37e712 41 * @param length Number of bytes to read
humlet 3:967dde37e712 42 * @param repeated Repeated start, true - don't send stop at end
humlet 3:967dde37e712 43 *
humlet 3:967dde37e712 44 * @returns
humlet 3:967dde37e712 45 * 0 on success (ack),
humlet 3:967dde37e712 46 * non-0 on failure (nack)
humlet 3:967dde37e712 47 */
humlet 3:967dde37e712 48 int read(int address, char *data, int length, bool repeated = false) {
humlet 3:967dde37e712 49 return m_drv.readMaster( address, data, length, repeated);
humlet 3:967dde37e712 50 }
humlet 3:967dde37e712 51
humlet 3:967dde37e712 52 /** Read from a given I2C slave register
humlet 3:967dde37e712 53 *
humlet 3:967dde37e712 54 * Performs a complete write-register-read-data-transaction. The bottom bit of
humlet 3:967dde37e712 55 * the address is forced to 1 to indicate a read.
humlet 3:967dde37e712 56 *
humlet 3:967dde37e712 57 * @param address 8-bit I2C slave address [ addr | 1 ]
humlet 3:967dde37e712 58 * @param _register 8-bit regster address
humlet 3:967dde37e712 59 * @param data Pointer to the byte-array to read data in to
humlet 3:967dde37e712 60 * @param length Number of bytes to read
humlet 3:967dde37e712 61 * @param repeated Repeated start, true - don't send stop at end
humlet 3:967dde37e712 62 *
humlet 3:967dde37e712 63 * @returns
humlet 3:967dde37e712 64 * 0 on success (ack),
humlet 3:967dde37e712 65 * non-0 on failure (nack)
humlet 3:967dde37e712 66 */
humlet 7:04824382eafb 67 int read(int address, uint8_t _register, char* data, int length, bool repeated = false) {
humlet 3:967dde37e712 68 return m_drv.readMaster( address, _register, data, length, repeated);
humlet 3:967dde37e712 69 }
humlet 3:967dde37e712 70
humlet 3:967dde37e712 71 /** Read a single byte from the I2C bus
humlet 3:967dde37e712 72 *
humlet 3:967dde37e712 73 * @param ack indicates if the byte is to be acknowledged (1 = acknowledge)
humlet 3:967dde37e712 74 *
humlet 3:967dde37e712 75 * @returns
humlet 3:967dde37e712 76 * the byte read
humlet 3:967dde37e712 77 */
humlet 3:967dde37e712 78 int read(int ack) {
humlet 3:967dde37e712 79 return m_drv.readMaster(ack);
humlet 3:967dde37e712 80 }
humlet 3:967dde37e712 81
humlet 3:967dde37e712 82 /** Write to an I2C slave
humlet 3:967dde37e712 83 *
humlet 3:967dde37e712 84 * Performs a complete write transaction. The bottom bit of
humlet 3:967dde37e712 85 * the address is forced to 0 to indicate a write.
humlet 3:967dde37e712 86 *
humlet 3:967dde37e712 87 * @param address 8-bit I2C slave address [ addr | 0 ]
humlet 3:967dde37e712 88 * @param data Pointer to the byte-array data to send
humlet 3:967dde37e712 89 * @param length Number of bytes to send
humlet 3:967dde37e712 90 * @param repeated Repeated start, true - do not send stop at end
humlet 3:967dde37e712 91 *
humlet 3:967dde37e712 92 * @returns
humlet 3:967dde37e712 93 * 0 on success (ack),
humlet 3:967dde37e712 94 * non-0 on failure (nack)
humlet 3:967dde37e712 95 */
humlet 3:967dde37e712 96 int write(int address, const char *data, int length, bool repeated = false) {
humlet 3:967dde37e712 97 return m_drv.writeMaster(address, data, length, repeated);
humlet 3:967dde37e712 98 }
humlet 3:967dde37e712 99
humlet 3:967dde37e712 100 /** Write single byte out on the I2C bus
humlet 3:967dde37e712 101 *
humlet 3:967dde37e712 102 * @param data data to write out on bus
humlet 3:967dde37e712 103 *
humlet 3:967dde37e712 104 * @returns
humlet 3:967dde37e712 105 * '1' if an ACK was received,
humlet 3:967dde37e712 106 * '0' otherwise
humlet 3:967dde37e712 107 */
humlet 3:967dde37e712 108 int write(int data) {
humlet 3:967dde37e712 109 return m_drv.writeMaster(data);
humlet 3:967dde37e712 110 }
humlet 3:967dde37e712 111
humlet 3:967dde37e712 112 /** Creates a start condition on the I2C bus
humlet 3:967dde37e712 113 */
humlet 3:967dde37e712 114
humlet 3:967dde37e712 115 void startMaster(void) {
humlet 3:967dde37e712 116 m_drv.startMaster();
humlet 3:967dde37e712 117 }
humlet 3:967dde37e712 118
humlet 3:967dde37e712 119 /** Creates a stop condition on the I2C bus
humlet 3:967dde37e712 120 */
humlet 3:967dde37e712 121 void stop(void) {
humlet 3:967dde37e712 122 m_drv.stopMaster();
humlet 3:967dde37e712 123 }
humlet 3:967dde37e712 124
humlet 3:967dde37e712 125 };
humlet 3:967dde37e712 126 }
humlet 3:967dde37e712 127
humlet 3:967dde37e712 128
humlet 3:967dde37e712 129 #endif