mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-20 00:51:42 +00:00
When interrupts are cancelled on any interruptable class, the resource is now freed. Previously, the resource was only freed if the object is destructed before CancelInterrupts() is called, so it was impossible to create and destruct more than 8 interrupts. The interrupts resource object is now in InterruptableSensorBase instead of SensorBase. A synchronous interrupt integration test was added. Change-Id: I0806176340cecd4c1480dd8f043474cc05919f24
31 lines
1.3 KiB
C++
31 lines
1.3 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. */
|
|
/*----------------------------------------------------------------------------*/
|
|
#pragma once
|
|
|
|
#include "HAL/HAL.hpp"
|
|
#include "SensorBase.h"
|
|
#include "Resource.h"
|
|
|
|
class InterruptableSensorBase : public SensorBase
|
|
{
|
|
public:
|
|
InterruptableSensorBase();
|
|
virtual ~InterruptableSensorBase();
|
|
virtual void RequestInterrupts(InterruptHandlerFunction handler, void *param) = 0; ///< Asynchronus handler version.
|
|
virtual void RequestInterrupts() = 0; ///< Synchronus Wait version.
|
|
virtual void CancelInterrupts(); ///< Free up the underlying chipobject functions.
|
|
virtual void WaitForInterrupt(float timeout); ///< Synchronus version.
|
|
virtual void EnableInterrupts(); ///< Enable interrupts - after finishing setup.
|
|
virtual void DisableInterrupts(); ///< Disable, but don't deallocate.
|
|
virtual double ReadInterruptTimestamp();///< Return the timestamp for the interrupt that occurred.
|
|
protected:
|
|
void* m_interrupt;
|
|
uint32_t m_interruptIndex;
|
|
void AllocateInterrupts(bool watcher);
|
|
|
|
static Resource *m_interrupts;
|
|
};
|