i2cslave: first possibly working implementation of i2cslave api
authorBrendan Le Foll <brendan.le.foll@intel.com>
Fri, 11 Apr 2014 14:46:27 +0000 (15:46 +0100)
committerBrendan Le Foll <brendan.le.foll@intel.com>
Fri, 11 Apr 2014 14:46:27 +0000 (15:46 +0100)
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
api/i2cslave.h
api/maa.h
src/CMakeLists.txt
src/i2c/i2cslave.cxx
src/maa.i

index 0b62a7e..6674e5c 100644 (file)
@@ -144,6 +144,7 @@ public:
 protected:\r
     int _hz;\r
     int i2c_handle;\r
+    int _addr;\r
 };\r
 \r
 }\r
index c4883da..824841e 100644 (file)
--- 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
index b9cac45..f2babf1 100644 (file)
@@ -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
 )
index 3c40f6a..567737c 100644 (file)
@@ -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
index 3482c6c..ec3f378 100644 (file)
--- a/src/maa.i
+++ b/src/maa.i
@@ -4,4 +4,5 @@
 
 %include "maa.h"
 %include "i2c.h"
+%include "i2cslave.h"
 %include "gpio.h"