-
-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathgpio.cpp
More file actions
82 lines (61 loc) · 1.75 KB
/
Copy pathgpio.cpp
File metadata and controls
82 lines (61 loc) · 1.75 KB
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
#include <QFile>
#include "gpio.h"
void GPIO::direction(const QString &gpio, Direction direction)
{
QList <QString> list = gpio.split('|');
QFile file;
bool check;
int pin = list.value(0).toInt(&check);
if (!check || pin < 0)
return;
file.setFileName("/sys/class/gpio/export");
if (!file.open(QFile::WriteOnly))
return;
file.write(QString("%1\n").arg(pin).toUtf8());
file.close();
file.setFileName(QString("/sys/class/gpio/gpio%1/direction").arg(pin));
if (!file.open(QFile::WriteOnly))
return;
switch (direction)
{
case Input:
file.write("in");
break;
case Output:
file.write("out");
break;
}
file.close();
}
void GPIO::setStatus(const QString &gpio, bool status)
{
QList <QString> list = gpio.split('|');
QFile file;
bool check;
int pin = list.value(0).toInt(&check);
if (check && pin < 0)
return;
file.setFileName(check ? QString("/sys/class/gpio/gpio%1/value").arg(pin) : list.value(0));
if (!file.open(QFile::WriteOnly))
return;
if (list.value(1) == "invert")
status = status ? false : true;
file.write(status ? "1" : "0");
file.close();
}
bool GPIO::getStatus(const QString &gpio)
{
QList <QString> list = gpio.split('|');
QFile file;
bool check;
int pin = list.value(0).toInt(&check);
char status;
if (check && pin < 0)
return false;
file.setFileName(check ? QString("/sys/class/gpio/gpio%1/value").arg(pin) : list.value(0));
if (!file.open(QFile::ReadOnly))
return false;
file.read(&status, sizeof(status));
file.close();
return list.value(1) == "invert" ? status == '0' : status != '0';
}