]> git.donarmstrong.com Git - qmk_firmware.git/blob - tmk_core/tool/mbed/mbed-sdk/libraries/rtos/rtos/Semaphore.h
Merge commit '1fe4406f374291ab2e86e95a97341fd9c475fcb8'
[qmk_firmware.git] / tmk_core / tool / mbed / mbed-sdk / libraries / rtos / rtos / Semaphore.h
1 /* mbed Microcontroller Library
2  * Copyright (c) 2006-2012 ARM Limited
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a copy
5  * of this software and associated documentation files (the "Software"), to deal
6  * in the Software without restriction, including without limitation the rights
7  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8  * copies of the Software, and to permit persons to whom the Software is
9  * furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20  * SOFTWARE.
21  */
22 #ifndef SEMAPHORE_H
23 #define SEMAPHORE_H
24
25 #include <stdint.h>
26 #include "cmsis_os.h"
27
28 namespace rtos {
29
30 /** The Semaphore class is used to manage and protect access to a set of shared resources. */
31 class Semaphore {
32 public:
33     /** Create and Initialize a Semaphore object used for managing resources.
34       @param number of available resources; maximum index value is (count-1).
35     */
36     Semaphore(int32_t count);
37
38     /** Wait until a Semaphore resource becomes available.
39       @param   millisec  timeout value or 0 in case of no time-out. (default: osWaitForever).
40       @return  number of available tokens, or -1 in case of incorrect parameters
41     */
42     int32_t wait(uint32_t millisec=osWaitForever);
43
44     /** Release a Semaphore resource that was obtain with Semaphore::wait.
45       @return  status code that indicates the execution status of the function.
46     */
47     osStatus release(void);
48
49     ~Semaphore();
50
51 private:
52     osSemaphoreId _osSemaphoreId;
53     osSemaphoreDef_t _osSemaphoreDef;
54 #ifdef CMSIS_OS_RTX
55     uint32_t _semaphore_data[2];
56 #endif
57 };
58
59 }
60 #endif