SolenoidBase functions are now static (#530)

Instance methods were kept around for backwards compat in Java. In C++,
the instance methods were changed to match Java. Also some cleanup to
the JNI layer to match updated variable types we missed.

Closes #416
This commit is contained in:
Thad House
2017-05-08 21:55:11 -07:00
committed by Peter Johnson
parent f32e696fef
commit e1fc60b8dd
5 changed files with 167 additions and 47 deletions

View File

@@ -20,20 +20,23 @@ namespace frc {
class SolenoidBase : public SensorBase {
public:
virtual ~SolenoidBase() = default;
int GetAll(int module = 0) const;
static int GetAll(int module);
int GetAll() const;
int GetPCMSolenoidBlackList(int module) const;
bool GetPCMSolenoidVoltageStickyFault(int module) const;
bool GetPCMSolenoidVoltageFault(int module) const;
void ClearAllPCMStickyFaults(int module);
static int GetPCMSolenoidBlackList(int module);
int GetPCMSolenoidBlackList() const;
static bool GetPCMSolenoidVoltageStickyFault(int module);
bool GetPCMSolenoidVoltageStickyFault() const;
static bool GetPCMSolenoidVoltageFault(int module);
bool GetPCMSolenoidVoltageFault() const;
static void ClearAllPCMStickyFaults(int module);
void ClearAllPCMStickyFaults();
protected:
explicit SolenoidBase(int pcmID);
static const int m_maxModules = 63;
static const int m_maxPorts = 8;
// static void* m_ports[m_maxModules][m_maxPorts];
int m_moduleNumber; ///< Slot number where the module is plugged into
/// the chassis.
int m_moduleNumber; // PCM module number
};
} // namespace frc

View File

@@ -22,16 +22,41 @@ SolenoidBase::SolenoidBase(int moduleNumber) : m_moduleNumber(moduleNumber) {}
/**
* Read all 8 solenoids as a single byte
*
* @param module the module to read from
* @return The current value of all 8 solenoids on the module.
*/
int SolenoidBase::GetAll(int module) const {
int SolenoidBase::GetAll(int module) {
int value = 0;
int32_t status = 0;
value = HAL_GetAllSolenoids(static_cast<int>(module), &status);
wpi_setErrorWithContext(status, HAL_GetErrorMessage(status));
value = HAL_GetAllSolenoids(module, &status);
wpi_setGlobalErrorWithContext(status, HAL_GetErrorMessage(status));
return value;
}
/**
* Read all 8 solenoids as a single byte
*
* @return The current value of all 8 solenoids on the module.
*/
int SolenoidBase::GetAll() const {
return SolenoidBase::GetAll(m_moduleNumber);
}
/**
* 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()
*
* @param module the module to read from
* @return The solenoid blacklist of all 8 solenoids on the module.
*/
int SolenoidBase::GetPCMSolenoidBlackList(int module) {
int32_t status = 0;
return HAL_GetPCMSolenoidBlackList(module, &status);
}
/**
* Reads complete solenoid blacklist for all 8 solenoids as a single byte.
*
@@ -41,28 +66,61 @@ int SolenoidBase::GetAll(int module) const {
*
* @return The solenoid blacklist of all 8 solenoids on the module.
*/
int SolenoidBase::GetPCMSolenoidBlackList(int module) const {
int SolenoidBase::GetPCMSolenoidBlackList() const {
return SolenoidBase::GetPCMSolenoidBlackList(m_moduleNumber);
}
/**
* @param module the module to read from
* @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) {
int32_t status = 0;
return HAL_GetPCMSolenoidBlackList(static_cast<int>(module), &status);
return HAL_GetPCMSolenoidVoltageStickyFault(module, &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 {
bool SolenoidBase::GetPCMSolenoidVoltageStickyFault() const {
return SolenoidBase::GetPCMSolenoidVoltageStickyFault(m_moduleNumber);
}
/**
* @param module the module to read from
* @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) {
int32_t status = 0;
return HAL_GetPCMSolenoidVoltageStickyFault(static_cast<int>(module),
&status);
return HAL_GetPCMSolenoidVoltageFault(module, &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 {
bool SolenoidBase::GetPCMSolenoidVoltageFault() const {
return SolenoidBase::GetPCMSolenoidVoltageFault(m_moduleNumber);
}
/**
* 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.
*
* @param module the module to read from
*/
void SolenoidBase::ClearAllPCMStickyFaults(int module) {
int32_t status = 0;
return HAL_GetPCMSolenoidVoltageFault(static_cast<int>(module), &status);
return HAL_ClearAllPCMStickyFaults(module, &status);
}
/**
@@ -75,7 +133,6 @@ bool SolenoidBase::GetPCMSolenoidVoltageFault(int module) const {
*
* If no sticky faults are set then this call will have no effect.
*/
void SolenoidBase::ClearAllPCMStickyFaults(int module) {
int32_t status = 0;
return HAL_ClearAllPCMStickyFaults(static_cast<int>(module), &status);
void SolenoidBase::ClearAllPCMStickyFaults() {
SolenoidBase::ClearAllPCMStickyFaults(m_moduleNumber);
}

View File

@@ -124,13 +124,13 @@ Java_edu_wpi_first_wpilibj_hal_SolenoidJNI_getSolenoid(
/*
* Class: edu_wpi_first_wpilibj_hal_SolenoidJNI
* Method: getAllSolenoids
* Signature: (B)Z
* Signature: (I)I
*/
JNIEXPORT jbyte JNICALL
JNIEXPORT jint JNICALL
Java_edu_wpi_first_wpilibj_hal_SolenoidJNI_getAllSolenoids(
JNIEnv *env, jclass, jbyte module) {
JNIEnv *env, jclass, jint module) {
int32_t status = 0;
jbyte val = HAL_GetAllSolenoids(module, &status);
jint val = HAL_GetAllSolenoids(module, &status);
CheckStatus(env, status);
return val;
}
@@ -138,11 +138,11 @@ Java_edu_wpi_first_wpilibj_hal_SolenoidJNI_getAllSolenoids(
/*
* Class: edu_wpi_first_wpilibj_hal_SolenoidJNI
* Method: getPCMSolenoidBlackList
* Signature: (B)I
* Signature: (I)I
*/
JNIEXPORT jint JNICALL
Java_edu_wpi_first_wpilibj_hal_SolenoidJNI_getPCMSolenoidBlackList(
JNIEnv *env, jclass, jbyte module) {
JNIEnv *env, jclass, jint module) {
int32_t status = 0;
jint val = HAL_GetPCMSolenoidBlackList(module, &status);
CheckStatus(env, status);
@@ -151,11 +151,11 @@ Java_edu_wpi_first_wpilibj_hal_SolenoidJNI_getPCMSolenoidBlackList(
/*
* Class: edu_wpi_first_wpilibj_hal_SolenoidJNI
* Method: getPCMSolenoidVoltageStickyFault
* Signature: (B)Z
* Signature: (I)Z
*/
JNIEXPORT jboolean JNICALL
Java_edu_wpi_first_wpilibj_hal_SolenoidJNI_getPCMSolenoidVoltageStickyFault(
JNIEnv *env, jclass, jbyte module) {
JNIEnv *env, jclass, jint module) {
int32_t status = 0;
bool val = HAL_GetPCMSolenoidVoltageStickyFault(module, &status);
CheckStatus(env, status);
@@ -164,11 +164,11 @@ Java_edu_wpi_first_wpilibj_hal_SolenoidJNI_getPCMSolenoidVoltageStickyFault(
/*
* Class: edu_wpi_first_wpilibj_hal_SolenoidJNI
* Method: getPCMSolenoidVoltageFault
* Signature: (B)Z
* Signature: (I)Z
*/
JNIEXPORT jboolean JNICALL
Java_edu_wpi_first_wpilibj_hal_SolenoidJNI_getPCMSolenoidVoltageFault(
JNIEnv *env, jclass, jbyte module) {
JNIEnv *env, jclass, jint module) {
int32_t status = 0;
bool val = HAL_GetPCMSolenoidVoltageFault(module, &status);
CheckStatus(env, status);
@@ -177,11 +177,11 @@ Java_edu_wpi_first_wpilibj_hal_SolenoidJNI_getPCMSolenoidVoltageFault(
/*
* Class: edu_wpi_first_wpilibj_hal_SolenoidJNI
* Method: clearAllPCMStickyFaults
* Signature: (B)V
* Signature: (I)V
*/
JNIEXPORT void JNICALL
Java_edu_wpi_first_wpilibj_hal_SolenoidJNI_clearAllPCMStickyFaults(
JNIEnv *env, jclass, jbyte module) {
JNIEnv *env, jclass, jint module) {
int32_t status = 0;
HAL_ClearAllPCMStickyFaults(module, &status);
CheckStatus(env, status);

View File

@@ -15,7 +15,7 @@ import edu.wpi.first.wpilibj.hal.SolenoidJNI;
*/
public abstract class SolenoidBase extends SensorBase {
protected final byte m_moduleNumber; // The number of the solenoid module being used.
protected final int m_moduleNumber; // The number of the solenoid module being used.
/**
* Constructor.
@@ -23,7 +23,17 @@ public abstract class SolenoidBase extends SensorBase {
* @param moduleNumber The PCM CAN ID
*/
public SolenoidBase(final int moduleNumber) {
m_moduleNumber = (byte) moduleNumber;
m_moduleNumber = moduleNumber;
}
/**
* Read all 8 solenoids from the specified module as a single byte.
*
* @param moduleNumber the module number to read
* @return The current value of all 8 solenoids on the module.
*/
public static int getAll(int moduleNumber) {
return SolenoidJNI.getAllSolenoids(moduleNumber);
}
/**
@@ -31,8 +41,21 @@ public abstract class SolenoidBase extends SensorBase {
*
* @return The current value of all 8 solenoids on this module.
*/
public byte getAll() {
return SolenoidJNI.getAllSolenoids(m_moduleNumber);
public int getAll() {
return SolenoidBase.getAll(m_moduleNumber);
}
/**
* 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.
*
* @param moduleNumber the module number to read
* @return The solenoid blacklist of all 8 solenoids on the module.
* @see #clearAllPCMStickyFaults()
*/
public static int getPCMSolenoidBlackList(int moduleNumber) {
return SolenoidJNI.getPCMSolenoidBlackList(moduleNumber);
}
/**
@@ -43,8 +66,19 @@ public abstract class SolenoidBase extends SensorBase {
* @return The solenoid blacklist of all 8 solenoids on the module.
* @see #clearAllPCMStickyFaults()
*/
public byte getPCMSolenoidBlackList() {
return (byte) SolenoidJNI.getPCMSolenoidBlackList(m_moduleNumber);
public int getPCMSolenoidBlackList() {
return SolenoidBase.getPCMSolenoidBlackList(m_moduleNumber);
}
/**
* If true, the common highside solenoid voltage rail is too low, most likely a solenoid channel
* is shorted.
*
* @param moduleNumber the module number to read
* @return true if PCM sticky fault is set
*/
public static boolean getPCMSolenoidVoltageStickyFault(int moduleNumber) {
return SolenoidJNI.getPCMSolenoidVoltageStickyFault(moduleNumber);
}
/**
@@ -54,7 +88,18 @@ public abstract class SolenoidBase extends SensorBase {
* @return true if PCM sticky fault is set
*/
public boolean getPCMSolenoidVoltageStickyFault() {
return SolenoidJNI.getPCMSolenoidVoltageStickyFault(m_moduleNumber);
return SolenoidBase.getPCMSolenoidVoltageStickyFault(m_moduleNumber);
}
/**
* The common highside solenoid voltage rail is too low, most likely a solenoid channel is
* shorted.
*
* @param moduleNumber the module number to read
* @return true if PCM is in fault state.
*/
public static boolean getPCMSolenoidVoltageFault(int moduleNumber) {
return SolenoidJNI.getPCMSolenoidVoltageFault(moduleNumber);
}
/**
@@ -64,7 +109,22 @@ public abstract class SolenoidBase extends SensorBase {
* @return true if PCM is in fault state.
*/
public boolean getPCMSolenoidVoltageFault() {
return SolenoidJNI.getPCMSolenoidVoltageFault(m_moduleNumber);
return SolenoidBase.getPCMSolenoidVoltageFault(m_moduleNumber);
}
/**
* Clear ALL sticky faults inside PCM that Compressor is wired to.
*
* <p>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.
*
* <p>If no sticky faults are set then this call will have no effect.
*
* @param moduleNumber the module number to read
*/
public static void clearAllPCMStickyFaults(int moduleNumber) {
SolenoidJNI.clearAllPCMStickyFaults(moduleNumber);
}
/**
@@ -77,6 +137,6 @@ public abstract class SolenoidBase extends SensorBase {
* <p>If no sticky faults are set then this call will have no effect.
*/
public void clearAllPCMStickyFaults() {
SolenoidJNI.clearAllPCMStickyFaults(m_moduleNumber);
SolenoidBase.clearAllPCMStickyFaults(m_moduleNumber);
}
}

View File

@@ -20,13 +20,13 @@ public class SolenoidJNI extends JNIWrapper {
public static native boolean getSolenoid(int portHandle);
public static native byte getAllSolenoids(byte module);
public static native int getAllSolenoids(int module);
public static native int getPCMSolenoidBlackList(byte module);
public static native int getPCMSolenoidBlackList(int module);
public static native boolean getPCMSolenoidVoltageStickyFault(byte module);
public static native boolean getPCMSolenoidVoltageStickyFault(int module);
public static native boolean getPCMSolenoidVoltageFault(byte module);
public static native boolean getPCMSolenoidVoltageFault(int module);
public static native void clearAllPCMStickyFaults(byte module);
public static native void clearAllPCMStickyFaults(int module);
}