From 85d10e2ce3c5b5db181f1d61d5f0dcfd8eb9876a Mon Sep 17 00:00:00 2001 From: bugobliterator Date: Sat, 24 May 2014 10:57:39 +0530 Subject: [PATCH] HAL_Linux: add export gpio during direction set if not exported during initialisation --- libraries/AP_HAL_Linux/GPIO.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/libraries/AP_HAL_Linux/GPIO.cpp b/libraries/AP_HAL_Linux/GPIO.cpp index 65223cbb3a..e303db8c11 100644 --- a/libraries/AP_HAL_Linux/GPIO.cpp +++ b/libraries/AP_HAL_Linux/GPIO.cpp @@ -60,14 +60,27 @@ void LinuxGPIO::init() void LinuxGPIO::pinMode(uint8_t pin, uint8_t output) { - int fd; + int fd,len; char buf[64]; snprintf(buf, sizeof(buf), SYSFS_GPIO_DIR "/gpio%d/direction", pin); fd = ::open(buf, O_WRONLY); if (fd < 0) { - perror("LinuxGPIO::direction"); + fd = open(SYSFS_GPIO_DIR "/export", O_WRONLY); //try exporting GPIO pin + if (fd < 0) { + perror("LinuxGPIO::direction"); + } + + len = snprintf(buf, sizeof(buf), "%d", pin); + ::write(fd, buf, len); + close(fd); + + snprintf(buf, sizeof(buf), SYSFS_GPIO_DIR "/gpio%d/direction", pin); //retry writing direction + fd = ::open(buf, O_WRONLY); + if (fd < 0) { + perror("LinuxGPIO::direction"); //report faillure + } } if (output == GPIO_OUTPUT)