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 * Digital Input/Output (IO) JNI Functions.
009 *
010 * @see "hal/DIO.h"
011 */
012public class DIOJNI extends JNIWrapper {
013  /**
014   * Creates a new instance of a digital port.
015   *
016   * @param halPortHandle the port handle to create from
017   * @param input true for input, false for output
018   * @return the created digital handle
019   * @see "HAL_InitializeDIOPort"
020   */
021  public static native int initializeDIOPort(int halPortHandle, boolean input);
022
023  /**
024   * Checks if a DIO channel is valid.
025   *
026   * @param channel the channel number to check
027   * @return true if the channel is valid, otherwise false
028   * @see "HAL_CheckDIOChannel"
029   */
030  public static native boolean checkDIOChannel(int channel);
031
032  /**
033   * Frees a DIO port.
034   *
035   * @param dioPortHandle the DIO channel handle
036   * @see "HAL_FreeDIOPort"
037   */
038  public static native void freeDIOPort(int dioPortHandle);
039
040  /**
041   * Indicates the DIO channel is used by a simulated device.
042   *
043   * @param handle the DIO channel handle
044   * @param device simulated device handle
045   * @see "HAL_SetDIOSimDevice"
046   */
047  public static native void setDIOSimDevice(int handle, int device);
048
049  /**
050   * Writes a digital value to a DIO channel.
051   *
052   * @param dioPortHandle the digital port handle
053   * @param value the state to set the digital channel (if it is configured as an output)
054   * @see "HAL_SetDIO"
055   */
056  public static native void setDIO(int dioPortHandle, boolean value);
057
058  /**
059   * Sets the direction of a DIO channel.
060   *
061   * @param dioPortHandle the digital port handle
062   * @param input true to set input, false for output
063   * @see "HAL_SetDIODirection"
064   */
065  public static native void setDIODirection(int dioPortHandle, boolean input);
066
067  /**
068   * Reads a digital value from a DIO channel.
069   *
070   * @param dioPortHandle the digital port handle
071   * @return the state of the specified channel
072   * @see "HAL_GetDIO"
073   */
074  public static native boolean getDIO(int dioPortHandle);
075
076  /**
077   * Reads the direction of a DIO channel.
078   *
079   * @param dioPortHandle the digital port handle
080   * @return true for input, false for output
081   * @see "HAL_GetDIODirection"
082   */
083  public static native boolean getDIODirection(int dioPortHandle);
084
085  /**
086   * Generates a single digital pulse.
087   *
088   * <p>Write a pulse to the specified digital output channel. There can only be a single pulse
089   * going at any time.
090   *
091   * @param dioPortHandle the digital port handle
092   * @param pulseLengthSeconds the active length of the pulse (in seconds)
093   * @see "HAL_Pulse"
094   */
095  public static native void pulse(int dioPortHandle, double pulseLengthSeconds);
096
097  /**
098   * Generates a single digital pulse on multiple channels.
099   *
100   * <p>Write a pulse to the channels enabled by the mask. There can only be a single pulse going at
101   * any time.
102   *
103   * @param channelMask the channel mask
104   * @param pulseLengthSeconds the active length of the pulse (in seconds)
105   * @see "HAL_PulseMultiple"
106   */
107  public static native void pulseMultiple(long channelMask, double pulseLengthSeconds);
108
109  /**
110   * Checks a DIO line to see if it is currently generating a pulse.
111   *
112   * @param dioPortHandle the digital port handle
113   * @return true if a pulse is in progress, otherwise false
114   * @see "HAL_IsPulsing"
115   */
116  public static native boolean isPulsing(int dioPortHandle);
117
118  /**
119   * Checks if any DIO line is currently generating a pulse.
120   *
121   * @return true if a pulse on some line is in progress
122   * @see "HAL_IsAnyPulsing"
123   */
124  public static native boolean isAnyPulsing();
125
126  public static native short getLoopTiming();
127
128  /**
129   * Allocates a DO PWM Generator.
130   *
131   * @return the allocated digital PWM handle
132   */
133  public static native int allocateDigitalPWM();
134
135  /**
136   * Frees the resource associated with a DO PWM generator.
137   *
138   * @param pwmGenerator the digital PWM handle
139   * @see "HAL_FreeDigitalPWM"
140   */
141  public static native void freeDigitalPWM(int pwmGenerator);
142
143  /**
144   * Changes the frequency of the DO PWM generator.
145   *
146   * <p>The valid range is from 0.6 Hz to 19 kHz.
147   *
148   * <p>The frequency resolution is logarithmic.
149   *
150   * @param rate the frequency to output all digital output PWM signals
151   * @see "HAL_SetDigitalPWMRate"
152   */
153  public static native void setDigitalPWMRate(double rate);
154
155  /**
156   * Configures the duty-cycle of the PWM generator.
157   *
158   * @param pwmGenerator the digital PWM handle
159   * @param dutyCycle the percent duty cycle to output [0..1]
160   * @see "HAL_SetDigitalPWMDutyCycle"
161   */
162  public static native void setDigitalPWMDutyCycle(int pwmGenerator, double dutyCycle);
163
164  /**
165   * Configures the digital PWM to be a PPS signal with specified duty cycle.
166   *
167   * @param pwmGenerator the digital PWM handle
168   * @param dutyCycle the percent duty cycle to output [0..1]
169   * @see "HAL_SetDigitalPWMPPS"
170   */
171  public static native void setDigitalPWMPPS(int pwmGenerator, double dutyCycle);
172
173  /**
174   * Configures which DO channel the PWM signal is output on.
175   *
176   * @param pwmGenerator the digital PWM handle
177   * @param channel the channel to output on
178   * @see "HAL_SetDigitalPWMOutputChannel"
179   */
180  public static native void setDigitalPWMOutputChannel(int pwmGenerator, int channel);
181
182  /** Utility class. */
183  DIOJNI() {}
184}