FreeRTOS C++ Wrappers
1.6.0
C++ interface to FreeRTOS
ccondition_variable.cpp
Go to the documentation of this file.
1
/****************************************************************************
2
*
3
* Copyright (c) 2017, Michael Becker (michael.f.becker@gmail.com)
4
*
5
* This file is part of the FreeRTOS Add-ons project.
6
*
7
* Source Code:
8
* https://github.com/michaelbecker/freertos-addons
9
*
10
* Project Page:
11
* http://michaelbecker.github.io/freertos-addons/
12
*
13
* On-line Documentation:
14
* http://michaelbecker.github.io/freertos-addons/docs/html/index.html
15
*
16
* Permission is hereby granted, free of charge, to any person obtaining a
17
* copy of this software and associated documentation files
18
* (the "Software"), to deal in the Software without restriction, including
19
* without limitation the rights to use, copy, modify, merge, publish,
20
* distribute, sublicense, and/or sell copies of the Software, and to
21
* permit persons to whom the Software is furnished to do so,subject to the
22
* following conditions:
23
*
24
* + The above copyright notice and this permission notice shall be included
25
* in all copies or substantial portions of the Software.
26
* + Credit is appreciated, but not required, if you find this project
27
* useful enough to include in your application, product, device, etc.
28
*
29
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
30
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
31
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
32
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
33
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
34
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
35
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
36
*
37
***************************************************************************/
38
39
40
41
42
#include "
condition_variable.hpp
"
43
#include "
thread.hpp
"
44
45
46
#ifdef CPP_FREERTOS_CONDITION_VARIABLES
47
48
49
using namespace
cpp_freertos
;
50
51
52
ConditionVariable::ConditionVariable
()
53
: Lock(), WaitList()
54
{
55
}
56
57
58
void
ConditionVariable::AddToWaitList
(
Thread
*thread)
59
{
60
//
61
// Lock the internal condition variable state
62
//
63
Lock
.
Lock
();
64
65
//
66
// Add the thread to the condition variable wait list.
67
//
68
WaitList
.push_back(thread);
69
70
//
71
// Drop the internal condition variable lock.
72
//
73
Lock
.
Unlock
();
74
}
75
76
77
void
ConditionVariable::Signal
()
78
{
79
//
80
// Lock the internal condition variable state
81
//
82
Lock
.
Lock
();
83
84
if
( !
WaitList
.empty() ) {
85
86
Thread
*thr =
WaitList
.front();
87
WaitList
.pop_front();
88
thr->
Signal
();
89
}
90
91
//
92
// Drop the internal condition variable lock.
93
//
94
Lock
.
Unlock
();
95
}
96
97
98
void
ConditionVariable::Broadcast
()
99
{
100
//
101
// Lock the internal condition variable state
102
//
103
Lock
.
Lock
();
104
105
while
( !
WaitList
.empty() ) {
106
107
Thread
*thr =
WaitList
.front();
108
WaitList
.pop_front();
109
thr->
Signal
();
110
}
111
112
//
113
// Drop the internal condition variable lock.
114
//
115
Lock
.
Unlock
();
116
}
117
118
#endif
119
cpp_freertos::ConditionVariable::AddToWaitList
void AddToWaitList(Thread *thread)
Definition:
ccondition_variable.cpp:58
cpp_freertos::Thread
Definition:
thread.hpp:77
cpp_freertos::ConditionVariable::Broadcast
void Broadcast()
Definition:
ccondition_variable.cpp:98
condition_variable.hpp
cpp_freertos::MutexStandard::Unlock
virtual bool Unlock()
Definition:
cmutex.cpp:78
cpp_freertos::Thread::Signal
void Signal()
Definition:
thread.hpp:442
cpp_freertos::MutexStandard::Lock
virtual bool Lock(TickType_t Timeout=portMAX_DELAY)
Definition:
cmutex.cpp:71
cpp_freertos::ConditionVariable::WaitList
std::list< Thread * > WaitList
Definition:
condition_variable.hpp:116
cpp_freertos
Definition:
condition_variable.hpp:55
thread.hpp
cpp_freertos::ConditionVariable::Lock
MutexStandard Lock
Definition:
condition_variable.hpp:111
cpp_freertos::ConditionVariable::ConditionVariable
ConditionVariable()
Definition:
ccondition_variable.cpp:52
cpp_freertos::ConditionVariable::Signal
void Signal()
Definition:
ccondition_variable.cpp:77
Generated on Sat Oct 20 2018 15:06:50 for FreeRTOS C++ Wrappers by
1.8.13