AlbaniGang / Mbed 2 deprecated Rome_P3

Dependencies:   mbed

Committer:
stollpa1
Date:
Wed Apr 08 09:13:33 2020 +0000
Revision:
1:bba0ec7e075a
P4 init;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
stollpa1 1:bba0ec7e075a 1 /*
stollpa1 1:bba0ec7e075a 2 * ThreadFlag.cpp
stollpa1 1:bba0ec7e075a 3 * Copyright (c) 2020, ZHAW
stollpa1 1:bba0ec7e075a 4 * All rights reserved.
stollpa1 1:bba0ec7e075a 5 */
stollpa1 1:bba0ec7e075a 6
stollpa1 1:bba0ec7e075a 7 #include "ThreadFlag.h"
stollpa1 1:bba0ec7e075a 8
stollpa1 1:bba0ec7e075a 9 using namespace std;
stollpa1 1:bba0ec7e075a 10
stollpa1 1:bba0ec7e075a 11 unsigned int ThreadFlag::threadFlags = 0;
stollpa1 1:bba0ec7e075a 12
stollpa1 1:bba0ec7e075a 13 /**
stollpa1 1:bba0ec7e075a 14 * Creates a signal object and assignes a unique flag.
stollpa1 1:bba0ec7e075a 15 */
stollpa1 1:bba0ec7e075a 16 ThreadFlag::ThreadFlag() {
stollpa1 1:bba0ec7e075a 17
stollpa1 1:bba0ec7e075a 18 mutex.lock();
stollpa1 1:bba0ec7e075a 19
stollpa1 1:bba0ec7e075a 20 unsigned int n = 0;
stollpa1 1:bba0ec7e075a 21 while ((((1 << n) & threadFlags) > 0) && (n < 30)) n++;
stollpa1 1:bba0ec7e075a 22 threadFlag = (1 << n);
stollpa1 1:bba0ec7e075a 23
stollpa1 1:bba0ec7e075a 24 mutex.unlock();
stollpa1 1:bba0ec7e075a 25 }
stollpa1 1:bba0ec7e075a 26
stollpa1 1:bba0ec7e075a 27 /**
stollpa1 1:bba0ec7e075a 28 * Deletes the signal object and releases the assigned flag.
stollpa1 1:bba0ec7e075a 29 */
stollpa1 1:bba0ec7e075a 30 ThreadFlag::~ThreadFlag() {
stollpa1 1:bba0ec7e075a 31
stollpa1 1:bba0ec7e075a 32 mutex.lock();
stollpa1 1:bba0ec7e075a 33
stollpa1 1:bba0ec7e075a 34 threadFlags &= ~threadFlag;
stollpa1 1:bba0ec7e075a 35
stollpa1 1:bba0ec7e075a 36 mutex.unlock();
stollpa1 1:bba0ec7e075a 37 }
stollpa1 1:bba0ec7e075a 38
stollpa1 1:bba0ec7e075a 39 /**
stollpa1 1:bba0ec7e075a 40 * Gets the assigned thread flag.
stollpa1 1:bba0ec7e075a 41 */
stollpa1 1:bba0ec7e075a 42 unsigned int ThreadFlag::read() {
stollpa1 1:bba0ec7e075a 43
stollpa1 1:bba0ec7e075a 44 return threadFlag;
stollpa1 1:bba0ec7e075a 45 }
stollpa1 1:bba0ec7e075a 46
stollpa1 1:bba0ec7e075a 47 /**
stollpa1 1:bba0ec7e075a 48 * The empty operator is a shorthand notation of the <code>read()</code> method.
stollpa1 1:bba0ec7e075a 49 */
stollpa1 1:bba0ec7e075a 50 ThreadFlag::operator unsigned int() {
stollpa1 1:bba0ec7e075a 51
stollpa1 1:bba0ec7e075a 52 return read();
stollpa1 1:bba0ec7e075a 53 }
stollpa1 1:bba0ec7e075a 54