gpio: Matured the GPIO API.
* Greater use of return values. * Uses defined enum instead of char arrays Signed-off-by: Thomas Ingleby <thomas.c.ingleby@intel.com>
This commit is contained in:
@@ -43,12 +43,20 @@ maa_gpio_get_valfp(maa_gpio_context *dev)
|
||||
|
||||
maa_gpio_context*
|
||||
maa_gpio_init(int pin)
|
||||
{
|
||||
//TODO
|
||||
return NULL;
|
||||
}
|
||||
|
||||
maa_gpio_context*
|
||||
maa_gpio_init_raw(int pin)
|
||||
{
|
||||
FILE *export_f;
|
||||
maa_gpio_context* dev = (maa_gpio_context*) malloc(sizeof(maa_gpio_context));
|
||||
|
||||
if ((export_f = fopen("/sys/class/gpio/export", "w")) == NULL) {
|
||||
fprintf(stderr, "Failed to open export for writing!\n");
|
||||
return NULL;
|
||||
} else {
|
||||
fprintf(export_f, "%d", pin);
|
||||
fclose(export_f);
|
||||
@@ -57,13 +65,13 @@ maa_gpio_init(int pin)
|
||||
return dev;
|
||||
}
|
||||
|
||||
void
|
||||
maa_result_t
|
||||
maa_gpio_mode(maa_gpio_context *dev, gpio_mode_t mode)
|
||||
{
|
||||
//gpio->pin
|
||||
return MAA_ERROR_FEATURE_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
void
|
||||
maa_result_t
|
||||
maa_gpio_dir(maa_gpio_context *dev, gpio_dir_t dir)
|
||||
{
|
||||
if (dev->value_fp != NULL) {
|
||||
@@ -75,11 +83,23 @@ maa_gpio_dir(maa_gpio_context *dev, gpio_dir_t dir)
|
||||
FILE *direction;
|
||||
if ((direction = fopen(filepath, "w")) == NULL) {
|
||||
fprintf(stderr, "Failed to open direction for writing!\n");
|
||||
} else {
|
||||
fprintf(direction, dir);
|
||||
fclose(direction);
|
||||
dev->value_fp = NULL;
|
||||
return MAA_ERROR_INVALID_RESOURCE;
|
||||
}
|
||||
switch(dir) {
|
||||
case MAA_GPIO_OUT:
|
||||
fprintf(direction, "out");
|
||||
break;
|
||||
case MAA_GPIO_IN:
|
||||
fprintf(direction, "in");
|
||||
break;
|
||||
default:
|
||||
fclose(direction);
|
||||
return MAA_ERROR_FEATURE_NOT_IMPLEMENTED;
|
||||
break;
|
||||
}
|
||||
fclose(direction);
|
||||
dev->value_fp = NULL;
|
||||
return MAA_SUCCESS;
|
||||
}
|
||||
|
||||
int
|
||||
@@ -95,7 +115,7 @@ maa_gpio_read(maa_gpio_context *dev)
|
||||
return atoi(buffer);
|
||||
}
|
||||
|
||||
void
|
||||
maa_result_t
|
||||
maa_gpio_write(maa_gpio_context *dev, int value)
|
||||
{
|
||||
if (dev->value_fp == NULL) {
|
||||
@@ -104,18 +124,24 @@ maa_gpio_write(maa_gpio_context *dev, int value)
|
||||
fseek(dev->value_fp, SEEK_SET, 0);
|
||||
fprintf(dev->value_fp, "%d", value);
|
||||
fseek(dev->value_fp, SEEK_SET, 0);
|
||||
|
||||
if (ferror(dev->value_fp) != 0)
|
||||
return MAA_ERROR_INVALID_RESOURCE;
|
||||
return MAA_SUCCESS;
|
||||
}
|
||||
|
||||
void
|
||||
maa_result_t
|
||||
maa_gpio_close(maa_gpio_context *dev)
|
||||
{
|
||||
FILE *unexport_f;
|
||||
|
||||
if ((unexport_f = fopen("/sys/class/gpio/unexport", "w")) == NULL) {
|
||||
fprintf(stderr, "Failed to open unexport for writing!\n");
|
||||
} else {
|
||||
fprintf(unexport_f, "%d", dev->pin);
|
||||
fclose(unexport_f);
|
||||
return MAA_ERROR_INVALID_RESOURCE;
|
||||
}
|
||||
fprintf(unexport_f, "%d", dev->pin);
|
||||
fclose(unexport_f);
|
||||
if (ferror(dev->value_fp) != 0)
|
||||
return MAA_ERROR_INVALID_RESOURCE;
|
||||
free(dev);
|
||||
return MAA_SUCCESS;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user