gpio.c 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. #include <string.h>
  2. #include <stdio.h>
  3. #include <fcntl.h>
  4. #include <errno.h>
  5. #include <unistd.h>
  6. #include "gpio.h"
  7. #include "elog.h"
  8. #if 1
  9. #define LOGD log_d
  10. #define LOGE log_e
  11. #else
  12. #define LOGD printf
  13. #define LOGE printf
  14. #endif
  15. int gpio_init(int gpio, int io)
  16. {
  17. int r,fd,flag;
  18. char tmp[20],path[100];
  19. sprintf(path,"/sys/class/gpio/export");
  20. fd = open(path, O_WRONLY);
  21. if(fd< 0){
  22. return -1;
  23. }
  24. sprintf(tmp, "%d", gpio);
  25. write(fd, tmp, strlen(tmp));
  26. close(fd);
  27. sprintf(path,"/sys/class/gpio/gpio%d/direction", gpio);
  28. fd = open(path, O_WRONLY);
  29. if(fd< 0){
  30. LOGE("open %s error\n", path);
  31. return -1;
  32. }
  33. if(io==GPIO_IN) {
  34. sprintf(tmp, "in");
  35. }
  36. else {
  37. sprintf(tmp, "out");
  38. }
  39. r = write(fd, tmp, strlen(tmp));
  40. if(r<0){
  41. LOGE("gpio_init, write gpio direction failed\n");
  42. return -1;
  43. }
  44. close(fd);
  45. flag = ((io==GPIO_IN)?O_RDONLY:O_WRONLY);
  46. sprintf(path,"/sys/class/gpio/gpio%d/value", gpio);
  47. fd = open(path, flag);
  48. if(fd< 0){
  49. LOGE("gpio_init, open gpio value failed\n");
  50. return -1;
  51. }
  52. log_i("gpio_init, open gpio %d success\n",gpio);
  53. return fd;
  54. }
  55. int gpio_deinit(int fd)
  56. {
  57. close(fd);
  58. return 0;
  59. }
  60. int gpio_set(int fd, int hl)
  61. {
  62. int r;
  63. char tmp[20];
  64. sprintf(tmp, "%d", hl);
  65. r = write(fd, tmp, strlen(tmp));
  66. if(r<0){
  67. LOGE("gpio_set failed\n");
  68. return -1;
  69. }
  70. return 0;
  71. }
  72. int gpio_get(int fd)
  73. {
  74. int r;
  75. char tmp[10];
  76. r = read(fd, tmp, sizeof(tmp)-1);
  77. if (r<0) {
  78. LOGE("gpio_get failed, %d\n", errno);
  79. return -1;
  80. }
  81. if (tmp[0]=='0'){
  82. return 0;
  83. } else{
  84. return 1;
  85. }
  86. }
  87. int gpio_set2(int gpio, int hl)
  88. {
  89. int r,fd;
  90. char tmp[10],path[100];
  91. sprintf(path,"/sys/class/gpio/gpio%d/value", gpio);
  92. fd = open(path, O_RDWR);
  93. if(fd<0){
  94. LOGE("gpio_set2, open failed£¬%d\n", errno);
  95. return -1;
  96. }
  97. sprintf(tmp, "%d", hl);
  98. r = write(fd, tmp, strlen(tmp));
  99. if(r<0){
  100. LOGE("gpio_set2, write failed£¬%d\n", errno);
  101. return -1;
  102. }
  103. close(fd);
  104. return 0;
  105. }
  106. int gpio_get2(int gpio)
  107. {
  108. int r,fd;
  109. char tmp[10],path[100];
  110. sprintf(path,"/sys/class/gpio/gpio%d/value", gpio);
  111. fd = open(path, O_RDWR);
  112. if(fd< 0){
  113. LOGE("open gpio value failed\n");
  114. return -1;
  115. }
  116. r = read(fd, tmp, sizeof(tmp)-1);
  117. if (r<0) {
  118. LOGE("gpio_get failed, %d\n", errno);
  119. return -1;
  120. }
  121. close(fd);
  122. return tmp[0]-'0';
  123. }