diff --git a/.gitignore b/.gitignore index 61f25ce..983678a 100644 --- a/.gitignore +++ b/.gitignore @@ -155,6 +155,7 @@ gradle-app.setting .project .settings/ bin/ +imgui.ini # End of https://www.gitignore.io/api/c++,java,linux,macos,gradle,windows,visualstudiocode diff --git a/.vscode/settings.json b/.vscode/settings.json index 860e319..5200b5c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,8 +7,9 @@ "**/CVS": true, "**/.DS_Store": true, "bin/": true, - ".classpath": true, - ".project": true - }, - "wpilib.online": true + "**/.classpath": true, + "**/.project": true, + "**/.settings": true, + "**/.factorypath": true + } } diff --git a/.wpilib/wpilib_preferences.json b/.wpilib/wpilib_preferences.json index 95c6671..a5920a4 100644 --- a/.wpilib/wpilib_preferences.json +++ b/.wpilib/wpilib_preferences.json @@ -1,6 +1,6 @@ { "enableCppIntellisense": false, "currentLanguage": "java", - "projectYear": "2019", + "projectYear": "2020", "teamNumber": 4388 } \ No newline at end of file diff --git a/build.gradle b/build.gradle index 9216a46..6ae9dcf 100644 --- a/build.gradle +++ b/build.gradle @@ -1,8 +1,11 @@ plugins { id "java" - id "edu.wpi.first.GradleRIO" version "2019.1.1" + id "edu.wpi.first.GradleRIO" version "2020.1.2" } +sourceCompatibility = JavaVersion.VERSION_11 +targetCompatibility = JavaVersion.VERSION_11 + def ROBOT_MAIN_CLASS = "frc4388.robot.Main" // Define my targets (RoboRIO) and artifacts (deployable files) @@ -35,27 +38,31 @@ deploy { } // Set this to true to enable desktop support. -def includeDesktopSupport = false - -// Maven central needed for JUnit -repositories { - mavenCentral() -} +def includeDesktopSupport = true // Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries. // Also defines JUnit 4. dependencies { - compile wpi.deps.wpilib() - compile wpi.deps.vendor.java() + implementation wpi.deps.wpilib() + nativeZip wpi.deps.wpilibJni(wpi.platforms.roborio) + nativeDesktopZip wpi.deps.wpilibJni(wpi.platforms.desktop) + + + implementation wpi.deps.vendor.java() nativeZip wpi.deps.vendor.jni(wpi.platforms.roborio) nativeDesktopZip wpi.deps.vendor.jni(wpi.platforms.desktop) - testCompile 'junit:junit:4.12' + + testImplementation 'junit:junit:4.12' + + // Enable simulation gui support. Must check the box in vscode to enable support + // upon debugging + simulation wpi.deps.sim.gui(wpi.platforms.desktop, false) } // Setting up my Jar File. In this case, adding all libraries into the main jar ('fat jar') // in order to make them all available at runtime. Also adding the manifest so WPILib // knows where to look for our Robot Class. jar { - from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } + from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } manifest edu.wpi.first.gradlerio.GradleRIOPlugin.javaManifest(ROBOT_MAIN_CLASS) } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 457aad0..cc4fdc2 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d08253c..d050f17 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=permwrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=permwrapper/dists diff --git a/gradlew b/gradlew index af6708f..2fe81a7 100644 --- a/gradlew +++ b/gradlew @@ -1,5 +1,21 @@ #!/usr/bin/env sh +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + ############################################################################## ## ## Gradle start up script for UN*X @@ -28,7 +44,7 @@ APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m"' +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" @@ -109,8 +125,8 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` JAVACMD=`cygpath --unix "$JAVACMD"` @@ -138,19 +154,19 @@ if $cygwin ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + i=`expr $i + 1` done case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi @@ -159,14 +175,9 @@ save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } -APP_ARGS=$(save "$@") +APP_ARGS=`save "$@"` # Collect all arguments for the java command, following the shell quoting and substitution rules eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 6d57edc..9618d8d 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,3 +1,19 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @@ -14,7 +30,7 @@ set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome diff --git a/settings.gradle b/settings.gradle index b0f4d48..81f96ab 100644 --- a/settings.gradle +++ b/settings.gradle @@ -4,17 +4,19 @@ pluginManagement { repositories { mavenLocal() gradlePluginPortal() - String frcYear = '2019' + String frcYear = '2020' File frcHome if (OperatingSystem.current().isWindows()) { String publicFolder = System.getenv('PUBLIC') if (publicFolder == null) { publicFolder = "C:\\Users\\Public" } - frcHome = new File(publicFolder, "frc${frcYear}") + def homeRoot = new File(publicFolder, "wpilib") + frcHome = new File(homeRoot, frcYear) } else { def userFolder = System.getProperty("user.home") - frcHome = new File(userFolder, "frc${frcYear}") + def homeRoot = new File(userFolder, "wpilib") + frcHome = new File(homeRoot, frcYear) } def frcHomeMaven = new File(frcHome, 'maven') maven { diff --git a/src/main/java/frc4388/robot/Constants.java b/src/main/java/frc4388/robot/Constants.java new file mode 100644 index 0000000..d5ab37e --- /dev/null +++ b/src/main/java/frc4388/robot/Constants.java @@ -0,0 +1,34 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 2018-2019 FIRST. All Rights Reserved. */ +/* Open Source Software - may be modified and shared by FRC teams. The code */ +/* must be accompanied by the FIRST BSD license file in the root directory of */ +/* the project. */ +/*----------------------------------------------------------------------------*/ + +package frc4388.robot; + +/** + * The Constants class provides a convenient place for teams to hold robot-wide numerical or boolean + * constants. This class should not be used for any other purpose. All constants should be + * declared globally (i.e. public static). Do not put anything functional in this class. + * + *
It is advised to statically import this class (or one of its inner classes) wherever the
+ * constants are needed, to reduce verbosity.
+ */
+public final class Constants {
+ public static final class DriveConstants {
+ public static final int DRIVE_LEFT_FRONT_CAN_ID = 2;
+ public static final int DRIVE_RIGHT_FRONT_CAN_ID = 4;
+ public static final int DRIVE_LEFT_BACK_CAN_ID = 3;
+ public static final int DRIVE_RIGHT_BACK_CAN_ID = 5;
+ }
+
+ public static final class LEDConstants {
+ public static final int LED_SPARK_ID = 0;
+ }
+
+ public static final class OIConstants {
+ public static final int XBOX_DRIVER_ID = 0;
+ public static final int XBOX_OPERATOR_ID = 1;
+ }
+}
diff --git a/src/main/java/frc4388/robot/OI.java b/src/main/java/frc4388/robot/OI.java
deleted file mode 100644
index e97b4bb..0000000
--- a/src/main/java/frc4388/robot/OI.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*----------------------------------------------------------------------------*/
-/* Copyright (c) 2017-2018 FIRST. All Rights Reserved. */
-/* Open Source Software - may be modified and shared by FRC teams. The code */
-/* must be accompanied by the FIRST BSD license file in the root directory of */
-/* the project. */
-/*----------------------------------------------------------------------------*/
-
-package frc4388.robot;
-
-import edu.wpi.first.wpilibj.Joystick;
-import edu.wpi.first.wpilibj.buttons.JoystickButton;
-import frc4388.robot.commands.Drive.DriveWithJoystick;
-import frc4388.robot.commands.Drive.GamerMove;
-import frc4388.utility.controller.IHandController;
-import frc4388.utility.controller.XboxController;
-
-/**
- * This class is the glue that binds the controls on the physical operator
- * interface to the commands and command groups that allow control of the robot.
- */
-public class OI {
- //// CREATING BUTTONS
- // One type of button is a joystick button which is any button on a
- //// joystick.
- // You create one by telling it which joystick it's on and which button
- // number it is.
- // Joystick stick = new Joystick(port);
- // Button button = new JoystickButton(stick, buttonNumber);
-
- // There are a few additional built in buttons you can use. Additionally,
- // by subclassing Button you can create custom triggers and bind those to
- // commands the same as any other Button.
-
- //// TRIGGERING COMMANDS WITH BUTTONS
- // Once you have a button, it's trivial to bind it to a button in one of
- // three ways:
-
- // Start the command when the button is pressed and let it run the command
- // until it is finished as determined by it's isFinished method.
- // button.whenPressed(new ExampleCommand());
-
- // Run the command while the button is being held down and interrupt it once
- // the button is released.
- // button.whileHeld(new ExampleCommand());
-
- // Start the command when the button is released and let it run the command
- // until it is finished as determined by it's isFinished method.
- // button.whenReleased(new ExampleCommand());
-
- private static OI instance;
-
- public static XboxController m_driverXbox;
- private static XboxController m_operatorXbox;
-
- public OI() {
- m_driverXbox = new XboxController(RobotMap.XBOX_DRIVER_ID);
- m_operatorXbox = new XboxController(RobotMap.XBOX_OPERATOR_ID);
-
- JoystickButton GamerMove = new JoystickButton(getDriverJoystick(), XboxController.A_BUTTON);
- GamerMove.whenPressed(new GamerMove());
- GamerMove.whenReleased(new DriveWithJoystick());
- }
-
- public static OI getInstance() {
- if(instance == null) {
- instance = new OI();
- }
- return instance;
- }
-
- public IHandController getDriverController() {
- return m_driverXbox;
- }
-
- public IHandController getOperatorController()
- {
- return m_operatorXbox;
- }
-
- public Joystick getOperatorJoystick()
- {
- return m_operatorXbox.getJoyStick();
- }
-
- public Joystick getDriverJoystick()
- {
- return m_driverXbox.getJoyStick();
- }
-}
diff --git a/src/main/java/frc4388/robot/Robot.java b/src/main/java/frc4388/robot/Robot.java
index aa44e07..7735364 100644
--- a/src/main/java/frc4388/robot/Robot.java
+++ b/src/main/java/frc4388/robot/Robot.java
@@ -1,5 +1,5 @@
/*----------------------------------------------------------------------------*/
-/* Copyright (c) 2017-2018 FIRST. All Rights Reserved. */
+/* Copyright (c) 2017-2019 FIRST. All Rights Reserved. */
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in the root directory of */
/* the project. */
@@ -8,15 +8,8 @@
package frc4388.robot;
import edu.wpi.first.wpilibj.TimedRobot;
-import edu.wpi.first.wpilibj.command.Command;
-import edu.wpi.first.wpilibj.command.Scheduler;
-import edu.wpi.first.wpilibj.smartdashboard.SendableChooser;
-import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
-import frc4388.robot.commands.ExampleCommand;
-import frc4388.robot.subsystems.Drive;
-import frc4388.robot.subsystems.ExampleSubsystem;
-import frc4388.robot.subsystems.LED;
-import frc4388.utility.controller.XboxController;
+import edu.wpi.first.wpilibj2.command.Command;
+import edu.wpi.first.wpilibj2.command.CommandScheduler;
/**
* The VM is configured to automatically run this class, and to call the
@@ -26,13 +19,9 @@ import frc4388.utility.controller.XboxController;
* project.
*/
public class Robot extends TimedRobot {
- public static ExampleSubsystem m_subsystem = new ExampleSubsystem();
- public static LED m_led = new LED();
- public static Drive m_Drive = new Drive();
- public static OI m_oi;
-
Command m_autonomousCommand;
- SendableChooser You can add additional auto modes by adding additional commands to the
- * chooser code above (like the commented example) or additional comparisons
- * to the switch structure below with additional strings & commands.
+ * This autonomous runs the autonomous command selected by your {@link RobotContainer} class.
*/
@Override
public void autonomousInit() {
- m_autonomousCommand = m_chooser.getSelected();
+ m_autonomousCommand = m_robotContainer.getAutonomousCommand();
/*
* String autoSelected = SmartDashboard.getString("Auto Selector",
@@ -96,7 +80,7 @@ public class Robot extends TimedRobot {
// schedule the autonomous command (example)
if (m_autonomousCommand != null) {
- m_autonomousCommand.start();
+ m_autonomousCommand.schedule();
}
}
@@ -105,7 +89,6 @@ public class Robot extends TimedRobot {
*/
@Override
public void autonomousPeriodic() {
- Scheduler.getInstance().run();
}
@Override
@@ -124,7 +107,7 @@ public class Robot extends TimedRobot {
*/
@Override
public void teleopPeriodic() {
- Scheduler.getInstance().run();
+
}
/**
diff --git a/src/main/java/frc4388/robot/RobotContainer.java b/src/main/java/frc4388/robot/RobotContainer.java
new file mode 100644
index 0000000..9ba1572
--- /dev/null
+++ b/src/main/java/frc4388/robot/RobotContainer.java
@@ -0,0 +1,91 @@
+/*----------------------------------------------------------------------------*/
+/* Copyright (c) 2018-2019 FIRST. All Rights Reserved. */
+/* Open Source Software - may be modified and shared by FRC teams. The code */
+/* must be accompanied by the FIRST BSD license file in the root directory of */
+/* the project. */
+/*----------------------------------------------------------------------------*/
+
+package frc4388.robot;
+
+import edu.wpi.first.wpilibj.Joystick;
+import edu.wpi.first.wpilibj2.command.Command;
+import edu.wpi.first.wpilibj2.command.InstantCommand;
+import edu.wpi.first.wpilibj2.command.button.JoystickButton;
+import frc4388.robot.Constants.*;
+import frc4388.robot.commands.Drive.DriveWithJoystick;
+import frc4388.robot.commands.Drive.GamerMove;
+import frc4388.robot.commands.LED.UpdateLED;
+import frc4388.robot.subsystems.Drive;
+import frc4388.robot.subsystems.LED;
+import frc4388.utility.controller.IHandController;
+import frc4388.utility.controller.XboxController;
+
+/**
+ * This class is where the bulk of the robot should be declared. Since
+ * Command-based is a "declarative" paradigm, very little robot logic should
+ * actually be handled in the {@link Robot} periodic methods (other than the
+ * scheduler calls). Instead, the structure of the robot (including subsystems,
+ * commands, and button mappings) should be declared here.
+ */
+public class RobotContainer {
+ /* Subsystems */
+ private final Drive m_robotDrive = new Drive();
+ private final LED m_robotLED = new LED();
+
+ /* Controllers */
+ private final XboxController m_driverXbox = new XboxController(OIConstants.XBOX_DRIVER_ID);
+ private final XboxController m_operatorXbox = new XboxController(OIConstants.XBOX_OPERATOR_ID);
+
+ /**
+ * The container for the robot. Contains subsystems, OI devices, and commands.
+ */
+ public RobotContainer() {
+ configureButtonBindings();
+
+ /* Default Commands */
+ m_robotDrive.setDefaultCommand(new DriveWithJoystick(m_robotDrive, getDriverController()));
+ m_robotLED.setDefaultCommand(new UpdateLED(m_robotLED));
+ }
+
+ /**
+ * Use this method to define your button->command mappings. Buttons can be created by
+ * instantiating a {@link GenericHID} or one of its subclasses ({@link
+ * edu.wpi.first.wpilibj.Joystick} or {@link XboxController}), and then passing it to a
+ * {@link edu.wpi.first.wpilibj2.command.button.JoystickButton}.
+ */
+ private void configureButtonBindings() {
+ new JoystickButton(getDriverJoystick(), XboxController.A_BUTTON)
+ .whenPressed(new GamerMove(m_robotDrive))
+ .whenReleased(new DriveWithJoystick(m_robotDrive, getDriverController()));
+ }
+
+ /**
+ * Use this to pass the autonomous command to the main {@link Robot} class.
+ *
+ * @return the command to run in autonomous
+ */
+ public Command getAutonomousCommand() {
+ // no auto
+ return new InstantCommand();
+ }
+
+
+ public IHandController getDriverController() {
+ return m_driverXbox;
+ }
+
+ public IHandController getOperatorController()
+ {
+ return m_operatorXbox;
+ }
+
+ public Joystick getOperatorJoystick()
+ {
+ return m_operatorXbox.getJoyStick();
+ }
+
+ public Joystick getDriverJoystick()
+ {
+ return m_driverXbox.getJoyStick();
+ }
+}
diff --git a/src/main/java/frc4388/robot/RobotMap.java b/src/main/java/frc4388/robot/RobotMap.java
deleted file mode 100644
index fe7fe7e..0000000
--- a/src/main/java/frc4388/robot/RobotMap.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*----------------------------------------------------------------------------*/
-/* Copyright (c) 2017-2018 FIRST. All Rights Reserved. */
-/* Open Source Software - may be modified and shared by FRC teams. The code */
-/* must be accompanied by the FIRST BSD license file in the root directory of */
-/* the project. */
-/*----------------------------------------------------------------------------*/
-
-package frc4388.robot;
-
-import frc4388.utility.controller.XboxController;
-
-/**
- * The RobotMap is a mapping from the ports sensors and actuators are wired into
- * to a variable name. This provides flexibility changing wiring, makes checking
- * the wiring easier and significantly reduces the number of magic numbers
- * floating around.
- */
-public class RobotMap {
- // For example to map the left and right motors, you could define the
- // following variables to use with your drivetrain subsystem.
- // public static int leftMotor = 1;
- // public static int rightMotor = 2;
-
- // If you are using multiple modules, make sure to define both the port
- // number and the module. For example you with a rangefinder:
- // public static int rangefinderPort = 1;
- // public static int rangefinderModule = 1;
-
- /* Xbox Controllers */
- public static final int XBOX_DRIVER_ID = 0;
- public static final int XBOX_OPERATOR_ID = 1;
-
- /* Blinkin LED Strip */
- public static final int LED_SPARK_ID = 0;
-
- /* Drive Train */
- public static final int DRIVE_LEFT_FRONT_CAN_ID = 2;
- public static final int DRIVE_RIGHT_FRONT_CAN_ID = 4;
- public static final int DRIVE_LEFT_BACK_CAN_ID = 3;
- public static final int DRIVE_RIGHT_BACK_CAN_ID = 5;
-}
diff --git a/src/main/java/frc4388/robot/commands/Drive/DriveWithJoystick.java b/src/main/java/frc4388/robot/commands/Drive/DriveWithJoystick.java
index 572b875..04b6870 100644
--- a/src/main/java/frc4388/robot/commands/Drive/DriveWithJoystick.java
+++ b/src/main/java/frc4388/robot/commands/Drive/DriveWithJoystick.java
@@ -1,5 +1,5 @@
/*----------------------------------------------------------------------------*/
-/* Copyright (c) 2018 FIRST. All Rights Reserved. */
+/* Copyright (c) 2019 FIRST. All Rights Reserved. */
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in the root directory of */
/* the project. */
@@ -7,47 +7,46 @@
package frc4388.robot.commands.Drive;
-import edu.wpi.first.wpilibj.command.Command;
-import frc4388.robot.OI;
-import frc4388.robot.Robot;
+import edu.wpi.first.wpilibj2.command.CommandBase;
+import frc4388.robot.subsystems.Drive;
+import frc4388.utility.controller.IHandController;
-public class DriveWithJoystick extends Command {
+public class DriveWithJoystick extends CommandBase {
+ private final Drive m_drive;
+ private final IHandController m_driverXbox;
public double m_inputMove, m_inputSteer;
- public DriveWithJoystick() {
- // Use requires() here to declare subsystem dependencies
- // eg. requires(chassis);
- requires(Robot.m_Drive);
+ /**
+ * Creates a new DriveWithJoystick, driving the robot with the given controller
+ */
+ public DriveWithJoystick(Drive subsystem, IHandController controller) {
+ m_drive = subsystem;
+ m_driverXbox = controller;
+ addRequirements(m_drive);
}
- // Called just before this Command runs the first time
+ // Called when the command is initially scheduled.
@Override
- protected void initialize() {
+ public void initialize() {
}
- // Called repeatedly when this Command is scheduled to run
+ // Called every time the scheduler runs while the command is scheduled.
@Override
- protected void execute() {
- m_inputMove = OI.getInstance().getDriverController().getLeftYAxis();
- m_inputSteer = -(OI.getInstance().getDriverController().getRightXAxis());
- Robot.m_Drive.driveWithInput(m_inputMove, m_inputSteer);
+ public void execute() {
+ m_inputMove = m_driverXbox.getLeftYAxis();
+ m_inputSteer = m_driverXbox.getRightXAxis();
+ m_drive.driveWithInput(m_inputMove, m_inputSteer);
}
- // Make this return true when this Command no longer needs to run execute()
+ // Called once the command ends or is interrupted.
@Override
- protected boolean isFinished() {
+ public void end(boolean interrupted) {
+ }
+
+ // Returns true when the command should end.
+ @Override
+ public boolean isFinished() {
return false;
}
-
- // Called once after isFinished returns true
- @Override
- protected void end() {
- }
-
- // Called when another command which requires one or more of the same
- // subsystems is scheduled to run
- @Override
- protected void interrupted() {
- }
}
diff --git a/src/main/java/frc4388/robot/commands/Drive/GamerMove.java b/src/main/java/frc4388/robot/commands/Drive/GamerMove.java
index b890aa5..d42fe4a 100644
--- a/src/main/java/frc4388/robot/commands/Drive/GamerMove.java
+++ b/src/main/java/frc4388/robot/commands/Drive/GamerMove.java
@@ -1,5 +1,5 @@
/*----------------------------------------------------------------------------*/
-/* Copyright (c) 2018 FIRST. All Rights Reserved. */
+/* Copyright (c) 2019 FIRST. All Rights Reserved. */
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in the root directory of */
/* the project. */
@@ -7,41 +7,41 @@
package frc4388.robot.commands.Drive;
-import edu.wpi.first.wpilibj.command.Command;
-import frc4388.robot.Robot;
+import edu.wpi.first.wpilibj2.command.CommandBase;
-public class GamerMove extends Command {
- public GamerMove() {
- // Use requires() here to declare subsystem dependencies
- // eg. requires(chassis);
- requires(Robot.m_Drive);
+import frc4388.robot.subsystems.Drive;
+
+public class GamerMove extends CommandBase {
+
+ private final Drive m_drive;
+
+ /**
+ * Creates a new GamerMove.
+ */
+ public GamerMove(Drive subsystem) {
+ m_drive = subsystem;
+ addRequirements(m_drive);
}
- // Called just before this Command runs the first time
+ // Called when the command is initially scheduled.
@Override
- protected void initialize() {
+ public void initialize() {
}
- // Called repeatedly when this Command is scheduled to run
+ // Called every time the scheduler runs while the command is scheduled.
@Override
- protected void execute() {
- Robot.m_Drive.driveWithInput(0, 1);
+ public void execute() {
+ m_drive.driveWithInput(0, 1);
}
- // Make this return true when this Command no longer needs to run execute()
+ // Called once the command ends or is interrupted.
@Override
- protected boolean isFinished() {
+ public void end(boolean interrupted) {
+ }
+
+ // Returns true when the command should end.
+ @Override
+ public boolean isFinished() {
return false;
}
-
- // Called once after isFinished returns true
- @Override
- protected void end() {
- }
-
- // Called when another command which requires one or more of the same
- // subsystems is scheduled to run
- @Override
- protected void interrupted() {
- }
}
diff --git a/src/main/java/frc4388/robot/commands/ExampleCommand.java b/src/main/java/frc4388/robot/commands/ExampleCommand.java
deleted file mode 100644
index cb8a9f6..0000000
--- a/src/main/java/frc4388/robot/commands/ExampleCommand.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*----------------------------------------------------------------------------*/
-/* Copyright (c) 2017-2018 FIRST. All Rights Reserved. */
-/* Open Source Software - may be modified and shared by FRC teams. The code */
-/* must be accompanied by the FIRST BSD license file in the root directory of */
-/* the project. */
-/*----------------------------------------------------------------------------*/
-
-package frc4388.robot.commands;
-
-import edu.wpi.first.wpilibj.command.Command;
-import frc4388.robot.Robot;
-
-/**
- * An example command. You can replace me with your own command.
- */
-public class ExampleCommand extends Command {
- public ExampleCommand() {
- // Use requires() here to declare subsystem dependencies
- requires(Robot.m_subsystem);
- }
-
- // Called just before this Command runs the first time
- @Override
- protected void initialize() {
- }
-
- // Called repeatedly when this Command is scheduled to run
- @Override
- protected void execute() {
- }
-
- // Make this return true when this Command no longer needs to run execute()
- @Override
- protected boolean isFinished() {
- return false;
- }
-
- // Called once after isFinished returns true
- @Override
- protected void end() {
- }
-
- // Called when another command which requires one or more of the same
- // subsystems is scheduled to run
- @Override
- protected void interrupted() {
- }
-}
diff --git a/src/main/java/frc4388/robot/commands/LED/SetLEDPattern.java b/src/main/java/frc4388/robot/commands/LED/SetLEDPattern.java
index 11c4447..785d23b 100644
--- a/src/main/java/frc4388/robot/commands/LED/SetLEDPattern.java
+++ b/src/main/java/frc4388/robot/commands/LED/SetLEDPattern.java
@@ -1,5 +1,5 @@
/*----------------------------------------------------------------------------*/
-/* Copyright (c) 2018 FIRST. All Rights Reserved. */
+/* Copyright (c) 2019 FIRST. All Rights Reserved. */
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in the root directory of */
/* the project. */
@@ -7,45 +7,28 @@
package frc4388.robot.commands.LED;
-import frc4388.robot.Robot;
+import edu.wpi.first.wpilibj2.command.InstantCommand;
+
import frc4388.robot.constants.LEDPatterns;
+import frc4388.robot.subsystems.LED;
-import edu.wpi.first.wpilibj.command.Command;
-
-public class SetLEDPattern extends Command {
+// NOTE: Consider using this command inline, rather than writing a subclass. For more
+// information, see:
+// https://docs.wpilib.org/en/latest/docs/software/commandbased/convenience-features.html
+public class SetLEDPattern extends InstantCommand {
+ private final LED m_led;
public static LEDPatterns m_pattern;
- public SetLEDPattern(LEDPatterns pattern) {
- requires(Robot.m_led);
+ public SetLEDPattern(LED subsystem, LEDPatterns pattern) {
+ m_led = subsystem;
m_pattern = pattern;
+ addRequirements(m_led);
}
- // Called just before this Command runs the first time
+ // Called when the command is initially scheduled.
@Override
- protected void initialize() {
- }
-
- // Called repeatedly when this Command is scheduled to run
- @Override
- protected void execute() {
- Robot.m_led.setPattern(m_pattern);
- }
-
- // Make this return true when this Command no longer needs to run execute()
- @Override
- protected boolean isFinished() {
- return true;
- }
-
- // Called once after isFinished returns true
- @Override
- protected void end() {
- }
-
- // Called when another command which requires one or more of the same
- // subsystems is scheduled to run
- @Override
- protected void interrupted() {
+ public void initialize() {
+ m_led.setPattern(m_pattern);
}
}
diff --git a/src/main/java/frc4388/robot/commands/LED/UpdateLED.java b/src/main/java/frc4388/robot/commands/LED/UpdateLED.java
index 3d6c374..7baab4e 100644
--- a/src/main/java/frc4388/robot/commands/LED/UpdateLED.java
+++ b/src/main/java/frc4388/robot/commands/LED/UpdateLED.java
@@ -1,5 +1,5 @@
/*----------------------------------------------------------------------------*/
-/* Copyright (c) 2018 FIRST. All Rights Reserved. */
+/* Copyright (c) 2019 FIRST. All Rights Reserved. */
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in the root directory of */
/* the project. */
@@ -7,40 +7,41 @@
package frc4388.robot.commands.LED;
-import edu.wpi.first.wpilibj.command.Command;
-import frc4388.robot.Robot;
+import edu.wpi.first.wpilibj2.command.CommandBase;
-public class UpdateLED extends Command {
- public UpdateLED() {
- // Use requires() here to declare subsystem dependencies
- requires(Robot.m_led);
+import frc4388.robot.subsystems.LED;
+
+public class UpdateLED extends CommandBase {
+
+ private final LED m_LED;
+
+ /**
+ * Creates a new UpdateLED that continually runs updateLED in the LED subsystem.
+ */
+ public UpdateLED(LED subsystem) {
+ m_LED = subsystem;
+ addRequirements(m_LED);
}
- // Called just before this Command runs the first time
+ // Called when the command is initially scheduled.
@Override
- protected void initialize() {
+ public void initialize() {
}
- // Called repeatedly when this Command is scheduled to run
+ // Called every time the scheduler runs while the command is scheduled.
@Override
- protected void execute() {
- Robot.m_led.updateLED();
+ public void execute() {
+ m_LED.updateLED();
}
- // Make this return true when this Command no longer needs to run execute()
+ // Called once the command ends or is interrupted.
@Override
- protected boolean isFinished() {
+ public void end(boolean interrupted) {
+ }
+
+ // Returns true when the command should end.
+ @Override
+ public boolean isFinished() {
return false;
}
-
- // Called once after isFinished returns true
- @Override
- protected void end() {
- }
-
- // Called when another command which requires one or more of the same
- // subsystems is scheduled to run
- @Override
- protected void interrupted() {
- }
}
diff --git a/src/main/java/frc4388/robot/subsystems/Drive.java b/src/main/java/frc4388/robot/subsystems/Drive.java
index 8090480..b5edc2f 100644
--- a/src/main/java/frc4388/robot/subsystems/Drive.java
+++ b/src/main/java/frc4388/robot/subsystems/Drive.java
@@ -7,37 +7,28 @@
package frc4388.robot.subsystems;
-import com.ctre.phoenix.motorcontrol.Faults;
import com.ctre.phoenix.motorcontrol.InvertType;
import com.ctre.phoenix.motorcontrol.NeutralMode;
-import com.ctre.phoenix.motorcontrol.can.TalonSRX;
import com.ctre.phoenix.motorcontrol.can.WPI_TalonSRX;
-import edu.wpi.first.wpilibj.Talon;
-import edu.wpi.first.wpilibj.command.Subsystem;
import edu.wpi.first.wpilibj.drive.DifferentialDrive;
-import frc4388.robot.RobotMap;
-import frc4388.robot.commands.Drive.DriveWithJoystick;
-import frc4388.robot.commands.Drive.GamerMove;
-import frc4388.robot.OI;
-import frc4388.robot.Robot;
-import frc4388.utility.controller.XboxController;
+import edu.wpi.first.wpilibj2.command.SubsystemBase;
+
+import frc4388.robot.Constants.DriveConstants;
/**
* Add your docs here.
*/
-public class Drive extends Subsystem {
+public class Drive extends SubsystemBase {
// Put methods for controlling this subsystem
// here. Call these from Commands.
- public static WPI_TalonSRX m_leftFrontMotor = new WPI_TalonSRX(RobotMap.DRIVE_LEFT_FRONT_CAN_ID);
- public static WPI_TalonSRX m_rightFrontMotor = new WPI_TalonSRX(RobotMap.DRIVE_RIGHT_FRONT_CAN_ID);
- public static WPI_TalonSRX m_leftBackMotor = new WPI_TalonSRX(RobotMap.DRIVE_LEFT_BACK_CAN_ID);
- public static WPI_TalonSRX m_rightBackMotor = new WPI_TalonSRX(RobotMap.DRIVE_RIGHT_BACK_CAN_ID);
+ public static WPI_TalonSRX m_leftFrontMotor = new WPI_TalonSRX(DriveConstants.DRIVE_LEFT_FRONT_CAN_ID);
+ public static WPI_TalonSRX m_rightFrontMotor = new WPI_TalonSRX(DriveConstants.DRIVE_RIGHT_FRONT_CAN_ID);
+ public static WPI_TalonSRX m_leftBackMotor = new WPI_TalonSRX(DriveConstants.DRIVE_LEFT_BACK_CAN_ID);
+ public static WPI_TalonSRX m_rightBackMotor = new WPI_TalonSRX(DriveConstants.DRIVE_RIGHT_BACK_CAN_ID);
public static DifferentialDrive m_driveTrain = new DifferentialDrive(m_leftFrontMotor, m_rightFrontMotor);
-
- private static double m_inputMove, m_inputSteer;
public Drive(){
/* factory default values */
@@ -67,10 +58,10 @@ public class Drive extends Subsystem {
m_driveTrain.arcadeDrive(move, steer);
}
- @Override
+ /* @Override
public void initDefaultCommand(){
// Set the default command for a subsystem here.
// setDefaultCommand(new MySpecialCommand());
setDefaultCommand(new DriveWithJoystick());
- }
+ } */
}
diff --git a/src/main/java/frc4388/robot/subsystems/ExampleSubsystem.java b/src/main/java/frc4388/robot/subsystems/ExampleSubsystem.java
deleted file mode 100644
index 50ace89..0000000
--- a/src/main/java/frc4388/robot/subsystems/ExampleSubsystem.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*----------------------------------------------------------------------------*/
-/* Copyright (c) 2017-2018 FIRST. All Rights Reserved. */
-/* Open Source Software - may be modified and shared by FRC teams. The code */
-/* must be accompanied by the FIRST BSD license file in the root directory of */
-/* the project. */
-/*----------------------------------------------------------------------------*/
-
-package frc4388.robot.subsystems;
-
-import edu.wpi.first.wpilibj.command.Subsystem;
-
-/**
- * An example subsystem. You can replace me with your own Subsystem.
- */
-public class ExampleSubsystem extends Subsystem {
- // Put methods for controlling this subsystem
- // here. Call these from Commands.
-
- @Override
- public void initDefaultCommand() {
- // Set the default command for a subsystem here.
- // setDefaultCommand(new MySpecialCommand());
- }
-}
diff --git a/src/main/java/frc4388/robot/subsystems/LED.java b/src/main/java/frc4388/robot/subsystems/LED.java
index 3e94807..c7ed045 100644
--- a/src/main/java/frc4388/robot/subsystems/LED.java
+++ b/src/main/java/frc4388/robot/subsystems/LED.java
@@ -7,23 +7,24 @@
package frc4388.robot.subsystems;
-import frc4388.robot.RobotMap;
-import frc4388.robot.commands.LED.UpdateLED;
-import frc4388.robot.constants.LEDPatterns;
import edu.wpi.first.wpilibj.Spark;
-import edu.wpi.first.wpilibj.command.Subsystem;
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
+import edu.wpi.first.wpilibj2.command.SubsystemBase;
+
+import frc4388.robot.Constants.LEDConstants;
+import frc4388.robot.constants.LEDPatterns;
/**
- * Allows for the control of a 5v LED Strip using a Rev Robotics Blinkin LED Driver
+ * Allows for the control of a 5v LED Strip using a Rev Robotics Blinkin LED
+ * Driver
*/
- public class LED extends Subsystem {
+public class LED extends SubsystemBase {
public static float currentLED;
public static Spark LEDController;
public LED(){
- LEDController = new Spark(RobotMap.LED_SPARK_ID);
+ LEDController = new Spark(LEDConstants.LED_SPARK_ID);
setPattern(LEDPatterns.FOREST_WAVES);
LEDController.set(currentLED);
System.err.println("In the Beginning, there was Joe.\nAnd he said, 'Let there be LEDs.'\nAnd it was good.");
@@ -43,10 +44,10 @@ import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
SmartDashboard.putNumber("LED", currentLED);
}
- @Override
+ /* @Override
public void initDefaultCommand() {
// Set the default command for a subsystem here.
// setDefaultCommand(new MySpecialCommand());
setDefaultCommand(new UpdateLED());
- }
+ } */
}
\ No newline at end of file
diff --git a/src/main/java/frc4388/utility/controller/XboxTriggerButton.java b/src/main/java/frc4388/utility/controller/XboxTriggerButton.java
index aed4436..26372c2 100644
--- a/src/main/java/frc4388/utility/controller/XboxTriggerButton.java
+++ b/src/main/java/frc4388/utility/controller/XboxTriggerButton.java
@@ -1,9 +1,8 @@
package frc4388.utility.controller;
+import edu.wpi.first.wpilibj2.command.button.Button;
import frc4388.utility.controller.XboxController;
-import edu.wpi.first.wpilibj.buttons.Button;
-
/**
* Mapping for the Xbox controller triggers to allow triggers to be defined as
* buttons in {@link frc4388.robot.OI}. Checks to see if the given trigger
diff --git a/vendordeps/Phoenix.json b/vendordeps/Phoenix.json
index d4da1ce..f8d42a4 100644
--- a/vendordeps/Phoenix.json
+++ b/vendordeps/Phoenix.json
@@ -1,7 +1,7 @@
{
"fileName": "Phoenix.json",
"name": "CTRE-Phoenix",
- "version": "5.12.0",
+ "version": "5.17.3",
"uuid": "ab676553-b602-441f-a38d-f1296eff6537",
"mavenUrls": [
"http://devsite.ctr-electronics.com/maven/release/"
@@ -11,19 +11,65 @@
{
"groupId": "com.ctre.phoenix",
"artifactId": "api-java",
- "version": "5.12.0"
+ "version": "5.17.3"
},
{
"groupId": "com.ctre.phoenix",
"artifactId": "wpiapi-java",
- "version": "5.12.0"
+ "version": "5.17.3"
}
],
"jniDependencies": [
{
"groupId": "com.ctre.phoenix",
"artifactId": "cci",
- "version": "5.12.0",
+ "version": "5.17.3",
+ "isJar": false,
+ "skipInvalidPlatforms": true,
+ "validPlatforms": [
+ "linuxathena",
+ "windowsx86-64",
+ "linuxx86-64"
+ ]
+ },
+ {
+ "groupId": "com.ctre.phoenix",
+ "artifactId": "diagnostics",
+ "version": "5.17.3",
+ "isJar": false,
+ "skipInvalidPlatforms": true,
+ "validPlatforms": [
+ "linuxathena",
+ "windowsx86-64",
+ "linuxx86-64"
+ ]
+ },
+ {
+ "groupId": "com.ctre.phoenix",
+ "artifactId": "canutils",
+ "version": "5.17.3",
+ "isJar": false,
+ "skipInvalidPlatforms": true,
+ "validPlatforms": [
+ "windowsx86-64",
+ "linuxx86-64"
+ ]
+ },
+ {
+ "groupId": "com.ctre.phoenix",
+ "artifactId": "platform-stub",
+ "version": "5.17.3",
+ "isJar": false,
+ "skipInvalidPlatforms": true,
+ "validPlatforms": [
+ "windowsx86-64",
+ "linuxx86-64"
+ ]
+ },
+ {
+ "groupId": "com.ctre.phoenix",
+ "artifactId": "core",
+ "version": "5.17.3",
"isJar": false,
"skipInvalidPlatforms": true,
"validPlatforms": [
@@ -37,7 +83,7 @@
{
"groupId": "com.ctre.phoenix",
"artifactId": "wpiapi-cpp",
- "version": "5.12.0",
+ "version": "5.17.3",
"libName": "CTRE_Phoenix_WPI",
"headerClassifier": "headers",
"sharedLibrary": false,
@@ -51,7 +97,7 @@
{
"groupId": "com.ctre.phoenix",
"artifactId": "api-cpp",
- "version": "5.12.0",
+ "version": "5.17.3",
"libName": "CTRE_Phoenix",
"headerClassifier": "headers",
"sharedLibrary": false,
@@ -65,7 +111,7 @@
{
"groupId": "com.ctre.phoenix",
"artifactId": "cci",
- "version": "5.12.0",
+ "version": "5.17.3",
"libName": "CTRE_PhoenixCCI",
"headerClassifier": "headers",
"sharedLibrary": false,
@@ -76,12 +122,59 @@
"linuxx86-64"
]
},
+ {
+ "groupId": "com.ctre.phoenix",
+ "artifactId": "diagnostics",
+ "version": "5.17.3",
+ "libName": "CTRE_PhoenixDiagnostics",
+ "headerClassifier": "headers",
+ "sharedLibrary": false,
+ "skipInvalidPlatforms": true,
+ "binaryPlatforms": [
+ "linuxathena",
+ "windowsx86-64",
+ "linuxx86-64"
+ ]
+ },
+ {
+ "groupId": "com.ctre.phoenix",
+ "artifactId": "canutils",
+ "version": "5.17.3",
+ "libName": "CTRE_PhoenixCanutils",
+ "headerClassifier": "headers",
+ "sharedLibrary": false,
+ "skipInvalidPlatforms": true,
+ "binaryPlatforms": [
+ "windowsx86-64",
+ "linuxx86-64"
+ ]
+ },
+ {
+ "groupId": "com.ctre.phoenix",
+ "artifactId": "platform-stub",
+ "version": "5.17.3",
+ "libName": "CTRE_PhoenixPlatform",
+ "headerClassifier": "headers",
+ "sharedLibrary": false,
+ "skipInvalidPlatforms": true,
+ "binaryPlatforms": [
+ "windowsx86-64",
+ "linuxx86-64"
+ ]
+ },
{
"groupId": "com.ctre.phoenix",
"artifactId": "core",
- "version": "5.12.0",
+ "version": "5.17.3",
"libName": "CTRE_PhoenixCore",
- "headerClassifier": "headers"
+ "headerClassifier": "headers",
+ "sharedLibrary": false,
+ "skipInvalidPlatforms": true,
+ "binaryPlatforms": [
+ "linuxathena",
+ "windowsx86-64",
+ "linuxx86-64"
+ ]
}
]
}
\ No newline at end of file
diff --git a/vendordeps/WPILibNewCommands.json b/vendordeps/WPILibNewCommands.json
new file mode 100644
index 0000000..83de291
--- /dev/null
+++ b/vendordeps/WPILibNewCommands.json
@@ -0,0 +1,37 @@
+{
+ "fileName": "WPILibNewCommands.json",
+ "name": "WPILib-New-Commands",
+ "version": "2020.0.0",
+ "uuid": "111e20f7-815e-48f8-9dd6-e675ce75b266",
+ "mavenUrls": [],
+ "jsonUrl": "",
+ "javaDependencies": [
+ {
+ "groupId": "edu.wpi.first.wpilibNewCommands",
+ "artifactId": "wpilibNewCommands-java",
+ "version": "wpilib"
+ }
+ ],
+ "jniDependencies": [],
+ "cppDependencies": [
+ {
+ "groupId": "edu.wpi.first.wpilibNewCommands",
+ "artifactId": "wpilibNewCommands-cpp",
+ "version": "wpilib",
+ "libName": "wpilibNewCommands",
+ "headerClassifier": "headers",
+ "sourcesClassifier": "sources",
+ "sharedLibrary": true,
+ "skipInvalidPlatforms": true,
+ "binaryPlatforms": [
+ "linuxathena",
+ "linuxraspbian",
+ "linuxaarch64bionic",
+ "windowsx86-64",
+ "windowsx86",
+ "linuxx86-64",
+ "osxx86-64"
+ ]
+ }
+ ]
+}
\ No newline at end of file