From e04e6199e3dda5e601b1da5e2d404d05b8f1dec0 Mon Sep 17 00:00:00 2001 From: Ivan Pelipenko Date: Fri, 22 May 2020 21:58:05 +0300 Subject: [PATCH] PIGPIO user permission patch --- src_main/io_devices/pigpio.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src_main/io_devices/pigpio.cpp b/src_main/io_devices/pigpio.cpp index 93dfdc53..d6d0f9e4 100644 --- a/src_main/io_devices/pigpio.cpp +++ b/src_main/io_devices/pigpio.cpp @@ -89,13 +89,25 @@ PIString PIGPIO::GPIOName(int gpio_num) { void PIGPIO::exportGPIO(int gpio_num) { #ifdef GPIO_SYS_CLASS - int fd = ::open(("/sys/class/gpio/" + GPIOName(gpio_num) + "/value").dataAscii(), O_RDONLY); + PIString valfile = "/sys/class/gpio/" + GPIOName(gpio_num) + "/value"; + int fd = ::open(valfile.dataAscii(), O_RDONLY); if (fd != -1) { ::close(fd); return; } int ret = 0; ret = system(PIString("echo " + PIString::fromNumber(gpio_num) + " >> /sys/class/gpio/export").dataAscii()); + if (ret == 0) { + PITimeMeasurer tm; + while (tm.elapsed_s() < 1.) { + fd = ::open(valfile.dataAscii(), O_RDWR); + if (fd != -1) { + ::close(fd); + return; + } + piMSleep(1); + } + } #endif }