#include #include #include #include #define GPIO_DIR "/sys/class/gpio" #define GPIO_NAME "gpio246" #define GPIO_PATH GPIO_DIR "/" GPIO_NAME "/" int main(void) { int fd; int i; int ret; fd = open(GPIO_PATH "direction", O_RDWR); printf("fd=%d\n", fd); ret = write(fd, "in", 2); printf("write=%d\n", ret); close(fd); fd = open(GPIO_PATH "edge", O_RDWR); printf("fd=%d\n", fd); // ret=write(fd, "rising", 6); ret=write(fd, "falling", 7); printf("write=%d\n", ret); close(fd); for (i=0; i < 3; i++) { char val; struct pollfd pfd; fd = open(GPIO_PATH "value", O_RDWR); printf("fd=%d\n", fd); ret=read(fd, &val, 1); printf("read=%d val=%c\n", ret, val); printf("waiting for interrupt..."); fflush(stdout); pfd.fd = fd; pfd.events = POLLIN; pfd.revents = 0; ret = poll(&pfd, 1, -1); printf("poll=%d revent=0x%x\n", ret, pfd.revents); ret=lseek(fd, 0, SEEK_SET); printf("lseek=%d\n", ret); ret = read(fd, &val, 1); printf("read=%d val=%c\n", ret, val); close(fd); printf("OK (%c, %s)\n", val, val == '0' ? "Low" : "High"); usleep(100000); } return 0; }