Browse Source

HAL_Linux: cope with different I2C headers for data

master
Andrew Tridgell 11 years ago
parent
commit
1bf0c4c67d
  1. 11
      libraries/AP_HAL_Linux/I2CDriver.cpp

11
libraries/AP_HAL_Linux/I2CDriver.cpp

@ -13,6 +13,9 @@ @@ -13,6 +13,9 @@
#include <linux/i2c-dev.h>
#ifndef I2C_SMBUS_BLOCK_MAX
#include <linux/i2c.h>
#define I2C_DATA_TYPE __u8
#else
#define I2C_DATA_TYPE char
#endif
using namespace Linux;
@ -142,13 +145,13 @@ uint8_t LinuxI2CDriver::readRegisters(uint8_t addr, uint8_t reg, @@ -142,13 +145,13 @@ uint8_t LinuxI2CDriver::readRegisters(uint8_t addr, uint8_t reg,
addr : addr,
flags : 0,
len : 1,
buf : (char *)&reg
buf : (I2C_DATA_TYPE *)&reg
},
{
addr : addr,
flags : I2C_M_RD,
len : len,
buf : (char *)data,
buf : (I2C_DATA_TYPE *)data,
}
};
struct i2c_rdwr_ioctl_data i2c_data = {
@ -179,11 +182,11 @@ uint8_t LinuxI2CDriver::readRegistersMultiple(uint8_t addr, uint8_t reg, @@ -179,11 +182,11 @@ uint8_t LinuxI2CDriver::readRegistersMultiple(uint8_t addr, uint8_t reg,
msgs[i*2].addr = addr;
msgs[i*2].flags = 0;
msgs[i*2].len = 1;
msgs[i*2].buf = (char *)&reg;
msgs[i*2].buf = &reg;
msgs[i*2+1].addr = addr;
msgs[i*2+1].flags = I2C_M_RD;
msgs[i*2+1].len = len;
msgs[i*2+1].buf = (char *)data;
msgs[i*2+1].buf = (I2C_DATA_TYPE *)data;
data += len;
};
if (ioctl(_fd, I2C_RDWR, &i2c_data) == -1) {

Loading…
Cancel
Save