blob: 8be35db11e7908bda88742070bf1b2e09610906a [file] [log] [blame]
/************************************************************************************
* Copyright (c) 2016 fortiss GmbH
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Milan Vathoopan, Guru Chandrasekhara - initial API and implementation and/or initial documentation
* Jose Cabral - Cleaning
************************************************************************************/
#ifndef SRC_ARCH_FREERTOS_THREAD_H_
#define SRC_ARCH_FREERTOS_THREAD_H_
#include "../datatype.h"
#include "../devlog.h"
#include "../../core/datatypes/forte_time.h"
#include "../threadbase.h"
#include "forte_sync.h"
extern "C" {
#include <FreeRTOS_Source/include/FreeRTOS.h>
#include <FreeRTOS_Source/include/task.h>
}
#define CThread CFreeRTOSThread //allows that doxygen can generate better documenation
class CFreeRTOSThread;
typedef CFreeRTOSThread *TFreeRTOSThreadPtr;
/** \defgroup FreeRTOS-HAL FreeRTOS FORTE Hardware Abstraction Layer
*\ingroup FORTE-HAL
* \brief The FORTE-HAL implementation for the FreeRTOS operating system.
*
*
*/
/*! \ingroup FreeRTOS-HAL
* \brief This class is a wrapper class the FreeRTOS multitasking support
*/
class CFreeRTOSThread : public forte::arch::CThreadBase<TaskHandle_t> {
public:
/*! \brief Constructor of the Thread class
*
* Does all the necessary steps in order to get the thread running with the start()-method
* @param pa_nStackSize the Size of the stack the thread is allowed to use. this class will
* allocate the stack size in bytes from the heap
*/
explicit CFreeRTOSThread(long paStackSize = configMINIMAL_STACK_SIZE);
/*! \brief Stops and destroys thread.
*
* Will stop the execution if running and destroy the thread including all system specific data.
*/
virtual ~CFreeRTOSThread();
//!Set the deadline of the thread.
void setDeadline(const CIEC_TIME &paVal);
/*! \brief Sleep the calling thread
*
* @param pa_miliSeconds The miliseconds for the thread to sleep
*/
static void sleepThread(unsigned int paMilliSeconds);
protected:
void setPriority(int paPriority){
DEVLOG_DEBUG(">>>>Thread: Set Priority: %d\n", paPriority);
vTaskPrioritySet(getThreadHandle(), paPriority);
}
private:
/*!\brief Function that is given to the system thread support that should be called for the thread.
*
* this function will call the run method of the thread instance.
* FreeRTOS requirement that this has to static function! or it has to static_casted
*/
static void threadFunction(void *paData);
/*! \brief Creates a new thread.
*
* With this function all the setup things for a new thread are done. The Thread created is initial
* suspended and with the start() method the execution of the code in the run() method is started.
*/
virtual TThreadHandleType createThread(long paStackSize);
static const int scmForteTaskPriority;
};
#endif /* SRC_ARCH_FREERTOS_THREAD_H_ */