Leosac
0.8.0
Open Source Access Control
FakeGPIO.cpp
Go to the documentation of this file.
1
/*
2
Copyright (C) 2014-2016 Leosac
3
4
This file is part of Leosac.
5
6
Leosac is free software: you can redistribute it and/or modify
7
it under the terms of the GNU Affero General Public License as published by
8
the Free Software Foundation, either version 3 of the License, or
9
(at your option) any later version.
10
11
Leosac is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
GNU Affero General Public License for more details.
15
16
You should have received a copy of the GNU Affero General Public License
17
along with this program. If not, see <http://www.gnu.org/licenses/>.
18
*/
19
20
#include "
FakeGPIO.hpp
"
21
22
using namespace
Leosac::Test::Helper
;
23
24
FakeGPIO::FakeGPIO
(zmqpp::context &ctx,
const
std::string &name)
25
: ctx_(ctx)
26
, name_(name)
27
, push_(ctx,
zmqpp
::socket_type::push)
28
, rep_(ctx,
zmqpp
::socket_type::rep)
29
, value_(false)
30
{
31
push_
.connect(
"inproc://zmq-bus-pull"
);
32
rep_
.bind(
"inproc://"
+ name);
33
}
34
35
void
FakeGPIO::interrupt
()
36
{
37
push_
.send(
"S_INT:"
+
name_
);
38
}
39
40
bool
FakeGPIO::run
(zmqpp::socket *pipe)
41
{
42
zmqpp::poller poller;
43
44
poller.add(*pipe);
45
poller.add(
rep_
);
46
47
pipe->send(zmqpp::signal::ok);
48
49
while
(
true
)
50
{
51
poller.poll(-1);
52
if
(poller.has_input(*pipe))
53
break
;
54
55
if
(poller.has_input(
rep_
))
56
{
57
handle_cmd
();
58
}
59
}
60
return
true
;
61
}
62
63
void
FakeGPIO::handle_cmd
()
64
{
65
zmqpp::message_t msg;
66
std::string frame1;
67
rep_
.receive(msg);
68
69
msg >> frame1;
70
if
(frame1 ==
"ON"
)
71
value_
=
true
;
72
else
if
(frame1 ==
"OFF"
)
73
value_
=
false
;
74
else
if
(frame1 ==
"TOGGLE"
)
75
value_
= !
value_
;
76
else
if
(frame1 ==
"STATE"
)
77
return
send_state
();
78
else
79
assert(0);
80
81
push_
.send(zmqpp::message() << (
"S_"
+
name_
) << (
value_
?
"ON"
:
"OFF"
));
82
rep_
.send(
"OK"
);
83
}
84
85
void
FakeGPIO::send_state
()
86
{
87
rep_
.send((
value_
?
"ON"
:
"OFF"
));
88
}
Leosac::Test::Helper::FakeGPIO::value_
bool value_
Definition:
FakeGPIO.hpp:68
Leosac::Test::Helper::FakeGPIO::push_
zmqpp::socket push_
Definition:
FakeGPIO.hpp:61
zmqpp
Definition:
CoreUtils.hpp:27
Leosac::Test::Helper::FakeGPIO::handle_cmd
void handle_cmd()
Definition:
FakeGPIO.cpp:63
Leosac::Test::Helper::FakeGPIO::interrupt
void interrupt()
Emulate an interrupt by writing to the message bus.
Definition:
FakeGPIO.cpp:35
FakeGPIO.hpp
Leosac::Test::Helper::FakeGPIO::send_state
void send_state()
Definition:
FakeGPIO.cpp:85
Leosac::Test::Helper::FakeGPIO::name_
std::string name_
Definition:
FakeGPIO.hpp:60
Leosac::Test::Helper::FakeGPIO::FakeGPIO
FakeGPIO(zmqpp::context &ctx, const std::string &name)
Definition:
FakeGPIO.cpp:24
Leosac::Test::Helper::FakeGPIO::rep_
zmqpp::socket rep_
Receive command here.
Definition:
FakeGPIO.hpp:66
Leosac::Test::Helper
Unit testing utility class that helps writing test.
Definition:
FakeGPIO.hpp:28
Leosac::Test::Helper::FakeGPIO::run
bool run(zmqpp::socket *pipe)
if you want the GPIO in "passive" mode (ie to watch event generated BY the device),...
Definition:
FakeGPIO.cpp:40
test
helper
FakeGPIO.cpp
Generated on Tue Mar 22 2022 10:48:33 for Leosac by
1.8.17