25 #if (defined(__linux__) || defined(__MINGW32__)) && !defined(ARDUINO) 32 #include <sys/types.h> 48 int gpio_export(
int pin)
51 ssize_t bytes_written;
54 fd = open(
"/sys/class/gpio/export", O_WRONLY);
57 fprintf(stderr,
"Failed to allocate gpio pin resources!\n");
61 bytes_written = snprintf(buffer,
sizeof(buffer),
"%d", pin);
62 if (write(fd, buffer, bytes_written) < 0)
64 fprintf(stderr,
"Failed to allocate gpio pin resources!\n");
70 int gpio_unexport(
int pin)
73 ssize_t bytes_written;
76 fd = open(
"/sys/class/gpio/unexport", O_WRONLY);
79 fprintf(stderr,
"Failed to free gpio pin resources!\n");
83 bytes_written = snprintf(buffer,
sizeof(buffer),
"%d", pin);
84 if (write(fd, buffer, bytes_written) < 0)
86 fprintf(stderr,
"Failed to free gpio pin resources!\n");
92 int gpio_direction(
int pin,
int dir)
94 static const char s_directions_str[] =
"in\0out";
99 snprintf(path,
sizeof(path),
"/sys/class/gpio/gpio%d/direction", pin);
100 fd = open(path, O_WRONLY);
103 fprintf(stderr,
"Failed to set gpio pin direction!\n");
107 if (-1 == write(fd, &s_directions_str[IN == dir ? 0 : 3], IN == dir ? 2 : 3))
109 fprintf(stderr,
"Failed to set gpio pin direction!\n");
117 int gpio_read(
int pin)
123 snprintf(path,
sizeof(path),
"/sys/class/gpio/gpio%d/value", pin);
124 fd = open(path, O_RDONLY);
127 fprintf(stderr,
"Failed to read gpio pin value!\n");
131 if (-1 == read(fd, value_str, 3))
133 fprintf(stderr,
"Failed to read gpio pin value!\n");
139 return(atoi(value_str));
142 int gpio_write(
int pin,
int value)
144 static const char s_values_str[] =
"01";
149 snprintf(path,
sizeof(path),
"/sys/class/gpio/gpio%d/value", pin);
150 fd = open(path, O_WRONLY);
153 fprintf(stderr,
"Failed to set gpio pin value!\n");
157 if (1 != write(fd, &s_values_str[LOW == value ? 0 : 1], 1))
159 fprintf(stderr,
"Failed to set gpio pin value!\n");