From ed0124cc70175ae99139cd5975c126a3e286d82c Mon Sep 17 00:00:00 2001 From: Henry Bruce Date: Tue, 5 Jan 2016 12:00:01 -0800 Subject: [PATCH] mraa_adv_func: Updated signature of gpio_init_internal_replace() mraa_adv_func_t->gpio_init_internal_replace() now has mraa_gpio_context parameter so that override function can access both physical and logical pin numbers. Signed-off-by: Henry Bruce Signed-off-by: Brendan Le Foll --- include/mraa_adv_func.h | 2 +- src/gpio/gpio.c | 5 +++-- src/usb/ftdi_ft4222.c | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/include/mraa_adv_func.h b/include/mraa_adv_func.h index 2bd0ffd..710aa21 100644 --- a/include/mraa_adv_func.h +++ b/include/mraa_adv_func.h @@ -32,7 +32,7 @@ #define IS_FUNC_DEFINED(dev, func) (dev != NULL && dev->advance_func != NULL && dev->advance_func->func != NULL) typedef struct { - mraa_result_t (*gpio_init_internal_replace) (int pin); + mraa_result_t (*gpio_init_internal_replace) (mraa_gpio_context dev, int pin); mraa_result_t (*gpio_init_pre) (int pin); mraa_result_t (*gpio_init_post) (mraa_gpio_context dev); diff --git a/src/gpio/gpio.c b/src/gpio/gpio.c index c354aac..411a02a 100644 --- a/src/gpio/gpio.c +++ b/src/gpio/gpio.c @@ -72,7 +72,7 @@ mraa_gpio_init_internal(mraa_adv_func_t* func_table, int pin) dev->pin = pin; if (IS_FUNC_DEFINED(dev, gpio_init_internal_replace)) { - status = dev->advance_func->gpio_init_internal_replace(pin); + status = dev->advance_func->gpio_init_internal_replace(dev, pin); if (status == MRAA_SUCCESS) return dev; else @@ -165,7 +165,8 @@ mraa_gpio_init(int pin) syslog(LOG_CRIT, "gpio: mraa_gpio_init_raw(%d) returned error", pin); return NULL; } - r->phy_pin = pin; + if (r->phy_pin == -1) + r->phy_pin = pin; if (IS_FUNC_DEFINED(r, gpio_init_post)) { mraa_result_t ret = r->advance_func->gpio_init_post(r); diff --git a/src/usb/ftdi_ft4222.c b/src/usb/ftdi_ft4222.c index b88294a..91e6e8d 100644 --- a/src/usb/ftdi_ft4222.c +++ b/src/usb/ftdi_ft4222.c @@ -400,7 +400,7 @@ mraa_ftdi_ft4222_i2c_stop(mraa_i2c_context dev) /******************* GPIO functions *******************/ static mraa_result_t -mraa_ftdi_ft4222_gpio_init_internal_replace(int pin) +mraa_ftdi_ft4222_gpio_init_internal_replace(mraa_gpio_context dev, int pin) { if ((pin - numI2cGpioExpanderPins) == 0 || (pin - numI2cGpioExpanderPins) == 1) { syslog(LOG_NOTICE, "Closing I2C interface to enable GPIO%d\n", pin);