25 #if defined(__linux__) && !defined(ARDUINO) 30 #include <sys/types.h> 39 int gpio_export(
int pin)
42 ssize_t bytes_written;
45 fd = open(
"/sys/class/gpio/export", O_WRONLY);
48 fprintf(stderr,
"Failed to allocate gpio pin resources!\n");
52 bytes_written = snprintf(buffer,
sizeof(buffer),
"%d", pin);
53 write(fd, buffer, bytes_written);
58 int gpio_unexport(
int pin)
61 ssize_t bytes_written;
64 fd = open(
"/sys/class/gpio/unexport", O_WRONLY);
67 fprintf(stderr,
"Failed to free gpio pin resources!\n");
71 bytes_written = snprintf(buffer,
sizeof(buffer),
"%d", pin);
72 write(fd, buffer, bytes_written);
77 int gpio_direction(
int pin,
int dir)
79 static const char s_directions_str[] =
"in\0out";
84 snprintf(path,
sizeof(path),
"/sys/class/gpio/gpio%d/direction", pin);
85 fd = open(path, O_WRONLY);
88 fprintf(stderr,
"Failed to set gpio pin direction!\n");
92 if (-1 == write(fd, &s_directions_str[IN == dir ? 0 : 3], IN == dir ? 2 : 3))
94 fprintf(stderr,
"Failed to set gpio pin direction!\n");
102 int gpio_read(
int pin)
108 snprintf(path,
sizeof(path),
"/sys/class/gpio/gpio%d/value", pin);
109 fd = open(path, O_RDONLY);
112 fprintf(stderr,
"Failed to read gpio pin value!\n");
116 if (-1 == read(fd, value_str, 3))
118 fprintf(stderr,
"Failed to read gpio pin value!\n");
124 return(atoi(value_str));
127 int gpio_write(
int pin,
int value)
129 static const char s_values_str[] =
"01";
134 snprintf(path,
sizeof(path),
"/sys/class/gpio/gpio%d/value", pin);
135 fd = open(path, O_WRONLY);
138 fprintf(stderr,
"Failed to set gpio pin value!\n");
142 if (1 != write(fd, &s_values_str[LOW == value ? 0 : 1], 1))
144 fprintf(stderr,
"Failed to set gpio pin value!\n");