mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-21 01:01:43 +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
62 lines
1.5 KiB
C++
62 lines
1.5 KiB
C++
// Class for handling interrupts.
|
|
// Copyright (c) National Instruments 2008. All Rights Reserved.
|
|
|
|
#ifndef __tInterruptManager_h__
|
|
#define __tInterruptManager_h__
|
|
|
|
#include "tSystem.h"
|
|
|
|
namespace ni
|
|
{
|
|
namespace dsc
|
|
{
|
|
namespace osdep
|
|
{
|
|
class CriticalSection;
|
|
}
|
|
}
|
|
}
|
|
|
|
namespace nFPGA
|
|
{
|
|
|
|
typedef void (*tInterruptHandler)(uint32_t interruptAssertedMask, void *param);
|
|
|
|
class tInterruptManager : public tSystem
|
|
{
|
|
public:
|
|
tInterruptManager(uint32_t interruptMask, bool watcher, tRioStatusCode *status);
|
|
~tInterruptManager();
|
|
void registerHandler(tInterruptHandler handler, void *param, tRioStatusCode *status);
|
|
uint32_t watch(int32_t timeoutInMs, tRioStatusCode *status);
|
|
void enable(tRioStatusCode *status);
|
|
void disable(tRioStatusCode *status);
|
|
bool isEnabled(tRioStatusCode *status);
|
|
private:
|
|
class tInterruptThread;
|
|
friend class tInterruptThread;
|
|
void handler();
|
|
static int handlerWrapper(tInterruptManager *pInterrupt);
|
|
|
|
void acknowledge(tRioStatusCode *status);
|
|
void reserve(tRioStatusCode *status);
|
|
void unreserve(tRioStatusCode *status);
|
|
tInterruptHandler _handler;
|
|
uint32_t _interruptMask;
|
|
tInterruptThread *_thread;
|
|
NiFpga_IrqContext _rioContext;
|
|
bool _watcher;
|
|
bool _enabled;
|
|
void *_userParam;
|
|
|
|
// maintain the interrupts that are already dealt with.
|
|
static uint32_t _globalInterruptMask;
|
|
static ni::dsc::osdep::CriticalSection *_globalInterruptMaskSemaphore;
|
|
};
|
|
|
|
}
|
|
|
|
|
|
#endif // __tInterruptManager_h__
|
|
|