From 7eb9fa64a91b15f7b77f87ac1a70355f656023ad Mon Sep 17 00:00:00 2001 From: Brendan Le Foll Date: Fri, 11 Apr 2014 15:46:27 +0100 Subject: [PATCH] i2cslave: first possibly working implementation of i2cslave api Signed-off-by: Brendan Le Foll --- api/i2cslave.h | 1 + api/maa.h | 1 + src/CMakeLists.txt | 1 + src/i2c/i2cslave.cxx | 11 +++++++++-- src/maa.i | 1 + 5 files changed, 13 insertions(+), 2 deletions(-) diff --git a/api/i2cslave.h b/api/i2cslave.h index 0b62a7e..6674e5c 100644 --- a/api/i2cslave.h +++ b/api/i2cslave.h @@ -144,6 +144,7 @@ public: protected: int _hz; int i2c_handle; + int _addr; }; } diff --git a/api/maa.h b/api/maa.h index c4883da..824841e 100644 --- a/api/maa.h +++ b/api/maa.h @@ -25,6 +25,7 @@ #pragma once #include "i2c.h" +#include "i2cslave.h" #include "gpio.h" #define MAA_LIBRARY_VERSION 1 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b9cac45..f2babf1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -6,6 +6,7 @@ include_directories( set (maa_LIB_SRCS ${PROJECT_SOURCE_DIR}/src/maa.cxx ${PROJECT_SOURCE_DIR}/src/i2c/i2c.cxx + ${PROJECT_SOURCE_DIR}/src/i2c/i2cslave.cxx ${PROJECT_SOURCE_DIR}/src/i2c/smbus.c ${PROJECT_SOURCE_DIR}/src/gpio/gpio.c ) diff --git a/src/i2c/i2cslave.cxx b/src/i2c/i2cslave.cxx index 3c40f6a..567737c 100644 --- a/src/i2c/i2cslave.cxx +++ b/src/i2c/i2cslave.cxx @@ -47,7 +47,10 @@ I2CSlave::frequency(int hz) int I2CSlave::read(char *data, int length) { - return 0; + if (this->read(data, length) == length) { + return length; + } + return -1; } int @@ -81,8 +84,12 @@ I2CSlave::write(int data) } void -I2CSlave::address(int address) +I2CSlave::address(int addr) { + _addr = addr; + if (ioctl(i2c_handle, I2C_SLAVE_FORCE, addr) < 0) { + fprintf(stderr, "Failed to set slave address %d\n", addr); + } } void diff --git a/src/maa.i b/src/maa.i index 3482c6c..ec3f378 100644 --- a/src/maa.i +++ b/src/maa.i @@ -4,4 +4,5 @@ %include "maa.h" %include "i2c.h" +%include "i2cslave.h" %include "gpio.h"