From: Thomas Ingleby Date: Tue, 29 Apr 2014 15:55:54 +0000 (+0100) Subject: gpio: Add support for setting GPIO ouput drive. X-Git-Tag: v0.2.1~6^2~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0c0633e724a80822626232eaaac99665b48e9657;p=contrib%2Fmraa.git gpio: Add support for setting GPIO ouput drive. *Supports all exposed to sysfs Signed-off-by: Thomas Ingleby --- diff --git a/src/gpio/gpio.c b/src/gpio/gpio.c index 65b9bb9..1a94362 100644 --- a/src/gpio/gpio.c +++ b/src/gpio/gpio.c @@ -45,7 +45,7 @@ maa_gpio_context* maa_gpio_init(int pin) { //TODO - return NULL; + return maa_gpio_init_raw(pin); } maa_gpio_context* @@ -68,7 +68,38 @@ maa_gpio_init_raw(int pin) maa_result_t maa_gpio_mode(maa_gpio_context *dev, gpio_mode_t mode) { - return MAA_ERROR_FEATURE_NOT_IMPLEMENTED; + if (dev->value_fp != NULL) { + dev->value_fp = NULL; + } + char filepath[64]; + snprintf(filepath, 64, "/sys/class/gpio/gpio%d/drive", dev->pin); + + FILE *drive; + if ((drive = fopen(filepath, "w")) == NULL) { + fprintf(stderr, "Failed to open drive for writing!\n"); + return MAA_ERROR_INVALID_RESOURCE; + } + switch(mode) { + case MAA_GPIO_STRONG: + fprintf(drive, "strong"); + break; + case MAA_GPIO_PULLUP: + fprintf(drive, "pullup"); + break; + case MAA_GPIO_PULLDOWN: + fprintf(drive, "pulldown"); + break; + case MAA_GPIO_HIZ: + fprintf(drive, "hiz"); + break; + default: + fclose(drive); + return MAA_ERROR_FEATURE_NOT_IMPLEMENTED; + break; + } + fclose(drive); + dev->value_fp = NULL; + return MAA_SUCCESS; } maa_result_t