I2C sensor test program, derived from testI2C program. Simple test for FXOS8700CQ, HIH6130, MAG3110, MMA8451Q, MMA8452Q, MPL3115A2, MAX44000, MAX44005, MAX44008, MAX30101 included beside simple I2C read/write from testI2C.
Dependencies: FXOS8700CQ HIH6130 IS31SE5000 MAG3110 MAX44000 MAX44005 MAX44008 MMA8451Q MMA8452Q MPL3115A2 VEML6040 VEML6075 mbed vt100 LM75B FXAS21002 MAX30101 VCNL4020 VCNL4100
Diff: dumb_i2c.cpp
- Revision:
- 0:d4bbd473a83c
- Child:
- 18:ee6f43cbfcc1
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dumb_i2c.cpp Tue Apr 26 02:38:14 2016 +0000 @@ -0,0 +1,61 @@ +#include "mbed.h" +#include "dumb_i2c.h" + +DUMB_I2C::DUMB_I2C(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr<<1) { + // activate the peripheral + freq = 100000 ; /* 100KHz */ + m_i2c.frequency(freq) ; +} + +DUMB_I2C::~DUMB_I2C() { } + +uint8_t DUMB_I2C::address(void) +{ + return( m_addr >> 1 ) ; +} + +void DUMB_I2C::frequency(uint32_t f) +{ + freq = f ; + m_i2c.frequency(freq) ; +} + +uint32_t DUMB_I2C::frequency(void) +{ + return(freq) ; +} + +int DUMB_I2C::read(int addr, uint8_t *data, int len) +{ + int result ; + result = readRegs(addr, data, len) ; + return( result ) ; +} + +int DUMB_I2C::write(int addr, uint8_t *data, int len) +{ + uint8_t *buf ; + int ack ; + buf = new uint8_t[len+1] ; + buf[0] = addr ; + for (int i = 0 ; i < len ; i++ ) { + buf[i+1] = data[i] ; + } + ack = writeRegs(buf, len+1) ; + delete buf ; + return( ack ) ; +} + +int DUMB_I2C::readRegs(int addr, uint8_t * data, int len) { + int result ; + char t[1] = {addr}; + m_i2c.write(m_addr, t, 1, true); + result = m_i2c.read(m_addr, (char *)data, len); + return( result ) ; +} + +int DUMB_I2C::writeRegs(uint8_t * data, int len) { + int ack ; + ack = m_i2c.write(m_addr, (char *)data, len); + return( ack ) ; +} \ No newline at end of file