From 46d8ca718e9a8be5fe727f003f66ce17420d44af Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Wed, 29 Dec 2021 03:45:12 -0600 Subject: [PATCH] Fix pure i2c block read in Linux --- i2c_smbus/i2c_smbus_linux.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/i2c_smbus/i2c_smbus_linux.cpp b/i2c_smbus/i2c_smbus_linux.cpp index a020b078..96b6695c 100644 --- a/i2c_smbus/i2c_smbus_linux.cpp +++ b/i2c_smbus/i2c_smbus_linux.cpp @@ -34,6 +34,7 @@ s32 i2c_smbus_linux::i2c_xfer(u8 addr, char read_write, int* size, u8* data) { i2c_rdwr_ioctl_data rdwr; i2c_msg msg; + s32 ret_val; msg.addr = addr; msg.flags = read_write; @@ -44,8 +45,18 @@ s32 i2c_smbus_linux::i2c_xfer(u8 addr, char read_write, int* size, u8* data) rdwr.msgs = &msg; rdwr.nmsgs = 1; - ioctl(handle, I2C_SLAVE, addr); - return ioctl(handle, I2C_RDWR, &rdwr); + ret_val = ioctl(handle, I2C_RDWR, &rdwr); + + /*-------------------------------------------------*\ + | If operation was a read, copy read data and size | + \*-------------------------------------------------*/ + if(read_write == I2C_SMBUS_READ) + { + *size = msg.len; + memcpy(data, &msg.buf, *size); + } + + return ret_val; } #include "Detector.h"