Private
Public Access
2
0

gpio.hpp: Add C++ wrapper around Gpio

* maa_gpio_context bcomes an opaque pointer
* C++ wrapper class Gpio created
* swig now uses C++ wrapper Gpio to generate API

Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
This commit is contained in:
Brendan Le Foll
2014-05-16 11:56:06 +01:00
parent f0763844fa
commit 058084cd88
9 changed files with 136 additions and 152 deletions

109
src/maa.i
View File

@@ -1,6 +1,6 @@
%{
#include "maa.h"
#include "gpio.h"
#include "gpio.hpp"
#include "pwm.hpp"
#include "i2c.hpp"
#include "spi.h"
@@ -17,112 +17,7 @@ const char * maa_get_version();
#### GPIO ####
typedef enum {
MAA_GPIO_STRONG = 0, /**< Default. Strong high and low */
MAA_GPIO_PULLUP = 1, /**< Resistive High */
MAA_GPIO_PULLDOWN = 2, /**< Resistive Low */
MAA_GPIO_HIZ = 3 /**< High Z State */
} gpio_mode_t;
typedef enum {
MAA_GPIO_OUT = 0, /**< Output. A Mode can also be set */
MAA_GPIO_IN = 1 /**< Input. */
} gpio_dir_t;
%nodefault maa_gpio_context;
%rename(Gpio) maa_gpio_context;
%ignore value_fp;
%feature("autodoc") maa_gpio_context "
Create a Gpio object and export it. Depending on your board the correct GPIO
value will be used. If raw is true then the pin that will be initialised will
be the hardcoded pin value in the kernel. Please see your board IO
documentation to understand exactly what will happen.
Parameters:
* pin: pin number read from the board, i.e IO3 is 3
* raw: set to True to use real pin value from the kernel";
typedef struct {
/*@{*/
int pin; /**< the pin number, as known to the os. */
FILE *value_fp; /**< the file pointer to the value of the gpio */
#if defined(SWIGPYTHON)
PyObject *isr; /**< the interupt service request */
#endif
pthread_t thread_id; /**< the isr handler thread id */
int isr_value_fp; /**< the isr file pointer on the value */
/*@}*/
} maa_gpio_context;
%typemap(check) PyObject *pyfunc {
if (!PyCallable_Check($1))
SWIG_exception(SWIG_TypeError,"Expected function.");
}
%extend maa_gpio_context {
maa_gpio_context(int pin, int raw=0)
{
if (raw)
return maa_gpio_init_raw(pin);
return maa_gpio_init(pin);
}
~maa_gpio_context()
{
maa_gpio_unexport($self);
}
%feature("autodoc") write "
Write a value to a GPIO pin
Parameters:
* value: value to write to GPIO";
int write(int value)
{
return maa_gpio_write($self, value);
}
%feature("autodoc") dir "
Set the gpio direction
Parameters:
* dir: GPIO direction";
int dir(gpio_dir_t dir)
{
return maa_gpio_dir($self, dir);
}
%feature("autodoc") read "
Read the value of a GPIO
Returns:
* value: GPIO value";
int read()
{
return maa_gpio_read($self);
}
%feature("autodoc") mode "
Set the GPIO mode
Parameters:
* mode: GPIO mode to set";
int mode(gpio_mode_t mode)
{
return maa_gpio_mode($self, mode);
}
#if defined(SWIGPYTHON)
//set python method as the isr function
int set_isr(PyObject *pyfunc)
{
Py_INCREF(pyfunc);
// do a nasty cast to get away from the warnings
maa_gpio_isr(self, MAA_GPIO_EDGE_BOTH, (void (*) ()) pyfunc);
return 0;
}
#else
%ignore maa_gpio_isr;
#endif
int isr_exit()
{
maa_gpio_isr_exit(self);
}
}
%include "gpio.hpp"
#### i2c ####