HDLC-Daemon
LockGuard.cpp
Go to the documentation of this file.
1 
24 #include "LockGuard.h"
25 #include "SerialPortHandler.h"
26 
32  // No active locks known on creation
33  m_bLockedBySelf = false;
34  m_bLockedByOthers = false;
35  m_bLastLockedBySelf = false;
36  m_bLastLockedByOthers = false;
37 }
38 
44  if (m_bLockedBySelf) {
45  m_SerialPortHandler->ResumeSerialPort();
46  } // if
47 }
48 
55 void LockGuard::Init(std::shared_ptr<SerialPortHandler> a_SerialPortHandler) {
56  // Checks
57  assert(m_bLockedBySelf == false);
58  assert(m_bLockedByOthers == false);
59  m_SerialPortHandler = a_SerialPortHandler;
60 }
61 
68  if (!m_bLockedBySelf) {
69  // Increases lock counter, may actually suspend the serial port
70  m_bLockedBySelf = true;
71  m_SerialPortHandler->SuspendSerialPort();
72  } // if
73 }
74 
81  if (m_bLockedBySelf) {
82  // Decreases lock counter, may actually resume the serial port
83  m_bLockedBySelf = false;
84  m_SerialPortHandler->ResumeSerialPort();
85  } // if
86 }
87 
96 bool LockGuard::UpdateSerialPortState(size_t a_LockHolders) {
97  // This call is caused by ourselves
98  if (m_bLockedBySelf) {
99  m_bLockedByOthers = (a_LockHolders > 1);
100  } else {
101  m_bLockedByOthers = (a_LockHolders > 0);
102  } // else
103 
104  if ((m_bLastLockedBySelf != m_bLockedBySelf) ||
105  (m_bLastLockedByOthers != m_bLockedByOthers)) {
106  m_bLastLockedBySelf = m_bLockedBySelf;
107  m_bLastLockedByOthers = m_bLockedByOthers;
108  return true;
109  } else {
110  return false;
111  } // else
112 }
~LockGuard()
The destructor of LockGuard objects.
Definition: LockGuard.cpp:43
bool UpdateSerialPortState(size_t a_LockHolders)
Update the effective lock state of the related serial port.
Definition: LockGuard.cpp:96
void Init(std::shared_ptr< SerialPortHandler > a_SerialPortHandler)
Initializer method to register subsequent objects.
Definition: LockGuard.cpp:55
LockGuard()
The constructor of LockGuard objects.
Definition: LockGuard.cpp:31
The HDLC Deamon implements the HDLC protocol to easily talk to devices connected via serial communica...
void AcquireLock()
Method to aquire a lock.
Definition: LockGuard.cpp:67
void ReleaseLock()
Method to release a lock.
Definition: LockGuard.cpp:80
This file contains the header declaration of class LockGuard.