/*----------------------------------------------------------------------------*/ | |
/* 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. */ | |
/*----------------------------------------------------------------------------*/ | |
#include "SafePWM.h" | |
#include "MotorSafetyHelper.h" | |
/** | |
* Initialize a SafePWM object by setting defaults | |
*/ | |
void SafePWM::InitSafePWM() | |
{ | |
m_safetyHelper = new MotorSafetyHelper(this); | |
m_safetyHelper->SetSafetyEnabled(false); | |
} | |
/** | |
* Constructor for a SafePWM object taking a channel number | |
* @param channel The channel number to be used for the underlying PWM object | |
*/ | |
SafePWM::SafePWM(UINT32 channel): PWM(channel) | |
{ | |
InitSafePWM(); | |
} | |
/** | |
* Constructor for a SafePWM object taking channel and slot numbers. | |
* @param moduleNumber The digital module (1 or 2). | |
* @param channel The PWM channel number on the module (1..10). | |
*/ | |
SafePWM::SafePWM(UINT8 moduleNumber, UINT32 channel): PWM(moduleNumber, channel) | |
{ | |
InitSafePWM(); | |
} | |
SafePWM::~SafePWM() | |
{ | |
delete m_safetyHelper; | |
} | |
/* | |
* Set the expiration time for the PWM object | |
* @param timeout The timeout (in seconds) for this motor object | |
*/ | |
void SafePWM::SetExpiration(float timeout) | |
{ | |
m_safetyHelper->SetExpiration(timeout); | |
} | |
/** | |
* Return the expiration time for the PWM object. | |
* @returns The expiration time value. | |
*/ | |
float SafePWM::GetExpiration() | |
{ | |
return m_safetyHelper->GetExpiration(); | |
} | |
/** | |
* Check if the PWM object is currently alive or stopped due to a timeout. | |
* @returns a bool value that is true if the motor has NOT timed out and should still | |
* be running. | |
*/ | |
bool SafePWM::IsAlive() | |
{ | |
return m_safetyHelper->IsAlive(); | |
} | |
/** | |
* Stop the motor associated with this PWM object. | |
* This is called by the MotorSafetyHelper object when it has a timeout for this PWM and needs to | |
* stop it from running. | |
*/ | |
void SafePWM::StopMotor() | |
{ | |
SetRaw(kPwmDisabled); | |
} | |
/** | |
* Enable/disable motor safety for this device | |
* Turn on and off the motor safety option for this PWM object. | |
* @param enabled True if motor safety is enforced for this object | |
*/ | |
void SafePWM::SetSafetyEnabled(bool enabled) | |
{ | |
m_safetyHelper->SetSafetyEnabled(enabled); | |
} | |
/** | |
* Check if motor safety is enabled for this object | |
* @returns True if motor safety is enforced for this object | |
*/ | |
bool SafePWM::IsSafetyEnabled() | |
{ | |
return m_safetyHelper->IsSafetyEnabled(); | |
} | |
void SafePWM::GetDescription(char *desc) | |
{ | |
sprintf(desc, "PWM %d on module %d", GetChannel(), GetModuleNumber()); | |
} | |
/** | |
* Feed the MotorSafety timer when setting the speed. | |
* This method is called by the subclass motor whenever it updates its speed, thereby reseting | |
* the timeout value. | |
* @param speed Value to pass to the PWM class | |
*/ | |
void SafePWM::SetSpeed(float speed) | |
{ | |
PWM::SetSpeed(speed); | |
m_safetyHelper->Feed(); | |
} | |