+int gpio_read(int gpiopin, int *value)
+{
+ int fd, len;
+ char gpio_dev[GPIO_BUFFER_MAX] = {0, };
+ char gpio_buf[GPIO_BUFFER_MAX] = {0, };
+
+ snprintf(gpio_dev, GPIO_BUFFER_MAX, SYSFS_GPIO_DIR"/gpio%d/value", gpiopin);
+ fd = open(gpio_dev, O_RDONLY);
+ if (fd < 0) {
+ char errmsg[MAX_ERR_LEN];
+ strerror_r(errno, errmsg, MAX_ERR_LEN);
+ _E("Can't Open /sys/class/gpio/gpio%d pin value: %s\n", gpiopin, errmsg);
+ return -ENODEV;
+ }
+
+ len = read(fd, &gpio_buf, 1);
+ close(fd);
+
+ if (len <= 0) {
+ _E("Error: gpio read error \n");
+ return -EIO;
+ }
+
+ if (0 == strncmp(gpio_buf, "1", strlen("1")))
+ *value = 1;
+ else if (0 == strncmp(gpio_buf, "0", strlen("0")))
+ *value = 0;
+ else {
+ _E("Error: gpio value is error \n");
+ return -EIO;
+ }
+
+ return 0;
+}
+
+int gpio_close(int gpiopin)
+{
+ int fd, len, status;
+ char gpio_unexport[GPIO_BUFFER_MAX] = {0, };
+
+ fd = open(SYSFS_GPIO_DIR "/unexport", O_WRONLY);
+ if (fd < 0) {
+ char errmsg[MAX_ERR_LEN];
+ strerror_r(errno, errmsg, MAX_ERR_LEN);
+ _E("Can't Open /sys/class/gpio/unexport %s\n", errmsg);
+ return -ENODEV;
+ }
+
+ len = snprintf(gpio_unexport, GPIO_BUFFER_MAX, "%d", gpiopin);
+ status = write(fd, gpio_unexport, len);
+
+ if (status != len) {
+ close(fd);
+ _E("Error: gpio open error \n");
+ return -EIO;
+ }
+
+ close(fd);
+
+ return 0;
+}
+