#include #include #include #include #include #include "gpio.h" #include "elog.h" #if 1 #define LOGD log_d #define LOGE log_e #else #define LOGD printf #define LOGE printf #endif int gpio_init(int gpio, int io) { int r,fd,flag; char tmp[20],path[100]; sprintf(path,"/sys/class/gpio/export"); fd = open(path, O_WRONLY); if(fd< 0){ return -1; } sprintf(tmp, "%d", gpio); write(fd, tmp, strlen(tmp)); close(fd); sprintf(path,"/sys/class/gpio/gpio%d/direction", gpio); fd = open(path, O_WRONLY); if(fd< 0){ LOGE("open %s error\n", path); return -1; } if(io==GPIO_IN) { sprintf(tmp, "in"); } else { sprintf(tmp, "out"); } r = write(fd, tmp, strlen(tmp)); if(r<0){ LOGE("gpio_init, write gpio direction failed\n"); return -1; } close(fd); flag = ((io==GPIO_IN)?O_RDONLY:O_WRONLY); sprintf(path,"/sys/class/gpio/gpio%d/value", gpio); fd = open(path, flag); if(fd< 0){ LOGE("gpio_init, open gpio value failed\n"); return -1; } return fd; } int gpio_deinit(int fd) { close(fd); return 0; } int gpio_set(int fd, int hl) { int r; char tmp[20]; sprintf(tmp, "%d", hl); r = write(fd, tmp, strlen(tmp)); if(r<0){ LOGE("gpio_set failed\n"); return -1; } return 0; } int gpio_get(int fd) { int r; char tmp[10]; r = read(fd, tmp, sizeof(tmp)-1); if (r<0) { LOGE("gpio_get failed, %d\n", errno); return -1; } if (tmp[0]=='0'){ return 0; } else{ return 1; } } int gpio_set2(int gpio, int hl) { int r,fd; char tmp[10],path[100]; sprintf(path,"/sys/class/gpio/gpio%d/value", gpio); fd = open(path, O_RDWR); if(fd<0){ LOGE("gpio_set2, open failed٬%d\n", errno); return -1; } sprintf(tmp, "%d", hl); r = write(fd, tmp, strlen(tmp)); if(r<0){ LOGE("gpio_set2, write failed٬%d\n", errno); return -1; } close(fd); return 0; } int gpio_get2(int gpio) { int r,fd; char tmp[10],path[100]; sprintf(path,"/sys/class/gpio/gpio%d/value", gpio); fd = open(path, O_RDWR); if(fd< 0){ LOGE("open gpio value failed\n"); return -1; } r = read(fd, tmp, sizeof(tmp)-1); if (r<0) { LOGE("gpio_get failed, %d\n", errno); return -1; } close(fd); return tmp[0]-'0'; }