A compilation of some hardware sensors and their shared programming interfaces.
I2CSensor.cpp
- Committer:
- mgottscho
- Date:
- 2014-03-19
- Revision:
- 1:15396cab58d1
- Parent:
- 0:8d34cc2ff388
File content as of revision 1:15396cab58d1:
/* I2CSensor.cpp * Tested with mbed board: FRDM-KL46Z * Author: Mark Gottscho * mgottscho@ucla.edu */ #include "mbed.h" #include "I2CSensor.h" using namespace std; ///////////////////// Public methods ///////////////////////////// I2CSensor::I2CSensor(PinName sda, PinName scl, int i2c_addr) : __sda_pin(sda), __scl_pin(scl), __i2c_addr(i2c_addr), __who_am_i(0), __i2c(sda, scl) { } I2CSensor::~I2CSensor() { } PinName I2CSensor::getSDAPin() { return __sda_pin; } PinName I2CSensor::getSCLPin() { return __scl_pin; } uint8_t I2CSensor::getDeviceI2CAddress() { return __i2c_addr; } uint8_t I2CSensor::getRegister(const uint8_t reg_addr) { uint8_t data; __readReg(reg_addr, &data, 1); return data; } uint16_t I2CSensor::getRegister16b(const uint8_t reg_addr) { uint8_t payload[2]; __readReg(reg_addr, payload, 2); uint16_t data = (payload[0] << 8) | (payload[1]); return data; } void I2CSensor::setRegister(const uint8_t reg_addr, const uint8_t data) { uint8_t payload[2] = {reg_addr, data}; __writeReg(payload, 2); } void I2CSensor::setRegister16b(const uint8_t reg_addr, const uint16_t data) { uint8_t dataMSB = (data >> 8) & 0x00FF; uint8_t dataLSB = data & 0x00FF; uint8_t payload[3] = {reg_addr, dataMSB, dataLSB}; __writeReg(payload, 3); } ///////////////////// Protected methods ///////////////////////////// int I2CSensor::__readReg(const uint8_t reg_addr, uint8_t *data, int len) { int retval = 0; __disable_irq(); retval = __i2c.write(__i2c_addr, (char *) ®_addr, 1, true); if (retval != 0) { __enable_irq(); return retval; } retval = __i2c.read(__i2c_addr, (char *) data, len); __enable_irq(); return retval; } int I2CSensor::__writeReg(const uint8_t *data, int total_len) { int retval = 0; __disable_irq(); retval = __i2c.write(__i2c_addr, (char *) data, total_len); __enable_irq(); return retval; }