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("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("open gpio value failed\n");
  50. return -1;
  51. }
  52. return fd;
  53. }
  54. int gpio_deinit(int fd)
  55. {
  56. close(fd);
  57. return 0;
  58. }
  59. int gpio_set(int fd, int hl)
  60. {
  61. int r;
  62. char tmp[20];
  63. sprintf(tmp, "%d", hl);
  64. r = write(fd, tmp, strlen(tmp));
  65. if(r<0){
  66. LOGE("gpio_set failed\n");
  67. return -1;
  68. }
  69. return 0;
  70. }
  71. int gpio_get(int fd)
  72. {
  73. int r;
  74. char tmp[10];
  75. r = read(fd, tmp, sizeof(tmp)-1);
  76. if (r<0) {
  77. LOGE("gpio_get failed, %d\n", errno);
  78. return -1;
  79. }
  80. if (tmp[0]=='0'){
  81. return 0;
  82. } else{
  83. return 1;
  84. }
  85. }
  86. int gpio_set2(int gpio, int hl)
  87. {
  88. int r,fd;
  89. char tmp[10],path[100];
  90. sprintf(path,"/sys/class/gpio/gpio%d/value", gpio);
  91. fd = open(path, O_RDWR);
  92. if(fd< 0){
  93. LOGE("open gpio value failed\n");
  94. return -1;
  95. }
  96. sprintf(tmp, "%d", hl);
  97. r = write(fd, tmp, strlen(tmp));
  98. if(r<0){
  99. LOGE("gpio_set2 failed\n");
  100. return -1;
  101. }
  102. close(fd);
  103. return 0;
  104. }
  105. int gpio_get2(int gpio)
  106. {
  107. int r,fd;
  108. char tmp[10],path[100];
  109. sprintf(path,"/sys/class/gpio/gpio%d/value", gpio);
  110. fd = open(path, O_RDWR);
  111. if(fd< 0){
  112. LOGE("open gpio value failed\n");
  113. return -1;
  114. }
  115. r = read(fd, tmp, sizeof(tmp)-1);
  116. if (r<0) {
  117. LOGE("gpio_get failed, %d\n", errno);
  118. return -1;
  119. }
  120. close(fd);
  121. return tmp[0]-'0';
  122. }