2020-12-26 14:12:05 -08:00
|
|
|
// Copyright (c) FIRST and other WPILib contributors.
|
|
|
|
|
// Open Source Software; you can modify and/or share it under the terms of
|
|
|
|
|
// the WPILib BSD license file in the root directory of this project.
|
2020-07-15 00:33:57 -07:00
|
|
|
|
|
|
|
|
package edu.wpi.first.wpilibj.simulation;
|
|
|
|
|
|
2025-06-29 18:32:26 -07:00
|
|
|
import edu.wpi.first.wpilibj.DriverStation;
|
2020-07-15 00:33:57 -07:00
|
|
|
import edu.wpi.first.wpilibj.GenericHID;
|
|
|
|
|
|
2020-12-29 22:45:16 -08:00
|
|
|
/** Class to control a simulated generic joystick. */
|
2020-07-15 00:33:57 -07:00
|
|
|
public class GenericHIDSim {
|
2024-01-05 07:35:59 -08:00
|
|
|
/** GenericHID port. */
|
2020-07-15 00:33:57 -07:00
|
|
|
protected final int m_port;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Constructs from a GenericHID object.
|
|
|
|
|
*
|
|
|
|
|
* @param joystick joystick to simulate
|
|
|
|
|
*/
|
|
|
|
|
public GenericHIDSim(GenericHID joystick) {
|
|
|
|
|
m_port = joystick.getPort();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Constructs from a joystick port number.
|
|
|
|
|
*
|
|
|
|
|
* @param port port number
|
|
|
|
|
*/
|
|
|
|
|
public GenericHIDSim(int port) {
|
|
|
|
|
m_port = port;
|
|
|
|
|
}
|
|
|
|
|
|
2020-12-29 22:45:16 -08:00
|
|
|
/** Updates joystick data so that new values are visible to the user program. */
|
2020-07-15 00:33:57 -07:00
|
|
|
public void notifyNewData() {
|
|
|
|
|
DriverStationSim.notifyNewData();
|
|
|
|
|
}
|
|
|
|
|
|
2021-01-11 21:55:45 -08:00
|
|
|
/**
|
|
|
|
|
* Set the value of a given button.
|
|
|
|
|
*
|
|
|
|
|
* @param button the button to set
|
|
|
|
|
* @param value the new value
|
|
|
|
|
*/
|
2020-07-15 00:33:57 -07:00
|
|
|
public void setRawButton(int button, boolean value) {
|
|
|
|
|
DriverStationSim.setJoystickButton(m_port, button, value);
|
|
|
|
|
}
|
|
|
|
|
|
2021-01-11 21:55:45 -08:00
|
|
|
/**
|
|
|
|
|
* Set the value of a given axis.
|
|
|
|
|
*
|
|
|
|
|
* @param axis the axis to set
|
|
|
|
|
* @param value the new value
|
|
|
|
|
*/
|
2020-07-15 00:33:57 -07:00
|
|
|
public void setRawAxis(int axis, double value) {
|
|
|
|
|
DriverStationSim.setJoystickAxis(m_port, axis, value);
|
|
|
|
|
}
|
|
|
|
|
|
2021-01-11 21:55:45 -08:00
|
|
|
/**
|
|
|
|
|
* Set the value of a given POV.
|
|
|
|
|
*
|
|
|
|
|
* @param pov the POV to set
|
|
|
|
|
* @param value the new value
|
|
|
|
|
*/
|
2025-06-29 18:32:26 -07:00
|
|
|
public void setPOV(int pov, DriverStation.POVDirection value) {
|
2020-07-15 00:33:57 -07:00
|
|
|
DriverStationSim.setJoystickPOV(m_port, pov, value);
|
|
|
|
|
}
|
|
|
|
|
|
2021-01-11 21:55:45 -08:00
|
|
|
/**
|
|
|
|
|
* Set the value of the default POV (port 0).
|
|
|
|
|
*
|
|
|
|
|
* @param value the new value
|
|
|
|
|
*/
|
2025-06-29 18:32:26 -07:00
|
|
|
public void setPOV(DriverStation.POVDirection value) {
|
2020-07-15 00:33:57 -07:00
|
|
|
setPOV(0, value);
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-25 23:03:50 -07:00
|
|
|
/**
|
|
|
|
|
* Set the maximum axis index for this device.
|
|
|
|
|
*
|
|
|
|
|
* @param maximumIndex the new maximum axis index
|
|
|
|
|
*/
|
|
|
|
|
public void setAxesMaximumIndex(int maximumIndex) {
|
|
|
|
|
DriverStationSim.setJoystickAxesMaximumIndex(m_port, maximumIndex);
|
|
|
|
|
}
|
|
|
|
|
|
2021-01-11 21:55:45 -08:00
|
|
|
/**
|
|
|
|
|
* Set the axis count of this device.
|
|
|
|
|
*
|
|
|
|
|
* @param count the new axis count
|
|
|
|
|
*/
|
2025-10-25 23:03:50 -07:00
|
|
|
public void setAxesAvailable(int count) {
|
|
|
|
|
DriverStationSim.setJoystickAxesAvailable(m_port, count);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Set the maximum POV index for this device.
|
|
|
|
|
*
|
|
|
|
|
* @param maximumIndex the new maximum POV index
|
|
|
|
|
*/
|
|
|
|
|
public void setPOVsMaximumIndex(int maximumIndex) {
|
|
|
|
|
DriverStationSim.setJoystickPOVsMaximumIndex(m_port, maximumIndex);
|
2020-07-15 00:33:57 -07:00
|
|
|
}
|
|
|
|
|
|
2021-01-11 21:55:45 -08:00
|
|
|
/**
|
|
|
|
|
* Set the POV count of this device.
|
|
|
|
|
*
|
|
|
|
|
* @param count the new POV count
|
|
|
|
|
*/
|
2025-10-25 23:03:50 -07:00
|
|
|
public void setPOVsAvailable(int count) {
|
|
|
|
|
DriverStationSim.setJoystickPOVsAvailable(m_port, count);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Set the maximum button index for this device.
|
|
|
|
|
*
|
|
|
|
|
* @param maximumIndex the new maximum button index
|
|
|
|
|
*/
|
|
|
|
|
public void setButtonsMaximumIndex(int maximumIndex) {
|
|
|
|
|
DriverStationSim.setJoystickButtonsMaximumIndex(m_port, maximumIndex);
|
2020-07-15 00:33:57 -07:00
|
|
|
}
|
|
|
|
|
|
2021-01-11 21:55:45 -08:00
|
|
|
/**
|
|
|
|
|
* Set the button count of this device.
|
|
|
|
|
*
|
|
|
|
|
* @param count the new button count
|
|
|
|
|
*/
|
2025-10-25 23:03:50 -07:00
|
|
|
public void setButtonsAvailable(long count) {
|
|
|
|
|
DriverStationSim.setJoystickButtonsAvailable(m_port, count);
|
2020-07-15 00:33:57 -07:00
|
|
|
}
|
|
|
|
|
|
2021-01-11 21:55:45 -08:00
|
|
|
/**
|
|
|
|
|
* Set the type of this device.
|
|
|
|
|
*
|
|
|
|
|
* @param type the new device type
|
|
|
|
|
*/
|
2020-07-15 00:33:57 -07:00
|
|
|
public void setType(GenericHID.HIDType type) {
|
|
|
|
|
DriverStationSim.setJoystickType(m_port, type.value);
|
|
|
|
|
}
|
|
|
|
|
|
2021-01-11 21:55:45 -08:00
|
|
|
/**
|
|
|
|
|
* Set the name of this device.
|
|
|
|
|
*
|
|
|
|
|
* @param name the new device name
|
|
|
|
|
*/
|
2020-07-15 00:33:57 -07:00
|
|
|
public void setName(String name) {
|
|
|
|
|
DriverStationSim.setJoystickName(m_port, name);
|
|
|
|
|
}
|
|
|
|
|
|
2021-01-11 21:55:45 -08:00
|
|
|
/**
|
|
|
|
|
* Read the output of a button.
|
|
|
|
|
*
|
|
|
|
|
* @param outputNumber the button number
|
|
|
|
|
* @return the value of the button (true = pressed)
|
|
|
|
|
*/
|
2020-07-15 00:33:57 -07:00
|
|
|
public boolean getOutput(int outputNumber) {
|
|
|
|
|
long outputs = getOutputs();
|
2023-12-03 16:21:32 -08:00
|
|
|
return (outputs & (1L << (outputNumber - 1))) != 0;
|
2020-07-15 00:33:57 -07:00
|
|
|
}
|
|
|
|
|
|
2021-01-11 21:55:45 -08:00
|
|
|
/**
|
|
|
|
|
* Get the encoded 16-bit integer that passes button values.
|
|
|
|
|
*
|
|
|
|
|
* @return the button values
|
|
|
|
|
*/
|
2020-07-15 00:33:57 -07:00
|
|
|
public long getOutputs() {
|
|
|
|
|
return DriverStationSim.getJoystickOutputs(m_port);
|
|
|
|
|
}
|
|
|
|
|
|
2021-01-11 21:55:45 -08:00
|
|
|
/**
|
|
|
|
|
* Get the joystick rumble.
|
|
|
|
|
*
|
|
|
|
|
* @param type the rumble to read
|
|
|
|
|
* @return the rumble value
|
|
|
|
|
*/
|
2020-07-15 00:33:57 -07:00
|
|
|
public double getRumble(GenericHID.RumbleType type) {
|
2020-12-29 22:45:16 -08:00
|
|
|
int value =
|
|
|
|
|
DriverStationSim.getJoystickRumble(
|
|
|
|
|
m_port, type == GenericHID.RumbleType.kLeftRumble ? 0 : 1);
|
2020-07-15 00:33:57 -07:00
|
|
|
return value / 65535.0;
|
|
|
|
|
}
|
|
|
|
|
}
|