#include <stdio.h>
|
#include <sys/types.h>
|
#include <sys/stat.h>
|
#include <fcntl.h>
|
#include <unistd.h>
|
#include <string.h>
|
#include <termios.h>
|
#include <errno.h>
|
#include <fcntl.h>
|
#include <sys/ioctl.h>
|
#include <QDebug>
|
#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;
|
}
|