diff --git a/include/mraa_adv_func.h b/include/mraa_adv_func.h index 78962c5..cdc625d 100644 --- a/include/mraa_adv_func.h +++ b/include/mraa_adv_func.h @@ -32,6 +32,8 @@ typedef struct { mraa_result_t (*gpio_init_pre) (int pin); mraa_result_t (*gpio_init_post) (mraa_gpio_context dev); + mraa_result_t (*gpio_close_pre) (mraa_gpio_context dev); + mraa_result_t (*gpio_mode_replace) (mraa_gpio_context dev, gpio_mode_t mode); mraa_result_t (*gpio_mode_pre) (mraa_gpio_context dev, gpio_mode_t mode); mraa_result_t (*gpio_mode_post) (mraa_gpio_context dev, gpio_mode_t mode); diff --git a/src/gpio/gpio.c b/src/gpio/gpio.c index 7a570db..721a5ca 100644 --- a/src/gpio/gpio.c +++ b/src/gpio/gpio.c @@ -539,12 +539,18 @@ mraa_gpio_unexport(mraa_gpio_context dev) mraa_result_t mraa_gpio_close(mraa_gpio_context dev) { + mraa_result_t result = MRAA_SUCCESS; + + if (advance_func->gpio_close_pre != NULL) { + result = advance_func->gpio_close_pre(dev); + } + if (dev->value_fp != -1) { close(dev->value_fp); } mraa_gpio_unexport(dev); free(dev); - return MRAA_SUCCESS; + return result; } mraa_result_t