[hal, wpilib] Fix REV PH disabled solenoid list (#6887)

This commit is contained in:
Ryan Blue
2024-07-29 10:59:49 -04:00
committed by GitHub
parent 3c2bdafd57
commit 0e9c514ebf
7 changed files with 74 additions and 9 deletions

View File

@@ -279,6 +279,15 @@ public class REVPHJNI extends JNIWrapper {
return new REVPHFaults(getFaultsNative(handle));
}
/**
* Get a bitmask of disabled solenoids.
*
* @param handle the PH handle
* @return Bitmask indicating disabled solenoids. The LSB represents solenoid 0.
* @see "HAL_GetREVPHSolenoidDisabledList"
*/
public static native int getSolenoidDisabledList(int handle);
/**
* Returns the hardware and firmware versions of the PH.
*

View File

@@ -751,3 +751,35 @@ void HAL_ClearREVPHStickyFaults(HAL_REVPHHandle handle, int32_t* status) {
HAL_WriteCANPacket(ph->hcan, packedData, PH_CLEAR_FAULTS_LENGTH,
PH_CLEAR_FAULTS_FRAME_API, status);
}
int32_t HAL_GetREVPHSolenoidDisabledList(HAL_REVPHHandle handle,
int32_t* status) {
auto ph = REVPHHandles->Get(handle);
if (ph == nullptr) {
*status = HAL_HANDLE_ERROR;
return false;
}
PH_status_0_t status0 = HAL_ReadREVPHStatus0(ph->hcan, status);
if (*status != 0) {
return 0;
}
uint32_t solenoidFaults = status0.channel_0_fault;
solenoidFaults |= status0.channel_1_fault << 1;
solenoidFaults |= status0.channel_2_fault << 2;
solenoidFaults |= status0.channel_3_fault << 3;
solenoidFaults |= status0.channel_4_fault << 4;
solenoidFaults |= status0.channel_5_fault << 5;
solenoidFaults |= status0.channel_6_fault << 6;
solenoidFaults |= status0.channel_7_fault << 7;
solenoidFaults |= status0.channel_8_fault << 8;
solenoidFaults |= status0.channel_9_fault << 9;
solenoidFaults |= status0.channel_10_fault << 10;
solenoidFaults |= status0.channel_11_fault << 11;
solenoidFaults |= status0.channel_12_fault << 12;
solenoidFaults |= status0.channel_13_fault << 13;
solenoidFaults |= status0.channel_14_fault << 14;
solenoidFaults |= status0.channel_15_fault << 15;
return solenoidFaults;
}

View File

@@ -381,6 +381,21 @@ Java_edu_wpi_first_hal_REVPHJNI_getFaultsNative
return faults;
}
/*
* Class: edu_wpi_first_hal_REVPHJNI
* Method: getSolenoidDisabledList
* Signature: (I)I
*/
JNIEXPORT jint JNICALL
Java_edu_wpi_first_hal_REVPHJNI_getSolenoidDisabledList
(JNIEnv* env, jclass, jint handle)
{
int32_t status = 0;
auto result = HAL_GetREVPHSolenoidDisabledList(handle, &status);
CheckStatus(env, status, false);
return result;
}
/*
* Class: edu_wpi_first_hal_REVPHJNI
* Method: getVersion

View File

@@ -369,6 +369,16 @@ void HAL_GetREVPHStickyFaults(HAL_REVPHHandle handle,
*/
void HAL_ClearREVPHStickyFaults(HAL_REVPHHandle handle, int32_t* status);
/**
* Get a bitmask of disabled solenoids.
*
* @param[in] handle the PH handle
* @param[out] status Error status variable. 0 on success.
* @return Bitmask indicating disabled solenoids. The LSB represents solenoid 0.
*/
int32_t HAL_GetREVPHSolenoidDisabledList(HAL_REVPHHandle handle,
int32_t* status);
#ifdef __cplusplus
} // extern "C"
#endif

View File

@@ -254,4 +254,9 @@ void HAL_GetREVPHStickyFaults(HAL_REVPHHandle handle,
HAL_REVPHStickyFaults* stickyFaults,
int32_t* status) {}
int32_t HAL_GetREVPHSolenoidDisabledList(HAL_REVPHHandle handle,
int32_t* status) {
return 0;
}
void HAL_ClearREVPHStickyFaults(HAL_REVPHHandle handle, int32_t* status) {}

View File

@@ -243,14 +243,9 @@ int PneumaticHub::GetModuleNumber() const {
int PneumaticHub::GetSolenoidDisabledList() const {
int32_t status = 0;
HAL_REVPHStickyFaults faults;
std::memset(&faults, 0, sizeof(faults));
HAL_GetREVPHStickyFaults(m_handle, &faults, &status);
auto result = HAL_GetREVPHSolenoidDisabledList(m_handle, &status);
FRC_ReportError(status, "Module {}", m_module);
uint32_t intFaults = 0;
static_assert(sizeof(faults) == sizeof(intFaults));
std::memcpy(&intFaults, &faults, sizeof(faults));
return intFaults & 0xFFFF;
return result;
}
void PneumaticHub::FireOneShot(int index) {

View File

@@ -249,8 +249,7 @@ public class PneumaticHub implements PneumaticsBase {
@Override
public int getSolenoidDisabledList() {
int raw = REVPHJNI.getStickyFaultsNative(m_handle);
return raw & 0xFFFF;
return REVPHJNI.getSolenoidDisabledList(m_handle);
}
/**