From 09cec0931bc7b08510c9d55d5df39768a9164053 Mon Sep 17 00:00:00 2001 From: Brendan Le Foll Date: Fri, 2 May 2014 16:31:16 +0100 Subject: [PATCH] swig: add unexport() calls to be used by destructors in object api Signed-off-by: Brendan Le Foll --- api/gpio.h | 10 +++++++++- api/pwm.h | 8 ++++++++ src/gpio/gpio.c | 16 +++++++++++++--- src/maa.i | 7 ++----- src/pwm/pwm.c | 11 +++++++++-- 5 files changed, 41 insertions(+), 11 deletions(-) diff --git a/api/gpio.h b/api/gpio.h index 1be270a..6a141b6 100644 --- a/api/gpio.h +++ b/api/gpio.h @@ -101,7 +101,7 @@ maa_result_t maa_gpio_mode(maa_gpio_context *dev, gpio_mode_t mode); maa_result_t maa_gpio_dir(maa_gpio_context *dev, gpio_dir_t dir); /** Close the GPIO context - * - Will free the memory for the context. + * - Will free the memory for the context and unexport the GPIO * * @param dev the GPIO context * @@ -109,6 +109,14 @@ maa_result_t maa_gpio_dir(maa_gpio_context *dev, gpio_dir_t dir); */ maa_result_t maa_gpio_close(maa_gpio_context *dev); +/** Unexport the GPIO context (maa_gpio_close() will call this function) + * + * @param dev The GPIO context. + * + * @return maa result type. + */ +maa_result_t maa_gpio_unexport(maa_gpio_context *dev); + /** Read the GPIO value. * * @param dev The GPIO context. diff --git a/api/pwm.h b/api/pwm.h index a0077e3..2b64f89 100644 --- a/api/pwm.h +++ b/api/pwm.h @@ -151,6 +151,14 @@ maa_result_t maa_pwm_pulsewidth_us(maa_pwm_context* pwm, int us); */ maa_result_t maa_pwm_enable(maa_pwm_context* pwm, int enable); +/** Unexport the PWM context (maa_pwm_close() will call this function) + * + * @param dev The PWM context/ + * + * @return maa result type. + */ +maa_result_t maa_pwm_unexport(maa_pwm_context* pwm); + /** Close and unexport the PWM pin. * * @param pwm The PWM context to use. diff --git a/src/gpio/gpio.c b/src/gpio/gpio.c index 0561570..ecd179e 100644 --- a/src/gpio/gpio.c +++ b/src/gpio/gpio.c @@ -158,16 +158,20 @@ maa_gpio_write(maa_gpio_context *dev, int value) if (dev->value_fp == NULL) { maa_gpio_get_valfp(dev); } - fseek(dev->value_fp, SEEK_SET, 0); + if (fseek(dev->value_fp, SEEK_SET, 0) != 0) { + return MAA_ERROR_INVALID_RESOURCE; + } fprintf(dev->value_fp, "%d", value); - fseek(dev->value_fp, SEEK_SET, 0); + if (fseek(dev->value_fp, SEEK_SET, 0) != 0) { + return MAA_ERROR_INVALID_RESOURCE; + } if (ferror(dev->value_fp) != 0) return MAA_ERROR_INVALID_RESOURCE; return MAA_SUCCESS; } maa_result_t -maa_gpio_close(maa_gpio_context *dev) +maa_gpio_unexport(maa_gpio_context *dev) { FILE *unexport_f; @@ -179,6 +183,12 @@ maa_gpio_close(maa_gpio_context *dev) fclose(unexport_f); if (ferror(dev->value_fp) != 0) return MAA_ERROR_INVALID_RESOURCE; +} + +maa_result_t +maa_gpio_close(maa_gpio_context *dev) +{ + maa_gpio_unexport(dev); free(dev); return MAA_SUCCESS; } diff --git a/src/maa.i b/src/maa.i index 240358a..eb2be22 100644 --- a/src/maa.i +++ b/src/maa.i @@ -55,7 +55,7 @@ typedef struct { } ~maa_gpio_context() { - maa_gpio_close($self); + maa_gpio_unexport($self); } %feature("autodoc") write " Write a value to a GPIO pin @@ -118,7 +118,6 @@ typedef struct { } ~maa_i2c_context() { - maa_i2c_stop($self); } int frequency(int hz) { @@ -167,7 +166,7 @@ typedef struct { } ~maa_pwm_context() { - maa_pwm_close($self); + maa_pwm_unexport($self); } int write(float percentage) { @@ -226,7 +225,6 @@ typedef struct { } ~maa_spi_context() { - maa_spi_stop($self); } int mode(unsigned short mode) { @@ -260,7 +258,6 @@ typedef struct { } ~maa_aio_context() { - maa_aio_close($self); } unsigned int read() { diff --git a/src/pwm/pwm.c b/src/pwm/pwm.c index a0bb806..6c31594 100644 --- a/src/pwm/pwm.c +++ b/src/pwm/pwm.c @@ -205,8 +205,9 @@ maa_pwm_enable(maa_pwm_context* dev, int enable) } maa_result_t -maa_pwm_close(maa_pwm_context* dev) +maa_pwm_unexport(maa_pwm_context* dev) { + // disable pwm before unexporting maa_pwm_enable(dev, 0); FILE *unexport_f; char buffer[64]; @@ -218,8 +219,14 @@ maa_pwm_close(maa_pwm_context* dev) } fprintf(unexport_f, "%d", dev->pin); fclose(unexport_f); - free(dev); if (ferror(unexport_f) != 0) return MAA_ERROR_INVALID_RESOURCE; +} + +maa_result_t +maa_pwm_close(maa_pwm_context* dev) +{ + maa_pwm_unexport(dev); + free(dev); return MAA_SUCCESS; } -- 2.7.4