mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-25 01:41:43 +00:00
WPILib Reorganization
This is a major restructuring of the WPILib repository to simply build procedures and remove the remnants of Maven from everything except the eclipse plugins. Gradle files have been largely simplified or rewritten, taking advantage of splitting up parts of the build into separate build files for ease of reading. The eclipse plugins are now in a separate project, as is ntcore. All dependencies are resolved via Maven dependencies, with the Jenkins-maintained WPILib repo. Project structures have also been simplified: we no longer have separate subprojects inside wpilibc and wpilibj. Where possible, these changes hav been done with git renames, to make sure we still have full history for all repositories. Other unrelated subprojects have also been broken out: OutlineViewer is now a separate project. Change-Id: Ib4e2a6e1a2f66427a14f16612b0e0d69ed661878
This commit is contained in:
103
wpilibc/Athena/src/SolenoidBase.cpp
Normal file
103
wpilibc/Athena/src/SolenoidBase.cpp
Normal file
@@ -0,0 +1,103 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* 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 "SolenoidBase.h"
|
||||
|
||||
void* SolenoidBase::m_ports[m_maxModules][m_maxPorts];
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param moduleNumber The CAN PCM ID.
|
||||
*/
|
||||
SolenoidBase::SolenoidBase(uint8_t moduleNumber)
|
||||
: m_moduleNumber(moduleNumber) {
|
||||
for (uint32_t i = 0; i < kSolenoidChannels; i++) {
|
||||
void* port = getPortWithModule(moduleNumber, i);
|
||||
int32_t status = 0;
|
||||
SolenoidBase::m_ports[moduleNumber][i] =
|
||||
initializeSolenoidPort(port, &status);
|
||||
wpi_setErrorWithContext(status, getHALErrorMessage(status));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the value of a solenoid.
|
||||
*
|
||||
* @param value The value you want to set on the module.
|
||||
* @param mask The channels you want to be affected.
|
||||
*/
|
||||
void SolenoidBase::Set(uint8_t value, uint8_t mask, int module) {
|
||||
int32_t status = 0;
|
||||
for (int i = 0; i < m_maxPorts; i++) {
|
||||
uint8_t local_mask = 1 << i;
|
||||
if (mask & local_mask)
|
||||
setSolenoid(m_ports[module][i], value & local_mask, &status);
|
||||
}
|
||||
wpi_setErrorWithContext(status, getHALErrorMessage(status));
|
||||
}
|
||||
|
||||
/**
|
||||
* Read all 8 solenoids as a single byte
|
||||
*
|
||||
* @return The current value of all 8 solenoids on the module.
|
||||
*/
|
||||
uint8_t SolenoidBase::GetAll(int module) const {
|
||||
uint8_t value = 0;
|
||||
int32_t status = 0;
|
||||
for (int i = 0; i < m_maxPorts; i++) {
|
||||
value |= getSolenoid(m_ports[module][i], &status) << i;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
/**
|
||||
* Reads complete solenoid blacklist for all 8 solenoids as a single byte.
|
||||
*
|
||||
* If a solenoid is shorted, it is added to the blacklist and
|
||||
* disabled until power cycle, or until faults are cleared.
|
||||
* @see ClearAllPCMStickyFaults()
|
||||
*
|
||||
* @return The solenoid blacklist of all 8 solenoids on the module.
|
||||
*/
|
||||
uint8_t SolenoidBase::GetPCMSolenoidBlackList(int module) const {
|
||||
int32_t status = 0;
|
||||
return getPCMSolenoidBlackList(m_ports[module][0], &status);
|
||||
}
|
||||
/**
|
||||
* @return true if PCM sticky fault is set : The common
|
||||
* highside solenoid voltage rail is too low,
|
||||
* most likely a solenoid channel is shorted.
|
||||
*/
|
||||
bool SolenoidBase::GetPCMSolenoidVoltageStickyFault(int module) const {
|
||||
int32_t status = 0;
|
||||
return getPCMSolenoidVoltageStickyFault(m_ports[module][0], &status);
|
||||
}
|
||||
/**
|
||||
* @return true if PCM is in fault state : The common
|
||||
* highside solenoid voltage rail is too low,
|
||||
* most likely a solenoid channel is shorted.
|
||||
*/
|
||||
bool SolenoidBase::GetPCMSolenoidVoltageFault(int module) const {
|
||||
int32_t status = 0;
|
||||
return getPCMSolenoidVoltageFault(m_ports[module][0], &status);
|
||||
}
|
||||
/**
|
||||
* Clear ALL sticky faults inside PCM that Compressor is wired to.
|
||||
*
|
||||
* If a sticky fault is set, then it will be persistently cleared. Compressor
|
||||
* drive
|
||||
* maybe momentarily disable while flags are being cleared. Care
|
||||
* should be
|
||||
* taken to not call this too frequently, otherwise normal
|
||||
* compressor
|
||||
* functionality may be prevented.
|
||||
*
|
||||
* If no sticky faults are set then this call will have no effect.
|
||||
*/
|
||||
void SolenoidBase::ClearAllPCMStickyFaults(int module) {
|
||||
int32_t status = 0;
|
||||
return clearAllPCMStickyFaults_sol(m_ports[module][0], &status);
|
||||
}
|
||||
Reference in New Issue
Block a user