#include #include #include int fd_val[5]; int fd_in[2]; char indat[2][4]; char s[64]; int main() { int i; init_gpio(); for (i=0; i<5; i++) { write(fd_val[i],"0",2); } for (i=0; i<5; i++) { sleep(1); write(fd_val[i],"1",2); } gpio_in_open(); for (i=0; i<2; i++) { read(fd_in[i],indat[i],2); printf("%c",indat[i][0]); } gpio_in_close(); puts("\n"); for (i=0; i<5; i++) { sleep(1); write(fd_val[i],"0",2); } gpio_in_open(); for (i=0; i<2; i++) { read(fd_in[i],indat[i],2); printf("%c",indat[i][0]); } gpio_in_close(); puts("\n"); for (i=0; i<5; i++) close(fd_val[i]); gpio_close(); } void init_gpio() { int fd_exp, fd_dir; int i; fd_exp = open("/sys/class/gpio/export", O_WRONLY); if (fd_exp < 0) { printf("GPIO export open error\n"); exit(1); } write(fd_exp, "0", 2); write(fd_exp, "1", 2); write(fd_exp, "7", 2); write(fd_exp, "8", 2); write(fd_exp, "9", 2); write(fd_exp, "10", 2); write(fd_exp, "11", 2); close(fd_exp); for (i=0; i<2; i++) { sprintf(s,"/sys/class/gpio/gpio%d/direction",i); fd_dir = open(s, O_RDWR); if (fd_dir < 0) { printf("GPIO %d direction open error\n",i); exit(1); } write(fd_dir, "in", 3); close(fd_dir); } for (i=7; i<12; i++) { sprintf(s,"/sys/class/gpio/gpio%d/direction",i); fd_dir = open(s, O_RDWR); if (fd_dir < 0) { printf("GPIO %d direction open error\n",i); exit(1); } write(fd_dir, "out", 4); close(fd_dir); } for (i=0; i<5; i++) { sprintf(s,"/sys/class/gpio/gpio%d/value",i+7); fd_val[i] = open(s, O_RDWR); if (fd_val[i] < 0) { printf("GPIO %d value open error\n",i); exit(1); } } } void gpio_in_open() { int i; for (i=0; i<2; i++) { sprintf(s,"/sys/class/gpio/gpio%d/value",i); fd_in[i] = open(s, O_RDWR); if (fd_in[i] < 0) { printf("GPIO %d value open error\n",i); exit(1); } } } void gpio_in_close() { int i; for (i=0; i<2; i++) close(fd_in[i]); } void gpio_close() { int fd_exp; fd_exp = open("/sys/class/gpio/unexport", O_WRONLY); if (fd_exp < 0) { printf("GPIO unexport open error\n"); exit(1); } write(fd_exp, "0", 2); write(fd_exp, "1", 2); write(fd_exp, "7", 2); write(fd_exp, "8", 2); write(fd_exp, "9", 2); write(fd_exp, "10", 2); write(fd_exp, "11", 2); close(fd_exp); }