#include #include #include #include #include #include #include #include #include #include #include #include "gpio_driver.h" #define RET_SUCCESS 0 #define RET_FAILED -1 /* ioctl cmd */ #define IOCTL_GPIO_LEVEL_GET _IOW('Q', 0x02, int) //get gpio state #define IOCTL_GPIO_LEVEL_SET _IOR('Q', 0x03, int) //set gpio output state #define IOCTL_GPIO_DIR_INPUT_SET _IOW('Q', 0x04, int) //set gpio as a input #define DEV_GPIO "/dev/qiyang_imx6_gpio" int gpio_set_level(int index,int level) { int fd_gpio = -1; fd_gpio = open(DEV_GPIO, O_RDWR); if (fd_gpio < 0) { qDebug("open gpio device %s error!\n", DEV_GPIO); return RET_FAILED; } IOCTL_GPIO_ARG_ST parg; parg.gpio_index = index; parg.gpio_level = level; int ret = ioctl(fd_gpio, IOCTL_GPIO_LEVEL_SET, &parg); if (0 != ret) { ret = RET_FAILED; qDebug("set gpio level failed."); } else { qDebug("set gpio level success."); } return ret; } int gpio_get_level(int index,int *level) { int fd_gpio = -1; fd_gpio = open(DEV_GPIO, O_RDWR); if (fd_gpio < 0) { qDebug("open gpio device %s error!\n", DEV_GPIO); return RET_FAILED; } IOCTL_GPIO_ARG_ST parg; parg.gpio_index = index; int ret = ioctl(fd_gpio, IOCTL_GPIO_LEVEL_GET, &parg); if (0 != ret) { ret = RET_FAILED; qDebug("get gpio level failed."); } else { qDebug("get gpio level success."); if(parg.gpio_level >= 1) { *level = 1; } else { *level = 0; } } return ret; }