Skip to content

Instantly share code, notes, and snippets.

@arfoll
Created December 6, 2014 23:24
Show Gist options
  • Save arfoll/65621988a6064e8cd47c to your computer and use it in GitHub Desktop.
Save arfoll/65621988a6064e8cd47c to your computer and use it in GitHub Desktop.
edison_boarddef_cleanup
diff --git a/src/intel_edison_fab_c.c b/src/intel_edison_fab_c.c
index 9a3a1db..4ac0009 100644
--- a/src/intel_edison_fab_c.c
+++ b/src/intel_edison_fab_c.c
@@ -101,13 +101,21 @@ mraa_intel_edison_gpio_dir_pre(mraa_gpio_context dev, gpio_dir_t dir)
mraa_gpio_context output_e;
output_e = mraa_gpio_init_raw(outputen[pin]);
- if (mraa_gpio_dir(output_e, MRAA_GPIO_OUT) != MRAA_SUCCESS)
+ if (output_e == NULL) {
return MRAA_ERROR_INVALID_RESOURCE;
+ if (mraa_gpio_dir(output_e, MRAA_GPIO_OUT) != MRAA_SUCCESS) {
+ mraa_gpio_close(output_e);
+ return MRAA_ERROR_INVALID_RESOURCE;
+ }
int output_val = 0;
- if (dir == MRAA_GPIO_OUT)
+ if (dir == MRAA_GPIO_OUT) {
output_val = 1;
- if (mraa_gpio_write(output_e, output_val) != MRAA_SUCCESS)
+ }
+ if (mraa_gpio_write(output_e, output_val) != MRAA_SUCCESS) {
+ mraa_gpio_close(output_e);
return MRAA_ERROR_INVALID_RESOURCE;
+ }
+ mraa_gpio_close(output_e);
}
return MRAA_SUCCESS;
}
@@ -115,15 +123,15 @@ mraa_intel_edison_gpio_dir_pre(mraa_gpio_context dev, gpio_dir_t dir)
mraa_result_t
mraa_intel_edison_gpio_dir_post(mraa_gpio_context dev, gpio_dir_t dir)
{
- mraa_gpio_write(tristate, 1);
- return MRAA_SUCCESS;
+ return mraa_gpio_write(tristate, 1);
}
mraa_result_t
mraa_intel_edison_gpio_init_post(mraa_gpio_context dev)
{
- if (dev == NULL)
+ if (dev == NULL) {
return MRAA_ERROR_INVALID_RESOURCE;
+ }
int sysfs, mode;
if (miniboard == 1) {
@@ -133,9 +141,7 @@ mraa_intel_edison_gpio_init_post(mraa_gpio_context dev)
sysfs = pinmodes[dev->phy_pin].gpio.sysfs;
mode = pinmodes[dev->phy_pin].gpio.mode;
}
- mraa_result_t ret = mraa_intel_edison_pinmode_change(sysfs, mode);
-
- return ret;
+ return mraa_intel_edison_pinmode_change(sysfs, mode);
}
mraa_result_t
@@ -258,16 +264,28 @@ mraa_intel_edison_aio_init_pre(unsigned int aio)
int pin = 14 + aio;
mraa_gpio_context output_e;
output_e = mraa_gpio_init_raw(outputen[pin]);
- if (mraa_gpio_dir(output_e, MRAA_GPIO_OUT) != MRAA_SUCCESS)
+ if (output_e == NULL) {
+ return MRAA_ERROR_INVALID_RESOURCE;
+ }
+ if (mraa_gpio_dir(output_e, MRAA_GPIO_OUT) != MRAA_SUCCESS) {
+ mraa_gpio_close(output_e);
return MRAA_ERROR_INVALID_RESOURCE;
- if (mraa_gpio_write(output_e, 0) != MRAA_SUCCESS)
+ }
+ if (mraa_gpio_write(output_e, 0) != MRAA_SUCCESS) {
+ mraa_gpio_close(output_e);
return MRAA_ERROR_INVALID_RESOURCE;
+ }
mraa_gpio_close(output_e);
mraa_gpio_context pullup_pin;
pullup_pin = mraa_gpio_init_raw(pullup_map[pin]);
- if (mraa_gpio_dir(pullup_pin, MRAA_GPIO_IN) != MRAA_SUCCESS)
+ if (pullup_pin == NULL) {
+ return MRAA_ERROR_INVALID_RESOURCE;
+ }
+ if (mraa_gpio_dir(pullup_pin, MRAA_GPIO_IN) != MRAA_SUCCESS) {
+ mraa_gpio_close(pullup_pin);
return MRAA_ERROR_INVALID_RESOURCE;
+ }
mraa_gpio_close(pullup_pin);
return MRAA_SUCCESS;
@@ -276,8 +294,7 @@ mraa_intel_edison_aio_init_pre(unsigned int aio)
mraa_result_t
mraa_intel_edison_aio_init_post(mraa_aio_context dev)
{
- mraa_gpio_write(tristate, 1);
- return MRAA_SUCCESS;
+ return mraa_gpio_write(tristate, 1);
}
mraa_result_t
@@ -286,24 +303,38 @@ mraa_intel_edison_pwm_init_pre(int pin)
if (miniboard == 1) {
return mraa_intel_edison_pinmode_change(plat->pins[pin].gpio.pinmap, 1);
}
- if (pin < 0 || pin > 19)
+ if (pin < 0 || pin > 19) {
return MRAA_ERROR_INVALID_RESOURCE;
+ }
- if (!plat->pins[pin].capabilites.pwm)
+ if (!plat->pins[pin].capabilites.pwm) {
return MRAA_ERROR_INVALID_RESOURCE;
+ }
mraa_gpio_context output_e;
output_e = mraa_gpio_init_raw(outputen[pin]);
- if (mraa_gpio_dir(output_e, MRAA_GPIO_OUT) != MRAA_SUCCESS)
+ if (output_e == NULL) {
return MRAA_ERROR_INVALID_RESOURCE;
- if (mraa_gpio_write(output_e, 1) != MRAA_SUCCESS)
+ }
+ if (mraa_gpio_dir(output_e, MRAA_GPIO_OUT) != MRAA_SUCCESS) {
+ mraa_gpio_close(output_e);
+ return MRAA_ERROR_INVALID_RESOURCE;
+ }
+ if (mraa_gpio_write(output_e, 1) != MRAA_SUCCESS) {
+ mraa_gpio_close(output_e);
return MRAA_ERROR_INVALID_RESOURCE;
+ }
mraa_gpio_close(output_e);
mraa_gpio_context pullup_pin;
pullup_pin = mraa_gpio_init_raw(pullup_map[pin]);
- if (mraa_gpio_dir(pullup_pin, MRAA_GPIO_IN) != MRAA_SUCCESS)
+ if (pullup_pin == NULL) {
+ return MRAA_ERROR_INVALID_RESOURCE;
+ }
+ if (mraa_gpio_dir(pullup_pin, MRAA_GPIO_IN) != MRAA_SUCCESS) {
+ mraa_gpio_close(pullup_pin);
return MRAA_ERROR_INVALID_RESOURCE;
+ }
mraa_gpio_close(pullup_pin);
mraa_intel_edison_pinmode_change(plat->pins[pin].gpio.pinmap, 1);
@@ -313,8 +344,7 @@ mraa_intel_edison_pwm_init_pre(int pin)
mraa_result_t
mraa_intel_edison_pwm_init_post(mraa_pwm_context pwm)
{
- mraa_gpio_write(tristate, 1);
- return MRAA_SUCCESS;
+ return mraa_gpio_write(tristate, 1);
}
mraa_result_t
@@ -369,23 +399,27 @@ mraa_intel_edison_spi_init_pre(int bus)
mraa_result_t
mraa_intel_edison_spi_init_post(mraa_spi_context spi)
{
- mraa_gpio_write(tristate, 1);
- return MRAA_SUCCESS;
+ return mraa_gpio_write(tristate, 1);
}
mraa_result_t
mraa_intel_edison_gpio_mode_replace(mraa_gpio_context dev, gpio_mode_t mode)
{
if (dev->value_fp != -1) {
- close(dev->value_fp);
+ if (close(dev->value_fp) != 0) {
+ return MRAA_ERROR_INVALID_RESOURCE;
+ }
dev->value_fp = -1;
}
mraa_gpio_context pullup_e;
pullup_e = mraa_gpio_init_raw(pullup_map[dev->phy_pin]);
- mraa_result_t sta = mraa_gpio_dir(pullup_e, MRAA_GPIO_IN);
- if(sta != MRAA_SUCCESS) {
+ if (pullup_e == NULL) {
+ return MRAA_ERROR_INVALID_RESOURCE;
+ }
+ if (mraa_gpio_dir(pullup_e, MRAA_GPIO_IN) != MRAA_SUCCESS) {
syslog(LOG_ERR, "edison: Failed to set gpio mode-pullup");
+ mraa_gpio_close(pullup_e);
return MRAA_ERROR_INVALID_RESOURCE;
}
@@ -406,28 +440,34 @@ mraa_intel_edison_gpio_mode_replace(mraa_gpio_context dev, gpio_mode_t mode)
return MRAA_ERROR_FEATURE_NOT_IMPLEMENTED;
}
if (value != -1) {
- sta = mraa_gpio_dir(pullup_e, MRAA_GPIO_OUT);
- sta = mraa_gpio_write(pullup_e, value);
- if (sta != MRAA_SUCCESS) {
+ if (mraa_gpio_dir(pullup_e, MRAA_GPIO_OUT) != MRAA_SUCCESS) {
syslog(LOG_ERR, "edison: Error setting pullup");
- return sta;
+ mraa_gpio_close(pullup_e);
+ return MRAA_ERROR_INVALID_RESOURCE;
+ }
+ if (mraa_gpio_write(pullup_e, value)!= MRAA_SUCCESS) {
+ syslog(LOG_ERR, "edison: Error setting pullup");
+ mraa_gpio_close(pullup_e);
+ return MRAA_ERROR_INVALID_RESOURCE;
}
}
- return MRAA_SUCCESS;
+ return mraa_gpio_close(pullup_e);
}
mraa_result_t
mraa_intel_edsion_mb_gpio_mode(mraa_gpio_context dev, gpio_mode_t mode)
{
if (dev->value_fp != -1) {
- close(dev->value_fp);
+ if (close(dev->value_fp) != 0) {
+ return MRAA_ERROR_INVALID_RESOURCE;
+ }
dev->value_fp = -1;
}
char filepath[MAX_SIZE];
snprintf(filepath, MAX_SIZE,
- SYSFS_PINMODE_PATH "%d/current_pullmode", dev->pin);
+ SYSFS_PINMODE_PATH "%d/current_pullmode", dev->pin);
int drive = open(filepath, O_WRONLY);
if (drive == -1) {
@@ -458,10 +498,11 @@ mraa_intel_edsion_mb_gpio_mode(mraa_gpio_context dev, gpio_mode_t mode)
syslog(LOG_ERR, "edison: Failed to write to drive mode");
close(drive);
return MRAA_ERROR_INVALID_RESOURCE;
-
}
- close(drive);
+ if (close(drive) != 0) {
+ return MRAA_ERROR_INVALID_RESOURCE;
+ }
return MRAA_SUCCESS;
}
@@ -509,7 +550,9 @@ mraa_intel_edsion_mmap_unsetup()
}
munmap(mmap_reg, mmap_size);
mmap_reg = NULL;
- close(mmap_fd);
+ if (close(mmap_fd) != 0) {
+ return MRAA_ERROR_INVALID_RESOURCE;
+ }
return MRAA_SUCCESS;
}
@@ -538,8 +581,9 @@ mraa_intel_edison_mmap_read(mraa_gpio_context dev)
uint32_t value;
value = *(volatile uint32_t*) (mmap_reg +0x04+ offset);
- if (value&(uint32_t)(1 << (dev->pin % 32)))
+ if (value&(uint32_t)(1 << (dev->pin % 32))) {
return 1;
+ }
return 0;
}
@@ -598,7 +642,6 @@ mraa_intel_edison_mmap_setup(mraa_gpio_context dev, mraa_boolean_t en)
dev->mmap_read = &mraa_intel_edison_mmap_read;
mmap_count++;
-
return MRAA_SUCCESS;
}
@@ -613,7 +656,6 @@ mraa_intel_edsion_miniboard(mraa_board_t* b)
b->pwm_max_period = 218453;
b->pwm_min_period = 1;
-
b->pins = (mraa_pininfo_t*) malloc(sizeof(mraa_pininfo_t)*56);
advance_func->gpio_init_post = &mraa_intel_edison_gpio_init_post;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment