001// Copyright (c) FIRST and other WPILib contributors.
002// Open Source Software; you can modify and/or share it under the terms of
003// the WPILib BSD license file in the root directory of this project.
004
005package edu.wpi.first.hal;
006
007/**
008 * CTRE Pneumatic Control Module (PCM) Functions.
009 *
010 * @see "CTREPCM.h"
011 */
012public class CTREPCMJNI extends JNIWrapper {
013  /**
014   * Initializes a PCM.
015   *
016   * @param module the CAN ID to initialize
017   * @return the created PH handle
018   * @see "HAL_InitializeCTREPCM"
019   */
020  public static native int initialize(int module);
021
022  /**
023   * Frees a PCM handle.
024   *
025   * @param handle the PCMhandle
026   * @see "HAL_FreeCTREPCM"
027   */
028  public static native void free(int handle);
029
030  /**
031   * Checks if a solenoid channel number is valid.
032   *
033   * @param channel the channel to check
034   * @return true if the channel is valid, otherwise false
035   */
036  public static native boolean checkSolenoidChannel(int channel);
037
038  /**
039   * Get whether compressor is turned on.
040   *
041   * @param handle the PCM handle
042   * @return true if the compressor is turned on
043   * @see "HAL_GetCTREPCMCompressor"
044   */
045  public static native boolean getCompressor(int handle);
046
047  /**
048   * Enables the compressor closed loop control using the digital pressure switch. The compressor
049   * will turn on when the pressure switch indicates that the system is not full, and will turn off
050   * when the pressure switch indicates that the system is full.
051   *
052   * @param handle the PCM handle
053   * @param enabled true to enable closed loop control
054   * @see "HAL_SetCTREPCMClosedLoopControl"
055   */
056  public static native void setClosedLoopControl(int handle, boolean enabled);
057
058  /**
059   * Get whether the PCM closed loop control is enabled.
060   *
061   * @param handle the PCM handle
062   * @return True if closed loop control is enabled, otherwise false.
063   */
064  public static native boolean getClosedLoopControl(int handle);
065
066  /**
067   * Returns the state of the pressure switch.
068   *
069   * @param handle the PCM handle
070   * @return True if pressure switch indicates that the system is full, otherwise false.
071   * @see "HAL_GetCTREPCMPressureSwitch"
072   */
073  public static native boolean getPressureSwitch(int handle);
074
075  /**
076   * Returns the current drawn by the compressor.
077   *
078   * @param handle the PCM handle
079   * @return The current drawn by the compressor in amps.
080   * @see "HAL_GetCTREPCMCompressorCurrent"
081   */
082  public static native double getCompressorCurrent(int handle);
083
084  /**
085   * Return whether the compressor current is currently too high.
086   *
087   * @param handle the PCM handle
088   * @return True if the compressor current is too high, otherwise false.
089   * @see getCompressorCurrentTooHighStickyFault
090   * @see "HAL_GetCTREPCMCompressorCurrentTooHighFault"
091   */
092  public static native boolean getCompressorCurrentTooHighFault(int handle);
093
094  /**
095   * Returns whether the compressor current has been too high since sticky faults were last cleared.
096   * This fault is persistent and can be cleared by clearAllStickyFaults()
097   *
098   * @param handle the PCM handle
099   * @return True if the compressor current has been too high since sticky faults were last cleared.
100   * @see getCompressorCurrentTooHighFault
101   * @see "HAL_GetCTREPCMCompressorCurrentTooHighStickyFault("
102   */
103  public static native boolean getCompressorCurrentTooHighStickyFault(int handle);
104
105  /**
106   * Returns whether the compressor is currently shorted.
107   *
108   * @param handle the PCM handle
109   * @return True if the compressor is currently shorted, otherwise false.
110   * @see getCompressorCurrentTooHighStickyFault
111   * @see "HAL_GetCTREPCMCompressorShortedStickyFault"
112   */
113  public static native boolean getCompressorShortedFault(int handle);
114
115  /**
116   * Returns whether the compressor has been shorted since sticky faults were last cleared. This
117   * fault is persistent and can be cleared by clearAllStickyFaults()
118   *
119   * @param handle the PCM handle
120   * @return True if the compressor has been shorted since sticky faults were last cleared,
121   *     otherwise false.
122   * @see getCompressorShortedFault
123   * @see "HAL_GetCTREPCMCompressorShortedFault"
124   */
125  public static native boolean getCompressorShortedStickyFault(int handle);
126
127  /**
128   * Returns whether the compressor is currently disconnected.
129   *
130   * @param handle the PCM handle
131   * @return True if compressor is currently disconnected, otherwise false.
132   * @see getCompressorShortedStickyFault
133   * @see "HAL_GetCTREPCMCompressorNotConnectedFault"
134   */
135  public static native boolean getCompressorNotConnectedFault(int handle);
136
137  /**
138   * Returns whether the compressor has been disconnected since sticky faults were last cleared.
139   * This fault is persistent and can be cleared by clearAllStickyFaults()
140   *
141   * @param handle the PCM handle
142   * @return True if the compressor has been disconnected since sticky faults were last cleared,
143   *     otherwise false.
144   * @see getCompressorNotConnectedFault
145   * @see "HAL_GetCTREPCMCompressorNotConnectedStickyFault"
146   */
147  public static native boolean getCompressorNotConnectedStickyFault(int handle);
148
149  /**
150   * Gets a bitmask of solenoid values.
151   *
152   * @param handle the PCM handle
153   * @return solenoid values
154   * @see "HAL_GetCTREPCMSolenoids"
155   */
156  public static native int getSolenoids(int handle);
157
158  /**
159   * Sets solenoids on a pneumatics module.
160   *
161   * @param handle the PCM handle
162   * @param mask bitmask to set
163   * @param values solenoid values
164   * @see "HAL_SetCTREPCMSolenoids"
165   */
166  public static native void setSolenoids(int handle, int mask, int values);
167
168  /**
169   * Get a bitmask of disabled solenoids.
170   *
171   * @param handle the PCM handle
172   * @return bitmask of disabled solenoids
173   * @see "HAL_GetCTREPCMSolenoidDisabledList"
174   */
175  public static native int getSolenoidDisabledList(int handle);
176
177  /**
178   * Returns whether the solenoid is currently reporting a voltage fault.
179   *
180   * @param handle the PCM handle
181   * @return True if solenoid is reporting a fault, otherwise false.
182   * @see getSolenoidVoltageStickyFault
183   * @see "HAL_GetCTREPCMSolenoidVoltageFault"
184   */
185  public static native boolean getSolenoidVoltageFault(int handle);
186
187  /**
188   * Returns whether the solenoid has reported a voltage fault since sticky faults were last
189   * cleared. This fault is persistent and can be cleared by clearAllStickyFaults()
190   *
191   * @param handle the PCM handle
192   * @return True if solenoid is reporting a fault, otherwise false.
193   * @see getSolenoidVoltageFault
194   * @see "HAL_GetCTREPCMSolenoidVoltageStickyFault"
195   */
196  public static native boolean getSolenoidVoltageStickyFault(int handle);
197
198  /**
199   * Clears all sticky faults on this device.
200   *
201   * @param handle the PCM handle
202   * @see "HAL_ClearAllCTREPCMStickyFaults"
203   */
204  public static native void clearAllStickyFaults(int handle);
205
206  /**
207   * Fire a single solenoid shot.
208   *
209   * @param handle the PCM handle
210   * @param index solenoid index
211   * @see "HAL_FireCTREPCMOneShot"
212   */
213  public static native void fireOneShot(int handle, int index);
214
215  /**
216   * Set the duration for a single solenoid shot.
217   *
218   * @param handle the PCM handle
219   * @param index solenoid index
220   * @param durMs shot duration in ms
221   * @see "HAL_SetCTREPCMOneShotDuration"
222   */
223  public static native void setOneShotDuration(int handle, int index, int durMs);
224}