ELEC2645 (2018/19) / Mbed 2 deprecated el17dg

Dependencies:   mbed

Fork of el17dg by Dmitrijs Griskovs

Committer:
Noximilien
Date:
Tue May 07 15:22:35 2019 +0000
Revision:
40:e3bbda7444fa
Parent:
1:5aa2312d3e94
The Final, Submission Version. I have read and agreed to the academic integrity. SID:201160286

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Noximilien 1:5aa2312d3e94 1 /* mbed Microcontroller Library
Noximilien 1:5aa2312d3e94 2 * Copyright (c) 2006-2012 ARM Limited
Noximilien 1:5aa2312d3e94 3 *
Noximilien 1:5aa2312d3e94 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
Noximilien 1:5aa2312d3e94 5 * of this software and associated documentation files (the "Software"), to deal
Noximilien 1:5aa2312d3e94 6 * in the Software without restriction, including without limitation the rights
Noximilien 1:5aa2312d3e94 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
Noximilien 1:5aa2312d3e94 8 * copies of the Software, and to permit persons to whom the Software is
Noximilien 1:5aa2312d3e94 9 * furnished to do so, subject to the following conditions:
Noximilien 1:5aa2312d3e94 10 *
Noximilien 1:5aa2312d3e94 11 * The above copyright notice and this permission notice shall be included in
Noximilien 1:5aa2312d3e94 12 * all copies or substantial portions of the Software.
Noximilien 1:5aa2312d3e94 13 *
Noximilien 1:5aa2312d3e94 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Noximilien 1:5aa2312d3e94 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Noximilien 1:5aa2312d3e94 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Noximilien 1:5aa2312d3e94 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Noximilien 1:5aa2312d3e94 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Noximilien 1:5aa2312d3e94 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
Noximilien 1:5aa2312d3e94 20 * SOFTWARE.
Noximilien 1:5aa2312d3e94 21 */
Noximilien 1:5aa2312d3e94 22 #ifndef THREAD_H
Noximilien 1:5aa2312d3e94 23 #define THREAD_H
Noximilien 1:5aa2312d3e94 24
Noximilien 1:5aa2312d3e94 25 #include <stdint.h>
Noximilien 1:5aa2312d3e94 26 #include "cmsis_os.h"
Noximilien 1:5aa2312d3e94 27 #include "platform/Callback.h"
Noximilien 1:5aa2312d3e94 28 #include "platform/toolchain.h"
Noximilien 1:5aa2312d3e94 29 #include "rtos/Semaphore.h"
Noximilien 1:5aa2312d3e94 30 #include "rtos/Mutex.h"
Noximilien 1:5aa2312d3e94 31
Noximilien 1:5aa2312d3e94 32 namespace rtos {
Noximilien 1:5aa2312d3e94 33 /** \addtogroup rtos */
Noximilien 1:5aa2312d3e94 34 /** @{*/
Noximilien 1:5aa2312d3e94 35
Noximilien 1:5aa2312d3e94 36 /** The Thread class allow defining, creating, and controlling thread functions in the system.
Noximilien 1:5aa2312d3e94 37 *
Noximilien 1:5aa2312d3e94 38 * Example:
Noximilien 1:5aa2312d3e94 39 * @code
Noximilien 1:5aa2312d3e94 40 * #include "mbed.h"
Noximilien 1:5aa2312d3e94 41 * #include "rtos.h"
Noximilien 1:5aa2312d3e94 42 *
Noximilien 1:5aa2312d3e94 43 * Thread thread;
Noximilien 1:5aa2312d3e94 44 * DigitalOut led1(LED1);
Noximilien 1:5aa2312d3e94 45 * volatile bool running = true;
Noximilien 1:5aa2312d3e94 46 *
Noximilien 1:5aa2312d3e94 47 * // Blink function toggles the led in a long running loop
Noximilien 1:5aa2312d3e94 48 * void blink(DigitalOut *led) {
Noximilien 1:5aa2312d3e94 49 * while (running) {
Noximilien 1:5aa2312d3e94 50 * *led = !*led;
Noximilien 1:5aa2312d3e94 51 * Thread::wait(1000);
Noximilien 1:5aa2312d3e94 52 * }
Noximilien 1:5aa2312d3e94 53 * }
Noximilien 1:5aa2312d3e94 54 *
Noximilien 1:5aa2312d3e94 55 * // Spawns a thread to run blink for 5 seconds
Noximilien 1:5aa2312d3e94 56 * int main() {
Noximilien 1:5aa2312d3e94 57 * thread.start(led1, blink);
Noximilien 1:5aa2312d3e94 58 * Thread::wait(5000);
Noximilien 1:5aa2312d3e94 59 * running = false;
Noximilien 1:5aa2312d3e94 60 * thread.join();
Noximilien 1:5aa2312d3e94 61 * }
Noximilien 1:5aa2312d3e94 62 * @endcode
Noximilien 1:5aa2312d3e94 63 */
Noximilien 1:5aa2312d3e94 64 class Thread {
Noximilien 1:5aa2312d3e94 65 public:
Noximilien 1:5aa2312d3e94 66 /** Allocate a new thread without starting execution
Noximilien 1:5aa2312d3e94 67 @param priority initial priority of the thread function. (default: osPriorityNormal).
Noximilien 1:5aa2312d3e94 68 @param stack_size stack size (in bytes) requirements for the thread function. (default: DEFAULT_STACK_SIZE).
Noximilien 1:5aa2312d3e94 69 @param stack_pointer pointer to the stack area to be used by this thread (default: NULL).
Noximilien 1:5aa2312d3e94 70 */
Noximilien 1:5aa2312d3e94 71 Thread(osPriority priority=osPriorityNormal,
Noximilien 1:5aa2312d3e94 72 uint32_t stack_size=DEFAULT_STACK_SIZE,
Noximilien 1:5aa2312d3e94 73 unsigned char *stack_pointer=NULL) {
Noximilien 1:5aa2312d3e94 74 constructor(priority, stack_size, stack_pointer);
Noximilien 1:5aa2312d3e94 75 }
Noximilien 1:5aa2312d3e94 76
Noximilien 1:5aa2312d3e94 77 /** Create a new thread, and start it executing the specified function.
Noximilien 1:5aa2312d3e94 78 @param task function to be executed by this thread.
Noximilien 1:5aa2312d3e94 79 @param argument pointer that is passed to the thread function as start argument. (default: NULL).
Noximilien 1:5aa2312d3e94 80 @param priority initial priority of the thread function. (default: osPriorityNormal).
Noximilien 1:5aa2312d3e94 81 @param stack_size stack size (in bytes) requirements for the thread function. (default: DEFAULT_STACK_SIZE).
Noximilien 1:5aa2312d3e94 82 @param stack_pointer pointer to the stack area to be used by this thread (default: NULL).
Noximilien 1:5aa2312d3e94 83 @deprecated
Noximilien 1:5aa2312d3e94 84 Thread-spawning constructors hide errors. Replaced by thread.start(task).
Noximilien 1:5aa2312d3e94 85
Noximilien 1:5aa2312d3e94 86 @code
Noximilien 1:5aa2312d3e94 87 Thread thread(priority, stack_size, stack_pointer);
Noximilien 1:5aa2312d3e94 88
Noximilien 1:5aa2312d3e94 89 osStatus status = thread.start(task);
Noximilien 1:5aa2312d3e94 90 if (status != osOK) {
Noximilien 1:5aa2312d3e94 91 error("oh no!");
Noximilien 1:5aa2312d3e94 92 }
Noximilien 1:5aa2312d3e94 93 @endcode
Noximilien 1:5aa2312d3e94 94 */
Noximilien 1:5aa2312d3e94 95 MBED_DEPRECATED_SINCE("mbed-os-5.1",
Noximilien 1:5aa2312d3e94 96 "Thread-spawning constructors hide errors. "
Noximilien 1:5aa2312d3e94 97 "Replaced by thread.start(task).")
Noximilien 1:5aa2312d3e94 98 Thread(mbed::Callback<void()> task,
Noximilien 1:5aa2312d3e94 99 osPriority priority=osPriorityNormal,
Noximilien 1:5aa2312d3e94 100 uint32_t stack_size=DEFAULT_STACK_SIZE,
Noximilien 1:5aa2312d3e94 101 unsigned char *stack_pointer=NULL) {
Noximilien 1:5aa2312d3e94 102 constructor(task, priority, stack_size, stack_pointer);
Noximilien 1:5aa2312d3e94 103 }
Noximilien 1:5aa2312d3e94 104
Noximilien 1:5aa2312d3e94 105 /** Create a new thread, and start it executing the specified function.
Noximilien 1:5aa2312d3e94 106 @param obj argument to task.
Noximilien 1:5aa2312d3e94 107 @param method function to be executed by this thread.
Noximilien 1:5aa2312d3e94 108 @param argument pointer that is passed to the thread function as start argument. (default: NULL).
Noximilien 1:5aa2312d3e94 109 @param priority initial priority of the thread function. (default: osPriorityNormal).
Noximilien 1:5aa2312d3e94 110 @param stack_size stack size (in bytes) requirements for the thread function. (default: DEFAULT_STACK_SIZE).
Noximilien 1:5aa2312d3e94 111 @param stack_pointer pointer to the stack area to be used by this thread (default: NULL).
Noximilien 1:5aa2312d3e94 112 @deprecated
Noximilien 1:5aa2312d3e94 113 Thread-spawning constructors hide errors. Replaced by thread.start(callback(task, argument)).
Noximilien 1:5aa2312d3e94 114
Noximilien 1:5aa2312d3e94 115 @code
Noximilien 1:5aa2312d3e94 116 Thread thread(priority, stack_size, stack_pointer);
Noximilien 1:5aa2312d3e94 117
Noximilien 1:5aa2312d3e94 118 osStatus status = thread.start(callback(task, argument));
Noximilien 1:5aa2312d3e94 119 if (status != osOK) {
Noximilien 1:5aa2312d3e94 120 error("oh no!");
Noximilien 1:5aa2312d3e94 121 }
Noximilien 1:5aa2312d3e94 122 @endcode
Noximilien 1:5aa2312d3e94 123 */
Noximilien 1:5aa2312d3e94 124 template <typename T>
Noximilien 1:5aa2312d3e94 125 MBED_DEPRECATED_SINCE("mbed-os-5.1",
Noximilien 1:5aa2312d3e94 126 "Thread-spawning constructors hide errors. "
Noximilien 1:5aa2312d3e94 127 "Replaced by thread.start(callback(task, argument)).")
Noximilien 1:5aa2312d3e94 128 Thread(T *argument, void (T::*task)(),
Noximilien 1:5aa2312d3e94 129 osPriority priority=osPriorityNormal,
Noximilien 1:5aa2312d3e94 130 uint32_t stack_size=DEFAULT_STACK_SIZE,
Noximilien 1:5aa2312d3e94 131 unsigned char *stack_pointer=NULL) {
Noximilien 1:5aa2312d3e94 132 constructor(mbed::callback(task, argument),
Noximilien 1:5aa2312d3e94 133 priority, stack_size, stack_pointer);
Noximilien 1:5aa2312d3e94 134 }
Noximilien 1:5aa2312d3e94 135
Noximilien 1:5aa2312d3e94 136 /** Create a new thread, and start it executing the specified function.
Noximilien 1:5aa2312d3e94 137 @param obj argument to task.
Noximilien 1:5aa2312d3e94 138 @param method function to be executed by this thread.
Noximilien 1:5aa2312d3e94 139 @param argument pointer that is passed to the thread function as start argument. (default: NULL).
Noximilien 1:5aa2312d3e94 140 @param priority initial priority of the thread function. (default: osPriorityNormal).
Noximilien 1:5aa2312d3e94 141 @param stack_size stack size (in bytes) requirements for the thread function. (default: DEFAULT_STACK_SIZE).
Noximilien 1:5aa2312d3e94 142 @param stack_pointer pointer to the stack area to be used by this thread (default: NULL).
Noximilien 1:5aa2312d3e94 143 @deprecated
Noximilien 1:5aa2312d3e94 144 Thread-spawning constructors hide errors. Replaced by thread.start(callback(task, argument)).
Noximilien 1:5aa2312d3e94 145
Noximilien 1:5aa2312d3e94 146 @code
Noximilien 1:5aa2312d3e94 147 Thread thread(priority, stack_size, stack_pointer);
Noximilien 1:5aa2312d3e94 148
Noximilien 1:5aa2312d3e94 149 osStatus status = thread.start(callback(task, argument));
Noximilien 1:5aa2312d3e94 150 if (status != osOK) {
Noximilien 1:5aa2312d3e94 151 error("oh no!");
Noximilien 1:5aa2312d3e94 152 }
Noximilien 1:5aa2312d3e94 153 @endcode
Noximilien 1:5aa2312d3e94 154 */
Noximilien 1:5aa2312d3e94 155 template <typename T>
Noximilien 1:5aa2312d3e94 156 MBED_DEPRECATED_SINCE("mbed-os-5.1",
Noximilien 1:5aa2312d3e94 157 "Thread-spawning constructors hide errors. "
Noximilien 1:5aa2312d3e94 158 "Replaced by thread.start(callback(task, argument)).")
Noximilien 1:5aa2312d3e94 159 Thread(T *argument, void (*task)(T *),
Noximilien 1:5aa2312d3e94 160 osPriority priority=osPriorityNormal,
Noximilien 1:5aa2312d3e94 161 uint32_t stack_size=DEFAULT_STACK_SIZE,
Noximilien 1:5aa2312d3e94 162 unsigned char *stack_pointer=NULL) {
Noximilien 1:5aa2312d3e94 163 constructor(mbed::callback(task, argument),
Noximilien 1:5aa2312d3e94 164 priority, stack_size, stack_pointer);
Noximilien 1:5aa2312d3e94 165 }
Noximilien 1:5aa2312d3e94 166
Noximilien 1:5aa2312d3e94 167 /** Create a new thread, and start it executing the specified function.
Noximilien 1:5aa2312d3e94 168 Provided for backwards compatibility
Noximilien 1:5aa2312d3e94 169 @param task function to be executed by this thread.
Noximilien 1:5aa2312d3e94 170 @param argument pointer that is passed to the thread function as start argument. (default: NULL).
Noximilien 1:5aa2312d3e94 171 @param priority initial priority of the thread function. (default: osPriorityNormal).
Noximilien 1:5aa2312d3e94 172 @param stack_size stack size (in bytes) requirements for the thread function. (default: DEFAULT_STACK_SIZE).
Noximilien 1:5aa2312d3e94 173 @param stack_pointer pointer to the stack area to be used by this thread (default: NULL).
Noximilien 1:5aa2312d3e94 174 @deprecated
Noximilien 1:5aa2312d3e94 175 Thread-spawning constructors hide errors. Replaced by thread.start(callback(task, argument)).
Noximilien 1:5aa2312d3e94 176
Noximilien 1:5aa2312d3e94 177 @code
Noximilien 1:5aa2312d3e94 178 Thread thread(priority, stack_size, stack_pointer);
Noximilien 1:5aa2312d3e94 179
Noximilien 1:5aa2312d3e94 180 osStatus status = thread.start(callback(task, argument));
Noximilien 1:5aa2312d3e94 181 if (status != osOK) {
Noximilien 1:5aa2312d3e94 182 error("oh no!");
Noximilien 1:5aa2312d3e94 183 }
Noximilien 1:5aa2312d3e94 184 @endcode
Noximilien 1:5aa2312d3e94 185 */
Noximilien 1:5aa2312d3e94 186 MBED_DEPRECATED_SINCE("mbed-os-5.1",
Noximilien 1:5aa2312d3e94 187 "Thread-spawning constructors hide errors. "
Noximilien 1:5aa2312d3e94 188 "Replaced by thread.start(callback(task, argument)).")
Noximilien 1:5aa2312d3e94 189 Thread(void (*task)(void const *argument), void *argument=NULL,
Noximilien 1:5aa2312d3e94 190 osPriority priority=osPriorityNormal,
Noximilien 1:5aa2312d3e94 191 uint32_t stack_size=DEFAULT_STACK_SIZE,
Noximilien 1:5aa2312d3e94 192 unsigned char *stack_pointer=NULL) {
Noximilien 1:5aa2312d3e94 193 constructor(mbed::callback((void (*)(void *))task, argument),
Noximilien 1:5aa2312d3e94 194 priority, stack_size, stack_pointer);
Noximilien 1:5aa2312d3e94 195 }
Noximilien 1:5aa2312d3e94 196
Noximilien 1:5aa2312d3e94 197 /** Starts a thread executing the specified function.
Noximilien 1:5aa2312d3e94 198 @param task function to be executed by this thread.
Noximilien 1:5aa2312d3e94 199 @return status code that indicates the execution status of the function.
Noximilien 1:5aa2312d3e94 200 */
Noximilien 1:5aa2312d3e94 201 osStatus start(mbed::Callback<void()> task);
Noximilien 1:5aa2312d3e94 202
Noximilien 1:5aa2312d3e94 203 /** Starts a thread executing the specified function.
Noximilien 1:5aa2312d3e94 204 @param obj argument to task
Noximilien 1:5aa2312d3e94 205 @param method function to be executed by this thread.
Noximilien 1:5aa2312d3e94 206 @return status code that indicates the execution status of the function.
Noximilien 1:5aa2312d3e94 207 @deprecated
Noximilien 1:5aa2312d3e94 208 The start function does not support cv-qualifiers. Replaced by start(callback(obj, method)).
Noximilien 1:5aa2312d3e94 209 */
Noximilien 1:5aa2312d3e94 210 template <typename T, typename M>
Noximilien 1:5aa2312d3e94 211 MBED_DEPRECATED_SINCE("mbed-os-5.1",
Noximilien 1:5aa2312d3e94 212 "The start function does not support cv-qualifiers. "
Noximilien 1:5aa2312d3e94 213 "Replaced by thread.start(callback(obj, method)).")
Noximilien 1:5aa2312d3e94 214 osStatus start(T *obj, M method) {
Noximilien 1:5aa2312d3e94 215 return start(mbed::callback(obj, method));
Noximilien 1:5aa2312d3e94 216 }
Noximilien 1:5aa2312d3e94 217
Noximilien 1:5aa2312d3e94 218 /** Wait for thread to terminate
Noximilien 1:5aa2312d3e94 219 @return status code that indicates the execution status of the function.
Noximilien 1:5aa2312d3e94 220 @note not callable from interrupt
Noximilien 1:5aa2312d3e94 221 */
Noximilien 1:5aa2312d3e94 222 osStatus join();
Noximilien 1:5aa2312d3e94 223
Noximilien 1:5aa2312d3e94 224 /** Terminate execution of a thread and remove it from Active Threads
Noximilien 1:5aa2312d3e94 225 @return status code that indicates the execution status of the function.
Noximilien 1:5aa2312d3e94 226 */
Noximilien 1:5aa2312d3e94 227 osStatus terminate();
Noximilien 1:5aa2312d3e94 228
Noximilien 1:5aa2312d3e94 229 /** Set priority of an active thread
Noximilien 1:5aa2312d3e94 230 @param priority new priority value for the thread function.
Noximilien 1:5aa2312d3e94 231 @return status code that indicates the execution status of the function.
Noximilien 1:5aa2312d3e94 232 */
Noximilien 1:5aa2312d3e94 233 osStatus set_priority(osPriority priority);
Noximilien 1:5aa2312d3e94 234
Noximilien 1:5aa2312d3e94 235 /** Get priority of an active thread
Noximilien 1:5aa2312d3e94 236 @return current priority value of the thread function.
Noximilien 1:5aa2312d3e94 237 */
Noximilien 1:5aa2312d3e94 238 osPriority get_priority();
Noximilien 1:5aa2312d3e94 239
Noximilien 1:5aa2312d3e94 240 /** Set the specified Signal Flags of an active thread.
Noximilien 1:5aa2312d3e94 241 @param signals specifies the signal flags of the thread that should be set.
Noximilien 1:5aa2312d3e94 242 @return previous signal flags of the specified thread or 0x80000000 in case of incorrect parameters.
Noximilien 1:5aa2312d3e94 243 */
Noximilien 1:5aa2312d3e94 244 int32_t signal_set(int32_t signals);
Noximilien 1:5aa2312d3e94 245
Noximilien 1:5aa2312d3e94 246 /** Clears the specified Signal Flags of an active thread.
Noximilien 1:5aa2312d3e94 247 @param signals specifies the signal flags of the thread that should be cleared.
Noximilien 1:5aa2312d3e94 248 @return resultant signal flags of the specified thread or 0x80000000 in case of incorrect parameters.
Noximilien 1:5aa2312d3e94 249 */
Noximilien 1:5aa2312d3e94 250 int32_t signal_clr(int32_t signals);
Noximilien 1:5aa2312d3e94 251
Noximilien 1:5aa2312d3e94 252 /** State of the Thread */
Noximilien 1:5aa2312d3e94 253 enum State {
Noximilien 1:5aa2312d3e94 254 Inactive, /**< Not created or terminated */
Noximilien 1:5aa2312d3e94 255 Ready, /**< Ready to run */
Noximilien 1:5aa2312d3e94 256 Running, /**< Running */
Noximilien 1:5aa2312d3e94 257 WaitingDelay, /**< Waiting for a delay to occur */
Noximilien 1:5aa2312d3e94 258 WaitingInterval, /**< Waiting for an interval to occur */
Noximilien 1:5aa2312d3e94 259 WaitingOr, /**< Waiting for one event in a set to occur */
Noximilien 1:5aa2312d3e94 260 WaitingAnd, /**< Waiting for multiple events in a set to occur */
Noximilien 1:5aa2312d3e94 261 WaitingSemaphore, /**< Waiting for a semaphore event to occur */
Noximilien 1:5aa2312d3e94 262 WaitingMailbox, /**< Waiting for a mailbox event to occur */
Noximilien 1:5aa2312d3e94 263 WaitingMutex, /**< Waiting for a mutex event to occur */
Noximilien 1:5aa2312d3e94 264
Noximilien 1:5aa2312d3e94 265 /* Not in sync with RTX below here */
Noximilien 1:5aa2312d3e94 266 Deleted, /**< The task has been deleted */
Noximilien 1:5aa2312d3e94 267 };
Noximilien 1:5aa2312d3e94 268
Noximilien 1:5aa2312d3e94 269 /** State of this Thread
Noximilien 1:5aa2312d3e94 270 @return the State of this Thread
Noximilien 1:5aa2312d3e94 271 */
Noximilien 1:5aa2312d3e94 272 State get_state();
Noximilien 1:5aa2312d3e94 273
Noximilien 1:5aa2312d3e94 274 /** Get the total stack memory size for this Thread
Noximilien 1:5aa2312d3e94 275 @return the total stack memory size in bytes
Noximilien 1:5aa2312d3e94 276 */
Noximilien 1:5aa2312d3e94 277 uint32_t stack_size();
Noximilien 1:5aa2312d3e94 278
Noximilien 1:5aa2312d3e94 279 /** Get the currently unused stack memory for this Thread
Noximilien 1:5aa2312d3e94 280 @return the currently unused stack memory in bytes
Noximilien 1:5aa2312d3e94 281 */
Noximilien 1:5aa2312d3e94 282 uint32_t free_stack();
Noximilien 1:5aa2312d3e94 283
Noximilien 1:5aa2312d3e94 284 /** Get the currently used stack memory for this Thread
Noximilien 1:5aa2312d3e94 285 @return the currently used stack memory in bytes
Noximilien 1:5aa2312d3e94 286 */
Noximilien 1:5aa2312d3e94 287 uint32_t used_stack();
Noximilien 1:5aa2312d3e94 288
Noximilien 1:5aa2312d3e94 289 /** Get the maximum stack memory usage to date for this Thread
Noximilien 1:5aa2312d3e94 290 @return the maximum stack memory usage to date in bytes
Noximilien 1:5aa2312d3e94 291 */
Noximilien 1:5aa2312d3e94 292 uint32_t max_stack();
Noximilien 1:5aa2312d3e94 293
Noximilien 1:5aa2312d3e94 294 /** Wait for one or more Signal Flags to become signaled for the current RUNNING thread.
Noximilien 1:5aa2312d3e94 295 @param signals wait until all specified signal flags set or 0 for any single signal flag.
Noximilien 1:5aa2312d3e94 296 @param millisec timeout value or 0 in case of no time-out. (default: osWaitForever).
Noximilien 1:5aa2312d3e94 297 @return event flag information or error code.
Noximilien 1:5aa2312d3e94 298 @note not callable from interrupt
Noximilien 1:5aa2312d3e94 299 */
Noximilien 1:5aa2312d3e94 300 static osEvent signal_wait(int32_t signals, uint32_t millisec=osWaitForever);
Noximilien 1:5aa2312d3e94 301
Noximilien 1:5aa2312d3e94 302 /** Wait for a specified time period in millisec:
Noximilien 1:5aa2312d3e94 303 @param millisec time delay value
Noximilien 1:5aa2312d3e94 304 @return status code that indicates the execution status of the function.
Noximilien 1:5aa2312d3e94 305 @note not callable from interrupt
Noximilien 1:5aa2312d3e94 306 */
Noximilien 1:5aa2312d3e94 307 static osStatus wait(uint32_t millisec);
Noximilien 1:5aa2312d3e94 308
Noximilien 1:5aa2312d3e94 309 /** Pass control to next thread that is in state READY.
Noximilien 1:5aa2312d3e94 310 @return status code that indicates the execution status of the function.
Noximilien 1:5aa2312d3e94 311 @note not callable from interrupt
Noximilien 1:5aa2312d3e94 312 */
Noximilien 1:5aa2312d3e94 313 static osStatus yield();
Noximilien 1:5aa2312d3e94 314
Noximilien 1:5aa2312d3e94 315 /** Get the thread id of the current running thread.
Noximilien 1:5aa2312d3e94 316 @return thread ID for reference by other functions or NULL in case of error.
Noximilien 1:5aa2312d3e94 317 */
Noximilien 1:5aa2312d3e94 318 static osThreadId gettid();
Noximilien 1:5aa2312d3e94 319
Noximilien 1:5aa2312d3e94 320 /** Attach a function to be called by the RTOS idle task
Noximilien 1:5aa2312d3e94 321 @param fptr pointer to the function to be called
Noximilien 1:5aa2312d3e94 322 */
Noximilien 1:5aa2312d3e94 323 static void attach_idle_hook(void (*fptr)(void));
Noximilien 1:5aa2312d3e94 324
Noximilien 1:5aa2312d3e94 325 /** Attach a function to be called when a task is killed
Noximilien 1:5aa2312d3e94 326 @param fptr pointer to the function to be called
Noximilien 1:5aa2312d3e94 327 */
Noximilien 1:5aa2312d3e94 328 static void attach_terminate_hook(void (*fptr)(osThreadId id));
Noximilien 1:5aa2312d3e94 329
Noximilien 1:5aa2312d3e94 330 virtual ~Thread();
Noximilien 1:5aa2312d3e94 331
Noximilien 1:5aa2312d3e94 332 private:
Noximilien 1:5aa2312d3e94 333 // Required to share definitions without
Noximilien 1:5aa2312d3e94 334 // delegated constructors
Noximilien 1:5aa2312d3e94 335 void constructor(osPriority priority=osPriorityNormal,
Noximilien 1:5aa2312d3e94 336 uint32_t stack_size=DEFAULT_STACK_SIZE,
Noximilien 1:5aa2312d3e94 337 unsigned char *stack_pointer=NULL);
Noximilien 1:5aa2312d3e94 338 void constructor(mbed::Callback<void()> task,
Noximilien 1:5aa2312d3e94 339 osPriority priority=osPriorityNormal,
Noximilien 1:5aa2312d3e94 340 uint32_t stack_size=DEFAULT_STACK_SIZE,
Noximilien 1:5aa2312d3e94 341 unsigned char *stack_pointer=NULL);
Noximilien 1:5aa2312d3e94 342 static void _thunk(const void * thread_ptr);
Noximilien 1:5aa2312d3e94 343
Noximilien 1:5aa2312d3e94 344 mbed::Callback<void()> _task;
Noximilien 1:5aa2312d3e94 345 osThreadId _tid;
Noximilien 1:5aa2312d3e94 346 osThreadDef_t _thread_def;
Noximilien 1:5aa2312d3e94 347 bool _dynamic_stack;
Noximilien 1:5aa2312d3e94 348 Semaphore _join_sem;
Noximilien 1:5aa2312d3e94 349 Mutex _mutex;
Noximilien 1:5aa2312d3e94 350 };
Noximilien 1:5aa2312d3e94 351
Noximilien 1:5aa2312d3e94 352 }
Noximilien 1:5aa2312d3e94 353 #endif
Noximilien 1:5aa2312d3e94 354
Noximilien 1:5aa2312d3e94 355 /** @}*/