-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMonitoredPin.cpp
More file actions
60 lines (46 loc) · 1.13 KB
/
Copy pathMonitoredPin.cpp
File metadata and controls
60 lines (46 loc) · 1.13 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
#include "MonitoredPin.h"
CMonitoredPin::CMonitoredPin(int pin, bool bInverted /* = false */)
:CInPin( pin, bInverted)
{
m_listClients.clear();
LatchState();
}
CMonitoredPin::~CMonitoredPin()
{
std::lock_guard<std::mutex> lock(m_mutex);
m_listClients.clear();
}
void CMonitoredPin::LatchState()
{
m_bState = GetState();
}
bool CMonitoredPin::StateChanged()
{
bool bNow = GetState();
return m_bState != bNow;
}
void CMonitoredPin::AddClient(CMonitoredPinClient* pClient)
{
std::lock_guard<std::mutex> lock(m_mutex);
m_listClients.push_back(pClient);
}
void CMonitoredPin::RemoveClient(CMonitoredPinClient* pClient)
{
std::lock_guard<std::mutex> lock(m_mutex);
m_listClients.remove(pClient);
}
void CMonitoredPin::CheckPinChanged()
{
if(StateChanged())
{
std::lock_guard<std::mutex> lock(m_mutex);
MonitoredPinClientList::iterator iterClients = m_listClients.begin();
while(iterClients != m_listClients.end())
{
CMonitoredPinClient* pClient = (CMonitoredPinClient*)(*iterClients);
pClient->PinChanged(this);
iterClients++;
}
LatchState();
}
}