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
60 lines
1.9 KiB
C++
60 lines
1.9 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 "ErrorBase.h"
|
|
#include <stdio.h>
|
|
#include "Base.h"
|
|
|
|
/**
|
|
* Base class for all sensors.
|
|
* Stores most recent status information as well as containing utility functions for checking
|
|
* channels and error processing.
|
|
*/
|
|
class SensorBase : public ErrorBase
|
|
{
|
|
public:
|
|
SensorBase();
|
|
virtual ~SensorBase();
|
|
static void DeleteSingletons();
|
|
|
|
static uint32_t GetDefaultSolenoidModule()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static bool CheckSolenoidModule(uint8_t moduleNumber);
|
|
static bool CheckDigitalChannel(uint32_t channel);
|
|
static bool CheckRelayChannel(uint32_t channel);
|
|
static bool CheckPWMChannel(uint32_t channel);
|
|
static bool CheckAnalogInput(uint32_t channel);
|
|
static bool CheckAnalogOutput(uint32_t channel);
|
|
static bool CheckSolenoidChannel(uint32_t channel);
|
|
static bool CheckPDPChannel(uint32_t channel);
|
|
|
|
static const uint32_t kDigitalChannels = 26;
|
|
static const uint32_t kAnalogInputs = 8;
|
|
static const uint32_t kAnalogOutputs = 2;
|
|
static const uint32_t kSolenoidChannels = 8;
|
|
static const uint32_t kSolenoidModules = 2;
|
|
static const uint32_t kPwmChannels = 20;
|
|
static const uint32_t kRelayChannels = 8;
|
|
static const uint32_t kPDPChannels = 16;
|
|
static const uint32_t kChassisSlots = 8;
|
|
|
|
protected:
|
|
void AddToSingletonList();
|
|
|
|
static void* m_digital_ports[kDigitalChannels];
|
|
static void* m_relay_ports[kRelayChannels];
|
|
static void* m_pwm_ports[kPwmChannels];
|
|
|
|
private:
|
|
DISALLOW_COPY_AND_ASSIGN(SensorBase);
|
|
static SensorBase *m_singletonList;
|
|
SensorBase *m_nextSingleton;
|
|
};
|