| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- #include <string.h>
- #include <stdio.h>
- #include <fcntl.h>
- #include <errno.h>
- #include <unistd.h>
- #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;
- }
- log_i("gpio_init, open gpio %d success\n",gpio);
- 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';
- }
|