| // Class for handling interrupts. |
| // Copyright (c) National Instruments 2008. All Rights Reserved. |
| |
| #ifndef __tInterruptManager_h__ |
| #define __tInterruptManager_h__ |
| |
| #include "NiRio.h" |
| #include "tSystem.h" |
| #include <semLib.h> |
| |
| 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: |
| void handler(); |
| static int handlerWrapper(tInterruptManager *pInterrupt); |
| |
| void acknowledge(tRioStatusCode *status); |
| void reserve(tRioStatusCode *status); |
| void unreserve(tRioStatusCode *status); |
| tInterruptHandler _handler; |
| uint32_t _interruptMask; |
| int32_t _taskId; |
| NiFpga_IrqContext _rioContext; |
| bool _watcher; |
| bool _enabled; |
| void *_userParam; |
| |
| // maintain the interrupts that are already dealt with. |
| static uint32_t _globalInterruptMask; |
| static SEM_ID _globalInterruptMaskSemaphore; |
| }; |
| |
| } |
| |
| |
| #endif // __tInterruptManager_h__ |
| |