2nd try

Dependents:   cuboid_balance

Committer:
altb2
Date:
Thu Feb 25 20:28:16 2021 +0000
Revision:
3:29602f4ade5c
First commit of Mirror actuato, still under construction, pins should be ok, next: check path planner;

Who changed what in which revision?

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