Ubuntu12.04.4_lts
2023-08-01 961efe36f62f7eba688d504ec0cdf3e1daa4dd74
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#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;
}