swig: name functions explicitly and use %extend to convert _context structs to objects
authorBrendan Le Foll <brendan.le.foll@intel.com>
Thu, 1 May 2014 14:27:34 +0000 (15:27 +0100)
committerBrendan Le Foll <brendan.le.foll@intel.com>
Thu, 1 May 2014 15:11:16 +0000 (16:11 +0100)
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
src/maa.i
src/python/pymaa.i

index aa51907..d32ae8a 100644 (file)
--- a/src/maa.i
+++ b/src/maa.i
@@ -6,8 +6,6 @@
     #include "spi.h"
 %}
 
+%rename(get_version) maa_get_version();
 %include "maa.h"
-%include "gpio.h"
-%include "pwm.h"
-%include "i2c.h"
-%include "spi.h"
+
index bbbd5a3..8cca2e8 100644 (file)
@@ -1,8 +1,6 @@
 %module(docstring="Python interface to libmaa") pymaa
 
-%rename("%(strip:[maa_])s") "";
-
-%feature("autodoc", "1");
+%feature("autodoc", "3");
 
 #ifdef DOXYGEN
 %include ../maa_doc.i
 #endif
 
 %include ../maa.i
+
+#### GPIO ####
+
+%rename(Gpio) maa_gpio_context;
+
+typedef struct {
+    /*@{*/
+    int pin; /**< the pin number, as known to the os. */
+    FILE *value_fp; /**< the file pointer to the value of the gpio */
+    /*@}*/
+} maa_gpio_context;
+
+%nodefault maa_gpio_context;
+%extend maa_gpio_context {
+  maa_gpio_context(int pin)
+  {
+    return maa_gpio_init(pin);
+  }
+  ~maa_gpio_context()
+  {
+    maa_gpio_close($self);
+  }
+  int write(int value)
+  {
+    return maa_gpio_write($self, value);
+  }
+  int dir(gpio_dir_t dir)
+  {
+    return maa_gpio_dir($self, dir);
+  }
+  int read()
+  {
+    return maa_gpio_read($self);
+  }
+  int mode(gpio_mode_t mode)
+  {
+    return maa_gpio_mode($self, mode);
+  }
+}
+
+#### i2c ####
+
+%rename(I2c) maa_i2c_context;
+
+typedef struct {
+    /*@{*/
+    int hz; /**< frequency of communication */
+    int fh; /**< the file handle to the /dev/i2c-* device */
+    int addr; /**< the address of the i2c slave */
+    maa_gpio_context gpio;
+    /*@}*/
+} maa_i2c_context;
+
+%nodefault maa_i2c_context;
+%extend maa_i2c_context {
+  maa_i2c_context()
+  {
+    return maa_i2c_init();
+  }
+  ~maa_i2c_context()
+  {
+    maa_i2c_stop($self);
+  }
+  int frequency(int hz)
+  {
+    return maa_i2c_frequency($self, hz);
+  }
+  int read(char *data, int length)
+  {
+    return maa_i2c_read($self, data, length);
+  }
+  int read()
+  {
+    return maa_i2c_read_byte($self);
+  }
+  int write(char *data, int length)
+  {
+    return maa_i2c_write($self, data, length);
+  }
+  int write(int data)
+  {
+    return maa_i2c_write_byte($self, data);
+  }
+}