]> git.tdb.fi Git - r2c2.git/blob - source/libmarklin/sensor.cpp
Convert engineer to use mspgbase instead of SDL
[r2c2.git] / source / libmarklin / sensor.cpp
1 #include <msp/time/utils.h>
2 #include <msp/time/units.h>
3 #include "control.h"
4 #include "sensor.h"
5
6 using namespace Msp;
7
8 namespace Marklin {
9
10 Sensor::Sensor(Control &c, unsigned a):
11         control(c),
12         addr(a),
13         state(false)
14 {
15         control.add_sensor(*this);
16         control.signal_sensor_event.connect(sigc::mem_fun(this, &Sensor::sensor_event));
17 }
18
19 void Sensor::sensor_event(unsigned a, bool s)
20 {
21         if(a==addr)
22         {
23                 if(s)
24                 {
25                         off_timeout=Time::TimeStamp();
26                         if(s!=state)
27                         {
28                                 state=s;
29                                 signal_state_changed.emit(state);
30                         }
31                 }
32                 else
33                         off_timeout=Time::now()+0.5*Time::sec;
34         }
35 }
36
37 void Sensor::tick()
38 {
39         if(off_timeout)
40         {
41                 const Time::TimeStamp t=Time::now();
42                 if(t>off_timeout)
43                 {
44                         off_timeout=Time::TimeStamp();
45                         if(state)
46                         {
47                                 state=false;
48                                 signal_state_changed.emit(state);
49                         }
50                 }
51         }
52 }
53
54 } // namespace Marklin