6d0e75aa64
Signed-off-by: Jason <jason@dublinschool.org>
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, bool ignorePrevious, 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__
|
|
|