mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-20 00:51:42 +00:00
This is the changes made by Patrick Plenefisch converting the native code to use CMake and the CMake Maven Plugin, as opposed to the native Maven plugin. This is to allow for compatibility with newer versions of the GCC toolchain. All the cpp sources were moved from maven style directories to cpp style directories for CMake. Change-Id: I67f5e3608948f37c83b0990d232105a3784f8593
46 lines
1.8 KiB
C++
46 lines
1.8 KiB
C++
/*----------------------------------------------------------------------------*/
|
|
/* Copyright (c) FIRST 2008. All Rights Reserved. */
|
|
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
|
/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
#ifndef NOTIFIER_H
|
|
#define NOTIFIER_H
|
|
|
|
#include "HAL/HAL.h"
|
|
#include "ErrorBase.h"
|
|
#include "HAL/cpp/Synchronized.h"
|
|
|
|
typedef void (*TimerEventHandler)(void *param);
|
|
|
|
class Notifier : public ErrorBase
|
|
{
|
|
public:
|
|
Notifier(TimerEventHandler handler, void *param = NULL);
|
|
virtual ~Notifier();
|
|
void StartSingle(double delay);
|
|
void StartPeriodic(double period);
|
|
void Stop();
|
|
private:
|
|
static Notifier *timerQueueHead;
|
|
static ReentrantSemaphore queueSemaphore;
|
|
static void* m_notifier;
|
|
static int refcount;
|
|
|
|
static void ProcessQueue(uint32_t mask, void *params); // process the timer queue on a timer event
|
|
static void UpdateAlarm(); // update the FPGA alarm since the queue has changed
|
|
void InsertInQueue(bool reschedule); // insert this Notifier in the timer queue
|
|
void DeleteFromQueue(); // delete this Notifier from the timer queue
|
|
TimerEventHandler m_handler; // address of the handler
|
|
void *m_param; // a parameter to pass to the handler
|
|
double m_period; // the relative time (either periodic or single)
|
|
double m_expirationTime; // absolute expiration time for the current event
|
|
Notifier *m_nextEvent; // next Nofifier event
|
|
bool m_periodic; // true if this is a periodic event
|
|
bool m_queued; // indicates if this entry is queued
|
|
SEMAPHORE_ID m_handlerSemaphore; // held by interrupt manager task while handler call is in progress
|
|
DISALLOW_COPY_AND_ASSIGN(Notifier);
|
|
};
|
|
|
|
#endif
|