corrections altb2

Dependencies:   FastPWM

Committer:
altb2
Date:
Sun May 02 19:32:30 2021 +0000
Revision:
0:d2e117716219
1st commit;

Who changed what in which revision?

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