1
0
This repository has been archived on 2024-01-25. You can view files and clone it, but cannot push or open issues or pull requests.
Files
RealtimeOscilloscope/src/xf/port/stm32cube-cmsis-freertos/timeoutmanager.h
2023-11-28 14:19:36 +01:00

61 lines
2.0 KiB
C++

#ifndef XF_PORT_STM32CUBE_CMSIS_FREERTOS_TIMEOUTMANAGER_H
#define XF_PORT_STM32CUBE_CMSIS_FREERTOS_TIMEOUTMANAGER_H
#include <list>
#include <config/xf-config.h>
#if (USE_XF_PORT_STM32CUBE_CMSIS_FREERTOS_TIMEOUTMANAGER_IMPLEMENTATION != 0)
#include <cmsis_os.h>
#include "xf/interface/timeoutmanager.h"
#include "xf/timeout.h"
#include "mutex-default.h"
/**
* Default implementation of the XF TimeoutManager
*/
class XFTimeoutManagerPort : public interface::XFTimeoutManager
{
friend interface::XFTimeoutManager * interface::XFTimeoutManager::getInstance();
public:
virtual ~XFTimeoutManagerPort();
static interface::XFTimeoutManager * getInstance();
virtual void start();
virtual void scheduleTimeout(int32_t timeoutId, int32_t interval, interface::XFReactive * pReactive);
virtual void unscheduleTimeout(int32_t timeoutId, interface::XFReactive * pReactive);
virtual void tick();
protected:
XFTimeoutManagerPort();
virtual void addTimeout(XFTimeout * pNewTimeout); ///< Adds the timeout to #_timeouts.
/**
* Removes all timeouts corresponding the given parameters.
*/
virtual void removeTimeouts(int32_t timeoutId, interface::XFReactive * pReactive);
/**
* Returns the timeout back to the queue of the thread executing
* the behavioral instance.
*/
void returnTimeout(XFTimeout * pTimeout); ///< Returns timeout back to behavioral class.
static void timerCallback(void * argument); ///< Callback "function" needed by OS timer.
protected:
typedef std::list<XFTimeout *> TimeoutList; ///< Type used for the _timeouts property.
TimeoutList _timeouts; ///< Container holding timeouts to manage.
osTimerAttr_t _osTimerAttr; ///< Timer definition
osTimerFunc_t _osTimerFunc; ///< Variable containing the callback to tick()
osTimerId _osTimerId; ///< OS timer used to handle timeouts.
XFMutexDefault _mutex; ///< Mutex to protect the timeout list.
};
#endif // USE_XF_PORT_STM32CUBE_CMSIS_FREERTOS_TIMEOUTMANAGER_IMPLEMENTATION
#endif // XF_PORT_STM32CUBE_CMSIS_FREERTOS_TIMEOUTMANAGER_H