From 6d854afb0edb0f94eab78f9c9427174abc19a95a Mon Sep 17 00:00:00 2001 From: Fredric Silberberg Date: Thu, 24 Sep 2015 20:26:49 -0400 Subject: [PATCH] WPILib Reorganization This is a major restructuring of the WPILib repository to simply build procedures and remove the remnants of Maven from everything except the eclipse plugins. Gradle files have been largely simplified or rewritten, taking advantage of splitting up parts of the build into separate build files for ease of reading. The eclipse plugins are now in a separate project, as is ntcore. All dependencies are resolved via Maven dependencies, with the Jenkins-maintained WPILib repo. Project structures have also been simplified: we no longer have separate subprojects inside wpilibc and wpilibj. Where possible, these changes hav been done with git renames, to make sure we still have full history for all repositories. Other unrelated subprojects have also been broken out: OutlineViewer is now a separate project. Change-Id: Ib4e2a6e1a2f66427a14f16612b0e0d69ed661878 --- .gitmodules | 3 - CMakeLists.txt | 5 +- Vagrantfile | 125 - bootstrap.sh | 28 - build.gradle | 230 +- cppSettings.gradle | 179 + driver-station/build.gradle | 4 - driver-station/pom.xml | 44 - .../first/driverstation/DriverStation.java | 248 - .../wpi/first/driverstation/ReadThread.java | 42 - .../driverstation/fms/FMSController.java | 249 - .../first/driverstation/fms/FMSInterface.java | 25 - .../driverstation/fms/NoFMSController.java | 54 - .../driverstation/robotcoms/ControlMode.java | 24 - .../driverstation/robotcoms/RobotComm.java | 319 - eclipse-plugins/.gitattributes | 4 - eclipse-plugins/.gitignore | 4 - .../build.properties | 1 - .../feature.xml | 62 - .../pom.xml | 16 - .../META-INF/MANIFEST.MF | 35 - .../WPILib Intro/css/graphics/sample.gif | Bin 1362 -> 0 bytes .../WPILib Intro/css/graphics/sample_hov.gif | Bin 1553 -> 0 bytes .../WPILib Intro/css/sample.css | 3 - .../WPILib Intro/sample.xml | 10 - .../build.properties | 10 - .../icons/outlineviewer16x16.png | Bin 474 -> 0 bytes .../icons/robotbuilder.png | Bin 18184 -> 0 bytes .../icons/robotbuilder16x16.png | Bin 538 -> 0 bytes .../icons/sample.gif | Bin 983 -> 0 bytes .../icons/sfxdashboard16x16.png | Bin 627 -> 0 bytes .../icons/smartdashboard16x16.png | Bin 493 -> 0 bytes .../icons/wpi.ico | Bin 894 -> 0 bytes .../plugin.xml | 104 - .../edu.wpi.first.wpilib.plugins.core/pom.xml | 233 - .../resources/configuration.properties | 2 - .../first/wpilib/plugins/core/WPILibCore.java | 162 - .../core/actions/RunOutlineViewerAction.java | 77 - .../core/actions/RunRobotBuilderAction.java | 77 - .../core/actions/RunSFXDashboardAction.java | 77 - .../RunSimulationSmartDashboardAction.java | 77 - .../core/actions/RunSmartDashboardAction.java | 77 - .../plugins/core/ant/AntPropertiesParser.java | 83 - .../core/installer/AbstractInstaller.java | 280 - .../core/installer/ToolsInstaller.java | 31 - .../plugins/core/launching/AntLauncher.java | 148 - .../launching/SimulationNotification.java | 40 - .../plugins/core/nature/FRCProjectNature.java | 97 - .../core/preferences/ComboFieldEditor.java | 69 - .../core/preferences/PreferenceConstants.java | 10 - .../preferences/PreferenceInitializer.java | 26 - .../preferences/WPILibPreferencePage.java | 98 - .../plugins/core/wizards/ExampleWizard.java | 90 - .../core/wizards/ExampleWizardChoicePage.java | 266 - .../plugins/core/wizards/IExampleProject.java | 23 - .../plugins/core/wizards/INewProjectInfo.java | 24 - .../plugins/core/wizards/IProjectCreator.java | 60 - .../plugins/core/wizards/IProjectFilter.java | 17 - .../core/wizards/NewProjectMainPage.java | 255 - .../core/wizards/ProjectComboField.java | 56 - .../core/wizards/ProjectCreationUtils.java | 209 - .../plugins/core/wizards/ProjectType.java | 14 - .../wpilib/plugins/core/wizards/Tag.java | 19 - .../plugins/core/wizards/TeamNumberPage.java | 111 - .../build.properties | 1 - .../feature.xml | 64 - .../pom.xml | 16 - .../META-INF/MANIFEST.MF | 34 - .../build.properties | 9 - .../plugin.xml | 273 - .../edu.wpi.first.wpilib.plugins.cpp/pom.xml | 213 - .../resources/configuration.properties | 2 - .../resources/icons/Button.png | Bin 790 -> 0 bytes .../resources/icons/Command.png | Bin 3287 -> 0 bytes .../resources/icons/CommandGroup.png | Bin 3376 -> 0 bytes .../resources/icons/Gazebo.png | Bin 780 -> 0 bytes .../resources/icons/PIDSubsystem.png | Bin 3665 -> 0 bytes .../resources/icons/Subsystem.png | Bin 3664 -> 0 bytes .../resources/icons/sample.gif | Bin 983 -> 0 bytes .../resources/icons/wpi.ico | Bin 894 -> 0 bytes .../resources/templates/.cproject | 284 - .../resources/templates/build.properties | 11 - .../resources/templates/build.xml | 28 - .../templates/command-based/Command.cpp | 38 - .../templates/command-based/Command.h | 18 - .../templates/command-based/CommandBase.cpp | 27 - .../templates/command-based/CommandBase.h | 26 - .../templates/command-based/CommandGroup.cpp | 21 - .../templates/command-based/CommandGroup.h | 13 - .../command-based/ExampleCommand.cpp | 38 - .../templates/command-based/ExampleCommand.h | 18 - .../command-based/ExampleSubsystem.cpp | 18 - .../command-based/ExampleSubsystem.h | 17 - .../resources/templates/command-based/OI.cpp | 6 - .../resources/templates/command-based/OI.h | 14 - .../templates/command-based/PIDSubsystem.cpp | 32 - .../templates/command-based/PIDSubsystem.h | 16 - .../templates/command-based/Robot.cpp | 64 - .../templates/command-based/RobotMap.h | 23 - .../templates/command-based/Subsystem.cpp | 17 - .../templates/command-based/Subsystem.h | 17 - .../templates/command-based/Trigger.cpp | 12 - .../templates/command-based/Trigger.h | 13 - .../examples/2015Vision/Color_src/Robot.cpp | 237 - .../examples/2015Vision/Retro_src/Robot.cpp | 210 - .../examples/ArcadeDrive/src/Robot.cpp | 40 - .../examples/AxisCameraSample/src/Robot.cpp | 37 - .../templates/examples/CANPDP/src/Robot.cpp | 47 - .../templates/examples/CANTalon/src/Robot.cpp | 38 - .../examples/CANTalonPID/src/Robot.cpp | 63 - .../templates/examples/Encoder/src/Robot.cpp | 82 - .../GearsBot/src/Commands/Autonomous.cpp | 22 - .../GearsBot/src/Commands/Autonomous.h | 15 - .../GearsBot/src/Commands/CloseClaw.cpp | 34 - .../GearsBot/src/Commands/CloseClaw.h | 20 - .../GearsBot/src/Commands/DriveStraight.cpp | 50 - .../GearsBot/src/Commands/DriveStraight.h | 37 - .../GearsBot/src/Commands/OpenClaw.cpp | 31 - .../examples/GearsBot/src/Commands/OpenClaw.h | 20 - .../examples/GearsBot/src/Commands/Pickup.cpp | 12 - .../examples/GearsBot/src/Commands/Pickup.h | 15 - .../examples/GearsBot/src/Commands/Place.cpp | 12 - .../examples/GearsBot/src/Commands/Place.h | 14 - .../GearsBot/src/Commands/PrepareToPickup.cpp | 12 - .../GearsBot/src/Commands/PrepareToPickup.h | 14 - .../src/Commands/SetDistanceToBox.cpp | 50 - .../GearsBot/src/Commands/SetDistanceToBox.h | 37 - .../src/Commands/SetElevatorSetpoint.cpp | 29 - .../src/Commands/SetElevatorSetpoint.h | 23 - .../src/Commands/SetWristSetpoint.cpp | 28 - .../GearsBot/src/Commands/SetWristSetpoint.h | 23 - .../src/Commands/TankDriveWithJoystick.cpp | 30 - .../src/Commands/TankDriveWithJoystick.h | 19 - .../templates/examples/GearsBot/src/OI.cpp | 50 - .../templates/examples/GearsBot/src/OI.h | 22 - .../templates/examples/GearsBot/src/Robot.cpp | 52 - .../templates/examples/GearsBot/src/Robot.h | 42 - .../examples/GearsBot/src/Subsystems/Claw.cpp | 31 - .../examples/GearsBot/src/Subsystems/Claw.h | 45 - .../GearsBot/src/Subsystems/DriveTrain.cpp | 80 - .../GearsBot/src/Subsystems/DriveTrain.h | 65 - .../GearsBot/src/Subsystems/Elevator.cpp | 36 - .../GearsBot/src/Subsystems/Elevator.h | 42 - .../GearsBot/src/Subsystems/Wrist.cpp | 36 - .../examples/GearsBot/src/Subsystems/Wrist.h | 40 - .../examples/GettingStarted/src/Robot.cpp | 54 - .../templates/examples/Gyro/src/Robot.cpp | 81 - .../examples/GyroMecanum/src/Robot.cpp | 67 - .../examples/IntermediateVision/src/Robot.cpp | 50 - .../examples/MecanumDrive/src/Robot.cpp | 49 - .../examples/MotorControl/src/Robot.cpp | 44 - .../MotorControlEncoder/src/Robot.cpp | 55 - .../PacGoat/src/Commands/CheckForHotGoal.cpp | 25 - .../PacGoat/src/Commands/CheckForHotGoal.h | 22 - .../PacGoat/src/Commands/CloseClaw.cpp | 27 - .../examples/PacGoat/src/Commands/CloseClaw.h | 22 - .../examples/PacGoat/src/Commands/Collect.cpp | 14 - .../examples/PacGoat/src/Commands/Collect.h | 14 - .../src/Commands/DriveAndShootAutonomous.cpp | 21 - .../src/Commands/DriveAndShootAutonomous.h | 15 - .../PacGoat/src/Commands/DriveForward.cpp | 55 - .../PacGoat/src/Commands/DriveForward.h | 29 - .../src/Commands/DriveWithJoystick.cpp | 31 - .../PacGoat/src/Commands/DriveWithJoystick.h | 20 - .../PacGoat/src/Commands/ExtendShooter.cpp | 32 - .../PacGoat/src/Commands/ExtendShooter.h | 19 - .../examples/PacGoat/src/Commands/LowGoal.cpp | 12 - .../examples/PacGoat/src/Commands/LowGoal.h | 14 - .../PacGoat/src/Commands/OpenClaw.cpp | 27 - .../examples/PacGoat/src/Commands/OpenClaw.h | 19 - .../src/Commands/SetCollectionSpeed.cpp | 28 - .../PacGoat/src/Commands/SetCollectionSpeed.h | 23 - .../PacGoat/src/Commands/SetPivotSetpoint.cpp | 30 - .../PacGoat/src/Commands/SetPivotSetpoint.h | 24 - .../examples/PacGoat/src/Commands/Shoot.cpp | 14 - .../examples/PacGoat/src/Commands/Shoot.h | 14 - .../PacGoat/src/Commands/WaitForBall.cpp | 26 - .../PacGoat/src/Commands/WaitForBall.h | 21 - .../PacGoat/src/Commands/WaitForPressure.cpp | 27 - .../PacGoat/src/Commands/WaitForPressure.h | 20 - .../templates/examples/PacGoat/src/OI.cpp | 40 - .../templates/examples/PacGoat/src/OI.h | 17 - .../templates/examples/PacGoat/src/Robot.cpp | 84 - .../templates/examples/PacGoat/src/Robot.h | 50 - .../PacGoat/src/Subsystems/Collector.cpp | 43 - .../PacGoat/src/Subsystems/Collector.h | 70 - .../PacGoat/src/Subsystems/DriveTrain.cpp | 83 - .../PacGoat/src/Subsystems/DriveTrain.h | 62 - .../examples/PacGoat/src/Subsystems/Pivot.cpp | 50 - .../examples/PacGoat/src/Subsystems/Pivot.h | 61 - .../PacGoat/src/Subsystems/Pneumatics.cpp | 44 - .../PacGoat/src/Subsystems/Pneumatics.h | 46 - .../PacGoat/src/Subsystems/Shooter.cpp | 88 - .../examples/PacGoat/src/Subsystems/Shooter.h | 117 - .../PacGoat/src/Triggers/DoubleButton.cpp | 19 - .../PacGoat/src/Triggers/DoubleButton.h | 24 - .../examples/Potentiometer/src/Robot.cpp | 79 - .../examples/PotentiometerPID/src/Robot.cpp | 80 - .../examples/QuickVision/src/Robot.cpp | 29 - .../templates/examples/Relay/src/Robot.cpp | 69 - .../templates/examples/Solenoid/src/Robot.cpp | 77 - .../examples/Ultrasonic/src/Robot.cpp | 65 - .../examples/UltrasonicPID/src/Robot.cpp | 91 - .../resources/templates/examples/examples.xml | 687 - .../resources/templates/iterative/Robot.cpp | 38 - .../resources/templates/sample/Robot.cpp | 58 - .../wpilib/plugins/cpp/WPILibCPPPlugin.java | 92 - .../plugins/cpp/installer/CPPInstaller.java | 62 - .../cpp/launching/DeployLaunchShortcut.java | 225 - .../plugins/cpp/launching/RSEUtils.java | 56 - .../cpp/launching/SimulateLaunchShortcut.java | 145 - .../cpp/preferences/PreferenceConstants.java | 8 - .../preferences/PreferenceInitializer.java | 25 - .../wizards/examples/ExampleCPPProject.java | 54 - .../wizards/examples/ExampleCPPWizard.java | 66 - .../file_template/CommandGroupWizard.java | 9 - .../wizards/file_template/CommandWizard.java | 9 - .../file_template/FileTemplateWizard.java | 134 - .../FileTemplateWizardMainPage.java | 180 - .../file_template/PIDSubsystemWizard.java | 9 - .../file_template/SubsystemWizard.java | 9 - .../wizards/file_template/TriggerWizard.java | 9 - .../wizards/newproject/CPPProjectType.java | 75 - .../cpp/wizards/newproject/NewCPPWizard.java | 123 - .../newproject/WPIRobotCPPProjectCreator.java | 90 - .../cpp-zip/ant/ant-classloadertask.jar | Bin 70515 -> 0 bytes .../resources/cpp-zip/ant/ant-contrib.jar | Bin 194050 -> 0 bytes .../resources/cpp-zip/ant/build.properties | 22 - .../src/main/resources/cpp-zip/ant/build.xml | 140 - .../resources/cpp-zip/ant/jsch-0.1.50.jar | Bin 249282 -> 0 bytes .../main/resources/cpp-zip/ant/robotCommand | 1 - .../build.properties | 1 - .../feature.xml | 59 - .../pom.xml | 16 - .../.project | 34 - .../META-INF/MANIFEST.MF | 23 - .../build.properties | 8 - .../plugin.xml | 245 - .../edu.wpi.first.wpilib.plugins.java/pom.xml | 381 - .../resources/configuration.properties | 2 - .../resources/icons/Button.png | Bin 790 -> 0 bytes .../resources/icons/Command.png | Bin 3287 -> 0 bytes .../resources/icons/CommandGroup.png | Bin 3376 -> 0 bytes .../resources/icons/Gazebo.png | Bin 780 -> 0 bytes .../resources/icons/PIDSubsystem.png | Bin 3665 -> 0 bytes .../resources/icons/Subsystem.png | Bin 3664 -> 0 bytes .../resources/icons/sample.gif | Bin 983 -> 0 bytes .../resources/icons/wpi.ico | Bin 894 -> 0 bytes .../resources/templates/.classpath | 7 - .../resources/templates/build.properties | 4 - .../resources/templates/build.xml | 30 - .../templates/command-based/Command.java | 36 - .../templates/command-based/CommandGroup.java | 28 - .../command-based/ExampleCommand.java | 39 - .../command-based/ExampleSubsystem.java | 19 - .../resources/templates/command-based/OI.java | 38 - .../templates/command-based/PIDSubsystem.java | 34 - .../templates/command-based/Robot.java | 81 - .../templates/command-based/RobotMap.java | 18 - .../templates/command-based/Subsystem.java | 18 - .../templates/command-based/Trigger.java | 13 - .../examples/2015Vision/Color_src/Robot.java | 240 - .../examples/2015Vision/Retro_src/Robot.java | 214 - .../org/usfirst/frc/team190/robot/Robot.java | 55 - .../org/usfirst/frc/team190/robot/Robot.java | 37 - .../org/usfirst/frc/team190/robot/Robot.java | 62 - .../src/org/usfirst/frc/team190/robot/OI.java | 57 - .../org/usfirst/frc/team190/robot/Robot.java | 103 - .../team190/robot/commands/Autonomous.java | 22 - .../frc/team190/robot/commands/CloseClaw.java | 47 - .../team190/robot/commands/DriveStraight.java | 63 - .../frc/team190/robot/commands/OpenClaw.java | 45 - .../frc/team190/robot/commands/Pickup.java | 15 - .../frc/team190/robot/commands/Place.java | 14 - .../robot/commands/PrepareToPickup.java | 14 - .../robot/commands/SetDistanceToBox.java | 66 - .../robot/commands/SetElevatorSetpoint.java | 46 - .../robot/commands/SetWristSetpoint.java | 46 - .../robot/commands/TankDriveWithJoystick.java | 42 - .../frc/team190/robot/subsystems/Claw.java | 63 - .../team190/robot/subsystems/DriveTrain.java | 134 - .../team190/robot/subsystems/Elevator.java | 75 - .../frc/team190/robot/subsystems/Wrist.java | 74 - .../org/usfirst/frc/team190/robot/Robot.java | 69 - .../org/usfirst/frc/team190/robot/Robot.java | 86 - .../org/usfirst/frc/team190/robot/Robot.java | 71 - .../org/usfirst/frc/team190/robot/Robot.java | 57 - .../org/usfirst/frc/team190/robot/Robot.java | 52 - .../org/usfirst/frc/team190/robot/Robot.java | 44 - .../org/usfirst/frc/team190/pacgoat/OI.java | 48 - .../usfirst/frc/team190/pacgoat/Robot.java | 122 - .../pacgoat/commands/CheckForHotGoal.java | 37 - .../team190/pacgoat/commands/CloseClaw.java | 39 - .../frc/team190/pacgoat/commands/Collect.java | 18 - .../commands/DriveAndShootAutonomous.java | 23 - .../pacgoat/commands/DriveForward.java | 58 - .../pacgoat/commands/DriveWithJoystick.java | 34 - .../pacgoat/commands/ExtendShooter.java | 41 - .../frc/team190/pacgoat/commands/LowGoal.java | 17 - .../team190/pacgoat/commands/OpenClaw.java | 36 - .../pacgoat/commands/SetCollectionSpeed.java | 39 - .../pacgoat/commands/SetPivotSetpoint.java | 44 - .../frc/team190/pacgoat/commands/Shoot.java | 17 - .../team190/pacgoat/commands/WaitForBall.java | 35 - .../pacgoat/commands/WaitForPressure.java | 34 - .../team190/pacgoat/subsystems/Collector.java | 91 - .../pacgoat/subsystems/DriveTrain.java | 127 - .../frc/team190/pacgoat/subsystems/Pivot.java | 94 - .../pacgoat/subsystems/Pneumatics.java | 61 - .../team190/pacgoat/subsystems/Shooter.java | 166 - .../pacgoat/triggers/DoubleButton.java | 23 - .../org/usfirst/frc/team190/robot/Robot.java | 83 - .../org/usfirst/frc/team190/robot/Robot.java | 85 - .../org/usfirst/frc/team190/robot/Robot.java | 35 - .../org/usfirst/frc/team190/robot/Robot.java | 46 - .../org/usfirst/frc/team190/robot/Robot.java | 69 - .../org/usfirst/frc/team190/robot/Robot.java | 89 - .../resources/templates/examples/examples.xml | 511 - .../resources/templates/iterative/Robot.java | 43 - .../resources/templates/sample/Robot.java | 62 - .../wpilib/plugins/java/WPILibJavaPlugin.java | 145 - .../plugins/java/installer/JavaInstaller.java | 39 - .../java/launching/DeployLaunchShortcut.java | 24 - .../java/launching/JavaLaunchShortcut.java | 214 - .../launching/SimulateLaunchShortcut.java | 26 - .../java/preferences/PreferenceConstants.java | 8 - .../preferences/PreferenceInitializer.java | 24 - .../wizards/examples/ExampleJavaProject.java | 59 - .../wizards/examples/ExampleJavaWizard.java | 67 - .../file_template/CommandGroupWizard.java | 9 - .../wizards/file_template/CommandWizard.java | 9 - .../file_template/FileTemplateWizard.java | 126 - .../FileTemplateWizardMainPage.java | 215 - .../file_template/PIDSubsystemWizard.java | 9 - .../file_template/SubsystemWizard.java | 9 - .../wizards/file_template/TriggerWizard.java | 9 - .../wizards/newproject/JavaProjectType.java | 69 - .../wizards/newproject/NewJavaWizard.java | 123 - .../WPIRobotJavaProjectCreator.java | 69 - .../java-zip/ant/ant-classloadertask.jar | Bin 70515 -> 0 bytes .../resources/java-zip/ant/ant-contrib.jar | Bin 194050 -> 0 bytes .../resources/java-zip/ant/build.properties | 42 - .../src/main/resources/java-zip/ant/build.xml | 243 - .../src/main/resources/java-zip/ant/frcdebug | 2 - .../resources/java-zip/ant/jsch-0.1.50.jar | Bin 249282 -> 0 bytes .../main/resources/java-zip/ant/robotCommand | 2 - .../resources/java-zip/ant/robotDebugCommand | 2 - .../META-INF/MANIFEST.MF | 11 - .../README | 13 - .../build.properties | 7 - .../contexts.xml | 13 - .../icons/riolog.png | Bin 344 -> 0 bytes .../plugin.xml | 34 - .../pom.xml | 16 - .../src/netconsole2/Activator.java | 61 - .../src/netconsole2/views/RiologView.java | 414 - .../index.html | 60 - .../pom.xml | 15 - .../site.xml | 14 - .../web/site.css | 12 - .../web/site.xsl | 214 - eclipse-plugins/pom.xml | 99 - gradle/wrapper/gradle-wrapper.jar | Bin 53636 -> 53638 bytes gradle/wrapper/gradle-wrapper.properties | 4 +- gradlew | 6 +- hal/CMakeLists.txt | 17 - hal/README.org | 94 - jenkins/README | 1 - jenkins/build.gradle | 31 - jenkins/docs/.gitignore | 2 - jenkins/docs/Makefile | 32 - jenkins/docs/cpp.doxy | 2305 -- jenkins/docs/java.doxy | 2303 -- maven-utilities/README.org | 15 - maven-utilities/athena/library-jar/pom.xml | 86 - maven-utilities/athena/pom.xml | 28 - maven-utilities/include/pom.xml | 54 - maven-utilities/pom.xml | 15 - networktables/.gitignore | 6 - .../build.properties | 11 - .../IterativeNetworkTablesTest/build.xml | 93 - .../nbproject/project.bak.xml | 92 - .../nbproject/project.xml | 92 - .../resources/META-INF/MANIFEST.MF | 6 - .../wpilibj/templates/RobotTemplate.java | 140 - networktables/NetworkTableViewer/build.xml | 53 - .../lib/nblibraries.properties | 18 - .../lib/networktables-desktop.jar | Bin 70752 -> 0 bytes networktables/NetworkTableViewer/manifest.mf | 3 - .../nbproject/build-impl.xml | 1470 -- .../configs/Run_as_WebStart.properties | 2 - .../configs/Run_in_Browser.properties | 2 - .../nbproject/genfiles.properties | 8 - .../NetworkTableViewer/nbproject/jfx-impl.xml | 3213 --- .../configs/Run_as_WebStart.properties | 4 - .../private/configs/Run_in_Browser.properties | 4 - .../nbproject/private/private.properties | 12 - .../nbproject/private/private.xml | 4 - .../nbproject/project.properties | 120 - .../NetworkTableViewer/nbproject/project.xml | 35 - networktables/NetworkTableViewer/src.zip | Bin 14078 -> 0 bytes .../first/tableviewer/NetworkTableViewer.java | 27 - .../tableviewer/popup/AddValuePopup.java | 159 - .../first/tableviewer/popup/EditorPopup.java | 128 - .../wpi/first/tableviewer/popup/IPopup.java | 35 - .../wpi/first/tableviewer/popup/Popup.java | 115 - .../first/tableviewer/popup/PopupFactory.java | 65 - .../tableviewer/popup/PreferencesPopup.java | 136 - .../tableviewer/stylesheets/PopupCSS.css | 32 - .../stylesheets/ViewerStyleSheet.css | 71 - .../tableviewer/treeview/ITableItem.java | 24 - .../tableviewer/treeview/TableBranch.java | 119 - .../first/tableviewer/treeview/TableLeaf.java | 102 - .../tableviewer/treeview/TableTreeCell.java | 143 - .../tableviewer/treeview/TableTreeView.java | 74 - networktables/NetworkTableViewerFX/build.xml | 53 - .../lib/nblibraries.properties | 18 - .../lib/networktables-desktop.jar | Bin 70752 -> 0 bytes .../NetworkTableViewerFX/manifest.mf | 3 - .../nbproject/build-impl.xml | 1470 -- .../configs/Run_as_WebStart.properties | 2 - .../configs/Run_in_Browser.properties | 2 - .../nbproject/genfiles.properties | 8 - .../nbproject/jfx-impl.xml | 3213 --- .../configs/Run_as_WebStart.properties | 4 - .../private/configs/Run_in_Browser.properties | 4 - .../nbproject/private/private.properties | 12 - .../nbproject/private/private.xml | 4 - .../nbproject/project.properties | 120 - .../nbproject/project.xml | 35 - networktables/NetworkTableViewerFX/src.zip | Bin 16788 -> 0 bytes .../edu/wpi/first/tableviewer/EntryData.java | 81 - .../first/tableviewer/NetworkTableViewer.java | 59 - .../tableviewer/popup/AddValuePopup.java | 159 - .../first/tableviewer/popup/EditorPopup.java | 128 - .../first/tableviewer/popup/ErrorDialog.fxml | 61 - .../wpi/first/tableviewer/popup/IPopup.java | 35 - .../wpi/first/tableviewer/popup/Popup.java | 115 - .../first/tableviewer/popup/PopupFactory.java | 65 - .../tableviewer/popup/PreferencesDialog.css | 7 - .../tableviewer/popup/PreferencesDialog.fxml | 43 - .../tableviewer/popup/PreferencesDialog.java | 89 - .../tableviewer/stylesheets/PopupCSS.css | 32 - .../stylesheets/ViewerStyleSheet.css | 71 - .../tableviewer/tableview/EntryData.java | 76 - .../tableviewer/tableview/TableTableView.java | 76 - .../tableviewer/tableview/TableViewFXML.fxml | 19 - .../tableview/TableViewFXMLController.java | 46 - .../tableviewer/treeview/ITableItem.java | 28 - .../tableviewer/treeview/TableBranch.java | 122 - .../first/tableviewer/treeview/TableCell.java | 145 - .../first/tableviewer/treeview/TableLeaf.java | 99 - .../tableviewer/treeview/TableTreeView.java | 75 - networktables/OutlineViewer/.hgignore | 3 - networktables/OutlineViewer/build.gradle | 39 - networktables/OutlineViewer/build.xml | 99 - .../OutlineViewer/lib/nblibraries.properties | 4 - .../lib/networktables-desktop.jar | Bin 70736 -> 0 bytes .../lib/org-netbeans-swing-outline.jar | Bin 280672 -> 0 bytes networktables/OutlineViewer/manifest.mf | 3 - .../OutlineViewer/nbproject/build-impl.xml | 1419 -- .../nbproject/genfiles.properties | 8 - .../nbproject/project.properties | 79 - .../OutlineViewer/nbproject/project.xml | 16 - networktables/OutlineViewer/pom.xml | 138 - .../first/tableviewer/AbstractTreeNode.java | 100 - .../edu/wpi/first/tableviewer/BranchNode.java | 93 - .../edu/wpi/first/tableviewer/LeafNode.java | 72 - .../tableviewer/NetworkTableRowModel.java | 70 - .../wpi/first/tableviewer/OutlineFrame.java | 165 - .../wpi/first/tableviewer/TableEntryData.java | 138 - .../wpi/first/tableviewer/TableViewer.java | 26 - .../tableviewer/dialog/AbstractAddDialog.java | 55 - .../tableviewer/dialog/AddArrayDialog.form | 190 - .../tableviewer/dialog/AddArrayDialog.java | 288 - .../tableviewer/dialog/AddBooleanDialog.form | 143 - .../tableviewer/dialog/AddBooleanDialog.java | 144 - .../tableviewer/dialog/AddNumberDialog.form | 115 - .../tableviewer/dialog/AddNumberDialog.java | 122 - .../tableviewer/dialog/AddStringDialog.java | 116 - .../tableviewer/dialog/PreferencesDialog.form | 107 - .../tableviewer/dialog/PreferencesDialog.java | 155 - networktables/README.org | 37 - networktables/cpp/CMakeLists.txt | 13 - networktables/cpp/build.gradle | 21 - networktables/cpp/include/NTBase.h | 10 - networktables/cpp/include/NTErrorBase.h | 41 - networktables/cpp/include/OSAL/Synchronized.h | 60 - .../cpp/include/networktables/NetworkTable.h | 335 - .../NetworkTableConnectionListenerAdapter.h | 31 - .../NetworkTableKeyListenerAdapter.h | 38 - .../NetworkTableListenerAdapter.h | 35 - .../include/networktables/NetworkTableMode.h | 50 - .../networktables/NetworkTableProvider.h | 46 - .../NetworkTableSubListenerAdapter.h | 40 - .../AbstractNetworkTableEntryStore.h | 80 - .../FlushableOutgoingEntryReceiver.h | 25 - .../networktables2/IncomingEntryReceiver.h | 24 - .../networktables2/NetworkTableEntry.h | 82 - .../networktables2/NetworkTableMessageType.h | 43 - .../include/networktables2/NetworkTableNode.h | 103 - .../networktables2/OutgoingEntryReceiver.h | 34 - ...TableKeyExistsWithDifferentTypeException.h | 46 - .../networktables2/TransactionDirtier.h | 36 - .../cpp/include/networktables2/WriteManager.h | 87 - .../client/ClientConnectionAdapter.h | 117 - .../client/ClientConnectionListenerManager.h | 33 - .../client/ClientConnectionState.h | 100 - .../client/ClientNetworkTableEntryStore.h | 51 - .../client/NetworkTableClient.h | 56 - .../connection/BadMessageException.h | 25 - .../connection/ConnectionAdapter.h | 46 - .../connection/ConnectionMonitorThread.h | 45 - .../networktables2/connection/DataIOStream.h | 50 - .../connection/NetworkTableConnection.h | 57 - .../server/NetworkTableServer.h | 67 - .../server/ServerAdapterManager.h | 34 - .../server/ServerConnectionAdapter.h | 102 - .../server/ServerConnectionList.h | 59 - .../server/ServerConnectionState.h | 75 - .../server/ServerIncomingConnectionListener.h | 32 - .../server/ServerIncomingStreamMonitor.h | 79 - .../server/ServerNetworkTableEntryStore.h | 55 - .../networktables2/stream/FDIOStream.h | 36 - .../include/networktables2/stream/IOStream.h | 25 - .../networktables2/stream/IOStreamFactory.h | 32 - .../networktables2/stream/IOStreamProvider.h | 38 - .../stream/SocketServerStreamProvider.h | 33 - .../stream/SocketStreamFactory.h | 36 - .../networktables2/stream/SocketStreams.h | 48 - .../thread/DefaultThreadManager.h | 41 - .../include/networktables2/thread/NTThread.h | 34 - .../networktables2/thread/NTThreadManager.h | 36 - .../networktables2/thread/PeriodicRunnable.h | 31 - .../include/networktables2/type/ArrayData.h | 88 - .../networktables2/type/ArrayEntryType.h | 113 - .../networktables2/type/BooleanArray.h | 31 - .../include/networktables2/type/ComplexData.h | 43 - .../networktables2/type/ComplexEntryType.h | 54 - .../networktables2/type/DefaultEntryTypes.h | 106 - .../type/NetworkTableEntryType.h | 102 - .../type/NetworkTableEntryTypeManager.h | 47 - .../include/networktables2/type/NumberArray.h | 31 - .../include/networktables2/type/StringArray.h | 30 - .../networktables2/util/EOFException.h | 35 - .../include/networktables2/util/IOException.h | 57 - .../util/IllegalStateException.h | 24 - .../include/networktables2/util/StringCache.h | 37 - .../cpp/include/networktables2/util/System.h | 37 - networktables/cpp/include/tables/IRemote.h | 55 - .../tables/IRemoteConnectionListener.h | 40 - networktables/cpp/include/tables/ITable.h | 194 - .../cpp/include/tables/ITableListener.h | 55 - .../cpp/include/tables/ITableProvider.h | 33 - .../tables/TableKeyNotDefinedException.h | 40 - .../cpp/lib/Athena/OSAL/Synchronized.cpp | 17 - networktables/cpp/lib/Athena/OSAL/System.cpp | 29 - .../networktables2/stream/FDIOStream.cpp | 115 - .../stream/SocketServerStreamProvider.cpp | 127 - .../stream/SocketStreamFactory.cpp | 67 - .../networktables2/stream/SocketStreams.cpp | 21 - .../thread/DefaultThreadManager.cpp | 44 - networktables/cpp/lib/Desktop/pom.xml | 103 - .../lib/Desktop/src/test/ant/ant/cpptasks.jar | Bin 363988 -> 0 bytes .../lib/Desktop/src/test/ant/build.properties | 21 - .../cpp/lib/Desktop/src/test/ant/build.xml | 59 - .../cpp/lib/Desktop/src/test/ant/test.xml | 107 - .../broken-tests/ConnectionListTests.cpp | 43 - .../networktables2/MockNetworkTableEntry.h | 22 - .../MockOutgoingEntryReceiver.h | 21 - .../tests/networktables2/util/UStringTest.cpp | 88 - .../desktop-test/include/ByteArrayIOStream.h | 35 - .../desktop-test/include/TesterTemplate.h | 51 - .../networktables2/IOStreamProviderMock.h | 14 - .../MockServerConnectionAdapter.h | 35 - .../networktables2/NTThreadManagerMock.h | 17 - .../mocks/networktables2/NTThreadMock.h | 15 - .../mocks/networktables2/NetworkTableEntry.h | 30 - .../desktop-test/tests/ByteArrayIOStream.cpp | 22 - .../networktables2/server/ServerTest.cpp | 33 - .../networktables2/type/EntryTypeTest.cpp | 178 - .../src/test/native/gmock-1.6.0/CHANGES | 92 - .../test/native/gmock-1.6.0/CMakeLists.txt | 151 - .../src/test/native/gmock-1.6.0/CONTRIBUTORS | 40 - .../src/test/native/gmock-1.6.0/COPYING | 28 - .../src/test/native/gmock-1.6.0/Makefile.am | 209 - .../src/test/native/gmock-1.6.0/Makefile.in | 1321 -- .../src/test/native/gmock-1.6.0/README | 354 - .../src/test/native/gmock-1.6.0/aclocal.m4 | 9139 -------- .../native/gmock-1.6.0/build-aux/config.guess | 1533 -- .../native/gmock-1.6.0/build-aux/config.h.in | 69 - .../native/gmock-1.6.0/build-aux/config.sub | 1693 -- .../test/native/gmock-1.6.0/build-aux/depcomp | 630 - .../native/gmock-1.6.0/build-aux/install-sh | 520 - .../native/gmock-1.6.0/build-aux/ltmain.sh | 8413 ------- .../test/native/gmock-1.6.0/build-aux/missing | 376 - .../src/test/native/gmock-1.6.0/configure | 17795 -------------- .../src/test/native/gmock-1.6.0/configure.ac | 146 - .../gmock-1.6.0/fused-src/gmock-gtest-all.cc | 10554 --------- .../gmock-1.6.0/fused-src/gmock/gmock.h | 12822 ---------- .../gmock-1.6.0/fused-src/gmock_main.cc | 54 - .../gmock-1.6.0/fused-src/gtest/gtest.h | 19537 ---------------- .../src/test/native/gmock-1.6.0/gtest/CHANGES | 130 - .../native/gmock-1.6.0/gtest/CMakeLists.txt | 240 - .../native/gmock-1.6.0/gtest/CONTRIBUTORS | 37 - .../src/test/native/gmock-1.6.0/gtest/COPYING | 28 - .../test/native/gmock-1.6.0/gtest/Makefile.am | 302 - .../test/native/gmock-1.6.0/gtest/Makefile.in | 1329 -- .../src/test/native/gmock-1.6.0/gtest/README | 424 - .../test/native/gmock-1.6.0/gtest/aclocal.m4 | 1178 - .../gmock-1.6.0/gtest/build-aux/config.guess | 1533 -- .../gmock-1.6.0/gtest/build-aux/config.h.in | 69 - .../gmock-1.6.0/gtest/build-aux/config.sub | 1693 -- .../gmock-1.6.0/gtest/build-aux/depcomp | 630 - .../gmock-1.6.0/gtest/build-aux/install-sh | 520 - .../gmock-1.6.0/gtest/build-aux/ltmain.sh | 8413 ------- .../gmock-1.6.0/gtest/build-aux/missing | 376 - .../gtest/cmake/internal_utils.cmake | 216 - .../gmock-1.6.0/gtest/codegear/gtest.cbproj | 138 - .../gtest/codegear/gtest.groupproj | 54 - .../gmock-1.6.0/gtest/codegear/gtest_all.cc | 38 - .../gmock-1.6.0/gtest/codegear/gtest_link.cc | 40 - .../gtest/codegear/gtest_main.cbproj | 82 - .../gtest/codegear/gtest_unittest.cbproj | 88 - .../test/native/gmock-1.6.0/gtest/configure | 17482 -------------- .../native/gmock-1.6.0/gtest/configure.ac | 68 - .../gtest/fused-src/gtest/gtest-all.cc | 9118 -------- .../gmock-1.6.0/gtest/fused-src/gtest/gtest.h | 19537 ---------------- .../gtest/fused-src/gtest/gtest_main.cc | 39 - .../gtest/include/gtest/gtest-death-test.h | 283 - .../gtest/include/gtest/gtest-message.h | 230 - .../gtest/include/gtest/gtest-param-test.h | 1421 -- .../include/gtest/gtest-param-test.h.pump | 487 - .../gtest/include/gtest/gtest-printers.h | 796 - .../gtest/include/gtest/gtest-spi.h | 232 - .../gtest/include/gtest/gtest-test-part.h | 176 - .../gmock-1.6.0/gtest/include/gtest/gtest.h | 2155 -- .../gtest/include/gtest/gtest_pred_impl.h | 358 - .../internal/gtest-death-test-internal.h | 308 - .../include/gtest/internal/gtest-filepath.h | 210 - .../include/gtest/internal/gtest-internal.h | 1226 - .../include/gtest/internal/gtest-linked_ptr.h | 233 - .../internal/gtest-param-util-generated.h | 4822 ---- .../gtest-param-util-generated.h.pump | 301 - .../include/gtest/internal/gtest-param-util.h | 619 - .../gtest/include/gtest/internal/gtest-port.h | 1775 -- .../include/gtest/internal/gtest-string.h | 350 - .../include/gtest/internal/gtest-tuple.h | 968 - .../include/gtest/internal/gtest-tuple.h.pump | 336 - .../include/gtest/internal/gtest-type-util.h | 3330 --- .../gtest/internal/gtest-type-util.h.pump | 296 - .../gmock-1.6.0/gtest/m4/acx_pthread.m4 | 363 - .../test/native/gmock-1.6.0/gtest/m4/gtest.m4 | 74 - .../native/gmock-1.6.0/gtest/m4/libtool.m4 | 7377 ------ .../native/gmock-1.6.0/gtest/m4/ltoptions.m4 | 368 - .../native/gmock-1.6.0/gtest/m4/ltsugar.m4 | 123 - .../native/gmock-1.6.0/gtest/m4/ltversion.m4 | 23 - .../gmock-1.6.0/gtest/m4/lt~obsolete.m4 | 92 - .../native/gmock-1.6.0/gtest/make/Makefile | 80 - .../gmock-1.6.0/gtest/msvc/gtest-md.sln | 45 - .../gmock-1.6.0/gtest/msvc/gtest-md.vcproj | 126 - .../native/gmock-1.6.0/gtest/msvc/gtest.sln | 45 - .../gmock-1.6.0/gtest/msvc/gtest.vcproj | 126 - .../gtest/msvc/gtest_main-md.vcproj | 129 - .../gmock-1.6.0/gtest/msvc/gtest_main.vcproj | 129 - .../gtest/msvc/gtest_prod_test-md.vcproj | 164 - .../gtest/msvc/gtest_prod_test.vcproj | 164 - .../gtest/msvc/gtest_unittest-md.vcproj | 147 - .../gtest/msvc/gtest_unittest.vcproj | 147 - .../gmock-1.6.0/gtest/samples/prime_tables.h | 123 - .../gmock-1.6.0/gtest/samples/sample1.cc | 68 - .../gmock-1.6.0/gtest/samples/sample1.h | 43 - .../gtest/samples/sample10_unittest.cc | 145 - .../gtest/samples/sample1_unittest.cc | 153 - .../gmock-1.6.0/gtest/samples/sample2.cc | 56 - .../gmock-1.6.0/gtest/samples/sample2.h | 86 - .../gtest/samples/sample2_unittest.cc | 109 - .../gmock-1.6.0/gtest/samples/sample3-inl.h | 173 - .../gtest/samples/sample3_unittest.cc | 151 - .../gmock-1.6.0/gtest/samples/sample4.cc | 46 - .../gmock-1.6.0/gtest/samples/sample4.h | 53 - .../gtest/samples/sample4_unittest.cc | 45 - .../gtest/samples/sample5_unittest.cc | 199 - .../gtest/samples/sample6_unittest.cc | 224 - .../gtest/samples/sample7_unittest.cc | 130 - .../gtest/samples/sample8_unittest.cc | 173 - .../gtest/samples/sample9_unittest.cc | 160 - .../gtest/scripts/fuse_gtest_files.py | 250 - .../gtest/scripts/gen_gtest_pred_impl.py | 730 - .../gmock-1.6.0/gtest/scripts/gtest-config.in | 274 - .../native/gmock-1.6.0/gtest/scripts/pump.py | 847 - .../gmock-1.6.0/gtest/scripts/test/Makefile | 59 - .../gmock-1.6.0/gtest/src/gtest-death-test.cc | 1234 - .../gmock-1.6.0/gtest/src/gtest-filepath.cc | 380 - .../gtest/src/gtest-internal-inl.h | 1038 - .../gmock-1.6.0/gtest/src/gtest-port.cc | 746 - .../gmock-1.6.0/gtest/src/gtest-printers.cc | 356 - .../gmock-1.6.0/gtest/src/gtest-test-part.cc | 110 - .../gmock-1.6.0/gtest/src/gtest-typed-test.cc | 110 - .../native/gmock-1.6.0/gtest/src/gtest.cc | 4898 ---- .../gmock-1.6.0/gtest/src/gtest_main.cc | 39 - .../gtest/test/gtest-death-test_ex_test.cc | 93 - .../gtest/test/gtest-death-test_test.cc | 1296 - .../gtest/test/gtest-filepath_test.cc | 696 - .../gtest/test/gtest-linked_ptr_test.cc | 155 - .../gtest/test/gtest-listener_test.cc | 313 - .../gtest/test/gtest-message_test.cc | 166 - .../gtest/test/gtest-options_test.cc | 212 - .../gtest/test/gtest-param-test2_test.cc | 65 - .../gtest/test/gtest-param-test_test.cc | 895 - .../gtest/test/gtest-param-test_test.h | 55 - .../gmock-1.6.0/gtest/test/gtest-port_test.cc | 1206 - .../gtest/test/gtest-printers_test.cc | 1307 -- .../gtest/test/gtest-test-part_test.cc | 208 - .../gtest/test/gtest-tuple_test.cc | 320 - .../gtest/test/gtest-typed-test2_test.cc | 45 - .../gtest/test/gtest-typed-test_test.cc | 360 - .../gtest/test/gtest-typed-test_test.h | 66 - .../gtest/test/gtest-unittest-api_test.cc | 341 - .../gmock-1.6.0/gtest/test/gtest_all_test.cc | 47 - .../test/gtest_break_on_failure_unittest.py | 218 - .../test/gtest_break_on_failure_unittest_.cc | 88 - .../gtest/test/gtest_catch_exceptions_test.py | 220 - .../test/gtest_catch_exceptions_test_.cc | 308 - .../gtest/test/gtest_color_test.py | 130 - .../gtest/test/gtest_color_test_.cc | 71 - .../gtest/test/gtest_env_var_test.py | 103 - .../gtest/test/gtest_env_var_test_.cc | 126 - .../gtest/test/gtest_environment_test.cc | 191 - .../gtest/test/gtest_filter_unittest.py | 633 - .../gtest/test/gtest_filter_unittest_.cc | 140 - .../gmock-1.6.0/gtest/test/gtest_help_test.py | 172 - .../gtest/test/gtest_help_test_.cc | 46 - .../gtest/test/gtest_list_tests_unittest.py | 177 - .../gtest/test/gtest_list_tests_unittest_.cc | 85 - .../gtest/test/gtest_main_unittest.cc | 45 - .../gtest/test/gtest_no_test_unittest.cc | 57 - .../gtest/test/gtest_output_test.py | 335 - .../gtest/test/gtest_output_test_.cc | 1020 - .../test/gtest_output_test_golden_lin.txt | 711 - .../gtest/test/gtest_pred_impl_unittest.cc | 2427 -- .../gmock-1.6.0/gtest/test/gtest_prod_test.cc | 57 - .../gtest/test/gtest_repeat_test.cc | 253 - .../gtest/test/gtest_shuffle_test.py | 325 - .../gtest/test/gtest_shuffle_test_.cc | 104 - .../gtest/test/gtest_sole_header_test.cc | 57 - .../gtest/test/gtest_stress_test.cc | 257 - .../gtest/test/gtest_test_utils.py | 305 - .../test/gtest_throw_on_failure_ex_test.cc | 92 - .../gtest/test/gtest_throw_on_failure_test.py | 171 - .../test/gtest_throw_on_failure_test_.cc | 56 - .../gtest/test/gtest_uninitialized_test.py | 70 - .../gtest/test/gtest_uninitialized_test_.cc | 43 - .../gmock-1.6.0/gtest/test/gtest_unittest.cc | 7337 ------ .../gtest/test/gtest_xml_outfile1_test_.cc | 49 - .../gtest/test/gtest_xml_outfile2_test_.cc | 49 - .../gtest/test/gtest_xml_outfiles_test.py | 132 - .../gtest/test/gtest_xml_output_unittest.py | 242 - .../gtest/test/gtest_xml_output_unittest_.cc | 174 - .../gtest/test/gtest_xml_test_utils.py | 179 - .../gmock-1.6.0/gtest/test/production.cc | 36 - .../gmock-1.6.0/gtest/test/production.h | 55 - .../gtest/xcode/Config/DebugProject.xcconfig | 30 - .../xcode/Config/FrameworkTarget.xcconfig | 17 - .../gtest/xcode/Config/General.xcconfig | 41 - .../xcode/Config/ReleaseProject.xcconfig | 32 - .../xcode/Config/StaticLibraryTarget.xcconfig | 18 - .../gtest/xcode/Config/TestTarget.xcconfig | 8 - .../gtest/xcode/Resources/Info.plist | 30 - .../xcode/Samples/FrameworkSample/Info.plist | 28 - .../WidgetFramework.xcodeproj/project.pbxproj | 457 - .../xcode/Samples/FrameworkSample/runtests.sh | 62 - .../xcode/Samples/FrameworkSample/widget.cc | 63 - .../xcode/Samples/FrameworkSample/widget.h | 59 - .../Samples/FrameworkSample/widget_test.cc | 68 - .../gtest/xcode/Scripts/runtests.sh | 65 - .../gtest/xcode/Scripts/versiongenerate.py | 100 - .../xcode/gtest.xcodeproj/project.pbxproj | 1084 - .../gmock-1.6.0/include/gmock/gmock-actions.h | 1076 - .../include/gmock/gmock-cardinalities.h | 146 - .../include/gmock/gmock-generated-actions.h | 2419 -- .../gmock/gmock-generated-actions.h.pump | 825 - .../gmock/gmock-generated-function-mockers.h | 929 - .../gmock-generated-function-mockers.h.pump | 258 - .../include/gmock/gmock-generated-matchers.h | 2054 -- .../gmock/gmock-generated-matchers.h.pump | 651 - .../gmock/gmock-generated-nice-strict.h | 274 - .../gmock/gmock-generated-nice-strict.h.pump | 160 - .../include/gmock/gmock-matchers.h | 3066 --- .../include/gmock/gmock-more-actions.h | 233 - .../include/gmock/gmock-spec-builders.h | 1749 -- .../native/gmock-1.6.0/include/gmock/gmock.h | 93 - .../internal/gmock-generated-internal-utils.h | 277 - .../gmock-generated-internal-utils.h.pump | 136 - .../gmock/internal/gmock-internal-utils.h | 463 - .../include/gmock/internal/gmock-port.h | 78 - .../src/test/native/gmock-1.6.0/make/Makefile | 98 - .../native/gmock-1.6.0/msvc/2005/gmock.sln | 32 - .../native/gmock-1.6.0/msvc/2005/gmock.vcproj | 191 - .../msvc/2005/gmock_config.vsprops | 15 - .../gmock-1.6.0/msvc/2005/gmock_main.vcproj | 187 - .../gmock-1.6.0/msvc/2005/gmock_test.vcproj | 201 - .../native/gmock-1.6.0/msvc/2010/gmock.sln | 32 - .../gmock-1.6.0/msvc/2010/gmock.vcxproj | 82 - .../gmock-1.6.0/msvc/2010/gmock_config.props | 19 - .../gmock-1.6.0/msvc/2010/gmock_main.vcxproj | 88 - .../gmock-1.6.0/msvc/2010/gmock_test.vcxproj | 101 - .../gmock-1.6.0/scripts/fuse_gmock_files.py | 240 - .../gmock-1.6.0/scripts/generator/COPYING | 203 - .../gmock-1.6.0/scripts/generator/README | 35 - .../scripts/generator/README.cppclean | 115 - .../scripts/generator/cpp/__init__.py | 0 .../gmock-1.6.0/scripts/generator/cpp/ast.py | 1723 -- .../scripts/generator/cpp/gmock_class.py | 192 - .../scripts/generator/cpp/keywords.py | 59 - .../scripts/generator/cpp/tokenize.py | 287 - .../scripts/generator/cpp/utils.py | 41 - .../scripts/generator/gmock_gen.py | 31 - .../gmock-1.6.0/scripts/gmock-config.in | 303 - .../test/native/gmock-1.6.0/src/gmock-all.cc | 47 - .../gmock-1.6.0/src/gmock-cardinalities.cc | 155 - .../gmock-1.6.0/src/gmock-internal-utils.cc | 173 - .../native/gmock-1.6.0/src/gmock-matchers.cc | 101 - .../gmock-1.6.0/src/gmock-spec-builders.cc | 797 - .../src/test/native/gmock-1.6.0/src/gmock.cc | 182 - .../test/native/gmock-1.6.0/src/gmock_main.cc | 54 - .../gmock-1.6.0/test/gmock-actions_test.cc | 1305 -- .../test/gmock-cardinalities_test.cc | 428 - .../test/gmock-generated-actions_test.cc | 1212 - .../gmock-generated-function-mockers_test.cc | 540 - .../gmock-generated-internal-utils_test.cc | 127 - .../test/gmock-generated-matchers_test.cc | 1127 - .../test/gmock-internal-utils_test.cc | 655 - .../gmock-1.6.0/test/gmock-matchers_test.cc | 4040 ---- .../test/gmock-more-actions_test.cc | 704 - .../test/gmock-nice-strict_test.cc | 284 - .../gmock-1.6.0/test/gmock-port_test.cc | 43 - .../test/gmock-spec-builders_test.cc | 2484 -- .../native/gmock-1.6.0/test/gmock_all_test.cc | 48 - .../gmock-1.6.0/test/gmock_leak_test.py | 90 - .../gmock-1.6.0/test/gmock_leak_test_.cc | 100 - .../gmock-1.6.0/test/gmock_link2_test.cc | 40 - .../gmock-1.6.0/test/gmock_link_test.cc | 40 - .../native/gmock-1.6.0/test/gmock_link_test.h | 669 - .../gmock-1.6.0/test/gmock_output_test.py | 180 - .../gmock-1.6.0/test/gmock_output_test_.cc | 290 - .../test/gmock_output_test_golden.txt | 310 - .../native/gmock-1.6.0/test/gmock_test.cc | 255 - .../gmock-1.6.0/test/gmock_test_utils.py | 111 - .../test/native/test-client/test-client.cpp | 77 - .../test/native/test-server/test-server.cpp | 98 - .../src/main/native/OSAL/Synchronized.cpp | 24 - .../lib/Win32/src/main/native/OSAL/System.cpp | 35 - .../networktables2/stream/FDIOStream.cpp | 140 - .../stream/SocketServerStreamProvider.cpp | 123 - .../stream/SocketStreamFactory.cpp | 135 - .../networktables2/stream/SocketStreams.cpp | 21 - .../thread/DefaultThreadManager.cpp | 48 - .../lib/share/networktables/NetworkTable.cpp | 340 - .../NetworkTableConnectionListenerAdapter.cpp | 22 - .../NetworkTableKeyListenerAdapter.cpp | 21 - .../NetworkTableListenerAdapter.cpp | 26 - .../share/networktables/NetworkTableMode.cpp | 44 - .../networktables/NetworkTableProvider.cpp | 42 - .../NetworkTableSubListenerAdapter.cpp | 43 - .../AbstractNetworkTableEntryStore.cpp | 214 - .../networktables2/NetworkTableEntry.cpp | 134 - .../share/networktables2/NetworkTableNode.cpp | 171 - .../networktables2/OutgoingEntryReciever.cpp | 13 - ...bleKeyExistsWithDifferentTypeException.cpp | 22 - .../networktables2/TransactionDirtier.cpp | 33 - .../lib/share/networktables2/WriteManager.cpp | 154 - .../client/ClientConnectionAdapter.cpp | 257 - .../client/ClientConnectionState.cpp | 77 - .../client/ClientNetworkTableEntryStore.cpp | 71 - .../client/NetworkTableClient.cpp | 57 - .../connection/BadMessageException.cpp | 23 - .../connection/ConnectionMonitorThread.cpp | 35 - .../connection/DataIOStream.cpp | 76 - .../connection/NetworkTableConnection.cpp | 162 - .../server/NetworkTableServer.cpp | 61 - .../server/ServerConnectionAdapter.cpp | 141 - .../server/ServerConnectionList.cpp | 85 - .../server/ServerConnectionState.cpp | 31 - .../server/ServerIncomingStreamMonitor.cpp | 86 - .../server/ServerNetworkTableEntryStore.cpp | 62 - .../share/networktables2/type/ArrayData.cpp | 75 - .../networktables2/type/ArrayEntryType.cpp | 133 - .../networktables2/type/BooleanArray.cpp | 32 - .../share/networktables2/type/ComplexData.cpp | 15 - .../networktables2/type/ComplexEntryType.cpp | 15 - .../networktables2/type/DefaultEntryTypes.cpp | 96 - .../type/NetworkTableEntryType.cpp | 25 - .../type/NetworkTableEntryTypeManager.cpp | 25 - .../share/networktables2/type/NumberArray.cpp | 32 - .../share/networktables2/type/StringArray.cpp | 32 - .../networktables2/util/EOFException.cpp | 14 - .../share/networktables2/util/IOException.cpp | 24 - .../util/IllegalStateException.cpp | 16 - .../share/networktables2/util/StringCache.cpp | 27 - .../tables/TableKeyNotDefinedException.cpp | 24 - networktables/java-table-viewer/.classpath | 7 - networktables/java-table-viewer/.project | 17 - networktables/java-table-viewer/build.gradle | 24 - networktables/java-table-viewer/build.xml | 59 - ...-modules-java-j2seproject-copylibstask.jar | Bin 22335 -> 0 bytes .../lib/nblibraries.properties | 4 - .../lib/networktables-desktop.jar | Bin 70752 -> 0 bytes networktables/java-table-viewer/manifest.mf | 3 - networktables/java-table-viewer/nbbuild.xml | 74 - .../nbproject/build-impl.xml | 1419 -- .../nbproject/genfiles.properties | 8 - .../nbproject/project.properties | 76 - .../java-table-viewer/nbproject/project.xml | 16 - .../first/table_viewer/ConstantPutTest.java | 24 - .../DefaultNetworkTablesValueRenderer.java | 18 - .../table_viewer/NetworkTableTableModel.java | 66 - .../wpi/first/table_viewer/TableViewer.java | 14 - .../first/table_viewer/TableViewerFrame.java | 37 - .../table_viewer/TableViewerModePrompt.java | 107 - .../wpi/first/table_viewer/TestClient.java | 38 - .../wpi/first/table_viewer/TestServer.java | 37 - .../first/table_viewer/TestTableServer.java | 54 - .../table_viewer/dialog/AddArrayDialog.form | 167 - .../table_viewer/dialog/AddArrayDialog.java | 201 - .../table_viewer/dialog/AddBooleanDialog.form | 146 - .../table_viewer/dialog/AddBooleanDialog.java | 161 - .../table_viewer/dialog/AddNumberDialog.form | 115 - .../table_viewer/dialog/AddNumberDialog.java | 136 - .../table_viewer/dialog/AddStringDialog.java | 136 - .../dialog/EditBooleanDialog.form | 97 - .../dialog/EditBooleanDialog.java | 111 - .../table_viewer/dialog/EditNumberDialog.form | 108 - .../table_viewer/dialog/EditNumberDialog.java | 124 - .../table_viewer/dialog/EditStringDialog.java | 119 - .../table_viewer/dialog/IAddValueDialog.java | 23 - .../first/table_viewer/tree/BranchNode.java | 57 - .../first/table_viewer/tree/ITableNode.java | 72 - .../wpi/first/table_viewer/tree/LeafNode.java | 84 - .../table_viewer/tree/NetworkTableTree.java | 86 - .../table_viewer/tree/TableEntryData.java | 93 - networktables/java/Athena/pom.xml | 108 - .../java/NetworkTablesTransactionFlow.pdf | Bin 42642 -> 0 bytes networktables/java/README.txt | 12 - networktables/java/build.gradle | 44 - networktables/java/eclipse_project/.classpath | 23 - networktables/java/eclipse_project/.project | 59 - networktables/java/nbproject/project.xml | 141 - networktables/java/pom.xml | 90 - .../wpilibj/networktables/NetworkTable.java | 568 - ...NetworkTableConnectionListenerAdapter.java | 33 - .../NetworkTableKeyListenerAdapter.java | 39 - .../NetworkTableKeyNotDefined.java | 22 - .../NetworkTableListenerAdapter.java | 44 - .../networktables/NetworkTableMode.java | 59 - .../networktables/NetworkTableProvider.java | 53 - .../NetworkTableSubListenerAdapter.java | 52 - .../AbstractNetworkTableEntryStore.java | 223 - .../FlushableOutgoingEntryReceiver.java | 9 - .../networktables2/IncomingEntryReceiver.java | 16 - .../networktables2/NetworkTableEntry.java | 171 - .../NetworkTableMessageType.java | 31 - .../networktables2/NetworkTableNode.java | 190 - .../networktables2/OutgoingEntryReceiver.java | 15 - ...leKeyExistsWithDifferentTypeException.java | 26 - .../networktables2/TransactionDirtier.java | 36 - .../wpilibj/networktables2/WriteManager.java | 151 - .../client/ClientConnectionAdapter.java | 218 - .../ClientConnectionListenerManager.java | 18 - .../client/ClientConnectionState.java | 86 - .../client/ClientNetworkTableEntryStore.java | 77 - .../client/NetworkTableClient.java | 66 - .../connection/BadMessageException.java | 19 - .../connection/ConnectionAdapter.java | 56 - .../connection/ConnectionMonitorThread.java | 37 - .../connection/NetworkTableConnection.java | 170 - .../server/NetworkTableServer.java | 79 - .../server/ServerAdapterManager.java | 16 - .../server/ServerConnectionAdapter.java | 158 - .../server/ServerConnectionList.java | 74 - .../server/ServerConnectionState.java | 57 - .../ServerIncomingConnectionListener.java | 17 - .../server/ServerIncomingStreamMonitor.java | 78 - .../server/ServerNetworkTableEntryStore.java | 65 - .../networktables2/stream/IOStream.java | 25 - .../stream/IOStreamFactory.java | 17 - .../stream/IOStreamProvider.java | 23 - .../networktables2/stream/SimpleIOStream.java | 46 - .../stream/SocketServerStreamProvider.java | 27 - .../networktables2/stream/SocketStream.java | 30 - .../stream/SocketStreamFactory.java | 24 - .../networktables2/stream/SocketStreams.java | 15 - .../thread/DefaultThreadManager.java | 40 - .../networktables2/thread/NTThread.java | 17 - .../thread/NTThreadManager.java | 16 - .../thread/PeriodicRunnable.java | 16 - .../networktables2/type/ArrayData.java | 52 - .../networktables2/type/ArrayEntryType.java | 80 - .../networktables2/type/BooleanArray.java | 26 - .../networktables2/type/ComplexData.java | 16 - .../networktables2/type/ComplexEntryType.java | 16 - .../type/DefaultEntryTypes.java | 61 - .../type/NetworkTableEntryType.java | 46 - .../type/NetworkTableEntryTypeManager.java | 19 - .../networktables2/type/NumberArray.java | 26 - .../networktables2/type/StringArray.java | 26 - .../networktables2/util/ByteArrayMap.java | 50 - .../util/CharacterArrayMap.java | 47 - .../networktables2/util/HalfQueue.java | 35 - .../wpilibj/networktables2/util/List.java | 121 - .../util/ResizeableArrayObject.java | 33 - .../wpilibj/networktables2/util/Set.java | 22 - .../wpilibj/networktables2/util/Stack.java | 30 - .../networktables2/util/StringCache.java | 32 - .../edu/wpi/first/wpilibj/tables/IRemote.java | 37 - .../tables/IRemoteConnectionListener.java | 20 - .../edu/wpi/first/wpilibj/tables/ITable.java | 216 - .../first/wpilibj/tables/ITableListener.java | 19 - .../first/wpilibj/tables/ITableProvider.java | 16 - .../tables/TableKeyNotDefinedException.java | 20 - .../NetworkTableListenerTest.java | 183 - .../networktables/NetworkTableTest.java | 203 - .../networktables2/NetworkTableEntryTest.java | 201 - .../TransactionDirtierTest.java | 67 - .../client/ClientConnectionAdapterTest.java | 198 - .../ClientConnectionManagementTest.java | 122 - .../ClientNetworkTableEntryStoreTest.java | 52 - .../networktables2/client/ClientTest.java | 52 - .../connection/BadMessageExceptionTest.java | 18 - .../ConnectionMonitorThreadTest.java | 50 - ...orkTableConnectionEntryAssignmentTest.java | 112 - ...NetworkTableConnectionEntryUpdateTest.java | 100 - .../NetworkTableConnectionTest.java | 148 - .../server/ConnectionListTest.java | 71 - .../server/ServerConnectionAdapterTest.java | 223 - .../server/ServerIncomingMonitorTest.java | 182 - .../networktables2/server/ServerTest.java | 39 - .../server/ServerWriteManagerTest.java | 80 - .../stream/SimpleIOStreamTest.java | 59 - .../networktables2/stream/SocketTest.java | 88 - .../networktables2/system/SystemTest.java | 206 - .../thread/DefaultThreadManagerTest.java | 96 - .../networktables2/type/ArrayTypeTest.java | 426 - .../networktables2/type/ComplexTypeTest.java | 95 - .../networktables2/type/EntryTypeTest.java | 191 - .../wpilibj/networktables2/util/ListTest.java | 226 - .../networktables2/util/StackTest.java | 102 - .../TableKeyNotDefinedExceptionTest.java | 18 - .../test/java/test/util/ByteArrayStream.java | 46 - .../java/test/util/LoggingOutputStream.java | 43 - .../java/test/util/NetworkTableEntryUtil.java | 67 - .../java/test/util/NetworkTableTestNode.java | 34 - .../java/test/util/StreamPipeProvider.java | 74 - .../src/test/java/test/util/TestExecutor.java | 40 - .../util/TestServerConnectionProvider.java | 26 - .../java/test/util/TestThreadManager.java | 76 - networktables/ntcore | 1 - networktables/pom.xml | 14 - pom.xml | 64 - settings.gradle | 13 +- simulation/JavaGazebo/build.gradle | 1 + simulation/SimDS/build.gradle | 1 + styleguide/cppguide.html | 2470 -- styleguide/eclipse-cpp-google-style.xml | 167 - styleguide/eclipse-java-google-style.xml | 337 - styleguide/include/link.png | Bin 189 -> 0 bytes styleguide/include/styleguide.css | 261 - styleguide/include/styleguide.js | 289 - styleguide/javaguide.css | 515 - styleguide/javaguide.html | 806 - styleguide/javaguidelink.png | Bin 189 -> 0 bytes styleguide/styleguide.css | 147 - styleguide/styleguide.xsl | 924 - test-scripts/config.sh | 12 +- test-scripts/deploy-and-run-test-on-robot.sh | 0 test-scripts/jenkins-run-tests-get-results.sh | 0 test-scripts/run-tests-on-robot.sh | 0 test-scripts/spawn_driver_station.sh | 0 .../include/ADXL345_I2C.h | 0 .../include/ADXL345_SPI.h | 0 .../include/AnalogAccelerometer.h | 0 .../include/AnalogGyro.h | 0 .../include/AnalogInput.h | 0 .../include/AnalogOutput.h | 0 .../include/AnalogPotentiometer.h | 0 .../include/AnalogTrigger.h | 0 .../include/AnalogTriggerOutput.h | 0 .../include/BuiltInAccelerometer.h | 0 .../include/CAN/can_proto.h | 0 .../include/CANJaguar.h | 0 .../include/CANSpeedController.h | 0 .../include/CANTalon.h | 0 .../include/CameraServer.h | 0 .../include/Compressor.h | 0 .../include/ControllerPower.h | 0 .../include/Counter.h | 0 .../include/CounterBase.h | 0 .../include/DigitalInput.h | 0 .../include/DigitalOutput.h | 0 .../include/DigitalSource.h | 0 .../include/DoubleSolenoid.h | 0 .../include/DriverStation.h | 0 .../include/Encoder.h | 0 .../include/GearTooth.h | 0 .../include/GyroBase.h | 0 .../include/I2C.h | 0 .../include/Internal/HardwareHLReporting.h | 0 .../include/InterruptableSensorBase.h | 0 .../include/IterativeRobot.h | 0 .../include/Jaguar.h | 0 .../include/Joystick.h | 0 .../include/MotorSafety.h | 0 .../include/MotorSafetyHelper.h | 0 .../include/NIIMAQdx.h | 1900 +- .../NetworkCommunication/AICalibration.h | 40 +- .../NetworkCommunication/CANInterfacePlugin.h | 218 +- .../NetworkCommunication/CANSessionMux.h | 162 +- .../include/NetworkCommunication/FRCComm.h | 0 .../include/NetworkCommunication/LoadOut.h | 114 +- .../NetworkCommunication/UsageReporting.h | 290 +- .../NetworkCommunication/symModuleLink.h | 0 .../include/PWM.h | 0 .../include/PowerDistributionPanel.h | 0 .../include/Preferences.h | 0 .../include/Relay.h | 0 .../include/RobotBase.h | 0 .../include/RobotDrive.h | 0 .../include/SPI.h | 0 .../include/SafePWM.h | 0 .../include/SampleRobot.h | 0 .../include/SerialPort.h | 0 .../include/Servo.h | 0 .../include/Solenoid.h | 0 .../include/SolenoidBase.h | 0 .../include/SpeedController.h | 0 .../include/Talon.h | 0 .../include/TalonSRX.h | 0 .../include/USBCamera.h | 0 .../include/Ultrasonic.h | 0 .../include/Victor.h | 0 .../include/VictorSP.h | 0 .../include/Vision/AxisCamera.h | 0 .../include/Vision/BaeUtilities.h | 0 .../include/Vision/BinaryImage.h | 0 .../include/Vision/ColorImage.h | 0 .../include/Vision/FrcError.h | 0 .../include/Vision/HSLImage.h | 0 .../include/Vision/ImageBase.h | 0 .../include/Vision/MonoImage.h | 46 +- .../include/Vision/RGBImage.h | 0 .../include/Vision/Threshold.h | 50 +- .../include/Vision/VisionAPI.h | 0 .../include/WPILib.h | 0 .../include/nivision.h | 0 .../include/pcre.h | 0 .../src/ADXL345_I2C.cpp | 0 .../src/ADXL345_SPI.cpp | 0 .../src/AnalogAccelerometer.cpp | 0 .../src/AnalogGyro.cpp | 0 .../src/AnalogInput.cpp | 0 .../src/AnalogOutput.cpp | 0 .../src/AnalogPotentiometer.cpp | 0 .../src/AnalogTrigger.cpp | 0 .../src/AnalogTriggerOutput.cpp | 0 .../src/BuiltInAccelerometer.cpp | 0 .../src/CANJaguar.cpp | 0 .../src/CANTalon.cpp | 0 .../src/CameraServer.cpp | 0 .../src/Compressor.cpp | 0 .../src/ControllerPower.cpp | 0 .../src/Counter.cpp | 0 .../src/DigitalInput.cpp | 0 .../src/DigitalOutput.cpp | 0 .../src/DoubleSolenoid.cpp | 0 .../src/DriverStation.cpp | 0 .../src/Encoder.cpp | 0 .../src/GearTooth.cpp | 0 .../src/GyroBase.cpp | 0 .../{wpilibC++Devices => Athena}/src/I2C.cpp | 0 .../src/Internal/HardwareHLReporting.cpp | 0 .../src/InterruptableSensorBase.cpp | 0 .../src/IterativeRobot.cpp | 0 .../src/Jaguar.cpp | 0 .../src/Joystick.cpp | 0 .../src/MotorSafetyHelper.cpp | 0 .../src/Notifier.cpp | 0 .../src/PIDController.cpp | 0 .../{wpilibC++Devices => Athena}/src/PWM.cpp | 0 .../src/PowerDistributionPanel.cpp | 0 .../src/Preferences.cpp | 0 .../src/Relay.cpp | 0 .../src/RobotBase.cpp | 0 .../src/RobotDrive.cpp | 0 .../{wpilibC++Devices => Athena}/src/SPI.cpp | 0 .../src/SafePWM.cpp | 0 .../src/SampleRobot.cpp | 0 .../src/SensorBase.cpp | 0 .../src/SerialPort.cpp | 0 .../src/Servo.cpp | 0 .../src/Solenoid.cpp | 0 .../src/SolenoidBase.cpp | 0 .../src/Talon.cpp | 0 .../src/TalonSRX.cpp | 0 .../{wpilibC++Devices => Athena}/src/Task.cpp | 0 .../src/Timer.cpp | 0 .../src/USBCamera.cpp | 0 .../src/Ultrasonic.cpp | 0 .../src/Utility.cpp | 0 .../src/Victor.cpp | 0 .../src/VictorSP.cpp | 0 .../src/Vision/AxisCamera.cpp | 0 .../src/Vision/BaeUtilities.cpp | 0 .../src/Vision/BinaryImage.cpp | 0 .../src/Vision/ColorImage.cpp | 0 .../src/Vision/FrcError.cpp | 0 .../src/Vision/HSLImage.cpp | 0 .../src/Vision/ImageBase.cpp | 0 .../src/Vision/MonoImage.cpp | 0 .../src/Vision/RGBImage.cpp | 0 .../src/Vision/Threshold.cpp | 0 .../src/Vision/VisionAPI.cpp | 0 wpilibc/athena.gradle | 120 + wpilibc/build.gradle | 225 +- wpilibc/cpp.doxy | 2362 -- wpilibc/{wpilibC++ => shared}/include/Base.h | 0 .../include/Buttons/Button.h | 0 .../include/Buttons/ButtonScheduler.h | 0 .../include/Buttons/CancelButtonScheduler.h | 0 .../include/Buttons/HeldButtonScheduler.h | 0 .../include/Buttons/InternalButton.h | 0 .../include/Buttons/JoystickButton.h | 0 .../include/Buttons/NetworkButton.h | 0 .../include/Buttons/PressedButtonScheduler.h | 0 .../include/Buttons/ReleasedButtonScheduler.h | 0 .../include/Buttons/ToggleButtonScheduler.h | 0 .../include/Buttons/Trigger.h | 0 .../include/Commands/Command.h | 0 .../include/Commands/CommandGroup.h | 0 .../include/Commands/CommandGroupEntry.h | 0 .../include/Commands/PIDCommand.h | 0 .../include/Commands/PIDSubsystem.h | 0 .../include/Commands/PrintCommand.h | 0 .../include/Commands/Scheduler.h | 0 .../include/Commands/StartCommand.h | 0 .../include/Commands/Subsystem.h | 0 .../include/Commands/WaitCommand.h | 0 .../include/Commands/WaitForChildren.h | 0 .../include/Commands/WaitUntilCommand.h | 0 .../include/Controller.h | 0 wpilibc/{wpilibC++ => shared}/include/Error.h | 0 .../{wpilibC++ => shared}/include/ErrorBase.h | 0 .../include/GenericHID.h | 0 .../include/HLUsageReporting.h | 0 .../include/LiveWindow/LiveWindow.h | 0 .../include/LiveWindow/LiveWindowSendable.h | 0 .../LiveWindow/LiveWindowStatusListener.h | 0 .../{wpilibC++ => shared}/include/Notifier.h | 0 .../include/PIDController.h | 0 .../include/PIDInterface.h | 0 .../{wpilibC++ => shared}/include/PIDOutput.h | 0 .../{wpilibC++ => shared}/include/PIDSource.h | 0 .../{wpilibC++ => shared}/include/Resource.h | 0 .../include/RobotState.h | 0 .../include/SensorBase.h | 0 .../include/SmartDashboard/NamedSendable.h | 0 .../include/SmartDashboard/Sendable.h | 0 .../include/SmartDashboard/SendableChooser.h | 0 .../include/SmartDashboard/SmartDashboard.h | 0 wpilibc/{wpilibC++ => shared}/include/Task.h | 0 .../{wpilibC++ => shared}/include/Task.inc | 0 wpilibc/{wpilibC++ => shared}/include/Timer.h | 0 .../{wpilibC++ => shared}/include/Utility.h | 0 .../{wpilibC++ => shared}/include/WPIErrors.h | 0 .../include/interfaces/Accelerometer.h | 0 .../include/interfaces/Gyro.h | 0 .../include/interfaces/Potentiometer.h | 0 .../src/Buttons/Button.cpp | 0 .../src/Buttons/ButtonScheduler.cpp | 0 .../src/Buttons/CancelButtonScheduler.cpp | 0 .../src/Buttons/HeldButtonScheduler.cpp | 0 .../src/Buttons/InternalButton.cpp | 0 .../src/Buttons/JoystickButton.cpp | 0 .../src/Buttons/NetworkButton.cpp | 0 .../src/Buttons/PressedButtonScheduler.cpp | 0 .../src/Buttons/ReleasedButtonScheduler.cpp | 0 .../src/Buttons/ToggleButtonScheduler.cpp | 0 .../src/Buttons/Trigger.cpp | 0 .../src/Commands/Command.cpp | 0 .../src/Commands/CommandGroup.cpp | 0 .../src/Commands/CommandGroupEntry.cpp | 0 .../src/Commands/PIDCommand.cpp | 0 .../src/Commands/PIDSubsystem.cpp | 0 .../src/Commands/PrintCommand.cpp | 0 .../src/Commands/Scheduler.cpp | 0 .../src/Commands/StartCommand.cpp | 0 .../src/Commands/Subsystem.cpp | 0 .../src/Commands/WaitCommand.cpp | 0 .../src/Commands/WaitForChildren.cpp | 0 .../src/Commands/WaitUntilCommand.cpp | 0 wpilibc/{wpilibC++ => shared}/src/Error.cpp | 0 .../{wpilibC++ => shared}/src/ErrorBase.cpp | 0 .../src/HLUsageReporting.cpp | 0 .../src/LiveWindow/LiveWindow.cpp | 0 .../LiveWindow/LiveWindowStatusListener.cpp | 0 .../{wpilibC++ => shared}/src/PIDSource.cpp | 0 .../{wpilibC++ => shared}/src/Resource.cpp | 0 .../{wpilibC++ => shared}/src/RobotState.cpp | 0 .../src/SmartDashboard/SendableChooser.cpp | 0 .../src/SmartDashboard/SmartDashboard.cpp | 0 .../src/interfaces/Potentiometer.cpp | 0 wpilibc/simulation.gradle | 27 + .../{wpilibC++Sim => simulation}/.gitignore | 0 .../CMakeLists.txt | 0 .../{wpilibC++Sim => simulation}/README.md | 0 .../include/AnalogInput.h | 0 .../include/AnalogPotentiometer.h | 0 .../include/Counter.h | 0 .../include/CounterBase.h | 0 .../include/DigitalInput.h | 0 .../include/DoubleSolenoid.h | 0 .../include/DriverStation.h | 0 .../include/Encoder.h | 0 .../include/Gyro.h | 0 .../include/IterativeRobot.h | 0 .../include/Jaguar.h | 0 .../include/Joystick.h | 0 .../include/MotorSafety.h | 0 .../include/MotorSafetyHelper.h | 0 .../include/NetworkCommunication/FRCComm.h | 260 +- .../include/PWM.h | 0 .../include/Relay.h | 0 .../include/RobotBase.h | 0 .../include/RobotDrive.h | 0 .../include/SafePWM.h | 0 .../include/SampleRobot.h | 0 .../include/Solenoid.h | 0 .../include/SpeedController.h | 0 .../include/Talon.h | 0 .../include/Victor.h | 0 .../include/WPILib.h | 0 .../include/simulation/MainNode.h | 0 .../include/simulation/SimContinuousOutput.h | 0 .../include/simulation/SimDigitalInput.h | 0 .../include/simulation/SimEncoder.h | 0 .../include/simulation/SimFloatInput.h | 0 .../include/simulation/SimGyro.h | 0 .../include/simulation/simTime.h | 0 .../src/AnalogInput.cpp | 0 .../src/AnalogPotentiometer.cpp | 0 .../src/DigitalInput.cpp | 0 .../src/DoubleSolenoid.cpp | 0 .../src/DriverStation.cpp | 0 .../src/Encoder.cpp | 0 .../{wpilibC++Sim => simulation}/src/Gyro.cpp | 0 .../src/IterativeRobot.cpp | 0 .../src/Jaguar.cpp | 0 .../src/Joystick.cpp | 0 .../src/MotorSafetyHelper.cpp | 0 .../src/Notifier.cpp | 0 .../src/PIDController.cpp | 0 .../{wpilibC++Sim => simulation}/src/PWM.cpp | 0 .../src/Relay.cpp | 0 .../src/RobotBase.cpp | 0 .../src/RobotDrive.cpp | 0 .../src/SafePWM.cpp | 0 .../src/SampleRobot.cpp | 0 .../src/SensorBase.cpp | 0 .../src/Solenoid.cpp | 0 .../src/Talon.cpp | 0 .../src/Timer.cpp | 0 .../src/Utility.cpp | 0 .../src/Victor.cpp | 0 .../src/simulation/SimContinuousOutput.cpp | 0 .../src/simulation/SimDigitalInput.cpp | 0 .../src/simulation/SimEncoder.cpp | 0 .../src/simulation/SimFloatInput.cpp | 0 .../src/simulation/SimGyro.cpp | 0 wpilibc/wpilibC++/CMakeLists.txt | 5 - wpilibc/wpilibC++Devices/CMakeLists.txt | 13 - .../wpilibC++IntegrationTests/CMakeLists.txt | 10 - .../gtest/include/gtest/gtest-typed-test.h | 259 - .../src/gtest/include/gtest/gtest_prod.h | 58 - .../src/gtest/src/gtest-all.cc | 48 - wpilibc/wpilibC++Sim/pom.xml | 62 - wpilibcIntegrationTests/build.gradle | 47 + .../gtest/include/gtest/gtest-death-test.h | 0 .../gtest/include/gtest/gtest-message.h | 0 .../gtest/include/gtest/gtest-param-test.h | 0 .../include/gtest/gtest-param-test.h.pump | 0 .../gtest/include/gtest/gtest-printers.h | 0 .../gtest/include/gtest/gtest-spi.h | 0 .../gtest/include/gtest/gtest-test-part.h | 0 .../gtest/include/gtest/gtest-typed-test.h | 0 .../gtest/include/gtest/gtest.h | 0 .../gtest/include/gtest/gtest_pred_impl.h | 0 .../gtest/include/gtest/gtest_prod.h | 0 .../internal/gtest-death-test-internal.h | 0 .../include/gtest/internal/gtest-filepath.h | 0 .../include/gtest/internal/gtest-internal.h | 0 .../include/gtest/internal/gtest-linked_ptr.h | 0 .../internal/gtest-param-util-generated.h | 0 .../gtest-param-util-generated.h.pump | 0 .../include/gtest/internal/gtest-param-util.h | 0 .../gtest/include/gtest/internal/gtest-port.h | 0 .../include/gtest/internal/gtest-string.h | 0 .../include/gtest/internal/gtest-tuple.h | 0 .../include/gtest/internal/gtest-tuple.h.pump | 0 .../include/gtest/internal/gtest-type-util.h | 0 .../gtest/internal/gtest-type-util.h.pump | 0 .../gtest/src/gtest-all.cc | 0 .../gtest/src/gtest-death-test.cc | 0 .../gtest/src/gtest-filepath.cc | 0 .../gtest/src/gtest-internal-inl.h | 0 .../gtest/src/gtest-port.cc | 0 .../gtest/src/gtest-printers.cc | 0 .../gtest/src/gtest-test-part.cc | 0 .../gtest/src/gtest-typed-test.cc | 0 .../gtest/src/gtest.cc | 0 .../gtest/src/gtest_main.cc | 0 .../include/TestBench.h | 0 .../include/command/MockCommand.h | 0 .../src/AnalogLoopTest.cpp | 0 .../src/AnalogPotentiometerTest.cpp | 0 .../src/BuiltInAccelerometerTest.cpp | 0 .../src/CANJaguarTest.cpp | 0 .../src/CANTalonTest.cpp | 0 .../src/ConditionVariableTest.cpp | 0 .../src/CounterTest.cpp | 0 .../src/DIOLoopTest.cpp | 0 .../src/FakeEncoderTest.cpp | 0 .../src/MotorEncoderTest.cpp | 0 .../src/MotorInvertingTest.cpp | 0 .../src/MutexTest.cpp | 0 .../src/NotifierTest.cpp | 0 .../src/PCMTest.cpp | 0 .../src/PowerDistributionPanelTest.cpp | 0 .../src/PreferencesTest.cpp | 0 .../src/RelayTest.cpp | 0 .../src/TestEnvironment.cpp | 0 .../src/TiltPanCameraTest.cpp | 0 .../src/TimerTest.cpp | 0 .../src/command/CommandTest.cpp | 0 .../src/command/MockCommand.cpp | 0 wpilibj/athena.gradle | 161 + wpilibj/build.gradle | 254 +- wpilibj/pom.xml | 18 - wpilibj/scripts/javadoc_classgen.php | 223 - wpilibj/simulation.gradle | 62 + .../src/athena/cpp}/.gitignore | 0 .../athena/cpp}/include/JNI-LICENSE | 0 .../athena/cpp}/include/NIIMAQdx.h | 0 .../athena/cpp}/include/jni.h | 0 .../athena/cpp}/include/linux/jni_md.h | 0 .../athena/cpp}/include/nivision.h | 0 .../athena/cpp}/lib/AccelerometerJNI.cpp | 0 .../athena/cpp}/lib/AnalogJNI.cpp | 0 .../athena/cpp}/lib/CANJNI.cpp | 0 .../athena/cpp}/lib/CanTalonSRXJNI.cpp | 0 .../athena/cpp}/lib/CompressorJNI.cpp | 0 .../athena/cpp}/lib/CounterJNI.cpp | 0 .../athena/cpp}/lib/DIOJNI.cpp | 0 .../athena/cpp}/lib/EncoderJNI.cpp | 0 .../lib/FRCNetworkCommunicationsLibrary.cpp | 0 .../athena/cpp}/lib/HALUtil.cpp | 0 .../athena/cpp}/lib/HALUtil.h | 0 .../athena/cpp}/lib/I2CJNI.cpp | 0 .../athena/cpp}/lib/InterruptJNI.cpp | 0 .../athena/cpp}/lib/JNIWrapper.cpp | 0 .../athena/cpp}/lib/NIVisionJNI.cpp | 0 .../athena/cpp}/lib/NotifierJNI.cpp | 0 .../athena/cpp}/lib/PDPJNI.cpp | 0 .../athena/cpp}/lib/PWMJNI.cpp | 0 .../athena/cpp}/lib/PowerJNI.cpp | 0 .../athena/cpp}/lib/RelayJNI.cpp | 0 .../athena/cpp}/lib/SPIJNI.cpp | 0 .../athena/cpp}/lib/SerialPortJNI.cpp | 0 .../athena/cpp}/lib/SolenoidJNI.cpp | 0 .../athena/cpp}/nivision/dxattr.h | 0 .../athena/cpp}/nivision/dxattr.ini | 0 .../athena/cpp}/nivision/dxattr_funcs.txt | 0 .../athena/cpp}/nivision/gen_java.py | 0 .../athena/cpp}/nivision/gen_struct_sizer.py | 0 .../athena/cpp}/nivision/generateJNI.sh | 0 .../athena/cpp}/nivision/get_struct_size.py | 0 .../athena/cpp}/nivision/imaqdx.ini | 0 .../athena/cpp}/nivision/nivision_2011.ini | 0 .../athena/cpp}/nivision/nivision_parse.py | 0 .../athena/cpp}/swigTalon/CanTalonSRX.i | 0 .../athena/cpp}/swigTalon/README | 0 .../athena/cpp}/swigTalon/generateJNI.sh | 0 .../athena}/java/com/ni/vision/NIVision.java | 0 .../java/com/ni/vision/VisionException.java | 0 .../edu/wpi/first/wpilibj/ADXL345_I2C.java | 0 .../edu/wpi/first/wpilibj/ADXL345_SPI.java | 0 .../wpi/first/wpilibj/AccumulatorResult.java | 0 .../first/wpilibj/AnalogAccelerometer.java | 0 .../edu/wpi/first/wpilibj/AnalogGyro.java | 0 .../edu/wpi/first/wpilibj/AnalogInput.java | 0 .../edu/wpi/first/wpilibj/AnalogOutput.java | 0 .../first/wpilibj/AnalogPotentiometer.java | 0 .../edu/wpi/first/wpilibj/AnalogTrigger.java | 0 .../first/wpilibj/AnalogTriggerOutput.java | 0 .../first/wpilibj/BuiltInAccelerometer.java | 0 .../java/edu/wpi/first/wpilibj/CANJaguar.java | 0 .../wpi/first/wpilibj/CANSpeedController.java | 0 .../java/edu/wpi/first/wpilibj/CANTalon.java | 0 .../edu/wpi/first/wpilibj/CameraServer.java | 0 .../edu/wpi/first/wpilibj/CanTalonSRX.java | 0 .../edu/wpi/first/wpilibj/Compressor.java | 0 .../wpi/first/wpilibj/ControllerPower.java | 0 .../java/edu/wpi/first/wpilibj/Counter.java | 0 .../edu/wpi/first/wpilibj/CounterBase.java | 0 .../edu/wpi/first/wpilibj/CtreCanNode.java | 0 .../edu/wpi/first/wpilibj/DigitalInput.java | 0 .../edu/wpi/first/wpilibj/DigitalOutput.java | 0 .../edu/wpi/first/wpilibj/DigitalSource.java | 0 .../edu/wpi/first/wpilibj/DoubleSolenoid.java | 0 .../edu/wpi/first/wpilibj/DriverStation.java | 0 .../java/edu/wpi/first/wpilibj/Encoder.java | 0 .../java/edu/wpi/first/wpilibj/GearTooth.java | 0 .../java/edu/wpi/first/wpilibj/GyroBase.java | 0 .../java/edu/wpi/first/wpilibj/I2C.java | 0 .../wpilibj/InterruptHandlerFunction.java | 0 .../wpilibj/InterruptableSensorBase.java | 0 .../edu/wpi/first/wpilibj/IterativeRobot.java | 0 .../java/edu/wpi/first/wpilibj/Jaguar.java | 0 .../java/edu/wpi/first/wpilibj/Joystick.java | 0 .../java/edu/wpi/first/wpilibj/Notifier.java | 0 .../java/edu/wpi/first/wpilibj/PWM.java | 0 .../first/wpilibj/PowerDistributionPanel.java | 0 .../edu/wpi/first/wpilibj/Preferences.java | 0 .../java/edu/wpi/first/wpilibj/Relay.java | 0 .../java/edu/wpi/first/wpilibj/Resource.java | 0 .../java/edu/wpi/first/wpilibj/RobotBase.java | 0 .../edu/wpi/first/wpilibj/RobotDrive.java | 0 .../java/edu/wpi/first/wpilibj/SPI.java | 0 .../first/wpilibj/SWIGTYPE_p_CTR_Code.java | 0 .../wpi/first/wpilibj/SWIGTYPE_p_UINT8.java | 0 .../wpi/first/wpilibj/SWIGTYPE_p_double.java | 0 .../wpi/first/wpilibj/SWIGTYPE_p_float.java | 0 .../edu/wpi/first/wpilibj/SWIGTYPE_p_int.java | 0 .../wpi/first/wpilibj/SWIGTYPE_p_int32_t.java | 0 .../first/wpilibj/SWIGTYPE_p_uint32_t.java | 0 .../wpi/first/wpilibj/SWIGTYPE_p_uint8_t.java | 0 .../java/edu/wpi/first/wpilibj/SafePWM.java | 0 .../edu/wpi/first/wpilibj/SampleRobot.java | 0 .../edu/wpi/first/wpilibj/SensorBase.java | 0 .../edu/wpi/first/wpilibj/SerialPort.java | 0 .../java/edu/wpi/first/wpilibj/Servo.java | 0 .../java/edu/wpi/first/wpilibj/Solenoid.java | 0 .../edu/wpi/first/wpilibj/SolenoidBase.java | 0 .../wpi/first/wpilibj/SpeedController.java | 0 .../java/edu/wpi/first/wpilibj/Talon.java | 0 .../java/edu/wpi/first/wpilibj/TalonSRX.java | 0 .../edu/wpi/first/wpilibj/Ultrasonic.java | 0 .../java/edu/wpi/first/wpilibj/Utility.java | 0 .../java/edu/wpi/first/wpilibj/Victor.java | 0 .../java/edu/wpi/first/wpilibj/VictorSP.java | 0 .../wpilibj/can/CANExceptionFactory.java | 42 + .../can/CANInvalidBufferException.java | 0 .../edu/wpi/first/wpilibj/can/CANJNI.java | 0 .../can/CANJaguarVersionException.java | 0 .../can/CANMessageNotAllowedException.java | 0 .../can/CANMessageNotFoundException.java | 0 .../can/CANNotInitializedException.java | 0 .../FRCNetworkCommunicationsLibrary.java | 0 .../communication/HALAllianceStationID.java | 0 .../wpilibj/communication/HALControlWord.java | 0 .../wpilibj/communication/NIRioStatus.java | 0 .../wpilibj/communication/UsageReporting.java | 0 .../first/wpilibj/hal/AccelerometerJNI.java | 0 .../edu/wpi/first/wpilibj/hal/AnalogJNI.java | 0 .../wpi/first/wpilibj/hal/CanTalonJNI.java | 0 .../wpi/first/wpilibj/hal/CompressorJNI.java | 0 .../edu/wpi/first/wpilibj/hal/CounterJNI.java | 0 .../edu/wpi/first/wpilibj/hal/DIOJNI.java | 0 .../edu/wpi/first/wpilibj/hal/EncoderJNI.java | 0 .../edu/wpi/first/wpilibj/hal/HALLibrary.java | 0 .../edu/wpi/first/wpilibj/hal/HALUtil.java | 0 .../edu/wpi/first/wpilibj/hal/I2CJNI.java | 0 .../wpi/first/wpilibj/hal/InterruptJNI.java | 0 .../edu/wpi/first/wpilibj/hal/JNIWrapper.java | 0 .../wpi/first/wpilibj/hal/NotifierJNI.java | 0 .../edu/wpi/first/wpilibj/hal/PDPJNI.java | 0 .../edu/wpi/first/wpilibj/hal/PWMJNI.java | 0 .../edu/wpi/first/wpilibj/hal/PowerJNI.java | 0 .../edu/wpi/first/wpilibj/hal/RelayJNI.java | 0 .../edu/wpi/first/wpilibj/hal/SPIJNI.java | 0 .../wpi/first/wpilibj/hal/SerialPortJNI.java | 0 .../wpi/first/wpilibj/hal/SolenoidJNI.java | 0 .../wpi/first/wpilibj/image/BinaryImage.java | 0 .../wpi/first/wpilibj/image/ColorImage.java | 0 .../edu/wpi/first/wpilibj/image/HSLImage.java | 0 .../wpi/first/wpilibj/image/ImageBase.java | 0 .../wpi/first/wpilibj/image/MonoImage.java | 0 .../wpilibj/image/NIVisionException.java | 0 .../wpilibj/image/ParticleAnalysisReport.java | 0 .../edu/wpi/first/wpilibj/image/RGBImage.java | 0 .../edu/wpi/first/wpilibj/image/package.html | 0 .../internal/HardwareHLUsageReporting.java | 0 .../first/wpilibj/internal/HardwareTimer.java | 0 .../java/edu/wpi/first/wpilibj/package.html | 0 .../wpi/first/wpilibj/vision/AxisCamera.java | 0 .../wpi/first/wpilibj/vision/USBCamera.java | 0 .../edu/wpi/first/wpilibj/Controller.java | 0 .../edu/wpi/first/wpilibj/GenericHID.java | 0 .../wpi/first/wpilibj/HLUsageReporting.java | 0 .../edu/wpi/first/wpilibj/MotorSafety.java | 0 .../wpi/first/wpilibj/MotorSafetyHelper.java | 0 .../edu/wpi/first/wpilibj/NamedSendable.java | 0 .../edu/wpi/first/wpilibj/PIDController.java | 0 .../edu/wpi/first/wpilibj/PIDInterface.java | 0 .../java/edu/wpi/first/wpilibj/PIDOutput.java | 0 .../java/edu/wpi/first/wpilibj/PIDSource.java | 0 .../edu/wpi/first/wpilibj/PIDSourceType.java | 0 .../edu/wpi/first/wpilibj/RobotState.java | 0 .../java/edu/wpi/first/wpilibj/Sendable.java | 0 .../java/edu/wpi/first/wpilibj/Timer.java | 0 .../edu/wpi/first/wpilibj/buttons/Button.java | 0 .../first/wpilibj/buttons/InternalButton.java | 0 .../first/wpilibj/buttons/JoystickButton.java | 0 .../first/wpilibj/buttons/NetworkButton.java | 0 .../wpi/first/wpilibj/buttons/Trigger.java | 0 .../wpi/first/wpilibj/command/Command.java | 0 .../first/wpilibj/command/CommandGroup.java | 0 .../command/IllegalUseOfCommandException.java | 0 .../wpilibj/command/LinkedListElement.java | 0 .../wpi/first/wpilibj/command/PIDCommand.java | 0 .../first/wpilibj/command/PIDSubsystem.java | 0 .../first/wpilibj/command/PrintCommand.java | 0 .../wpi/first/wpilibj/command/Scheduler.java | 0 .../edu/wpi/first/wpilibj/command/Set.java | 0 .../first/wpilibj/command/StartCommand.java | 0 .../wpi/first/wpilibj/command/Subsystem.java | 0 .../first/wpilibj/command/WaitCommand.java | 0 .../wpilibj/command/WaitForChildren.java | 0 .../wpilibj/command/WaitUntilCommand.java | 0 .../wpilibj/interfaces/Accelerometer.java | 0 .../wpi/first/wpilibj/interfaces/Gyro.java | 0 .../wpilibj/interfaces/Potentiometer.java | 0 .../first/wpilibj/livewindow/LiveWindow.java | 0 .../livewindow/LiveWindowSendable.java | 0 .../smartdashboard/SendableChooser.java | 0 .../smartdashboard/SmartDashboard.java | 0 .../wpilibj/util/AllocationException.java | 0 .../BaseSystemNotInitializedException.java | 0 .../first/wpilibj/util/BoundaryException.java | 0 .../util/CheckedAllocationException.java | 0 .../wpi/first/wpilibj/util/SortedVector.java | 0 .../wpilibj/util/UncleanStatusException.java | 0 .../edu/wpi/first/wpilibj/AnalogInput.java | 0 .../first/wpilibj/AnalogPotentiometer.java | 0 .../edu/wpi/first/wpilibj/CounterBase.java | 0 .../edu/wpi/first/wpilibj/DigitalInput.java | 0 .../edu/wpi/first/wpilibj/DoubleSolenoid.java | 0 .../edu/wpi/first/wpilibj/DriverStation.java | 0 .../java/edu/wpi/first/wpilibj/Encoder.java | 0 .../sim}/java/edu/wpi/first/wpilibj/Gyro.java | 0 .../edu/wpi/first/wpilibj/IterativeRobot.java | 0 .../java/edu/wpi/first/wpilibj/Jaguar.java | 0 .../java/edu/wpi/first/wpilibj/Joystick.java | 0 .../edu/wpi/first/wpilibj/Preferences.java | 0 .../java/edu/wpi/first/wpilibj/Relay.java | 0 .../java/edu/wpi/first/wpilibj/RobotBase.java | 0 .../edu/wpi/first/wpilibj/RobotDrive.java | 0 .../edu/wpi/first/wpilibj/SampleRobot.java | 0 .../edu/wpi/first/wpilibj/SensorBase.java | 0 .../java/edu/wpi/first/wpilibj/Servo.java | 0 .../java/edu/wpi/first/wpilibj/Solenoid.java | 0 .../wpi/first/wpilibj/SpeedController.java | 0 .../java/edu/wpi/first/wpilibj/Talon.java | 0 .../java/edu/wpi/first/wpilibj/Victor.java | 0 .../wpi/first/wpilibj/command/Scheduler.java | 0 .../wpi/first/wpilibj/internal/SimTimer.java | 0 .../first/wpilibj/simulation/MainNode.java | 0 .../wpilibj/simulation/SimDigitalInput.java | 0 .../first/wpilibj/simulation/SimEncoder.java | 0 .../wpilibj/simulation/SimFloatInput.java | 0 .../wpi/first/wpilibj/simulation/SimGyro.java | 0 .../simulation/SimSpeedController.java | 0 wpilibj/wpilibJava/pom.xml | 80 - wpilibj/wpilibJavaDevices/.gitignore | 2 - wpilibj/wpilibJavaDevices/build.gradle | 63 - wpilibj/wpilibJavaDevices/pom.xml | 85 - .../edu/wpi/first/wpilibj/ExampleTest.java | 46 - .../edu/wpi/first/wpilibj/ResourceTest.java | 142 - wpilibj/wpilibJavaFinal/.gitignore | 2 - wpilibj/wpilibJavaFinal/pom.xml | 258 - wpilibj/wpilibJavaIntegrationTests/pom.xml | 180 - .../src/main/resources/logging.properties | 32 - wpilibj/wpilibJavaJNI/.gitignore | 2 - wpilibj/wpilibJavaJNI/CMakeLists.txt | 25 - wpilibj/wpilibJavaJNI/pom.xml | 315 - wpilibj/wpilibJavaSim/.classpath | 26 - wpilibj/wpilibJavaSim/.gitignore | 2 - wpilibj/wpilibJavaSim/.project | 23 - .../.settings/org.eclipse.jdt.core.prefs | 5 - .../.settings/org.eclipse.m2e.core.prefs | 4 - wpilibj/wpilibJavaSim/missing.txt | 45 - wpilibj/wpilibJavaSim/pom.xml | 63 - .../README.html | 0 .../README.md | 0 wpilibjIntegrationTests/build.gradle | 47 + .../runintegrationjavaprogram | 0 .../first/wpilibj/AbstractInterruptTest.java | 0 .../first/wpilibj}/AbstractTestSuiteTest.java | 0 .../first/wpilibj/AnalogCrossConnectTest.java | 0 .../wpilibj/AnalogPotentiometerTest.java | 0 .../wpilibj/BuiltInAccelerometerTest.java | 0 .../edu/wpi/first/wpilibj/CANTalonTest.java | 0 .../edu/wpi/first/wpilibj/CounterTest.java | 0 .../first/wpilibj/DIOCrossConnectTest.java | 0 .../edu/wpi/first/wpilibj/EncoderTest.java | 0 .../java/edu/wpi/first/wpilibj/GyroTest.java | 0 .../wpi/first/wpilibj/MotorEncoderTest.java | 0 .../wpi/first/wpilibj/MotorInvertingTest.java | 0 .../java/edu/wpi/first/wpilibj/PCMTest.java | 0 .../java/edu/wpi/first/wpilibj/PDPTest.java | 0 .../java/edu/wpi/first/wpilibj/PIDTest.java | 0 .../wpi/first/wpilibj/PreferencesTest.java | 0 .../first/wpilibj/RelayCrossConnectTest.java | 0 .../edu/wpi/first/wpilibj/SampleTest.java | 0 .../java/edu/wpi/first/wpilibj/TimerTest.java | 0 .../wpi/first/wpilibj/WpiLibJTestSuite.java | 0 .../first/wpilibj/can/AbstractCANTest.java | 0 .../can/CANCurrentQuadEncoderModeTest.java | 0 .../wpi/first/wpilibj/can/CANDefaultTest.java | 0 .../wpilibj/can/CANJaguarInversionTest.java | 0 .../can/CANPercentQuadEncoderModeTest.java | 0 .../can/CANPositionPotentiometerModeTest.java | 0 .../can/CANPositionQuadEncoderModeTest.java | 0 .../can/CANSpeedQuadEncoderModeTest.java | 0 .../wpi/first/wpilibj/can/CANTestSuite.java | 0 .../can/CANVoltageQuadEncoderModeTest.java | 0 .../wpi/first/wpilibj/can/package-info.java | 0 .../wpilibj/command/AbstractCommandTest.java | 0 .../wpi/first/wpilibj/command/ButtonTest.java | 0 .../command/CommandParallelGroupTest.java | 0 .../wpilibj/command/CommandScheduleTest.java | 0 .../command/CommandSequentialGroupTest.java | 0 .../wpilibj/command/CommandSupersedeTest.java | 0 .../wpilibj/command/CommandTestSuite.java | 0 .../wpilibj/command/CommandTimeoutTest.java | 0 .../wpilibj/command/DefaultCommandTest.java | 0 .../fixtures/AnalogCrossConnectFixture.java | 0 .../fixtures/CANMotorEncoderFixture.java | 0 .../fixtures/DIOCrossConnectFixture.java | 0 .../wpilibj/fixtures/FakeCounterFixture.java | 0 .../wpilibj/fixtures/FakeEncoderFixture.java | 0 .../first/wpilibj/fixtures/ITestFixture.java | 0 .../wpilibj/fixtures/MotorEncoderFixture.java | 0 .../fixtures/RelayCrossConnectFixture.java | 0 .../first/wpilibj/fixtures/SampleFixture.java | 0 .../fixtures/TiltPanCameraFixture.java | 0 .../mockhardware/FakeCounterSource.java | 0 .../mockhardware/FakeEncoderSource.java | 0 .../mockhardware/FakePotentiometerSource.java | 0 .../wpi/first/wpilibj/mocks/MockCommand.java | 0 .../smartdashboard/SmartDashboardTest.java | 0 .../SmartDashboardTestSuite.java | 0 .../first/wpilibj/test/AbstractComsSetup.java | 0 .../first/wpilibj/test/AbstractTestSuite.java | 0 .../first/wpilibj/test/AntJunitLanucher.java | 0 .../edu/wpi/first/wpilibj/test/QuickTest.java | 0 .../wpi/first/wpilibj/test/RepeatRule.java | 0 .../edu/wpi/first/wpilibj/test/TestBench.java | 0 .../edu/wpi/first/wpilibj/test/TestSuite.java | 0 .../wpi/first/wpilibj/test/package-info.java | 0 .../src/main/resources}/logging.properties | 0 1769 files changed, 2278 insertions(+), 333177 deletions(-) delete mode 100644 .gitmodules delete mode 100644 Vagrantfile delete mode 100644 bootstrap.sh create mode 100644 cppSettings.gradle delete mode 100644 driver-station/build.gradle delete mode 100644 driver-station/pom.xml delete mode 100644 driver-station/src/main/java/edu/wpi/first/driverstation/DriverStation.java delete mode 100644 driver-station/src/main/java/edu/wpi/first/driverstation/ReadThread.java delete mode 100644 driver-station/src/main/java/edu/wpi/first/driverstation/fms/FMSController.java delete mode 100644 driver-station/src/main/java/edu/wpi/first/driverstation/fms/FMSInterface.java delete mode 100644 driver-station/src/main/java/edu/wpi/first/driverstation/fms/NoFMSController.java delete mode 100644 driver-station/src/main/java/edu/wpi/first/driverstation/robotcoms/ControlMode.java delete mode 100644 driver-station/src/main/java/edu/wpi/first/driverstation/robotcoms/RobotComm.java delete mode 100644 eclipse-plugins/.gitattributes delete mode 100644 eclipse-plugins/.gitignore delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core.feature/build.properties delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core.feature/feature.xml delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core.feature/pom.xml delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/META-INF/MANIFEST.MF delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/WPILib Intro/css/graphics/sample.gif delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/WPILib Intro/css/graphics/sample_hov.gif delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/WPILib Intro/css/sample.css delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/WPILib Intro/sample.xml delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/build.properties delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/icons/outlineviewer16x16.png delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/icons/robotbuilder.png delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/icons/robotbuilder16x16.png delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/icons/sample.gif delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/icons/sfxdashboard16x16.png delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/icons/smartdashboard16x16.png delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/icons/wpi.ico delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/plugin.xml delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/pom.xml delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/resources/configuration.properties delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/WPILibCore.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/actions/RunOutlineViewerAction.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/actions/RunRobotBuilderAction.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/actions/RunSFXDashboardAction.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/actions/RunSimulationSmartDashboardAction.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/actions/RunSmartDashboardAction.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/ant/AntPropertiesParser.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/installer/AbstractInstaller.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/installer/ToolsInstaller.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/launching/AntLauncher.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/launching/SimulationNotification.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/nature/FRCProjectNature.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/preferences/ComboFieldEditor.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/preferences/PreferenceConstants.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/preferences/PreferenceInitializer.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/preferences/WPILibPreferencePage.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/ExampleWizard.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/ExampleWizardChoicePage.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/IExampleProject.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/INewProjectInfo.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/IProjectCreator.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/IProjectFilter.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/NewProjectMainPage.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/ProjectComboField.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/ProjectCreationUtils.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/ProjectType.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/Tag.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/TeamNumberPage.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp.feature/build.properties delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp.feature/feature.xml delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp.feature/pom.xml delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/META-INF/MANIFEST.MF delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/build.properties delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/plugin.xml delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/pom.xml delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/configuration.properties delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/icons/Button.png delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/icons/Command.png delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/icons/CommandGroup.png delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/icons/Gazebo.png delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/icons/PIDSubsystem.png delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/icons/Subsystem.png delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/icons/sample.gif delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/icons/wpi.ico delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/.cproject delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/build.properties delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/build.xml delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Command.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Command.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/CommandBase.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/CommandBase.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/CommandGroup.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/CommandGroup.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/ExampleCommand.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/ExampleCommand.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/ExampleSubsystem.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/ExampleSubsystem.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/OI.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/OI.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/PIDSubsystem.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/PIDSubsystem.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Robot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/RobotMap.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Subsystem.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Subsystem.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Trigger.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Trigger.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/2015Vision/Color_src/Robot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/2015Vision/Retro_src/Robot.cpp delete mode 100755 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/ArcadeDrive/src/Robot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/AxisCameraSample/src/Robot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/CANPDP/src/Robot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/CANTalon/src/Robot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/CANTalonPID/src/Robot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/Encoder/src/Robot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/Autonomous.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/Autonomous.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/CloseClaw.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/CloseClaw.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/DriveStraight.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/DriveStraight.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/OpenClaw.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/OpenClaw.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/Pickup.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/Pickup.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/Place.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/Place.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/PrepareToPickup.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/PrepareToPickup.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/SetDistanceToBox.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/SetDistanceToBox.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/SetElevatorSetpoint.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/SetElevatorSetpoint.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/SetWristSetpoint.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/SetWristSetpoint.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/TankDriveWithJoystick.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/TankDriveWithJoystick.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/OI.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/OI.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Robot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Robot.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/Claw.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/Claw.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/DriveTrain.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/DriveTrain.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/Elevator.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/Elevator.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/Wrist.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/Wrist.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GettingStarted/src/Robot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/Gyro/src/Robot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GyroMecanum/src/Robot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/IntermediateVision/src/Robot.cpp delete mode 100755 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/MecanumDrive/src/Robot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/MotorControl/src/Robot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/MotorControlEncoder/src/Robot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/CheckForHotGoal.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/CheckForHotGoal.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/CloseClaw.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/CloseClaw.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/Collect.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/Collect.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/DriveAndShootAutonomous.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/DriveAndShootAutonomous.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/DriveForward.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/DriveForward.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/DriveWithJoystick.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/DriveWithJoystick.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/ExtendShooter.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/ExtendShooter.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/LowGoal.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/LowGoal.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/OpenClaw.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/OpenClaw.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/SetCollectionSpeed.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/SetCollectionSpeed.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/SetPivotSetpoint.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/SetPivotSetpoint.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/Shoot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/Shoot.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/WaitForBall.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/WaitForBall.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/WaitForPressure.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/WaitForPressure.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/OI.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/OI.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Robot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Robot.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Collector.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Collector.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/DriveTrain.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/DriveTrain.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Pivot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Pivot.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Pneumatics.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Pneumatics.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Shooter.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Shooter.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Triggers/DoubleButton.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Triggers/DoubleButton.h delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/Potentiometer/src/Robot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PotentiometerPID/src/Robot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/QuickVision/src/Robot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/Relay/src/Robot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/Solenoid/src/Robot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/Ultrasonic/src/Robot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/UltrasonicPID/src/Robot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/examples.xml delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/iterative/Robot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/sample/Robot.cpp delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/WPILibCPPPlugin.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/installer/CPPInstaller.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/launching/DeployLaunchShortcut.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/launching/RSEUtils.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/launching/SimulateLaunchShortcut.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/preferences/PreferenceConstants.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/preferences/PreferenceInitializer.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/examples/ExampleCPPProject.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/examples/ExampleCPPWizard.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/CommandGroupWizard.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/CommandWizard.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/FileTemplateWizard.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/FileTemplateWizardMainPage.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/PIDSubsystemWizard.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/SubsystemWizard.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/TriggerWizard.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/newproject/CPPProjectType.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/newproject/NewCPPWizard.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/newproject/WPIRobotCPPProjectCreator.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/ant-classloadertask.jar delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/ant-contrib.jar delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/build.properties delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/build.xml delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/jsch-0.1.50.jar delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/robotCommand delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java.feature/build.properties delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java.feature/feature.xml delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java.feature/pom.xml delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/.project delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/META-INF/MANIFEST.MF delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/build.properties delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/plugin.xml delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/pom.xml delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/configuration.properties delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/icons/Button.png delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/icons/Command.png delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/icons/CommandGroup.png delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/icons/Gazebo.png delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/icons/PIDSubsystem.png delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/icons/Subsystem.png delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/icons/sample.gif delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/icons/wpi.ico delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/.classpath delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/build.properties delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/build.xml delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/Command.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/CommandGroup.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/ExampleCommand.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/ExampleSubsystem.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/OI.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/PIDSubsystem.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/Robot.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/RobotMap.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/Subsystem.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/Trigger.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/2015Vision/Color_src/Robot.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/2015Vision/Retro_src/Robot.java delete mode 100755 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/AxisCameraSample/src/org/usfirst/frc/team190/robot/Robot.java delete mode 100755 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/CANTalon/src/org/usfirst/frc/team190/robot/Robot.java delete mode 100755 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/CANTalonPID/src/org/usfirst/frc/team190/robot/Robot.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/OI.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/Robot.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/Autonomous.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/CloseClaw.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/DriveStraight.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/OpenClaw.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/Pickup.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/Place.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/PrepareToPickup.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/SetDistanceToBox.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/SetElevatorSetpoint.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/SetWristSetpoint.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/TankDriveWithJoystick.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/subsystems/Claw.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/subsystems/DriveTrain.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/subsystems/Elevator.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/subsystems/Wrist.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GettingStarted/src/org/usfirst/frc/team190/robot/Robot.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/Gyro/src/org/usfirst/frc/team190/robot/Robot.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GyroMecanum/src/org/usfirst/frc/team190/robot/Robot.java delete mode 100755 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/IntermediateVision/src/org/usfirst/frc/team190/robot/Robot.java delete mode 100755 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/MecanumDrive/src/org/usfirst/frc/team190/robot/Robot.java delete mode 100755 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/MotorControl/src/org/usfirst/frc/team190/robot/Robot.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/OI.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/Robot.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/CheckForHotGoal.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/CloseClaw.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/Collect.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/DriveAndShootAutonomous.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/DriveForward.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/DriveWithJoystick.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/ExtendShooter.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/LowGoal.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/OpenClaw.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/SetCollectionSpeed.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/SetPivotSetpoint.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/Shoot.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/WaitForBall.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/WaitForPressure.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/subsystems/Collector.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/subsystems/DriveTrain.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/subsystems/Pivot.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/subsystems/Pneumatics.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/subsystems/Shooter.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/triggers/DoubleButton.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/Potentiometer/src/org/usfirst/frc/team190/robot/Robot.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PotentiometerPID/src/org/usfirst/frc/team190/robot/Robot.java delete mode 100755 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/QuickVision/src/org/usfirst/frc/team190/robot/Robot.java delete mode 100755 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/TankDrive/src/org/usfirst/frc/team190/robot/Robot.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/Ultrasonic/src/org/usfirst/frc/team190/robot/Robot.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/UltrasonicPID/src/org/usfirst/frc/team190/robot/Robot.java delete mode 100755 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/examples.xml delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/iterative/Robot.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/sample/Robot.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/WPILibJavaPlugin.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/installer/JavaInstaller.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/launching/DeployLaunchShortcut.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/launching/JavaLaunchShortcut.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/launching/SimulateLaunchShortcut.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/preferences/PreferenceConstants.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/preferences/PreferenceInitializer.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/examples/ExampleJavaProject.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/examples/ExampleJavaWizard.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/CommandGroupWizard.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/CommandWizard.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/FileTemplateWizard.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/FileTemplateWizardMainPage.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/PIDSubsystemWizard.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/SubsystemWizard.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/TriggerWizard.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/newproject/JavaProjectType.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/newproject/NewJavaWizard.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/newproject/WPIRobotJavaProjectCreator.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/resources/java-zip/ant/ant-classloadertask.jar delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/resources/java-zip/ant/ant-contrib.jar delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/resources/java-zip/ant/build.properties delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/resources/java-zip/ant/build.xml delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/resources/java-zip/ant/frcdebug delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/resources/java-zip/ant/jsch-0.1.50.jar delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/resources/java-zip/ant/robotCommand delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/resources/java-zip/ant/robotDebugCommand delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/META-INF/MANIFEST.MF delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/README delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/build.properties delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/contexts.xml delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/icons/riolog.png delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/plugin.xml delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/pom.xml delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/src/netconsole2/Activator.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/src/netconsole2/views/RiologView.java delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.updatesite/index.html delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.updatesite/pom.xml delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.updatesite/site.xml delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.updatesite/web/site.css delete mode 100644 eclipse-plugins/edu.wpi.first.wpilib.plugins.updatesite/web/site.xsl delete mode 100644 eclipse-plugins/pom.xml delete mode 100644 hal/CMakeLists.txt delete mode 100644 hal/README.org delete mode 100644 jenkins/README delete mode 100644 jenkins/build.gradle delete mode 100644 jenkins/docs/.gitignore delete mode 100644 jenkins/docs/Makefile delete mode 100644 jenkins/docs/cpp.doxy delete mode 100644 jenkins/docs/java.doxy delete mode 100644 maven-utilities/README.org delete mode 100644 maven-utilities/athena/library-jar/pom.xml delete mode 100644 maven-utilities/athena/pom.xml delete mode 100644 maven-utilities/include/pom.xml delete mode 100644 maven-utilities/pom.xml delete mode 100644 networktables/.gitignore delete mode 100644 networktables/IterativeNetworkTablesTest/build.properties delete mode 100644 networktables/IterativeNetworkTablesTest/build.xml delete mode 100644 networktables/IterativeNetworkTablesTest/nbproject/project.bak.xml delete mode 100644 networktables/IterativeNetworkTablesTest/nbproject/project.xml delete mode 100644 networktables/IterativeNetworkTablesTest/resources/META-INF/MANIFEST.MF delete mode 100644 networktables/IterativeNetworkTablesTest/src/edu/wpi/first/wpilibj/templates/RobotTemplate.java delete mode 100644 networktables/NetworkTableViewer/build.xml delete mode 100644 networktables/NetworkTableViewer/lib/nblibraries.properties delete mode 100644 networktables/NetworkTableViewer/lib/networktables-desktop.jar delete mode 100644 networktables/NetworkTableViewer/manifest.mf delete mode 100644 networktables/NetworkTableViewer/nbproject/build-impl.xml delete mode 100644 networktables/NetworkTableViewer/nbproject/configs/Run_as_WebStart.properties delete mode 100644 networktables/NetworkTableViewer/nbproject/configs/Run_in_Browser.properties delete mode 100644 networktables/NetworkTableViewer/nbproject/genfiles.properties delete mode 100644 networktables/NetworkTableViewer/nbproject/jfx-impl.xml delete mode 100644 networktables/NetworkTableViewer/nbproject/private/configs/Run_as_WebStart.properties delete mode 100644 networktables/NetworkTableViewer/nbproject/private/configs/Run_in_Browser.properties delete mode 100644 networktables/NetworkTableViewer/nbproject/private/private.properties delete mode 100644 networktables/NetworkTableViewer/nbproject/private/private.xml delete mode 100644 networktables/NetworkTableViewer/nbproject/project.properties delete mode 100644 networktables/NetworkTableViewer/nbproject/project.xml delete mode 100644 networktables/NetworkTableViewer/src.zip delete mode 100644 networktables/NetworkTableViewer/src/edu/wpi/first/tableviewer/NetworkTableViewer.java delete mode 100644 networktables/NetworkTableViewer/src/edu/wpi/first/tableviewer/popup/AddValuePopup.java delete mode 100644 networktables/NetworkTableViewer/src/edu/wpi/first/tableviewer/popup/EditorPopup.java delete mode 100644 networktables/NetworkTableViewer/src/edu/wpi/first/tableviewer/popup/IPopup.java delete mode 100644 networktables/NetworkTableViewer/src/edu/wpi/first/tableviewer/popup/Popup.java delete mode 100644 networktables/NetworkTableViewer/src/edu/wpi/first/tableviewer/popup/PopupFactory.java delete mode 100644 networktables/NetworkTableViewer/src/edu/wpi/first/tableviewer/popup/PreferencesPopup.java delete mode 100644 networktables/NetworkTableViewer/src/edu/wpi/first/tableviewer/stylesheets/PopupCSS.css delete mode 100644 networktables/NetworkTableViewer/src/edu/wpi/first/tableviewer/stylesheets/ViewerStyleSheet.css delete mode 100644 networktables/NetworkTableViewer/src/edu/wpi/first/tableviewer/treeview/ITableItem.java delete mode 100644 networktables/NetworkTableViewer/src/edu/wpi/first/tableviewer/treeview/TableBranch.java delete mode 100644 networktables/NetworkTableViewer/src/edu/wpi/first/tableviewer/treeview/TableLeaf.java delete mode 100644 networktables/NetworkTableViewer/src/edu/wpi/first/tableviewer/treeview/TableTreeCell.java delete mode 100644 networktables/NetworkTableViewer/src/edu/wpi/first/tableviewer/treeview/TableTreeView.java delete mode 100644 networktables/NetworkTableViewerFX/build.xml delete mode 100644 networktables/NetworkTableViewerFX/lib/nblibraries.properties delete mode 100644 networktables/NetworkTableViewerFX/lib/networktables-desktop.jar delete mode 100644 networktables/NetworkTableViewerFX/manifest.mf delete mode 100644 networktables/NetworkTableViewerFX/nbproject/build-impl.xml delete mode 100644 networktables/NetworkTableViewerFX/nbproject/configs/Run_as_WebStart.properties delete mode 100644 networktables/NetworkTableViewerFX/nbproject/configs/Run_in_Browser.properties delete mode 100644 networktables/NetworkTableViewerFX/nbproject/genfiles.properties delete mode 100644 networktables/NetworkTableViewerFX/nbproject/jfx-impl.xml delete mode 100644 networktables/NetworkTableViewerFX/nbproject/private/configs/Run_as_WebStart.properties delete mode 100644 networktables/NetworkTableViewerFX/nbproject/private/configs/Run_in_Browser.properties delete mode 100644 networktables/NetworkTableViewerFX/nbproject/private/private.properties delete mode 100644 networktables/NetworkTableViewerFX/nbproject/private/private.xml delete mode 100644 networktables/NetworkTableViewerFX/nbproject/project.properties delete mode 100644 networktables/NetworkTableViewerFX/nbproject/project.xml delete mode 100644 networktables/NetworkTableViewerFX/src.zip delete mode 100644 networktables/NetworkTableViewerFX/src/edu/wpi/first/tableviewer/EntryData.java delete mode 100644 networktables/NetworkTableViewerFX/src/edu/wpi/first/tableviewer/NetworkTableViewer.java delete mode 100644 networktables/NetworkTableViewerFX/src/edu/wpi/first/tableviewer/popup/AddValuePopup.java delete mode 100644 networktables/NetworkTableViewerFX/src/edu/wpi/first/tableviewer/popup/EditorPopup.java delete mode 100644 networktables/NetworkTableViewerFX/src/edu/wpi/first/tableviewer/popup/ErrorDialog.fxml delete mode 100644 networktables/NetworkTableViewerFX/src/edu/wpi/first/tableviewer/popup/IPopup.java delete mode 100644 networktables/NetworkTableViewerFX/src/edu/wpi/first/tableviewer/popup/Popup.java delete mode 100644 networktables/NetworkTableViewerFX/src/edu/wpi/first/tableviewer/popup/PopupFactory.java delete mode 100644 networktables/NetworkTableViewerFX/src/edu/wpi/first/tableviewer/popup/PreferencesDialog.css delete mode 100644 networktables/NetworkTableViewerFX/src/edu/wpi/first/tableviewer/popup/PreferencesDialog.fxml delete mode 100644 networktables/NetworkTableViewerFX/src/edu/wpi/first/tableviewer/popup/PreferencesDialog.java delete mode 100644 networktables/NetworkTableViewerFX/src/edu/wpi/first/tableviewer/stylesheets/PopupCSS.css delete mode 100644 networktables/NetworkTableViewerFX/src/edu/wpi/first/tableviewer/stylesheets/ViewerStyleSheet.css delete mode 100644 networktables/NetworkTableViewerFX/src/edu/wpi/first/tableviewer/tableview/EntryData.java delete mode 100644 networktables/NetworkTableViewerFX/src/edu/wpi/first/tableviewer/tableview/TableTableView.java delete mode 100644 networktables/NetworkTableViewerFX/src/edu/wpi/first/tableviewer/tableview/TableViewFXML.fxml delete mode 100644 networktables/NetworkTableViewerFX/src/edu/wpi/first/tableviewer/tableview/TableViewFXMLController.java delete mode 100644 networktables/NetworkTableViewerFX/src/edu/wpi/first/tableviewer/treeview/ITableItem.java delete mode 100644 networktables/NetworkTableViewerFX/src/edu/wpi/first/tableviewer/treeview/TableBranch.java delete mode 100644 networktables/NetworkTableViewerFX/src/edu/wpi/first/tableviewer/treeview/TableCell.java delete mode 100644 networktables/NetworkTableViewerFX/src/edu/wpi/first/tableviewer/treeview/TableLeaf.java delete mode 100644 networktables/NetworkTableViewerFX/src/edu/wpi/first/tableviewer/treeview/TableTreeView.java delete mode 100644 networktables/OutlineViewer/.hgignore delete mode 100644 networktables/OutlineViewer/build.gradle delete mode 100644 networktables/OutlineViewer/build.xml delete mode 100644 networktables/OutlineViewer/lib/nblibraries.properties delete mode 100644 networktables/OutlineViewer/lib/networktables-desktop.jar delete mode 100644 networktables/OutlineViewer/lib/org-netbeans-swing-outline.jar delete mode 100644 networktables/OutlineViewer/manifest.mf delete mode 100644 networktables/OutlineViewer/nbproject/build-impl.xml delete mode 100644 networktables/OutlineViewer/nbproject/genfiles.properties delete mode 100644 networktables/OutlineViewer/nbproject/project.properties delete mode 100644 networktables/OutlineViewer/nbproject/project.xml delete mode 100644 networktables/OutlineViewer/pom.xml delete mode 100644 networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/AbstractTreeNode.java delete mode 100644 networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/BranchNode.java delete mode 100644 networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/LeafNode.java delete mode 100644 networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/NetworkTableRowModel.java delete mode 100644 networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/OutlineFrame.java delete mode 100644 networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/TableEntryData.java delete mode 100644 networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/TableViewer.java delete mode 100644 networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/dialog/AbstractAddDialog.java delete mode 100644 networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/dialog/AddArrayDialog.form delete mode 100644 networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/dialog/AddArrayDialog.java delete mode 100644 networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/dialog/AddBooleanDialog.form delete mode 100644 networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/dialog/AddBooleanDialog.java delete mode 100644 networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/dialog/AddNumberDialog.form delete mode 100644 networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/dialog/AddNumberDialog.java delete mode 100644 networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/dialog/AddStringDialog.java delete mode 100644 networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/dialog/PreferencesDialog.form delete mode 100644 networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/dialog/PreferencesDialog.java delete mode 100644 networktables/README.org delete mode 100644 networktables/cpp/CMakeLists.txt delete mode 100644 networktables/cpp/build.gradle delete mode 100644 networktables/cpp/include/NTBase.h delete mode 100644 networktables/cpp/include/NTErrorBase.h delete mode 100644 networktables/cpp/include/OSAL/Synchronized.h delete mode 100644 networktables/cpp/include/networktables/NetworkTable.h delete mode 100644 networktables/cpp/include/networktables/NetworkTableConnectionListenerAdapter.h delete mode 100644 networktables/cpp/include/networktables/NetworkTableKeyListenerAdapter.h delete mode 100644 networktables/cpp/include/networktables/NetworkTableListenerAdapter.h delete mode 100644 networktables/cpp/include/networktables/NetworkTableMode.h delete mode 100644 networktables/cpp/include/networktables/NetworkTableProvider.h delete mode 100644 networktables/cpp/include/networktables/NetworkTableSubListenerAdapter.h delete mode 100644 networktables/cpp/include/networktables2/AbstractNetworkTableEntryStore.h delete mode 100644 networktables/cpp/include/networktables2/FlushableOutgoingEntryReceiver.h delete mode 100644 networktables/cpp/include/networktables2/IncomingEntryReceiver.h delete mode 100644 networktables/cpp/include/networktables2/NetworkTableEntry.h delete mode 100644 networktables/cpp/include/networktables2/NetworkTableMessageType.h delete mode 100644 networktables/cpp/include/networktables2/NetworkTableNode.h delete mode 100644 networktables/cpp/include/networktables2/OutgoingEntryReceiver.h delete mode 100644 networktables/cpp/include/networktables2/TableKeyExistsWithDifferentTypeException.h delete mode 100644 networktables/cpp/include/networktables2/TransactionDirtier.h delete mode 100644 networktables/cpp/include/networktables2/WriteManager.h delete mode 100644 networktables/cpp/include/networktables2/client/ClientConnectionAdapter.h delete mode 100644 networktables/cpp/include/networktables2/client/ClientConnectionListenerManager.h delete mode 100644 networktables/cpp/include/networktables2/client/ClientConnectionState.h delete mode 100644 networktables/cpp/include/networktables2/client/ClientNetworkTableEntryStore.h delete mode 100644 networktables/cpp/include/networktables2/client/NetworkTableClient.h delete mode 100644 networktables/cpp/include/networktables2/connection/BadMessageException.h delete mode 100644 networktables/cpp/include/networktables2/connection/ConnectionAdapter.h delete mode 100644 networktables/cpp/include/networktables2/connection/ConnectionMonitorThread.h delete mode 100644 networktables/cpp/include/networktables2/connection/DataIOStream.h delete mode 100644 networktables/cpp/include/networktables2/connection/NetworkTableConnection.h delete mode 100644 networktables/cpp/include/networktables2/server/NetworkTableServer.h delete mode 100644 networktables/cpp/include/networktables2/server/ServerAdapterManager.h delete mode 100644 networktables/cpp/include/networktables2/server/ServerConnectionAdapter.h delete mode 100644 networktables/cpp/include/networktables2/server/ServerConnectionList.h delete mode 100644 networktables/cpp/include/networktables2/server/ServerConnectionState.h delete mode 100644 networktables/cpp/include/networktables2/server/ServerIncomingConnectionListener.h delete mode 100644 networktables/cpp/include/networktables2/server/ServerIncomingStreamMonitor.h delete mode 100644 networktables/cpp/include/networktables2/server/ServerNetworkTableEntryStore.h delete mode 100644 networktables/cpp/include/networktables2/stream/FDIOStream.h delete mode 100644 networktables/cpp/include/networktables2/stream/IOStream.h delete mode 100644 networktables/cpp/include/networktables2/stream/IOStreamFactory.h delete mode 100644 networktables/cpp/include/networktables2/stream/IOStreamProvider.h delete mode 100644 networktables/cpp/include/networktables2/stream/SocketServerStreamProvider.h delete mode 100644 networktables/cpp/include/networktables2/stream/SocketStreamFactory.h delete mode 100644 networktables/cpp/include/networktables2/stream/SocketStreams.h delete mode 100644 networktables/cpp/include/networktables2/thread/DefaultThreadManager.h delete mode 100644 networktables/cpp/include/networktables2/thread/NTThread.h delete mode 100644 networktables/cpp/include/networktables2/thread/NTThreadManager.h delete mode 100644 networktables/cpp/include/networktables2/thread/PeriodicRunnable.h delete mode 100644 networktables/cpp/include/networktables2/type/ArrayData.h delete mode 100644 networktables/cpp/include/networktables2/type/ArrayEntryType.h delete mode 100644 networktables/cpp/include/networktables2/type/BooleanArray.h delete mode 100644 networktables/cpp/include/networktables2/type/ComplexData.h delete mode 100644 networktables/cpp/include/networktables2/type/ComplexEntryType.h delete mode 100644 networktables/cpp/include/networktables2/type/DefaultEntryTypes.h delete mode 100644 networktables/cpp/include/networktables2/type/NetworkTableEntryType.h delete mode 100644 networktables/cpp/include/networktables2/type/NetworkTableEntryTypeManager.h delete mode 100644 networktables/cpp/include/networktables2/type/NumberArray.h delete mode 100644 networktables/cpp/include/networktables2/type/StringArray.h delete mode 100644 networktables/cpp/include/networktables2/util/EOFException.h delete mode 100644 networktables/cpp/include/networktables2/util/IOException.h delete mode 100644 networktables/cpp/include/networktables2/util/IllegalStateException.h delete mode 100644 networktables/cpp/include/networktables2/util/StringCache.h delete mode 100644 networktables/cpp/include/networktables2/util/System.h delete mode 100644 networktables/cpp/include/tables/IRemote.h delete mode 100644 networktables/cpp/include/tables/IRemoteConnectionListener.h delete mode 100644 networktables/cpp/include/tables/ITable.h delete mode 100644 networktables/cpp/include/tables/ITableListener.h delete mode 100644 networktables/cpp/include/tables/ITableProvider.h delete mode 100644 networktables/cpp/include/tables/TableKeyNotDefinedException.h delete mode 100644 networktables/cpp/lib/Athena/OSAL/Synchronized.cpp delete mode 100644 networktables/cpp/lib/Athena/OSAL/System.cpp delete mode 100644 networktables/cpp/lib/Athena/networktables2/stream/FDIOStream.cpp delete mode 100644 networktables/cpp/lib/Athena/networktables2/stream/SocketServerStreamProvider.cpp delete mode 100644 networktables/cpp/lib/Athena/networktables2/stream/SocketStreamFactory.cpp delete mode 100644 networktables/cpp/lib/Athena/networktables2/stream/SocketStreams.cpp delete mode 100644 networktables/cpp/lib/Athena/networktables2/thread/DefaultThreadManager.cpp delete mode 100644 networktables/cpp/lib/Desktop/pom.xml delete mode 100644 networktables/cpp/lib/Desktop/src/test/ant/ant/cpptasks.jar delete mode 100644 networktables/cpp/lib/Desktop/src/test/ant/build.properties delete mode 100644 networktables/cpp/lib/Desktop/src/test/ant/build.xml delete mode 100644 networktables/cpp/lib/Desktop/src/test/ant/test.xml delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/broken-tests/ConnectionListTests.cpp delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/broken-tests/include/mocks/networktables2/MockNetworkTableEntry.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/broken-tests/include/mocks/networktables2/MockOutgoingEntryReceiver.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/broken-tests/tests/networktables2/util/UStringTest.cpp delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/desktop-test/include/ByteArrayIOStream.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/desktop-test/include/TesterTemplate.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/desktop-test/include/mocks/networktables2/IOStreamProviderMock.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/desktop-test/include/mocks/networktables2/MockServerConnectionAdapter.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/desktop-test/include/mocks/networktables2/NTThreadManagerMock.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/desktop-test/include/mocks/networktables2/NTThreadMock.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/desktop-test/include/mocks/networktables2/NetworkTableEntry.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/desktop-test/tests/ByteArrayIOStream.cpp delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/desktop-test/tests/networktables2/server/ServerTest.cpp delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/desktop-test/tests/networktables2/type/EntryTypeTest.cpp delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/CHANGES delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/CMakeLists.txt delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/CONTRIBUTORS delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/COPYING delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/Makefile.am delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/Makefile.in delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/README delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/aclocal.m4 delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/build-aux/config.guess delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/build-aux/config.h.in delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/build-aux/config.sub delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/build-aux/depcomp delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/build-aux/install-sh delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/build-aux/ltmain.sh delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/build-aux/missing delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/configure delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/configure.ac delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/fused-src/gmock-gtest-all.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/fused-src/gmock/gmock.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/fused-src/gmock_main.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/fused-src/gtest/gtest.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/CHANGES delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/CMakeLists.txt delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/CONTRIBUTORS delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/COPYING delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/Makefile.am delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/Makefile.in delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/README delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/aclocal.m4 delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/build-aux/config.guess delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/build-aux/config.h.in delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/build-aux/config.sub delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/build-aux/depcomp delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/build-aux/install-sh delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/build-aux/ltmain.sh delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/build-aux/missing delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/cmake/internal_utils.cmake delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/codegear/gtest.cbproj delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/codegear/gtest.groupproj delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/codegear/gtest_all.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/codegear/gtest_link.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/codegear/gtest_main.cbproj delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/codegear/gtest_unittest.cbproj delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/configure delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/configure.ac delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/fused-src/gtest/gtest-all.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/fused-src/gtest/gtest.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/fused-src/gtest/gtest_main.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/include/gtest/gtest-death-test.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/include/gtest/gtest-message.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/include/gtest/gtest-param-test.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/include/gtest/gtest-param-test.h.pump delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/include/gtest/gtest-printers.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/include/gtest/gtest-spi.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/include/gtest/gtest-test-part.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/include/gtest/gtest.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/include/gtest/gtest_pred_impl.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/include/gtest/internal/gtest-death-test-internal.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/include/gtest/internal/gtest-filepath.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/include/gtest/internal/gtest-internal.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/include/gtest/internal/gtest-linked_ptr.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/include/gtest/internal/gtest-param-util-generated.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/include/gtest/internal/gtest-param-util-generated.h.pump delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/include/gtest/internal/gtest-param-util.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/include/gtest/internal/gtest-port.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/include/gtest/internal/gtest-string.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/include/gtest/internal/gtest-tuple.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/include/gtest/internal/gtest-tuple.h.pump delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/include/gtest/internal/gtest-type-util.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/include/gtest/internal/gtest-type-util.h.pump delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/m4/acx_pthread.m4 delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/m4/gtest.m4 delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/m4/libtool.m4 delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/m4/ltoptions.m4 delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/m4/ltsugar.m4 delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/m4/ltversion.m4 delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/m4/lt~obsolete.m4 delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/make/Makefile delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/msvc/gtest-md.sln delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/msvc/gtest-md.vcproj delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/msvc/gtest.sln delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/msvc/gtest.vcproj delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/msvc/gtest_main-md.vcproj delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/msvc/gtest_main.vcproj delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/msvc/gtest_prod_test-md.vcproj delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/msvc/gtest_prod_test.vcproj delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/msvc/gtest_unittest-md.vcproj delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/msvc/gtest_unittest.vcproj delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/samples/prime_tables.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/samples/sample1.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/samples/sample1.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/samples/sample10_unittest.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/samples/sample1_unittest.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/samples/sample2.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/samples/sample2.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/samples/sample2_unittest.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/samples/sample3-inl.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/samples/sample3_unittest.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/samples/sample4.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/samples/sample4.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/samples/sample4_unittest.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/samples/sample5_unittest.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/samples/sample6_unittest.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/samples/sample7_unittest.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/samples/sample8_unittest.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/samples/sample9_unittest.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/scripts/fuse_gtest_files.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/scripts/gen_gtest_pred_impl.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/scripts/gtest-config.in delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/scripts/pump.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/scripts/test/Makefile delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/src/gtest-death-test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/src/gtest-filepath.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/src/gtest-internal-inl.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/src/gtest-port.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/src/gtest-printers.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/src/gtest-test-part.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/src/gtest-typed-test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/src/gtest.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/src/gtest_main.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest-death-test_ex_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest-death-test_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest-filepath_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest-linked_ptr_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest-listener_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest-message_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest-options_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest-param-test2_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest-param-test_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest-param-test_test.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest-port_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest-printers_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest-test-part_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest-tuple_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest-typed-test2_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest-typed-test_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest-typed-test_test.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest-unittest-api_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_all_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_break_on_failure_unittest.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_break_on_failure_unittest_.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_catch_exceptions_test.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_catch_exceptions_test_.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_color_test.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_color_test_.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_env_var_test.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_env_var_test_.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_environment_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_filter_unittest.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_filter_unittest_.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_help_test.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_help_test_.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_list_tests_unittest.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_list_tests_unittest_.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_main_unittest.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_no_test_unittest.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_output_test.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_output_test_.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_output_test_golden_lin.txt delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_pred_impl_unittest.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_prod_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_repeat_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_shuffle_test.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_shuffle_test_.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_sole_header_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_stress_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_test_utils.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_throw_on_failure_ex_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_throw_on_failure_test.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_throw_on_failure_test_.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_uninitialized_test.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_uninitialized_test_.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_unittest.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_xml_outfile1_test_.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_xml_outfile2_test_.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_xml_outfiles_test.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_xml_output_unittest.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_xml_output_unittest_.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/gtest_xml_test_utils.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/production.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/test/production.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/xcode/Config/DebugProject.xcconfig delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/xcode/Config/FrameworkTarget.xcconfig delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/xcode/Config/General.xcconfig delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/xcode/Config/ReleaseProject.xcconfig delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/xcode/Config/StaticLibraryTarget.xcconfig delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/xcode/Config/TestTarget.xcconfig delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/xcode/Resources/Info.plist delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/xcode/Samples/FrameworkSample/Info.plist delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/xcode/Samples/FrameworkSample/WidgetFramework.xcodeproj/project.pbxproj delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/xcode/Samples/FrameworkSample/runtests.sh delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/xcode/Samples/FrameworkSample/widget.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/xcode/Samples/FrameworkSample/widget.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/xcode/Samples/FrameworkSample/widget_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/xcode/Scripts/runtests.sh delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/xcode/Scripts/versiongenerate.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/gtest/xcode/gtest.xcodeproj/project.pbxproj delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/include/gmock/gmock-actions.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/include/gmock/gmock-cardinalities.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/include/gmock/gmock-generated-actions.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/include/gmock/gmock-generated-actions.h.pump delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/include/gmock/gmock-generated-function-mockers.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/include/gmock/gmock-generated-function-mockers.h.pump delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/include/gmock/gmock-generated-matchers.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/include/gmock/gmock-generated-matchers.h.pump delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/include/gmock/gmock-generated-nice-strict.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/include/gmock/gmock-generated-nice-strict.h.pump delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/include/gmock/gmock-matchers.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/include/gmock/gmock-more-actions.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/include/gmock/gmock-spec-builders.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/include/gmock/gmock.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/include/gmock/internal/gmock-generated-internal-utils.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/include/gmock/internal/gmock-generated-internal-utils.h.pump delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/include/gmock/internal/gmock-internal-utils.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/include/gmock/internal/gmock-port.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/make/Makefile delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/msvc/2005/gmock.sln delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/msvc/2005/gmock.vcproj delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/msvc/2005/gmock_config.vsprops delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/msvc/2005/gmock_main.vcproj delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/msvc/2005/gmock_test.vcproj delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/msvc/2010/gmock.sln delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/msvc/2010/gmock.vcxproj delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/msvc/2010/gmock_config.props delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/msvc/2010/gmock_main.vcxproj delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/msvc/2010/gmock_test.vcxproj delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/scripts/fuse_gmock_files.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/scripts/generator/COPYING delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/scripts/generator/README delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/scripts/generator/README.cppclean delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/scripts/generator/cpp/__init__.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/scripts/generator/cpp/ast.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/scripts/generator/cpp/gmock_class.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/scripts/generator/cpp/keywords.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/scripts/generator/cpp/tokenize.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/scripts/generator/cpp/utils.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/scripts/generator/gmock_gen.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/scripts/gmock-config.in delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/src/gmock-all.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/src/gmock-cardinalities.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/src/gmock-internal-utils.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/src/gmock-matchers.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/src/gmock-spec-builders.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/src/gmock.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/src/gmock_main.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/test/gmock-actions_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/test/gmock-cardinalities_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/test/gmock-generated-actions_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/test/gmock-generated-function-mockers_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/test/gmock-generated-internal-utils_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/test/gmock-generated-matchers_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/test/gmock-internal-utils_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/test/gmock-matchers_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/test/gmock-more-actions_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/test/gmock-nice-strict_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/test/gmock-port_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/test/gmock-spec-builders_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/test/gmock_all_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/test/gmock_leak_test.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/test/gmock_leak_test_.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/test/gmock_link2_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/test/gmock_link_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/test/gmock_link_test.h delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/test/gmock_output_test.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/test/gmock_output_test_.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/test/gmock_output_test_golden.txt delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/test/gmock_test.cc delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0/test/gmock_test_utils.py delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/test-client/test-client.cpp delete mode 100644 networktables/cpp/lib/Desktop/src/test/native/test-server/test-server.cpp delete mode 100644 networktables/cpp/lib/Win32/src/main/native/OSAL/Synchronized.cpp delete mode 100644 networktables/cpp/lib/Win32/src/main/native/OSAL/System.cpp delete mode 100644 networktables/cpp/lib/Win32/src/main/native/networktables2/stream/FDIOStream.cpp delete mode 100644 networktables/cpp/lib/Win32/src/main/native/networktables2/stream/SocketServerStreamProvider.cpp delete mode 100644 networktables/cpp/lib/Win32/src/main/native/networktables2/stream/SocketStreamFactory.cpp delete mode 100644 networktables/cpp/lib/Win32/src/main/native/networktables2/stream/SocketStreams.cpp delete mode 100644 networktables/cpp/lib/Win32/src/main/native/networktables2/thread/DefaultThreadManager.cpp delete mode 100644 networktables/cpp/lib/share/networktables/NetworkTable.cpp delete mode 100644 networktables/cpp/lib/share/networktables/NetworkTableConnectionListenerAdapter.cpp delete mode 100644 networktables/cpp/lib/share/networktables/NetworkTableKeyListenerAdapter.cpp delete mode 100644 networktables/cpp/lib/share/networktables/NetworkTableListenerAdapter.cpp delete mode 100644 networktables/cpp/lib/share/networktables/NetworkTableMode.cpp delete mode 100644 networktables/cpp/lib/share/networktables/NetworkTableProvider.cpp delete mode 100644 networktables/cpp/lib/share/networktables/NetworkTableSubListenerAdapter.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/AbstractNetworkTableEntryStore.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/NetworkTableEntry.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/NetworkTableNode.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/OutgoingEntryReciever.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/TableKeyExistsWithDifferentTypeException.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/TransactionDirtier.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/WriteManager.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/client/ClientConnectionAdapter.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/client/ClientConnectionState.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/client/ClientNetworkTableEntryStore.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/client/NetworkTableClient.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/connection/BadMessageException.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/connection/ConnectionMonitorThread.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/connection/DataIOStream.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/connection/NetworkTableConnection.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/server/NetworkTableServer.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/server/ServerConnectionAdapter.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/server/ServerConnectionList.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/server/ServerConnectionState.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/server/ServerIncomingStreamMonitor.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/server/ServerNetworkTableEntryStore.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/type/ArrayData.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/type/ArrayEntryType.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/type/BooleanArray.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/type/ComplexData.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/type/ComplexEntryType.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/type/DefaultEntryTypes.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/type/NetworkTableEntryType.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/type/NetworkTableEntryTypeManager.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/type/NumberArray.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/type/StringArray.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/util/EOFException.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/util/IOException.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/util/IllegalStateException.cpp delete mode 100644 networktables/cpp/lib/share/networktables2/util/StringCache.cpp delete mode 100644 networktables/cpp/lib/share/tables/TableKeyNotDefinedException.cpp delete mode 100644 networktables/java-table-viewer/.classpath delete mode 100644 networktables/java-table-viewer/.project delete mode 100644 networktables/java-table-viewer/build.gradle delete mode 100644 networktables/java-table-viewer/build.xml delete mode 100644 networktables/java-table-viewer/lib/CopyLibs/org-netbeans-modules-java-j2seproject-copylibstask.jar delete mode 100644 networktables/java-table-viewer/lib/nblibraries.properties delete mode 100644 networktables/java-table-viewer/lib/networktables-desktop.jar delete mode 100644 networktables/java-table-viewer/manifest.mf delete mode 100644 networktables/java-table-viewer/nbbuild.xml delete mode 100644 networktables/java-table-viewer/nbproject/build-impl.xml delete mode 100644 networktables/java-table-viewer/nbproject/genfiles.properties delete mode 100644 networktables/java-table-viewer/nbproject/project.properties delete mode 100644 networktables/java-table-viewer/nbproject/project.xml delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/ConstantPutTest.java delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/DefaultNetworkTablesValueRenderer.java delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/NetworkTableTableModel.java delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/TableViewer.java delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/TableViewerFrame.java delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/TableViewerModePrompt.java delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/TestClient.java delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/TestServer.java delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/TestTableServer.java delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/dialog/AddArrayDialog.form delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/dialog/AddArrayDialog.java delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/dialog/AddBooleanDialog.form delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/dialog/AddBooleanDialog.java delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/dialog/AddNumberDialog.form delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/dialog/AddNumberDialog.java delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/dialog/AddStringDialog.java delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/dialog/EditBooleanDialog.form delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/dialog/EditBooleanDialog.java delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/dialog/EditNumberDialog.form delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/dialog/EditNumberDialog.java delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/dialog/EditStringDialog.java delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/dialog/IAddValueDialog.java delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/tree/BranchNode.java delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/tree/ITableNode.java delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/tree/LeafNode.java delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/tree/NetworkTableTree.java delete mode 100644 networktables/java-table-viewer/src/edu/wpi/first/table_viewer/tree/TableEntryData.java delete mode 100644 networktables/java/Athena/pom.xml delete mode 100644 networktables/java/NetworkTablesTransactionFlow.pdf delete mode 100644 networktables/java/README.txt delete mode 100644 networktables/java/build.gradle delete mode 100644 networktables/java/eclipse_project/.classpath delete mode 100644 networktables/java/eclipse_project/.project delete mode 100644 networktables/java/nbproject/project.xml delete mode 100644 networktables/java/pom.xml delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables/NetworkTable.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables/NetworkTableConnectionListenerAdapter.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables/NetworkTableKeyListenerAdapter.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables/NetworkTableKeyNotDefined.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables/NetworkTableListenerAdapter.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables/NetworkTableMode.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables/NetworkTableProvider.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables/NetworkTableSubListenerAdapter.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/AbstractNetworkTableEntryStore.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/FlushableOutgoingEntryReceiver.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/IncomingEntryReceiver.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/NetworkTableEntry.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/NetworkTableMessageType.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/NetworkTableNode.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/OutgoingEntryReceiver.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/TableKeyExistsWithDifferentTypeException.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/TransactionDirtier.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/WriteManager.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/client/ClientConnectionAdapter.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/client/ClientConnectionListenerManager.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/client/ClientConnectionState.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/client/ClientNetworkTableEntryStore.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/client/NetworkTableClient.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/connection/BadMessageException.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/connection/ConnectionAdapter.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/connection/ConnectionMonitorThread.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/connection/NetworkTableConnection.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/server/NetworkTableServer.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/server/ServerAdapterManager.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/server/ServerConnectionAdapter.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/server/ServerConnectionList.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/server/ServerConnectionState.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/server/ServerIncomingConnectionListener.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/server/ServerIncomingStreamMonitor.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/server/ServerNetworkTableEntryStore.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/stream/IOStream.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/stream/IOStreamFactory.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/stream/IOStreamProvider.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/stream/SimpleIOStream.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/stream/SocketServerStreamProvider.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/stream/SocketStream.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/stream/SocketStreamFactory.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/stream/SocketStreams.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/thread/DefaultThreadManager.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/thread/NTThread.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/thread/NTThreadManager.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/thread/PeriodicRunnable.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/type/ArrayData.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/type/ArrayEntryType.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/type/BooleanArray.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/type/ComplexData.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/type/ComplexEntryType.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/type/DefaultEntryTypes.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/type/NetworkTableEntryType.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/type/NetworkTableEntryTypeManager.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/type/NumberArray.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/type/StringArray.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/util/ByteArrayMap.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/util/CharacterArrayMap.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/util/HalfQueue.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/util/List.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/util/ResizeableArrayObject.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/util/Set.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/util/Stack.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/networktables2/util/StringCache.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/tables/IRemote.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/tables/IRemoteConnectionListener.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/tables/ITable.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/tables/ITableListener.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/tables/ITableProvider.java delete mode 100644 networktables/java/src/main/java/edu/wpi/first/wpilibj/tables/TableKeyNotDefinedException.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables/NetworkTableListenerTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables/NetworkTableTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables2/NetworkTableEntryTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables2/TransactionDirtierTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables2/client/ClientConnectionAdapterTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables2/client/ClientConnectionManagementTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables2/client/ClientNetworkTableEntryStoreTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables2/client/ClientTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables2/connection/BadMessageExceptionTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables2/connection/ConnectionMonitorThreadTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables2/connection/NetworkTableConnectionEntryAssignmentTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables2/connection/NetworkTableConnectionEntryUpdateTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables2/connection/NetworkTableConnectionTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables2/server/ConnectionListTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables2/server/ServerConnectionAdapterTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables2/server/ServerIncomingMonitorTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables2/server/ServerTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables2/server/ServerWriteManagerTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables2/stream/SimpleIOStreamTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables2/stream/SocketTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables2/system/SystemTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables2/thread/DefaultThreadManagerTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables2/type/ArrayTypeTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables2/type/ComplexTypeTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables2/type/EntryTypeTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables2/util/ListTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/networktables2/util/StackTest.java delete mode 100644 networktables/java/src/test/java/edu/wpi/first/wpilibj/tables/TableKeyNotDefinedExceptionTest.java delete mode 100644 networktables/java/src/test/java/test/util/ByteArrayStream.java delete mode 100644 networktables/java/src/test/java/test/util/LoggingOutputStream.java delete mode 100644 networktables/java/src/test/java/test/util/NetworkTableEntryUtil.java delete mode 100644 networktables/java/src/test/java/test/util/NetworkTableTestNode.java delete mode 100644 networktables/java/src/test/java/test/util/StreamPipeProvider.java delete mode 100644 networktables/java/src/test/java/test/util/TestExecutor.java delete mode 100644 networktables/java/src/test/java/test/util/TestServerConnectionProvider.java delete mode 100644 networktables/java/src/test/java/test/util/TestThreadManager.java delete mode 160000 networktables/ntcore delete mode 100644 networktables/pom.xml delete mode 100644 pom.xml delete mode 100644 styleguide/cppguide.html delete mode 100644 styleguide/eclipse-cpp-google-style.xml delete mode 100644 styleguide/eclipse-java-google-style.xml delete mode 100644 styleguide/include/link.png delete mode 100644 styleguide/include/styleguide.css delete mode 100644 styleguide/include/styleguide.js delete mode 100644 styleguide/javaguide.css delete mode 100644 styleguide/javaguide.html delete mode 100644 styleguide/javaguidelink.png delete mode 100644 styleguide/styleguide.css delete mode 100644 styleguide/styleguide.xsl mode change 100755 => 100644 test-scripts/config.sh mode change 100755 => 100644 test-scripts/deploy-and-run-test-on-robot.sh mode change 100755 => 100644 test-scripts/jenkins-run-tests-get-results.sh mode change 100755 => 100644 test-scripts/run-tests-on-robot.sh mode change 100755 => 100644 test-scripts/spawn_driver_station.sh rename wpilibc/{wpilibC++Devices => Athena}/include/ADXL345_I2C.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/ADXL345_SPI.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/AnalogAccelerometer.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/AnalogGyro.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/AnalogInput.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/AnalogOutput.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/AnalogPotentiometer.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/AnalogTrigger.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/AnalogTriggerOutput.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/BuiltInAccelerometer.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/CAN/can_proto.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/CANJaguar.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/CANSpeedController.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/CANTalon.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/CameraServer.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/Compressor.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/ControllerPower.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/Counter.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/CounterBase.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/DigitalInput.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/DigitalOutput.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/DigitalSource.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/DoubleSolenoid.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/DriverStation.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/Encoder.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/GearTooth.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/GyroBase.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/I2C.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/Internal/HardwareHLReporting.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/InterruptableSensorBase.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/IterativeRobot.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/Jaguar.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/Joystick.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/MotorSafety.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/MotorSafetyHelper.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/NIIMAQdx.h (98%) rename wpilibc/{wpilibC++Devices => Athena}/include/NetworkCommunication/AICalibration.h (95%) rename wpilibc/{wpilibC++Devices => Athena}/include/NetworkCommunication/CANInterfacePlugin.h (97%) rename wpilibc/{wpilibC++Devices => Athena}/include/NetworkCommunication/CANSessionMux.h (97%) rename wpilibc/{wpilibC++Sim => Athena}/include/NetworkCommunication/FRCComm.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/NetworkCommunication/LoadOut.h (96%) rename wpilibc/{wpilibC++Devices => Athena}/include/NetworkCommunication/UsageReporting.h (96%) rename wpilibc/{wpilibC++Devices => Athena}/include/NetworkCommunication/symModuleLink.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/PWM.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/PowerDistributionPanel.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/Preferences.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/Relay.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/RobotBase.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/RobotDrive.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/SPI.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/SafePWM.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/SampleRobot.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/SerialPort.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/Servo.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/Solenoid.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/SolenoidBase.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/SpeedController.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/Talon.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/TalonSRX.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/USBCamera.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/Ultrasonic.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/Victor.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/VictorSP.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/Vision/AxisCamera.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/Vision/BaeUtilities.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/Vision/BinaryImage.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/Vision/ColorImage.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/Vision/FrcError.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/Vision/HSLImage.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/Vision/ImageBase.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/Vision/MonoImage.h (97%) rename wpilibc/{wpilibC++Devices => Athena}/include/Vision/RGBImage.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/Vision/Threshold.h (97%) rename wpilibc/{wpilibC++Devices => Athena}/include/Vision/VisionAPI.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/WPILib.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/nivision.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/include/pcre.h (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/ADXL345_I2C.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/ADXL345_SPI.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/AnalogAccelerometer.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/AnalogGyro.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/AnalogInput.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/AnalogOutput.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/AnalogPotentiometer.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/AnalogTrigger.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/AnalogTriggerOutput.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/BuiltInAccelerometer.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/CANJaguar.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/CANTalon.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/CameraServer.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Compressor.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/ControllerPower.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Counter.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/DigitalInput.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/DigitalOutput.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/DoubleSolenoid.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/DriverStation.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Encoder.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/GearTooth.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/GyroBase.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/I2C.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Internal/HardwareHLReporting.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/InterruptableSensorBase.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/IterativeRobot.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Jaguar.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Joystick.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/MotorSafetyHelper.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Notifier.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/PIDController.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/PWM.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/PowerDistributionPanel.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Preferences.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Relay.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/RobotBase.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/RobotDrive.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/SPI.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/SafePWM.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/SampleRobot.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/SensorBase.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/SerialPort.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Servo.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Solenoid.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/SolenoidBase.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Talon.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/TalonSRX.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Task.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Timer.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/USBCamera.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Ultrasonic.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Utility.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Victor.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/VictorSP.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Vision/AxisCamera.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Vision/BaeUtilities.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Vision/BinaryImage.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Vision/ColorImage.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Vision/FrcError.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Vision/HSLImage.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Vision/ImageBase.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Vision/MonoImage.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Vision/RGBImage.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Vision/Threshold.cpp (100%) rename wpilibc/{wpilibC++Devices => Athena}/src/Vision/VisionAPI.cpp (100%) create mode 100644 wpilibc/athena.gradle delete mode 100644 wpilibc/cpp.doxy rename wpilibc/{wpilibC++ => shared}/include/Base.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Buttons/Button.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Buttons/ButtonScheduler.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Buttons/CancelButtonScheduler.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Buttons/HeldButtonScheduler.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Buttons/InternalButton.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Buttons/JoystickButton.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Buttons/NetworkButton.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Buttons/PressedButtonScheduler.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Buttons/ReleasedButtonScheduler.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Buttons/ToggleButtonScheduler.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Buttons/Trigger.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Commands/Command.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Commands/CommandGroup.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Commands/CommandGroupEntry.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Commands/PIDCommand.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Commands/PIDSubsystem.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Commands/PrintCommand.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Commands/Scheduler.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Commands/StartCommand.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Commands/Subsystem.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Commands/WaitCommand.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Commands/WaitForChildren.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Commands/WaitUntilCommand.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Controller.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Error.h (100%) rename wpilibc/{wpilibC++ => shared}/include/ErrorBase.h (100%) rename wpilibc/{wpilibC++ => shared}/include/GenericHID.h (100%) rename wpilibc/{wpilibC++ => shared}/include/HLUsageReporting.h (100%) rename wpilibc/{wpilibC++ => shared}/include/LiveWindow/LiveWindow.h (100%) rename wpilibc/{wpilibC++ => shared}/include/LiveWindow/LiveWindowSendable.h (100%) rename wpilibc/{wpilibC++ => shared}/include/LiveWindow/LiveWindowStatusListener.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Notifier.h (100%) rename wpilibc/{wpilibC++ => shared}/include/PIDController.h (100%) rename wpilibc/{wpilibC++ => shared}/include/PIDInterface.h (100%) rename wpilibc/{wpilibC++ => shared}/include/PIDOutput.h (100%) rename wpilibc/{wpilibC++ => shared}/include/PIDSource.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Resource.h (100%) rename wpilibc/{wpilibC++ => shared}/include/RobotState.h (100%) rename wpilibc/{wpilibC++ => shared}/include/SensorBase.h (100%) rename wpilibc/{wpilibC++ => shared}/include/SmartDashboard/NamedSendable.h (100%) rename wpilibc/{wpilibC++ => shared}/include/SmartDashboard/Sendable.h (100%) rename wpilibc/{wpilibC++ => shared}/include/SmartDashboard/SendableChooser.h (100%) rename wpilibc/{wpilibC++ => shared}/include/SmartDashboard/SmartDashboard.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Task.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Task.inc (100%) rename wpilibc/{wpilibC++ => shared}/include/Timer.h (100%) rename wpilibc/{wpilibC++ => shared}/include/Utility.h (100%) rename wpilibc/{wpilibC++ => shared}/include/WPIErrors.h (100%) rename wpilibc/{wpilibC++ => shared}/include/interfaces/Accelerometer.h (100%) rename wpilibc/{wpilibC++ => shared}/include/interfaces/Gyro.h (100%) rename wpilibc/{wpilibC++ => shared}/include/interfaces/Potentiometer.h (100%) rename wpilibc/{wpilibC++ => shared}/src/Buttons/Button.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/Buttons/ButtonScheduler.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/Buttons/CancelButtonScheduler.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/Buttons/HeldButtonScheduler.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/Buttons/InternalButton.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/Buttons/JoystickButton.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/Buttons/NetworkButton.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/Buttons/PressedButtonScheduler.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/Buttons/ReleasedButtonScheduler.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/Buttons/ToggleButtonScheduler.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/Buttons/Trigger.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/Commands/Command.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/Commands/CommandGroup.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/Commands/CommandGroupEntry.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/Commands/PIDCommand.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/Commands/PIDSubsystem.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/Commands/PrintCommand.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/Commands/Scheduler.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/Commands/StartCommand.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/Commands/Subsystem.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/Commands/WaitCommand.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/Commands/WaitForChildren.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/Commands/WaitUntilCommand.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/Error.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/ErrorBase.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/HLUsageReporting.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/LiveWindow/LiveWindow.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/LiveWindow/LiveWindowStatusListener.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/PIDSource.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/Resource.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/RobotState.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/SmartDashboard/SendableChooser.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/SmartDashboard/SmartDashboard.cpp (100%) rename wpilibc/{wpilibC++ => shared}/src/interfaces/Potentiometer.cpp (100%) create mode 100644 wpilibc/simulation.gradle rename wpilibc/{wpilibC++Sim => simulation}/.gitignore (100%) rename wpilibc/{wpilibC++Sim => simulation}/CMakeLists.txt (100%) rename wpilibc/{wpilibC++Sim => simulation}/README.md (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/AnalogInput.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/AnalogPotentiometer.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/Counter.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/CounterBase.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/DigitalInput.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/DoubleSolenoid.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/DriverStation.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/Encoder.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/Gyro.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/IterativeRobot.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/Jaguar.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/Joystick.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/MotorSafety.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/MotorSafetyHelper.h (100%) rename wpilibc/{wpilibC++Devices => simulation}/include/NetworkCommunication/FRCComm.h (97%) rename wpilibc/{wpilibC++Sim => simulation}/include/PWM.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/Relay.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/RobotBase.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/RobotDrive.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/SafePWM.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/SampleRobot.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/Solenoid.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/SpeedController.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/Talon.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/Victor.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/WPILib.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/simulation/MainNode.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/simulation/SimContinuousOutput.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/simulation/SimDigitalInput.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/simulation/SimEncoder.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/simulation/SimFloatInput.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/simulation/SimGyro.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/include/simulation/simTime.h (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/AnalogInput.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/AnalogPotentiometer.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/DigitalInput.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/DoubleSolenoid.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/DriverStation.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/Encoder.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/Gyro.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/IterativeRobot.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/Jaguar.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/Joystick.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/MotorSafetyHelper.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/Notifier.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/PIDController.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/PWM.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/Relay.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/RobotBase.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/RobotDrive.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/SafePWM.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/SampleRobot.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/SensorBase.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/Solenoid.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/Talon.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/Timer.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/Utility.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/Victor.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/simulation/SimContinuousOutput.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/simulation/SimDigitalInput.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/simulation/SimEncoder.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/simulation/SimFloatInput.cpp (100%) rename wpilibc/{wpilibC++Sim => simulation}/src/simulation/SimGyro.cpp (100%) delete mode 100644 wpilibc/wpilibC++/CMakeLists.txt delete mode 100644 wpilibc/wpilibC++Devices/CMakeLists.txt delete mode 100644 wpilibc/wpilibC++IntegrationTests/CMakeLists.txt delete mode 100644 wpilibc/wpilibC++IntegrationTests/src/gtest/include/gtest/gtest-typed-test.h delete mode 100644 wpilibc/wpilibC++IntegrationTests/src/gtest/include/gtest/gtest_prod.h delete mode 100644 wpilibc/wpilibC++IntegrationTests/src/gtest/src/gtest-all.cc delete mode 100644 wpilibc/wpilibC++Sim/pom.xml create mode 100644 wpilibcIntegrationTests/build.gradle rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/include/gtest/gtest-death-test.h (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/include/gtest/gtest-message.h (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/include/gtest/gtest-param-test.h (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/include/gtest/gtest-param-test.h.pump (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/include/gtest/gtest-printers.h (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/include/gtest/gtest-spi.h (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/include/gtest/gtest-test-part.h (100%) rename {networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0 => wpilibcIntegrationTests}/gtest/include/gtest/gtest-typed-test.h (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/include/gtest/gtest.h (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/include/gtest/gtest_pred_impl.h (100%) rename {networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0 => wpilibcIntegrationTests}/gtest/include/gtest/gtest_prod.h (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/include/gtest/internal/gtest-death-test-internal.h (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/include/gtest/internal/gtest-filepath.h (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/include/gtest/internal/gtest-internal.h (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/include/gtest/internal/gtest-linked_ptr.h (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/include/gtest/internal/gtest-param-util-generated.h (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/include/gtest/internal/gtest-param-util-generated.h.pump (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/include/gtest/internal/gtest-param-util.h (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/include/gtest/internal/gtest-port.h (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/include/gtest/internal/gtest-string.h (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/include/gtest/internal/gtest-tuple.h (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/include/gtest/internal/gtest-tuple.h.pump (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/include/gtest/internal/gtest-type-util.h (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/include/gtest/internal/gtest-type-util.h.pump (100%) rename {networktables/cpp/lib/Desktop/src/test/native/gmock-1.6.0 => wpilibcIntegrationTests}/gtest/src/gtest-all.cc (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/src/gtest-death-test.cc (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/src/gtest-filepath.cc (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/src/gtest-internal-inl.h (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/src/gtest-port.cc (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/src/gtest-printers.cc (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/src/gtest-test-part.cc (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/src/gtest-typed-test.cc (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/src/gtest.cc (100%) rename {wpilibc/wpilibC++IntegrationTests/src => wpilibcIntegrationTests}/gtest/src/gtest_main.cc (100%) rename {wpilibc/wpilibC++IntegrationTests => wpilibcIntegrationTests}/include/TestBench.h (100%) rename {wpilibc/wpilibC++IntegrationTests => wpilibcIntegrationTests}/include/command/MockCommand.h (100%) rename {wpilibc/wpilibC++IntegrationTests => wpilibcIntegrationTests}/src/AnalogLoopTest.cpp (100%) rename {wpilibc/wpilibC++IntegrationTests => wpilibcIntegrationTests}/src/AnalogPotentiometerTest.cpp (100%) rename {wpilibc/wpilibC++IntegrationTests => wpilibcIntegrationTests}/src/BuiltInAccelerometerTest.cpp (100%) rename {wpilibc/wpilibC++IntegrationTests => wpilibcIntegrationTests}/src/CANJaguarTest.cpp (100%) rename {wpilibc/wpilibC++IntegrationTests => wpilibcIntegrationTests}/src/CANTalonTest.cpp (100%) rename {wpilibc/wpilibC++IntegrationTests => wpilibcIntegrationTests}/src/ConditionVariableTest.cpp (100%) rename {wpilibc/wpilibC++IntegrationTests => wpilibcIntegrationTests}/src/CounterTest.cpp (100%) rename {wpilibc/wpilibC++IntegrationTests => wpilibcIntegrationTests}/src/DIOLoopTest.cpp (100%) rename {wpilibc/wpilibC++IntegrationTests => wpilibcIntegrationTests}/src/FakeEncoderTest.cpp (100%) rename {wpilibc/wpilibC++IntegrationTests => wpilibcIntegrationTests}/src/MotorEncoderTest.cpp (100%) rename {wpilibc/wpilibC++IntegrationTests => wpilibcIntegrationTests}/src/MotorInvertingTest.cpp (100%) rename {wpilibc/wpilibC++IntegrationTests => wpilibcIntegrationTests}/src/MutexTest.cpp (100%) rename {wpilibc/wpilibC++IntegrationTests => wpilibcIntegrationTests}/src/NotifierTest.cpp (100%) rename {wpilibc/wpilibC++IntegrationTests => wpilibcIntegrationTests}/src/PCMTest.cpp (100%) rename {wpilibc/wpilibC++IntegrationTests => wpilibcIntegrationTests}/src/PowerDistributionPanelTest.cpp (100%) rename {wpilibc/wpilibC++IntegrationTests => wpilibcIntegrationTests}/src/PreferencesTest.cpp (100%) rename {wpilibc/wpilibC++IntegrationTests => wpilibcIntegrationTests}/src/RelayTest.cpp (100%) rename {wpilibc/wpilibC++IntegrationTests => wpilibcIntegrationTests}/src/TestEnvironment.cpp (100%) rename {wpilibc/wpilibC++IntegrationTests => wpilibcIntegrationTests}/src/TiltPanCameraTest.cpp (100%) rename {wpilibc/wpilibC++IntegrationTests => wpilibcIntegrationTests}/src/TimerTest.cpp (100%) rename {wpilibc/wpilibC++IntegrationTests => wpilibcIntegrationTests}/src/command/CommandTest.cpp (100%) rename {wpilibc/wpilibC++IntegrationTests => wpilibcIntegrationTests}/src/command/MockCommand.cpp (100%) create mode 100644 wpilibj/athena.gradle delete mode 100644 wpilibj/pom.xml delete mode 100644 wpilibj/scripts/javadoc_classgen.php create mode 100644 wpilibj/simulation.gradle rename {maven-utilities => wpilibj/src/athena/cpp}/.gitignore (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/include/JNI-LICENSE (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/include/NIIMAQdx.h (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/include/jni.h (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/include/linux/jni_md.h (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/include/nivision.h (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/lib/AccelerometerJNI.cpp (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/lib/AnalogJNI.cpp (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/lib/CANJNI.cpp (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/lib/CanTalonSRXJNI.cpp (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/lib/CompressorJNI.cpp (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/lib/CounterJNI.cpp (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/lib/DIOJNI.cpp (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/lib/EncoderJNI.cpp (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/lib/FRCNetworkCommunicationsLibrary.cpp (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/lib/HALUtil.cpp (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/lib/HALUtil.h (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/lib/I2CJNI.cpp (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/lib/InterruptJNI.cpp (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/lib/JNIWrapper.cpp (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/lib/NIVisionJNI.cpp (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/lib/NotifierJNI.cpp (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/lib/PDPJNI.cpp (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/lib/PWMJNI.cpp (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/lib/PowerJNI.cpp (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/lib/RelayJNI.cpp (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/lib/SPIJNI.cpp (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/lib/SerialPortJNI.cpp (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/lib/SolenoidJNI.cpp (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/nivision/dxattr.h (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/nivision/dxattr.ini (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/nivision/dxattr_funcs.txt (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/nivision/gen_java.py (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/nivision/gen_struct_sizer.py (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/nivision/generateJNI.sh (100%) mode change 100755 => 100644 rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/nivision/get_struct_size.py (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/nivision/imaqdx.ini (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/nivision/nivision_2011.ini (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/nivision/nivision_parse.py (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/swigTalon/CanTalonSRX.i (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/swigTalon/README (100%) rename wpilibj/{wpilibJavaJNI => src/athena/cpp}/swigTalon/generateJNI.sh (100%) mode change 100755 => 100644 rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/com/ni/vision/NIVision.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/com/ni/vision/VisionException.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/ADXL345_I2C.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/ADXL345_SPI.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/AccumulatorResult.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/AnalogAccelerometer.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/AnalogGyro.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/AnalogInput.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/AnalogOutput.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/AnalogPotentiometer.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/AnalogTrigger.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/AnalogTriggerOutput.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/BuiltInAccelerometer.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/CANJaguar.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/CANSpeedController.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/CANTalon.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/CameraServer.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/CanTalonSRX.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/Compressor.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/ControllerPower.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/Counter.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/CounterBase.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/CtreCanNode.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/DigitalInput.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/DigitalOutput.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/DigitalSource.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/DoubleSolenoid.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/DriverStation.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/Encoder.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/GearTooth.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/GyroBase.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/I2C.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/InterruptHandlerFunction.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/InterruptableSensorBase.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/IterativeRobot.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/Jaguar.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/Joystick.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/Notifier.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/PWM.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/PowerDistributionPanel.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/Preferences.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/Relay.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/Resource.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/RobotBase.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/RobotDrive.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/SPI.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/SWIGTYPE_p_CTR_Code.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/SWIGTYPE_p_UINT8.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/SWIGTYPE_p_double.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/SWIGTYPE_p_float.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/SWIGTYPE_p_int.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/SWIGTYPE_p_int32_t.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/SWIGTYPE_p_uint32_t.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/SWIGTYPE_p_uint8_t.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/SafePWM.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/SampleRobot.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/SensorBase.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/SerialPort.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/Servo.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/Solenoid.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/SolenoidBase.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/SpeedController.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/Talon.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/TalonSRX.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/Ultrasonic.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/Utility.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/Victor.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/VictorSP.java (100%) create mode 100644 wpilibj/src/athena/java/edu/wpi/first/wpilibj/can/CANExceptionFactory.java rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/can/CANInvalidBufferException.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/can/CANJNI.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/can/CANJaguarVersionException.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/can/CANMessageNotAllowedException.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/can/CANMessageNotFoundException.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/can/CANNotInitializedException.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/communication/FRCNetworkCommunicationsLibrary.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/communication/HALAllianceStationID.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/communication/HALControlWord.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/communication/NIRioStatus.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/communication/UsageReporting.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/hal/AccelerometerJNI.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/hal/AnalogJNI.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/hal/CanTalonJNI.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/hal/CompressorJNI.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/hal/CounterJNI.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/hal/DIOJNI.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/hal/EncoderJNI.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/hal/HALLibrary.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/hal/HALUtil.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/hal/I2CJNI.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/hal/InterruptJNI.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/hal/JNIWrapper.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/hal/NotifierJNI.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/hal/PDPJNI.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/hal/PWMJNI.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/hal/PowerJNI.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/hal/RelayJNI.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/hal/SPIJNI.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/hal/SerialPortJNI.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/hal/SolenoidJNI.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/image/BinaryImage.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/image/ColorImage.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/image/HSLImage.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/image/ImageBase.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/image/MonoImage.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/image/NIVisionException.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/image/ParticleAnalysisReport.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/image/RGBImage.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/image/package.html (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/internal/HardwareHLUsageReporting.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/internal/HardwareTimer.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/package.html (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/vision/AxisCamera.java (100%) rename wpilibj/{wpilibJavaDevices/src/main => src/athena}/java/edu/wpi/first/wpilibj/vision/USBCamera.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/Controller.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/GenericHID.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/HLUsageReporting.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/MotorSafety.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/MotorSafetyHelper.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/NamedSendable.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/PIDController.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/PIDInterface.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/PIDOutput.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/PIDSource.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/PIDSourceType.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/RobotState.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/Sendable.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/Timer.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/buttons/Button.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/buttons/InternalButton.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/buttons/JoystickButton.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/buttons/NetworkButton.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/buttons/Trigger.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/command/Command.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/command/CommandGroup.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/command/IllegalUseOfCommandException.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/command/LinkedListElement.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/command/PIDCommand.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/command/PIDSubsystem.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/command/PrintCommand.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/command/Scheduler.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/command/Set.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/command/StartCommand.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/command/Subsystem.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/command/WaitCommand.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/command/WaitForChildren.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/command/WaitUntilCommand.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/interfaces/Accelerometer.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/interfaces/Gyro.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/interfaces/Potentiometer.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/livewindow/LiveWindow.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/livewindow/LiveWindowSendable.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/smartdashboard/SendableChooser.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/smartdashboard/SmartDashboard.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/util/AllocationException.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/util/BaseSystemNotInitializedException.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/util/BoundaryException.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/util/CheckedAllocationException.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/util/SortedVector.java (100%) rename wpilibj/{wpilibJava/src/main => src/shared}/java/edu/wpi/first/wpilibj/util/UncleanStatusException.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/AnalogInput.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/AnalogPotentiometer.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/CounterBase.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/DigitalInput.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/DoubleSolenoid.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/DriverStation.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/Encoder.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/Gyro.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/IterativeRobot.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/Jaguar.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/Joystick.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/Preferences.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/Relay.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/RobotBase.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/RobotDrive.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/SampleRobot.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/SensorBase.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/Servo.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/Solenoid.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/SpeedController.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/Talon.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/Victor.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/command/Scheduler.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/internal/SimTimer.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/simulation/MainNode.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/simulation/SimDigitalInput.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/simulation/SimEncoder.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/simulation/SimFloatInput.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/simulation/SimGyro.java (100%) rename wpilibj/{wpilibJavaSim/src/main => src/sim}/java/edu/wpi/first/wpilibj/simulation/SimSpeedController.java (100%) delete mode 100644 wpilibj/wpilibJava/pom.xml delete mode 100644 wpilibj/wpilibJavaDevices/.gitignore delete mode 100644 wpilibj/wpilibJavaDevices/build.gradle delete mode 100644 wpilibj/wpilibJavaDevices/pom.xml delete mode 100644 wpilibj/wpilibJavaDevices/src/test/java/edu/wpi/first/wpilibj/ExampleTest.java delete mode 100644 wpilibj/wpilibJavaDevices/src/test/java/edu/wpi/first/wpilibj/ResourceTest.java delete mode 100644 wpilibj/wpilibJavaFinal/.gitignore delete mode 100644 wpilibj/wpilibJavaFinal/pom.xml delete mode 100644 wpilibj/wpilibJavaIntegrationTests/pom.xml delete mode 100644 wpilibj/wpilibJavaIntegrationTests/src/main/resources/logging.properties delete mode 100644 wpilibj/wpilibJavaJNI/.gitignore delete mode 100644 wpilibj/wpilibJavaJNI/CMakeLists.txt delete mode 100644 wpilibj/wpilibJavaJNI/pom.xml delete mode 100644 wpilibj/wpilibJavaSim/.classpath delete mode 100644 wpilibj/wpilibJavaSim/.gitignore delete mode 100644 wpilibj/wpilibJavaSim/.project delete mode 100644 wpilibj/wpilibJavaSim/.settings/org.eclipse.jdt.core.prefs delete mode 100644 wpilibj/wpilibJavaSim/.settings/org.eclipse.m2e.core.prefs delete mode 100644 wpilibj/wpilibJavaSim/missing.txt delete mode 100644 wpilibj/wpilibJavaSim/pom.xml rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/README.html (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/README.md (100%) create mode 100644 wpilibjIntegrationTests/build.gradle rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/runintegrationjavaprogram (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/AbstractInterruptTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests/src/test/java/edu/wpi/first/wpilibj/test => wpilibjIntegrationTests/src/main/java/edu/wpi/first/wpilibj}/AbstractTestSuiteTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/AnalogCrossConnectTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/AnalogPotentiometerTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/BuiltInAccelerometerTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/CANTalonTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/CounterTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/DIOCrossConnectTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/EncoderTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/GyroTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/MotorEncoderTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/MotorInvertingTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/PCMTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/PDPTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/PIDTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/PreferencesTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/RelayCrossConnectTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/SampleTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/TimerTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/WpiLibJTestSuite.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/can/AbstractCANTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/can/CANCurrentQuadEncoderModeTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/can/CANDefaultTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/can/CANJaguarInversionTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/can/CANPercentQuadEncoderModeTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/can/CANPositionPotentiometerModeTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/can/CANPositionQuadEncoderModeTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/can/CANSpeedQuadEncoderModeTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/can/CANTestSuite.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/can/CANVoltageQuadEncoderModeTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/can/package-info.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/command/AbstractCommandTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/command/ButtonTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/command/CommandParallelGroupTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/command/CommandScheduleTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/command/CommandSequentialGroupTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/command/CommandSupersedeTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/command/CommandTestSuite.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/command/CommandTimeoutTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/command/DefaultCommandTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/fixtures/AnalogCrossConnectFixture.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/fixtures/CANMotorEncoderFixture.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/fixtures/DIOCrossConnectFixture.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/fixtures/FakeCounterFixture.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/fixtures/FakeEncoderFixture.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/fixtures/ITestFixture.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/fixtures/MotorEncoderFixture.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/fixtures/RelayCrossConnectFixture.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/fixtures/SampleFixture.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/fixtures/TiltPanCameraFixture.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/mockhardware/FakeCounterSource.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/mockhardware/FakeEncoderSource.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/mockhardware/FakePotentiometerSource.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/mocks/MockCommand.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/smartdashboard/SmartDashboardTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/smartdashboard/SmartDashboardTestSuite.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/test/AbstractComsSetup.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/test/AbstractTestSuite.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/test/AntJunitLanucher.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/test/QuickTest.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/test/RepeatRule.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/test/TestBench.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/test/TestSuite.java (100%) rename {wpilibj/wpilibJavaIntegrationTests => wpilibjIntegrationTests}/src/main/java/edu/wpi/first/wpilibj/test/package-info.java (100%) rename {wpilibj/wpilibJavaIntegrationTests/src/main/java => wpilibjIntegrationTests/src/main/resources}/logging.properties (100%) diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 97b12d00e3..0000000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "networktables/ntcore"] - path = networktables/ntcore - url = ../ntcore diff --git a/CMakeLists.txt b/CMakeLists.txt index 9c66469d0e..107a338296 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,7 +39,6 @@ if(WIN32) # get rid of min max macros on windows add_definitions(-DNOMINMAX) - # aww yea add_definitions(-DWIN32_LEAN_AND_MEAN) SET(CMAKE_FIND_LIBRARY_PREFIXES "") @@ -55,6 +54,6 @@ endif() include_directories("build") add_subdirectory(simulation/gz_msgs) -add_subdirectory(wpilibc/wpilibC++Sim) +add_subdirectory(wpilibc/simulation) add_subdirectory(simulation/frc_gazebo_plugins) -add_subdirectory(networktables/ntcore) +add_subdirectory(ntcore) diff --git a/Vagrantfile b/Vagrantfile deleted file mode 100644 index 3490780228..0000000000 --- a/Vagrantfile +++ /dev/null @@ -1,125 +0,0 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : - -# Vagrantfile API/syntax version. Don't touch unless you know what you're doing! -VAGRANTFILE_API_VERSION = "2" - -Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| - # All Vagrant configuration is done here. The most common configuration - # options are documented and commented below. For a complete reference, - # please see the online documentation at vagrantup.com. - - # Every Vagrant virtual environment requires a box to build off of. - config.vm.box = "puphpet/ubuntu1404-x64" - - # Run the bootstrap.sh shell script to setup the enviroment - config.vm.provision :shell, path: "bootstrap.sh" - - # Disable automatic box update checking. If you disable this, then - # boxes will only be checked for updates when the user runs - # `vagrant box outdated`. This is not recommended. - # config.vm.box_check_update = false - - # Create a forwarded port mapping which allows access to a specific port - # within the machine from a port on the host machine. In the example below, - # accessing "localhost:8080" will access port 80 on the guest machine. - # config.vm.network "forwarded_port", guest: 80, host: 8080 - - # Create a private network, which allows host-only access to the machine - # using a specific IP. - # config.vm.network "private_network", ip: "192.168.33.10" - - # Create a public network, which generally matched to bridged network. - # Bridged networks make the machine appear as another physical device on - # your network. - config.vm.network "public_network", bridge: 'en0' - - # If true, then any SSH connections made will enable agent forwarding. - # Default value: false - config.ssh.forward_agent = true - - # Share an additional folder to the guest VM. The first argument is - # the path on the host to the actual folder. The second argument is - # the path on the guest to mount the folder. And the optional third - # argument is a set of non-required options. - # config.vm.synced_folder "../data", "/vagrant_data" - - # Provider-specific configuration so you can fine-tune various - # backing providers for Vagrant. These expose provider-specific options. - # Example for VirtualBox: - # - # config.vm.provider "virtualbox" do |vb| - # # Don't boot with headless mode - # vb.gui = true - # - # # Use VBoxManage to customize the VM. For example to change memory: - # vb.customize ["modifyvm", :id, "--memory", "1024"] - # end - # - # View the documentation for the provider you're using for more - # information on available options. - - # Enable provisioning with CFEngine. CFEngine Community packages are - # automatically installed. For example, configure the host as a - # policy server and optionally a policy file to run: - # - # config.vm.provision "cfengine" do |cf| - # cf.am_policy_hub = true - # # cf.run_file = "motd.cf" - # end - # - # You can also configure and bootstrap a client to an existing - # policy server: - # - # config.vm.provision "cfengine" do |cf| - # cf.policy_server_address = "10.0.2.15" - # end - - # Enable provisioning with Puppet stand alone. Puppet manifests - # are contained in a directory path relative to this Vagrantfile. - # You will need to create the manifests directory and a manifest in - # the file default.pp in the manifests_path directory. - # - # config.vm.provision "puppet" do |puppet| - # puppet.manifests_path = "manifests" - # puppet.manifest_file = "site.pp" - # end - - # Enable provisioning with chef solo, specifying a cookbooks path, roles - # path, and data_bags path (all relative to this Vagrantfile), and adding - # some recipes and/or roles. - # - # config.vm.provision "chef_solo" do |chef| - # chef.cookbooks_path = "../my-recipes/cookbooks" - # chef.roles_path = "../my-recipes/roles" - # chef.data_bags_path = "../my-recipes/data_bags" - # chef.add_recipe "mysql" - # chef.add_role "web" - # - # # You may also specify custom JSON attributes: - # chef.json = { mysql_password: "foo" } - # end - - # Enable provisioning with chef server, specifying the chef server URL, - # and the path to the validation key (relative to this Vagrantfile). - # - # The Opscode Platform uses HTTPS. Substitute your organization for - # ORGNAME in the URL and validation key. - # - # If you have your own Chef Server, use the appropriate URL, which may be - # HTTP instead of HTTPS depending on your configuration. Also change the - # validation key to validation.pem. - # - # config.vm.provision "chef_client" do |chef| - # chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME" - # chef.validation_key_path = "ORGNAME-validator.pem" - # end - # - # If you're using the Opscode platform, your validator client is - # ORGNAME-validator, replacing ORGNAME with your organization name. - # - # If you have your own Chef Server, the default validation client name is - # chef-validator, unless you changed the configuration. - # - # chef.validation_client_name = "ORGNAME-validator" -end diff --git a/bootstrap.sh b/bootstrap.sh deleted file mode 100644 index 52010713cb..0000000000 --- a/bootstrap.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash - -# Update the apt-get repository list -apt --yes --force-yes install software-properties-common -apt-add-repository --yes ppa:byteit101/frc-toolchain -apt-get update - - -# Download and install Java -apt-get --yes --force-yes install default-jre default-jdk maven python-pip python-setuptools g++-arm-frc-linux-gnueabi sshpass libc6-i386 - -easy_install pip -yes | pip install git-review - - -# Install the jdk-linux-arm-vfp-sflt -# Create the target directory for the jdk -mkdir -p /home/vagrant/jdk-linux-arm-vfp-sflt/ -# Unzip the jdk into this new directory -tar -xzf /vagrant/jdk-7u45-linux-arm-vfp-sflt.gz -C /home/vagrant/jdk-linux-arm-vfp-sflt/ - - -# Keep this at the end of this file -printf "\n\n" -printf "Your virtual enviroment is now nearly set-up.\n" -printf "You can access your enviroment using 'vagrant ssh'.\n" -printf "Please run 'cd /vagrant' to navigate to the repository.\n" -printf "Once you have navigated there please run 'git review -s' to complete the setup of git review.\n" diff --git a/build.gradle b/build.gradle index e5723e0a1a..04e9c35c3c 100644 --- a/build.gradle +++ b/build.gradle @@ -1,227 +1,53 @@ -import org.apache.tools.ant.taskdefs.condition.Os +def enableSimulation = hasProperty('enableSimulation') -// This regex matches either a Windows or Unix style file separator, then the lib part of the library, -// then the name of the library itself, and finally the .so extension at the end. The name of the library -// is in the libName capture group, which is extracted and used for the linker flags -def libPattern = /.*((\\/|\\).*)+lib(?.+).so$/ -def niLibraryArgs = [] -def wpiLibraryArgs = [] -def niLibraryPath = file('ni-libraries').path +def repoBaseUrl = 'http://first.wpi.edu/FRC/roborio/maven' +def publishUrl = "${System.getProperty('user.home')}/releases/maven/" -// The NI Library tree includes all non-wpi libraries, which is everything that doesn't have libwpi in the name -def niLibraryTree = fileTree(niLibraryPath) -niLibraryTree.include '*.so' -niLibraryTree.exclude '*libwpi*.so' - -// This adds all linker flags to the list of ni library linker flags -niLibraryTree.each { lib -> - def nameMatcher = (lib.path =~ libPattern) - if (nameMatcher[0].size() > 1) { - def name = nameMatcher.group('libName') - niLibraryArgs << '-l' + name - } +// If we have the repo property, we want to delete the cached version of the networktables +// dependency and redownload it from the given repo +if (!hasProperty('repo')) { + ext.repo = 'development' } -// The WPI libraries are libraries in the ni-libraries folder that have libwpi in their names -def wpiLibraryTree = fileTree(niLibraryPath) -wpiLibraryTree.include '*libwpi*.so' +allprojects { + ext.enableSimulation = enableSimulation + ext.repo = repo + ext.useExtension = 'release' != repo -// This adds all linker flags to the list of wpi library linker flags -wpiLibraryTree.each { lib -> - def nameMatcher = (lib.path =~ libPattern) - if (nameMatcher[0].size() > 1) { - def name = nameMatcher[0][1] - wpiLibraryArgs << '-l' + name + repositories { + mavenCentral() + maven { + url publishUrl + } + mavenLocal() + maven { + url repoBaseUrl + } } -} -// Shells out to maven for generates the eclipse plugins. -// TODO: Get gradle to build this natively, rather than relying on maven. A plugin exists to do this, called Wuff, but this needs more investigation -// https://github.com/akhikhl/wuff -task eclipsePlugins(type: Exec) { - description = 'Executes the maven build of the eclipse plugins' - group = 'WPILib' - workingDir 'eclipse-plugins' - if (Os.isFamily(Os.FAMILY_WINDOWS)) { - executable 'mvn.cmd' - } else { - executable 'mvn' + ext.getClassifier = { + return useExtension ? "-$repo" : '' } - args 'package' -} - -// Rather than a normal clean, which executes whenever the clean task is run, this must be manually invoked. This -// is because the maven processes is very verbose and takes a long time, checking all of the eclipse repositories -task cleanEclipsePlugins(type: Exec) { - description = 'Cleans the maven build of the eclipse plugins' - group = 'WPILib' - workingDir 'eclipse-plugins' - if (Os.isFamily(Os.FAMILY_WINDOWS)) { - executable 'mvn.cmd' - } else { - executable 'mvn' - } - args 'clean' } subprojects { apply plugin: 'eclipse' apply plugin: 'idea' - repositories { - mavenCentral() - mavenLocal() - } ext.armBuild = true // Disables doclint in java 8. if (JavaVersion.current().isJava8Compatible()) { - allprojects { - tasks.withType(Javadoc) { - options.addStringOption('Xdoclint:none', '-quiet') - } + tasks.withType(Javadoc) { + options.addStringOption('Xdoclint:none', '-quiet') } } - // Make sure that all maven publishing routines are run before the maven process starts - plugins.withType(MavenPublishPlugin).whenPluginAdded { - eclipsePlugins.dependsOn publishToMavenLocal - } - - plugins.withType(CppPlugin).whenPluginAdded { - model { - buildTypes { - debug - } - // Adds a custom toolchain for our compiler prefix and options - toolChains { - gcc(Gcc) { - target('arm') { - // We use a custom-built cross compiler with the prefix arm-frc-linux-gnueabi- - // If this ever changes, the prefix will need to be changed here - def compilerPrefix = 'arm-frc-linux-gnueabi-' - cppCompiler.executable = compilerPrefix + cppCompiler.executable - linker.executable = compilerPrefix + linker.executable - assembler.executable = compilerPrefix + assembler.executable - // Gradle auto-adds the -m32 argument to the linker and compiler. Our compiler only supports - // arm, and doesn't understand this flag, so it is removed from both - cppCompiler.withArguments { args -> - args << '-std=c++1y' << '-Wformat=2' << '-Wall' << '-Wextra' << '-Werror' << '-pedantic' - args << '-Wno-psabi' << '-Wno-unused-parameter' << '-fPIC' << '-O0' << '-g3' << '-rdynamic' - //TODO: When the compiler allows us to actually call deprecated functions from within - // deprecated function, remove this line (this will cause calling deprecated functions - // to be treated as a warning rather than an error). - args << '-Wno-error=deprecated-declarations' - args.remove('-m32') - } - linker.withArguments { args -> - args << '-rdynamic' - args.remove('-m32') - } - staticLibArchiver.executable = compilerPrefix + staticLibArchiver.executable - } - } - // Workaround for OS X. Macs for some reason want to use Xcode's gcc - // (which just wraps Clang), so we have to explicitly make it so - // that trying to compile with Clang will call gcc instead - macGcc(Clang) { - target('arm') { - // We use a custom-built cross compiler with the prefix arm-frc-linux-gnueabi- - // If this ever changes, the prefix will need to be changed here - def compilerPrefix = 'arm-frc-linux-gnueabi-' - cppCompiler.executable = compilerPrefix + 'g++' - linker.executable = compilerPrefix + 'g++' - assembler.executable = compilerPrefix + 'gcc' - // Gradle auto-adds the -m32 argument to the linker and compiler. Our compiler only supports - // arm, and doesn't understand this flag, so it is removed from both - cppCompiler.withArguments { args -> - args << '-std=c++1y' << '-Wformat=2' << '-Wall' << '-Wextra' << '-Werror' << '-pedantic' - args << '-Wno-psabi' << '-Wno-unused-parameter' << '-fPIC' << '-O0' << '-g3' << '-rdynamic' - //TODO: When the compiler allows us to actually call deprecated functions from within - // deprecated function, remove this line (this will cause calling deprecated functions - // to be treated as a warning rather than an error). - args << '-Wno-error=deprecated-declarations' - args.remove('-m32') - } - linker.withArguments { args -> - args << '-rdynamic' - args.remove('-m32') - } - staticLibArchiver.executable = compilerPrefix + 'ar' - } - } - } - - // The only platform is arm linux - platforms { - arm { - architecture 'arm' - operatingSystem 'linux' - } - } + ext.setupWpilibRepo = { publishing -> + publishing.repositories.maven { + url = "${System.getProperty('user.home')}/releases/maven/" } - - // This task adds the appropriate linker flags for the NI libraries - task addNiLibraryLinks() { - description = 'Adds the linker flags for the NI libraries in the ni-library folders' - group = 'WPILib' - doLast { - binaries.all { - tasks.withType(CppCompile) { - // desktop version doesn't use all the NI libraries - // so only do this for arm libraries - String architecture = targetPlatform.architecture - if (architecture.contains('arm')){ - linker.args << '-L' + niLibraryPath - linker.args.addAll(niLibraryArgs) - } - } - } - model { - repositories { - libs(PrebuiltLibraries) { libs -> - // Loops through all .so files (except files matching *libwpi*.so) in ../ni-libraries - // and includes them for linking - niLibraryTree.each { niLib -> - libs.create(niLib) { - binaries.withType(SharedLibraryBinary) { - sharedLibraryFile = file(niLib.path) - } - } - } - } - } - } - } - } - - // This task adds the appropriate linker flags for the WPI libraries - task addWpiLibraryLinks() { - description = 'Adds the linker flags for the WPI libraries in the ni-library folders' - group = 'WPILib' - doLast { - binaries.all { - linker.args.addAll(wpiLibraryArgs) - } - model { - repositories { - libs(PrebuiltLibraries) { libs -> - // Loops through all libwpi*.so files in ../ni-libraries and includes them for linking - wpiLibraryTree.each { niLib -> - libs.create(niLib) { - binaries.withType(SharedLibraryBinary) { - sharedLibraryFile = file(niLib.path) - } - } - } - } - } - } - } - } - - // Whenever we add the WPI library links, we'll also need the ni libraries, so set up that dependency - addWpiLibraryLinks.dependsOn addNiLibraryLinks } } +apply from: 'cppSettings.gradle' \ No newline at end of file diff --git a/cppSettings.gradle b/cppSettings.gradle new file mode 100644 index 0000000000..fa4dc5dbfa --- /dev/null +++ b/cppSettings.gradle @@ -0,0 +1,179 @@ +// This regex matches either a Windows or Unix style file separator, then the lib part of the library, +// then the name of the library itself, and finally the .so extension at the end. The name of the library +// is in the libName capture group, which is extracted and used for the linker flags +def libPattern = /.*((\\/|\\).*)+lib(?.+).so$/ +def niLibraryArgs = [] +def niLibraryPath = file('ni-libraries').path + +// The NI Library tree includes all non-wpi libraries, which is everything that doesn't have libwpi in the name +def niLibraryTree = fileTree(niLibraryPath) +niLibraryTree.include '*.so' +niLibraryTree.exclude '*wpi*.so' + +// This adds all linker flags to the list of ni library linker flags +niLibraryTree.each { lib -> + def nameMatcher = (lib.path =~ libPattern) + if (nameMatcher[0].size() > 1) { + def name = nameMatcher.group('libName') + niLibraryArgs << '-l' + name + } +} + +def ntDependency = + project.dependencies.create("edu.wpi.first.wpilib.networktables.cpp:NetworkTables:3.0.0-SNAPSHOT:arm${getClassifier()}@zip") +def config = project.configurations.detachedConfiguration(ntDependency) +config.setTransitive(false) +def netTables = config.files[0].canonicalFile + +def netTablesUnzipLocation = "$buildDir/networktables" + +// Create a task that will unzip the networktables files into a temporary build directory +task unzipNetworkTables(type: Copy) { + description = 'Unzips the networktables maven dependency so that the include files and libraries can be used' + group = 'WPILib' + from zipTree(netTables) + into netTablesUnzipLocation +} + +task clean(type: Delete) { + description = "Deletes the build directory" + group = "Build" + delete buildDir +} + +subprojects { + plugins.withType(CppPlugin).whenPluginAdded { + // This defines a project property that projects depending on network tables can use to setup that dependency. + ext.defineNetworkTablesProperties = { + ext.netTables = netTablesUnzipLocation + ext.netTablesInclude = "$netTablesUnzipLocation/include" + ext.netLibLocation = "$netTablesUnzipLocation/Linux/arm" + ext.netSharedLib = "$netLibLocation/libntcore.so" + ext.netStaticLib = "$netLibLocation/libntcore.a" + + task addNetworkTablesLibraryLinks() { + description = 'Adds the linker flags for the networktables libraries retreived from maven' + group = 'WPILib' + dependsOn project(':').unzipNetworkTables + doLast { + binaries.all { + tasks.withType(CppCompile) { + // desktop version doesn't use all the NI libraries + // so only do this for arm libraries + String architecture = targetPlatform.architecture + if (architecture.contains('arm')){ + linker.args netStaticLib + } + } + } + } + } + } + + model { + buildTypes { + debug + } + // Adds a custom toolchain for our compiler prefix and options + toolChains { + gcc(Gcc) { + target('arm') { + // We use a custom-built cross compiler with the prefix arm-frc-linux-gnueabi- + // If this ever changes, the prefix will need to be changed here + def compilerPrefix = 'arm-frc-linux-gnueabi-' + cppCompiler.executable = compilerPrefix + cppCompiler.executable + linker.executable = compilerPrefix + linker.executable + assembler.executable = compilerPrefix + assembler.executable + // Gradle auto-adds the -m32 argument to the linker and compiler. Our compiler only supports + // arm, and doesn't understand this flag, so it is removed from both + cppCompiler.withArguments { args -> + args << '-std=c++1y' << '-Wformat=2' << '-Wall' << '-Wextra' << '-Werror' << '-pedantic' + args << '-Wno-psabi' << '-Wno-unused-parameter' << '-fPIC' << '-O0' << '-g3' << '-rdynamic' + //TODO: When the compiler allows us to actually call deprecated functions from within + // deprecated function, remove this line (this will cause calling deprecated functions + // to be treated as a warning rather than an error). + args << '-Wno-error=deprecated-declarations' + args.remove('-m32') + } + linker.withArguments { args -> + args << '-rdynamic' + args.remove('-m32') + } + staticLibArchiver.executable = compilerPrefix + staticLibArchiver.executable + } + } + // Workaround for OS X. Macs for some reason want to use Xcode's gcc + // (which just wraps Clang), so we have to explicitly make it so + // that trying to compile with Clang will call gcc instead + macGcc(Clang) { + target('arm') { + // We use a custom-built cross compiler with the prefix arm-frc-linux-gnueabi- + // If this ever changes, the prefix will need to be changed here + def compilerPrefix = 'arm-frc-linux-gnueabi-' + cppCompiler.executable = compilerPrefix + 'g++' + linker.executable = compilerPrefix + 'g++' + assembler.executable = compilerPrefix + 'gcc' + // Gradle auto-adds the -m32 argument to the linker and compiler. Our compiler only supports + // arm, and doesn't understand this flag, so it is removed from both + cppCompiler.withArguments { args -> + args << '-std=c++1y' << '-Wformat=2' << '-Wall' << '-Wextra' << '-Werror' << '-pedantic' + args << '-Wno-psabi' << '-Wno-unused-parameter' << '-fPIC' << '-O0' << '-g3' << '-rdynamic' + //TODO: When the compiler allows us to actually call deprecated functions from within + // deprecated function, remove this line (this will cause calling deprecated functions + // to be treated as a warning rather than an error). + args << '-Wno-error=deprecated-declarations' + args.remove('-m32') + } + linker.withArguments { args -> + args << '-rdynamic' + args.remove('-m32') + } + staticLibArchiver.executable = compilerPrefix + 'ar' + } + } + } + + // The only platform is arm linux + platforms { + arm { + architecture 'arm' + operatingSystem 'linux' + } + } + } + + // This task adds the appropriate linker flags for the NI libraries + task addNiLibraryLinks() { + description = 'Adds the linker flags for the NI libraries in the ni-library folders' + group = 'WPILib' + doLast { + binaries.all { + tasks.withType(CppCompile) { + // desktop version doesn't use all the NI libraries + // so only do this for arm libraries + String architecture = targetPlatform.architecture + if (architecture.contains('arm')){ + linker.args << '-L' + niLibraryPath + linker.args.addAll(niLibraryArgs) + } + } + } + model { + repositories { + libs(PrebuiltLibraries) { libs -> + // Loops through all .so files (except files matching *libwpi*.so) in ../ni-libraries + // and includes them for linking + niLibraryTree.each { niLib -> + libs.create(niLib) { + binaries.withType(SharedLibraryBinary) { + sharedLibraryFile = file(niLib.path) + } + } + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/driver-station/build.gradle b/driver-station/build.gradle deleted file mode 100644 index 6a12fe2281..0000000000 --- a/driver-station/build.gradle +++ /dev/null @@ -1,4 +0,0 @@ -apply plugin: 'java' -apply plugin: 'application' - -mainClassName = 'edu.wpi.first.driverstation.DriverStation' \ No newline at end of file diff --git a/driver-station/pom.xml b/driver-station/pom.xml deleted file mode 100644 index 2bac5f2186..0000000000 --- a/driver-station/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - 4.0.0 - edu.wpi.first - driver-station - jar - 0.1.0-SNAPSHOT - - - docline-java8-disable - - [1.8, - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.1 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-jar-plugin - 2.4 - - - - edu.wpi.first.driverstation.DriverStation - - - - - - - - diff --git a/driver-station/src/main/java/edu/wpi/first/driverstation/DriverStation.java b/driver-station/src/main/java/edu/wpi/first/driverstation/DriverStation.java deleted file mode 100644 index 9d5bbae4ba..0000000000 --- a/driver-station/src/main/java/edu/wpi/first/driverstation/DriverStation.java +++ /dev/null @@ -1,248 +0,0 @@ -package edu.wpi.first.driverstation; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.ServerSocket; -import java.net.Socket; -import java.util.LinkedList; -import java.util.List; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.logging.ConsoleHandler; -import java.util.logging.Handler; -import java.util.logging.Level; -import java.util.logging.Logger; - -import edu.wpi.first.driverstation.fms.FMSController; -import edu.wpi.first.driverstation.fms.FMSInterface; -import edu.wpi.first.driverstation.robotcoms.ControlMode; -import edu.wpi.first.driverstation.robotcoms.RobotComm; - -/** - * Driver station implementation for the test stand. This is based heavily on - * code done by Brendan McLeod, modified for command line argument and local - * socket input. - * - * @author Fredric Silberberg - */ -public class DriverStation { - - protected static final Logger log = Logger.getLogger(DriverStation.class - .getName()); - protected static DriverStation station; - - public static void main(String[] args) { - int team = 190, port = 6190; - List commandQueue = new LinkedList<>(); - - // If there are command line arguments, then input them - if (args.length > 0) { - for (int i = 0; i < args.length; i++) { - String command = args[i]; - switch (command) { - case "-t": - // Get the team number if there is still an argument - if (i + 1 < args.length) { - try { - team = Integer.parseInt(args[++i]); - } catch (NumberFormatException ex) { - log.log(Level.WARNING, - "Error, non-integer team number " + args[i]); - displayUsage(); - System.exit(-1); - } - } else { - log.log(Level.WARNING, - "Error, no team number provided."); - displayUsage(); - System.exit(-1); - } - log.log(Level.INFO, "Team number is set to " + team); - break; - case "-h": - // Display help - displayUsage(); - return; - // TODO: Support networked commands - // case "-p": - // // Get the port number - // // Get the team number if there is still an argument - // if (i + 1 < args.length) { - // try { - // port = Integer.parseInt(args[++i]); - // } catch (NumberFormatException ex) { - // log.log(Level.WARNING, - // "Error, non-integer port number " + args[i]); - // displayUsage(); - // System.exit(-1); - // } - // } else { - // log.log(Level.WARNING, - // "Error, no port number provided."); - // displayUsage(); - // System.exit(-1); - // } - // log.log(Level.INFO, "Port number is set to " + port); - // break; - case "enable": - case "disable": - case "teleop": - case "auto": - case "estop": - case "reboot": - case "test": - // Add the command to the queue of commands - commandQueue.add(command); - break; - default: - log.log(Level.SEVERE, "Unknown input " + command); - displayUsage(); - System.exit(-1); - } - } - } - station = new DriverStation(team, port); - for (String command : commandQueue) { - station.addCommand(command); - } - - station.run(); - } - - public static void displayUsage() { - System.out.println("The Java FRC Driverstation"); - System.out.println("To Use: java -jar [commands]"); - System.out.println("-h: Print this display and exit"); - System.out.println("-t [team]: Specify the team number (default 190)"); - System.out - .println("enable, disable, teleop, auto, test, estop, reboot"); - System.out.println("Run the given commands on startup"); - } - - RobotComm robot; - FMSInterface fms; - LinkedBlockingQueue queue; - Thread netThread, sysThread; - - public DriverStation(final int team, final int port) { - queue = new LinkedBlockingQueue<>(); - robot = new RobotComm(team); - fms = new FMSController(team); - robot.setFMSController(fms); - robot.setDaemon(true); - sysThread = new Thread(new Runnable() { - public void run() { - BufferedReader sysIn = new BufferedReader( - new InputStreamReader(System.in)); - while (!Thread.interrupted()) { - try { - String com = sysIn.readLine(); - log.log(Level.FINE, "Recieved stdin command " + com); - station.addCommand(com); - } catch (IOException ex) { - log.log(Level.WARNING, "Error in system read thread", - ex); - } - } - } - }); - sysThread.setDaemon(true); - - // TODO: Test the networking protocol - // netThread = new Thread(new Runnable() { - // public void run() { - // ServerSocket servSock = null; - // List connections = new LinkedList<>(); - // try { - // servSock = new ServerSocket(port); - // while (!Thread.interrupted()) { - // Socket sock = servSock.accept(); - // Thread newCon = new Thread(new ReadThread(sock, station)); - // newCon.run(); - // connections.add(newCon); - // log.log(Level.INFO, "Accepted new network connection"); - // } - // } catch (IOException ex) { - // log.log(Level.WARNING, "Error with the network thread", ex); - // } finally { - // try { - // for (Thread t : connections) { - // t.interrupt(); - // } - // servSock.close(); - // } catch (IOException | NullPointerException e) { - // log.log(Level.SEVERE, - // "Error when closing the server socket", e); - // } - // } - // } - // }); - // netThread.setDaemon(true); - } - - public void run() { - System.out.println("Activating driver station"); - robot.start(); - System.out - .println("The driverstation supports the following commands:"); - System.out - .println("enable, disable, teleop, auto, test, reboot, estop, quit"); - sysThread.start(); - // netThread.start(); - while (true) { - try { - String command = queue.take(); - log.log(Level.FINE, "Received command " + command); - switch (command) { - case "enable": - log.log(Level.INFO, "Enabling robot"); - robot.setEnabled(true); - break; - case "disable": - log.log(Level.INFO, "Disabling robot"); - robot.setEnabled(false); - break; - case "teleop": - log.log(Level.INFO, "Setting robot to teleop mode"); - robot.setControlMode(ControlMode.TELEOP); - break; - case "auto": - log.log(Level.INFO, "Setting robot to auto mode"); - robot.setControlMode(ControlMode.AUTO); - break; - case "test": - log.log(Level.INFO, "Setting robot to test mode"); - robot.setControlMode(ControlMode.TEST_MODE); - break; - case "estop": - log.log(Level.INFO, "Estoping robot"); - robot.eStopRobot(); - break; - case "reboot": - log.log(Level.INFO, "Rebooting robot"); - robot.rebootRobot(); - break; - case "quit": - log.log(Level.INFO, "Shutting down"); - sysThread.interrupt(); - // netThread.interrupt(); - return; - default: - log.log(Level.WARNING, "Unknown input " + command); - break; - } - } catch (InterruptedException e) { - log.log(Level.WARNING, "Error when taking command", e); - } - } - } - - public void addCommand(String command) { - try { - queue.put(command); - } catch (InterruptedException e) { - log.log(Level.WARNING, "Error when added an element to the queue", - e); - } - } -} diff --git a/driver-station/src/main/java/edu/wpi/first/driverstation/ReadThread.java b/driver-station/src/main/java/edu/wpi/first/driverstation/ReadThread.java deleted file mode 100644 index 0c00f9273d..0000000000 --- a/driver-station/src/main/java/edu/wpi/first/driverstation/ReadThread.java +++ /dev/null @@ -1,42 +0,0 @@ -package edu.wpi.first.driverstation; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.Socket; -import java.util.logging.Level; -import java.util.logging.Logger; - -public class ReadThread implements Runnable { - - private final Logger log = Logger.getLogger(DriverStation.class.getName()); - Socket sock; - DriverStation ds; - - public ReadThread(Socket sock, DriverStation ds) { - this.sock = sock; - this.ds = ds; - } - - @Override - public void run() { - try { - BufferedReader netIn = new BufferedReader(new InputStreamReader( - sock.getInputStream())); - while (!Thread.interrupted()) { - String com = netIn.readLine(); - log.log(Level.FINE, "Received command " + com); - ds.addCommand(com); - } - } catch (IOException e) { - log.log(Level.WARNING, "IO Exception in net thread", e); - } finally { - try { - sock.close(); - } catch (IOException | NullPointerException ex) { - log.log(Level.SEVERE, "Error when closing the socket", ex); - } - } - } - -} diff --git a/driver-station/src/main/java/edu/wpi/first/driverstation/fms/FMSController.java b/driver-station/src/main/java/edu/wpi/first/driverstation/fms/FMSController.java deleted file mode 100644 index 793082992c..0000000000 --- a/driver-station/src/main/java/edu/wpi/first/driverstation/fms/FMSController.java +++ /dev/null @@ -1,249 +0,0 @@ -package edu.wpi.first.driverstation.fms; - -import edu.wpi.first.driverstation.DriverStation; -import edu.wpi.first.driverstation.fms.FMSInterface; - -import java.net.DatagramPacket; -import java.net.DatagramSocket; -import java.net.InetAddress; -import java.net.SocketException; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.zip.CRC32; - -import edu.wpi.first.driverstation.robotcoms.ControlMode; - -/** - * - * @author Brendan - */ -public class FMSController extends Thread implements FMSInterface { - - private static final Logger log = Logger.getLogger(DriverStation.class - .getName()); - - private class FMSDataIn extends Thread { - - private FMSController fmsController; - private int FMSreceivePort = 1120; - private DatagramSocket FMSreceiveSocket; - - public FMSDataIn(FMSController fmsController) { - this.fmsController = fmsController; - try { - FMSreceiveSocket = new DatagramSocket(FMSreceivePort); - } catch (SocketException ex) { - log.log(Level.WARNING, "Error creating Robot Sockets", ex); - } - } - - @Override - public void run() { - while (true) { - try { - byte[] receiveData = new byte[74];// the size of the data - DatagramPacket receivePacket = new DatagramPacket( - receiveData, receiveData.length); - FMSreceiveSocket.receive(receivePacket); - fmsController - .setIP(receivePacket.getAddress().getAddress()); - fmsController.receiveFMSpacket(receiveData); - } catch (Exception ex) { - log.log(Level.INFO, "Receive error", ex); - } - } - } - } - - private FMSDataIn dataInput; - private DatagramSocket FMSsendingSocket; - private int teamNumber; - private int FMSsendPort = 1160; - private byte[] ipFMS = new byte[4]; - private boolean[] controlState = new boolean[8]; - // {auto, test, mode, enabled, not-estopped} - private boolean[] fromRobot = new boolean[] { false, false, false, true }; - private char[] batteryData = new char[] { 13, 13 }; - private long lastFMS = 0; - private long lastFMSSent = 0; - char[] stationID = new char[2]; - private boolean isRobotConnected; - - /* - * controlState[0] //null controlState[1] //WAP link controlState[2] //check - * version #s controlState[3] //request DS info? controlState[4] - * //auto-teleop controlState[5] //enabled-disabled controlState[6] //not - * estop controlState[7] //null - */ - - public FMSController(int team) { - teamNumber = team; - try { - FMSsendingSocket = new DatagramSocket(FMSsendPort); - } catch (SocketException ex) { - log.log(Level.WARNING, "Error creating FMS Sockets", ex); - } - for (int i = 0; i < 4; i++) { - ipFMS[i] = (byte) 0xFF; - } - dataInput = new FMSDataIn(this); - dataInput.setDaemon(true); - setDaemon(true); - start(); - } - - @Override - public void start() { - dataInput.start(); - super.start(); - } - - @Override - public void run() { - while (true) { - if ((System.currentTimeMillis() > (lastFMSSent + 100))) { - lastFMSSent = System.currentTimeMillis(); - sendFMSData(); - - } - } - } - - private void setIP(byte[] ipIn) { - ipFMS = ipIn; - } - - @Override - public boolean isFMSConnected() { - - return ((lastFMS + 1000) > System.currentTimeMillis()); - } - - private void receiveFMSpacket(byte[] receiveData) { - - lastFMS = System.currentTimeMillis(); - // reveive data 0, 1 are useless - // 2 contains control data - for (int i = 0; i < 8; i++) { - controlState[i] = (receiveData[2] & (1 << (i))) > 0; - } - stationID[0] = (char) receiveData[3]; - stationID[1] = (char) receiveData[4]; - - } - - private void sendFMSData() { - CRC32 crctest = new CRC32(); - byte[] sendData = new byte[50]; - - for (int i = 0; i < 50; i++) { - sendData[i] = 0x00; - } - - if (isRobotConnected)// {auto, test mode, enabled, not-estopped} - { - sendData[2] += 0x02; - } - if (fromRobot[0])// 0 holds the mode (1=auto 0=teleop) - { - sendData[2] += 0x10; - } - if (fromRobot[2])// 1 holds enabled (1=enabled) - { - sendData[2] += 0x20; - } - if (fromRobot[3])// 2 holds not e-stoped (1=good, 0=bad) - { - sendData[2] += 0x40; - } - - byte teamHigh = (byte) ((teamNumber - (teamNumber % 100)) / 100); - byte teamLow = (byte) (teamNumber % 100); - sendData[6] = 10;// IP address - sendData[7] = teamHigh; - sendData[8] = teamLow; - sendData[9] = 5;// make this variable!!!! - - sendData[10] = (byte) stationID[0];// the alliance color - sendData[11] = (byte) stationID[1]; // the station number - - sendData[26] = 0x00;// amount of dropped packets - sendData[27] = 0x00;// amount of dropped packets - - sendData[28] = 0x00;// number of packets received - sendData[29] = 0x00;// number of packets received - - sendData[30] = 0x00;// trip time - sendData[31] = 0x00;// trip time - sendData[32] = 0x00;// trip time - sendData[33] = 0x00;// trip time - - // need to capture actual voltage - sendData[40] = (byte) batteryData[0]; - sendData[41] = (byte) batteryData[1]; - /* - * get CRC - */ - crctest.reset(); - crctest.update(sendData); - - /* - * convert CRC to byte format - */ - long crccheck = crctest.getValue(); - sendData[46] = (byte) ((crccheck >> 24) & 0xff); - sendData[47] = (byte) ((crccheck >> 16) & 0xff); - sendData[48] = (byte) ((crccheck >> 8) & 0xff); - sendData[49] = (byte) ((crccheck) & 0xff); - - log.log(Level.FINE, "Sending FMS Data"); - /* - * send packet - */ - try { - DatagramPacket sendPacket = new DatagramPacket(sendData, - sendData.length, InetAddress.getByAddress(ipFMS), - FMSsendPort); - FMSsendingSocket.send(sendPacket); - } catch (Exception e) { - } - } - - @Override - public char getAllianceColor() { - return stationID[0]; - } - - @Override - public char getDSNumber() { - return stationID[1]; - } - - @Override - public boolean isEnabled() { - return controlState[5]; - } - - @Override - public ControlMode getControlMode() { - if (!controlState[4]) { - return ControlMode.TELEOP; - } - return ControlMode.AUTO; - } - - @Override - public void updateBattery(char[] batteryData) { - this.batteryData = batteryData; - } - - @Override - public void updateRobotFeedback(boolean[] fromRobot) { - this.fromRobot = fromRobot; - } - - @Override - public void setRobotConnected(boolean connected) { - isRobotConnected = connected; - } -} diff --git a/driver-station/src/main/java/edu/wpi/first/driverstation/fms/FMSInterface.java b/driver-station/src/main/java/edu/wpi/first/driverstation/fms/FMSInterface.java deleted file mode 100644 index a6f6bd6800..0000000000 --- a/driver-station/src/main/java/edu/wpi/first/driverstation/fms/FMSInterface.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package edu.wpi.first.driverstation.fms; - -import edu.wpi.first.driverstation.robotcoms.ControlMode; - -/** - * - * @author Brendan - */ -public interface FMSInterface { - - public char getAllianceColor(); - public char getDSNumber(); - public boolean isFMSConnected(); - public boolean isEnabled(); - public ControlMode getControlMode(); - public void updateBattery(char[] batteryData); - public void updateRobotFeedback(boolean[] fromRobot); - public void setRobotConnected(boolean connected); - - -} diff --git a/driver-station/src/main/java/edu/wpi/first/driverstation/fms/NoFMSController.java b/driver-station/src/main/java/edu/wpi/first/driverstation/fms/NoFMSController.java deleted file mode 100644 index 58fcace45d..0000000000 --- a/driver-station/src/main/java/edu/wpi/first/driverstation/fms/NoFMSController.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package edu.wpi.first.driverstation.fms; - -import edu.wpi.first.driverstation.robotcoms.ControlMode; - -/** - * - * @author Brendan - */ -public class NoFMSController implements FMSInterface { - - @Override - public char getAllianceColor() { - return 'B'; - } - - @Override - public char getDSNumber() { - return '1'; - } - - @Override - public boolean isFMSConnected() { - return false; - } - - @Override - public boolean isEnabled() { - return false; - } - - @Override - public ControlMode getControlMode() { - return ControlMode.TELEOP; - } - - @Override - public void updateBattery(char[] batteryData) { - return; - } - - @Override - public void updateRobotFeedback(boolean[] fromRobot) { - return; - } - - @Override - public void setRobotConnected(boolean connected) { - return; - } -} diff --git a/driver-station/src/main/java/edu/wpi/first/driverstation/robotcoms/ControlMode.java b/driver-station/src/main/java/edu/wpi/first/driverstation/robotcoms/ControlMode.java deleted file mode 100644 index b143c0b87d..0000000000 --- a/driver-station/src/main/java/edu/wpi/first/driverstation/robotcoms/ControlMode.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package edu.wpi.first.driverstation.robotcoms; - -/** - * - * @author Brendan - */ -public enum ControlMode { - AUTO("AUTO"), TELEOP("TELEOP"), TEST_MODE("TEST"); - private String name; - - private ControlMode(String name) { - this.name = name; - } - - @Override - public String toString() { - return name; //To change body of generated methods, choose Tools | Templates. - } - -} diff --git a/driver-station/src/main/java/edu/wpi/first/driverstation/robotcoms/RobotComm.java b/driver-station/src/main/java/edu/wpi/first/driverstation/robotcoms/RobotComm.java deleted file mode 100644 index 116ee12e70..0000000000 --- a/driver-station/src/main/java/edu/wpi/first/driverstation/robotcoms/RobotComm.java +++ /dev/null @@ -1,319 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package edu.wpi.first.driverstation.robotcoms; - -import edu.wpi.first.driverstation.DriverStation; -import edu.wpi.first.driverstation.fms.FMSInterface; -import edu.wpi.first.driverstation.fms.NoFMSController; - -import java.net.*; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.zip.CRC32; - -/** - * - * @author Brendan - */ -public class RobotComm extends Thread { - - private static final Logger log = Logger.getLogger(DriverStation.class - .getName()); - - private class RobotDataIn extends Thread { - - RobotComm theRobotComm; - private DatagramSocket robotReceiveSocket; - private int robotReceivePort = 1150; - - public RobotDataIn(RobotComm robotComm) { - theRobotComm = robotComm; - try { - robotReceiveSocket = new DatagramSocket(robotReceivePort); - } catch (SocketException ex) { - log.log(Level.WARNING, "Error creating Robot Sockets", ex); - } - } - - public void run() { - while (true) { - try { - byte[] receiveData = new byte[1024];// the size of the data - DatagramPacket receivePacket = new DatagramPacket( - receiveData, receiveData.length); - robotReceiveSocket.receive(receivePacket); - theRobotComm.receiveRobotpacket(receiveData); - Thread.yield(); - } catch (Exception ex) { - } - } - } - } - - private DatagramSocket robotSendingSocket; - private RobotDataIn inputSocket; - private final int robotSendPortNormal = 1110; - // private final int robotSendPortNormal = 1115;//actually for sending on - // the field (used for robot sim) - private final int robotSendPortFMS = 1115; - private int sentPackets;// the current packet ID that is being sent to the - // robot - private int lastRobotPacket;// the last packet ID to have been recieved by - // the robot - private long lastRobotTime;// the time stamp when the robot was seen - private boolean[] controlDataToSend;// {auto, test mode, enabled, - // not-estopped, reboot} - private boolean[] controlFromRobot;// {auto, test mode, enabled, - // not-estopped} - private byte[] stationID = new byte[2]; - private char[] batteryData = new char[2]; - private int robotTeam = 0; - private long lastSentTime = 0; - private int packetOffset = 0; - private FMSInterface fmsController; - - public RobotComm(int team) { - - robotTeam = team; - try { - robotSendingSocket = new DatagramSocket();// robotSendPortNormal); - } catch (SocketException ex) { - log.log(Level.WARNING, "Error creating Robot Sockets", ex); - } - sentPackets = 0; - controlFromRobot = new boolean[] { false, false, false, true };// {auto, - // test - // mode, - // enabled, - // not-estopped} - - controlDataToSend = new boolean[] { false, false, false, true, false };// {auto, - // test - // mode, - // enabled, - // not-estopped, - // reboot} - fmsController = new NoFMSController(); - inputSocket = new RobotDataIn(this); - inputSocket.setDaemon(true); - } - - @Override - public void start() { - inputSocket.start(); - super.start(); - } - - @Override - public void run() { - while (true) { - if ((lastSentTime + 20) < System.currentTimeMillis()) { - lastSentTime = System.currentTimeMillis(); - sendRobotData(); - } - - } - } - - public void rebootRobot() { - setEnabled(false); - controlDataToSend[4] = true; - } - - public void setControlMode(ControlMode theMode) { - if (theMode == ControlMode.AUTO) {// {auto, test mode, enabled, - // not-estopped} - controlDataToSend[0] = true; - controlDataToSend[1] = false; - } else if (theMode == ControlMode.TELEOP) {// {auto, test mode, enabled, - // not-estopped} - controlDataToSend[0] = false; - controlDataToSend[1] = false; - } else if (theMode == ControlMode.TEST_MODE) {// {auto, test mode, - // enabled, - // not-estopped} - controlDataToSend[0] = false; - controlDataToSend[1] = true; - } - } - - public void setEnabled(boolean enabled) {// {auto, test mode, enabled, - // not-estopped, reboot} - controlDataToSend[2] = enabled; - } - - public void eStopRobot() { - - controlDataToSend[3] = false; - } - - public void setAllianceInfo(byte allianceColor, byte allianceStation) { - stationID = new byte[] { allianceColor, allianceStation }; - } - - public void setTeamNumber(int newTeam) { - robotTeam = newTeam; - } - - public void setFMSController(FMSInterface newFMS) { - fmsController = newFMS; - } - - /** - * Packs up all the data and sends the packet to the robot - */ - private void sendRobotData() { - sentPackets++; - sentPackets = sentPackets % 0xFFFF;// makes it overflow properly - packetOffset = sentPackets - lastRobotPacket; - CRC32 crctest = new CRC32(); - byte[] sendData = new byte[1024]; - - for (int i = 0; i < 1024; i++) { - sendData[i] = 0x00; - } - - // Construct the pacet counts - sendData[0] = (byte) ((sentPackets >> 8) & 0xFF); - sendData[1] = (byte) (sentPackets & 0xFF); - // {auto, test mode, enabled, not-estopped, reboot} - if (controlDataToSend[4]) {// reboot bit - sendData[2] += 0x80; - - controlDataToSend[4] = false; - } - if (controlDataToSend[3]) {// not e-stop bit - sendData[2] += 0x40; - } else { - controlDataToSend[3] = true; - } - if (controlDataToSend[2])// if enabled - { - sendData[2] += 0x20; - } - if (controlDataToSend[0])// 1 holds the mode (1=auto 0=teleop) - { - sendData[2] += 0x10; - } - if (fmsController.isFMSConnected()) { - sendData[2] += 0x08; - } - - if (!isConnected()) { - sendData[2] += 0x04; - } - - sendData[3] = (byte) 0xFF;// make all digial inputs high - - sendData[4] = (byte) ((robotTeam >> 8) & 0xFF);// packs up and sends - // team number - sendData[5] = (byte) ((robotTeam) & 0xFF); - - sendData[6] = stationID[0];// the alliance color - sendData[7] = stationID[1]; // the station number - - sendData[72] = (byte) 0x31; - sendData[73] = (byte) 0x31; - sendData[74] = (byte) 0x33; - sendData[75] = (byte) 0x30; - sendData[76] = (byte) 0x21; - sendData[77] = (byte) 0x21; - sendData[78] = (byte) 0x30; - sendData[79] = (byte) 0x30; - - crctest.reset(); - crctest.update(sendData); - long crccheck = crctest.getValue(); - sendData[1020] = (byte) ((crccheck >> 24) & 0xff); - sendData[1021] = (byte) ((crccheck >> 16) & 0xff); - sendData[1022] = (byte) ((crccheck >> 8) & 0xff); - sendData[1023] = (byte) ((crccheck >> 0) & 0xff); - - byte teamHigh = (byte) ((robotTeam - robotTeam % 100) / 100); - byte teamLow = (byte) (robotTeam % 100); - /* - * send packet - */ - try { - DatagramPacket sendPacket; - if (!fmsController.isFMSConnected()) { - sendPacket = new DatagramPacket(sendData, sendData.length, - InetAddress.getByAddress(new byte[] { 10, teamHigh, - teamLow, 2 }), robotSendPortNormal); - } else { - sendPacket = new DatagramPacket(sendData, sendData.length, - InetAddress.getByAddress(new byte[] { 10, teamHigh, - teamLow, 2 }), robotSendPortFMS); - } - robotSendingSocket.send(sendPacket); - } catch (Exception e) { - log.log(Level.WARNING, "Failed to send", e); - } - - fmsController.setRobotConnected(isConnected()); - - } - - public boolean isConnected() { - - if (!(lastRobotTime + 100 > System.currentTimeMillis())) { - return (false); - } - - if (packetOffset > 25) { - return (false); - } - - return (true); - } - - public char[] getBatteryData() { - return batteryData; - } - - /** - * Return the control data that it has gathered from the robot in the - * format: {auto, test mode, enabled, not-estopped} - * - * @return The data from the robot - */ - public boolean[] getControlDataFromRobot() { - return controlFromRobot; - } - - public double getBatteryVoltage() { - return Double.parseDouble(getBatteryString()); - } - - public String getBatteryString() { - return (String.format("%x", getBatteryData()[0]) + "." + String.format( - "%x", getBatteryData()[1])); - } - - protected void receiveRobotpacket(byte[] dataIn) {// this gets called - // whenever a new robot - // packet is recieved - int teamNumber = 0; - teamNumber += dataIn[8] & 0xFF; - teamNumber = ((teamNumber << 8) + (dataIn[9] & 0xFF)) & 0xFFFF; - if (robotTeam == teamNumber) { - lastRobotTime = System.currentTimeMillis(); - batteryData[0] = (char) dataIn[1]; - batteryData[1] = (char) dataIn[2]; - lastRobotPacket = 0; - lastRobotPacket += dataIn[30] & 0xFF; - lastRobotPacket = ((lastRobotPacket << 8) + (dataIn[31] & 0xFF)) & 0xFFFF; - controlFromRobot[0] = ((0x10 & dataIn[0]) > 0);// auto - controlFromRobot[2] = ((0x20 & dataIn[0]) > 0);// enabled - controlFromRobot[3] = true;// robot isn't estopped yet - - } else { - log.log(Level.INFO, "Data from different team..."); - } - fmsController.updateRobotFeedback(controlFromRobot); - fmsController.updateBattery(batteryData); - - } -} diff --git a/eclipse-plugins/.gitattributes b/eclipse-plugins/.gitattributes deleted file mode 100644 index ddb7938ff9..0000000000 --- a/eclipse-plugins/.gitattributes +++ /dev/null @@ -1,4 +0,0 @@ -*runcppprogram text eol=lf -*runjavaprogram text eol=lf -*robotCommand text eol=lf -*robotDebugCommand text eol=lf diff --git a/eclipse-plugins/.gitignore b/eclipse-plugins/.gitignore deleted file mode 100644 index 0a395394eb..0000000000 --- a/eclipse-plugins/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -*~ -target/ -bin/ -.settings/ \ No newline at end of file diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core.feature/build.properties b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core.feature/build.properties deleted file mode 100644 index 64f93a9f0b..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core.feature/build.properties +++ /dev/null @@ -1 +0,0 @@ -bin.includes = feature.xml diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core.feature/feature.xml b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core.feature/feature.xml deleted file mode 100644 index bb6555d64f..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core.feature/feature.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - * Copyright (c) 2015 FIRST and WPI -* All rights reserved. - - - - * Copyright (c) 2015 FIRST and WPI -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or -* without modification, are permitted provided that the following -* conditions are met: -* Redistributions of source code must retain the above -* copyright notice, this list of conditions and the following -* disclaimer. Redistributions in binary form must reproduce the -* above copyright notice, this list of conditions and the following -* disclaimer in the documentation and/or other materials provided -* with the distribution. Neither the name of the FIRST nor the -* names of its contributors may be used to endorse or promote -* products derived from this software without specific prior -* written permission. -* -* THIS SOFTWARE IS PROVIDED BY FIRST AND CONTRIBUTORS``AS IS'' -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT -* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -* EVENT SHALL FIRST OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - - - - - - - - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core.feature/pom.xml b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core.feature/pom.xml deleted file mode 100644 index 35a98728ba..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core.feature/pom.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - 4.0.0 - edu.wpi.first.wpilib.plugins.core.feature - eclipse-feature - - - edu.wpi.first.wpilib.plugins - edu.wpi.first.wpilib.plugins - 0.1.0.qualifier - .. - - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/META-INF/MANIFEST.MF b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/META-INF/MANIFEST.MF deleted file mode 100644 index 28c81899dd..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/META-INF/MANIFEST.MF +++ /dev/null @@ -1,35 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: edu.wpi.first.wpilib.plugins.core -Bundle-SymbolicName: edu.wpi.first.wpilib.plugins.core;singleton:=true -Bundle-Version: 0.1.0.qualifier -Bundle-Activator: edu.wpi.first.wpilib.plugins.core.WPILibCore -Require-Bundle: org.eclipse.ui, - org.eclipse.core.runtime, - org.eclipse.jface.text, - org.eclipse.core.resources, - org.eclipse.ui.editors, - org.eclipse.ui.ide, - org.eclipse.ant.core;bundle-version="3.2.400", - org.eclipse.ant.launching;bundle-version="1.0.200", - org.eclipse.debug.core;bundle-version="3.7.100", - org.eclipse.core.externaltools;bundle-version="1.0.100", - org.eclipse.debug.ui;bundle-version="3.8.1", - org.eclipse.ui.externaltools;bundle-version="3.2.100", - org.eclipse.ant.ui;bundle-version="3.5.300", - org.eclipse.ui.console;bundle-version="3.5.100", - org.eclipse.ui.navigator;bundle-version="3.5.200", - org.eclipse.ui.navigator.resources;bundle-version="3.4.400", - org.eclipse.ui.intro, - org.eclipse.ui.intro.universal, - org.eclipse.core.expressions;bundle-version="3.4.400", - org.eclipse.core.variables -Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Export-Package: edu.wpi.first.wpilib.plugins.core, - edu.wpi.first.wpilib.plugins.core.ant, - edu.wpi.first.wpilib.plugins.core.installer, - edu.wpi.first.wpilib.plugins.core.launching, - edu.wpi.first.wpilib.plugins.core.nature, - edu.wpi.first.wpilib.plugins.core.preferences, - edu.wpi.first.wpilib.plugins.core.wizards diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/WPILib Intro/css/graphics/sample.gif b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/WPILib Intro/css/graphics/sample.gif deleted file mode 100644 index 5ff1ffc67431fcb4b442a4f2e75ba5a73ef96509..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1362 zcmW+#drZ|;96y;hGIea410SiFFo|-= zNl{)ZR}8LbkReopygWRLix8KThrk8yh2R=oK>hYP_x$(W_xt_4zQ5nPzyKfL5HIG% z#uy|06pbBv+DY6=({ngiwMj!L%sMa;dmb zoGZ?t5vz(x#e`y9F|a~4z#tkbAqzba0~^r5!ZOo_bd4vZ&hddw?+lT}HAp#De8ek9&l^BH%5Ca>~z+yT%-A0YagFXe8ekBOO~`@{5Ca>~ zOrJY0GyQSsT%GsUP3H-9%+9OmS!d8Xb!T>Z)ftCAg43Z!a*EbB zaq7^(PH21%xDvvHCr~{l8hb+a$22lYgA-((Ad7=~9Mm;N4@T+lN7QVm{QUg%%&f%3 z#C``|$jGc4dYWBYbG@#$?GgR{z^3`SWO&$Svo$p}#m2_Q#KeqGJYGCL^%)ptp3s0l!izB%n0|iYdSm(@-?+^72&yt> zl*PL)*>GxV`3vq4DyhV|cqq%&YIjIktYcyxH|obN-I9lTDZZ z>JN;3ToY0f|9wVF(cakCEy+u>nFsgvZmcXW zin?#J{v4c>mp0f{e9(Sr-OAwTo`#Ido#xGH#b0+7Bqh|96o1)gns9t&>Qzn=FSzKZ9Twa1Q^jBWI>y63bXnX$^^c6e~bochDF zwuW^aX)m`Yhgy$zb;P?JU)Fh|BlMTWYln@`p4#nMXz5Jwx;=YVT+o|aHhtUvFsJL( zno&!Z_xymI&3^wn!X75Cnes`y|HvVG?GKv+-snEPC9ZL1oc~hyB=4Xv`nu2TI9|QW z`#(=ZLrQP9q36fQ!oD8g(DSB-HUF5xd(-y!7qKW(j(=O^&c2JO;!5A86j9c?clu{bT63~fBKi$kqOtkY8N0grbBz@%JqE5C yH%yQ4Kh}L^Ag_hFg{QcTzh*U-&)s7+Zku`M&jPh-zGL_RZ1w*%=;(+5 diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/WPILib Intro/css/graphics/sample_hov.gif b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/WPILib Intro/css/graphics/sample_hov.gif deleted file mode 100644 index 6874164f5bae829a0c53fac44f3e6c169455ecb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1553 zcmW+#c~q2D6n`qISxmSjDX5qph{VkE2ylcD3^|+>mjui`M<0q<$2=4+2)T_Wf`|z( zltm;(L{JQ7a4k>-o`8ZRs|};<3=T8Q3`o50oA=*6_uk)jzt7iiiQ9tjoRKp!BE-dG zoKwyT=a_ROD#kdYoDt42XGkf`llT#gt*f zFlHEmMp$KtGDH}{3;`>s1~3o}DnSU>F>NY5)V# zunDq22M_}`KqGM?F%4~~;UTyf1PT6t7AlOy$02ex-&-`zCloQ8uOep6L5tMQ*@;zi z9O4LOhXTngTHM5}Ljaqh;d6j1L3rQ^sD?Q={>ODgTrcd|K9#Na%oR){Nc3!R3mv^5pi5)bh6?je#_ireA3&ZhF9-kR8PUgvCb6rcWZ-IUO6KPtA#zdtZqc3}P+Uz95=PhR%6c|*1T zjk;O#sZG_jG4q~H_rH^T|DYjIKPO?nm2zK8@s5M1vJ3mWUfg)O*mr!PBGgco#y8&B zGU)Sjds}9T@%r8U;crw0I~{V8Ty`}nni2};CgtyaN`uEQ=$MpPAsu_YsN&H3SJnR> zwp!9|x3Fc1#O<`sD2h2^>-~|xTW6F>b$nK#Iw{H`BVFR5ic)`k;`2wJ$WAzn9J5N= z8->;K&kXJASkK?vpCA3}+gmZxMfRDO&gd0;tbZMqJyGKEb)a%<{PKF!)3}}k>emUI zk2$s`u95gz9hh^_Nx6-L`c29JdUC#!FbYvuw`cvnLm5U9SI&dc<#SwhsryKrMbEy9o6M!FJFhBv@wN4b)>?ev`hsNj zHz}zP90ekKXC;J##VkclF*!V;X;O zL2Iw{`i^wCmV3W0+_%lM?kgv4@uZ+oZLw);x8u!G+uF1xcCu0EUcs&Qd5~z zL3dxdQ&wQz`U$6eCI=dpuI_sxJ^EX0fcu<31AJ;mPdlsd9kI>Xf2pOu`q{kkuP3fr rad>vWk7M@gFTCdW&tBy>ZSJzQevXk_t-P%=vJKu7R_a$SLJR)~nTtJ| diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/WPILib Intro/css/sample.css b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/WPILib Intro/css/sample.css deleted file mode 100644 index 9a094d3b51..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/WPILib Intro/css/sample.css +++ /dev/null @@ -1,3 +0,0 @@ - -a#WPILibRobotDevelopment-introLink img { background-image : url(graphics/sample.gif); } -a#WPILibRobotDevelopment-introLink:hover img { background-image : url(graphics/sample_hov.gif); } \ No newline at end of file diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/WPILib Intro/sample.xml b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/WPILib Intro/sample.xml deleted file mode 100644 index ac8bf973f0..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/WPILib Intro/sample.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - Documentation of how WPILib and it's associated tools work. (Internet Connection Needed) - - - - \ No newline at end of file diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/build.properties b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/build.properties deleted file mode 100644 index 6bf048fba1..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/build.properties +++ /dev/null @@ -1,10 +0,0 @@ -source.. = src/main/java/ -output.. = bin/ -bin.includes = plugin.xml,\ - META-INF/,\ - .,\ - icons/,\ - resources/ -buildDirectory = build/ -plugin.destination = ${basedir}/repository -eclipse.home = /usr/lib/eclipse diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/icons/outlineviewer16x16.png b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/icons/outlineviewer16x16.png deleted file mode 100644 index 630829e4d70a87e6678dc85ad078df086978d803..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 474 zcmV<00VV#4P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i*!7 z4=WJe@@TLC00CM_L_t(I%Z<}NYZXBh1@Pazo%cu;LJGkkL9k0AL=?e)2(d~LNs4@k zv?){M>-Yr%X#@qqLJ)-5*rd0zF%f-l-&*7j4C51DB_=T;hhfFMB4wz3NC8eNYX9TIsN^Mw{#~5mU1VY_3UZ@)8d%xJkgbcK50VK`XEKORa{q-3e{F~ZkSCo_Hl?ec#D^j zg>gw+G+E@s?;M)U-x=#Fd}c7 Q7XSbN07*qoM6N<$f;y7KxBvhE diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/icons/robotbuilder.png b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/icons/robotbuilder.png deleted file mode 100644 index feb6e2b768fa2d135ca15ffde056b6b7778d3f66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18184 zcmW(+WmFqY7e<4-y9J6Cmm)=qI}|AHF2&sm?ykk9P+W_<6sNem6n6py`SN~0CVS4F zoZXSVcji74rK&80fl7)B0|SF0Co8EAy$1c)kO9!&fzKx6&w~l4HhQ* z2Ql;}wVABC5)6zFJ@n5Y7?`Jb==B%|#+?HO=EN8VMlcfwhR8A5Xh<3cMmkX1Nbrm2; zV#wl`)vwx+#ek^-NEr5q*NsbX!P33&*2O8Ao56VxM1+018j_79viYjhwIukD6lp`+ zKmP*Kv`B0=qg%^TiYcXb=Y%ii8Da8R%@`fImkE>;?AbUzwkazsE7z*TkC7rD@y<%U z`MS7Dw(3}(deZ3(CL;Dg_QtH=GHH3w2M0kYBn4N-3S3XDs`rQpeu`glX6zvRVbn^$9 z9032oJ9`}c9HWw57a%)IPAFfGnF>pY**l; zq}tt*8vZBwiXJ$p(o}7`+C|+!LNO*O;_%1rgi8p5xET2e1@}yX-AGd8#g`QI2a&-G z$Vk$!hiMLmfAlXLdg}@WhT#rIR+RQLzHuPp0xBGcft_d(n5!zaflk(e0eK*i16?!+ zIEuHp8nL0M^peC`R?y6V3`ZIVxc8yh0!J171MdDVl|sIz9VHn;?i#!tfdOH95NF!G zZ)o{;O>m&c9>D5sEUnv>wQsrN!|%g}3?OeLY`P^NV_H)+w0voNnJtmE%#9B4ur|e{%`CQHWqXS@#cJO zS}cczSG=`|HHlWnA#q^@g49ne`Q?)N(P#ucdRFXrA)if%XX6NEoV`RtfN~P}QmpLk zjh&qnNpv#WIyyVgr?p4zr!}W6uilt;#0^x3E(iB8;hbue+)L96W4E7*i5rP-(QiH4 zIc4S)?zpm);#?;crE80*+$FAQ<)t0)z}5SKQ^ zHvPj1?&sv-*+Nn=zIM%9)DRtc|6N57LP;wrdev33USq zX4p=X3cbR%f%poYEi&4S z`yy{BCV@r#wtlKIsxsm$x0eCs64gB}s0OP*2o~Bw<@tI`ZyRhw!^HYa6wy(DT%EO? z@upjy@5#W%Ub)YKdgq>7?e<9bKDj-Rjvg~p(-3GE7OVBV2FN!5yuA`RT@PhA?Sw&A zn(g@0YzdZ}IRQW;xV=H_8|hmB>>qK(g66~RKG4g+ zhEWND^vhI4;O{SIjM0x<0box~>DzqKXC!C}fYJK)Eo!f|R_hEezby_)Xt=h^fNY41IijysD}S8v#}>S(Q2MzsIh%IHZmrbgQqZ zi2TN~G%*RDe#?08cUUqQ_!)Tr@$KRCeWDM9w9*qOiiU>fcgUT8=okS+g-?&8qxm&NkW$|Hs8DMwGIytokXy(iAy;N`#BEQC7Cpe)N~7*`)xsqa6JUrgPh{Ts%usC z?cHOI)1MV87mCy?ViCtMsXkAPylrC%Kw{?vT)&fj{hET$f>-sC{pMSU4kX>#EKCR@GuOg&``hm%e%uIdI@*x}Ve^xqLOq!*C*W(d>lP9NPlqIt1 zBPgO<7(*78;n>lhL6NotlDfqm?Gh00D`G360M9R<9fx-yW{ej2<03!J=I~ z17`!hF2A3w->s{iJM!lpz#XNBMsEj3k6l}@$e!KDKbi1_NdrK@@21tm%b}7wb#SG) zT3T8Soo81th~jW)W*Uw&5~MIr-5iU+~S^<%?9nLs?~;wG2VOw=Txy ziq-i6_^q}hD?59afAd{$-R}YO*Vm6jx-p_Yd%Udpfgwe7nJc<*{2@SCg5bZ@)DWcD zUecVm7PuyOfylu=(kMiZifkDLRos!ma*lr6Fb)(g`ldy#x?7|y%=9EXPT$VZp&_ZM z&ychDtu6Lh0aomTc=>>)EiZ42IL82pkk`k@01%^mZwP%KmhK})eq0>J;n9(fp<&sk zHFel_EcbMY*4q9L*9T4^ewlhzbMS?nVtP+CScKb?!#bc_#2xIr4!J(pUtbggKJ3DbctY zmIiy+I2KS{FBd*p0w+U*3OFXo%lfgObbu`yDR;JQZEu)(b|^mm&B&j34Z6_&{<-Xd zPvZjdpi>`wRLU@kB-47?LRHBMAR5)r>rkP~&Xlw?0>Zr9BOysGV(_&r;;^_2`@Vj1TXw=bOMf+0+QGkXeDt%$Fb+B z%fBp#aKNOMgt`k~MQ^96k0Q+Q(Z}0LRQ1BdBbdOVF@(1wDkv0uS!Q68V#zemZngx; zwkPq+X>J6IFIf}w7;V*z7RP*sm3 zOT;K&hsbxQOggeCJH|_z^O>21^5-ZXo4d?V*;@9_57(*xx0`YH5wJfWKR+}aE;vH> zT9IL$e>g1}IGSvA``fRz#6ctL?PdBsgzS4~)SSnKxE}nXl#Nue+D{Eu919o=S2K`L z@zh-n_sXfXhUZ!MQBG$ev)9J-)>vM0@H0Tt9oY_>w@@>}k|IPvbMm~F+Q6wR74`?M z_6LzWZE+Sw-jGBlJXu&iWlgX75P8^acjj@038hQR1*ST!T0FjlFU82+VS|=8W@1Cw z%V&;hB9`h5cm`Is+>;==S`}>s++ev{rLjAcouIVHkRj$=TVxD@f-YKhLF*kiYH7oM zuKh9Has4{$~uR+<2ST=V2?PLn=eRfn?C%-Kn?66Ky4 zdDEhHm04?J+_aD}a;Xo+7oJFAq_+sFF#1atK0evd(&!FD*#7%>t`7fn3RhQaF{U^- z;39ETgFwIWj5Qs{*zPCHdrMifH$?3lZNHsQyL2)*u5c$YStkr4O_HU!Ka*o0`MwsF zDPXLnUTKvfcl-^S)Qt3ZGGNr0U5aADW=PpZ=vpxsQPi${s`^+vhnzFv_`IAZNGn@l z2ugFmg17%c6PRP1Hj2!yj!2ELc-_kubV`Hzao8QZe`pLHjX2G)mQ#CnyzV11Q{R1^ z0JT9fkm1T-_4o)qnjsz)kc$B4yAkeuy8ql3xACr$j8MC+R*{+nM?NBMEE`KdBmp2N z8c7RPn>e{aMba|kBcue$<%bQ7FtW1s`yt9xBJ-#5)w)S+tSLrgGr!1P3K@crE+0pCS&loL3yOm3^>)D5^9b(%2Jpa(keddw5&!`9GwbNG|H%1U_FCY zy5!ot19>vtzl?^_*$W+Q*@SlUyDY6UO$BaB@X>*y#^zI%bSMm?qfH+gb4B zIth;f7AZ^b|CqGW`7-bHDymh46AdkY?`ed^C{F6B4_k917=Y0}G=qoDWkuu`cykyj z`#;Aw_bg4`NkkmV$F~J8Wt&T>^7MW^ax8ahx}{~x+OeYzdd?xdfVxmQv|}A?OogO_ z4&KQ^m~=m{Cv^}-X()3#%80rfut8PYi~ee?LgW%*OR@|BxEMV@fecbZC40pFkO)Mc zrnbN#2}eE#HAnV-(AL{SPR|B>6T~-96f%aSSB zqpO)BH`6Gx)^jmBsHutJN?V&%2!yju0T!ss$N~6c7H;@198Kh!bvU3SdHL_K#pL9t zb^Cf_A0JWdZLKW`rFA3O5`$7nWo%;+95ie%^gh;LXN@y)@HOv@kv4G>r)>UI9Fx@r zjp_f<28NO@Hql4Y&{`0ijnqnx5g?Nu!n$RUB8vBph`wE?oE$VQ`rQ>%Ie>}lp!M@+ zmzDEsjYw;Jii>ZFwt=3Bg+*BNy(S+&Uu1En*+_i7&aHDwq_^63{wXE~LS-rQmaV+R zx$7J7hfc5v{c^H4b9`B9)gDUlaNkH_p7!FGNn3O6C=+ggkp&@)f@xp9>b-HLU6vi+ z%GbLUO))HoYxIe`D?qr z$^W%&etaAe-AuX}9hLjux&!#wb*DZh`VN;W|2Uh`Jt*_}21mD=km_X{>FMsL=s?dq z_&v}6=zPGLqF?LJ^RVEwXkg@*h-Ka-8?Znq{%{ zYoXi<`cJyDY1<9Sw#5UB=y_D^$_cl%58Yc#mo-Bi497H}TX|zDfKE&&#$D{6hN+a$ z;bmDN>V`5+3Rk(!5vr_%Ulk1yGN8>eBJ^-&=jf37`9kx~~vFzdud8LcxriaQ@CH zmr}{bzqHn2=SP9i?Vp3q+snNZ)+VDRxOWr5y zEUDsW(HYNK+ba$Dpevv>p-XCE)73G+i%TRk#x(%=A)7U+ieAa;_SnI_IHWe}pBkx8|dHUn-3utX;)JlFej zJvT?2mkg2qC_CsRH|1dBCQHJGpnYtORPozQ5b(Go9&(9_8bc7r|BFhim98al_u?uH zUU#jku9-oFKWSc-YkM|&zc)Hccz;Zo`vKa+hOhiF*E=%=2`7p{gJN z#I#^%^CgBz%HrBZg?@>o9t%pZKX>yKindL{v}aP{(qt;_t-W9J)l_HAG(CA``UN9IlPqCng})( z>KDP_S^dD*dwr)q#FwS_XCt{p0o0N@ZKkMH8vJConixkmDON2OVRErV>&YfL3jB)3 zlH!T=KnyJsVVrFQxGM2SjH*Oyhbyx$Y$(fDdh=$8@i|g$Y=x&u#0o`lQ2YZh%dTRV zCp2+jw-tC?nsJk0^q$`ol4**QJxN%t6$4ZwNs&cGjBsh27#zg^s`r~igmY+rpQluv zgb6{7*!Auaja(=o^x#0MpBflVyLp=jrVjl#ztrrwV0&L8U-)p@I3*a9;D2T&d_9Qw z|MpZ&wS$~AL_)1B@!k7?rS18o5?b?->Y_4~nnR&Az3**dm9^d3GF1MlwSEUIidxL6 z(H5y;5{140p?wCP8$IpN2%NvypP8eFXt!P;{3lZ72Z5}pa%zG==g??c z)J1A@06On!3AZ(a9JZJ3GVL&4&E(hdf{aXX?He#C&Xze1(9&RxW588ObmW4Gto> zy1M$qQx>0@LSfVYVA)l>+Jl`4s>8h600J5Lj~!=RRn0$qFWS!5+fpExJydpVmp)4! z0+*e)Faoy|+)uZnuU{FaMIvn5JmkcBq_DY0D!n~UK@*a{3 z$3&sObpC>mil{%*H~Lni!K|q9VQ#51^!^^h7J9aD4m$PG_j$7DypD4uUnW?qJ*ov; zsZyJ(-dffIh}~or6cn`W{zHGdEL^*~Vgld6fzuu~6?xqm&~j)bfzl!%AWynDcs5(O zYFX*o;~+>8RoE+UF;{O z8CpXi=j1N z+Bq9B4Z+2cq7z!*m@~NinF#BtEB4^cd zp^=ToW(&c7461rG0GphRcLb38&+no3s~(P<18YKr+rw z@4%DD9rJ{nd?8Rk-f7)A2RLFg%}hAw(^swc+r$21l7DO6#*Xycjf`ABHO!~TzkmhK zJJW=K>Kzr)SDxDltn1a^-2^1zk}NFq@sv{4RjSs_%chFV3q=b3+k)P`hSyQnZ9fXLM4WjybdzB%n^ zB@~7&d^hu@^I=i1&1vhid6#lSofuaj`R|rK4cxE02-j=2-4q`cf;d=IfC>+(2nee; zo8WG+)T*;~iO0Nlj@mnsLh)SRs($OhfzhTmjn?xqJVknq|0U$T@a8}$YP!opaKegriCXHuh zzyjiW$#`ckOH`dM|D*>*aL8|9x~ha%JPSJqnJ`$UI$S=WDkEaI1X2lk#9oTrVZZNC zI37%x;&kz-a0Q~*cZv2$aBtUh@ssrS;TnsDha_A-q7d>GvCR8d<};@ebTMx8--Uag)ANsR&RtXa zwRG}C!$ks8XNO5?Q8{PJ+<($4?U0ID3?^`)tBwOjM{PBWC9nIi0_x22ZZbQ*QWU3D zLX(NSm-c~8PrkD)8WKT4ybvN??FdICPQ=Q11f@@8e!%Og_nbur_ga;jUiJv3ckt{D zZYY~+j;=S$*N_OEd@DF09BFTv97&&)q@kN(+Gq_L)rrrSynVd_VjjR_KCP8NYe{kll_+7WXzNGP(F$r{?G# zt$-wTrYzNU^eNHVX&^%M#iXWn-!uTS)tTl0v949pZJ)#CjnU8nGzyeRDQrVOmLY-B zAo&*~i>AS+w5oYX7a4Z|PxaXQXXT5xDY5r-Av=Kh0P-+Ze(XSZx`5zd^sX@vrk+cZ z$;HZn7huH~RQyUV;1qN_C6N1m_0@6z#^LLqG$~RUEIbM!#m=@6Ik-@cKRmAq6L2DV zvJRbN{q0F1O2&W129R}UpEZz1(I0K;M>m?If7b9d5pu$3m8R~{C|zxy zmN`gO|U z-??xNPsLpXU@@2;Z3JUJ6v!72?z;3h8~QpNcbjnA{hj|>rd02?=vH_jPG!M?1o6?w zmvFfL{k-i{;7f(d^|kb1Ywy5H}s8PCJrIk6+M^cPx>2_yvEAq zZ`pDSZ)zAy7;Mu!?zP@*P^ee*K(5rAAuoPUs_m!G)oTbrmlEy33`8Lc{jD|mTi0b_ z^Wh#9gjn=;b`Mk2v70Yrso9x63urI?+yjE!enPxzp%~meNS4r`R&lX!1U~x>Gq?qQ;wxe zg63&7-%lh>{y++ygY{YPm$T=*Cz(a}hV#5k-lvwmUxniN+>Dq>{93RkusT7Vc=oZer- z#k!xV0w4xwS=i-6-q}c4xDqwV$lK_|=I@AP;Em+J!qdDCF^azBl2dycEM46xG*^M|bsmYJt)Q~?R!%_O4agwr(zZ?aE9ovlC zN zj7TXxD&b@AEmDOrm^JO*OkkezdlZu*zVWHYeA)EQKn@Rm>PA&0_xV}>pQiJ*cAK-F zyfD8Ef=4ZEoj#$>>v;V)KT$tk#<0z}Ea`Ix(!-*B4Z=6|qYEq-#M|e}pJOoI3PS;p z15`J6W}@4*o8U@)*C#2(Z~8ydh-NN?T_C7MC5hq$S;Uh2R@|V)!d=c|!cQ*1U2Ejh zSri!Ajth11z=a1q~!edak*Km$_YV}LIOpv$o*&NeYFiY(1_y0R=n z^Yu;v9N&TDsA_DcIw=kT_q?639Yt|);&52pFdTx4uh~Mk9{<$N- z?4!;5z<4EGRZ}!a%!Rrgcf&j4EE;Z;62P*3!w?G~D1w=op1uWLicA>29@e^^uQYCl zZZlBJ+q776hwIW&P*?DJeZ;pko@SlMLu45--l6{PpSxj&Vrj_}k=MuyI35&aeFX4n zlHTdW7sdnY>KwPa3pt~O^|Xy_udMJbosd=z#68@x`7w5JH@Qgx0;_&+Z?$>Bar_*E95VqDhRfcr`&!k8~4+auoNS(-qO@j@{ zxQeM)=bCZCxK8(TTZhe7j-@Vd2OJ$#oi+k*aLT5c0)feu54Q2b-4kHw=r4aWaqs|? zh0dFZR@T10Qg&GheV4lBh~1B0Jr+__IyzUSuzI_qo=N_|zv=ILm}Qmew(T$Kj8SSz zIOKgnqPz9x+kN%V1anbh{|s|*iiEU5k70Uq+*PL9 znM!5|{p)oXf#`sSPY(%9@%oR8qj_6iN}uh3w=@5qiJB;TxW~Ul<^D&MpTWyG@xzp* zbINAT4WLO=0t@%(j#2shq+)piG!p=)Gnhxc#12pO zwuUjyMmyH6cObY%d(-V84IO@oy)GbSX3M8VTtD^aoo#0R)+G!8Bj^u^ z8|H0a)`RHyNHz2%;CbYSc7l1g;qHW-w-ITSq0s-!kF$hYBd?#Ab{U|juW zuCk8Fqi%q$L5gzkVnML2AI%`_JqFWoZyXRuufVTKu)oKY{Z9Pt^q@kB8|GCZ z)pf3w;r8_;p_((p&lwb1>OD5ClDELV(-l!txD&^bS6u8G+hjB!Tv8YS^{-A>T{SZQ4IFa2-N^_ zV(cc}&;XEtJx&;n8g9}cjvBFL!qcN#f5YC+I9x(=fgyN~qu?~j{=4xSCjvq!XK1v) zugC2xxI3G|Zu)l8F(5^&lGg?QT_D?OePteyVL2uYRyukX8PRe--nB9kLT zr^iIr=#}an#H~P?XB44@*VX&rusD6vxEj~p&X%%vKil=KHD#5VM}#C$Nat?j$+t)IpqK3 z_vlm;vSt!otTrStFd^LovB+CEAMkngX%?%MCVmL;ZuR)VPB6l`5HiANgYzcHv$$dp zsFFlk4PH*NmMJO~TXT~G)e)vlo-Qq##trEPOPQ8{2;j^R3ezOz>nf;kPO2W9ZXaHwuT?GG9@vYdz9Y?>f!0jeLv5);mcX~ z+KX$OJS!huD_EY4Dd|cGPX__LQ>BUNUk4_{4NViic-gVV?_t|0vB?|TP}thF%Av9A z?UYqXT7>xxYgh5E=oY$tQyminn9V|BmB~KOeHtKimF3Y5vC~&39jGsSCp0=f(kO)-l-d_< zW|+E4dFeM9C`O3|lzqz6A3B(LK@#1#;J#R9XQPOal+P7xq>xoYz(GfT;XmTA&hYJV zn7_O4dT+!v_f=r$S$yX;pf<@HIZvkjwrEORihh9SZ$W=jK>qC^e^1tzfQiPaQYdMf z+O(|Kph2Oq0Qh6C`xpiOqo|>^ymE2bkX2S!V%eugYJ;K4zrh)_Wh^59ZM($PxZmF2 zAz3SYc*U{-7|s}4ki{iOyvqas241V({XOmcI7`&iyO$uknXv;wSrH%*^|qepCz{#V z|MZKBL*>RqL-Vq3Tl!LBTy5JLD*L;vak%-@az4RIQQSUq&=7qP3}-LNX+buZSc-=x z;$V4N`tR&VgHC-!9cgfHeK?A#Fn;5Z8?ci~JDsjv@VJ{<18z*o;qx&AN9?G4IP0<& zX)3ezj8t9rZ+#a`qKoW6&aAfb?PhuMT(vEmDQ9b@s*QW=R?sqi) zJ<8{A-A|K_hg`wl8-pfR8=SD-;@Xrc9H=ny0|>A4M(lKVLI@+yP$A^j6gd6#Wqj~h zxC=E0w$l`Ds+^ReY8rE{AgCWX*bOLA!X1xuyd{z7z?_61XE_!sAh`1b_w06-mvcI- zVkMK&e1O`$MX)AUynJ~1G`mg@!37{A-i-xFf@L-0Sr5>)%xrV*Iu zGp=^@QHI`E8s{e!Sty z;#>Zp;YJ`v-oz@L=6$-$19xX2<%#^ETbn*ABo+P|@oC$AZ9CSbKYkJL^AsQ?If##f zC#@#^mByqWs8|`vW`ee|Y_2QQ*@^0lFoARhVx&0fEKW>|`SR<*J-O%=IKh|o+mqOe zM!K|NXx14O83f?rpF>KeK-%F&Of~ZQN2)SES`O{7K}f1zYVpKQ7R|bsOPe` z9u!Eb5&lvMP5hjkeGaug1X%0uFguG~2+affRmLhLn@xz6OvHIM4qOED)&ygr_?%j% zVN#Mf@ff|@5BTUAL_2=4r?7tP@*RQfwI#-h_80k!fDfbT-6&b|?J06yPQ5k>IQ1m1 z=F0=5PMvqWYB3x&&W06(FE7GIkkzHu*M~J%O$#jCST*!iJKNiW_&k%8_F)?*;twV~ z<<;#}q?=HMtLK(Ke@!D<;P?uUmf?24YNHigjr&fg+;~d8#pi3AazbX;C+67(gMNLS z7QJQKS<`7MAk(!YQ{RKS)|&;5?VR?h8=Ek#9_&S_SRdz#npLH3^;9xudkhKCIt-PT zR&U3bz4q$nQl$UX5ZqqhP`Ed2yzU%=0t%Oo=icE~p`R!}z}_<_6TK_My8e%yDsTIg zy*9Oz+0$on@BV;~A%vQq;q4R#|Cta&7BMelmR;>wqjrQxIHk7)?RWal-EI_xSQO$? ziKVD>ufndqOQ7%$SDrRxzjHeyvM~g2_%HBi z65(xx-tCIg7Qb)MBS_O|DK!y!e%(BNp?b!~625{_5xGVfU94t3MisK3c$y>?k{T?r zVnU0t>$4uuR;u(p!t?5rDA-x2T~`g}UdO-Bu}6>P#J0-m{S$dOgpz9lOG}1V&AqFa z>y1qES=DA<4K0{sJ4>TDl(5?kcKzw~(shKw6Fv8V*Pe2Z(Zm-A-Yp@FOp9={*3dCE z;WO(&merX~UXnEk_rv);kBZ3K7Y}9Sn;&dWRZXB@W|@o8^0?~Ja2mL(@GocgKfRqC zNIo+6^YNd<<0}gy%O`#eYT{csl*=}g_@lvMtidM_9PNZ#)A;}zEsA8w`CvbbfZre@ zLHNR|=`<|@c7k?gzh;4$L99!6ox%!1L9`#kR)tiuPW@3%OGg1E5ar*z+}={z8qr1P9ynK_!P4B{<)*9tWLhzO_C(8F1>+{5hX@ub=Uoe zTlc$%@hqr8B={xHRibV!v)3HKo%N402crXR(~4Eo0Q{<379K`aGb2l6TB*(4_hKoj zp8(e%gW8+XEd1=tC%iaagX4NQ>j}X(-2tlL%T~%^w%_X#Q2HxLhO*GGw$aX#C3w-^ zdME@(Ls3#nhkveS`GpDg9-&5WM%(L5Azw(-D-!o4z_=56l|1O;axnV$E2Nq|27C4>l2r z*49inqx?~`a|U;I)372&(q|#9zf!~I_LaeDmB}LM9QzP~vcy3U0fE_p(}?3ZwLUwk z%A21211ag$q!4*y{)5LYOsjD5-tegYy=`c~;4uX;Z%wVx)Gbu4^B;ATVHEJ`KUihO zD*s@V>Xij?sZ{@0LzyX`>3C6emKFz9zw=UqBkqIFvQCg~*_24GGO9bG7as+A+#Ihg z*BZtL_a*82i5P2($x;@Sc|6&wLAGyMxI^nhEdzpy5RpSnp(bZ|t^q?KWtssFvN!c6 z@jUzer=$F7L?ZoOD0$TfH32+bfUwl>^v4dE_%tSbD*Jx%R{2zvP$q2mqyG3B#Aeve z)M;Ljm<8Z(yjCyE7H_Zcs9V`98W*48dNp7$0BYi<|7t>*WSF#UY(($i7g%ysw==x` zcc``kO2+Iuaa%Y3%joHx2;pZYa{jeinDc2$_*U`ZVq<)W$ml;0!qcKZSdHyl`S<(* z$9d#_!YH}ERb4nVO@R)Cj-V{Q>&EXU_R@YR{es9c#s<){dRALxR0^(tOn94wpp)r} zcJwf<+{kkLubcDFN8*%=Oy_9Cn)h>#6l>+WU_&vkcsKBACW#e_q$m^V{`ZU3=9rBR z&;PGF)J1VS1Hx)>IQ2-~0>JemBQ9J8aT-2d3*mjk00#M+JvU1l@b^FO* zM}@bqwy@{X6^}|Dx318m?$|NDUr%)|G@^5cb zC>!Pkp-E-Nn}LV8my{DK)6UwhrGub@t~pp%-9ZhPm@+qH>7s{}ICu9g3K_TE=% zUS``hf!TN*8&OpCeI}PteD5eo^p&tuz$o6tWIQ zn72fJQPZ;rBgy%JUGu#UNov|pEc9Jp-4&}S%#_GHw56n&ne$3%3;&7#4NJ~>VA>{_ z3&9#04+@g?7iW^KM4N@fWx|LbO_%c#L$60eI$@KjA8uJO;IYer`fKW}rt`W<3y5Ok z1lef@uY7_!cZStE!lYLYgxf+*;&As4|BTqQ{A+3JzHD@`1lX{#teTWwa5w)ox59SG z=3SPEz8+IPx!75D`EH0t6O$?>?BLS zPFXcc?m{|d^{)-v?KpXIBhx?uYc=ZhOby5a!%9UC`~sgKyaX$#t9w!$gKG%-si z7SKwiTH})8(sS}f%{{}ZD|MKSVCDrpA9q8L0J&0^;ful49GCH1!iDSN7YiIEc~%`G zjB=A^3;@oTf~{fVi?$=m&DRT~k$+81Yglmoj1oGC$oe~~SJ2dod*G7gQY!J6WjnHI zRD%T+Z-!esDilC-#Kimsbqz z-M&GdY_;?~uS_Vo1h zN2n|@?#P=bN9lXdtH*yar>Nq1@OZ6xf{|ahK&!^gat%kbP6Ye+VN3TE(|PUva!7Kc zcq<}d$2l`+ZPf8~(NV2hOHKaTuIIt-hx?*VTdzAiwwp}Fz8cFOWaU=e*iQRQ)RF(R z{H@PKQ6TznntCUc=JC6ZdFQ|MJL*_&aR`T8KnSs*RQjd&v~QG|5_Txh>1Q_4!AJyI z2y!WhKb>2bowx6`dacu)tA4l^8TfA-Tibl#tLc6| zfXZK-j&dFMd263gTI^S*#-16-a!%(@+(Q@#LjgN0ZlSS?TfaAWH{z&PmzK#)FCSJq zc*SZNpxrTx|Fysjl_CXMxVwjqj-o&&B>&>U?slr0dpKe#Wh9KzcNr~( z3iFH|+Qr(dNuWD`-6_UmI@$aQZxP3!bxxU0Sf4wFdNh%P3ROBSl~(t{n_>Lkk5H^s zbtvu)m5$Y%a&dBsS8MI{27{o_aoO~SWM*cXLuE$}Yb^(>?b$+@9Llc$3Pix(gmQNP z4j&R@Y_XG{IydOOgc8_NHmMFSE+GpGynb6&W@hlyx5yzulW|IARAQSGfs1e&amkcK=!{YSAat%9NCX=aaE=V%(j_yZf=g1l@&XDM=r=I5qn%1HdP$=6RHI!8S4VpaZBJ$Z22g6k%vZW z>+32ta%Q;}_rgg*Gt|V~(AFkbxgb$VY^GNZl%z-Lw*}%Jx63XKBvEp~2hZx3OzQX8 zGwV3Y`8i6tb*Kxoq05eJw5`mbF1ZUC*T4ELDG~g>{7*xfsxHe^p}{=pJW*rN@z{&> znWM?>RBE(9jef*?u|JkniEm+{;p1#x@C#Se-|%*`}x$d7n}pN+d!?(P|27S zlN7$x@XO6k~3r0xwxZpSuDAvv~$;z zA#Pk1&9c=Ta&W-h>G+~ZpxpbV0A`p(utebuCrX$EY$-kq3rjA{VwP3j=*bClwU(W6 z;y)>i9dG_`_qgV&BU9z01>Sq$jl&8fZ7+THGO+vk7h&kkehTo*({%vtjSxAJBTe6O z4F5011v>hWBuQqoEkY=?35k;g8(Zptv*}PM6e$%wO64*ow?w&GOc}&+kXadk(gvea zO`tJYZ7^D4v?5LnMkT~rlPHbS3M~Xysg7ClJg*Z->NXRe=aD1{wOS2pEt{L0%+Aho zt=^>gp=>dcE_y zBuP3<5Cj1#i{lHCg?rJ&NsJR%LK@UvjbkLP6bLEsWNOZ=bkebO5`;8qAAm7ww|G_` zpeP?97a956pWPaMYtK|qouxUNgNTqcSl!Z18Z z9cyhUmWoW2r_o75}- zAE(kMZ`N;^E1Gw`eOsk2FE6vOut1U|_`Z)ZhGMZusZ{D5Xj}R^fG$YQgI4L-d5cWl zL+fA>NO58mPzUO%lo6~w(HCZr*lehDdRMxd-0>2kIPQFI8!!h!fRwTW65}`~3`3Ms zxUSnV7h3BV74CF@7h?>rQmVrM?H7!@^7W-WHY)Ph4|C+LR?71os?{oC81mFpPj#4~ zeYnm2_qDVMapLn+BBwQgT`0f93L}DVmTs=;p#I+HDy2G-@47CMhgBBm0cxi*183Cenr;Ou#&Nu8jG67%6f$feVV)@+qujGRL7+V9d{p)EsLyv@ zmrs83lPoMOu&}T|qtPIWq7D}5HHqC>zuuL#{l3qj$sT#4lzFO|+X10!waWDLG&3_Z zOioVXx^9Q2ZN~6@pJua(@B1jF4!J=P+^@C1r1uc}ttLO!+o^8694EkYDpgC}H^*_< zvu6)`_U!2!x6eE6bXYf1FBlty&ht!O8J3>!&P29z2tg1~uh-e!+@w~k5k(O~h<|c} zAh4V$D&6?IrF>vG*aZZFwV#gQ|b>5W5>| zb(@1>*k)KXwVMgF)*YMQXf#+|U1e!$iF&=>iGKm_2U0gMj^pnJLGWu)6#b=As`KW( z$(dm`ZHyGCT23oBa zjYflwjg6Cf27zA#zAL3XQ5CF|`l~Pubr^KmaT4MG&(F;>3MYHK1{}-?{@;ObwI83Jo@Ups fUF_Jgga3B`-u0z}YRY%300000NkvXXu0mjfv*0s4 diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/icons/robotbuilder16x16.png b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/icons/robotbuilder16x16.png deleted file mode 100644 index 042c16252b18bf7d5a57cd1626c5d8577b0c1f24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 538 zcmV+#0_FXQP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-ph-kQRCwBqlf7#cQ5400FWD8M@uLtw5ZwR3#zGjG?nX#wA&VkdsMxN5fDxA1 z$3O}#)WUAN*yeQ)rW0)fkpy-9DrXA~2r+vs=3`%UR=jX#hIj8h@0|PIU}gepn3>EB zN&f`^g%E1QWdDMhNfN{gLI_eq0j8r@)=Q%0y(fe~6)vMOdgc53xi-(g?qO!d!k;sU z=Md+WBvO>`6%uFxE>-~0@AvC(?>$Nq$TIFvO5A3-!A#YVrfH2T%H8W&E!GZtlf=r( z6RzF7!_&1j#vk9HFK;91li^Ve5Hq8Hb+NXiNFaQ7m diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/icons/sample.gif b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/icons/sample.gif deleted file mode 100644 index 34fb3c9d8cb7d489681b7f7aee4bdcd7eaf53610..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 983 zcmZ?wbhEHb6krfw_|CxKYUg-n!?izO{@9*?jxd%4aX0yzy`dymabz zw#(eg=y~&N&n)dZv2xzduG}5lraiApo3(c4*{Ylg5#|$JO_EEZ<^|a2`Z*=9ns7DV zy=TR&gYw*7f%auV?ip3tvjRPmcdoho{K?x$_vR?C#t5&<;~V}S*>OMCr>h}%%bLZ9 zmo3`hYEwTICo-TTCZwgTsC&VjZRgJ1eE#fBa^%9R zmmfWS@;bnyJ27HWY}kxYzv(Hl>yu;FCPlAEh+34Muq-8Rb6C)<8qA3{r2e5 z`$vyngh#H=FWlqqvnapfc5%(!sQ4v?r7J61-&eJNEN^;KTK}T7{#i-gJh%G*9vcYdwv_*~xdw!Gz4Va?T!sXyyF@8?w<>X`X=#j%uHV4GRvj@+tE@ zQ%F!a)GKcn^~8abN>4la1UNXVL;{ZWi)lEwyeatDu%Lr6;aASiLrXXW zQm#Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L00Nf)00Nf*KppAD00007bV*G`2i*n) z5()+Pajd-n00Hw!L_t(I%VS`m5HRAC{LjF^_&!=P{qJ*5>%Sj4w@aM8x{M^#-zAF8 zeC48INS4z+W(s<~@lrTJNF5U{i9fHnga5qb+6Wi$oyo-zx{3|PWsjPn%E0iS5hDz~ zRddSzdd#Q(^FH6AU-$Xi|GwlpsveLm!^ZhFot^8;mp5+}qr_#dPiOeYX!KI>pBW2= z&F{Fme!t=r`TLgh&;JkX`s@~Zzdu!yc-G3q{CC-%+9_!a3=9m6 z!s*?WUq1@_|NG1Q@)rYVD8uToUoS1xGk-ndHIaRCCK+b1Ohcg%H~ZJi9K0VLFXpVg z1rulCkbJ$E@juIgH($hlFf0rE#lXP8@b3$|JrfJV2Ds*uT5}GTw=o<%9}jVHe^6pz zU_cn~w4v(>THG@|XZUaPkNbNT0|NttP-3qv1M}+z41CN6Y@FZ9+4(+bGcYjhz!?j# ztTfD-x&Q8#y?XT>0|NuYA68~5CWikr?&MAW$-?~W4lCVbwG*6Pl3|Hzy7ckifn#ZgDZX5E_E{F z6ngE%&iR>*;Xms+Mg|53h7ai?CjY*$EMoY>v_(+!Sp{PQ!#{>00|3#{w5&$CU-$q3 N002ovPDHLkV1i5+CmH|% diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/icons/smartdashboard16x16.png b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/icons/smartdashboard16x16.png deleted file mode 100644 index 6caef2380f278398dab724e8f6c014d5dc4c944b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 493 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L00Nf)00Nf*KppAD00007bV*G`2i*!7 z5EnW7$!%@`00C`DL_t(2&y7;MiW@-?te)u^t=8<}0|`mNMPt?o{2l%c|D-Rz(1Gp1 zaIrv_7=#`UEZ=IRnQ}14A`UOOl6g?wRb8|^e0jY8{!^`E0t_-iyg&e!Lm&hMnlJkK z>(jR%JHW6f4nPDV(3tf0rVp$A^^Pi zi^ZZi1~8w`|7q!*sf9xFbUKl&s)}Tc@p{&Bsp}fROF`FltJNx{6hg>3uh;9863Lu% z8OAxcTrOd}78~R7ID}w~@!pec+qMjI?ZeWE@ekH_a! jS1M(bhd_wn_n-4$>UG_uY!Okg00000NkvXXu0mjfRNC1# diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/icons/wpi.ico b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/icons/wpi.ico deleted file mode 100644 index a6de9245f98fddcf16f6b743024218506b135c48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 894 zcmZQzU<5(|0R|u`!H~hsz#zuJz@P!dKp_SNAO?wpfCErYm>Yt@0zkrCd(E&xE*2aA z|NkEwya(c=rs~tro_xjQyRy7vK=sQP-G->SdHp@Ic1(?1);|C$04f7Y1-NYkvOj(L z)!%UeQzb+MC<}A|P*-NcL7*)_^+3fC?U-8NjsY@&T7VjX+JQbgd+HU?E==_h#{f+R zN&!^@4F`$<*+46>Iti!-h#=-5>jefE#3E!XfR;jh2QeS$BzQ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/pom.xml b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/pom.xml deleted file mode 100644 index d8a0fd24b2..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/pom.xml +++ /dev/null @@ -1,233 +0,0 @@ - - - 4.0.0 - edu.wpi.first.wpilib.plugins.core - eclipse-plugin - - - edu.wpi.first.wpilib.plugins - edu.wpi.first.wpilib.plugins - 0.1.0.qualifier - .. - - - - DEVELOPMENT - ${project.build.directory}/tools-zip - - - - - WPILib Maven Repository - http://first.wpi.edu/FRC/roborio/maven/ - - - - - - - . - - resources/configuration.properties - - true - - - - - maven-resources-plugin - 2.6 - - - copy-ant-resources-to-tools-zip - generate-sources - - copy-resources - - - ${tools-zip} - - - src/main/resources/tools-zip - - - - - - - - org.apache.maven.plugins - maven-dependency-plugin - 2.8 - - - - - fetch-jar-zip-dependencies - compile - - copy - - - - - edu.wpi.first.wpilib - RobotBuilder - 2.0.0-SNAPSHOT - ${tools-zip} - RobotBuilder.jar - - - edu.wpi.first.wpilib - SmartDashboard - 1.0.0-SNAPSHOT - ${tools-zip} - SmartDashboard.jar - - - edu.wpi.first.wpilib - sfx - zip - zip - ${tools-zip}/../ - sfx.zip - - - edu.wpi.first.wpilib.networktables - OutlineViewer - 1.0.0-SNAPSHOT - ${tools-zip} - OutlineViewer.jar - - - edu.wpi.first.wpilib - java-installer - 1.0-SNAPSHOT - ${tools-zip} - java-installer.jar - - - - false - true - - - - - - org.apache.maven.plugins - maven-antrun-plugin - 1.7 - - - - - set-version-info - - run - - process-sources - - - - - - - - - - - true - - - - - - generate-jar-zip - compile - - run - - - - - - - - - - - - - - - - org.eclipse.m2e - lifecycle-mapping - 1.0.0 - - - - - - - org.apache.maven.plugins - - - maven-dependency-plugin - - [2.8,) - - copy - - - - - - - - - - - - - - - - - - - - edu.wpi.first.wpilib - RobotBuilder - 2.0.0-SNAPSHOT - - - edu.wpi.first.wpilib - SmartDashboard - 1.0.0-SNAPSHOT - - - edu.wpi.first.wpilib - sfx - zip - LATEST - - - edu.wpi.first.wpilib.networktables - OutlineViewer - 1.0.0-SNAPSHOT - - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/resources/configuration.properties b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/resources/configuration.properties deleted file mode 100644 index cbfaca2ede..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/resources/configuration.properties +++ /dev/null @@ -1,2 +0,0 @@ -timestamp=${timestamp} -version=${version} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/WPILibCore.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/WPILibCore.java deleted file mode 100644 index 129dec5e8e..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/WPILibCore.java +++ /dev/null @@ -1,162 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.Status; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.ui.plugin.AbstractUIPlugin; -import org.osgi.framework.BundleContext; - -import edu.wpi.first.wpilib.plugins.core.ant.AntPropertiesParser; -import edu.wpi.first.wpilib.plugins.core.installer.ToolsInstaller; -import edu.wpi.first.wpilib.plugins.core.preferences.PreferenceConstants; - -/** - * The activator class controls the plug-in life cycle - */ -public class WPILibCore extends AbstractUIPlugin { - - // The plug-in ID - public static final String PLUGIN_ID = "edu.wpi.first.wpilib.plugins.core"; //$NON-NLS-1$ - - // The shared instance - private static WPILibCore plugin; - - /** - * The constructor - */ - public WPILibCore() { - } - - /* - * (non-Javadoc) - * - * @see - * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext - * ) - */ - public void start(BundleContext context) throws Exception { - super.start(context); - plugin = this; - - new ToolsInstaller(getDefaultVersion()).installIfNecessary(); - } - - /* - * (non-Javadoc) - * - * @see - * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext - * ) - */ - public void stop(BundleContext context) throws Exception { - plugin = null; - super.stop(context); - } - - /** - * Returns the shared instance - * - * @return the shared instance - */ - public static WPILibCore getDefault() { - return plugin; - } - - /** - * Returns an image descriptor for the image file at the given plug-in - * relative path - * - * @param path - * the path - * @return the image descriptor - */ - public static ImageDescriptor getImageDescriptor(String path) { - return imageDescriptorFromPlugin(PLUGIN_ID, path); - } - - public Properties getProjectProperties(IProject project) { - List streams = new ArrayList(); - try { - if (project != null) { - try { - streams.add(project.getFile("build.properties") - .getContents()); - } catch (CoreException e) { - } // No properties file - } - File file = new File(getWPILibBaseDir() + "/wpilib.properties"); - streams.add(new FileInputStream(file)); - return new AntPropertiesParser(streams).getProperties(); - } catch (Exception e) { - WPILibCore.logError("Error loading project properties.", e); - return new Properties(); - } - } - - public void saveGlobalProperties(Properties props) { - try { - props.setProperty("version", "current"); - props.store(new FileOutputStream(new File(WPILibCore.getDefault() - .getWPILibBaseDir() + "/wpilib.properties")), - "Don't add new properties, they will be deleted by the eclipse plugin."); - } catch (IOException e) { - WPILibCore.logError("Error saving global properties.", e); - } - } - - public int getTeamNumber(IProject project) { - return Integer.parseInt(getProjectProperties(project).getProperty( - "team-number", "0")); - } - - public String getTargetIP(IProject project) { - String target = getProjectProperties(project).getProperty("target"); - if (target != null) - return target; - else { - int teamNumber = getTeamNumber(project); - return "roborio-" + teamNumber + "-FRC.local"; - } - } - - public String getWPILibBaseDir() { - return System.getProperty("user.home") + "/wpilib"; - } - - public String getDefaultVersion() { - try { - Properties props = new AntPropertiesParser(WPILibCore.class.getResourceAsStream("/resources/configuration.properties")).getProperties(); - if (props.getProperty("version").startsWith("$")) { - return "DEVELOPMENT"; - } else { - return props.getProperty("version"); - } - } catch (CoreException e) { - WPILibCore.logError("Error getting properties.", e); - return "DEVELOPMENT"; - } - } - - public String getCurrentVersion() { - return getPreferenceStore() - .getString(PreferenceConstants.TOOLS_VERSION); - } - - public static void logInfo(String msg) { - getDefault().getLog().log(new Status(Status.INFO, PLUGIN_ID, Status.OK, msg, null)); - } - - public static void logError(String msg, Exception e) { - getDefault().getLog().log(new Status(Status.ERROR, PLUGIN_ID, Status.OK, msg, e)); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/actions/RunOutlineViewerAction.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/actions/RunOutlineViewerAction.java deleted file mode 100644 index d44e947312..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/actions/RunOutlineViewerAction.java +++ /dev/null @@ -1,77 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.actions; - -import java.io.File; -import java.io.FilenameFilter; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.IWorkbenchWindowActionDelegate; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; - -/** - * Our sample action implements workbench action delegate. - * The action proxy will be created by the workbench and - * shown in the UI. When the user tries to use the action, - * this delegate will be created and execution will be - * delegated to it. - * @see IWorkbenchWindowActionDelegate - */ -public class RunOutlineViewerAction implements IWorkbenchWindowActionDelegate { - /** - * The constructor. - */ - public RunOutlineViewerAction() { - } - - /** - * The action has been activated. The argument of the - * method represents the 'real' action sitting - * in the workbench UI. - * @see IWorkbenchWindowActionDelegate#run - */ - public void run(IAction action) { - File dir = new File(WPILibCore.getDefault().getWPILibBaseDir()+File.separator+"tools"); - File[] files = dir.listFiles(new FilenameFilter() { - @Override public boolean accept(File dir, String name) { - return name.startsWith("OutlineViewer") && name.endsWith(".jar"); - } - }); - if (files == null || files.length < 1) return; - String[] cmd = {"java", "-jar", files[0].getAbsolutePath()}; - try { - DebugPlugin.exec(cmd, new File(System.getProperty("user.home"))); - } catch (CoreException e) { - WPILibCore.logError("Error running OutlineViewer.", e); - } - } - - /** - * Selection in the workbench has been changed. We - * can change the state of the 'real' action here - * if we want, but this can only happen after - * the delegate has been created. - * @see IWorkbenchWindowActionDelegate#selectionChanged - */ - public void selectionChanged(IAction action, ISelection selection) { - } - - /** - * We can use this method to dispose of any system - * resources we previously allocated. - * @see IWorkbenchWindowActionDelegate#dispose - */ - public void dispose() { - } - - /** - * We will cache window object in order to - * be able to provide parent shell for the message dialog. - * @see IWorkbenchWindowActionDelegate#init - */ - public void init(IWorkbenchWindow window) { - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/actions/RunRobotBuilderAction.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/actions/RunRobotBuilderAction.java deleted file mode 100644 index a812f27d65..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/actions/RunRobotBuilderAction.java +++ /dev/null @@ -1,77 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.actions; - -import java.io.File; -import java.io.FilenameFilter; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.IWorkbenchWindowActionDelegate; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; - -/** - * Our sample action implements workbench action delegate. - * The action proxy will be created by the workbench and - * shown in the UI. When the user tries to use the action, - * this delegate will be created and execution will be - * delegated to it. - * @see IWorkbenchWindowActionDelegate - */ -public class RunRobotBuilderAction implements IWorkbenchWindowActionDelegate { - /** - * The constructor. - */ - public RunRobotBuilderAction() { - } - - /** - * The action has been activated. The argument of the - * method represents the 'real' action sitting - * in the workbench UI. - * @see IWorkbenchWindowActionDelegate#run - */ - public void run(IAction action) { - File dir = new File(WPILibCore.getDefault().getWPILibBaseDir()+File.separator+"tools"); - File[] files = dir.listFiles(new FilenameFilter() { - @Override public boolean accept(File dir, String name) { - return name.startsWith("RobotBuilder") && name.endsWith(".jar"); - } - }); - if (files == null || files.length < 1) return; - String[] cmd = {"java", "-jar", files[0].getAbsolutePath()}; - try { - DebugPlugin.exec(cmd, new File(System.getProperty("user.home"))); - } catch (CoreException e) { - WPILibCore.logError("Error running RobotBuilder.", e); - } - } - - /** - * Selection in the workbench has been changed. We - * can change the state of the 'real' action here - * if we want, but this can only happen after - * the delegate has been created. - * @see IWorkbenchWindowActionDelegate#selectionChanged - */ - public void selectionChanged(IAction action, ISelection selection) { - } - - /** - * We can use this method to dispose of any system - * resources we previously allocated. - * @see IWorkbenchWindowActionDelegate#dispose - */ - public void dispose() { - } - - /** - * We will cache window object in order to - * be able to provide parent shell for the message dialog. - * @see IWorkbenchWindowActionDelegate#init - */ - public void init(IWorkbenchWindow window) { - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/actions/RunSFXDashboardAction.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/actions/RunSFXDashboardAction.java deleted file mode 100644 index 8b184f64c8..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/actions/RunSFXDashboardAction.java +++ /dev/null @@ -1,77 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.actions; - -import java.io.File; -import java.io.FilenameFilter; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.IWorkbenchWindowActionDelegate; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; - -/** - * Our sample action implements workbench action delegate. - * The action proxy will be created by the workbench and - * shown in the UI. When the user tries to use the action, - * this delegate will be created and execution will be - * delegated to it. - * @see IWorkbenchWindowActionDelegate - */ -public class RunSFXDashboardAction implements IWorkbenchWindowActionDelegate { - /** - * The constructor. - */ - public RunSFXDashboardAction() { - } - - /** - * The action has been activated. The argument of the - * method represents the 'real' action sitting - * in the workbench UI. - * @see IWorkbenchWindowActionDelegate#run - */ - public void run(IAction action) { - File dir = new File(WPILibCore.getDefault().getWPILibBaseDir()+File.separator+"tools"+File.separator+"sfx-2014.11.01"); - File[] files = dir.listFiles(new FilenameFilter() { - @Override public boolean accept(File dir, String name) { - return name.startsWith("sfx") && name.endsWith(".jar"); - } - }); - if (files == null || files.length < 1) return; - String[] cmd = {"java", "-jar", files[0].getAbsolutePath()}; - try { - DebugPlugin.exec(cmd, new File(System.getProperty("user.home"))); - } catch (CoreException e) { - WPILibCore.logError("Error running SFX Dashboard.", e); - } - } - - /** - * Selection in the workbench has been changed. We - * can change the state of the 'real' action here - * if we want, but this can only happen after - * the delegate has been created. - * @see IWorkbenchWindowActionDelegate#selectionChanged - */ - public void selectionChanged(IAction action, ISelection selection) { - } - - /** - * We can use this method to dispose of any system - * resources we previously allocated. - * @see IWorkbenchWindowActionDelegate#dispose - */ - public void dispose() { - } - - /** - * We will cache window object in order to - * be able to provide parent shell for the message dialog. - * @see IWorkbenchWindowActionDelegate#init - */ - public void init(IWorkbenchWindow window) { - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/actions/RunSimulationSmartDashboardAction.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/actions/RunSimulationSmartDashboardAction.java deleted file mode 100644 index edbe5d5f42..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/actions/RunSimulationSmartDashboardAction.java +++ /dev/null @@ -1,77 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.actions; - -import java.io.File; -import java.io.FilenameFilter; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.IWorkbenchWindowActionDelegate; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; - -/** - * Our sample action implements workbench action delegate. - * The action proxy will be created by the workbench and - * shown in the UI. When the user tries to use the action, - * this delegate will be created and execution will be - * delegated to it. - * @see IWorkbenchWindowActionDelegate - */ -public class RunSimulationSmartDashboardAction implements IWorkbenchWindowActionDelegate { - /** - * The constructor. - */ - public RunSimulationSmartDashboardAction() { - } - - /** - * The action has been activated. The argument of the - * method represents the 'real' action sitting - * in the workbench UI. - * @see IWorkbenchWindowActionDelegate#run - */ - public void run(IAction action) { - File dir = new File(WPILibCore.getDefault().getWPILibBaseDir()+File.separator+"tools"); - File[] files = dir.listFiles(new FilenameFilter() { - @Override public boolean accept(File dir, String name) { - return name.startsWith("SmartDashboard") && name.endsWith(".jar"); - } - }); - if (files == null || files.length < 1) return; - String[] cmd = {"java", "-jar", files[0].getAbsolutePath(), "-ip", "localhost"}; - try { - DebugPlugin.exec(cmd, new File(System.getProperty("user.home"))); - } catch (CoreException e) { - WPILibCore.logError("Error running SmartDashboard.", e); - } - } - - /** - * Selection in the workbench has been changed. We - * can change the state of the 'real' action here - * if we want, but this can only happen after - * the delegate has been created. - * @see IWorkbenchWindowActionDelegate#selectionChanged - */ - public void selectionChanged(IAction action, ISelection selection) { - } - - /** - * We can use this method to dispose of any system - * resources we previously allocated. - * @see IWorkbenchWindowActionDelegate#dispose - */ - public void dispose() { - } - - /** - * We will cache window object in order to - * be able to provide parent shell for the message dialog. - * @see IWorkbenchWindowActionDelegate#init - */ - public void init(IWorkbenchWindow window) { - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/actions/RunSmartDashboardAction.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/actions/RunSmartDashboardAction.java deleted file mode 100644 index 94c3a03280..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/actions/RunSmartDashboardAction.java +++ /dev/null @@ -1,77 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.actions; - -import java.io.File; -import java.io.FilenameFilter; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.IWorkbenchWindowActionDelegate; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; - -/** - * Our sample action implements workbench action delegate. - * The action proxy will be created by the workbench and - * shown in the UI. When the user tries to use the action, - * this delegate will be created and execution will be - * delegated to it. - * @see IWorkbenchWindowActionDelegate - */ -public class RunSmartDashboardAction implements IWorkbenchWindowActionDelegate { - /** - * The constructor. - */ - public RunSmartDashboardAction() { - } - - /** - * The action has been activated. The argument of the - * method represents the 'real' action sitting - * in the workbench UI. - * @see IWorkbenchWindowActionDelegate#run - */ - public void run(IAction action) { - File dir = new File(WPILibCore.getDefault().getWPILibBaseDir()+File.separator+"tools"); - File[] files = dir.listFiles(new FilenameFilter() { - @Override public boolean accept(File dir, String name) { - return name.startsWith("SmartDashboard") && name.endsWith(".jar"); - } - }); - if (files == null || files.length < 1) return; - String[] cmd = {"java", "-jar", files[0].getAbsolutePath()}; - try { - DebugPlugin.exec(cmd, new File(System.getProperty("user.home"))); - } catch (CoreException e) { - WPILibCore.logError("Error running SmartDashboard.", e); - } - } - - /** - * Selection in the workbench has been changed. We - * can change the state of the 'real' action here - * if we want, but this can only happen after - * the delegate has been created. - * @see IWorkbenchWindowActionDelegate#selectionChanged - */ - public void selectionChanged(IAction action, ISelection selection) { - } - - /** - * We can use this method to dispose of any system - * resources we previously allocated. - * @see IWorkbenchWindowActionDelegate#dispose - */ - public void dispose() { - } - - /** - * We will cache window object in order to - * be able to provide parent shell for the message dialog. - * @see IWorkbenchWindowActionDelegate#init - */ - public void init(IWorkbenchWindow window) { - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/ant/AntPropertiesParser.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/ant/AntPropertiesParser.java deleted file mode 100644 index 6ea0e180f5..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/ant/AntPropertiesParser.java +++ /dev/null @@ -1,83 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.ant; - -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.Status; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; - -public class AntPropertiesParser { - List files; - - public AntPropertiesParser(List files) { - this.files = files; - } - - @SuppressWarnings("serial") - public AntPropertiesParser(final InputStream file) { - this(new ArrayList() {{add(file);}}); - } - - public Properties getProperties() throws CoreException { - return getProperties(null); - } - - - public Properties getProperties(Properties defaults) throws CoreException { - Properties props = defaults; - - for (int i = files.size()-1; i >= 0; i--) { - props = getPropertyFile(files.get(i), props); - } - - return props; - } - - public Properties getPropertyFile(InputStream resource, Properties defaults) throws CoreException { - Properties props; - if (defaults == null) props = new Properties(); - else props = new Properties(defaults); - try { - props.load(resource); - } catch (IOException e) { - WPILibCore.logError("Error loading property file: "+resource, e); - return null; - } - - // TODO: Improve parsing of ant properties - boolean overflow = false; - for (Object key : props.keySet().toArray()) { - int count = 0; - while (props.getProperty((String) key).toString().contains("$") && count < 10) { - Pattern pattern = Pattern.compile( "\\$\\{(.*?)\\}" ); - Matcher matcher = pattern.matcher( props.getProperty((String) key).toString() ); - StringBuffer sb = new StringBuffer(); - while ( matcher.find() ) { - String prop = matcher.group().substring(2, matcher.group().length()-1); - if (props.getProperty(prop) != null) { - matcher.appendReplacement(sb, Matcher.quoteReplacement(props.getProperty(prop))); - } else if (prop.equals("user.home")) { - matcher.appendReplacement(sb, Matcher.quoteReplacement(System.getProperty("user.home"))); - } else { - matcher.appendReplacement(sb, Matcher.quoteReplacement(matcher.group())); - } - } - matcher.appendTail( sb ); - props.setProperty((String) key, sb.toString()); - - count++; - } - if (count >= 50) overflow = true; - } - if (overflow) throw new CoreException(new Status(0, "WPI", "Could not parse build.properties file")); - - return props; - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/installer/AbstractInstaller.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/installer/AbstractInstaller.java deleted file mode 100644 index a597bdec30..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/installer/AbstractInstaller.java +++ /dev/null @@ -1,280 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.installer; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.zip.ZipEntry; -import java.util.zip.ZipInputStream; - -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.jface.dialogs.MessageDialog; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; - -public abstract class AbstractInstaller { - protected File installLocation; - protected String version, installedVersion; - - public AbstractInstaller(String version, String installedVersion, String path) { - this.installLocation = new File(path); - this.version = version; - this.installedVersion = installedVersion; - } - - /** - * @return The name of the feature being installed. - */ - protected abstract String getFeatureName(); - - /** - * Update the installed version to the latest version. - * @param version The latest version installed. - */ - protected abstract void updateInstalledVersion(String version); - - /** - * @return The input stream to the zip file being installed. - */ - protected abstract InputStream getInstallResourceStream(); - - /** - * - * @param sourcePath the file location of the zip file EX "/resources/simuation.zip" - * @param destinationPath the file location to unzip into EX "/home/peter/wpilib/simulation/plugins" - */ - public void installIfNecessary(String sourcePath, String destinationPath){ - //we're installing from this directory - InputStream sourceStream; - try { - sourceStream = new FileInputStream(sourcePath); - File destFile = new File(destinationPath); - installIfNecessary(sourceStream, destFile); - } catch (FileNotFoundException e) { - WPILibCore.logInfo("source zip file was not found: "+sourcePath); - } - } - - /** - * This function will delete an old wpilib subfolder if necessary and then copy - * the resource stream to the intended directory. - * - * @throws InstallException if bad things happen ... - */ - public void installIfNecessary(){ - installIfNecessary(getInstallResourceStream(), installLocation); - } - - /** - * I'm thinking maybe instead of final things, - * create a UnzipJob class to extend Job and have these as parameters to the constructor* - */ - public void installIfNecessary(final InputStream sourceStream,final File destination) { - final Job installJob = new Job("Install " + getFeatureName()) { - - @Override - protected IStatus run(IProgressMonitor monitor) { - monitor.beginTask(getTaskMessage(), IProgressMonitor.UNKNOWN); - WPILibCore.logInfo("Installing "+getFeatureName()+" if necessary"); - - if (!isInstalled()) { - WPILibCore.logInfo("Install necessary for " + getFeatureName()); - try { - install(sourceStream,destination); - } catch (InstallException e) { - WPILibCore.logError("Error installing "+getFeatureName(), e); - return new Status(IStatus.ERROR, WPILibCore.PLUGIN_ID, - getErrorMessage(e)); - } - } - - updateInstalledVersion(version); - WPILibCore.logInfo("Installed" + getFeatureName()); - - return Status.OK_STATUS; - } - - private String getErrorMessage(InstallException ex) { - String message = "Unable to install " + getFeatureName(); - if (ex.getCause() != null) { - message += ": " + ex.getCause().getMessage(); - } else if (ex.getMessage() != null) { - message += ": " + ex.getMessage(); - } - - message += ". See console for details."; - return message; - } - - private String getTaskMessage() { - try { - return "Extracting to " + installLocation.getCanonicalPath(); - } catch (IOException ex) { - WPILibCore.logError("installIfNecessary().getTaskMessage()", ex); - return "Extracting"; - } - } - }; - - installJob.setUser(true); - installJob.setRule(ResourcesPlugin.getWorkspace().getRuleFactory().buildRule()); - installJob.schedule(); - } - - /** - * - * This function has been updated to guarantee that the wpilib folder date - * is older than the jar file being run, which ensures up to date tools. - * - * @return True for is there and newer, false otherwise. - */ - protected boolean isInstalled() { - return installLocation.exists() && !version.contains("DEVELOPMENT") && version.equals(installedVersion); - } - - /** - * - * @TODO this function is very long and complicated. If all it does is unzip, it shouldn't be so hard. - * - * @param sourceStream input stream of zip file - * @param destination desired location for output of unzipping - * @throws InstallException - */ - protected void install(InputStream sourceStream, File destination) throws InstallException { - if(destination.exists()) { - if(!removeFileHandler(destination, true)) { - MessageDialog.openError(null, "Error", - String.format("Could not update the old wpilib folder.%n" - + "Please close any WPILib tools and restart Eclipse.")); - } - - //removeFileHandler(installLocation, false); - } - - destination.mkdirs(); - final String osName = System.getProperty("os.name"); - try { - // Unix-like OSes must preserve the executable bit; call unzip - if (osName.startsWith("Mac OS X") || osName.startsWith("Linux")) { - final File tmpFile = File.createTempFile(getFeatureName()+"-", ".zip"); - try { - // Copy to temporary file - try (final InputStream zip = sourceStream; - final FileOutputStream fout = new FileOutputStream(tmpFile)) { - copyStreams(zip, fout); - } - - // Call 'unzip' - final String[] cmd = {"unzip", "-q", "-o", tmpFile.getAbsolutePath(), "-d", destination.getAbsolutePath()}; - WPILibCore.logInfo("unzip "+tmpFile.getAbsolutePath()+" -d "+destination.getAbsolutePath()); - final Process unzipProcess = DebugPlugin.exec(cmd, destination); - try (final InputStream is = unzipProcess.getInputStream()) { - copyStreams(is, System.out); // Copy output to console - } - - // Check result - final int exitCode = unzipProcess.waitFor(); - if (exitCode > 1 || exitCode < 0) { // Exit code 1 indicates success with warnings - throw new InstallException("Unzip process failed with code " + exitCode); - } - } finally { - tmpFile.delete(); - } - } else { - ZipInputStream zip = new ZipInputStream(sourceStream); - ZipEntry entry = zip.getNextEntry(); - while (entry != null) { - WPILibCore.logInfo("\tZipEntry " + entry + ": " + entry.getSize()); - File f = new File(destination, entry.getName()); - if (entry.isDirectory()) { - f.mkdirs(); - } else { - FileOutputStream fo = new FileOutputStream(f); - copyStreams(zip, fo); - fo.close(); - } - - zip.closeEntry(); - entry = zip.getNextEntry(); - } - zip.close(); - } - } catch (IOException | CoreException | InterruptedException ex) { - throw new InstallException("Install encountered a problem", ex); - } - } - - - private static void copyStreams(InputStream source, OutputStream destination) throws IOException { - byte[] buffer = new byte[1024]; - int len; - - while((len = source.read(buffer)) >= 0){ - destination.write(buffer,0,len); - } - } - - /** - * Recursively remove all of the files and folders described by this file handler. - * - * @param file The file to remove - * @param testRun True to just test if the files can be deleted - * @return True if this and all subFiles were removed, false otherwise. - */ - private static boolean removeFileHandler(File file, boolean testRun) { - // if normal files (data files and the like) - if(file.isFile()) { - if(testRun) return file.getParentFile().canWrite(); - else return file.delete(); - } - // if folders - else if(file.isDirectory()) { - for(File f : file.listFiles()) { - if(!removeFileHandler(f, testRun)) - return false; - } - if(testRun) return file.getParentFile().canWrite(); - else return file.delete(); - } - // I'm not sure what to do if the file is not normal or a directory ... - else return false; - } - - /** - * Indicates that an attempt to install a resource failed. - */ - private static class InstallException extends Exception { - private static final long serialVersionUID = 4883122446098399588L; - - /** - * @see Exception#Exception() - */ - @SuppressWarnings("unused") - public InstallException() { - super(); - } - - /** - * @see Exception#Exception(String) - */ - public InstallException(String message) { - super(message); - } - - /** - * @see Exception#Exception(String, Throwable) - */ - public InstallException(String message, Throwable cause) { - super(message, cause); - } - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/installer/ToolsInstaller.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/installer/ToolsInstaller.java deleted file mode 100644 index 4dff87bcbc..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/installer/ToolsInstaller.java +++ /dev/null @@ -1,31 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.installer; - -import java.io.InputStream; -import org.eclipse.jface.preference.IPreferenceStore; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; -import edu.wpi.first.wpilib.plugins.core.preferences.PreferenceConstants; - -public class ToolsInstaller extends AbstractInstaller { - - public ToolsInstaller(String version) { - super(version, WPILibCore.getDefault().getPreferenceStore().getString(PreferenceConstants.TOOLS_VERSION), WPILibCore.getDefault().getWPILibBaseDir() + "/tools"); - } - - @Override - protected String getFeatureName() { - return "tools"; - } - - @Override - protected void updateInstalledVersion(String version) { - IPreferenceStore prefs = WPILibCore.getDefault().getPreferenceStore(); - prefs.setValue(PreferenceConstants.TOOLS_VERSION, version); - - } - - @Override - protected InputStream getInstallResourceStream() { - return ToolsInstaller.class.getResourceAsStream("/resources/tools.zip"); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/launching/AntLauncher.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/launching/AntLauncher.java deleted file mode 100644 index c20456767b..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/launching/AntLauncher.java +++ /dev/null @@ -1,148 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.launching; - -import java.io.File; -import java.util.HashSet; -import java.util.Set; - -import org.eclipse.ant.internal.ui.launchConfigurations.AntLaunchShortcut; -import org.eclipse.ant.launching.IAntLaunchConstants; -import org.eclipse.core.externaltools.internal.IExternalToolConstants; -import org.eclipse.core.runtime.Path; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunch; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; -import org.eclipse.debug.core.ILaunchManager; -import org.eclipse.debug.ui.IDebugUIConstants; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.console.IConsoleConstants; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; - -/** - * Contains functions to launch ant scripts while having the output sent to the - * console. Allows for the use of arguments, the specification of targets, and - * the choice of launch modes - * - * @author Ryan O'Meara - */ -@SuppressWarnings("restriction") -public class AntLauncher { - private static boolean installing = false; - - /** - * Runs an ant script's target's with the given arguments, in the given launch mode - * @param antScript A java.io.File representation of the ant file to execute - * @param targets A String of the ant targets to run. For multiple targets, - * format if "target1,target2". For no targets, this argument can be null. This - * method will assume output should be sent to the console, same as calling - * runAntFile(antScript, targets, arguments, mode, true) - * @param arguments A String of arguments to run the file with. Format is - * "-argument1 -argument2". For no arguments, this argument can be null - * @param mode String, either "run" or "debug". If an invalid input is given, - * defaults to "run" - * @return The ILaunch started, or null if it failed to start - */ - public static ILaunch runAntFile(File antScript, String targets, String arguments, String mode){ - return runAntFile(antScript, targets, arguments, mode, true); - } - - /** - * Runs an ant script's target's with the given arguments, in the given launch mode - * @param antScript A java.io.File representation of the ant file to execute - * @param targets A String of the ant targets to run. For multiple targets, - * format if "target1,target2". For no targets, this argument can be null. Allows - * choice of outputting to the console - * @param arguments A String of arguments to run the file with. Format is - * "-argument1 -argument2". For no arguments, this argument can be null - * @param mode String, either "run" or "debug". If an invalid input is given, - * defaults to "run" - * @param outputToConsole If true, output will be sent to console, if false it will not - * @return The ILaunch started, or null if it failed to start - */ - public static ILaunch runAntFile(File antScript, String targets, String arguments, String mode, boolean outputToConsole){ - //Input error checking - if((mode == null)||(!mode.equalsIgnoreCase(ILaunchManager.DEBUG_MODE))){mode = ILaunchManager.RUN_MODE;} //Launcher only accepts run or debug - if((targets != null)&&(targets.equalsIgnoreCase(""))){targets = null;} //Standardize representation of "none" - if((arguments != null)&&(arguments.equalsIgnoreCase(""))){arguments = null;} - - if(antScript.getAbsolutePath().indexOf("install.xml") != -1){ - installing = true; - }else{ - installing = false; - } - - ILaunch ret = null; - - try{ - - //Show the console - if(outputToConsole){ - try{ - final IWorkbenchPage activePage = PlatformUI.getWorkbench() - .getActiveWorkbenchWindow() - .getActivePage(); - activePage.showView(IConsoleConstants.ID_CONSOLE_VIEW); - }catch(Exception e){} - } - - //Get an ant launch config setup to use eclipse VM - which users will setup to be the jdk, - //allowing the use of javac. Also sets the location of the file to execute - ILaunchConfiguration launcher = AntLaunchShortcut.createDefaultLaunchConfiguration(new Path(antScript.getAbsolutePath()), null); - - //Get copy that can be edited - ILaunchConfigurationWorkingCopy workingCopy = launcher.getWorkingCopy(); - - //Prevent this configuration from appearing in history or dialogs - workingCopy.setAttribute(ILaunchManager.ATTR_PRIVATE, false); - - //Setup to show output on console - if(outputToConsole){ - workingCopy.setAttribute(DebugPlugin.ATTR_CAPTURE_OUTPUT, true); - workingCopy.setAttribute(IExternalToolConstants.ATTR_SHOW_CONSOLE, true); - }else{ - workingCopy.setAttribute(DebugPlugin.ATTR_CAPTURE_OUTPUT, false); - workingCopy.setAttribute(IExternalToolConstants.ATTR_SHOW_CONSOLE, false); - } - - - workingCopy.setAttribute(IDebugUIConstants.ATTR_LAUNCH_IN_BACKGROUND, true); - - if(targets != null){ - workingCopy.setAttribute(IAntLaunchConstants.ATTR_ANT_TARGETS, targets); - } - - if(arguments != null){ - workingCopy.setAttribute(IExternalToolConstants.ATTR_TOOL_ARGUMENTS, arguments); - } - - if(mode.equals(ILaunchManager.DEBUG_MODE)){ - Set modes = new HashSet(); - modes.add(ILaunchManager.DEBUG_MODE); - workingCopy.addModes(modes); - } - - //Save/assert all changes - launcher = workingCopy.doSave(); - - //Launch the modified configuration in the specified mode - try { - ret = launcher.launch(mode, null, true, true); - } catch(Exception e) { - //Does not need Output, handled and resolved internally - WPILibCore.logError("Error running launch.", e); - return null; - } - } catch(Exception e) { - WPILibCore.logError("Error running ant file", e); - return null; - } - - return ret; - } - - public static boolean isInstalling(){ - return installing; - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/launching/SimulationNotification.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/launching/SimulationNotification.java deleted file mode 100644 index c1d2756e2b..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/launching/SimulationNotification.java +++ /dev/null @@ -1,40 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.launching; - -import java.awt.Desktop; -import java.io.File; -import java.io.IOException; -import java.lang.System; -import java.net.URI; -import java.net.URISyntaxException; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.jface.dialogs.MessageDialog; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; - -public class SimulationNotification { - private static final String URL = "https://wpilib.screenstepslive.com/s/4485/m/23353"; - private static final String SIMULATION_UNSUPPORTED_MSG = - "Simulation may not be support on your operating system.\n" + - "For more information see: " + URL; - - public static void showUnsupported() { - String title = "Simulation Unsupported"; - String message = SIMULATION_UNSUPPORTED_MSG; - MessageDialog.openError(null, title, message); - try { - Desktop.getDesktop().browse(new URI(URL)); - } catch (IOException e) { - WPILibCore.logError("Can't open "+URL, e); - } catch (URISyntaxException e) { - WPILibCore.logError("Can't open "+URL, e); - } - } - - public static boolean supportsSimulation() { - String os = System.getProperty("os.name"); - //for now this is good enough, but we still need better handling if they have this OS but have not installed FRCSim - return (os.equals("Windows 8") || os.equals("Windows 7") || os.equals("Linux") || os.equals("Windows 8.1")); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/nature/FRCProjectNature.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/nature/FRCProjectNature.java deleted file mode 100644 index 085ee93420..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/nature/FRCProjectNature.java +++ /dev/null @@ -1,97 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.nature; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IProjectNature; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IStatus; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; - - -/** - * Project nature which configures any project which is given it to be an - * FRC Project, and designates it so FRC options will be enabled to act on - * it - * - */ -public class FRCProjectNature implements IProjectNature { - - public static final String FRC_PROJECT_NATURE = - "edu.wpi.first.wpilib.plugins.core.nature.FRCProjectNature"; - - - private IProject internalProject; - - /** - * IStatus representing a failed configuration attempt - * - * @author Ryan O'Meara - */ - private class FRCProjectFailedStatus implements IStatus{ - String message; - - public FRCProjectFailedStatus(String message){ - this.message = message; - } - - @Override - public IStatus[] getChildren() {return null;} - - @Override - public int getCode() {return 0;} - - @Override - public Throwable getException() {return null;} - - @Override - public String getMessage() {return message;} - - @Override - public String getPlugin() {return WPILibCore.PLUGIN_ID;} - - @Override - public int getSeverity() {return ERROR;} - - @Override - public boolean isMultiStatus() {return false;} - - @Override - public boolean isOK() {return false;} - - @Override - public boolean matches(int severityMask) { - if((severityMask & ERROR) == ERROR){return true;} - return false; - } - } - - public FRCProjectNature(){ - internalProject = null; - } - - @Override - public void configure() throws CoreException { - if(internalProject == null){ - throw new CoreException( - new FRCProjectFailedStatus("No project set")); - } - } - - @Override - public void deconfigure() throws CoreException { - if(internalProject == null){ - throw new CoreException( - new FRCProjectFailedStatus("No project set")); - } - } - - @Override - public IProject getProject() { - return internalProject; - } - - @Override - public void setProject(IProject project) { - internalProject = project; - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/preferences/ComboFieldEditor.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/preferences/ComboFieldEditor.java deleted file mode 100644 index 789d6c981c..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/preferences/ComboFieldEditor.java +++ /dev/null @@ -1,69 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.preferences; - -import java.util.List; - -import org.eclipse.jface.preference.FieldEditor; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; - -public class ComboFieldEditor extends FieldEditor { - private List choices; - private Composite parent; - Combo comboDropDown; - - public ComboFieldEditor(String preference, String label, Composite parent, List choices) { - super(preference, label, parent); - this.choices = choices; - for (String choice : choices) { - comboDropDown.add(choice); - } - } - - public void setChoice(String item) { - comboDropDown.select(choices.indexOf(item)); - } - - public String getChoice() { - return choices.get(comboDropDown.getSelectionIndex()); - } - - @Override protected void adjustForNumColumns(int numColumns) { - ((GridData) parent.getLayoutData()).horizontalSpan = numColumns; - } - - @Override protected void doFillIntoGrid(Composite parent, int numColumns) { - this.parent = parent; - - GridData gd = new GridData(GridData.FILL_HORIZONTAL); - gd.horizontalSpan = numColumns; - parent.setLayoutData(gd); - - Label label = getLabelControl(parent); - label.setText(getLabelText()); - - comboDropDown = new Combo(parent, SWT.DROP_DOWN | SWT.BORDER); - gd = new GridData(GridData.FILL_HORIZONTAL); - comboDropDown.setLayoutData(gd); - } - - @Override protected void doLoad() { - String item = getPreferenceStore().getString(getPreferenceName()); - setChoice(item); - } - - @Override protected void doLoadDefault() { - String item = getPreferenceStore().getDefaultString(getPreferenceName()); - setChoice(item); - } - - @Override protected void doStore() { - getPreferenceStore().setValue(getPreferenceName(), getChoice()); - } - - @Override public int getNumberOfControls() { - return 2; - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/preferences/PreferenceConstants.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/preferences/PreferenceConstants.java deleted file mode 100644 index 533a5e54b3..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/preferences/PreferenceConstants.java +++ /dev/null @@ -1,10 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.preferences; - -/** - * Constant definitions for plug-in preferences - */ -public class PreferenceConstants { - public static final String TEAM_NUMBER = "teamNumberPreference"; - public static final String TOOLS_VERSION = "toolsVersionPreference"; - public static final String UPDATE_TOOLS_VERSION = "udpateToolsVersionPreference"; -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/preferences/PreferenceInitializer.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/preferences/PreferenceInitializer.java deleted file mode 100644 index 20d88c7ce1..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/preferences/PreferenceInitializer.java +++ /dev/null @@ -1,26 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.preferences; - -import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer; -import org.eclipse.jface.preference.IPreferenceStore; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; - -/** - * Class used to initialize default preference values. - */ -public class PreferenceInitializer extends AbstractPreferenceInitializer { - - /* - * (non-Javadoc) - * - * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences() - */ - public void initializeDefaultPreferences() { - IPreferenceStore store = WPILibCore.getDefault().getPreferenceStore(); - store.setDefault(PreferenceConstants.TEAM_NUMBER, - WPILibCore.getDefault().getProjectProperties(null).getProperty("team-number", "0")); - String val = store.getString(PreferenceConstants.TOOLS_VERSION); - if (!store.contains(PreferenceConstants.TOOLS_VERSION) && val != null) - store.setValue(PreferenceConstants.TOOLS_VERSION, "none"); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/preferences/WPILibPreferencePage.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/preferences/WPILibPreferencePage.java deleted file mode 100644 index 5ad346f1ff..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/preferences/WPILibPreferencePage.java +++ /dev/null @@ -1,98 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.preferences; - -import java.io.File; -import java.io.FileFilter; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Properties; - -import org.eclipse.jface.preference.BooleanFieldEditor; -import org.eclipse.jface.preference.FieldEditorPreferencePage; -import org.eclipse.jface.preference.IntegerFieldEditor; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchPreferencePage; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; - -/** - * This class represents a preference page that - * is contributed to the Preferences dialog. By - * subclassing FieldEditorPreferencePage, we - * can use the field support built into JFace that allows - * us to create a page that is small and knows how to - * save, restore and apply itself. - *

- * This page is used to modify preferences only. They - * are stored in the preference store that belongs to - * the main plug-in class. That way, preferences can - * be accessed directly via the preference store. - */ - -public class WPILibPreferencePage - extends FieldEditorPreferencePage - implements IWorkbenchPreferencePage { - IntegerFieldEditor teamNumberEditor; - private ComboFieldEditor toolsVersionEditor; - private BooleanFieldEditor autoUpdateEditor; - - public WPILibPreferencePage() { - super(GRID); - setPreferenceStore(WPILibCore.getDefault().getPreferenceStore()); - setDescription("A preference page for changing all workspace level settings."); - } - - /** - * Creates the field editors. Field editors are abstractions of - * the common GUI blocks needed to manipulate various types - * of preferences. Each field editor knows how to save and - * restore itself. - */ - public void createFieldEditors() { - teamNumberEditor = new IntegerFieldEditor(PreferenceConstants.TEAM_NUMBER, - "&Team Number:", getFieldEditorParent()); - addField(teamNumberEditor); - toolsVersionEditor = new ComboFieldEditor(PreferenceConstants.TOOLS_VERSION, - "&Tools Version:", getFieldEditorParent(), getInstalledVersions()); - addField(toolsVersionEditor); - autoUpdateEditor = new BooleanFieldEditor(PreferenceConstants.UPDATE_TOOLS_VERSION, - "&Auto Update Tools Version", getFieldEditorParent()); - addField(autoUpdateEditor); - } - - private List getInstalledVersions() { - File[] dirs = new File(WPILibCore.getDefault().getWPILibBaseDir()+File.separator+"tools") - .listFiles(new FileFilter() { - @Override public boolean accept(File f) { - return f.isDirectory(); - } - }); - List versions = new ArrayList(); - for (File dir : dirs) { - versions.add(dir.getName()); - } - Collections.sort(versions); - return versions; - } - - /* (non-Javadoc) - * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench) - */ - public void init(IWorkbench workbench) { - WPILibCore.logInfo("Preferences initialized."); - Properties props = WPILibCore.getDefault().getProjectProperties(null); - getPreferenceStore().setValue(PreferenceConstants.TEAM_NUMBER, - Integer.parseInt(props.getProperty("team-number", "0"))); - } - - @Override public void performApply() { - performOk(); - } - - @Override public boolean performOk() { - Properties props = WPILibCore.getDefault().getProjectProperties(null); - props.setProperty("team-number", teamNumberEditor.getStringValue()); - WPILibCore.getDefault().saveGlobalProperties(props); - return super.performOk(); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/ExampleWizard.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/ExampleWizard.java deleted file mode 100644 index ce7bc890ff..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/ExampleWizard.java +++ /dev/null @@ -1,90 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.wizards; - -import java.net.URL; -import java.util.List; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.wizard.IWizardPage; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.ui.INewWizard; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchWizard; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; - -public abstract class ExampleWizard extends Wizard implements INewWizard { - private ExampleWizardChoicePage page1; - private IWizardPage page2; - protected ISelection selection; - private TeamNumberPage teamNumberPage; - - /** - * Constructor for SampleNewWizard. - */ - public ExampleWizard() { - super(); - setNeedsProgressMonitor(true); - } - - /** - * The worker method. It will find the container, create the - * file if missing or just replace its contents, and open - * the editor on the newly created file. - */ - protected abstract void doFinish(IExampleProject ex, String teamNumber) throws CoreException; - - protected abstract IWizardPage getDetailsPage(INewProjectInfo info); - - public abstract IExampleProject makeExampleProject(String name, String description, - List tags, String world, List folders, List files); - - public abstract URL getResourceURL(); - - public abstract String getXMLFile(); - - protected TeamNumberPage getTeamNumberPage() { - return teamNumberPage; - } - - /** - * Adding the page to the wizard. - */ - - public void addPages() { - if (TeamNumberPage.needsTeamNumberPage()) { - teamNumberPage = new TeamNumberPage(selection); - addPage(teamNumberPage); - } - page1 = new ExampleWizardChoicePage(this, selection); - addPage(page1); - page2 = getDetailsPage(page1); - addPage(page2); - } - - /** - * This method is called when 'Finish' button is pressed in - * the wizard. We will create an operation and run it - * using wizard as execution context. - */ - public boolean performFinish() { - try { - doFinish(page1.getExampleProject(), TeamNumberPage.getTeamNumberFromPage(teamNumberPage)); - } catch (CoreException e) { - WPILibCore.logError("Error finishing example.", e); - MessageDialog.openError(getShell(), "Error", e.getMessage()); - return false; - } - return true; - } - /** - * We will accept the selection in the workbench to see if - * we can initialize from it. - * @see IWorkbenchWizard#init(IWorkbench, IStructuredSelection) - */ - public void init(IWorkbench workbench, IStructuredSelection selection) { - this.selection = selection; - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/ExampleWizardChoicePage.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/ExampleWizardChoicePage.java deleted file mode 100644 index 8bbdd2d106..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/ExampleWizardChoicePage.java +++ /dev/null @@ -1,266 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.wizards; - -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.List; - -import javax.swing.event.ChangeListener; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.eclipse.jface.dialogs.IDialogPage; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.swt.SWT; -import org.eclipse.swt.browser.Browser; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Tree; -import org.eclipse.swt.widgets.TreeItem; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; - -/** - * The "New" wizard page allows setting the container for the new file as well - * as the file name. The page will only accept file name without the extension - * OR with the extension that matches the expected one (mpe). - */ - -public class ExampleWizardChoicePage extends WizardPage implements INewProjectInfo { - private Tree exampleTree; - private Browser descriptionText; - private IExampleProject selectedExample; - private ExampleWizard parent; - private ChangeListener listener; - - /** - * Constructor for SampleNewWizardPage. - * - * @param pageName - */ - public ExampleWizardChoicePage(ExampleWizard parent, ISelection selection) { - super("wizardPage"); - this.parent = parent; - setTitle("Select Example Project to Create"); - setDescription("This wizard creates a new example project based on your selection."); - } - - /** - * @see IDialogPage#createControl(Composite) - */ - public void createControl(Composite parent) { - Composite container = new Composite(parent, SWT.NULL); - GridLayout layout = new GridLayout(); - container.setLayout(layout); - layout.numColumns = 2; - layout.verticalSpacing = 9; - - exampleTree = new Tree(container, SWT.BORDER); - GridData gd = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL); - gd.heightHint = 400; - exampleTree.setLayoutData(gd); - exampleTree.addSelectionListener(new SelectionListener() { - @Override - public void widgetSelected(SelectionEvent arg0) { - dialogChanged(); - } - @Override - public void widgetDefaultSelected(SelectionEvent arg0) { - dialogChanged(); - } - }); - - descriptionText = new Browser(container, SWT.BORDER); - gd = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL); - gd.heightHint = 400; - gd.widthHint = 300; - descriptionText.setLayoutData(gd); - - initialize(); - dialogChanged(); - setControl(container); - } - - public String getName() { - if (selectedExample != null) { - return selectedExample.getName(); - } - return ""; - } - - public String getWorld() { - if (selectedExample != null) { - return selectedExample.getWorld(); - } - return ""; - } - - /** - * Tests if the current workbench selection is a suitable container to use. - */ - - private void initialize() { - Document doc = loadXMLResource(parent.getXMLFile()); - - // Generate all of the tags - List tags = new ArrayList(); - NodeList nList = doc.getElementsByTagName("tagDescription"); - for (int i = 0; i < nList.getLength(); i++) { - if (nList.item(i).getNodeType() == Node.ELEMENT_NODE) { - tags.add(generateTagFromElement((Element) nList.item(i))); - } - } - - // Generate all of the example projects - List examples = new ArrayList(); - nList = doc.getElementsByTagName("example"); - for (int i = 0; i < nList.getLength(); i++) { - if (nList.item(i).getNodeType() == Node.ELEMENT_NODE) { - examples.add(generateExampleFromElement((Element) nList.item(i))); - } - } - - WPILibCore.logInfo(examples.toString()); - WPILibCore.logInfo(tags.toString()); - - // Generate the tags tree - for (Tag tag : tags) { - TreeItem tagItem = new TreeItem(exampleTree, SWT.NONE); - tagItem.setData(tag); - tagItem.setText(tag.getName()); - for (IExampleProject ex : examples) { - if (ex.getTags().contains(tag.getName())) { - TreeItem exItem = new TreeItem(tagItem, SWT.NONE); - exItem.setData(ex); - exItem.setText(ex.getName()); - } - } - tagItem.setExpanded(true); - } - } - - /** - * Ensures that both text fields are set. - */ - private void dialogChanged() { - if (exampleTree.getSelection().length > 0) { - Object selectedData = exampleTree.getSelection()[0].getData(); - if (selectedData instanceof IExampleProject) { - IExampleProject example = (IExampleProject) selectedData; - descriptionText.setText(example.getContent()); - selectedExample = example; - } else if (selectedData instanceof Tag) { - Tag tag = (Tag) selectedData; - descriptionText.setText(tag.getContent()); - selectedExample = null; - } else selectedExample = null; - } - - if (selectedExample == null) { - updateStatus("Must select a valid example before continuing."); - return; - } - - listener.stateChanged(null); - updateStatus(null); - } - - private void updateStatus(String message) { - setErrorMessage(message); - setPageComplete(message == null); - } - - private Document loadXMLResource(String filename) { - final URL installURL = parent.getResourceURL(); - URL url = null; - try { - url = new URL(installURL, filename); - } catch (final MalformedURLException e) { - WPILibCore.logError("loadXMLResource()", e); - return null; - } - DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder dBuilder; - Document doc; - try { - dBuilder = dbFactory.newDocumentBuilder(); - doc = dBuilder.parse(url.openStream()); - } catch (ParserConfigurationException e) { - WPILibCore.logError("Error parsing "+filename, e); - return null; - } catch (SAXException e) { - WPILibCore.logError("SAX issue with "+filename, e); - return null; - } catch (IOException e) { - WPILibCore.logError("Error reading "+filename, e); - return null; - } - doc.getDocumentElement().normalize(); - return doc; - } - - private Tag generateTagFromElement(Element element) { - String name = element.getElementsByTagName("name").item(0).getTextContent(); - String description = element.getElementsByTagName("description").item(0).getTextContent(); - return new Tag(name, description); - } - - private IExampleProject generateExampleFromElement(Element element) { - String name = element.getElementsByTagName("name").item(0).getTextContent(); - String description = element.getElementsByTagName("description").item(0).getTextContent(); - List tags = new ArrayList(); - Node tagsElement = element.getElementsByTagName("tags").item(0); - if (tagsElement.getNodeType() == Node.ELEMENT_NODE) { - NodeList tagElementList = ((Element) tagsElement).getElementsByTagName("tag"); - for (int i = 0; i < tagElementList.getLength(); i++) { - tags.add(tagElementList.item(i).getTextContent()); - } - } - String world = ""; - if (element.getElementsByTagName("world") != null && - element.getElementsByTagName("world").item(0) != null) { - world = element.getElementsByTagName("world").item(0).getTextContent(); - } - List packages = new ArrayList(); - tagsElement = element.getElementsByTagName("packages").item(0); - if (tagsElement.getNodeType() == Node.ELEMENT_NODE) { - NodeList elementList = ((Element) tagsElement).getElementsByTagName("package"); - for (int i = 0; i < elementList.getLength(); i++) { - packages.add(elementList.item(i).getTextContent()); - } - } - List files = new ArrayList(); - tagsElement = element.getElementsByTagName("files").item(0); - if (tagsElement.getNodeType() == Node.ELEMENT_NODE) { - NodeList elementList = ((Element) tagsElement).getElementsByTagName("file"); - for (int i = 0; i < elementList.getLength(); i++) { - if (elementList.item(i).getNodeType() == Node.ELEMENT_NODE) { - element = (Element) elementList.item(i); - files.add(new IExampleProject.ExportFile(element.getAttribute("source"), - element.getAttribute("destination"))); - } - } - } - return parent.makeExampleProject(name, description, tags, world, packages, files); - } - - public IExampleProject getExampleProject() { - return selectedExample; - } - - @Override - public void registerChangeListener(ChangeListener listener) { - this.listener = listener; - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/IExampleProject.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/IExampleProject.java deleted file mode 100644 index 11803752dd..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/IExampleProject.java +++ /dev/null @@ -1,23 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.wizards; - -import java.util.List; - -public interface IExampleProject extends ProjectType { - public String getName(); - public String getContent(); - public List getTags(); - - static class ExportFile { - public String source, destination; - public ExportFile(String source, String destination) { - this.source = source; - this.destination = destination; - } - } - - /** - * @return The world file to use for simulation, if empty - * the default is used. - */ - String getWorld(); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/INewProjectInfo.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/INewProjectInfo.java deleted file mode 100644 index decc95bada..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/INewProjectInfo.java +++ /dev/null @@ -1,24 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.wizards; - -import javax.swing.event.ChangeListener; - -public interface INewProjectInfo { - String getName(); - String getWorld(); - void registerChangeListener(ChangeListener changeListener); - - public static INewProjectInfo Null = new INewProjectInfo() { - @Override - public String getWorld() { - return ""; - } - - @Override - public String getName() { - return ""; - } - - @Override - public void registerChangeListener(ChangeListener changeListener) {} - }; -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/IProjectCreator.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/IProjectCreator.java deleted file mode 100644 index 4b64ade470..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/IProjectCreator.java +++ /dev/null @@ -1,60 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.wizards; - -import java.util.List; -import java.util.Map; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; - -/** - * An interface for providing hooks into the project creation - * process. It provides necessary information and can perform - * both initialization and finalization of the project - * creation process. - * - * @author Alex Henning - */ -public interface IProjectCreator { - - /** - * @return The name of the project to create. - */ - String getName(); - - /** - * @return The main package to be created. Should be an - * empty string if irrelevant. - */ - String getPackageName(); - - /** - * @return Map of keys to be substituted with values - * during the creation process. - */ - Map getValues(); - - /** - * @return The natures that this project should have. - */ - List getNatures(); - - /** - * @return A project type object that provides files - * and directories to create. - */ - ProjectType getProjectType(); - - /** - * Run extra initialization code on the project. - * @param project The project being created - * @throws CoreException - */ - void initialize(IProject project) throws CoreException; - - /** - * Run extra finalization code on the project. - * @param project The project being created - * @throws CoreException - */ - void finalize(IProject project) throws CoreException; -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/IProjectFilter.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/IProjectFilter.java deleted file mode 100644 index 74b1e63745..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/IProjectFilter.java +++ /dev/null @@ -1,17 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.wizards; - -import org.eclipse.core.resources.IProject; - -/** - * A filter that can be used to select projects. - * - * @author alex - * - */ -public interface IProjectFilter { - /** - * @param project The project to check. - * @return Whether or to accept the project. - */ - boolean accept(IProject project); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/NewProjectMainPage.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/NewProjectMainPage.java deleted file mode 100644 index 53ca46a5a7..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/NewProjectMainPage.java +++ /dev/null @@ -1,255 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.wizards; - -import java.util.Map; - -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; - -import org.eclipse.jface.dialogs.IDialogPage; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.FileDialog; -import org.eclipse.swt.widgets.Group; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Text; - -/** - * The "New" wizard page allows setting the container for the new file as well - * as the file name. The page will only accept file name without the extension - * OR with the extension that matches the expected one (mpe). - */ - -public class NewProjectMainPage extends WizardPage { - private Text projectNameText; - private Text packageText; - Map types; - private Text worldText; - private Button worldButton; - - Button iterativeRobot, commandRobot, sampleRobot; - private boolean showPackage; - private boolean showProjectTypes; - private TeamNumberPage teamNumberPage; - private INewProjectInfo info; - - /** - * Constructor for SampleNewWizardPage. - * @param teamNumberPage - * - * @param pageName - */ - public NewProjectMainPage(ISelection selection, TeamNumberPage teamNumberPage, INewProjectInfo info) { - super("wizardPage"); - this.teamNumberPage = teamNumberPage; - showPackage = true; - showProjectTypes = false; - this.info = info; - } - - /** - * @see IDialogPage#createControl(Composite) - */ - public void createControl(Composite parent) { - System.out.println(info.getName() +" -- "+ info.getWorld()); - - Composite container = new Composite(parent, SWT.NULL); - GridLayout layout = new GridLayout(); - container.setLayout(layout); - layout.numColumns = 2; - layout.verticalSpacing = 9; - Label label = new Label(container, SWT.NULL); - label.setText("Project &Name:"); - - projectNameText = new Text(container, SWT.BORDER | SWT.SINGLE); - GridData gd = new GridData(GridData.FILL_HORIZONTAL); - projectNameText.setLayoutData(gd); - projectNameText.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - dialogChanged(); - } - }); - - if (showPackage) { - label = new Label(container, SWT.NULL); - label.setText("&Package:"); - - packageText = new Text(container, SWT.BORDER | SWT.SINGLE); - gd = new GridData(GridData.FILL_HORIZONTAL); - packageText.setLayoutData(gd); - packageText.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - dialogChanged(); - } - }); - } - - if (showProjectTypes) { - Group projectTypeGroup = new Group(container, SWT.BORDER); - projectTypeGroup.setText("Project Type"); - gd = new GridData(GridData.FILL_HORIZONTAL); - gd.horizontalSpan = 2; - projectTypeGroup.setLayoutData(gd); - GridLayout groupLayout = new GridLayout(); - groupLayout.numColumns = 1; - projectTypeGroup.setLayout(groupLayout); - - commandRobot = new Button(projectTypeGroup, SWT.RADIO | SWT.WRAP); - commandRobot.setText("Command-Based Robot: A robot project that allows robots to be implemented using the command based model to allow complex functionality to be developed from simpler functionality."); - gd = new GridData(GridData.FILL_HORIZONTAL); - gd.widthHint = 300; - commandRobot.setLayoutData(gd); - commandRobot.setSelection(true); - - iterativeRobot = new Button(projectTypeGroup, SWT.RADIO | SWT.WRAP); - iterativeRobot.setText("Iterative Robot: A robot project that allows robots to be implemented in an iterative manner."); - gd = new GridData(GridData.FILL_HORIZONTAL); - gd.widthHint = 300; - iterativeRobot.setLayoutData(gd); - - sampleRobot = new Button(projectTypeGroup, SWT.RADIO | SWT.WRAP); - sampleRobot.setText("Sample Robot: A robot project used for small sample programs or for highly advanced programs with more complete control over program flow"); - gd = new GridData(GridData.FILL_HORIZONTAL); - gd.widthHint = 300; - sampleRobot.setLayoutData(gd); - } - - label = new Label(container, SWT.NULL); - label.setText("Simulation &World:"); - - - Composite comp = new Composite(container, SWT.NULL); - gd = new GridData(GridData.FILL_HORIZONTAL); - comp.setLayoutData(gd); - GridLayout groupLayout = new GridLayout(); - groupLayout.numColumns = 2; - comp.setLayout(groupLayout); - worldText = new Text(comp, SWT.BORDER | SWT.SINGLE); - worldText.setLayoutData(gd); - worldText.setText("/usr/share/frcsim/worlds/GearsBotDemo.world"); - worldText.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - dialogChanged(); - } - }); - worldButton = new Button(comp, SWT.NULL); - worldButton.setText("Browse"); - worldButton.addSelectionListener(new SelectionAdapter() { - @Override public void widgetSelected(SelectionEvent e) { - browse(); - } - }); - - initialize(); - dialogChanged(); - setControl(container); - } - - /** - * Tests if the current workbench selection is a suitable container to use. - */ - private void initialize() { - String teamNumber = TeamNumberPage.getTeamNumberFromPage(teamNumberPage); - if (showPackage) { - packageText.setText("org.usfirst.frc.team"+teamNumber+".robot"); - if (teamNumberPage != null) { - teamNumberPage.registerChangeListener(new ChangeListener() { - @Override public void stateChanged(ChangeEvent e) { - String teamNumber = TeamNumberPage.getTeamNumberFromPage(teamNumberPage); - packageText.setText("org.usfirst.frc.team"+teamNumber+".robot"); - } - }); - } - } - info.registerChangeListener(new ChangeListener() { - @Override public void stateChanged(ChangeEvent e) { - projectNameText.setText(info.getName()); - if (!"".equals(info.getWorld())) { - worldText.setText(info.getWorld()); - } - } - }); - } - - /** - * Ensures that both text fields are set. - */ - private void dialogChanged() { - String projectName = getProjectName(); - - String packageString = ""; - if (showPackage) packageString = getPackage(); - - if (projectName.length() == 0) { - updateStatus("Project name must be specified"); - return; - } - if (showPackage && packageString.length() == 0) { - updateStatus("Package must be specified"); - return; - } - if (showPackage && !packageString.matches("^([a-zA-Z_]{1}[a-zA-Z0-9_]*(\\.[a-zA-Z_]{1}[a-zA-Z0-9_]*)*)$")) { - updateStatus("Must be valid java package"); - return; - } - - updateStatus(null); - } - - private void browse() { - FileDialog dialog = new FileDialog(getShell(), SWT.OPEN); - dialog.setText("Pick a World to Simulate"); - dialog.setFileName(worldText.getText()); - dialog.setFilterNames(new String[] { "World Files", "All Files (*.*)" }); - dialog.setFilterExtensions(new String[] { "*.world", "*.*" }); - String result = dialog.open(); - if (result != null) { - worldText.setText(result); - } - } - - private void updateStatus(String message) { - setErrorMessage(message); - setPageComplete(message == null); - } - - public String getProjectName() { - return projectNameText.getText(); - } - - public String getPackage() { - return packageText.getText(); - } - - public ProjectType getProjectType() { - if (!showProjectTypes) return null; - else if (iterativeRobot.getSelection()) return types.get(ProjectType.ITERATIVE); - else if (sampleRobot.getSelection()) return types.get(ProjectType.SAMPLE); - else return types.get(ProjectType.COMMAND_BASED); - } - - public String getWorld() { - return worldText.getText().replace(System.getProperty("user.home"), "${user.home}"); - } - - public void setShowPackage(boolean bool) { - showPackage = bool; - } - - public void setShowProjectTypes(boolean bool) { - showProjectTypes = bool; - } - - public void setProjectTypes(Map types) { - showProjectTypes = true; - this.types = types; - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/ProjectComboField.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/ProjectComboField.java deleted file mode 100644 index 82d7eafb86..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/ProjectComboField.java +++ /dev/null @@ -1,56 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.wizards; - -import java.util.Arrays; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; - -public class ProjectComboField { - public static String NO_PROJECT = "No Project"; - - private Combo combo; - - public ProjectComboField(Composite composite, int config, IProjectFilter filter) { - combo = new Combo(composite, config); - - combo.add(NO_PROJECT); - combo.select(0); - IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); - for (IProject project : projects) { - if (filter == null || filter.accept(project)) - combo.add(project.getName()); - } - } - - public void setProject(IProject project) { - if (project != null) - combo.select(Arrays.binarySearch(combo.getItems(), project.getName())); - else combo.select(0); - } - - public IProject getProject() { - return ResourcesPlugin.getWorkspace().getRoot().getProject(combo.getItem(combo.getSelectionIndex())); - } - - public boolean isValid() { - return combo.getSelectionIndex() != 0; - } - - public void setLayoutData(GridData gd) { - combo.setLayoutData(gd); - } - - public void addModifyListener(ModifyListener modifyListener) { - combo.addModifyListener(modifyListener); - } - - public void addSelectionListener(SelectionListener selectionListener) { - combo.addSelectionListener(selectionListener); - } - -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/ProjectCreationUtils.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/ProjectCreationUtils.java deleted file mode 100644 index cc0fbbaf83..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/ProjectCreationUtils.java +++ /dev/null @@ -1,209 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.wizards; - -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.Map; -import java.util.Map.Entry; - -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IFolder; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IProjectDescription; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.swt.widgets.Display; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; - -/** - * Utilities for creating a new project and files from templates. Uses - * IProjectCreator to provide hooks for generating the directory - * structure, initial files, initializing and finalizing the creation - * of the new project. - * - * @author Alex Henning - **/ -public class ProjectCreationUtils { - - /** - * Create a project using the given IProjectCreator. - * - * @param creator The creator that provides the necessary information - * to create the project. - * @return The newly created project. - */ - public static IProject createProject(IProjectCreator creator) { - IProject project = createBaseProject(creator.getName(), null); - - try { - creator.initialize(project); - for (String nature : creator.getNatures()) { - addNature(project, nature); - } - addToProjectStructure(project, creator); - addFilesToProject(project, creator); - creator.finalize(project); - } catch (CoreException e) { - WPILibCore.logError("Error creating project "+creator.getName(), e); - project = null; - } - - return project; - } - - private static IProject createBaseProject(String projectName, IPath location) { - IProject newProject = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); - - if (!newProject.exists()) { - IPath projectLocation = location; - IProjectDescription desc = newProject.getWorkspace().newProjectDescription(newProject.getName()); - if (location != null && - ResourcesPlugin.getWorkspace().getRoot().getLocation().equals(location)) { - projectLocation = null; - } - desc.setLocation(projectLocation); - try { - newProject.create(desc, null); - if (!newProject.isOpen()) { - newProject.open(null); - } - } catch (CoreException e) { - WPILibCore.logError("Can't create new project.", e); - Display.getDefault().syncExec(new Runnable() { - @Override - public void run() { - MessageDialog.openError(Display.getDefault().getActiveShell(), "Error", "Error creating project! This may occur if a project of the same name with different case exists in the Workspace"); - } - }); - } - }else { - Display.getDefault().syncExec(new Runnable() { - @Override - public void run() { - MessageDialog.openError(Display.getDefault().getActiveShell(), "Error", "Error! A project of the same name already exists in the Workspace"); - } - }); - } - return newProject; - } - - private static void addNature(IProject project, String nature_id) throws CoreException { - if (!project.hasNature(nature_id)) { - IProjectDescription desc = project.getDescription(); - String[] prevNatures = desc.getNatureIds(); - String[] newNatures = new String[prevNatures.length + 1]; - System.arraycopy(prevNatures, 0, newNatures, 0, prevNatures.length); - newNatures[prevNatures.length] = nature_id; - desc.setNatureIds(newNatures); - - project.setDescription(desc, null); - } - } - - private static void addToProjectStructure(IProject project, IProjectCreator creator) throws CoreException { - String[] paths = creator.getProjectType().getFolders(creator.getPackageName()); - for (String path : paths) { - IFolder etcFolders = project.getFolder(path); - createFolder(etcFolders); - } - } - - private static void createFolder(IFolder folder) throws CoreException { - IContainer parent = folder.getParent(); - if (parent instanceof IFolder) { - createFolder((IFolder) parent); - } - if (!folder.exists()) { - folder.create(false, true, null); - } - folder.refreshLocal(IResource.DEPTH_INFINITE, null); - } - - private static void addFilesToProject(IProject project, IProjectCreator creator) throws CoreException { - Map files = creator.getProjectType().getFiles(creator.getPackageName()); - for (Entry e : files.entrySet()) { - try { - URL url = new URL(creator.getProjectType().getBaseURL(), e.getValue()); - createTemplateFile(project, e.getKey(), url, creator.getValues()); - } catch (MalformedURLException e1) { - WPILibCore.logError("Error adding file "+e.toString()+" to project.", e1); - } - } - } - - /** - * Create a file in the project from a template. Substituting as required. - * - * @param project The project to use create the file in. - * @param filepath The path of the created file. - * @param filesource The source of the template to use. - * @param vals The map of values to use for substitution. - * @throws CoreException - */ - public static void createTemplateFile(IProject project, String filepath, URL url, Map vals) throws CoreException { - IFile template = project.getFile(new Path(filepath)); - if (!template.exists()) { - InputStream in = openTemplateContentStream(project, url, vals); - template.create(in, true, null); - } - } - - private static InputStream openTemplateContentStream(IProject project, URL url, Map vals) { - //http://eclipse-javacc.cvs.sourceforge.net/viewvc/eclipse-javacc/sf.eclipse.javacc/src-plugin/sf/eclipse/javacc/wizards/JJNewWizard.java?view=markup - //eclipse plugin distributing template files - try { - return makeTemplateInputStream(url.openStream(), vals); - } catch (final MalformedURLException e) { - WPILibCore.logError("Malformed URL "+url, e); - } catch (final IOException e) { - WPILibCore.logError("Issue opening input stream.", e); - } - return null; - } - - private static InputStream makeTemplateInputStream(InputStream stream, Map vals) { - String str; - try { - str = readInput(stream); - stream.close(); - } catch (final IOException e) { - WPILibCore.logError("Error reading template.", e); - return null; - } - - // Instantiate template - for (Entry e : vals.entrySet()) - str = str.replace(e.getKey(), e.getValue()); - - return new ByteArrayInputStream(str.getBytes()); - } - - private static String readInput(InputStream stream) { - StringBuffer buffer = new StringBuffer(); - try { - InputStreamReader isr = new InputStreamReader(stream); - Reader in = new BufferedReader(isr); - int ch; - while ((ch = in.read()) > -1) { - buffer.append((char)ch); - } - in.close(); - return buffer.toString(); - } catch (IOException e) { - WPILibCore.logError("Error reading input.", e); - return null; - } - } - -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/ProjectType.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/ProjectType.java deleted file mode 100644 index 794095be03..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/ProjectType.java +++ /dev/null @@ -1,14 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.wizards; - -import java.net.URL; -import java.util.Map; - -public interface ProjectType { - String SAMPLE = "SAMPLE"; - String ITERATIVE = "ITERATIVE"; - String COMMAND_BASED = "COMMAND_BASED"; - - String[] getFolders(String packageName); - Map getFiles(String packageName); - URL getBaseURL(); -} \ No newline at end of file diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/Tag.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/Tag.java deleted file mode 100644 index 221a27a430..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/Tag.java +++ /dev/null @@ -1,19 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.wizards; - - -public class Tag { - private String name, description; - - public Tag(String name, String description) { - this.name = name; - this.description = description; - } - - public String getName() { - return name; - } - - public String getContent() { - return "

"+name+"

"+description+"

"; - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/TeamNumberPage.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/TeamNumberPage.java deleted file mode 100644 index 5345f48a36..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.core/src/main/java/edu/wpi/first/wpilib/plugins/core/wizards/TeamNumberPage.java +++ /dev/null @@ -1,111 +0,0 @@ -package edu.wpi.first.wpilib.plugins.core.wizards; - -import javax.swing.event.ChangeListener; - -import org.eclipse.jface.dialogs.IDialogPage; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Text; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; - -public class TeamNumberPage extends WizardPage { - private Text teamNumberText; - private ChangeListener listener; - - /** - * Constructor for SampleNewWizardPage. - * - * @param pageName - */ - public TeamNumberPage(ISelection selection) { - super("wizardPage"); - setTitle("Set Team Number"); - setDescription("This page lets you set your team number so that code can be loaded onto the right robot."); - } - - /** - * @see IDialogPage#createControl(Composite) - */ - public void createControl(Composite parent) { - Composite container = new Composite(parent, SWT.NULL); - GridLayout layout = new GridLayout(); - container.setLayout(layout); - layout.numColumns = 2; - layout.verticalSpacing = 9; - Label label = new Label(container, SWT.NULL); - label.setText("Team &Number:"); - - teamNumberText = new Text(container, SWT.BORDER | SWT.SINGLE); - GridData gd = new GridData(GridData.FILL_HORIZONTAL); - teamNumberText.setLayoutData(gd); - teamNumberText.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - dialogChanged(); - } - }); - - label = new Label(container, SWT.NULL); - label.setText("Team number is a global setting that can be changed in Window > Preferences > WPILib Preferences > Team Number"); - gd = new GridData(GridData.FILL_HORIZONTAL); - gd.horizontalSpan = 2; - label.setLayoutData(gd); - - initialize(); - dialogChanged(); - setControl(container); - } - - /** - * Tests if the current workbench selection is a suitable container to use. - */ - private void initialize() { - String teamNumber = Integer.toString(WPILibCore.getDefault().getTeamNumber(null)); - teamNumberText.setText(teamNumber); - } - - /** - * Ensures that both text fields are set. - */ - private void dialogChanged() { - String teamNumber = getTeamNumber(); - if (listener != null) listener.stateChanged(null); - if (!teamNumber.matches("^([1-9][0-9]*)$")) { - updateStatus("Team number must be a valid integer without leading zeroes."); - return; - } - updateStatus(null); - } - - private void updateStatus(String message) { - setErrorMessage(message); - setPageComplete(message == null); - } - - public String getTeamNumber() { - return teamNumberText.getText(); - } - - public static boolean needsTeamNumberPage() { - return WPILibCore.getDefault().getTeamNumber(null) == 0; - } - - public static String getTeamNumberFromPage(TeamNumberPage teamNumberPage) { - if (teamNumberPage != null) { - return teamNumberPage.getTeamNumber(); - } else { - return Integer.toString(WPILibCore.getDefault().getTeamNumber(null)); - } - } - - public void registerChangeListener(ChangeListener changeListener) { - listener = changeListener; - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp.feature/build.properties b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp.feature/build.properties deleted file mode 100644 index 64f93a9f0b..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp.feature/build.properties +++ /dev/null @@ -1 +0,0 @@ -bin.includes = feature.xml diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp.feature/feature.xml b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp.feature/feature.xml deleted file mode 100644 index 620fc42777..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp.feature/feature.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - FRC Robot C++ Program Development Environment. - - - - * Copyright (c) 2015 FIRST and WPI -* All rights reserved. - - - - * Copyright (c) 2015 FIRST and WPI -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or -* without modification, are permitted provided that the following -* conditions are met: -* Redistributions of source code must retain the above -* copyright notice, this list of conditions and the following -* disclaimer. Redistributions in binary form must reproduce the -* above copyright notice, this list of conditions and the following -* disclaimer in the documentation and/or other materials provided -* with the distribution. Neither the name of the FIRST nor the -* names of its contributors may be used to endorse or promote -* products derived from this software without specific prior -* written permission. -* -* THIS SOFTWARE IS PROVIDED BY FIRST AND CONTRIBUTORS``AS IS'' -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT -* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -* EVENT SHALL FIRST OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - - - - - - - - - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp.feature/pom.xml b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp.feature/pom.xml deleted file mode 100644 index ad3d876540..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp.feature/pom.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - 4.0.0 - edu.wpi.first.wpilib.plugins.cpp.feature - eclipse-feature - - - edu.wpi.first.wpilib.plugins - edu.wpi.first.wpilib.plugins - 0.1.0.qualifier - .. - - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/META-INF/MANIFEST.MF b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/META-INF/MANIFEST.MF deleted file mode 100644 index 7cff0305a8..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/META-INF/MANIFEST.MF +++ /dev/null @@ -1,34 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: WPILib_CPP_Robot_Development -Bundle-SymbolicName: edu.wpi.first.wpilib.plugins.cpp;singleton:=true -Bundle-Version: 0.1.0.qualifier -Bundle-Activator: edu.wpi.first.wpilib.plugins.cpp.WPILibCPPPlugin -Require-Bundle: org.eclipse.ui, - org.eclipse.core.runtime, - org.eclipse.core.resources;bundle-version="3.8.1", - edu.wpi.first.wpilib.plugins.core;bundle-version="0.1.0", - org.eclipse.cdt;bundle-version="8.1.0", - org.eclipse.cdt.build.crossgcc;bundle-version="1.1.0", - org.eclipse.cdt.core;bundle-version="5.4.0", - org.eclipse.cdt.ui;bundle-version="5.4.0", - org.eclipse.cdt.managedbuilder.core;bundle-version="8.1.0", - org.eclipse.cdt.managedbuilder.gnu.ui;bundle-version="8.1.0", - org.eclipse.cdt.managedbuilder.ui;bundle-version="8.1.0", - org.eclipse.ui.editors;bundle-version="3.8.0", - org.eclipse.ui.ide;bundle-version="3.8.1", - org.eclipse.debug.core;bundle-version="3.7.100", - org.eclipse.debug.ui;bundle-version="3.8.1", - org.eclipse.rse;bundle-version="3.1.0", - org.eclipse.rse.core;bundle-version="3.1.1", - org.eclipse.cdt.debug.core;bundle-version="7.2.0", - org.eclipse.cdt.debug.ui;bundle-version="7.2.0", - org.eclipse.cdt.launch;bundle-version="7.1.0", - org.eclipse.cdt.launch.remote;bundle-version="2.4.0", - org.eclipse.cdt.debug.mi.core;bundle-version="7.2.0", - org.eclipse.core.variables -Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Export-Package: edu.wpi.first.wpilib.plugins.cpp, - edu.wpi.first.wpilib.plugins.cpp.preferences -Bundle-Vendor: WPI & FIRST diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/build.properties b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/build.properties deleted file mode 100644 index 85c3a2e7ac..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/build.properties +++ /dev/null @@ -1,9 +0,0 @@ -source.. = src/main/java/ -output.. = bin/ -bin.includes = META-INF/,\ - .,\ - plugin.xml,\ - resources/ -src.includes = resources/**,\ - src/ -bin.excludes = resources/configuration.properties diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/plugin.xml b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/plugin.xml deleted file mode 100644 index 03e4240516..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/plugin.xml +++ /dev/null @@ -1,273 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/pom.xml b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/pom.xml deleted file mode 100644 index 41d996c84a..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/pom.xml +++ /dev/null @@ -1,213 +0,0 @@ - - - 4.0.0 - edu.wpi.first.wpilib.plugins.cpp - eclipse-plugin - - edu.wpi.first.wpilib.plugins - edu.wpi.first.wpilib.plugins - 0.1.0.qualifier - .. - - - DEVELOPMENT - ${project.build.directory}/cpp-zip - - - - - . - - resources/configuration.properties - - true - - - - - - maven-resources-plugin - 2.6 - - - copy-ant-resources-to-cpp-zip - generate-sources - - copy-resources - - - ${cpp-zip} - - - src/main/resources/cpp-zip - - - - - - - - org.apache.maven.plugins - maven-dependency-plugin - 2.8 - - - - fetch-cpp-zip-dependencies - compile - - copy - - - - - edu.wpi.first.wpilib.cmake - cpp-root - 1.0.0 - zip - cpp-root.jar - - - edu.wpi.first.wpilibc.simulation - WPILibCSim - 0.1.0 - zip - sim-include.zip - - - ${project.build.directory} - false - true - true - - - - - - fetch-sim-jar-zip-dependencies - compile - - copy - - - ${cpp-zip}/sim/lib - false - true - - - - net.java.jinput - jinput-platform - 2.0.5 - natives-linux - jar - - - - edu.wpi.first.wpilibj.simulation - SimDS - 0.1.0-SNAPSHOT - SimDS.jar - ${cpp-zip}/sim/tools - - - - - - - - org.apache.maven.plugins - maven-antrun-plugin - 1.7 - - - - - set-version-info - - run - - process-sources - - - - - - - - - - - true - - - - - - unzip-cpp-includes - compile - - run - - - - - - - - - - - - - - - - unzip-jinput-libs - compile - - run - - - - - - - - - - - generate-cpp-zip - compile - - run - - - - - - - - - - - - - - edu.wpi.first.wpilib.cmake - cpp-root - 1.0.0 - zip - - - edu.wpi.first.wpilibc.simulation - WPILibCSim - 0.1.0 - zip - - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/configuration.properties b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/configuration.properties deleted file mode 100644 index cbfaca2ede..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/configuration.properties +++ /dev/null @@ -1,2 +0,0 @@ -timestamp=${timestamp} -version=${version} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/icons/Button.png b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/icons/Button.png deleted file mode 100644 index f6584ec8230f7e694a19aafd50e265c7d7b2f1dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 790 zcmV+x1L^#UP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ;oJmAMRCwB?lgn=maRA3Zzj^G=>~0@ByX}^3>BFk_LPUv!)JaGjq>(6pfnGdL z;@~2Y2yrD&4kWmVdW8rH5kb7)ua?!V-6`9h?RIwT?EG9vD&gdN{2acg&qqip`Jaiu zuob{YU>&gV7b^oVfKlKgVE^qP25j%M;)mC^x3O+;4ZX_;(6kWF#3x>kedNlU4_tlt zgek}A2VTuRXfQ${XQ;oIA*+$~sRqpM9%M&1giHcEkN5l$j#uMUP372~dyMA`tAV=$ zP=pZmP0N>YG}%atm_=wBej;QIv9yRNFk_@gzW#2Kd#mO1&~e!i*8DcVHuKW1P&OJ{lkV?AB?(kGqG(f0WZ;dmppmS*xzO07*qoM6N<$g5uCwxc~qF diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/icons/Command.png b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/icons/Command.png deleted file mode 100644 index c3d9c2d991a047859c110040f70b34863a840bdf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3287 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/build.properties b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/build.properties deleted file mode 100644 index bbc581204b..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/build.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Build information -out=FRCUserProgram -src.dir=src -build.dir=build -out.exe=Debug/${out} - -# Simulation -simulation.world.file=$world - -# Use the current C++ library by default -cpp-version=current diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/build.xml b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/build.xml deleted file mode 100644 index 82e7940194..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/build.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Command.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Command.cpp deleted file mode 100644 index 474040ab1b..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Command.cpp +++ /dev/null @@ -1,38 +0,0 @@ -#include "$classname.h" - -$classname::$classname() -{ - // Use Requires() here to declare subsystem dependencies - // eg. Requires(chassis); -} - -// Called just before this Command runs the first time -void $classname::Initialize() -{ - -} - -// Called repeatedly when this Command is scheduled to run -void $classname::Execute() -{ - -} - -// Make this return true when this Command no longer needs to run execute() -bool $classname::IsFinished() -{ - return false; -} - -// Called once after isFinished returns true -void $classname::End() -{ - -} - -// Called when another command which requires one or more of the same -// subsystems is scheduled to run -void $classname::Interrupted() -{ - -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Command.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Command.h deleted file mode 100644 index 1cb0db42cb..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Command.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef $classname_H -#define $classname_H - -#include "../CommandBase.h" -#include "WPILib.h" - -class $classname: public CommandBase -{ -public: - $classname(); - void Initialize(); - void Execute(); - bool IsFinished(); - void End(); - void Interrupted(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/CommandBase.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/CommandBase.cpp deleted file mode 100644 index ebf342bbcf..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/CommandBase.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include "CommandBase.h" -#include "Subsystems/ExampleSubsystem.h" -#include "Commands/Scheduler.h" - -// Initialize a single static instance of all of your subsystems to NULL -std::unique_ptr CommandBase::examplesubsystem; -std::unique_ptr CommandBase::oi; - -CommandBase::CommandBase(const std::string &name) : - Command(name) -{ -} - -CommandBase::CommandBase() : - Command() -{ - -} - -void CommandBase::init() -{ - // Create a single static instance of all of your subsystems. The following - // line should be repeated for each subsystem in the project. - examplesubsystem.reset(new ExampleSubsystem()); - - oi.reset(new OI()); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/CommandBase.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/CommandBase.h deleted file mode 100644 index d4900a3fe1..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/CommandBase.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef COMMAND_BASE_H -#define COMMAND_BASE_H - -#include -#include "Commands/Command.h" -#include "Subsystems/ExampleSubsystem.h" -#include "OI.h" -#include "WPILib.h" - -/** - * The base for all commands. All atomic commands should subclass CommandBase. - * CommandBase stores creates and stores each control system. To access a - * subsystem elsewhere in your code in your code use CommandBase.examplesubsystem - */ -class CommandBase: public Command -{ -public: - CommandBase(const std::string &name); - CommandBase(); - static void init(); - // Create a single static instance of all of your subsystems - static std::unique_ptr examplesubsystem; - static std::unique_ptr oi; -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/CommandGroup.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/CommandGroup.cpp deleted file mode 100644 index 664b44bdeb..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/CommandGroup.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include "$classname.h" - -$classname::$classname() -{ - // Add Commands here: - // e.g. AddSequential(new Command1()); - // AddSequential(new Command2()); - // these will run in order. - - // To run multiple commands at the same time, - // use AddParallel() - // e.g. AddParallel(new Command1()); - // AddSequential(new Command2()); - // Command1 and Command2 will run in parallel. - - // A command group will require all of the subsystems that each member - // would require. - // e.g. if Command1 requires chassis, and Command2 requires arm, - // a CommandGroup containing them would require both the chassis and the - // arm. -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/CommandGroup.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/CommandGroup.h deleted file mode 100644 index dfa979c266..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/CommandGroup.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef $classname_H -#define $classname_H - -#include "Commands/CommandGroup.h" -#include "WPILib.h" - -class $classname: public CommandGroup -{ -public: - $classname(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/ExampleCommand.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/ExampleCommand.cpp deleted file mode 100644 index e239f026fa..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/ExampleCommand.cpp +++ /dev/null @@ -1,38 +0,0 @@ -#include "ExampleCommand.h" - -ExampleCommand::ExampleCommand() -{ - // Use Requires() here to declare subsystem dependencies - // eg. Requires(chassis); -} - -// Called just before this Command runs the first time -void ExampleCommand::Initialize() -{ - -} - -// Called repeatedly when this Command is scheduled to run -void ExampleCommand::Execute() -{ - -} - -// Make this return true when this Command no longer needs to run execute() -bool ExampleCommand::IsFinished() -{ - return false; -} - -// Called once after isFinished returns true -void ExampleCommand::End() -{ - -} - -// Called when another command which requires one or more of the same -// subsystems is scheduled to run -void ExampleCommand::Interrupted() -{ - -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/ExampleCommand.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/ExampleCommand.h deleted file mode 100644 index 8e0b3d1b73..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/ExampleCommand.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef EXAMPLE_COMMAND_H -#define EXAMPLE_COMMAND_H - -#include "../CommandBase.h" -#include "WPILib.h" - -class ExampleCommand: public CommandBase -{ -public: - ExampleCommand(); - void Initialize(); - void Execute(); - bool IsFinished(); - void End(); - void Interrupted(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/ExampleSubsystem.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/ExampleSubsystem.cpp deleted file mode 100644 index 20518caa23..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/ExampleSubsystem.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#include "ExampleSubsystem.h" -#include "../RobotMap.h" - -ExampleSubsystem::ExampleSubsystem() : - Subsystem("ExampleSubsystem") -{ - -} - -void ExampleSubsystem::InitDefaultCommand() -{ - // Set the default command for a subsystem here. - //SetDefaultCommand(new MySpecialCommand()); -} - -// Put methods for controlling this subsystem -// here. Call these from Commands. - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/ExampleSubsystem.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/ExampleSubsystem.h deleted file mode 100644 index 06149d0ab8..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/ExampleSubsystem.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef EXAMPLE_SUBSYSTEM_H -#define EXAMPLE_SUBSYSTEM_H - -#include "Commands/Subsystem.h" -#include "WPILib.h" - -class ExampleSubsystem: public Subsystem -{ -private: - // It's desirable that everything possible under private except - // for methods that implement subsystem capabilities -public: - ExampleSubsystem(); - void InitDefaultCommand(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/OI.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/OI.cpp deleted file mode 100644 index 7c0a7c8f02..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/OI.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include "OI.h" - -OI::OI() -{ - // Process operator interface input here. -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/OI.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/OI.h deleted file mode 100644 index 70855a103f..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/OI.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef OI_H -#define OI_H - -#include "WPILib.h" - -class OI -{ -private: - -public: - OI(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/PIDSubsystem.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/PIDSubsystem.cpp deleted file mode 100644 index 01dcf6a649..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/PIDSubsystem.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include "$classname.h" -#include "../RobotMap.h" -#include "SmartDashboard/SmartDashboard.h" -#include "LiveWindow/LiveWindow.h" - -$classname::$classname() : - PIDSubsystem("$classname", 1.0, 0.0, 0.0) -{ - // Use these to get going: - // SetSetpoint() - Sets where the PID controller should move the system - // to - // Enable() - Enables the PID controller. -} - -double $classname::ReturnPIDInput() -{ - // Return your input value for the PID loop - // e.g. a sensor, like a potentiometer: - // yourPot->SetAverageVoltage() / kYourMaxVoltage; -} - -void $classname::UsePIDOutput(double output) -{ - // Use output to drive your system, like a motor - // e.g. yourMotor->Set(output); -} - -void $classname::InitDefaultCommand() -{ - // Set the default command for a subsystem here. - //setDefaultCommand(new MySpecialCommand()); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/PIDSubsystem.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/PIDSubsystem.h deleted file mode 100644 index ffb573a3de..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/PIDSubsystem.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef $classname_H -#define $classname_H - -#include "Commands/PIDSubsystem.h" -#include "WPILib.h" - -class $classname: public PIDSubsystem -{ -public: - $classname(); - double ReturnPIDInput(); - void UsePIDOutput(double output); - void InitDefaultCommand(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Robot.cpp deleted file mode 100644 index a41f36ab1e..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Robot.cpp +++ /dev/null @@ -1,64 +0,0 @@ -#include "WPILib.h" -#include "Commands/Command.h" -#include "Commands/ExampleCommand.h" -#include "CommandBase.h" - -class Robot: public IterativeRobot -{ -private: - std::unique_ptr autonomousCommand; - - void RobotInit() - { - CommandBase::init(); - autonomousCommand.reset(new ExampleCommand()); - } - - /** - * This function is called once each time the robot enters Disabled mode. - * You can use it to reset any subsystem information you want to clear when - * the robot is disabled. - */ - void DisabledInit() - { - } - - void DisabledPeriodic() - { - Scheduler::GetInstance()->Run(); - } - - void AutonomousInit() - { - if (autonomousCommand != NULL) - autonomousCommand->Start(); - } - - void AutonomousPeriodic() - { - Scheduler::GetInstance()->Run(); - } - - void TeleopInit() - { - // This makes sure that the autonomous stops running when - // teleop starts running. If you want the autonomous to - // continue until interrupted by another command, remove - // this line or comment it out. - if (autonomousCommand != NULL) - autonomousCommand->Cancel(); - } - - void TeleopPeriodic() - { - Scheduler::GetInstance()->Run(); - } - - void TestPeriodic() - { - LiveWindow::GetInstance()->Run(); - } -}; - -START_ROBOT_CLASS(Robot) - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/RobotMap.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/RobotMap.h deleted file mode 100644 index 54742835fc..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/RobotMap.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef ROBOTMAP_H -#define ROBOTMAP_H - -#include "WPILib.h" - -/** - * 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. - */ - -// For example to map the left and right motors, you could define the -// following variables to use with your drivetrain subsystem. -//const int LEFTMOTOR = 1; -//const 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: -//const int RANGE_FINDER_PORT = 1; -//const int RANGE_FINDER_MODULE = 1; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Subsystem.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Subsystem.cpp deleted file mode 100644 index 0145f08d6f..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Subsystem.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include "$classname.h" -#include "../RobotMap.h" - -$classname::$classname() : - Subsystem("ExampleSubsystem") -{ - -} - -void $classname::InitDefaultCommand() -{ - // Set the default command for a subsystem here. - //SetDefaultCommand(new MySpecialCommand()); -} - -// Put methods for controlling this subsystem -// here. Call these from Commands. diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Subsystem.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Subsystem.h deleted file mode 100644 index fbc88af275..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Subsystem.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef $classname_H -#define $classname_H - -#include "Commands/Subsystem.h" -#include "WPILib.h" - -class $classname: public Subsystem -{ -private: - // It's desirable that everything possible under private except - // for methods that implement subsystem capabilities -public: - $classname(); - void InitDefaultCommand(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Trigger.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Trigger.cpp deleted file mode 100644 index 0425fa10c9..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Trigger.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include "$classname.h" - -$classname::$classname() -{ - -} - -bool $classname::Get() -{ - return false; -} - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Trigger.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Trigger.h deleted file mode 100644 index e2a666e0ba..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/command-based/Trigger.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef $classname_H -#define $classname_H - -#include "WPILib.h" - -class $classname: public Trigger -{ -public: - $classname(); - bool Get(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/2015Vision/Color_src/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/2015Vision/Color_src/Robot.cpp deleted file mode 100644 index 45751e4c85..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/2015Vision/Color_src/Robot.cpp +++ /dev/null @@ -1,237 +0,0 @@ -#include "WPILib.h" -#include -#include - -/** - * Example of finding yellow totes based on color. - * This example utilizes an image file, which you need to copy to the roboRIO - * To use a camera you will have to integrate the appropriate camera details with this example. - * To use a USB camera instead, see the IntermediateVision example for details - * on using the USB camera. To use an Axis Camera, see the AxisCamera example for details on - * using an Axis Camera. - * - * Sample images can be found here: http://wp.wpi.edu/wpilib/2015/01/16/sample-images-for-vision-projects/ - */ -class VisionColor2015Sample : public SampleRobot -{ - //A structure to hold measurements of a particle - struct ParticleReport { - double PercentAreaToImageArea; - double Area; - double ConvexHullArea; - double BoundingRectLeft; - double BoundingRectTop; - double BoundingRectRight; - double BoundingRectBottom; - }; - - //Structure to represent the scores for the various tests used for target identification - struct Scores { - double Trapezoid; - double LongAspect; - double ShortAspect; - double AreaToConvexHullArea; - }; - - //Images - Image *frame; - Image *binaryFrame; - int imaqError; - - //Constants - Range TOTE_HUE_RANGE = {24, 49}; //Default hue range for yellow tote - Range TOTE_SAT_RANGE = {67, 255}; //Default saturation range for yellow tote - Range TOTE_VAL_RANGE = {49, 255}; //Default value range for yellow tote - double AREA_MINIMUM = 2; //Default Area minimum for particle as a percentage of total image area - double LONG_RATIO = 2.22; //Tote long side = 26.9 / Tote height = 12.1 = 2.22 - double SHORT_RATIO = 1.4; //Tote short side = 16.9 / Tote height = 12.1 = 1.4 - double SCORE_MIN = 75.0; //Minimum score to be considered a tote - double VIEW_ANGLE = 49.4; //View angle fo camera, set to Axis m1011 by default, 64 for m1013, 51.7 for 206, 52 for HD3000 square, 60 for HD3000 640x480 - ParticleFilterCriteria2 criteria[1]; - ParticleFilterOptions2 filterOptions = {0,0,1,1}; - Scores scores; - - -public: - void RobotInit() override { - // create images - frame = imaqCreateImage(IMAQ_IMAGE_RGB, 0); - binaryFrame = imaqCreateImage(IMAQ_IMAGE_U8, 0); - - //Put default values to SmartDashboard so fields will appear - SmartDashboard::PutNumber("Tote hue min", TOTE_HUE_RANGE.minValue); - SmartDashboard::PutNumber("Tote hue max", TOTE_HUE_RANGE.maxValue); - SmartDashboard::PutNumber("Tote sat min", TOTE_SAT_RANGE.minValue); - SmartDashboard::PutNumber("Tote sat max", TOTE_SAT_RANGE.maxValue); - SmartDashboard::PutNumber("Tote val min", TOTE_VAL_RANGE.minValue); - SmartDashboard::PutNumber("Tote val max", TOTE_VAL_RANGE.maxValue); - SmartDashboard::PutNumber("Area min %", AREA_MINIMUM); - } - - void Autonomous() override { - while (IsAutonomous() && IsEnabled()) - { - //read file in from disk. For this example to run you need to copy image20.jpg from the SampleImages folder to the - //directory shown below using FTP or SFTP: http://wpilib.screenstepslive.com/s/4485/m/24166/l/282299-roborio-ftp - imaqError = imaqReadFile(frame, "//home//lvuser//SampleImages//image20.jpg", NULL, NULL); - - //Update threshold values from SmartDashboard. For performance reasons it is recommended to remove this after calibration is finished. - TOTE_HUE_RANGE.minValue = SmartDashboard::GetNumber("Tote hue min", TOTE_HUE_RANGE.minValue); - TOTE_HUE_RANGE.maxValue = SmartDashboard::GetNumber("Tote hue max", TOTE_HUE_RANGE.maxValue); - TOTE_SAT_RANGE.minValue = SmartDashboard::GetNumber("Tote sat min", TOTE_SAT_RANGE.minValue); - TOTE_SAT_RANGE.maxValue = SmartDashboard::GetNumber("Tote sat max", TOTE_SAT_RANGE.maxValue); - TOTE_VAL_RANGE.minValue = SmartDashboard::GetNumber("Tote val min", TOTE_VAL_RANGE.minValue); - TOTE_VAL_RANGE.maxValue = SmartDashboard::GetNumber("Tote val max", TOTE_VAL_RANGE.maxValue); - - //Threshold the image looking for yellow (tote color) - imaqError = imaqColorThreshold(binaryFrame, frame, 255, IMAQ_HSV, &TOTE_HUE_RANGE, &TOTE_SAT_RANGE, &TOTE_VAL_RANGE); - - //Send particle count to dashboard - int numParticles = 0; - imaqError = imaqCountParticles(binaryFrame, 1, &numParticles); - SmartDashboard::PutNumber("Masked particles", numParticles); - - //Send masked image to dashboard to assist in tweaking mask. - SendToDashboard(binaryFrame, imaqError); - - //filter out small particles - float areaMin = SmartDashboard::GetNumber("Area min %", AREA_MINIMUM); - criteria[0] = {IMAQ_MT_AREA_BY_IMAGE_AREA, areaMin, 100, false, false}; - imaqError = imaqParticleFilter4(binaryFrame, binaryFrame, criteria, 1, &filterOptions, NULL, NULL); - - //Send particle count after filtering to dashboard - imaqError = imaqCountParticles(binaryFrame, 1, &numParticles); - SmartDashboard::PutNumber("Filtered particles", numParticles); - - if(numParticles > 0) - { - //Measure particles and sort by particle size - std::vector particles; - for(int particleIndex = 0; particleIndex < numParticles; particleIndex++) - { - ParticleReport par; - imaqMeasureParticle(binaryFrame, particleIndex, 0, IMAQ_MT_AREA_BY_IMAGE_AREA, &(par.PercentAreaToImageArea)); - imaqMeasureParticle(binaryFrame, particleIndex, 0, IMAQ_MT_AREA, &(par.Area)); - imaqMeasureParticle(binaryFrame, particleIndex, 0, IMAQ_MT_CONVEX_HULL_AREA, &(par.ConvexHullArea)); - imaqMeasureParticle(binaryFrame, particleIndex, 0, IMAQ_MT_BOUNDING_RECT_TOP, &(par.BoundingRectTop)); - imaqMeasureParticle(binaryFrame, particleIndex, 0, IMAQ_MT_BOUNDING_RECT_LEFT, &(par.BoundingRectLeft)); - imaqMeasureParticle(binaryFrame, particleIndex, 0, IMAQ_MT_BOUNDING_RECT_BOTTOM, &(par.BoundingRectBottom)); - imaqMeasureParticle(binaryFrame, particleIndex, 0, IMAQ_MT_BOUNDING_RECT_RIGHT, &(par.BoundingRectRight)); - particles.push_back(par); - } - sort(particles.begin(), particles.end(), CompareParticleSizes); - - //This example only scores the largest particle. Extending to score all particles and choosing the desired one is left as an exercise - //for the reader. Note that the long and short side scores expect a single tote and will not work for a stack of 2 or more totes. - //Modification of the code to accommodate 2 or more stacked totes is left as an exercise for the reader. - scores.Trapezoid = TrapezoidScore(particles.at(0)); - SmartDashboard::PutNumber("Trapezoid", scores.Trapezoid); - scores.LongAspect = LongSideScore(particles.at(0)); - SmartDashboard::PutNumber("Long Aspect", scores.LongAspect); - scores.ShortAspect = ShortSideScore(particles.at(0)); - SmartDashboard::PutNumber("Short Aspect", scores.ShortAspect); - scores.AreaToConvexHullArea = ConvexHullAreaScore(particles.at(0)); - SmartDashboard::PutNumber("Convex Hull Area", scores.AreaToConvexHullArea); - bool isTote = scores.Trapezoid > SCORE_MIN && (scores.LongAspect > SCORE_MIN || scores.ShortAspect > SCORE_MIN) && scores.AreaToConvexHullArea > SCORE_MIN; - bool isLong = scores.LongAspect > scores.ShortAspect; - - //Send distance and tote status to dashboard. The bounding rect, particularly the horizontal center (left - right) may be useful for rotating/driving towards a tote - SmartDashboard::PutBoolean("IsTote", isTote); - SmartDashboard::PutNumber("Distance", computeDistance(binaryFrame, particles.at(0), isLong)); - } else { - SmartDashboard::PutBoolean("IsTote", false); - } - - Wait(0.005); // wait for a motor update time - } - } - - void OperatorControl() override { - while(IsOperatorControl() && IsEnabled()) { - Wait(0.005); // wait for a motor update time - } - } - - - //Send image to dashboard if IMAQ has not thrown an error - void SendToDashboard(Image *image, int error) - { - if(error < ERR_SUCCESS) { - DriverStation::ReportError("Send To Dashboard error: " + std::to_string((long)imaqError) + "\n"); - } else { - CameraServer::GetInstance()->SetImage(image); - } - } - - //Comparator function for sorting particles. Returns true if particle 1 is larger - static bool CompareParticleSizes(ParticleReport particle1, ParticleReport particle2) - { - //we want descending sort order - return particle1.PercentAreaToImageArea > particle2.PercentAreaToImageArea; - } - - /** - * Converts a ratio with ideal value of 1 to a score. The resulting function is piecewise - * linear going from (0,0) to (1,100) to (2,0) and is 0 for all inputs outside the range 0-2 - */ - double ratioToScore(double ratio) - { - return (fmax(0, fmin(100*(1-fabs(1-ratio)), 100))); - } - - /** - * Method to score convex hull area. This scores how "complete" the particle is. Particles with large holes will score worse than a filled in shape - */ - double ConvexHullAreaScore(ParticleReport report) - { - return ratioToScore((report.Area/report.ConvexHullArea)*1.18); - } - - /** - * Method to score if the particle appears to be a trapezoid. Compares the convex hull (filled in) area to the area of the bounding box. - * The expectation is that the convex hull area is about 95.4% of the bounding box area for an ideal tote. - */ - double TrapezoidScore(ParticleReport report) - { - return ratioToScore(report.ConvexHullArea/((report.BoundingRectRight-report.BoundingRectLeft)*(report.BoundingRectBottom-report.BoundingRectTop)*.954)); - } - - /** - * Method to score if the aspect ratio of the particle appears to match the long side of a tote. - */ - double LongSideScore(ParticleReport report) - { - return ratioToScore(((report.BoundingRectRight-report.BoundingRectLeft)/(report.BoundingRectBottom-report.BoundingRectTop))/LONG_RATIO); - } - - /** - * Method to score if the aspect ratio of the particle appears to match the short side of a tote. - */ - double ShortSideScore(ParticleReport report){ - return ratioToScore(((report.BoundingRectRight-report.BoundingRectLeft)/(report.BoundingRectBottom-report.BoundingRectTop))/SHORT_RATIO); - } - - /** - * Computes the estimated distance to a target using the width of the particle in the image. For more information and graphics - * showing the math behind this approach see the Vision Processing section of the ScreenStepsLive documentation. - * - * @param image The image to use for measuring the particle estimated rectangle - * @param report The Particle Analysis Report for the particle - * @param isLong Boolean indicating if the target is believed to be the long side of a tote - * @return The estimated distance to the target in feet. - */ - double computeDistance (Image *image, ParticleReport report, bool isLong) { - double normalizedWidth, targetWidth; - int xRes, yRes; - - imaqGetImageSize(image, &xRes, &yRes); - normalizedWidth = 2*(report.BoundingRectRight - report.BoundingRectLeft)/xRes; - SmartDashboard::PutNumber("Width", normalizedWidth); - targetWidth = isLong ? 26.9 : 16.9; - - return targetWidth/(normalizedWidth*12*tan(VIEW_ANGLE*M_PI/(180*2))); - } -}; - -START_ROBOT_CLASS(VisionColor2015Sample) - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/2015Vision/Retro_src/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/2015Vision/Retro_src/Robot.cpp deleted file mode 100644 index 00642a109f..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/2015Vision/Retro_src/Robot.cpp +++ /dev/null @@ -1,210 +0,0 @@ -#include "WPILib.h" -#include -#include - -/** - * Example of finding yellow totes based on retroreflective target. - * This example utilizes an image file, which you need to copy to the roboRIO - * To use a camera you will have to integrate the appropriate camera details with this example. - * To use a USB camera instead, see the IntermediateVision example for details - * on using the USB camera. To use an Axis Camera, see the AxisCamera example for details on - * using an Axis Camera. - * - * Sample images can be found here: http://wp.wpi.edu/wpilib/2015/01/16/sample-images-for-vision-projects/ - */ -class VisionRetro2015Sample : public SampleRobot -{ - //A structure to hold measurements of a particle - struct ParticleReport { - double PercentAreaToImageArea; - double Area; - double BoundingRectLeft; - double BoundingRectTop; - double BoundingRectRight; - double BoundingRectBottom; - }; - - //Structure to represent the scores for the various tests used for target identification - struct Scores { - double Area; - double Aspect; - }; - - //Images - Image *frame; - Image *binaryFrame; - int imaqError; - - //Constants - Range RING_HUE_RANGE = {101, 64}; //Default hue range for ring light - Range RING_SAT_RANGE = {88, 255}; //Default saturation range for ring light - Range RING_VAL_RANGE = {134, 255}; //Default value range for ring light - double AREA_MINIMUM = 0.5; //Default Area minimum for particle as a percentage of total image area - double LONG_RATIO = 2.22; //Tote long side = 26.9 / Tote height = 12.1 = 2.22 - double SHORT_RATIO = 1.4; //Tote short side = 16.9 / Tote height = 12.1 = 1.4 - double SCORE_MIN = 75.0; //Minimum score to be considered a tote - double VIEW_ANGLE = 49.4; //View angle fo camera, set to Axis m1011 by default, 64 for m1013, 51.7 for 206, 52 for HD3000 square, 60 for HD3000 640x480 - ParticleFilterCriteria2 criteria[1]; - ParticleFilterOptions2 filterOptions = {0,0,1,1}; - Scores scores; - - -public: - void RobotInit() override { - // create images - frame = imaqCreateImage(IMAQ_IMAGE_RGB, 0); - binaryFrame = imaqCreateImage(IMAQ_IMAGE_U8, 0); - - //Put default values to SmartDashboard so fields will appear - SmartDashboard::PutNumber("Tote hue min", RING_HUE_RANGE.minValue); - SmartDashboard::PutNumber("Tote hue max", RING_HUE_RANGE.maxValue); - SmartDashboard::PutNumber("Tote sat min", RING_SAT_RANGE.minValue); - SmartDashboard::PutNumber("Tote sat max", RING_SAT_RANGE.maxValue); - SmartDashboard::PutNumber("Tote val min", RING_VAL_RANGE.minValue); - SmartDashboard::PutNumber("Tote val max", RING_VAL_RANGE.maxValue); - SmartDashboard::PutNumber("Area min %", AREA_MINIMUM); - } - - void Autonomous() override { - while (IsAutonomous() && IsEnabled()) - { - //read file in from disk. For this example to run you need to copy image.jpg from the SampleImages folder to the - //directory shown below using FTP or SFTP: http://wpilib.screenstepslive.com/s/4485/m/24166/l/282299-roborio-ftp - imaqError = imaqReadFile(frame, "//home//lvuser//SampleImages//image.jpg", NULL, NULL); - - //Update threshold values from SmartDashboard. For performance reasons it is recommended to remove this after calibration is finished. - RING_HUE_RANGE.minValue = SmartDashboard::GetNumber("Tote hue min", RING_HUE_RANGE.minValue); - RING_HUE_RANGE.maxValue = SmartDashboard::GetNumber("Tote hue max", RING_HUE_RANGE.maxValue); - RING_SAT_RANGE.minValue = SmartDashboard::GetNumber("Tote sat min", RING_SAT_RANGE.minValue); - RING_SAT_RANGE.maxValue = SmartDashboard::GetNumber("Tote sat max", RING_SAT_RANGE.maxValue); - RING_VAL_RANGE.minValue = SmartDashboard::GetNumber("Tote val min", RING_VAL_RANGE.minValue); - RING_VAL_RANGE.maxValue = SmartDashboard::GetNumber("Tote val max", RING_VAL_RANGE.maxValue); - - //Threshold the image looking for ring light color - imaqError = imaqColorThreshold(binaryFrame, frame, 255, IMAQ_HSV, &RING_HUE_RANGE, &RING_SAT_RANGE, &RING_VAL_RANGE); - - //Send particle count to dashboard - int numParticles = 0; - imaqError = imaqCountParticles(binaryFrame, 1, &numParticles); - SmartDashboard::PutNumber("Masked particles", numParticles); - - //Send masked image to dashboard to assist in tweaking mask. - SendToDashboard(binaryFrame, imaqError); - - //filter out small particles - float areaMin = SmartDashboard::GetNumber("Area min %", AREA_MINIMUM); - criteria[0] = {IMAQ_MT_AREA_BY_IMAGE_AREA, areaMin, 100, false, false}; - imaqError = imaqParticleFilter4(binaryFrame, binaryFrame, criteria, 1, &filterOptions, NULL, NULL); - - //Send particle count after filtering to dashboard - imaqError = imaqCountParticles(binaryFrame, 1, &numParticles); - SmartDashboard::PutNumber("Filtered particles", numParticles); - - if(numParticles > 0) { - //Measure particles and sort by particle size - std::vector particles; - for(int particleIndex = 0; particleIndex < numParticles; particleIndex++) - { - ParticleReport par; - imaqMeasureParticle(binaryFrame, particleIndex, 0, IMAQ_MT_AREA_BY_IMAGE_AREA, &(par.PercentAreaToImageArea)); - imaqMeasureParticle(binaryFrame, particleIndex, 0, IMAQ_MT_AREA, &(par.Area)); - imaqMeasureParticle(binaryFrame, particleIndex, 0, IMAQ_MT_BOUNDING_RECT_TOP, &(par.BoundingRectTop)); - imaqMeasureParticle(binaryFrame, particleIndex, 0, IMAQ_MT_BOUNDING_RECT_LEFT, &(par.BoundingRectLeft)); - imaqMeasureParticle(binaryFrame, particleIndex, 0, IMAQ_MT_BOUNDING_RECT_BOTTOM, &(par.BoundingRectBottom)); - imaqMeasureParticle(binaryFrame, particleIndex, 0, IMAQ_MT_BOUNDING_RECT_RIGHT, &(par.BoundingRectRight)); - particles.push_back(par); - } - sort(particles.begin(), particles.end(), CompareParticleSizes); - - //This example only scores the largest particle. Extending to score all particles and choosing the desired one is left as an exercise - //for the reader. Note that this scores and reports information about a single particle (single L shaped target). To get accurate information - //about the location of the tote (not just the distance) you will need to correlate two adjacent targets in order to find the true center of the tote. - scores.Aspect = AspectScore(particles.at(0)); - SmartDashboard::PutNumber("Aspect", scores.Aspect); - scores.Area = AreaScore(particles.at(0)); - SmartDashboard::PutNumber("Area", scores.Area); - bool isTarget = scores.Area > SCORE_MIN && scores.Aspect > SCORE_MIN; - - //Send distance and tote status to dashboard. The bounding rect, particularly the horizontal center (left - right) may be useful for rotating/driving towards a tote - SmartDashboard::PutBoolean("IsTarget", isTarget); - SmartDashboard::PutNumber("Distance", computeDistance(binaryFrame, particles.at(0))); - } else { - SmartDashboard::PutBoolean("IsTarget", false); - } - - Wait(0.005); // wait for a motor update time - } - } - - void OperatorControl() override { - while(IsOperatorControl() && IsEnabled()) { - Wait(0.005); // wait for a motor update time - } - } - - - //Send image to dashboard if IMAQ has not thrown an error - void SendToDashboard(Image *image, int error) - { - if(error < ERR_SUCCESS) { - DriverStation::ReportError("Send To Dashboard error: " + std::to_string((long)imaqError) + "\n"); - } else { - CameraServer::GetInstance()->SetImage(binaryFrame); - } - } - - //Comparator function for sorting particles. Returns true if particle 1 is larger - static bool CompareParticleSizes(ParticleReport particle1, ParticleReport particle2) - { - //we want descending sort order - return particle1.PercentAreaToImageArea > particle2.PercentAreaToImageArea; - } - - /** - * Converts a ratio with ideal value of 1 to a score. The resulting function is piecewise - * linear going from (0,0) to (1,100) to (2,0) and is 0 for all inputs outside the range 0-2 - */ - double ratioToScore(double ratio) - { - return (fmax(0, fmin(100*(1-fabs(1-ratio)), 100))); - } - - - double AreaScore(ParticleReport report) - { - double boundingArea = (report.BoundingRectBottom - report.BoundingRectTop) * (report.BoundingRectRight - report.BoundingRectLeft); - //Tape is 7" edge so 49" bounding rect. With 2" wide tape it covers 24" of the rect. - return ratioToScore((49/24)*report.Area/boundingArea); - } - - /** - * Method to score if the aspect ratio of the particle appears to match the retro-reflective target. Target is 7"x7" so aspect should be 1 - */ - double AspectScore(ParticleReport report) - { - return ratioToScore(((report.BoundingRectRight-report.BoundingRectLeft)/(report.BoundingRectBottom-report.BoundingRectTop))); - } - - - /** - * Computes the estimated distance to a target using the width of the particle in the image. For more information and graphics - * showing the math behind this approach see the Vision Processing section of the ScreenStepsLive documentation. - * - * @param image The image to use for measuring the particle estimated rectangle - * @param report The Particle Analysis Report for the particle - * @return The estimated distance to the target in feet. - */ - double computeDistance (Image *image, ParticleReport report) { - double normalizedWidth, targetWidth; - int xRes, yRes; - - imaqGetImageSize(image, &xRes, &yRes); - normalizedWidth = 2*(report.BoundingRectRight - report.BoundingRectLeft)/xRes; - SmartDashboard::PutNumber("Width", normalizedWidth); - targetWidth = 7; - - return targetWidth/(normalizedWidth*12*tan(VIEW_ANGLE*M_PI/(180*2))); - } -}; - -START_ROBOT_CLASS(VisionRetro2015Sample) diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/ArcadeDrive/src/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/ArcadeDrive/src/Robot.cpp deleted file mode 100755 index cb46a8f987..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/ArcadeDrive/src/Robot.cpp +++ /dev/null @@ -1,40 +0,0 @@ -#include "WPILib.h" - -/** - * This is a demo program showing the use of the RobotDrive class. - * The SampleRobot class is the base of a robot application that will automatically call your - * Autonomous and OperatorControl methods at the right time as controlled by the switches on - * the driver station or the field controls. - * - * WARNING: While it may look like a good choice to use for your code if you're inexperienced, - * don't. Unless you know what you are doing, complex code will be much more difficult under - * this system. Use IterativeRobot or Command-Based instead if you're new. - */ -class Robot: public SampleRobot -{ - RobotDrive myRobot; // robot drive system - Joystick stick; // only joystick - -public: - Robot() : - myRobot(0, 1), // initialize the RobotDrive to use motor controllers on ports 0 and 1 - stick(0) - { - myRobot.SetExpiration(0.1); - } - - /** - * Runs the motors with arcade steering. - */ - void OperatorControl() - { - while (IsOperatorControl() && IsEnabled()) - { - myRobot.ArcadeDrive(stick); // drive with arcade style (use right stick) - Wait(0.005); // wait for a motor update time - } - } - -}; - -START_ROBOT_CLASS(Robot) diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/AxisCameraSample/src/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/AxisCameraSample/src/Robot.cpp deleted file mode 100644 index 408859c58e..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/AxisCameraSample/src/Robot.cpp +++ /dev/null @@ -1,37 +0,0 @@ -#include "WPILib.h" - -/** - * Uses AxisCamera class to manually acquire a new image each frame, and annotate the image by drawing - * a circle on it, and show it on the FRC Dashboard. - */ -class AxisCameraSample : public SampleRobot -{ - IMAQdxSession session; - Image *frame; - IMAQdxError imaqError; - std::unique_ptr camera; - -public: - void RobotInit() override { - // create an image - frame = imaqCreateImage(IMAQ_IMAGE_RGB, 0); - - // open the camera at the IP address assigned. This is the IP address that the camera - // can be accessed through the web interface. - camera.reset(new AxisCamera("axis-camera.local")); - } - - void OperatorControl() override { - // grab an image, draw the circle, and provide it for the camera server which will - // in turn send it to the dashboard. - while(IsOperatorControl() && IsEnabled()) { - camera->GetImage(frame); - imaqDrawShapeOnImage(frame, frame, { 10, 10, 100, 100 }, DrawMode::IMAQ_DRAW_VALUE, ShapeMode::IMAQ_SHAPE_OVAL, 0.0f); - CameraServer::GetInstance()->SetImage(frame); - Wait(0.05); - } - } -}; - -START_ROBOT_CLASS(AxisCameraSample) - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/CANPDP/src/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/CANPDP/src/Robot.cpp deleted file mode 100644 index 7376310a25..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/CANPDP/src/Robot.cpp +++ /dev/null @@ -1,47 +0,0 @@ -#include "WPILib.h" - -/** - * This is a sample program showing how to retrieve information from - * the Power Distribution Panel via CAN. - * The information will be displayed under variables through the SmartDashboard. - */ -class Robot: public SampleRobot -{ - - // Object for dealing with the Power Distribution Panel (PDP). - PowerDistributionPanel m_pdp; - - // Update every 5milliseconds/0.005 seconds. - const double kUpdatePeriod = 0.005; - -public: - Robot() { - } - - /** - * Retrieve information from the PDP over CAN and - * displays it on the SmartDashboard interface. - * SmartDashboard::PutNumber takes a string (for a label) and a double; - * GetCurrent takes a channel number and returns a double for current, - * in Amperes. Channel numbers are printed on the PDP and range from 0-15. - */ - void OperatorControl() - { - while (IsOperatorControl() && IsEnabled()) - { - // Get the current going through channel 7, in Amperes. - // The PDP returns the current in increments of 0.125A. - // At low currents the current readings tend to be less accurate. - SmartDashboard::PutNumber("Current Channel 7", m_pdp.GetCurrent(7)); - // Get the voltage going into the PDP, in Volts. - // The PDP returns the voltage in increments of 0.05 Volts. - SmartDashboard::PutNumber("Voltage", m_pdp.GetVoltage()); - // Retrieves the temperature of the PDP, in degrees Celsius. - SmartDashboard::PutNumber("Temperature", m_pdp.GetTemperature()); - Wait(kUpdatePeriod); - } - } - -}; - -START_ROBOT_CLASS(Robot) diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/CANTalon/src/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/CANTalon/src/Robot.cpp deleted file mode 100644 index 4bd8a85a09..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/CANTalon/src/Robot.cpp +++ /dev/null @@ -1,38 +0,0 @@ -#include "WPILib.h" - -/** - * This sample shows how to use the new CANTalon to just run a motor in a basic - * throttle mode, in the same manner as you might control a traditional PWM - * controlled motor. - * - */ -class Robot : public SampleRobot { - CANTalon m_motor; - - Joystick m_stick; - - // update every 0.01 seconds/10 milliseconds. - // The talon only receives control packets every 10ms. - double kUpdatePeriod = 0.010; - -public: - Robot() - : m_motor(1), // Initialize the Talon as device 1. Use the roboRIO web - // interface to change the device number on the talons. - m_stick(0) - {} - - /** - * Runs the motor from the output of a Joystick. - */ - void OperatorControl() { - while (IsOperatorControl() && IsEnabled()) { - // Takes a number from -1.0 (full reverse) to +1.0 (full forwards). - m_motor.Set(m_stick.GetY()); - - Wait(kUpdatePeriod); // Wait a bit so that the loop doesn't lock everything up. - } - } -}; - -START_ROBOT_CLASS(Robot) diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/CANTalonPID/src/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/CANTalonPID/src/Robot.cpp deleted file mode 100644 index 3831cdefcf..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/CANTalonPID/src/Robot.cpp +++ /dev/null @@ -1,63 +0,0 @@ -#include "WPILib.h" - -/** - * This is a quick sample program to show how to use the new Talon SRX over CAN. - * This particular sample demonstrates running a basic PID control loop with an - * analog potentiometer. - * - */ -class Robot : public SampleRobot { - CANTalon m_motor; - -public: - Robot() - : m_motor(1) // Initialize the Talon as device 1. Use the roboRIO web - // interface to change the device number on the m_motors. - { - // This sets the mode of the m_motor. The options are: - // kPercentVbus: basic throttle; no closed-loop. - // kCurrent: Runs the motor with the specified current if possible. - // kSpeed: Runs a PID control loop to keep the motor going at a constant - // speed using the specified sensor. - // kPosition: Runs a PID control loop to move the motor to a specified move - // the motor to a specified sensor position. - // kVoltage: Runs the m_motor at a constant voltage, if possible. - // kFollower: The m_motor will run at the same throttle as the specified other talon. - m_motor.SetControlMode(CANSpeedController::kPosition); - // This command allows you to specify which feedback device to use when doing - // closed-loop control. The options are: - // AnalogPot: Basic analog potentiometer - // QuadEncoder: Quadrature Encoder - // AnalogEncoder: Analog Encoder - // EncRising: Counts the rising edges of the QuadA pin (allows use of a - // non-quadrature encoder) - // EncFalling: Same as EncRising, but counts on falling edges. - m_motor.SetFeedbackDevice(CANTalon::AnalogPot); - // This sets the basic P, I , and D values (F, Izone, and rampRate can also - // be set, but are ignored here). - // These must all be positive floating point numbers (SetSensorDirection will - // multiply the sensor values by negative one in case your sensor is flipped - // relative to your motor). - // These values are in units of throttle / sensor_units where throttle ranges - // from -1023 to +1023 and sensor units are from 0 - 1023 for analog - // potentiometers, encoder ticks for encoders, and position / 10ms for - // speeds. - m_motor.SetPID(1.0, 0.0, 0.0); - } - - /** - * Runs the motor from the output of a Joystick. - */ - void OperatorControl() { - while (IsOperatorControl() && IsEnabled()) { - // In closed loop mode, this sets the goal in the units mentioned above. - // Since we are using an analog potentiometer, this will try to go to - // the middle of the potentiometer range. - m_motor.Set(512); - - Wait(5.0); - } - } -}; - -START_ROBOT_CLASS(Robot) diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/Encoder/src/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/Encoder/src/Robot.cpp deleted file mode 100644 index 57797b251a..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/Encoder/src/Robot.cpp +++ /dev/null @@ -1,82 +0,0 @@ -#include "WPILib.h" - -/** - * Sample program displaying the value of a quadrature encoder on the SmartDashboard. - * Quadrature Encoders are digital sensors which can detect the amount the encoder - * has rotated since starting as well as the direction in which the encoder - * shaft is rotating. However, encoders can not tell you the absolute - * position of the encoder shaft (ie, it considers where it starts to be the - * zero position, no matter where it starts), and so can only tell you how - * much the encoder has rotated since starting. - * Depending on the precision of an encoder, it will have fewer or greater - * ticks per revolution; the number of ticks per revolution will affect the - * conversion between ticks and distance, as specified by DistancePerPulse. - * One of the most common uses of encoders is in the drivetrain, so that the - * distance that the robot drives can be precisely controlled during the - * autonomous mode. - */ -class Robot: public SampleRobot -{ - Encoder m_encoder; - - /** - * Time to wait between updating SmartDashboard values. - * It is generally a good idea to stick a short wait in these loops - * to avoid hogging CPU power, especially as there will be no - * perceivable difference in the SmartDashboard display. - */ - const double kUpdatePeriod = 0.005; // 5milliseconds / 0.005 seconds. - -public: - /** - * The Encoder object is constructed with 4 parameters, the last two being optional. - * The first two parameters (1, 2 in this case) refer to the ports on the - * roboRIO which the encoder uses. Because a quadrature encoder has - * two signal wires, the signal from two DIO ports on the roboRIO are used. - * The third (optional) parameter is a boolean which defaults to false. - * If you set this parameter to true, the direction of the encoder will - * be reversed, in case it makes more sense mechanically. - * The final (optional) parameter specifies encoding rate (k1X, k2X, or k4X) - * and defaults to k4X. Faster (k4X) encoding gives greater positional - * precision but more noise in the rate. - */ - Robot() : m_encoder(1, 2, false, Encoder::k4X) - { - // Defines the number of samples to average when determining the rate. - // On a quadrature encoder, values range from 1-255; larger values - // result in smoother but potentially less accurate rates than lower values. - m_encoder.SetSamplesToAverage(5); - - // Defines how far the mechanism attached to the encoder moves per pulse. - // In this case, we assume that a 360 count encoder is directly attached - // to a 3 inch diameter (1.5inch radius) wheel, and that we want to - // measure distance in inches. - m_encoder.SetDistancePerPulse(1.0 / 360.0 * 2.0 * 3.1415 * 1.5); - - // Defines the lowest rate at which the encoder will not be considered - // stopped, for the purposes of the GetStopped() method. - // Units are in distance / second, where distance refers to the units - // of distance that you are using, in this case inches. - m_encoder.SetMinRate(1.0); - } - - /** - * Retrieve various information from the encoder and display it - * on the SmartDashboard. - */ - void OperatorControl() - { - while (IsOperatorControl() && IsEnabled()) - { - // Retrieve the net displacement of the Encoder since the lsat Reset. - SmartDashboard::PutNumber("Encoder Distance", m_encoder.GetDistance()); - - // Retrieve the current rate of the encoder. - SmartDashboard::PutNumber("Encoder Rate", m_encoder.GetRate()); - - Wait(kUpdatePeriod); // Wait a short bit before updating again. - } - } -}; - -START_ROBOT_CLASS(Robot) diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/Autonomous.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/Autonomous.cpp deleted file mode 100644 index fd5077762d..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/Autonomous.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include "Autonomous.h" -#include "PrepareToPickup.h" -#include "Pickup.h" -#include "Place.h" -#include "SetDistanceToBox.h" -#include "DriveStraight.h" -#include "SetWristSetpoint.h" -#include "CloseClaw.h" - -#include - -Autonomous::Autonomous() : CommandGroup("Autonomous") { - AddSequential(new PrepareToPickup()); - AddSequential(new Pickup()); - AddSequential(new SetDistanceToBox(0.10)); - // AddSequential(new DriveStraight(4)); // Use Encoders if ultrasonic is broken - AddSequential(new Place()); - AddSequential(new SetDistanceToBox(0.60)); - // addSequential(new DriveStraight(-2)); // Use Encoders if ultrasonic is broken - AddParallel(new SetWristSetpoint(-45)); - AddSequential(new CloseClaw()); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/Autonomous.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/Autonomous.h deleted file mode 100644 index 143f89401c..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/Autonomous.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef Autonomous_H -#define Autonomous_H - -#include "Commands/CommandGroup.h" - -/** - * The main autonomous command to pickup and deliver the - * soda to the box. - */ -class Autonomous: public CommandGroup { -public: - Autonomous(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/CloseClaw.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/CloseClaw.cpp deleted file mode 100644 index 9b4262fc00..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/CloseClaw.cpp +++ /dev/null @@ -1,34 +0,0 @@ -#include "CloseClaw.h" -#include "Robot.h" - -CloseClaw::CloseClaw() : Command("CloseClaw") { - Requires(Robot::claw.get()); -} - -// Called just before this Command runs the first time -void CloseClaw::Initialize() { - Robot::claw->Close(); -} - -// Called repeatedly when this Command is scheduled to run -void CloseClaw::Execute() {} - -// Make this return true when this Command no longer needs to run execute() -bool CloseClaw::IsFinished() { - return Robot::claw->IsGripping() ; -} - -// Called once after isFinished returns true -void CloseClaw::End() { - // NOTE: Doesn't stop in simulation due to lower friction causing the can to fall out - // + there is no need to worry about stalling the motor or crushing the can. - #ifdef REAL - Robot::claw->Stop(); - #endif -} - -// Called when another command which requires one or more of the same -// subsystems is scheduled to run -void CloseClaw::Interrupted() { - End(); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/CloseClaw.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/CloseClaw.h deleted file mode 100644 index d265091495..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/CloseClaw.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef CloseClaw_H -#define CloseClaw_H - -#include "Commands/Command.h" - -/** - * Opens the claw for one second. Real robots should use sensors, stalling - * motors is BAD! - */ -class CloseClaw: public Command { -public: - CloseClaw(); - void Initialize(); - void Execute(); - bool IsFinished(); - void End(); - void Interrupted(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/DriveStraight.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/DriveStraight.cpp deleted file mode 100644 index 9945514ab6..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/DriveStraight.cpp +++ /dev/null @@ -1,50 +0,0 @@ -#include "DriveStraight.h" -#include "Robot.h" - -DriveStraight::DriveStraight(double distance) { - Requires(Robot::drivetrain.get()); - pid = new PIDController(4, 0, 0, new DriveStraightPIDSource(), - new DriveStraightPIDOutput()); - pid->SetAbsoluteTolerance(0.01); - pid->SetSetpoint(distance); -} - -// Called just before this Command runs the first time -void DriveStraight::Initialize() { - // Get everything in a safe starting state. - Robot::drivetrain->Reset(); - pid->Reset(); - pid->Enable(); -} - -// Called repeatedly when this Command is scheduled to run -void DriveStraight::Execute() {} - -// Make this return true when this Command no longer needs to run execute() -bool DriveStraight::IsFinished() { - return pid->OnTarget(); -} - -// Called once after isFinished returns true -void DriveStraight::End() { - // Stop PID and the wheels - pid->Disable(); - Robot::drivetrain->Drive(0, 0); -} - -// Called when another command which requires one or more of the same -// subsystems is scheduled to run -void DriveStraight::Interrupted() { - End(); -} - - -DriveStraightPIDSource::~DriveStraightPIDSource() {} -double DriveStraightPIDSource::PIDGet() { - return Robot::drivetrain->GetDistance(); -} - -DriveStraightPIDOutput::~DriveStraightPIDOutput() {} -void DriveStraightPIDOutput::PIDWrite(float d) { - Robot::drivetrain->Drive(d, d); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/DriveStraight.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/DriveStraight.h deleted file mode 100644 index 50cd0b8e60..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/DriveStraight.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef DriveStraight_H -#define DriveStraight_H - -#include "WPILib.h" -#include "Commands/Command.h" - -/** - * Drive the given distance straight (negative values go backwards). - * Uses a local PID controller to run a simple PID loop that is only - * enabled while this command is running. The input is the averaged - * values of the left and right encoders. - */ -class DriveStraight: public Command { -public: - DriveStraight(double distance); - void Initialize(); - void Execute(); - bool IsFinished(); - void End(); - void Interrupted(); -private: - PIDController* pid; -}; - -class DriveStraightPIDSource: public PIDSource { -public: - virtual ~DriveStraightPIDSource(); - double PIDGet(); -}; - -class DriveStraightPIDOutput: public PIDOutput { -public: - virtual ~DriveStraightPIDOutput(); - void PIDWrite(float d); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/OpenClaw.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/OpenClaw.cpp deleted file mode 100644 index 16ece43b9d..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/OpenClaw.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#include "OpenClaw.h" -#include "Robot.h" - -OpenClaw::OpenClaw() : Command("OpenClaw") { - Requires(Robot::claw.get()); - SetTimeout(1); -} - -// Called just before this Command runs the first time -void OpenClaw::Initialize() { - Robot::claw->Open(); -} - -// Called repeatedly when this Command is scheduled to run -void OpenClaw::Execute() {} - -// Make this return true when this Command no longer needs to run execute() -bool OpenClaw::IsFinished() { - return IsTimedOut(); -} - -// Called once after isFinished returns true -void OpenClaw::End() { - Robot::claw->Stop(); -} - -// Called when another command which requires one or more of the same -// subsystems is scheduled to run -void OpenClaw::Interrupted() { - End(); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/OpenClaw.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/OpenClaw.h deleted file mode 100644 index 15a059c2d4..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/OpenClaw.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef OpenClaw_H -#define OpenClaw_H - -#include "Commands/Command.h" - -/** - * Opens the claw for one second. Real robots should use sensors, stalling - * motors is BAD! - */ -class OpenClaw: public Command { -public: - OpenClaw(); - void Initialize(); - void Execute(); - bool IsFinished(); - void End(); - void Interrupted(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/Pickup.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/Pickup.cpp deleted file mode 100644 index c8e8dbe3b8..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/Pickup.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include "Pickup.h" -#include "CloseClaw.h" -#include "SetWristSetpoint.h" -#include "SetElevatorSetpoint.h" - -#include - -Pickup::Pickup() : CommandGroup("Pickup") { - AddSequential(new CloseClaw()); - AddParallel(new SetWristSetpoint(-45)); - AddSequential(new SetElevatorSetpoint(0.25)); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/Pickup.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/Pickup.h deleted file mode 100644 index ba08500a09..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/Pickup.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef Pickup_H -#define Pickup_H - -#include "Commands/CommandGroup.h" - -/** - * Pickup a soda can (if one is between the open claws) and - * get it in a safe state to drive around. - */ -class Pickup: public CommandGroup { -public: - Pickup(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/Place.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/Place.cpp deleted file mode 100644 index c535b4b4cc..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/Place.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include "Place.h" -#include "OpenClaw.h" -#include "SetWristSetpoint.h" -#include "SetElevatorSetpoint.h" - -#include - -Place::Place() : CommandGroup("Place") { - AddSequential(new SetElevatorSetpoint(0.25)); - AddSequential(new SetWristSetpoint(0)); - AddSequential(new OpenClaw()); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/Place.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/Place.h deleted file mode 100644 index d8fbc9b9ba..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/Place.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef Place_H -#define Place_H - -#include "Commands/CommandGroup.h" - -/** - * Place a held soda can onto the platform. - */ -class Place: public CommandGroup { -public: - Place(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/PrepareToPickup.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/PrepareToPickup.cpp deleted file mode 100644 index f63d242199..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/PrepareToPickup.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include "PrepareToPickup.h" -#include "OpenClaw.h" -#include "SetWristSetpoint.h" -#include "SetElevatorSetpoint.h" - -#include - -PrepareToPickup::PrepareToPickup() : CommandGroup("PrepareToPickup") { - AddParallel(new OpenClaw()); - AddParallel(new SetWristSetpoint(0)); - AddSequential(new SetElevatorSetpoint(0)); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/PrepareToPickup.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/PrepareToPickup.h deleted file mode 100644 index ec336a0037..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/PrepareToPickup.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef PrepareToPickup_H -#define PrepareToPickup_H - -#include "Commands/CommandGroup.h" - -/** - * Make sure the robot is in a state to pickup soda cans. - */ -class PrepareToPickup: public CommandGroup { -public: - PrepareToPickup(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/SetDistanceToBox.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/SetDistanceToBox.cpp deleted file mode 100644 index 27f70f6f38..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/SetDistanceToBox.cpp +++ /dev/null @@ -1,50 +0,0 @@ -#include "SetDistanceToBox.h" -#include "Robot.h" - -SetDistanceToBox::SetDistanceToBox(double distance) { - Requires(Robot::drivetrain.get()); - pid = new PIDController(-2, 0, 0, new SetDistanceToBoxPIDSource(), - new SetDistanceToBoxPIDOutput()); - pid->SetAbsoluteTolerance(0.01); - pid->SetSetpoint(distance); -} - -// Called just before this Command runs the first time -void SetDistanceToBox::Initialize() { - // Get everything in a safe starting state. - Robot::drivetrain->Reset(); - pid->Reset(); - pid->Enable(); -} - -// Called repeatedly when this Command is scheduled to run -void SetDistanceToBox::Execute() {} - -// Make this return true when this Command no longer needs to run execute() -bool SetDistanceToBox::IsFinished() { - return pid->OnTarget(); -} - -// Called once after isFinished returns true -void SetDistanceToBox::End() { - // Stop PID and the wheels - pid->Disable(); - Robot::drivetrain->Drive(0, 0); -} - -// Called when another command which requires one or more of the same -// subsystems is scheduled to run -void SetDistanceToBox::Interrupted() { - End(); -} - - -SetDistanceToBoxPIDSource::~SetDistanceToBoxPIDSource() {} -double SetDistanceToBoxPIDSource::PIDGet() { - return Robot::drivetrain->GetDistanceToObstacle(); -} - -SetDistanceToBoxPIDOutput::~SetDistanceToBoxPIDOutput() {} -void SetDistanceToBoxPIDOutput::PIDWrite(float d) { - Robot::drivetrain->Drive(d, d); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/SetDistanceToBox.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/SetDistanceToBox.h deleted file mode 100644 index 1c284884db..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/SetDistanceToBox.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef SetDistanceToBox_H -#define SetDistanceToBox_H - -#include "WPILib.h" -#include "Commands/Command.h" - -/** - * Drive until the robot is the given distance away from the box. Uses a local - * PID controller to run a simple PID loop that is only enabled while this - * command is running. The input is the averaged values of the left and right - * encoders. - */ -class SetDistanceToBox: public Command { -public: - SetDistanceToBox(double distance); - void Initialize(); - void Execute(); - bool IsFinished(); - void End(); - void Interrupted(); -private: - PIDController* pid; -}; - -class SetDistanceToBoxPIDSource: public PIDSource { -public: - virtual ~SetDistanceToBoxPIDSource(); - double PIDGet(); -}; - -class SetDistanceToBoxPIDOutput: public PIDOutput { -public: - virtual ~SetDistanceToBoxPIDOutput(); - void PIDWrite(float d); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/SetElevatorSetpoint.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/SetElevatorSetpoint.cpp deleted file mode 100644 index d8f475e7a4..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/SetElevatorSetpoint.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#include "SetElevatorSetpoint.h" -#include "Robot.h" -#include - -SetElevatorSetpoint::SetElevatorSetpoint(double setpoint) : Command("SetElevatorSetpoint") { - this->setpoint = setpoint; - Requires(Robot::elevator.get()); -} - -// Called just before this Command runs the first time -void SetElevatorSetpoint::Initialize() { - Robot::elevator->SetSetpoint(setpoint); - Robot::elevator->Enable(); -} - -// Called repeatedly when this Command is scheduled to run -void SetElevatorSetpoint::Execute() {} - -// Make this return true when this Command no longer needs to run execute() -bool SetElevatorSetpoint::IsFinished() { - return Robot::elevator->OnTarget(); -} - -// Called once after isFinished returns true -void SetElevatorSetpoint::End() {} - -// Called when another command which requires one or more of the same -// subsystems is scheduled to run -void SetElevatorSetpoint::Interrupted() {} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/SetElevatorSetpoint.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/SetElevatorSetpoint.h deleted file mode 100644 index 1c8454c7b4..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/SetElevatorSetpoint.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef SetElevatorSetpoint_H -#define SetElevatorSetpoint_H - -#include "Commands/Command.h" - -/** - * Move the elevator to a given location. This command finishes when it is within - * the tolerance, but leaves the PID loop running to maintain the position. Other - * commands using the elevator should make sure they disable PID! - */ -class SetElevatorSetpoint: public Command { -private: - double setpoint; -public: - SetElevatorSetpoint(double setpoint); - void Initialize(); - void Execute(); - bool IsFinished(); - void End(); - void Interrupted(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/SetWristSetpoint.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/SetWristSetpoint.cpp deleted file mode 100644 index 9648d33999..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/SetWristSetpoint.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include "SetWristSetpoint.h" -#include "Robot.h" - -SetWristSetpoint::SetWristSetpoint(double setpoint) : Command("SetWristSetpoint") { - this->setpoint = setpoint; - Requires(Robot::wrist.get()); -} - -// Called just before this Command runs the first time -void SetWristSetpoint::Initialize() { - Robot::wrist->SetSetpoint(setpoint); - Robot::wrist->Enable(); -} - -// Called repeatedly when this Command is scheduled to run -void SetWristSetpoint::Execute() {} - -// Make this return true when this Command no longer needs to run execute() -bool SetWristSetpoint::IsFinished() { - return Robot::wrist->OnTarget(); -} - -// Called once after isFinished returns true -void SetWristSetpoint::End() {} - -// Called when another command which requires one or more of the same -// subsystems is scheduled to run -void SetWristSetpoint::Interrupted() {} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/SetWristSetpoint.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/SetWristSetpoint.h deleted file mode 100644 index 87c9db506c..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/SetWristSetpoint.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef SetWristSetpoint_H -#define SetWristSetpoint_H - -#include "Commands/Command.h" - -/** - * Move the wrist to a given angle. This command finishes when it is within - * the tolerance, but leaves the PID loop running to maintain the position. - * Other commands using the wrist should make sure they disable PID! - */ -class SetWristSetpoint: public Command { -private: - double setpoint; -public: - SetWristSetpoint(double setpoint); - void Initialize(); - void Execute(); - bool IsFinished(); - void End(); - void Interrupted(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/TankDriveWithJoystick.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/TankDriveWithJoystick.cpp deleted file mode 100644 index a3c9e817ee..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/TankDriveWithJoystick.cpp +++ /dev/null @@ -1,30 +0,0 @@ -#include "TankDriveWithJoystick.h" -#include "Robot.h" - -TankDriveWithJoystick::TankDriveWithJoystick() : Command("TankDriveWithJoystick") { - Requires(Robot::drivetrain.get()); -} - -// Called just before this Command runs the first time -void TankDriveWithJoystick::Initialize() {} - -// Called repeatedly when this Command is scheduled to run -void TankDriveWithJoystick::Execute() { - Robot::drivetrain->Drive(Robot::oi->GetJoystick()); -} - -// Make this return true when this Command no longer needs to run execute() -bool TankDriveWithJoystick::IsFinished() { - return false; -} - -// Called once after isFinished returns true -void TankDriveWithJoystick::End() { - Robot::drivetrain->Drive(0, 0); -} - -// Called when another command which requires one or more of the same -// subsystems is scheduled to run -void TankDriveWithJoystick::Interrupted() { - End(); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/TankDriveWithJoystick.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/TankDriveWithJoystick.h deleted file mode 100644 index 65cd935628..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Commands/TankDriveWithJoystick.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef TankDriveWithJoystick_H -#define TankDriveWithJoystick_H - -#include "Commands/Command.h" - -/** - * Have the robot drive tank style using the PS3 Joystick until interrupted. - */ -class TankDriveWithJoystick: public Command { -public: - TankDriveWithJoystick(); - void Initialize(); - void Execute(); - bool IsFinished(); - void End(); - void Interrupted(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/OI.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/OI.cpp deleted file mode 100644 index de47c3ae6d..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/OI.cpp +++ /dev/null @@ -1,50 +0,0 @@ -/* - * OI.cpp - * - * Created on: Jun 3, 2014 - * Author: alex - */ - -#include "OI.h" - -#include "Commands/SetElevatorSetpoint.h" -#include "Commands/OpenClaw.h" -#include "Commands/CloseClaw.h" -#include "Commands/PrepareToPickup.h" -#include "Commands/Pickup.h" -#include "Commands/Place.h" -#include "Commands/Autonomous.h" - -OI::OI() { - SmartDashboard::PutData("Open Claw", new OpenClaw()); - SmartDashboard::PutData("Close Claw", new CloseClaw()); - - joy= new Joystick(0); - - - // Create some buttons - JoystickButton* d_up = new JoystickButton(joy, 5); - JoystickButton* d_right= new JoystickButton(joy, 6); - JoystickButton* d_down= new JoystickButton(joy, 7); - JoystickButton* d_left = new JoystickButton(joy, 8); - JoystickButton* l2 = new JoystickButton(joy, 9); - JoystickButton* r2 = new JoystickButton(joy, 10); - JoystickButton* l1 = new JoystickButton(joy, 11); - JoystickButton* r1 = new JoystickButton(joy, 12); - - // Connect the buttons to commands - d_up->WhenPressed(new SetElevatorSetpoint(0.2)); - d_down->WhenPressed(new SetElevatorSetpoint(-0.2)); - d_right->WhenPressed(new CloseClaw()); - d_left->WhenPressed(new OpenClaw()); - - r1->WhenPressed(new PrepareToPickup()); - r2->WhenPressed(new Pickup()); - l1->WhenPressed(new Place()); - l2->WhenPressed(new Autonomous()); -} - - -Joystick* OI::GetJoystick() { - return joy; -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/OI.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/OI.h deleted file mode 100644 index d5c56469c1..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/OI.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * OI.h - * - * Created on: Jun 3, 2014 - * Author: alex - */ - -#ifndef OI_H_ -#define OI_H_ - -#include "WPILib.h" - -class OI { -public: - OI(); - Joystick* GetJoystick(); - -private: - Joystick* joy; -}; - -#endif /* OI_H_ */ diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Robot.cpp deleted file mode 100644 index 26a2a2076b..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Robot.cpp +++ /dev/null @@ -1,52 +0,0 @@ - -#include "Robot.h" - -std::shared_ptr Robot::drivetrain; -std::shared_ptr Robot::elevator; -std::shared_ptr Robot::wrist; -std::shared_ptr Robot::claw; - -std::unique_ptr Robot::oi; - -void Robot::RobotInit() { - drivetrain.reset(new DriveTrain()); - elevator.reset(new Elevator()); - wrist.reset(new Wrist()); - claw.reset(new Claw()); - - oi.reset(new OI()); - - // Show what command your subsystem is running on the SmartDashboard - SmartDashboard::PutData(drivetrain.get()); - SmartDashboard::PutData(elevator.get()); - SmartDashboard::PutData(wrist.get()); - SmartDashboard::PutData(claw.get()); -} - -void Robot::AutonomousInit() { - autonomousCommand.Start(); - std::cout << "Starting Auto" << std::endl; -} - -void Robot::AutonomousPeriodic() { - Scheduler::GetInstance()->Run(); -} - -void Robot::TeleopInit() { - // This makes sure that the autonomous stops running when - // teleop starts running. If you want the autonomous to - // continue until interrupted by another command, remove - // this line or comment it out. - autonomousCommand.Cancel(); - std::cout << "Starting Teleop" << std::endl; -} - -void Robot::TeleopPeriodic() { - Scheduler::GetInstance()->Run(); -} - -void Robot::TestPeriodic() { - lw->Run(); -} - -START_ROBOT_CLASS(Robot) diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Robot.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Robot.h deleted file mode 100644 index ee98beb2d8..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Robot.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Robot.h - * - * Created on: Jun 3, 2014 - * Author: alex - */ - -#ifndef MY_ROBOT_H_ -#define MY_ROBOT_H_ - -#include "WPILib.h" -#include "Commands/Command.h" -#include "Commands/Autonomous.h" - -#include "Subsystems/DriveTrain.h" -#include "Subsystems/Elevator.h" -#include "Subsystems/Wrist.h" -#include "Subsystems/Claw.h" -#include "OI.h" - -class Robot: public IterativeRobot { -public: - static std::shared_ptr drivetrain; - static std::shared_ptr elevator; - static std::shared_ptr wrist; - static std::shared_ptr claw; - static std::unique_ptr oi; - -private: - Autonomous autonomousCommand; - LiveWindow *lw = LiveWindow::GetInstance(); - - void RobotInit(); - void AutonomousInit(); - void AutonomousPeriodic(); - void TeleopInit(); - void TeleopPeriodic(); - void TestPeriodic(); -}; - - -#endif /* ROBOT_H_ */ diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/Claw.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/Claw.cpp deleted file mode 100644 index 938badd2ef..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/Claw.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#include "Subsystems/Claw.h" - -Claw::Claw() : Subsystem("Claw") { - motor = new Victor(7); - contact = new DigitalInput(5); - - // Let's show everything on the LiveWindow - // TODO: LiveWindow::GetInstance()->AddActuator("Claw", "Motor", (Victor) motor); - // TODO: contact -} - -void Claw::Open() -{ - motor->Set(-1); -} - - -void Claw::Close() -{ - motor->Set(1); -} - - -void Claw::Stop() { - motor->Set(0); -} - -bool Claw::IsGripping() { - return contact->Get(); -} - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/Claw.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/Claw.h deleted file mode 100644 index 5a795a8724..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/Claw.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef Claw_H -#define Claw_H - -#include "Commands/Subsystem.h" -#include "WPILib.h" - -/** - * The claw subsystem is a simple system with a motor for opening and closing. - * If using stronger motors, you should probably use a sensor so that the - * motors don't stall. - */ -class Claw: public Subsystem { -private: - SpeedController* motor; - DigitalInput* contact; - -public: - Claw(); - void InitDefaultCommand() {} - - /** - * Set the claw motor to move in the open direction. - */ - void Open(); - - /** - * Set the claw motor to move in the close direction. - */ - void Close(); - - /** - * Stops the claw motor from moving. - */ - void Stop(); - - /** - * Return true when the robot is grabbing an object hard enough - * to trigger the limit switch. - */ - bool IsGripping(); - - void Log() {} -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/DriveTrain.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/DriveTrain.cpp deleted file mode 100644 index adeb6e9db6..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/DriveTrain.cpp +++ /dev/null @@ -1,80 +0,0 @@ -#include "DriveTrain.h" -#include "Commands/TankDriveWithJoystick.h" - -DriveTrain::DriveTrain() - : Subsystem("DriveTrain"), left_encoder(new Encoder(1, 2)), - right_encoder(new Encoder(3, 4)), rangefinder(new AnalogInput(6)), - gyro(new AnalogGyro(1)) { - drive = new RobotDrive(new Talon(1), new Talon(2), - new Talon(3), new Talon(4)); - - // Encoders may measure differently in the real world and in - // simulation. In this example the robot moves 0.042 barleycorns - // per tick in the real world, but the simulated encoders - // simulate 360 tick encoders. This if statement allows for the - // real robot to handle this difference in devices. - #ifdef REAL - left_encoder->SetDistancePerPulse(0.042); - right_encoder->SetDistancePerPulse(0.042); - #else - // Circumference in ft = 4in/12(in/ft)*PI - left_encoder->SetDistancePerPulse((double) (4.0/12.0*M_PI) / 360.0); - right_encoder->SetDistancePerPulse((double) (4.0/12.0*M_PI) / 360.0); - #endif - - // Let's show everything on the LiveWindow - // TODO: LiveWindow::GetInstance()->AddActuator("Drive Train", "Front_Left Motor", (Talon) front_left_motor); - // TODO: LiveWindow::GetInstance()->AddActuator("Drive Train", "Back Left Motor", (Talon) back_left_motor); - // TODO: LiveWindow::GetInstance()->AddActuator("Drive Train", "Front Right Motor", (Talon) front_right_motor); - // TODO: LiveWindow::GetInstance()->AddActuator("Drive Train", "Back Right Motor", (Talon) back_right_motor); - LiveWindow::GetInstance()->AddSensor("Drive Train", "Left Encoder", left_encoder); - LiveWindow::GetInstance()->AddSensor("Drive Train", "Right Encoder", right_encoder); - LiveWindow::GetInstance()->AddSensor("Drive Train", "Rangefinder", rangefinder); - LiveWindow::GetInstance()->AddSensor("Drive Train", "Gyro", gyro); -} - -/** - * When no other command is running let the operator drive around - * using the PS3 joystick. - */ -void DriveTrain::InitDefaultCommand() { - SetDefaultCommand(new TankDriveWithJoystick()); -} - -/** - * The log method puts interesting information to the SmartDashboard. - */ -void DriveTrain::Log() { - SmartDashboard::PutNumber("Left Distance", left_encoder->GetDistance()); - SmartDashboard::PutNumber("Right Distance", right_encoder->GetDistance()); - SmartDashboard::PutNumber("Left Speed", left_encoder->GetRate()); - SmartDashboard::PutNumber("Right Speed", right_encoder->GetRate()); - SmartDashboard::PutNumber("Gyro", gyro->GetAngle()); -} - -void DriveTrain::Drive(double left, double right) { - drive->TankDrive(left, right); -} - -void DriveTrain::Drive(Joystick* joy) { - Drive(-joy->GetY(), -joy->GetRawAxis(4)); -} - -double DriveTrain::GetHeading() { - return gyro->GetAngle(); -} - -void DriveTrain::Reset() { - gyro->Reset(); - left_encoder->Reset(); - right_encoder->Reset(); -} - -double DriveTrain::GetDistance() { - return (left_encoder->GetDistance() + right_encoder->GetDistance())/2; -} - -double DriveTrain::GetDistanceToObstacle() { - // Really meters in simulation since it's a rangefinder... - return rangefinder->GetAverageVoltage(); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/DriveTrain.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/DriveTrain.h deleted file mode 100644 index f931d6b4a2..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/DriveTrain.h +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef DriveTrain_H -#define DriveTrain_H - -#include "WPILib.h" - -/** - * The DriveTrain subsystem incorporates the sensors and actuators attached to - * the robots chassis. These include four drive motors, a left and right encoder - * and a gyro. - */ -class DriveTrain : public Subsystem { -private: - RobotDrive* drive; - std::shared_ptr left_encoder, right_encoder; - std::shared_ptr rangefinder; - std::shared_ptr gyro; - -public: - DriveTrain(); - - /** - * When no other command is running let the operator drive around - * using the PS3 joystick. - */ - void InitDefaultCommand(); - - /** - * The log method puts interesting information to the SmartDashboard. - */ - void Log(); - - /** - * Tank style driving for the DriveTrain. - * @param left Speed in range [-1,1] - * @param right Speed in range [-1,1] - */ - void Drive(double left, double right); - - /** - * @param joy The ps3 style joystick to use to drive tank style. - */ - void Drive(Joystick* joy); - - /** - * @return The robots heading in degrees. - */ - double GetHeading(); - - /** - * Reset the robots sensors to the zero states. - */ - void Reset(); - - /** - * @return The distance driven (average of left and right encoders). - */ - double GetDistance(); - - /** - * @return The distance to the obstacle detected by the rangefinder. - */ - double GetDistanceToObstacle(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/Elevator.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/Elevator.cpp deleted file mode 100644 index 02c558ffa5..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/Elevator.cpp +++ /dev/null @@ -1,36 +0,0 @@ -#include "Elevator.h" -#include "SmartDashboard/SmartDashboard.h" -#include "LiveWindow/LiveWindow.h" - -Elevator::Elevator() : PIDSubsystem("Elevator", kP_real, kI_real, 0.0) { - #ifdef SIMULATION // Check for simulation and update PID values - GetPIDController()->SetPID(kP_simulation, kI_simulation, 0, 0); - #endif - SetAbsoluteTolerance(0.005); - - motor = new Victor(5); - - // Conversion value of potentiometer varies between the real world and simulation - #ifdef REAL - pot = new AnalogPotentiometer(2, -2.0/5); - #else - pot = new AnalogPotentiometer(2); // Defaults to meters - #endif - - // Let's show everything on the LiveWindow - // TODO: LiveWindow::GetInstance()->AddActuator("Elevator", "Motor", (Victor) motor); - // TODO: LiveWindow::GetInstance()->AddSensor("Elevator", "Pot", (AnalogPotentiometer) pot); - LiveWindow::GetInstance()->AddActuator("Elevator", "PID", GetPIDController()); -} - -void Elevator::Log() { - // TODO: SmartDashboard::PutData("Wrist Pot", (AnalogPotentiometer) pot); -} - -double Elevator::ReturnPIDInput() { - return pot->Get(); -} - -void Elevator::UsePIDOutput(double d) { - motor->Set(d); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/Elevator.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/Elevator.h deleted file mode 100644 index d079de03b5..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/Elevator.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef Elevator_H -#define Elevator_H - -#include "Commands/PIDSubsystem.h" -#include "WPILib.h" - -/** - * The elevator subsystem uses PID to go to a given height. Unfortunately, in it's current - * state PID values for simulation are different than in the real world do to minor differences. - */ -class Elevator : public PIDSubsystem { -private: - SpeedController* motor; - Potentiometer* pot; - - static constexpr double kP_real = 4, kI_real = 0.07, - kP_simulation = 18, kI_simulation = 0.2; - -public: - Elevator(); - void InitDefaultCommand() {} - - /** - * The log method puts interesting information to the SmartDashboard. - */ - void Log(); - - /** - * Use the potentiometer as the PID sensor. This method is automatically - * called by the subsystem. - */ - double ReturnPIDInput(); - - - /** - * Use the motor as the PID output. This method is automatically called by - * the subsystem. - */ - void UsePIDOutput(double d); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/Wrist.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/Wrist.cpp deleted file mode 100644 index f09fdbb790..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/Wrist.cpp +++ /dev/null @@ -1,36 +0,0 @@ -#include "Wrist.h" -#include "SmartDashboard/SmartDashboard.h" -#include "LiveWindow/LiveWindow.h" - -Wrist::Wrist() : PIDSubsystem("Wrist", kP_real, 0.0, 0.0) { - #ifdef SIMULATION // Check for simulation and update PID values - GetPIDController()->SetPID(kP_simulation, 0, 0, 0); - #endif - SetAbsoluteTolerance(2.5); - - motor = new Victor(6); - - // Conversion value of potentiometer varies between the real world and simulation - #ifdef REAL - pot = new AnalogPotentiometer(3, -270.0/5); - #else - pot = new AnalogPotentiometer(3); // Defaults to degrees - #endif - - // Let's show everything on the LiveWindow - // TODO: LiveWindow::GetInstance()->AddActuator("Wrist", "Motor", (Victor) motor); - // TODO: LiveWindow::GetInstance()->AddSensor("Wrist", "Pot", (AnalogPotentiometer) pot); - LiveWindow::GetInstance()->AddActuator("Wrist", "PID", GetPIDController()); -} - -void Wrist::Log() { - // TODO: SmartDashboard::PutData("Wrist Angle", (AnalogPotentiometer) pot); -} - -double Wrist::ReturnPIDInput() { - return pot->Get(); -} - -void Wrist::UsePIDOutput(double d) { - motor->Set(d); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/Wrist.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/Wrist.h deleted file mode 100644 index e80364e7cd..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GearsBot/src/Subsystems/Wrist.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef Wrist_H -#define Wrist_H - -#include "Commands/PIDSubsystem.h" -#include "WPILib.h" - -/** - * The wrist subsystem is like the elevator, but with a rotational joint instead - * of a linear joint. - */ -class Wrist : public PIDSubsystem { -private: - SpeedController* motor; - Potentiometer* pot; // TODO: Make Potentiometer - - static constexpr double kP_real = 1, kP_simulation = 0.05; - -public: - Wrist(); - void InitDefaultCommand() {} - - /** - * The log method puts interesting information to the SmartDashboard. - */ - void Log(); - - /** - * Use the potentiometer as the PID sensor. This method is automatically - * called by the subsystem. - */ - double ReturnPIDInput(); - - /** - * Use the motor as the PID output. This method is automatically called by - * the subsystem. - */ - void UsePIDOutput(double d); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GettingStarted/src/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GettingStarted/src/Robot.cpp deleted file mode 100644 index ccf2e587f9..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GettingStarted/src/Robot.cpp +++ /dev/null @@ -1,54 +0,0 @@ -#include "WPILib.h" - -class Robot: public IterativeRobot -{ - - RobotDrive myRobot; // robot drive system - Joystick stick; // only joystick - LiveWindow *lw; - int autoLoopCounter; - -public: - Robot() : - myRobot(0, 1), // these must be initialized in the same order - stick(0), // as they are declared above. - lw(LiveWindow::GetInstance()), - autoLoopCounter(0) - { - myRobot.SetExpiration(0.1); - } - -private: - void AutonomousInit() - { - autoLoopCounter = 0; - } - - void AutonomousPeriodic() - { - if(autoLoopCounter < 100) //Check if we've completed 100 loops (approximately 2 seconds) - { - myRobot.Drive(-0.5, 0.0); // drive forwards half speed - autoLoopCounter++; - } else { - myRobot.Drive(0.0, 0.0); // stop robot - } - } - - void TeleopInit() - { - - } - - void TeleopPeriodic() - { - myRobot.ArcadeDrive(stick); // drive with arcade style (use right stick) - } - - void TestPeriodic() - { - lw->Run(); - } -}; - -START_ROBOT_CLASS(Robot) diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/Gyro/src/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/Gyro/src/Robot.cpp deleted file mode 100644 index 7019c77c1b..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/Gyro/src/Robot.cpp +++ /dev/null @@ -1,81 +0,0 @@ -#include "WPILib.h" - -/** - * This is a sample program to demonstrate how to use a gyro sensor to make a robot drive - * straight. This program uses a joystick to drive forwards and backwards while the gyro - * is used for direction keeping. - * - * WARNING: While it may look like a good choice to use for your code if you're inexperienced, - * don't. Unless you know what you are doing, complex code will be much more difficult under - * this system. Use IterativeRobot or Command-Based instead if you're new. - */ -class Robot: public SampleRobot { - const int gyroChannel = 0; //analog input - const int joystickChannel = 0; //usb number in DriverStation - - //channels for motors - const int leftMotorChannel = 1; - const int rightMotorChannel = 0; - const int leftRearMotorChannel = 3; - const int rightRearMotorChannel = 2; - - double angleSetpoint = 0.0; - const double pGain = .006; //propotional turning constant - - //gyro calibration constant, may need to be adjusted - //gyro value of 360 is set to correspond to one full revolution - const double voltsPerDegreePerSecond = .0128; - - RobotDrive myRobot; - AnalogGyro gyro; - Joystick joystick; - -public: - Robot() : - // Create the drivetrain from 4 CAN Talon SRXs. - myRobot(new CANTalon(leftMotorChannel), new CANTalon(leftRearMotorChannel), - new CANTalon(rightMotorChannel), new CANTalon(rightRearMotorChannel)), - // Assign the gyro and joystick channels. - gyro(gyroChannel), joystick(joystickChannel) {} - - /** - * Runs during autonomous. - */ - void Autonomous() - { - - } - - /** - * Sets the gyro sensitivity and drives the robot when the joystick is pushed. The - * motor speed is set from the joystick while the RobotDrive turning value is - * assigned from the error between the setpoint and the gyro angle. - */ - void OperatorControl() - { - double turningValue; - gyro.SetSensitivity(voltsPerDegreePerSecond); //calibrates gyro values to equal degrees - - while (IsOperatorControl() && IsEnabled()) - { - turningValue = (angleSetpoint - gyro.GetAngle()) * pGain; - if (joystick.GetY() <= 0) { - //forwards - myRobot.Drive(joystick.GetY(), turningValue); - } else { - //backwards - myRobot.Drive(joystick.GetY(), -turningValue); - } - } - } - - /** - * Runs during test mode. - */ - void Test() - { - - } -}; - -START_ROBOT_CLASS(Robot) diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GyroMecanum/src/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GyroMecanum/src/Robot.cpp deleted file mode 100644 index 9810e7ec59..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/GyroMecanum/src/Robot.cpp +++ /dev/null @@ -1,67 +0,0 @@ -#include "WPILib.h" - -/** - * This is a sample program that uses mecanum drive with a gyro sensor to maintian - * rotation vectors in relation to the starting orientation of the robot (field-oriented controls). - * - * WARNING: While it may look like a good choice to use for your code if you're inexperienced, - * don't. Unless you know what you are doing, complex code will be much more difficult under - * this system. Use IterativeRobot or Command-Based instead if you're new. - */ -class Robot: public SampleRobot { - Joystick joystick; - RobotDrive myRobot; - AnalogGyro gyro; - - //channels for motors - const int leftMotorChannel = 1; - const int rightMotorChannel = 0; - const int leftRearMotorChannel = 3; - const int rightRearMotorChannel = 2; - - const int gyroChannel = 0; //analog input - - //gyro calibration constant, may need to be adjusted so that a gyro value of 360 - //equals 360 degrees - const double voltsPerDegreePerSecond = .0128; - -public: - Robot() : - joystick(0), - // Create the robot using CANTalons; change as appropriate for different - // motors (eg, Victor, Jaguar, Talon, CANJaguar, etc.). - myRobot(new CANTalon(leftMotorChannel), new CANTalon(leftRearMotorChannel), - new CANTalon(rightMotorChannel), new CANTalon(rightRearMotorChannel)), - gyro(gyroChannel) { - myRobot.SetInvertedMotor(RobotDrive::kFrontLeftMotor, true);// invert the left side motors - myRobot.SetInvertedMotor(RobotDrive::kRearLeftMotor, true);// you may need to change or remove this to match your robot - } - - /** - * Runs during autonomous. - */ - void Autonomous() { - - } - - /** - * Runs the motors with arcade steering. - */ - void OperatorControl() { - gyro.SetSensitivity(voltsPerDegreePerSecond); //calibrate gyro to have the value equal to degrees - while (IsOperatorControl() && IsEnabled()) { - myRobot.MecanumDrive_Cartesian(joystick.GetX(), joystick.GetY(), - joystick.GetZ(), gyro.GetAngle()); - Wait(0.005); // wait 5ms to avoid hogging CPU cycles - } - } - - /** - * Runs during test mode. - */ - void Test() { - - } -}; - -START_ROBOT_CLASS(Robot) diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/IntermediateVision/src/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/IntermediateVision/src/Robot.cpp deleted file mode 100644 index f3458a959c..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/IntermediateVision/src/Robot.cpp +++ /dev/null @@ -1,50 +0,0 @@ -#include "WPILib.h" - -/** - * Uses IMAQdx to manually acquire a new image each frame, and annotate the image by drawing - * a circle on it, and show it on the FRC Dashboard. - */ -class IntermediateVisionRobot : public SampleRobot -{ - IMAQdxSession session; - Image *frame; - IMAQdxError imaqError; - -public: - void RobotInit() override { - // create an image - frame = imaqCreateImage(IMAQ_IMAGE_RGB, 0); - //the camera name (ex "cam0") can be found through the roborio web interface - imaqError = IMAQdxOpenCamera("cam0", IMAQdxCameraControlModeController, &session); - if(imaqError != IMAQdxErrorSuccess) { - DriverStation::ReportError("IMAQdxOpenCamera error: " + std::to_string((long)imaqError) + "\n"); - } - imaqError = IMAQdxConfigureGrab(session); - if(imaqError != IMAQdxErrorSuccess) { - DriverStation::ReportError("IMAQdxConfigureGrab error: " + std::to_string((long)imaqError) + "\n"); - } - } - - void OperatorControl() override { - // acquire images - IMAQdxStartAcquisition(session); - - // grab an image, draw the circle, and provide it for the camera server which will - // in turn send it to the dashboard. - while(IsOperatorControl() && IsEnabled()) { - IMAQdxGrab(session, frame, true, NULL); - if(imaqError != IMAQdxErrorSuccess) { - DriverStation::ReportError("IMAQdxGrab error: " + std::to_string((long)imaqError) + "\n"); - } else { - imaqDrawShapeOnImage(frame, frame, { 10, 10, 100, 100 }, DrawMode::IMAQ_DRAW_VALUE, ShapeMode::IMAQ_SHAPE_OVAL, 0.0f); - CameraServer::GetInstance()->SetImage(frame); - } - Wait(0.005); // wait for a motor update time - } - // stop image acquisition - IMAQdxStopAcquisition(session); - } -}; - -START_ROBOT_CLASS(IntermediateVisionRobot) - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/MecanumDrive/src/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/MecanumDrive/src/Robot.cpp deleted file mode 100755 index 67635d28a8..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/MecanumDrive/src/Robot.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include "WPILib.h" - -/** - * This is a demo program showing how to use Mecanum control with the RobotDrive class. - */ -class Robot: public SampleRobot -{ - - // Channels for the wheels - const static int frontLeftChannel = 2; - const static int rearLeftChannel = 3; - const static int frontRightChannel = 1; - const static int rearRightChannel = 0; - - const static int joystickChannel = 0; - - RobotDrive robotDrive; // robot drive system - Joystick stick; // only joystick - -public: - Robot() : - robotDrive(frontLeftChannel, rearLeftChannel, - frontRightChannel, rearRightChannel), // these must be initialized in the same order - stick(joystickChannel) // as they are declared above. - { - robotDrive.SetExpiration(0.1); - robotDrive.SetInvertedMotor(RobotDrive::kFrontLeftMotor, true); // invert the left side motors - robotDrive.SetInvertedMotor(RobotDrive::kRearLeftMotor, true); // you may need to change or remove this to match your robot - } - - /** - * Runs the motors with Mecanum drive. - */ - void OperatorControl() - { - robotDrive.SetSafetyEnabled(false); - while (IsOperatorControl() && IsEnabled()) - { - // Use the joystick X axis for lateral movement, Y axis for forward movement, and Z axis for rotation. - // This sample does not use field-oriented drive, so the gyro input is set to zero. - robotDrive.MecanumDrive_Cartesian(stick.GetX(), stick.GetY(), stick.GetZ()); - - Wait(0.005); // wait 5ms to avoid hogging CPU cycles - } - } - -}; - -START_ROBOT_CLASS(Robot) diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/MotorControl/src/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/MotorControl/src/Robot.cpp deleted file mode 100644 index 338ba34e10..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/MotorControl/src/Robot.cpp +++ /dev/null @@ -1,44 +0,0 @@ -#include "WPILib.h" - -/** - * This sample program shows how to control a motor using a joystick. In the operator - * control part of the program, the joystick is read and the value is written to the motor. - * - * Joystick analog values range from -1 to 1 and speed controller inputs as range from - * -1 to 1 making it easy to work together. The program also delays a short time in the loop - * to allow other threads to run. This is generally a good idea, especially since the joystick - * values are only transmitted from the Driver Station once every 20ms. - */ -class Robot : public SampleRobot { - Joystick m_stick; - - // The motor to control with the Joystick. - // This uses a Talon speed controller; use the Victor or Jaguar classes for - // other speed controllers. - Talon m_motor; - - // update every 0.005 seconds/5 milliseconds. - double kUpdatePeriod = 0.005; - -public: - Robot() : - m_stick(0), // Initialize Joystick on port 0. - m_motor(0) // Initialize the Talon on channel 0. - { - } - - /** - * Runs the motor from the output of a Joystick. - */ - void OperatorControl() { - while (IsOperatorControl() && IsEnabled()) { - // Set the motor controller's output. - // This takes a number from -1 (100% speed in reverse) to +1 (100% speed forwards). - m_motor.Set(m_stick.GetY()); - - Wait(kUpdatePeriod); // Wait 5ms for the next update. - } - } -}; - -START_ROBOT_CLASS(Robot) diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/MotorControlEncoder/src/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/MotorControlEncoder/src/Robot.cpp deleted file mode 100644 index f004578498..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/MotorControlEncoder/src/Robot.cpp +++ /dev/null @@ -1,55 +0,0 @@ -#include "WPILib.h" - -/** - * This sample program shows how to control a motor using a joystick. In the operator - * control part of the program, the joystick is read and the value is written to the motor. - * An Encoder is then used to read the total distance that the motor has turned and - * to display it on the SmartDashboard. - * - * Joystick analog values range from -1 to 1 and speed controller inputs as range from - * -1 to 1 making it easy to work together. The program also delays a short time in the loop - * to allow other threads to run. This is generally a good idea, especially since the joystick - * values are only transmitted from the Driver Station once every 20ms. - */ -class Robot : public SampleRobot { - Joystick m_stick; - - // The motor to control with the Joystick. - // This uses a Talon speed controller; use the Victor or Jaguar classes for - // other speed controllers. - Talon m_motor; - - // update every 0.005 seconds/5 milliseconds. - double kUpdatePeriod = 0.005; - - Encoder m_encoder; - -public: - Robot() : - m_stick(0), // Initialize Joystick on port 0. - m_motor(2), // Initialize the Talon on channel 0. - m_encoder(1, 2) // Iniitialize encoder connected on DIO ports 1 and 2. - { - // Distance will give total rotations of the motor, assuming a 360 count encoder. - m_encoder.SetDistancePerPulse(1.0 / 360.0); - } - - /** - * Runs the motor from the output of a Joystick. - * Simultaneously displays encoder values on the SmartDashboard. - */ - void OperatorControl() { - while (IsOperatorControl() && IsEnabled()) { - // Set the motor controller's output. - // This takes a number from -1 (100% speed in reverse) to +1 (100% speed forwards). - m_motor.Set(m_stick.GetY()); - - // Display the total displacement of the encoder, in rotations. - SmartDashboard::PutNumber("Encoder Distance", m_encoder.GetDistance()); - - Wait(kUpdatePeriod); // Wait 5ms for the next update. - } - } -}; - -START_ROBOT_CLASS(Robot) diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/CheckForHotGoal.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/CheckForHotGoal.cpp deleted file mode 100644 index c4eeb845e4..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/CheckForHotGoal.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#include "CheckForHotGoal.h" - -#include "Robot.h" - -CheckForHotGoal::CheckForHotGoal(double time) { - SetTimeout(time); -} - -// Called just before this Command runs the first time -void CheckForHotGoal::Initialize() {} - -// Called repeatedly when this Command is scheduled to run -void CheckForHotGoal::Execute() {} - -// Make this return true when this Command no longer needs to run execute() -bool CheckForHotGoal::IsFinished() { - return IsTimedOut() || Robot::shooter->GoalIsHot(); -} - -// Called once after isFinished returns true -void CheckForHotGoal::End() {} - -// Called when another command which requires one or more of the same -// subsystems is scheduled to run -void CheckForHotGoal::Interrupted() {} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/CheckForHotGoal.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/CheckForHotGoal.h deleted file mode 100644 index d069045d44..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/CheckForHotGoal.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef CheckForHotGoal_H -#define CheckForHotGoal_H - -#include "WPILib.h" - -/** - * This command looks for the hot goal and waits until it's detected or timed - * out. The timeout is because it's better to shoot and get some autonomous - * points than get none. When called sequentially, this command will block until - * the hot goal is detected or until it is timed out. - */ -class CheckForHotGoal : public Command { -public: - CheckForHotGoal(double time); - void Initialize(); - void Execute(); - bool IsFinished(); - void End(); - void Interrupted(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/CloseClaw.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/CloseClaw.cpp deleted file mode 100644 index 116b3a077e..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/CloseClaw.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include "CloseClaw.h" - -#include "Robot.h" - -CloseClaw::CloseClaw() { - Requires(Robot::collector.get()); -} - -// Called just before this Command runs the first time -void CloseClaw::Initialize() { - Robot::collector->Close(); -} - -// Called repeatedly when this Command is scheduled to run -void CloseClaw::Execute() {} - -// Make this return true when this Command no longer needs to run execute() -bool CloseClaw::IsFinished() { - return true; -} - -// Called once after isFinished returns true -void CloseClaw::End() {} - -// Called when another command which requires one or more of the same -// subsystems is scheduled to run -void CloseClaw::Interrupted() {} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/CloseClaw.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/CloseClaw.h deleted file mode 100644 index dec6cc7b03..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/CloseClaw.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef CloseClaw_H -#define CloseClaw_H - -#include "WPILib.h" - -/** - * Close the claw. - * - * NOTE: It doesn't wait for the claw to close since there is no sensor to - * detect that. - */ -class CloseClaw: public Command { -public: - CloseClaw(); - void Initialize(); - void Execute(); - bool IsFinished(); - void End(); - void Interrupted(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/Collect.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/Collect.cpp deleted file mode 100644 index bb76efff0a..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/Collect.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include "Collect.h" - -#include "Robot.h" -#include "Commands/SetCollectionSpeed.h" -#include "Commands/CloseClaw.h" -#include "Commands/SetPivotSetpoint.h" -#include "Commands/WaitForBall.h" - -Collect::Collect() { - AddSequential(new SetCollectionSpeed(Collector::FORWARD)); - AddParallel(new CloseClaw()); - AddSequential(new SetPivotSetpoint(Pivot::COLLECT)); - AddSequential(new WaitForBall()); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/Collect.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/Collect.h deleted file mode 100644 index 974d2a0a24..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/Collect.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef Collect_H -#define Collect_H - -#include "WPILib.h" - -/** - * Get the robot set to collect balls. - */ -class Collect: public CommandGroup { -public: - Collect(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/DriveAndShootAutonomous.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/DriveAndShootAutonomous.cpp deleted file mode 100644 index 5148bbc9b3..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/DriveAndShootAutonomous.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include "DriveAndShootAutonomous.h" - -#include "Robot.h" -#include "Commands/WaitForPressure.h" -#include "Commands/CloseClaw.h" -#include "Commands/SetPivotSetpoint.h" -#include "Commands/DriveForward.h" -#include "Commands/Shoot.h" -#include "Commands/CheckForHotGoal.h" - -DriveAndShootAutonomous::DriveAndShootAutonomous() { - AddSequential(new CloseClaw()); - AddSequential(new WaitForPressure(), 2); - #ifdef REAL - // NOTE: Simulation doesn't currently have the concept of hot. - AddSequential(new CheckForHotGoal(2)); - #endif - AddSequential(new SetPivotSetpoint(45)); - AddSequential(new DriveForward(8, 0.3)); - AddSequential(new Shoot()); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/DriveAndShootAutonomous.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/DriveAndShootAutonomous.h deleted file mode 100644 index 38a7c6e9c3..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/DriveAndShootAutonomous.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef DriveAndShootAutonomous_H -#define DriveAndShootAutonomous_H - -#include "WPILib.h" - -/** - * Drive over the line and then shoot the ball. If the hot goal is not detected, - * it will wait briefly. - */ -class DriveAndShootAutonomous: public CommandGroup { -public: - DriveAndShootAutonomous(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/DriveForward.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/DriveForward.cpp deleted file mode 100644 index b945c4a0cc..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/DriveForward.cpp +++ /dev/null @@ -1,55 +0,0 @@ -#include "DriveForward.h" - -#include "Robot.h" - -void DriveForward::init(double dist, double maxSpeed) { - Requires(Robot::drivetrain.get()); - distance = dist; - driveForwardSpeed = maxSpeed; - error = 0; -} - -DriveForward::DriveForward() { - init(10, 0.5); -} - -DriveForward::DriveForward(double dist) { - init(dist, 0.5); -} - -DriveForward::DriveForward(double dist, double maxSpeed) { - init(dist, maxSpeed); -} - -// Called just before this Command runs the first time -void DriveForward::Initialize() { - Robot::drivetrain->GetRightEncoder()->Reset(); - SetTimeout(2); -} - -// Called repeatedly when this Command is scheduled to run -void DriveForward::Execute() { - error = (distance - Robot::drivetrain->GetRightEncoder()->GetDistance()); - if (driveForwardSpeed * KP * error >= driveForwardSpeed) { - Robot::drivetrain->TankDrive(driveForwardSpeed, driveForwardSpeed); - } else { - Robot::drivetrain->TankDrive(driveForwardSpeed * KP * error, - driveForwardSpeed * KP * error); - } -} - -// Make this return true when this Command no longer needs to run execute() -bool DriveForward::IsFinished() { - return (abs(error) <= TOLERANCE) || IsTimedOut(); -} - -// Called once after isFinished returns true -void DriveForward::End() { - Robot::drivetrain->Stop(); -} - -// Called when another command which requires one or more of the same -// subsystems is scheduled to run -void DriveForward::Interrupted() { - End(); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/DriveForward.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/DriveForward.h deleted file mode 100644 index bf069547d7..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/DriveForward.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef DriveForward_H -#define DriveForward_H - -#include "WPILib.h" - -/** - * This command drives the robot over a given distance with simple proportional - * control This command will drive a given distance limiting to a maximum speed. - */ -class DriveForward: public Command { -private: - double driveForwardSpeed; - double distance; - double error; - static constexpr double TOLERANCE = .1; - static constexpr double KP = -1.0 / 5.0; - void init(double dist, double maxSpeed); -public: - DriveForward(); - DriveForward(double dist); - DriveForward(double dist, double maxSpeed); - void Initialize(); - void Execute(); - bool IsFinished(); - void End(); - void Interrupted(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/DriveWithJoystick.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/DriveWithJoystick.cpp deleted file mode 100644 index c244d7d617..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/DriveWithJoystick.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#include "DriveWithJoystick.h" - -#include "Robot.h" - -DriveWithJoystick::DriveWithJoystick() { - Requires(Robot::drivetrain.get()); -} - -// Called just before this Command runs the first time -void DriveWithJoystick::Initialize() {} - -// Called repeatedly when this Command is scheduled to run -void DriveWithJoystick::Execute() { - Robot::drivetrain->TankDrive(Robot::oi->GetJoystick()); -} - -// Make this return true when this Command no longer needs to run execute() -bool DriveWithJoystick::IsFinished() { - return false; -} - -// Called once after isFinished returns true -void DriveWithJoystick::End() { - Robot::drivetrain->Stop(); -} - -// Called when another command which requires one or more of the same -// subsystems is scheduled to run -void DriveWithJoystick::Interrupted() { - End(); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/DriveWithJoystick.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/DriveWithJoystick.h deleted file mode 100644 index 0dff411d42..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/DriveWithJoystick.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef DriveWithJoystick_H -#define DriveWithJoystick_H - -#include "WPILib.h" - -/** - * This command allows PS3 joystick to drive the robot. It is always running - * except when interrupted by another command. - */ -class DriveWithJoystick: public Command { -public: - DriveWithJoystick(); - void Initialize(); - void Execute(); - bool IsFinished(); - void End(); - void Interrupted(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/ExtendShooter.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/ExtendShooter.cpp deleted file mode 100644 index e1acabc1df..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/ExtendShooter.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include "ExtendShooter.h" - -#include "Robot.h" - -ExtendShooter::ExtendShooter() { - Requires(Robot::shooter.get()); - SetTimeout(1); -} - -// Called just before this Command runs the first time -void ExtendShooter::Initialize() { - Robot::shooter->ExtendBoth(); -} - -// Called repeatedly when this Command is scheduled to run -void ExtendShooter::Execute() {} - -// Make this return true when this Command no longer needs to run execute() -bool ExtendShooter::IsFinished() { - return IsTimedOut(); -} - -// Called once after isFinished returns true -void ExtendShooter::End() { - Robot::shooter->RetractBoth(); -} - -// Called when another command which requires one or more of the same -// subsystems is scheduled to run -void ExtendShooter::Interrupted() { - End(); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/ExtendShooter.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/ExtendShooter.h deleted file mode 100644 index 7a8357235b..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/ExtendShooter.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef ExtendShooter_H -#define ExtendShooter_H - -#include "WPILib.h" - -/** - * Extend the shooter and then retract it after a second. - */ -class ExtendShooter: public Command { -public: - ExtendShooter(); - void Initialize(); - void Execute(); - bool IsFinished(); - void End(); - void Interrupted(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/LowGoal.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/LowGoal.cpp deleted file mode 100644 index 35f90a66b2..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/LowGoal.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include "LowGoal.h" - -#include "Robot.h" -#include "Commands/SetPivotSetpoint.h" -#include "Commands/SetCollectionSpeed.h" -#include "Commands/ExtendShooter.h" - -LowGoal::LowGoal() { - AddSequential(new SetPivotSetpoint(Pivot::LOW_GOAL)); - AddSequential(new SetCollectionSpeed(Collector::REVERSE)); - AddSequential(new ExtendShooter()); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/LowGoal.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/LowGoal.h deleted file mode 100644 index 398b88d3e7..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/LowGoal.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef LowGoal_H -#define LowGoal_H - -#include "WPILib.h" - -/** - * Spit the ball out into the low goal assuming that the robot is in front of it. - */ -class LowGoal: public CommandGroup { -public: - LowGoal(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/OpenClaw.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/OpenClaw.cpp deleted file mode 100644 index 74b042db31..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/OpenClaw.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include "OpenClaw.h" - -#include "Robot.h" - -OpenClaw::OpenClaw() { - Requires(Robot::collector.get()); -} - -// Called just before this Command runs the first time -void OpenClaw::Initialize() { - Robot::collector->Open(); -} - -// Called repeatedly when this Command is scheduled to run -void OpenClaw::Execute() {} - -// Make this return true when this Command no longer needs to run execute() -bool OpenClaw::IsFinished() { - return Robot::collector->IsOpen(); -} - -// Called once after isFinished returns true -void OpenClaw::End() {} - -// Called when another command which requires one or more of the same -// subsystems is scheduled to run -void OpenClaw::Interrupted() {} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/OpenClaw.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/OpenClaw.h deleted file mode 100644 index 47ef131e89..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/OpenClaw.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef OpenClaw_H -#define OpenClaw_H - -#include "WPILib.h" - -/** - * Opens the claw - */ -class OpenClaw: public Command { -public: - OpenClaw(); - void Initialize(); - void Execute(); - bool IsFinished(); - void End(); - void Interrupted(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/SetCollectionSpeed.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/SetCollectionSpeed.cpp deleted file mode 100644 index b50154d2db..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/SetCollectionSpeed.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include "SetCollectionSpeed.h" - -#include "Robot.h" - -SetCollectionSpeed::SetCollectionSpeed(double speed) { - Requires(Robot::collector.get()); - this->speed = speed; -} - -// Called just before this Command runs the first time -void SetCollectionSpeed::Initialize() { - Robot::collector->SetSpeed(speed); -} - -// Called repeatedly when this Command is scheduled to run -void SetCollectionSpeed::Execute() {} - -// Make this return true when this Command no longer needs to run execute() -bool SetCollectionSpeed::IsFinished() { - return true; -} - -// Called once after isFinished returns true -void SetCollectionSpeed::End() {} - -// Called when another command which requires one or more of the same -// subsystems is scheduled to run -void SetCollectionSpeed::Interrupted() {} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/SetCollectionSpeed.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/SetCollectionSpeed.h deleted file mode 100644 index b41fb75393..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/SetCollectionSpeed.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef SetCollectionSpeed_H -#define SetCollectionSpeed_H - -#include "WPILib.h" - -/** - * This command sets the collector rollers spinning at the given speed. Since - * there is no sensor for detecting speed, it finishes immediately. As a result, - * the spinners may still be adjusting their speed. - */ -class SetCollectionSpeed: public Command { -private: - double speed; -public: - SetCollectionSpeed(double speed); - void Initialize(); - void Execute(); - bool IsFinished(); - void End(); - void Interrupted(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/SetPivotSetpoint.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/SetPivotSetpoint.cpp deleted file mode 100644 index 0dad144e52..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/SetPivotSetpoint.cpp +++ /dev/null @@ -1,30 +0,0 @@ -#include "SetPivotSetpoint.h" - -#include "Robot.h" - -SetPivotSetpoint::SetPivotSetpoint(double setpoint) { - this->setpoint = setpoint; - Requires(Robot::pivot.get()); -} - -// Called just before this Command runs the first time -void SetPivotSetpoint::Initialize() { - Robot::pivot->Enable(); - Robot::pivot->SetSetpoint(setpoint); -} - -// Called repeatedly when this Command is scheduled to run -void SetPivotSetpoint::Execute() {} - -// Make this return true when this Command no longer needs to run execute() -bool SetPivotSetpoint::IsFinished() -{ - return Robot::pivot->OnTarget(); -} - -// Called once after isFinished returns true -void SetPivotSetpoint::End() {} - -// Called when another command which requires one or more of the same -// subsystems is scheduled to run -void SetPivotSetpoint::Interrupted() {} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/SetPivotSetpoint.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/SetPivotSetpoint.h deleted file mode 100644 index adfaca6d7d..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/SetPivotSetpoint.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef SetPivotSetpoint_H -#define SetPivotSetpoint_H - -#include "WPILib.h" - -/** - * Moves the pivot to a given angle. This command finishes when it is within - * the tolerance, but leaves the PID loop running to maintain the position. - * Other commands using the pivot should make sure they disable PID! - */ -class SetPivotSetpoint: public Command { -public: - SetPivotSetpoint(double setpoint); - void Initialize(); - void Execute(); - bool IsFinished(); - void End(); - void Interrupted(); - -private: - double setpoint; -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/Shoot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/Shoot.cpp deleted file mode 100644 index 5112484433..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/Shoot.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include "Shoot.h" - -#include "Robot.h" -#include "Commands/WaitForPressure.h" -#include "Commands/SetCollectionSpeed.h" -#include "Commands/OpenClaw.h" -#include "Commands/ExtendShooter.h" - -Shoot::Shoot() { - AddSequential(new WaitForPressure()); - AddSequential(new SetCollectionSpeed(Collector::STOP)); - AddSequential(new OpenClaw()); - AddSequential(new ExtendShooter()); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/Shoot.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/Shoot.h deleted file mode 100644 index 290045491d..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/Shoot.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef Shoot_H -#define Shoot_H - -#include "WPILib.h" - -/** - * Shoot the ball at the current angle. - */ -class Shoot: public CommandGroup { -public: - Shoot(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/WaitForBall.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/WaitForBall.cpp deleted file mode 100644 index 8788692a14..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/WaitForBall.cpp +++ /dev/null @@ -1,26 +0,0 @@ -#include "WaitForBall.h" - -#include "Robot.h" - -WaitForBall::WaitForBall() { - Requires(Robot::collector.get()); -} - -// Called just before this Command runs the first time -void WaitForBall::Initialize() {} - -// Called repeatedly when this Command is scheduled to run -void WaitForBall::Execute() {} - -// Make this return true when this Command no longer needs to run execute() -bool WaitForBall::IsFinished() -{ - return Robot::collector->HasBall(); -} - -// Called once after isFinished returns true -void WaitForBall::End() {} - -// Called when another command which requires one or more of the same -// subsystems is scheduled to run -void WaitForBall::Interrupted() {} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/WaitForBall.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/WaitForBall.h deleted file mode 100644 index 3109b276a2..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/WaitForBall.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef WaitForBall_H -#define WaitForBall_H - -#include "WPILib.h" - -/** - * Wait until the collector senses that it has the ball. This command does - * nothing and is intended to be used in command groups to wait for this - * condition. - */ -class WaitForBall: public Command { -public: - WaitForBall(); - void Initialize(); - void Execute(); - bool IsFinished(); - void End(); - void Interrupted(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/WaitForPressure.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/WaitForPressure.cpp deleted file mode 100644 index 1a64be631d..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/WaitForPressure.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include "WaitForPressure.h" - -#include "Robot.h" - -WaitForPressure::WaitForPressure() -{ - Requires(Robot::pneumatics.get()); -} - -// Called just before this Command runs the first time -void WaitForPressure::Initialize() {} - -// Called repeatedly when this Command is scheduled to run -void WaitForPressure::Execute() {} - -// Make this return true when this Command no longer needs to run execute() -bool WaitForPressure::IsFinished() -{ - return Robot::pneumatics->IsPressurized(); -} - -// Called once after isFinished returns true -void WaitForPressure::End() {} - -// Called when another command which requires one or more of the same -// subsystems is scheduled to run -void WaitForPressure::Interrupted() {} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/WaitForPressure.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/WaitForPressure.h deleted file mode 100644 index d097b64681..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Commands/WaitForPressure.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef WaitForPressure_H -#define WaitForPressure_H - -#include "WPILib.h" - -/** - * Wait until the pneumatics are fully pressurized. This command does nothing - * and is intended to be used in command groups to wait for this condition. - */ -class WaitForPressure: public Command { -public: - WaitForPressure(); - void Initialize(); - void Execute(); - bool IsFinished(); - void End(); - void Interrupted(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/OI.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/OI.cpp deleted file mode 100644 index 249cb34224..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/OI.cpp +++ /dev/null @@ -1,40 +0,0 @@ -#include "OI.h" - -#include "Subsystems/Pivot.h" -#include "Subsystems/Collector.h" -#include "Commands/LowGoal.h" -#include "Commands/Collect.h" -#include "Commands/SetPivotSetpoint.h" -#include "Commands/Shoot.h" -#include "Commands/DriveForward.h" -#include "Commands/SetCollectionSpeed.h" - -OI::OI() - : joystick(0), - L1(&joystick, 11), - L2(&joystick, 9), - R1(&joystick, 12), - R2(&joystick, 10), - sticks(&joystick, 2, 3) { - - R1.WhenPressed(new LowGoal()); - R2.WhenPressed(new Collect()); - - L1.WhenPressed(new SetPivotSetpoint(Pivot::SHOOT)); - L2.WhenPressed(new SetPivotSetpoint(Pivot::SHOOT_NEAR)); - - sticks.WhenActive(new Shoot()); - - - // SmartDashboard Buttons - SmartDashboard::PutData("Drive Forward", new DriveForward(2.25)); - SmartDashboard::PutData("Drive Backward", new DriveForward(-2.25)); - SmartDashboard::PutData("Start Rollers", new SetCollectionSpeed(Collector::FORWARD)); - SmartDashboard::PutData("Stop Rollers", new SetCollectionSpeed(Collector::STOP)); - SmartDashboard::PutData("Reverse Rollers", new SetCollectionSpeed(Collector::REVERSE)); -} - - -Joystick* OI::GetJoystick() { - return &joystick; -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/OI.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/OI.h deleted file mode 100644 index fdee45285c..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/OI.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef OI_H -#define OI_H - -#include "WPILib.h" -#include "Triggers/DoubleButton.h" - -class OI { -private: - Joystick joystick; - JoystickButton L1, L2, R1, R2; - DoubleButton sticks; -public: - OI(); - Joystick* GetJoystick(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Robot.cpp deleted file mode 100644 index 7ef891620e..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Robot.cpp +++ /dev/null @@ -1,84 +0,0 @@ - -#include "Robot.h" - -std::shared_ptr Robot::drivetrain; -std::shared_ptr Robot::pivot; -std::shared_ptr Robot::collector; -std::shared_ptr Robot::shooter; -std::shared_ptr Robot::pneumatics; - -std::unique_ptr Robot::oi; - -void Robot::RobotInit() { - drivetrain.reset(new DriveTrain()); - pivot.reset(new Pivot()); - collector.reset(new Collector()); - shooter.reset(new Shooter()); - pneumatics.reset(new Pneumatics()); - - oi.reset(new OI()); - - // Show what command your subsystem is running on the SmartDashboard - SmartDashboard::PutData(drivetrain.get()); - SmartDashboard::PutData(pivot.get()); - SmartDashboard::PutData(collector.get()); - SmartDashboard::PutData(shooter.get()); - SmartDashboard::PutData(pneumatics.get()); - - // instantiate the command used for the autonomous period - autoChooser.AddDefault("Drive and Shoot", driveAndShootAuto.get()); - autoChooser.AddObject("Drive Forward", driveForwardAuto.get()); - SmartDashboard::PutData("Auto Mode", &autoChooser); - - pneumatics->Start(); // Pressurize the pneumatics. -} - -void Robot::AutonomousInit() { - autonomousCommand = (Command *)autoChooser.GetSelected(); - autonomousCommand->Start(); -} - -void Robot::AutonomousPeriodic() { - Scheduler::GetInstance()->Run(); - Log(); -} - -void Robot::TeleopInit() { - // This makes sure that the autonomous stops running when - // teleop starts running. If you want the autonomous to - // continue until interrupted by another command, remove - // this line or comment it out. - if (autonomousCommand != nullptr) { - autonomousCommand->Cancel(); - } - std::cout << "Starting Teleop" << std::endl; -} - -void Robot::TeleopPeriodic() { - Scheduler::GetInstance()->Run(); - Log(); -} - -void Robot::TestPeriodic() { - LiveWindow::GetInstance()->Run(); -} - -void Robot::DisabledInit() { - shooter->Unlatch(); -} - -void Robot::DisabledPeriodic() { - Log(); -} - -/** - * Log interesting values to the SmartDashboard. - */ -void Robot::Log() { - Robot::pneumatics->WritePressure(); - SmartDashboard::PutNumber("Pivot Pot Value", pivot->GetAngle()); - SmartDashboard::PutNumber("Left Distance", drivetrain->GetLeftEncoder()->GetDistance()); - SmartDashboard::PutNumber("Right Distance", drivetrain->GetRightEncoder()->GetDistance()); -} - -START_ROBOT_CLASS(Robot) diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Robot.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Robot.h deleted file mode 100644 index d4437cdef0..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Robot.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Robot.h - * - * Created on: Jun 3, 2014 - * Author: alex - */ - -#ifndef MY_ROBOT_H_ -#define MY_ROBOT_H_ - -#include "WPILib.h" -#include "Commands/Command.h" - -#include "Commands/DriveAndShootAutonomous.h" -#include "Commands/DriveForward.h" -#include "Subsystems/DriveTrain.h" -#include "Subsystems/Pivot.h" -#include "Subsystems/Collector.h" -#include "Subsystems/Shooter.h" -#include "Subsystems/Pneumatics.h" -#include "OI.h" - -class Robot: public IterativeRobot { -public: - static std::shared_ptr drivetrain; - static std::shared_ptr pivot; - static std::shared_ptr collector; - static std::shared_ptr shooter; - static std::shared_ptr pneumatics; - static std::unique_ptr oi; - -private: - Command* autonomousCommand = nullptr; - std::unique_ptr driveAndShootAuto{new DriveAndShootAutonomous()}, - driveForwardAuto{new DriveForward()}; - SendableChooser autoChooser; - - void RobotInit(); - void AutonomousInit(); - void AutonomousPeriodic(); - void TeleopInit(); - void TeleopPeriodic(); - void TestPeriodic(); - void DisabledInit(); - void DisabledPeriodic(); - - void Log(); -}; - -#endif /* ROBOT_H_ */ diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Collector.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Collector.cpp deleted file mode 100644 index c296e0a84b..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Collector.cpp +++ /dev/null @@ -1,43 +0,0 @@ -#include "Collector.h" - -Collector::Collector() : - Subsystem("Collector"), - // Configure devices - rollerMotor(new Victor(6)), - ballDetector(new DigitalInput(10)), - piston(new Solenoid(1)), - openDetector(new DigitalInput(6)) -{ - - // Put everything to the LiveWindow for testing. - // XXX: LiveWindow::GetInstance()->AddActuator("Collector", "Roller Motor", (Victor) rollerMotor); - LiveWindow::GetInstance()->AddSensor("Collector", "Ball Detector", ballDetector); - LiveWindow::GetInstance()->AddSensor("Collector", "Claw Open Detector", openDetector); - LiveWindow::GetInstance()->AddActuator("Collector", "Piston", piston); -} - -bool Collector::HasBall() { - return ballDetector->Get(); // TODO: prepend ! to reflect real robot -} - -void Collector::SetSpeed(double speed) { - rollerMotor->Set(-speed); -} - -void Collector::Stop() { - rollerMotor->Set(0); -} - -bool Collector::IsOpen() { - return openDetector->Get(); // TODO: prepend ! to reflect real robot -} - -void Collector::Open() { - piston->Set(true); -} - -void Collector::Close() { - piston->Set(false); -} - -void Collector::InitDefaultCommand() {} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Collector.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Collector.h deleted file mode 100644 index f727709d3d..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Collector.h +++ /dev/null @@ -1,70 +0,0 @@ -#ifndef Collector_H -#define Collector_H - -#include "Commands/Subsystem.h" -#include "WPILib.h" - -/** - * The Collector subsystem has one motor for the rollers, a limit switch for ball - * detection, a piston for opening and closing the claw, and a reed switch to - * check if the piston is open. - */ -class Collector: public Subsystem -{ -public: - // Constants for some useful speeds - static constexpr double FORWARD = 1; - static constexpr double STOP = 0; - static constexpr double REVERSE = -1; - -private: - // Subsystem devices - std::shared_ptr rollerMotor; - std::shared_ptr ballDetector; - std::shared_ptr piston; - std::shared_ptr openDetector; - -public: - Collector(); - - /** - * NOTE: The current simulation model uses the the lower part of the claw - * since the limit switch wasn't exported. At some point, this will be - * updated. - * - * @return Whether or not the robot has the ball. - */ - bool HasBall(); - - /** - * @param speed The speed to spin the rollers. - */ - void SetSpeed(double speed); - - /** - * Stop the rollers from spinning - */ - void Stop(); - - /** - * @return Whether or not the claw is open. - */ - bool IsOpen(); - - /** - * Open the claw up. (For shooting) - */ - void Open(); - - /** - * Close the claw. (For collecting and driving) - */ - void Close(); - - /** - * No default command. - */ - void InitDefaultCommand(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/DriveTrain.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/DriveTrain.cpp deleted file mode 100644 index 26600008df..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/DriveTrain.cpp +++ /dev/null @@ -1,83 +0,0 @@ -#include "DriveTrain.h" -#include "Commands/DriveWithJoystick.h" -#define _USE_MATH_DEFINES -#include - -DriveTrain::DriveTrain() - : Subsystem("DriveTrain"), - // Configure drive motors - frontLeftCIM(new Victor(1)), - frontRightCIM(new Victor(2)), - backLeftCIM(new Victor(3)), - backRightCIM(new Victor(4)), - drive(frontRightCIM, backLeftCIM, frontRightCIM, backRightCIM), - rightEncoder(new Encoder(1, 2, true, Encoder::k4X)), - leftEncoder(new Encoder(3, 4, false, Encoder::k4X)), - gyro(new AnalogGyro(0)) { - // XXX: LiveWindow::GetInstance()->AddActuator("DriveTrain", "Front Left CIM", (Victor) frontLeftCIM); - // XXX: LiveWindow::GetInstance()->AddActuator("DriveTrain", "Front Right CIM", (Victor) frontRightCIM); - // XXX: LiveWindow::GetInstance()->AddActuator("DriveTrain", "Back Left CIM", (Victor) backLeftCIM); - // XXX: LiveWindow::GetInstance()->AddActuator("DriveTrain", "Back Right CIM", (Victor) backRightCIM); - - // Configure the RobotDrive to reflect the fact that all our motors are - // wired backwards and our drivers sensitivity preferences. - drive.SetSafetyEnabled(false); - drive.SetExpiration(0.1); - drive.SetSensitivity(0.5); - drive.SetMaxOutput(1.0); - drive.SetInvertedMotor(RobotDrive::kFrontLeftMotor, true); - drive.SetInvertedMotor(RobotDrive::kRearLeftMotor, true); - drive.SetInvertedMotor(RobotDrive::kFrontRightMotor, true); - drive.SetInvertedMotor(RobotDrive::kRearRightMotor, true); - - // Configure encoders - rightEncoder->SetPIDSourceParameter(PIDSource::kDistance); - leftEncoder->SetPIDSourceParameter(PIDSource::kDistance); - - #ifdef REAL - // Converts to feet - rightEncoder->SetDistancePerPulse(0.0785398); - leftEncoder->SetDistancePerPulse(0.0785398); - #else - // Convert to feet 4in diameter wheels with 360 tick simulated encoders - rightEncoder->SetDistancePerPulse((4.0/*in*/*M_PI)/(360.0*12.0/*in/ft*/)); - leftEncoder->SetDistancePerPulse((4.0/*in*/*M_PI)/(360.0*12.0/*in/ft*/)); - #endif - - LiveWindow::GetInstance()->AddSensor("DriveTrain", "Right Encoder", rightEncoder); - LiveWindow::GetInstance()->AddSensor("DriveTrain", "Left Encoder", leftEncoder); - - // Configure gyro - #ifdef REAL - gyro->SetSensitivity(0.007); // TODO: Handle more gracefully? - #endif - LiveWindow::GetInstance()->AddSensor("DriveTrain", "Gyro", gyro); -} - -void DriveTrain::InitDefaultCommand() { - SetDefaultCommand(new DriveWithJoystick()); -} - -void DriveTrain::TankDrive(Joystick* joy) { - drive.TankDrive(joy->GetY(), joy->GetRawAxis(4)); -} - -void DriveTrain::TankDrive(double leftAxis, double rightAxis) { - drive.TankDrive(leftAxis, rightAxis); -} - -void DriveTrain::Stop() { - drive.TankDrive(0.0, 0.0); -} - -std::shared_ptr DriveTrain::GetLeftEncoder() { - return leftEncoder; -} - -std::shared_ptr DriveTrain::GetRightEncoder() { - return rightEncoder; -} - -double DriveTrain::GetAngle() { - return gyro->GetAngle(); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/DriveTrain.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/DriveTrain.h deleted file mode 100644 index a0ad62f62a..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/DriveTrain.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef DriveTrain_H -#define DriveTrain_H - -#include "Commands/Subsystem.h" -#include "WPILib.h" - -/** - * The DriveTrain subsystem controls the robot's chassis and reads in - * information about it's speed and position. - */ -class DriveTrain: public Subsystem -{ -private: - // Subsystem devices - std::shared_ptr frontLeftCIM, frontRightCIM; - std::shared_ptr backLeftCIM, backRightCIM; - RobotDrive drive; - std::shared_ptr rightEncoder, leftEncoder; - std::shared_ptr gyro; - -public: - DriveTrain(); - - /** - * When other commands aren't using the drivetrain, allow tank drive with - * the joystick. - */ - void InitDefaultCommand(); - - /** - * @param joy PS3 style joystick to use as the input for tank drive. - */ - void TankDrive(Joystick* joy); - - /** - * @param leftAxis Left sides value - * @param rightAxis Right sides value - */ - void TankDrive(double leftAxis, double rightAxis); - - /** - * Stop the drivetrain from moving. - */ - void Stop(); - - /** - * @return The encoder getting the distance and speed of left side of the drivetrain. - */ - std::shared_ptr GetLeftEncoder(); - - /** - * @return The encoder getting the distance and speed of right side of the drivetrain. - */ - std::shared_ptr GetRightEncoder(); - - /** - * @return The current angle of the drivetrain. - */ - double GetAngle(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Pivot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Pivot.cpp deleted file mode 100644 index d6fc1ef843..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Pivot.cpp +++ /dev/null @@ -1,50 +0,0 @@ -#include "Pivot.h" - -Pivot::Pivot() : - PIDSubsystem("Pivot", 7.0, 0.0, 8.0), - // Sensors for measuring the position of the pivot. - upperLimitSwitch(new DigitalInput(13)), - lowerLimitSwitch(new DigitalInput(12)), - // 0 degrees is vertical facing up. - // Angle increases the more forward the pivot goes. - pot(new AnalogPotentiometer(1)), - // Motor to move the pivot. - motor(new Victor(5)) -{ - SetAbsoluteTolerance(0.005); - GetPIDController()->SetContinuous(false); - #ifdef SIMULATION - // PID is different in simulation. - GetPIDController()->SetPID(0.5, 0.001, 2); - SetAbsoluteTolerance(5); - #endif - - // Put everything to the LiveWindow for testing. - LiveWindow::GetInstance()->AddSensor("Pivot", "Upper Limit Switch", upperLimitSwitch); - LiveWindow::GetInstance()->AddSensor("Pivot", "Lower Limit Switch", lowerLimitSwitch); - // XXX: LiveWindow::GetInstance()->AddSensor("Pivot", "Pot", (AnalogPotentiometer) pot); - // XXX: LiveWindow::GetInstance()->AddActuator("Pivot", "Motor", (Victor) motor); - LiveWindow::GetInstance()->AddActuator("Pivot", "PIDSubsystem Controller", GetPIDController()); -} - -void InitDefaultCommand() {} - -double Pivot::ReturnPIDInput() { - return pot->Get(); -} - -void Pivot::UsePIDOutput(double output) { - motor->PIDWrite(output); -} - -bool Pivot::IsAtUpperLimit() { - return upperLimitSwitch->Get(); // TODO: inverted from real robot (prefix with !) -} - -bool Pivot::IsAtLowerLimit() { - return lowerLimitSwitch->Get(); // TODO: inverted from real robot (prefix with !) -} - -double Pivot::GetAngle() { - return pot->Get(); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Pivot.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Pivot.h deleted file mode 100644 index d8f1783936..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Pivot.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef Pivot_H -#define Pivot_H - -#include "Commands/PIDSubsystem.h" -#include "WPILib.h" - -/** - * The Pivot subsystem contains the Van-door motor and the pot for PID control - * of angle of the pivot and claw. - */ -class Pivot: public PIDSubsystem -{ -public: - // Constants for some useful angles - static constexpr double COLLECT = 105; - static constexpr double LOW_GOAL = 90; - static constexpr double SHOOT = 45; - static constexpr double SHOOT_NEAR = 30; - -private: - // Subsystem devices - std::shared_ptr upperLimitSwitch; - std::shared_ptr lowerLimitSwitch; - std::shared_ptr pot; - std::shared_ptr motor; - -public: - Pivot(); - - /** - * No default command, if PID is enabled, the current setpoint will be maintained. - */ - void InitDefaultCommand() {} - - /** - * @return The angle read in by the potentiometer - */ - double ReturnPIDInput(); - - /** - * Set the motor speed based off of the PID output - */ - void UsePIDOutput(double output); - - /** - * @return If the pivot is at its upper limit. - */ - bool IsAtUpperLimit(); - - /** - * @return If the pivot is at its lower limit. - */ - bool IsAtLowerLimit(); - - /** - * @return The current angle of the pivot. - */ - double GetAngle(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Pneumatics.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Pneumatics.cpp deleted file mode 100644 index a2b6bec31e..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Pneumatics.cpp +++ /dev/null @@ -1,44 +0,0 @@ -#include "Pneumatics.h" - -Pneumatics::Pneumatics() : - Subsystem("Pneumatics"), - pressureSensor(new AnalogInput(3)) -{ - #ifdef REAL - compressor = new Compressor(uint8_t(1)); // TODO: (1, 14, 1, 8); - #endif - - LiveWindow::GetInstance()->AddSensor("Pneumatics", "Pressure Sensor", pressureSensor); -} - -/** - * No default command - */ -void Pneumatics::InitDefaultCommand() {} - -/** - * Start the compressor going. The compressor automatically starts and stops as it goes above and below maximum pressure. - */ -void Pneumatics::Start() { - #ifdef REAL - compressor->Start(); - #endif -} - -/** - * @return Whether or not the system is fully pressurized. - */ -bool Pneumatics::IsPressurized() { - #ifdef REAL - return MAX_PRESSURE <= pressureSensor->GetVoltage(); - #else - return true; // NOTE: Simulation always has full pressure - #endif -} - -/** - * Puts the pressure on the SmartDashboard. - */ -void Pneumatics::WritePressure() { - SmartDashboard::PutNumber("Pressure", pressureSensor->GetVoltage()); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Pneumatics.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Pneumatics.h deleted file mode 100644 index 7cbcb7cb97..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Pneumatics.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef Pneumatics_H -#define Pneumatics_H - -#include "Commands/Subsystem.h" -#include "WPILib.h" - -/** - * The Pneumatics subsystem contains the compressor and a pressure sensor. - * - * NOTE: The simulator currently doesn't support the compressor or pressure sensors. - */ -class Pneumatics: public Subsystem -{ -private: - std::shared_ptr pressureSensor; - #ifdef REAL - Compressor* compressor; - #endif - - static constexpr double MAX_PRESSURE = 2.55; - -public: - Pneumatics(); - - /** - * No default command - */ - void InitDefaultCommand(); - - /** - * Start the compressor going. The compressor automatically starts and stops as it goes above and below maximum pressure. - */ - void Start(); - - /** - * @return Whether or not the system is fully pressurized. - */ - bool IsPressurized(); - - /** - * Puts the pressure on the SmartDashboard. - */ - void WritePressure(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Shooter.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Shooter.cpp deleted file mode 100644 index 8f10c41ad5..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Shooter.cpp +++ /dev/null @@ -1,88 +0,0 @@ -#include "Shooter.h" - -Shooter::Shooter() : - Subsystem("Shooter"), - // Configure Devices - piston1(new DoubleSolenoid(3, 4)), - piston2(new DoubleSolenoid(5, 6)), - latchPiston(new Solenoid(1, 2)), - piston1ReedSwitchFront(new DigitalInput(9)), - piston1ReedSwitchBack(new DigitalInput(11)), - hotGoalSensor(new DigitalInput(7)) -{ - - // Put everything to the LiveWindow for testing. - LiveWindow::GetInstance()->AddSensor("Shooter", "Hot Goal Sensor", hotGoalSensor); - LiveWindow::GetInstance()->AddSensor("Shooter", "Piston1 Reed Switch Front ", piston1ReedSwitchFront); - LiveWindow::GetInstance()->AddSensor("Shooter", "Piston1 Reed Switch Back ", piston1ReedSwitchBack); - LiveWindow::GetInstance()->AddActuator("Shooter", "Latch Piston", latchPiston); -} - -void Shooter::InitDefaultCommand() -{ - // Set the default command for a subsystem here. - //SetDefaultCommand(new MySpecialCommand()); -} - -void Shooter::ExtendBoth() { - piston1->Set(DoubleSolenoid::kForward); - piston2->Set(DoubleSolenoid::kForward); -} - -void Shooter::RetractBoth() { - piston1->Set(DoubleSolenoid::kReverse); - piston2->Set(DoubleSolenoid::kReverse); -} - -void Shooter::Extend1() { - piston1->Set(DoubleSolenoid::kForward); -} - -void Shooter::Retract1() { - piston1->Set(DoubleSolenoid::kReverse); -} - -void Shooter::Extend2() { - piston2->Set(DoubleSolenoid::kReverse); -} - -void Shooter::Retract2() { - piston2->Set(DoubleSolenoid::kForward); -} - -void Shooter::Off1() { - piston1->Set(DoubleSolenoid::kOff); -} - -void Shooter::Off2() { - piston2->Set(DoubleSolenoid::kOff); -} - -void Shooter::Unlatch() { - latchPiston->Set(true); -} - -void Shooter::Latch() { - latchPiston->Set(false); -} - -void Shooter::ToggleLatchPosition() { - latchPiston->Set(!latchPiston->Get()); -} - -bool Shooter::Piston1IsExtended() { - return !piston1ReedSwitchFront->Get(); -} - -bool Shooter::Piston1IsRetracted() { - return !piston1ReedSwitchBack->Get(); -} - -void Shooter::OffBoth() { - piston1->Set(DoubleSolenoid::kOff); - piston2->Set(DoubleSolenoid::kOff); -} - -bool Shooter::GoalIsHot() { - return hotGoalSensor->Get(); -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Shooter.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Shooter.h deleted file mode 100644 index a80f22a549..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Subsystems/Shooter.h +++ /dev/null @@ -1,117 +0,0 @@ -#ifndef Shooter_H -#define Shooter_H - -#include "Commands/Subsystem.h" -#include "WPILib.h" - -/** - * The Shooter subsystem handles shooting. The mechanism for shooting is - * slightly complicated because it has to pneumatic cylinders for shooting, and - * a third latch to allow the pressure to partially build up and reduce the - * effect of the airflow. For shorter shots, when full power isn't needed, only - * one cylinder fires. - * - * NOTE: Simulation currently approximates this as as single pneumatic cylinder - * and ignores the latch. - */ -class Shooter: public Subsystem -{ -private: - // Devices - std::shared_ptr piston1; - std::shared_ptr piston2; - std::shared_ptr latchPiston; - std::shared_ptr piston1ReedSwitchFront; - std::shared_ptr piston1ReedSwitchBack; - std::shared_ptr hotGoalSensor; // NOTE: Currently ignored in simulation - -public: - Shooter(); - void InitDefaultCommand(); - - /** - * Extend both solenoids to shoot. - */ - void ExtendBoth(); - - /** - * Retract both solenoids to prepare to shoot. - */ - void RetractBoth(); - - /** - * Extend solenoid 1 to shoot. - */ - void Extend1(); - - - /** - * Retract solenoid 1 to prepare to shoot. - */ - void Retract1(); - - /** - * Extend solenoid 2 to shoot. - */ - void Extend2(); - - /** - * Retract solenoid 2 to prepare to shoot. - */ - void Retract2(); - - /** - * Turns off the piston1 double solenoid. This won't actuate anything - * because double solenoids preserve their state when turned off. This - * should be called in order to reduce the amount of time that the coils are - * powered. - */ - void Off1(); - - /** - * Turns off the piston1 double solenoid. This won't actuate anything - * because double solenoids preserve their state when turned off. This - * should be called in order to reduce the amount of time that the coils are - * powered. - */ - void Off2(); - - /** - * Release the latch so that we can shoot - */ - void Unlatch(); - - /** - * Latch so that pressure can build up and we aren't limited by air flow. - */ - void Latch(); - - /** - * Toggles the latch postions - */ - void ToggleLatchPosition(); - - /** - * @return Whether or not piston 1 is fully extended. - */ - bool Piston1IsExtended(); - - /** - * @return Whether or not piston 1 is fully retracted. - */ - bool Piston1IsRetracted(); - - /** - * Turns off all double solenoids. Double solenoids hold their position when - * they are turned off. We should turn them off whenever possible to extend - * the life of the coils - */ - void OffBoth(); - - /** - * @return Whether or not the goal is hot as read by the banner sensor - */ - bool GoalIsHot(); -}; - -#endif diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Triggers/DoubleButton.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Triggers/DoubleButton.cpp deleted file mode 100644 index a07d2f0b6b..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Triggers/DoubleButton.cpp +++ /dev/null @@ -1,19 +0,0 @@ -/* - * DoubleButton.cpp - * - * Created on: Jun 24, 2014 - * Author: alex - */ - -#include "DoubleButton.h" - -DoubleButton::DoubleButton(Joystick* joy, int button1, int button2) { - this->joy = joy; - this->button1 = button1; - this->button2 = button2; -} - -bool DoubleButton::Get() { - return joy->GetRawButton(button1) && joy->GetRawButton(button2); -} - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Triggers/DoubleButton.h b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Triggers/DoubleButton.h deleted file mode 100644 index 91ff2eb85a..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PacGoat/src/Triggers/DoubleButton.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * DoubleButton.h - * - * Created on: Jun 24, 2014 - * Author: alex - */ - -#ifndef DOUBLEBUTTON_H_ -#define DOUBLEBUTTON_H_ - -#include "WPILib.h" - -class DoubleButton : public Trigger { -private: - Joystick* joy; - int button1, button2; - -public: - DoubleButton(Joystick* joy, int button1, int button2); - - bool Get(); -}; - -#endif /* DOUBLEBUTTON_H_ */ diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/Potentiometer/src/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/Potentiometer/src/Robot.cpp deleted file mode 100644 index a5a10f4f79..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/Potentiometer/src/Robot.cpp +++ /dev/null @@ -1,79 +0,0 @@ -#include "WPILib.h" - -/** - * This is a sample program to demonstrate the use of a soft potentiometer and proportional - * control to reach and maintain position setpoints on an elevator mechanism. A joystick - * button is used to switch elevator setpoints. - * - * WARNING: While it may look like a good choice to use for your code if you're inexperienced, - * don't. Unless you know what you are doing, complex code will be much more difficult under - * this system. Use IterativeRobot or Command-Based instead if you're new. - */ -class Robot: public SampleRobot -{ - - const int potChannel = 1; //analog input pin - const int motorChannel = 7; //PWM channel - const int joystickChannel = 0; //usb number in DriverStation - const int buttonNumber = 4; //joystick button - - const double pGain = 1.0; //proportional speed constant - double motorSpeed; - double currentPosition; //sensor voltage reading corresponding to current elevator position - - AnalogInput potentiometer; - Victor elevatorMotor; - Joystick joystick; - -public: - Robot() : - potentiometer(potChannel), elevatorMotor(motorChannel), - joystick(joystickChannel) {} - - /** - * Runs during autonomous. - */ - void Autonomous() - { - - } - - /** - * - */ - void OperatorControl() { - bool buttonState; - bool prevButtonState = false; - - int index = 0; //setpoint array index - double currentSetpoint; //holds desired setpoint - const int size = 3; //number of setpoints - const double setpoints[size] = {1.0, 2.6, 4.3}; //bottom, middle, and top elevator setpoints - currentSetpoint = setpoints[0]; //set to first setpoint - - while (IsOperatorControl() && IsEnabled()) { - buttonState = joystick.GetRawButton(buttonNumber); //check if button is pressed - - //if button has been pressed and released once - if (buttonState && !prevButtonState) { - index = (index + 1) % size; //increment set point, reset if at maximum - currentSetpoint = setpoints[index]; //set setpoint - } - prevButtonState = buttonState; //record previous button state - - currentPosition = potentiometer.GetAverageVoltage(); //get position value - motorSpeed = (currentPosition - currentSetpoint)*pGain; //convert position error to speed - elevatorMotor.Set(motorSpeed); //drive elevator motor - } - } - - /** - * Runs during test mode. - */ - void Test() - { - - } -}; - -START_ROBOT_CLASS(Robot) diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PotentiometerPID/src/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PotentiometerPID/src/Robot.cpp deleted file mode 100644 index c1b151fd87..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/PotentiometerPID/src/Robot.cpp +++ /dev/null @@ -1,80 +0,0 @@ -#include "WPILib.h" - -/** - * This is a sample program to demonstrate how to use a soft potentiometer and a PID - * Controller to reach and maintain position setpoints on an elevator mechanism. - * - * WARNING: While it may look like a good choice to use for your code if you're inexperienced, - * don't. Unless you know what you are doing, complex code will be much more difficult under - * this system. Use IterativeRobot or Command-Based instead if you're new. - */ - -class Robot: public SampleRobot { - const int potChannel = 1; //analog input pin - const int motorChannel = 7; //PWM channel - const int joystickChannel = 0; //usb number in DriverStation - const int buttonNumber = 4; //button on joystick - - const double setPoints[3] = { 1.0, 2.6, 4.3 }; //bottom, middle, and top elevator setpoints - - //proportional, integral, and derivative speed constants; motor inverted - //DANGER: when tuning PID constants, high/inappropriate values for pGain, iGain, - //and dGain may cause dangerous, uncontrollable, or undesired behavior! - const double pGain = -5.0, iGain = -0.02, dGain = -2.0; //these may need to be positive for a non-inverted motor - - AnalogInput potentiometer; - Victor elevatorMotor; - Joystick joystick; - PIDController pidController; - -public: - Robot() : - //make objects for potentiometer, the elevator motor controller, and the joystick - potentiometer(potChannel), elevatorMotor(motorChannel), joystick(joystickChannel), - //potentiometer (AnalogInput) and elevatorMotor (Victor) can be used as a - //PIDSource and PIDOutput respectively. - //The PIDController has to take a pointer to the PIDSource and PIDOutput, so - //you must call &potentiometer and &elevatorMotor to get their pointers. - pidController(pGain, iGain, dGain, &potentiometer, &elevatorMotor) {} - - /** - * Runs during autonomous. - */ - void Autonomous() { - - } - - /** - * Uses a PIDController and an array of setpoints to switch and maintain elevator positions. - * The elevator setpoint is selected by a joystick button. - */ - void OperatorControl() { - pidController.SetInputRange(0, 5); //0 to 5V - pidController.SetSetpoint(setPoints[0]); //set to first setpoint - - int index = 0; - bool currentValue; - bool previousValue = false; - - while (IsOperatorControl() && IsEnabled()) { - pidController.Enable(); //begin PID control - - //when the button is pressed once, the selected elevator setpoint is incremented - currentValue = joystick.GetRawButton(buttonNumber); - if (currentValue && !previousValue) { - pidController.SetSetpoint(setPoints[index]); - index = (index + 1) % (sizeof(setPoints)/8); //index of elevator setpoint wraps around - } - previousValue = currentValue; - } - } - - /** - * Runs during test mode. - */ - void Test() { - - } -}; - -START_ROBOT_CLASS(Robot) diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/QuickVision/src/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/QuickVision/src/Robot.cpp deleted file mode 100644 index 5cf80ad325..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/QuickVision/src/Robot.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#include "WPILib.h" - -/** - * Uses the CameraServer class to automatically capture video from a USB webcam - * and send it to the FRC dashboard without doing any vision processing. This - * is the easiest way to get camera images to the dashboard. Just add this to the - * RobotInit() method in your program. - */ -class QuickVisionRobot : public SampleRobot -{ -public: - void RobotInit() override { - CameraServer::GetInstance()->SetQuality(50); - //the camera name (ex "cam0") can be found through the roborio web interface - CameraServer::GetInstance()->StartAutomaticCapture("cam0"); - } - - void OperatorControl() - { - while (IsOperatorControl() && IsEnabled()) - { - /** robot code here! **/ - Wait(0.005); // wait for a motor update time - } - } -}; - -START_ROBOT_CLASS(QuickVisionRobot) - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/Relay/src/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/Relay/src/Robot.cpp deleted file mode 100644 index c9c42a4baf..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/Relay/src/Robot.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "WPILib.h" - -/** - * This is a sample program which uses joystick buttons to control a relay. - * A Relay (generally a spike) has two outputs, each of which can be at either - * 0V or 12V and so can be used for actions such as turning a motor off, - * full forwards, or full reverse, and is generally used on the compressor. - * This program uses two buttons on a joystick and each button corresponds to - * one output; pressing the button sets the output to 12V and releasing sets - * it to 0V. - * During Operator Control, the loop waits for a brief time before continuing - * in order to allow other threads to run. This is generally a good idea, - * especially as joystick values are only received every 20ms. - */ -class Robot: public SampleRobot -{ - // Joystick with which to control the relay. - Joystick m_stick; - - // Relay to use for the - Relay m_relay; - - // Numbers of the buttons to be used for controlling the Relay. - const int kRelayForwardButton = 1; - const int kRelayReverseButton = 2; - - // Update every 5milliseconds/0.005 seconds. - const double kUpdatePeriod = 0.005; - -public: - Robot() : - m_stick(0), // Use joystick on port 0. - m_relay(0) // Relay on port 0. - { - } - - /** - * Control a Relay using Joystick buttons. - */ - void OperatorControl() - { - while (IsOperatorControl() && IsEnabled()) - { - // Retrieve the button values. GetRawButton will return - // true if the button is pressed and false if not. - bool forward = m_stick.GetRawButton(kRelayForwardButton); - bool reverse = m_stick.GetRawButton(kRelayReverseButton); - - // Depending on the button values, we want to use one of - // kOn, kOff, kForward, or kReverse. - // kOn sets both outputs to 12V, kOff sets both to 0V, - // kForward sets forward to 12V and reverse to 0V, and - // kReverse sets reverse to 12V and forward to 0V. - if (forward && reverse) - m_relay.Set(Relay::kOn); - else if (forward) - m_relay.Set(Relay::kForward); - else if (reverse) - m_relay.Set(Relay::kReverse); - else - m_relay.Set(Relay::kOff); - - // Insert 5ms delay in loop. - Wait(kUpdatePeriod); - } - } -}; - -START_ROBOT_CLASS(Robot) diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/Solenoid/src/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/Solenoid/src/Robot.cpp deleted file mode 100644 index f16faccb44..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/Solenoid/src/Robot.cpp +++ /dev/null @@ -1,77 +0,0 @@ -#include "WPILib.h" - -/** - * This is a sample program showing the use of the solenoid classes during - * operator control. - * Three buttons from a joystick will be used to control two solenoids: - * One button to control the position of a single solenoid and the other - * two buttons to control a double solenoid. - * Single solenoids can either be on or off, such that the air diverted through - * them goes through either one channel or the other. - * Double solenoids have three states: Off, Forward, and Reverse. Forward and - * Reverse divert the air through the two channels and correspond to the - * on and off of a single solenoid, but a double solenoid can also be "off", - * where both channels are diverted to exhaust such that there is no pressure - * in either channel. - * Additionally, double solenoids take up two channels on your PCM whereas - * single solenoids only take a single channel. - * During Operator Control, the loop waits for a brief time before continuing - * in order to allow other threads to run. This is generally a good idea, - * especially as joystick values are only received every 20ms. - */ -class Robot: public SampleRobot -{ - // Joystick with buttons to control solenoids with. - Joystick m_stick; - // Solenoids to control with the joystick. - // Solenoid corresponds to a single solenoid. - Solenoid m_solenoid; - // DoubleSolenoid corresponds to a double solenoid. - DoubleSolenoid m_doubleSolenoid; - - // Update every 5milliseconds/0.005 seconds. - const double kUpdatePeriod = 0.005; - - // Numbers of the buttons to use for triggering the solenoids. - const int kSolenoidButton = 1; - const int kDoubleSolenoidForward = 2; - const int kDoubleSolenoidReverse = 3; - -public: - Robot() : - m_stick(0), // Use joystick on port 0. - m_solenoid(0), // Use solenoid on channel 0. - // Use double solenoid with Forward Channel of 1 and Reverse of 2. - m_doubleSolenoid(1, 2) - { - } - - /** - * Sets the solenoids from the position of joystick buttons. - */ - void OperatorControl() - { - while (IsOperatorControl() && IsEnabled()) - { - // The output of GetRawButton is true/false depending on whether - // the button is pressed; Set takes a boolean for for whether to - // use the default (false) channel or the other (true). - m_solenoid.Set(m_stick.GetRawButton(kSolenoidButton)); - - // In order to set the double solenoid, we will say that if neither - // button is pressed, it is off, if just one button is pressed, - // set the solenoid to correspond to that button, and if both - // are pressed, set the solenoid to Forwards. - if (m_stick.GetRawButton(kDoubleSolenoidForward)) - m_doubleSolenoid.Set(DoubleSolenoid::kForward); - else if (m_stick.GetRawButton(kDoubleSolenoidReverse)) - m_doubleSolenoid.Set(DoubleSolenoid::kReverse); - else - m_doubleSolenoid.Set(DoubleSolenoid::kOff); - - Wait(kUpdatePeriod); // wait for a motor update time - } - } -}; - -START_ROBOT_CLASS(Robot) diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/Ultrasonic/src/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/Ultrasonic/src/Robot.cpp deleted file mode 100644 index 8b74316cc0..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/Ultrasonic/src/Robot.cpp +++ /dev/null @@ -1,65 +0,0 @@ -#include "WPILib.h" - -/** - * This is a sample program demonstrating how to use an ultrasonic sensor and proportional - * control to maintain a set distance from an object. - * - * WARNING: While it may look like a good choice to use for your code if you're inexperienced, - * don't. Unless you know what you are doing, complex code will be much more difficult under - * this system. Use IterativeRobot or Command-Based instead if you're new. - */ -class Robot: public SampleRobot { - AnalogInput ultrasonic; //ultrasonic sensor - RobotDrive myRobot; - -public: - const int ultrasonicChannel = 3; //analog input pin - - //channels for motors - const int leftMotorChannel = 1; - const int rightMotorChannel = 0; - const int leftRearMotorChannel = 3; - const int rightRearMotorChannel = 2; - - int holdDistance = 12; //distance in inches the robot wants to stay from an object - const double valueToInches = 0.125; //factor to convert sensor values to a distance in inches - const double pGain = 0.05; //proportional speed constant - - - Robot() : - ultrasonic(ultrasonicChannel), - myRobot(new CANTalon(leftMotorChannel), new CANTalon(leftRearMotorChannel), - new CANTalon(rightMotorChannel), new CANTalon(rightRearMotorChannel)) {} - - /** - * Runs during autonomous. - */ - void Autonomous() { - - } - - /** - * Tells the robot to drive to a set distance (in inches) from an object using - * proportional control. - */ - void OperatorControl() { - - double currentDistance; //distance measured from the ultrasonic sensor values - double currentSpeed; //speed to set the drive train motors - - while (IsOperatorControl() && IsEnabled()) { - currentDistance = ultrasonic.GetValue() * valueToInches; //sensor returns a value from 0-4095 that is scaled to inches - currentSpeed = (holdDistance - currentDistance) * pGain; //convert distance error to a motor speed - myRobot.Drive(currentSpeed, 0); //drive robot - } - } - - /** - * Runs during test mode - */ - void Test() { - - } -}; - -START_ROBOT_CLASS(Robot) diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/UltrasonicPID/src/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/UltrasonicPID/src/Robot.cpp deleted file mode 100644 index ed5ca254c5..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/UltrasonicPID/src/Robot.cpp +++ /dev/null @@ -1,91 +0,0 @@ -#include "WPILib.h" - -/** - * This is a sample program to demonstrate the use of a PID Controller with an ultrasonic - * sensor to reach and maintain a set distance from an object. - * - * WARNING: While it may look like a good choice to use for your code if you're inexperienced, - * don't. Unless you know what you are doing, complex code will be much more difficult under - * this system. Use IterativeRobot or Command-Based instead if you're new. - */ -class Robot: public SampleRobot { - AnalogInput ultrasonic; //ultrasonic sensor - RobotDrive myRobot; - PIDController pidController; - -public: - const int ultrasonicChannel = 3; //analog input - - //channels for motors - const int leftMotorChannel = 1; - const int rightMotorChannel = 0; - const int leftRearMotorChannel = 3; - const int rightRearMotorChannel = 2; - - int holdDistance = 12; //distance in inches the robot wants to stay from an object - - //proportional, integral, and derivative speed constants - //DANGER: when tuning PID constants, high/inappropriate values for pGain, iGain, - //and dGain may cause dangerous, uncontrollable, or undesired behavior! - const double pGain = 7, iGain = .018, dGain = 1.5; - - //conversion factor specific to the sensor being used. For this sensor, - //the sensor returned values from 0.0V to 5.0V with a resolution of 9.8mV/in. - const double VoltsToInches = 0.0098; - - //internal class to write to myRobot (a RobotDrive object) using a PIDOutput - class MyPIDOutput: public PIDOutput { - public: - RobotDrive &rd; - MyPIDOutput(RobotDrive &r) : rd(r) - { - rd.SetSafetyEnabled(false); - } - void PIDWrite(float output) { - rd.Drive(output, 0); //write to myRobot (RobotDrive) by reference - } - }; - - Robot() : - //make objects for sensor and drive train - ultrasonic(ultrasonicChannel), - myRobot(new CANTalon(leftMotorChannel), new CANTalon(leftRearMotorChannel), - new CANTalon(rightMotorChannel), new CANTalon(rightRearMotorChannel)), - //ultrasonic (AnalogInput) can be used as a PIDSource without modification, - //PIDOutput is an instance of the internal class MyPIDOutput made earlier - pidController(pGain, iGain, dGain, &ultrasonic, new MyPIDOutput(myRobot)) {} - - /** - * Runs during autonomous. - */ - void Autonomous() - { - - } - - /** - * Drives robot to set distance from an object using PID control and the ultrasonic - * sensor. - */ - void OperatorControl() { - pidController.SetSetpoint(holdDistance * VoltsToInches); //set setpoint to 12 inches - - //set expected range to 0-24 inches; e.g. at 24 inches from object go full - //forward, at 0 inches from object go full backward. - pidController.SetInputRange(0, 24 * VoltsToInches); - - while (IsOperatorControl() && IsEnabled()) { - pidController.Enable(); //begin PID control - } - } - - /** - * Runs during test mode. - */ - void Test() - { - - } -}; - -START_ROBOT_CLASS(Robot) diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/examples.xml b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/examples.xml deleted file mode 100644 index a0d0a07f33..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/examples/examples.xml +++ /dev/null @@ -1,687 +0,0 @@ - - - - - - Getting Started with C++ - Examples for getting started with FRC C++ - - - - CommandBased Robot - Examples for CommandBased robot programs. - - - - Actuators - Example programs that demonstrate the use of various actuators - - - - Analog - Examples programs that show different uses of analog inputs, - outputs and various analog sensors - - - - CAN - Example programs that demonstrate the use of the CAN components in the control system - - - - Complete List - Complete list of all sample programs across all categories - - - - Digital - Example programs that demonstrate the sensors that use the digital I/O ports - - - - I2C - Example programs that demonstrate the use of I2C and various sensors that use it - - - - Joystick - Example programs that demonstate different uses of joysticks for robot driving - - - - Pneumatics - Example programs that demonstrate the use of the compressor and solenoids - - - - Robot and Motor - Example programs that demonstrate driving a robot and motors including safety, servos, etc. - - - - SPI - Example programs that demonstrate the use of the SPI bus and sensors that connect to it - - - - Safety - Example programs that demonstate the motor safety classes and how to use them with your programs - - - - Sensors - Example programs that demonstrate the use of the various commonly used sensors on FRC robots - - - - Vision - Example programs that demonstrate the use of a camera for image acquisition and processing - - - - Motor Controller - Demonstrate controlling a single motor with a Joystick. - - Robot and Motor - Actuators - Joystick - Complete List - - - src - - - - - - - - Motor Control With Encoder - Demonstrate controlling a single motor with a Joystick and displaying the net movement of the motor using an encoder. - - Robot and Motor - Digital - Sensors - Actuators - Joystick - Complete List - - - src - - - - - - - - CAN Talon SRX - Quick demo of running the SRX at a given throttle value. - - Robot and Motor - Digital - Actuators - Complete List - - - src - - - - - - - - CAN Talon SRX PID - Quick demo of running the SRX with a PID loop. - - Robot and Motor - Digital - Actuators - Complete List - - - src - - - - - - - - Relay - Demonstrate controlling a Relay from Joystick buttons. - - Actuators - Joystick - Complete List - - - src - - - - - - - - PDP CAN Monitoring - Demonstrate using CAN to monitor the voltage, current, and temperature in the Power Distribution Panel. - - Complete List - CAN - Sensors - - - src - - - - - - - - Solenoids - Demonstrate controlling a single and double solenoid from Joystick buttons. - - Actuators - Joystick - Pneumatics - Complete List - - - src - - - - - - - - Encoder - Demonstrate displaying the value of a quadrature encoder on the SmartDashboard. - - Complete List - Digital - Sensors - - - src - - - - - - - - Arcade Drive - An example program which the use of Arcade Drive with the RobotDrive class - - Getting Started with C++ - Robot and Motor - Joystick - Complete List - - - src - - - - - - - - - Mecanum Drive - An example program which the use of Mecanum Drive with the RobotDrive class - - Getting Started with C++ - Robot and Motor - Joystick - Complete List - - - src - - - - - - - - - Ultrasonic - Demonstrate maintaining a set distance using an ultrasonic sensor. - - Robot and Motor - CAN - Complete List - Sensors - Analog - - - src - - - - - - - - - UltrasonicPID - Demonstrate maintaining a set distance using an ultrasonic sensor and PID control. - - Robot and Motor - CAN - Complete List - Sensors - Analog - - - src - - - - - - - - - Gyro - An example program showing how to drive straight with using a gyro sensor. - - Robot and Motor - CAN - Complete List - Sensors - Analog - Joystick - - - src - - - - - - - - - Gyro Mecanum - An example program showing how to perform mecanum drive with field oriented controls. - - Robot and Motor - CAN - Complete List - Sensors - Analog - Joysitck - - - src - - - - - - - - - PotentiometerPID - An example to demonstrate the use of a potentiometer and PID control to reach elevator position setpoints. - - Joystick - Actuators - Complete List - Sensors - Analog - - - src - - - - - - - - - Potentiometer - An example to demonstrate the use of a potentiometer and basic proportional control to reach elevator position setpoints. - - Joystick - Actuators - Complete List - Sensors - Analog - - - src - - - - - - - - - Getting Started - An example program which demonstrates the simplest autonomous and - teleoperated routines. - - Getting Started with C++ - Complete List - - - src - - - - - - - - Simple Vision - The minimal program to acquire images from an attached USB camera on the robot - and send them to the dashboard. - - Vision - Complete List - - - src - - - - - - - - Intermediate Vision - An example program that acquires images from an attached USB camera and adds some - annotation to the image as you might do for showing operators the result of some image - recognition, and sends it to the dashboard for display. - - - Vision - Complete List - - - src - - - - - - - - Axis Camera Sample - An example program that acquires images from an Axis network camera and adds some - annotation to the image as you might do for showing operators the result of some image - recognition, and sends it to the dashboard for display. This demonstrates the use of the - AxisCamera class. - - - Vision - Complete List - - - src - - - - - - - - 2015 Vision Color Sample - An example program that demonstrates image processing to locate Yellow totes by color. - This example uses a file which must be copied over to the roboRIO via FTP to demonstrate processing. - To use this code with a camera, you must integrate the code for image acquisition from the appropriate - camera example; - - - Vision - Complete List - - - src - - - - - - - - 2015 Vision Retro Sample - An example program that demonstrates image processing to locate Yellow totes by the retroreflective target. - This example uses a file which must be copied over to the roboRIO via FTP to demonstrate processing. - To use this code with a camera, you must integrate the code for image acquisition from the appropriate - camera example; - - - Vision - Complete List - - - src - - - - - - - - GearsBot - A fully functional example CommandBased program for - WPIs GearsBot robot. This code can run on your computer if it - supports simulation. - - CommandBased Robot - Complete List - - /usr/share/frcsim/worlds/GearsBotDemo.world - - src - src/Commands - src/Subsystems - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PacGoat - A fully functional example CommandBased program for FRC Team 190's 2014 robot. This code can run on your computer if it supports simulation. - - CommandBased Robot - Complete List - - /usr/share/frcsim/worlds/PacGoat2014.world - - src - src/Commands - src/Subsystems - src/Triggers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/iterative/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/iterative/Robot.cpp deleted file mode 100644 index 44af60fd59..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/iterative/Robot.cpp +++ /dev/null @@ -1,38 +0,0 @@ -#include "WPILib.h" - -class Robot: public IterativeRobot -{ -private: - LiveWindow *lw = LiveWindow::GetInstance(); - - void RobotInit() - { - } - - void AutonomousInit() - { - - } - - void AutonomousPeriodic() - { - - } - - void TeleopInit() - { - - } - - void TeleopPeriodic() - { - - } - - void TestPeriodic() - { - lw->Run(); - } -}; - -START_ROBOT_CLASS(Robot) diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/sample/Robot.cpp b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/sample/Robot.cpp deleted file mode 100644 index c360da0671..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/sample/Robot.cpp +++ /dev/null @@ -1,58 +0,0 @@ -#include "WPILib.h" - -/** - * This is a demo program showing the use of the RobotDrive class. - * The SampleRobot class is the base of a robot application that will automatically call your - * Autonomous and OperatorControl methods at the right time as controlled by the switches on - * the driver station or the field controls. - * - * WARNING: While it may look like a good choice to use for your code if you're inexperienced, - * don't. Unless you know what you are doing, complex code will be much more difficult under - * this system. Use IterativeRobot or Command-Based instead if you're new. - */ -class Robot: public SampleRobot -{ - RobotDrive myRobot; // robot drive system - Joystick stick; // only joystick - -public: - Robot() : - myRobot(0, 1), // these must be initialized in the same order - stick(0) // as they are declared above. - { - myRobot.SetExpiration(0.1); - } - - /** - * Drive left & right motors for 2 seconds then stop - */ - void Autonomous() - { - myRobot.SetSafetyEnabled(false); - myRobot.Drive(-0.5, 0.0); // drive forwards half speed - Wait(2.0); // for 2 seconds - myRobot.Drive(0.0, 0.0); // stop robot - } - - /** - * Runs the motors with arcade steering. - */ - void OperatorControl() - { - myRobot.SetSafetyEnabled(true); - while (IsOperatorControl() && IsEnabled()) - { - myRobot.ArcadeDrive(stick); // drive with arcade style (use right stick) - Wait(0.005); // wait for a motor update time - } - } - - /** - * Runs during test mode - */ - void Test() - { - } -}; - -START_ROBOT_CLASS(Robot) diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/WPILibCPPPlugin.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/WPILibCPPPlugin.java deleted file mode 100644 index 1022c37584..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/WPILibCPPPlugin.java +++ /dev/null @@ -1,92 +0,0 @@ -package edu.wpi.first.wpilib.plugins.cpp; - -import java.io.File; -import java.util.Properties; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.Status; -import org.eclipse.ui.IStartup; -import org.eclipse.ui.plugin.AbstractUIPlugin; -import org.osgi.framework.BundleContext; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; -import edu.wpi.first.wpilib.plugins.core.ant.AntPropertiesParser; -import edu.wpi.first.wpilib.plugins.cpp.installer.CPPInstaller; -import edu.wpi.first.wpilib.plugins.cpp.preferences.PreferenceConstants; - -/** - * The activator class controls the plug-in life cycle - */ -public class WPILibCPPPlugin extends AbstractUIPlugin implements IStartup { - - // The plug-in ID - public static final String PLUGIN_ID = "WPILib_CPP_Robot_Development"; //$NON-NLS-1$ - - // The shared instance - private static WPILibCPPPlugin plugin; - - /** - * The constructor - */ - public WPILibCPPPlugin() { - } - - /* - * (non-Javadoc) - * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) - */ - public void start(BundleContext context) throws Exception { - super.start(context); - plugin = this; - } - - /* - * (non-Javadoc) - * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) - */ - public void stop(BundleContext context) throws Exception { - plugin = null; - super.stop(context); - } - - /** - * Returns the shared instance - * - * @return the shared instance - */ - public static WPILibCPPPlugin getDefault() { - return plugin; - } - - public String getCurrentVersion() { - try { - Properties props = new AntPropertiesParser(WPILibCPPPlugin.class.getResourceAsStream("/resources/configuration.properties")).getProperties(); - if (props.getProperty("version").startsWith("$")) { - return "DEVELOPMENT"; - } else { - return props.getProperty("version"); - } - } catch (CoreException e) { - return "DEVELOPMENT"; - } - } - - public String getCPPDir() { - return WPILibCore.getDefault().getWPILibBaseDir() - + File.separator + "cpp" + File.separator + "current"; - } - - @Override - public void earlyStartup() { - new CPPInstaller(getCurrentVersion()).installIfNecessary(); - } - - - public static void logInfo(String msg) { - getDefault().getLog().log(new Status(Status.INFO, PLUGIN_ID, Status.OK, msg, null)); - } - - public static void logError(String msg, Exception e) { - getDefault().getLog().log(new Status(Status.ERROR, PLUGIN_ID, Status.OK, msg, e)); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/installer/CPPInstaller.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/installer/CPPInstaller.java deleted file mode 100644 index d4c487681a..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/installer/CPPInstaller.java +++ /dev/null @@ -1,62 +0,0 @@ -package edu.wpi.first.wpilib.plugins.cpp.installer; - -import java.io.InputStream; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.variables.IStringVariableManager; -import org.eclipse.core.variables.IValueVariable; -import org.eclipse.core.variables.VariablesPlugin; - -import edu.wpi.first.wpilib.plugins.core.installer.AbstractInstaller; -import edu.wpi.first.wpilib.plugins.cpp.WPILibCPPPlugin; -import edu.wpi.first.wpilib.plugins.cpp.preferences.PreferenceConstants; - -/** - * Installs the given version of WPILib into the correct location. Where the - * install directory is usually ~/wpilib/cpp/version. - * - * @author alex - */ -public class CPPInstaller extends AbstractInstaller { - - public CPPInstaller(String version) { - super(version, - WPILibCPPPlugin.getDefault().getPreferenceStore().getString(PreferenceConstants.LIBRARY_INSTALLED), WPILibCPPPlugin.getDefault().getCPPDir()); - } - @Override - protected void updateInstalledVersion(String version) { - WPILibCPPPlugin.getDefault().getPreferenceStore().setValue(PreferenceConstants.LIBRARY_INSTALLED, - version); - - IStringVariableManager vm = VariablesPlugin.getDefault().getStringVariableManager(); - try - { - if (System.getProperty("os.name").startsWith("Windows")) - { - IValueVariable vv = vm.getValueVariable("HOME"); - if (vv == null) - vm.addVariables(new IValueVariable[]{vm.newValueVariable("HOME", "user.home directory", false,System.getProperty("user.home"))}); - else - { - if (!System.getProperty("user.home").equals(vm.performStringSubstitution("${HOME}"))) - vv.setValue(System.getProperty("user.home")); - } - } - } catch (CoreException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - throw new RuntimeException(e); - } - } - - @Override - protected InputStream getInstallResourceStream() { - return CPPInstaller.class.getResourceAsStream("/resources/cpp.zip"); - } - - @Override - protected String getFeatureName() - { - return "cpp"; - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/launching/DeployLaunchShortcut.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/launching/DeployLaunchShortcut.java deleted file mode 100644 index 5f0dab4af8..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/launching/DeployLaunchShortcut.java +++ /dev/null @@ -1,225 +0,0 @@ -package edu.wpi.first.wpilib.plugins.cpp.launching; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.io.File; - -import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants; -import org.eclipse.cdt.debug.core.executables.Executable; -import org.eclipse.cdt.debug.core.executables.ExecutablesManager; -import org.eclipse.cdt.debug.mi.core.IMILaunchConfigurationConstants; -import org.eclipse.cdt.launch.remote.IRemoteConnectionConfigurationConstants; -import org.eclipse.core.internal.resources.Resource; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IncrementalProjectBuilder; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IMarker; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunchConfigurationType; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; -import org.eclipse.debug.core.ILaunchManager; -import org.eclipse.debug.ui.DebugUITools; -import org.eclipse.debug.ui.ILaunchShortcut; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IFileEditorInput; -import org.eclipse.ui.PlatformUI; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; -import edu.wpi.first.wpilib.plugins.cpp.WPILibCPPPlugin; -import edu.wpi.first.wpilib.plugins.core.launching.AntLauncher; - -/** - * Launch shortcut base functionality, common for deploying to the robot. - * Retrieves the project the operation is being called on, and runs the correct - * ant targets based on polymorphically determined data values - * - * @author Ryan O'Meara - * @author Alex Henning - */ -@SuppressWarnings("restriction") -public class DeployLaunchShortcut implements ILaunchShortcut -{ - // Class constants - used to delineate types for launch shortcuts - public static final String DEPLOY_TYPE = "edu.wpi.first.wpilib.plugins.core.deploy"; - - /** - * Returns the launch type of the shortcut that was used, one of the - * constants defined in BaseLaunchShortcut - * - * @return Launch shortcut type - */ - public String getLaunchType() - { - return DEPLOY_TYPE; - } - - @Override - public void launch(ISelection selection, String mode) - { - // Extract resource from selection - StructuredSelection sel = (StructuredSelection) selection; - IProject activeProject = null; - if (sel.getFirstElement() instanceof IProject) { - activeProject = (IProject) sel.getFirstElement(); - } else { - WPILibCPPPlugin.logError("Selection isn't a project: "+sel.toString(), null); - return; - } - - // Run config using project found in extracted resource, with indicated - // mode - runConfig(activeProject, mode, PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell()); - } - - @Override - public void launch(IEditorPart editor, String mode) - { - // Extract resource from editor - if (editor != null) { - IFileEditorInput input = (IFileEditorInput) editor.getEditorInput(); - IFile file = input.getFile(); - IProject activeProject = file.getProject(); - - // If editor existed, run config using extracted resource in - // indicated mode - runConfig(activeProject, mode, editor.getSite().getWorkbenchWindow().getShell()); - } else { - WPILibCPPPlugin.logError("Editor was null.", null); - } - - } - - /** - * - * @param activeProj - * The project that the script will be run on/from - * @param mode - * The mode it will be run in (ILaunchManager.RUN_MODE or - * ILaunchManager.DEBUG_MODE) - */ - public void runConfig(IProject activeProj, String mode, Shell shell) { - - // Checks to see if there are any build errors remaining. - boolean buildSucceeded = true; - // Unfortunately, build() does not return whether or not the - // build succeded, so we instead must check the markers for - // errors and hope that we don't accidentally catch any - // false-positives. - try { - activeProj.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, null); - } - catch (CoreException e) { - buildSucceeded = false; - WPILibCPPPlugin.logError("Build failed.", e); - } - - try { - IMarker[] problems = activeProj.findMarkers(IMarker.PROBLEM, true, IResource.DEPTH_INFINITE); - for (int i = 0; i < problems.length; i++) { - if (problems[i].getAttribute(IMarker.SEVERITY, IMarker.SEVERITY_INFO) - == IMarker.SEVERITY_ERROR - && problems[i].getType() == "org.eclipse.cdt.core.problem") { - buildSucceeded = false; - break; - } - } - } - catch (CoreException e) { - buildSucceeded = false; - WPILibCPPPlugin.logError("Failed to check whether the build worked.", e); - } - - if (!buildSucceeded) { - boolean cont = MessageDialog.openQuestion(shell, "Build Failed", - "The build failed; Are you sure that you want to continue the deploy?"); - if (!cont) return; - } - - // Check to ensure that there really is a binary file to upload; this is - // only really relevant if the build fails, but we check anyways. - Collection exes = - ExecutablesManager.getExecutablesManager().getExecutablesForProject(activeProj); - if (!(exes.size() > 1 - || new File(activeProj.getLocation().toOSString() + File.separator - + "Debug" + File.separator + "FRCUserProgram").isFile())) { - MessageDialog.openWarning(shell, "Bad Executable", - "No executable binary was found to upload to the robot."); - return; - } - - if(mode.equals(ILaunchManager.RUN_MODE)) { - // Regular deploys are done with an ant script for now, for both - // C++ and Java. - WPILibCPPPlugin.logInfo("Running ant file: " + activeProj.getLocation().toOSString() + File.separator + "build.xml"); - WPILibCPPPlugin.logInfo("Targets: deploy, Mode: " + mode); - AntLauncher.runAntFile(new File (activeProj.getLocation().toOSString() + File.separator + "build.xml"), "deploy", null, mode); - } else { - // Debug deploys are done with the Eclipse Remote System Explorer, - // which lets it work with Eclipse's C++ debugger. - - // Kill running program before using RSE as RSE can't - WPILibCPPPlugin.logInfo("Running ant file: " + activeProj.getLocation().toOSString() + File.separator + "build.xml"); - WPILibCPPPlugin.logInfo("Targets: kill-program, Mode: " + mode); - AntLauncher.runAntFile(new File (activeProj.getLocation().toOSString() + File.separator + "build.xml"), "kill-program", null, mode); - - // TODO: figure out UI issues. that's why this is undocumented - ILaunchConfigurationWorkingCopy config; - try { - config = getRemoteDebugConfig(activeProj); - DebugUITools.launch(config.doSave(), mode); - } catch (CoreException e) { - WPILibCPPPlugin.logError("Debug attach failed.", e); - } - - try { - activeProj.refreshLocal(Resource.DEPTH_INFINITE, null); - } catch (Exception e) {} - } - } - - private ILaunchConfigurationWorkingCopy getRemoteDebugConfig(IProject activeProj) throws CoreException - { - ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager(); - ILaunchConfigurationType type = manager.getLaunchConfigurationType(ICDTLaunchConfigurationConstants.ID_LAUNCH_C_REMOTE_APP); - int teamNumber = WPILibCore.getDefault().getTeamNumber(activeProj); - String remote_connection = RSEUtils.getTarget(teamNumber).getName(); - - ILaunchConfigurationWorkingCopy config = type.newInstance(null, activeProj.getName()); - config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_COREFILE_PATH, ""); - config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ENABLE_REGISTER_BOOKKEEPING, false); - config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ENABLE_VARIABLE_BOOKKEEPING, false); - config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ID, "org.eclipse.rse.remotecdt.RemoteGDBDebugger"); - config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_REGISTER_GROUPS, ""); - config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, "remote"); - config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN, false); - config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_USE_TERMINAL, true); - config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME, activeProj.getName()); - Collection exes = ExecutablesManager.getExecutablesManager().getExecutablesForProject(activeProj); - config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROGRAM_NAME, - exes.size() > 0 ? exes.toArray(new Executable[0])[0].getPath().makeRelativeTo(activeProj.getLocation()).toString(): - "Debug/FRCUserProgram"); - - config.setAttribute("org.eclipse.cdt.dsf.gdb.DEBUG_NAME", "arm-frc-linux-gnueabi-gdb"); - config.setAttribute(IRemoteConnectionConfigurationConstants.ATTR_REMOTE_PATH, "/home/lvuser/FRCUserProgram"); - config.setAttribute(IRemoteConnectionConfigurationConstants.ATTR_REMOTE_CONNECTION, remote_connection); - config.setAttribute(IRemoteConnectionConfigurationConstants.ATTR_SKIP_DOWNLOAD_TO_TARGET, false); - config.setAttribute(IRemoteConnectionConfigurationConstants.ATTR_GDBSERVER_PORT, "2345"); - config.setAttribute(IRemoteConnectionConfigurationConstants.ATTR_GDBSERVER_COMMAND, "gdbserver"); - - List solibs = new ArrayList<>(); - solibs.add(WPILibCPPPlugin.getDefault().getCPPDir() + "/lib"); - config.setAttribute(IMILaunchConfigurationConstants.ATTR_DEBUGGER_SOLIB_PATH, solibs); - config.setAttribute(IMILaunchConfigurationConstants.ATTR_DEBUGGER_AUTO_SOLIB, true); - config.setAttribute(IMILaunchConfigurationConstants.ATTR_DEBUGGER_STOP_ON_SOLIB_EVENTS, false); - return config; - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/launching/RSEUtils.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/launching/RSEUtils.java deleted file mode 100644 index df68dfaeaf..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/launching/RSEUtils.java +++ /dev/null @@ -1,56 +0,0 @@ -package edu.wpi.first.wpilib.plugins.cpp.launching; - -import java.util.Arrays; - -import org.eclipse.rse.core.IRSESystemType; -import org.eclipse.rse.core.PasswordPersistenceManager; -import org.eclipse.rse.core.RSECorePlugin; -import org.eclipse.rse.core.model.IHost; -import org.eclipse.rse.core.model.ISystemProfile; -import org.eclipse.rse.core.model.ISystemRegistry; -import org.eclipse.rse.core.model.SystemSignonInformation; - -import edu.wpi.first.wpilib.plugins.cpp.WPILibCPPPlugin; - -public class RSEUtils { - - public static IHost getTarget(int teamNumber) { - // The ip address based on the team number - //String hostName = "10."+(teamNumber/100)+"."+(teamNumber%100)+".2"; - //String connectionName = hostName; //"Team "+teamNumber; - String hostName = "roboRIO-" + teamNumber + "-FRC.local"; - String connectionName = hostName; - - // get the singleton RSE registry - try { - RSECorePlugin.waitForInitCompletion(); - } catch (InterruptedException e) { - WPILibCPPPlugin.logError("Error initializing RSE", e); - } - ISystemRegistry registry = RSECorePlugin.getDefault().getSystemRegistry(); - - // get the default profile, used to store connections - WPILibCPPPlugin.logInfo("Profiles: "+Arrays.toString(registry.getActiveSystemProfiles())); - ISystemProfile profile = registry.getActiveSystemProfiles()[0]; - - // see if a host object already exists for "build.eclipse.org" - IHost host = registry.getHost(profile, connectionName); - if (host == null) { - // if there's no host then we will create it - try { - // create the host object as an SSH Only connection - IRSESystemType systemType = - RSECorePlugin.getTheCoreRegistry().getSystemTypeById("org.eclipse.rse.systemtype.ssh"); - host = registry.createHost(profile.getName(), systemType, connectionName, hostName, - "The remote target for debugging the robot for team "+teamNumber+"."); - host.setDefaultUserId("lvuser"); - SystemSignonInformation info = new SystemSignonInformation(hostName, "lvuser", - "", systemType); - PasswordPersistenceManager.getInstance().add(info, true, false); - } catch (Exception e) { - WPILibCPPPlugin.logError("Error connecting to RoboRIO.", e); - } - } - return host; - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/launching/SimulateLaunchShortcut.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/launching/SimulateLaunchShortcut.java deleted file mode 100644 index 334c2ed621..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/launching/SimulateLaunchShortcut.java +++ /dev/null @@ -1,145 +0,0 @@ -package edu.wpi.first.wpilib.plugins.cpp.launching; - -import java.io.File; -import java.lang.reflect.Method; -import java.util.Vector; - -import org.eclipse.core.internal.resources.Resource; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.debug.core.ILaunch; -import org.eclipse.debug.core.ILaunchManager; -import org.eclipse.debug.ui.IDebugUIConstants; -import org.eclipse.debug.ui.ILaunchShortcut; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IFileEditorInput; -import org.eclipse.ui.PlatformUI; - -import edu.wpi.first.wpilib.plugins.core.launching.AntLauncher; -import edu.wpi.first.wpilib.plugins.core.launching.SimulationNotification; -import edu.wpi.first.wpilib.plugins.cpp.WPILibCPPPlugin; - -/** - * Launch shortcut base functionality, common for deploying to the robot. - * Retrieves the project the operation is being called on, and runs the correct - * ant targets based on polymorphically determined data values - * - * @author Ryan O'Meara - * @author Alex Henning - */ -@SuppressWarnings("restriction") -public class SimulateLaunchShortcut implements ILaunchShortcut { - //Class constants - used to delineate types for launch shortcuts - public static final String DEPLOY_TYPE = "edu.wpi.first.wpilib.plugins.core.deploy"; - private static final String ANT_SERVER_THREAD_NAME = "Ant Build Server Connection"; - - private static ILaunch lastDeploy = null; - - /** - * Returns the launch type of the shortcut that was used, one of the constants - * defined in BaseLaunchShortcut - * @return Launch shortcut type - */ - public String getLaunchType() {return DEPLOY_TYPE;} - - @Override - public void launch(ISelection selection, String mode) { - //Extract resource from selection - StructuredSelection sel = (StructuredSelection)selection; - IProject activeProject = null; - if (sel.getFirstElement() instanceof IProject) { - activeProject = (IProject) sel.getFirstElement(); - } else { - return; - } - - //Run config using project found in extracted resource, with indicated mode - runConfig(activeProject, mode); - } - - @Override - public void launch(IEditorPart editor, String mode) { - //Extract resource from editor - if(editor != null){ - IFileEditorInput input = (IFileEditorInput)editor.getEditorInput(); - IFile file = input.getFile(); - IProject activeProject = file.getProject(); - - //If editor existed, run config using extracted resource in indicated mode - runConfig(activeProject, mode); - }else{ - System.err.println("editor was null"); - } - - } - - /** - * Runs the ant script using the correct target for the indicated mode (deploy to cRIO or just compile) - * @param activeProj The project that the script will be run on/from - * @param mode The mode it will be run in (ILaunchManager.RUN_MODE or ILaunchManager.DEBUG_MODE) - */ - public void runConfig(IProject activeProj, String mode) { - if (!SimulationNotification.supportsSimulation()) { - SimulationNotification.showUnsupported(); - return; - } - - String targets = "simulate"; - - if(mode.equals(ILaunchManager.RUN_MODE)){ - if(getLaunchType().equals(DEPLOY_TYPE)){ - targets = "simulate"; - } - } else if ((mode.equals(ILaunchManager.DEBUG_MODE))&&(getLaunchType().equals(DEPLOY_TYPE))) { - targets = "debug-simulate"; - try{ - PlatformUI.getWorkbench().showPerspective(IDebugUIConstants.ID_DEBUG_PERSPECTIVE, - PlatformUI.getWorkbench().getActiveWorkbenchWindow()); - - }catch(Exception e){} - } - - if((lastDeploy != null)&&(!lastDeploy.isTerminated())){ - WPILibCPPPlugin.logInfo("Last deploy running"); - // Find the server connection thread and kill it - Vector threadGroups = new Vector(); - ThreadGroup root = Thread.currentThread().getThreadGroup().getParent(); - while (root.getParent() != null) {root = root.getParent();} - threadGroups.add(root); - ThreadGroup threadGroup = threadGroups.remove(0); - int numThreads = threadGroup.activeCount(); - Thread[] threads = new Thread[numThreads*100]; - numThreads = threadGroup.enumerate(threads, true); - - for(Thread current: threads){ - if(current != null){ - if(current.getName().equals(ANT_SERVER_THREAD_NAME)){ - try { - // Manually end thread and then try terminating launch - Method stopMethod = current.getClass().getMethod("stop"); - stopMethod.invoke(current); - lastDeploy.terminate(); - break; - } catch(Exception e){ - WPILibCPPPlugin.logError("Error killing ant thread.", e); - } - } - } - } - - WPILibCPPPlugin.logInfo("Waiting"); - try{wait(1000);}catch(Exception e){} - } - - WPILibCPPPlugin.logInfo("Running ant file: " + activeProj.getLocation().toOSString() + File.separator + "build.xml"); - WPILibCPPPlugin.logInfo("Targets: " + targets + ", Mode: " + mode); - lastDeploy = AntLauncher.runAntFile(new File (activeProj.getLocation().toOSString() + File.separator + "build.xml"), targets, null, mode); - - try { - activeProj.refreshLocal(Resource.DEPTH_INFINITE, null); - } catch (Exception e) {} - } -} - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/preferences/PreferenceConstants.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/preferences/PreferenceConstants.java deleted file mode 100644 index 3598e5e32d..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/preferences/PreferenceConstants.java +++ /dev/null @@ -1,8 +0,0 @@ -package edu.wpi.first.wpilib.plugins.cpp.preferences; - -/** - * Constant definitions for plug-in preferences - */ -public class PreferenceConstants { - public static final String LIBRARY_INSTALLED = "libraryVersion_current"; -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/preferences/PreferenceInitializer.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/preferences/PreferenceInitializer.java deleted file mode 100644 index b4241e92a2..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/preferences/PreferenceInitializer.java +++ /dev/null @@ -1,25 +0,0 @@ -package edu.wpi.first.wpilib.plugins.cpp.preferences; - -import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer; -import org.eclipse.jface.preference.IPreferenceStore; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; -import edu.wpi.first.wpilib.plugins.cpp.WPILibCPPPlugin; - -/** - * Class used to initialize default preference values. - */ -public class PreferenceInitializer extends AbstractPreferenceInitializer { - - /* - * (non-Javadoc) - * - * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences() - */ - public void initializeDefaultPreferences() { - IPreferenceStore store = WPILibCPPPlugin.getDefault().getPreferenceStore(); - if (!store.contains(PreferenceConstants.LIBRARY_INSTALLED)) - store.setValue(PreferenceConstants.LIBRARY_INSTALLED, - "none"); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/examples/ExampleCPPProject.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/examples/ExampleCPPProject.java deleted file mode 100644 index 734e6fd5b5..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/examples/ExampleCPPProject.java +++ /dev/null @@ -1,54 +0,0 @@ -package edu.wpi.first.wpilib.plugins.cpp.wizards.examples; - -import java.util.List; -import java.util.Map; - -import edu.wpi.first.wpilib.plugins.core.wizards.IExampleProject; -import edu.wpi.first.wpilib.plugins.cpp.wizards.newproject.CPPProjectType; - -public class ExampleCPPProject extends CPPProjectType implements IExampleProject { - private String name, description, world; - private List tags; - private List directories; - private List files; - - public ExampleCPPProject(String name, String description, List tags, - String world, List directories, List files) { - this.name = name; - this.description = description; - this.tags = tags; - this.world = world; - this.directories = directories; - this.files = files; - } - - public String getName() { - return name; - } - - public String getContent() { - return "

"+name+"

"+description+"

"; - } - - public List getTags() { - return tags; - } - - public String getWorld() { - return world; - } - - @Override - public String[] getFolders(String packageName) { - return directories.toArray(new String[0]); - } - - @Override - public Map getFiles(String packageName) { - Map files = super.getFiles(packageName); - for (ExportFile file : this.files) { - files.put(file.destination, file.source); - } - return files; - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/examples/ExampleCPPWizard.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/examples/ExampleCPPWizard.java deleted file mode 100644 index 845091d059..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/examples/ExampleCPPWizard.java +++ /dev/null @@ -1,66 +0,0 @@ -package edu.wpi.first.wpilib.plugins.cpp.wizards.examples; - -import java.net.URL; -import java.util.List; -import java.util.Properties; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jface.wizard.IWizardPage; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; -import edu.wpi.first.wpilib.plugins.core.wizards.ExampleWizard; -import edu.wpi.first.wpilib.plugins.core.wizards.IExampleProject; -import edu.wpi.first.wpilib.plugins.core.wizards.IExampleProject.ExportFile; -import edu.wpi.first.wpilib.plugins.core.wizards.INewProjectInfo; -import edu.wpi.first.wpilib.plugins.core.wizards.NewProjectMainPage; -import edu.wpi.first.wpilib.plugins.core.wizards.ProjectCreationUtils; -import edu.wpi.first.wpilib.plugins.cpp.WPILibCPPPlugin; -import edu.wpi.first.wpilib.plugins.cpp.wizards.newproject.WPIRobotCPPProjectCreator; - -public class ExampleCPPWizard extends ExampleWizard { - private NewProjectMainPage detailsPage; - - /** - * Constructor for SampleNewWizard. - */ - public ExampleCPPWizard() { - super(); - setNeedsProgressMonitor(true); - } - - @Override - protected void doFinish(IExampleProject ex, String teamNumber) throws CoreException { - Properties props = WPILibCore.getDefault().getProjectProperties(null); - props.setProperty("team-number", teamNumber); - WPILibCore.getDefault().saveGlobalProperties(props); - - final String projectName = detailsPage.getProjectName(); - ProjectCreationUtils.createProject(new WPIRobotCPPProjectCreator(projectName, ex, detailsPage.getWorld())); - } - - @Override - protected IWizardPage getDetailsPage(INewProjectInfo info) { - if (detailsPage != null) return detailsPage; - detailsPage = new NewProjectMainPage(selection, getTeamNumberPage(), info); - detailsPage.setTitle("Create Example Robot C++ Project"); - detailsPage.setDescription("This wizard creates a new example project based on your selection."); - detailsPage.setShowPackage(false); - return detailsPage; - } - - @Override - public IExampleProject makeExampleProject(String name, String description, - List tags, String world, List folders, List files) { - return new ExampleCPPProject(name, description, tags, world, folders, files); - } - - @Override - public URL getResourceURL() { - return WPILibCPPPlugin.getDefault().getBundle().getEntry("/resources/templates/examples"); - } - - @Override - public String getXMLFile() { - return "examples.xml"; - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/CommandGroupWizard.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/CommandGroupWizard.java deleted file mode 100644 index b7b9e70c9f..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/CommandGroupWizard.java +++ /dev/null @@ -1,9 +0,0 @@ -package edu.wpi.first.wpilib.plugins.cpp.wizards.file_template; - -public class CommandGroupWizard extends FileTemplateWizard { - - public CommandGroupWizard() { - super("CommandGroup", "command-based/CommandGroup", "Commands"); - } - -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/CommandWizard.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/CommandWizard.java deleted file mode 100644 index 649020a267..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/CommandWizard.java +++ /dev/null @@ -1,9 +0,0 @@ -package edu.wpi.first.wpilib.plugins.cpp.wizards.file_template; - -public class CommandWizard extends FileTemplateWizard { - - public CommandWizard() { - super("Command", "command-based/Command", "Commands"); - } - -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/FileTemplateWizard.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/FileTemplateWizard.java deleted file mode 100644 index 3094b1aede..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/FileTemplateWizard.java +++ /dev/null @@ -1,134 +0,0 @@ -package edu.wpi.first.wpilib.plugins.cpp.wizards.file_template; - -import java.io.File; -import java.lang.reflect.InvocationTargetException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.HashMap; -import java.util.Map; - -import org.eclipse.cdt.core.model.ICContainer; -import org.eclipse.cdt.core.model.ISourceRoot; -import org.eclipse.cdt.core.model.ITranslationUnit; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.ui.INewWizard; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchWizard; - -import edu.wpi.first.wpilib.plugins.core.wizards.ProjectCreationUtils; -import edu.wpi.first.wpilib.plugins.cpp.WPILibCPPPlugin; - -public class FileTemplateWizard extends Wizard implements INewWizard { - private String type, source, ending; - private FileTemplateWizardMainPage page; - private ISelection selection; - private IProject project; - - /** - * Constructor for SampleNewWizard. - */ - public FileTemplateWizard(String type, String source, String ending) { - super(); - setNeedsProgressMonitor(true); - this.type = type; - this.source = source; - this.ending = ending; - } - - /** - * Adding the page to the wizard. - */ - - public void addPages() { - page = new FileTemplateWizardMainPage(type, project, ending, selection); - addPage(page); - } - - /** - * This method is called when 'Finish' button is pressed in - * the wizard. We will create an operation and run it - * using wizard as execution context. - */ - public boolean performFinish() { - final IProject project = page.getProject(); - final String className = page.getClassName(); - final String folderName = page.getFolder(); - WPILibCPPPlugin.logInfo("Class: "+className+" Folder: "+folderName); - IRunnableWithProgress op = new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InvocationTargetException { - try { - doFinish(project, className, folderName, monitor); - } catch (CoreException e) { - throw new InvocationTargetException(e); - } finally { - monitor.done(); - } - } - }; - try { - getContainer().run(true, false, op); - } catch (InterruptedException e) { - return false; - } catch (InvocationTargetException e) { - Throwable realException = e.getTargetException(); - MessageDialog.openError(getShell(), "Error", realException.getMessage()); - return false; - } - return true; - } - - /** - * The worker method. It will find the container, create the - * file if missing or just replace its contents, and open - * the editor on the newly created file. - */ - private void doFinish(IProject project, String className, String folderName, IProgressMonitor monitor) throws CoreException { - Map map = new HashMap(); - map.put("$classname", className); - map.put("$folder", folderName); - String filepath = folderName+File.separator+className; - try { - // Create Header - URL url = new URL(WPILibCPPPlugin.getDefault().getBundle().getEntry("/resources/templates/"), source+".h"); - ProjectCreationUtils.createTemplateFile(project, filepath+".h", url, map); - - // Create CPP file - url = new URL(WPILibCPPPlugin.getDefault().getBundle().getEntry("/resources/templates/"), source+".cpp"); - ProjectCreationUtils.createTemplateFile(project, filepath+".cpp", url, map); - } catch (MalformedURLException e) { - WPILibCPPPlugin.logError("Malforemd URL: "+WPILibCPPPlugin.getDefault().getBundle().getEntry("/resources/templates/")+"/"+source+".h", e); - } - } - - /** - * We will accept the selection in the workbench to see if - * we can initialize from it. - * @see IWorkbenchWizard#init(IWorkbench, IStructuredSelection) - */ - public void init(IWorkbench workbench, IStructuredSelection selection) { - this.selection = selection; - WPILibCPPPlugin.logInfo(selection.toString()); - Object element = ((StructuredSelection) selection).getFirstElement(); - WPILibCPPPlugin.logInfo(element.getClass().toString()); - if (element instanceof IResource) { - project = ((IResource) element).getProject(); - } else if (element instanceof ISourceRoot) { - project = ((ISourceRoot) element).getCProject().getProject(); - } else if (element instanceof ITranslationUnit) { - project = ((ITranslationUnit) element).getCProject().getProject(); - } else if (element instanceof ISourceRoot) { - project = ((ISourceRoot) element).getCProject().getProject(); - } else if (element instanceof ICContainer) { - project = ((ICContainer) element).getCProject().getProject(); - } else WPILibCPPPlugin.logInfo("Element not instance of IResource: "+element.getClass()); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/FileTemplateWizardMainPage.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/FileTemplateWizardMainPage.java deleted file mode 100644 index b9a71a5e0d..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/FileTemplateWizardMainPage.java +++ /dev/null @@ -1,180 +0,0 @@ -package edu.wpi.first.wpilib.plugins.cpp.wizards.file_template; - -import java.io.File; - -import org.eclipse.cdt.core.CCProjectNature; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jface.dialogs.IDialogPage; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Text; - -import edu.wpi.first.wpilib.plugins.core.nature.FRCProjectNature; -import edu.wpi.first.wpilib.plugins.core.wizards.IProjectFilter; -import edu.wpi.first.wpilib.plugins.core.wizards.ProjectComboField; -import edu.wpi.first.wpilib.plugins.cpp.WPILibCPPPlugin; - -/** - * The "New" wizard page allows setting the container for the new file as well - * as the file name. The page will only accept file name without the extension - * OR with the extension that matches the expected one (mpe). - */ - -public class FileTemplateWizardMainPage extends WizardPage { - private IProject project; - private String ending; - private ProjectComboField projectsCombo; - private Text classNameText; - private Text folderText; - - /** - * Constructor for SampleNewWizardPage. - * - * @param pageName - */ - public FileTemplateWizardMainPage(String type, IProject project, String ending, ISelection selection) { - super("wizardPage"); - setTitle("Create New "+type); - setDescription("This wizard creates a new "+type.toLowerCase()+" from a template."); - this.project = project; - this.ending = ending; - } - - /** - * @see IDialogPage#createControl(Composite) - */ - public void createControl(Composite parent) { - Composite container = new Composite(parent, SWT.NULL); - GridLayout layout = new GridLayout(); - container.setLayout(layout); - layout.numColumns = 2; - layout.verticalSpacing = 9; - - Label label = new Label(container, SWT.NULL); - label.setText("Pro&ject:"); - - projectsCombo = new ProjectComboField(container, SWT.BORDER | SWT.SINGLE, - new IProjectFilter() { - @Override public boolean accept(IProject project) { - try { - return project.hasNature(FRCProjectNature.FRC_PROJECT_NATURE) - && project.hasNature(CCProjectNature.C_NATURE_ID); - } catch (CoreException e) { - WPILibCPPPlugin.logError("Error checking for FRC C++ project.", e); - return false; - } - } - }); - GridData gd = new GridData(GridData.FILL_HORIZONTAL); - projectsCombo.setLayoutData(gd); - projectsCombo.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - dialogChanged(); - } - }); - - label = new Label(container, SWT.NULL); - label.setText("Class &Name:"); - - classNameText = new Text(container, SWT.BORDER | SWT.SINGLE); - gd = new GridData(GridData.FILL_HORIZONTAL); - classNameText.setLayoutData(gd); - classNameText.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - dialogChanged(); - } - }); - - label = new Label(container, SWT.NULL); - label.setText("&Folder:"); - - folderText = new Text(container, SWT.BORDER | SWT.SINGLE); - gd = new GridData(GridData.FILL_HORIZONTAL); - folderText.setLayoutData(gd); - folderText.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - dialogChanged(); - } - }); - - initialize(); - dialogChanged(); - setControl(container); - } - - /** - * Tests if the current workbench selection is a suitable container to use. - */ - - private void initialize() { - projectsCombo.setProject(project); - folderText.setText(getDefaultFolder()); - } - - /** - * Ensures that both text fields are set. - */ - - private void dialogChanged() { - String className = getClassName(); - String folder = getFolder(); - - // Update the default package if necessary - if (project == null || !project.equals(projectsCombo.getProject())) { - String oldDefault = getDefaultFolder(); - project = projectsCombo.getProject(); - if (folder.equals(oldDefault)) { - folderText.setText(getDefaultFolder()); - } - } - - if (!projectsCombo.isValid()) { - updateStatus("Must select a project."); - return; - } - - if (className.length() == 0) { - updateStatus("Class name must be specified"); - return; - } - if (!className.matches("^([a-zA-Z_]{1}[a-zA-Z0-9_]*)$")) { - updateStatus("Must be a valid java class name"); - return; - } - if (folder.length() == 0) { - updateStatus("Package must be specified"); - return; - } - updateStatus(null); - } - - private void updateStatus(String message) { - setErrorMessage(message); - setPageComplete(message == null); - } - - public IProject getProject() { - return projectsCombo.getProject(); - } - - public String getClassName() { - return classNameText.getText(); - } - - public String getFolder() { - return folderText.getText(); - } - - public String getDefaultFolder() { - WPILibCPPPlugin.logInfo("Project: "+project); - return "src"+File.separator+ending; - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/PIDSubsystemWizard.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/PIDSubsystemWizard.java deleted file mode 100644 index 63e615831b..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/PIDSubsystemWizard.java +++ /dev/null @@ -1,9 +0,0 @@ -package edu.wpi.first.wpilib.plugins.cpp.wizards.file_template; - -public class PIDSubsystemWizard extends FileTemplateWizard { - - public PIDSubsystemWizard() { - super("PIDSubsystem", "command-based/PIDSubsystem", "Subsystems"); - } - -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/SubsystemWizard.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/SubsystemWizard.java deleted file mode 100644 index 2c60310329..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/SubsystemWizard.java +++ /dev/null @@ -1,9 +0,0 @@ -package edu.wpi.first.wpilib.plugins.cpp.wizards.file_template; - -public class SubsystemWizard extends FileTemplateWizard { - - public SubsystemWizard() { - super("Subsystem", "command-based/Subsystem", "Subsystems"); - } - -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/TriggerWizard.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/TriggerWizard.java deleted file mode 100644 index 73d0d04407..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/file_template/TriggerWizard.java +++ /dev/null @@ -1,9 +0,0 @@ -package edu.wpi.first.wpilib.plugins.cpp.wizards.file_template; - -public class TriggerWizard extends FileTemplateWizard { - - public TriggerWizard() { - super("Trigger", "command-based/Trigger", "Triggers"); - } - -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/newproject/CPPProjectType.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/newproject/CPPProjectType.java deleted file mode 100644 index 3c316d7dea..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/newproject/CPPProjectType.java +++ /dev/null @@ -1,75 +0,0 @@ -package edu.wpi.first.wpilib.plugins.cpp.wizards.newproject; - -import java.net.URL; -import java.util.HashMap; -import java.util.Map; - -import edu.wpi.first.wpilib.plugins.core.wizards.ProjectType; -import edu.wpi.first.wpilib.plugins.cpp.WPILibCPPPlugin; - -public class CPPProjectType implements ProjectType { - static ProjectType ITERATIVE = new CPPProjectType() { - @Override public Map getFiles(String packageName) { - Map files = super.getFiles(packageName); - files.put("src/Robot.cpp", "iterative/Robot.cpp"); - return files; - } - }; - static ProjectType COMMAND_BASED = new CPPProjectType() { - @Override public String[] getFolders(String packageName) { - String[] paths = {"src", - "src/Commands", - "src/Subsystems", - "src/Triggers"}; - return paths; - } - @Override public Map getFiles(String packageName) { - Map files = super.getFiles(packageName); - files.put("src/Robot.cpp", "command-based/Robot.cpp"); - files.put("src/OI.h", "command-based/OI.h"); - files.put("src/OI.cpp", "command-based/OI.cpp"); - files.put("src/RobotMap.h", "command-based/RobotMap.h"); - files.put("src/CommandBase.cpp", "command-based/CommandBase.cpp"); - files.put("src/CommandBase.h", "command-based/CommandBase.h"); - files.put("src/Subsystems/ExampleSubsystem.h", "command-based/ExampleSubsystem.h"); - files.put("src/Subsystems/ExampleSubsystem.cpp", "command-based/ExampleSubsystem.cpp"); - files.put("src/Commands/ExampleCommand.h", "command-based/ExampleCommand.h"); - files.put("src/Commands/ExampleCommand.cpp", "command-based/ExampleCommand.cpp"); - return files; - } - }; - static ProjectType SAMPLE = new CPPProjectType() { - @Override public Map getFiles(String packageName) { - Map files = super.getFiles(packageName); - files.put("src/Robot.cpp", "sample/Robot.cpp"); - return files; - } - }; - @SuppressWarnings("serial") - static Map TYPES = new HashMap() {{ - put(ProjectType.ITERATIVE, ITERATIVE); - put(ProjectType.COMMAND_BASED, COMMAND_BASED); - put(ProjectType.SAMPLE, SAMPLE); - }}; - - @Override - public String[] getFolders(String packageName) { - String[] paths = {"src"}; - return paths; - } - - @Override - public Map getFiles(String packageName) { - HashMap files = new HashMap(); - files.put("build.xml", "build.xml"); - files.put("build.properties", "build.properties"); - files.put(".cproject", ".cproject"); - return files; - } - - - @Override - public URL getBaseURL() { - return WPILibCPPPlugin.getDefault().getBundle().getEntry("/resources/templates/"); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/newproject/NewCPPWizard.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/newproject/NewCPPWizard.java deleted file mode 100644 index 329149c301..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/newproject/NewCPPWizard.java +++ /dev/null @@ -1,123 +0,0 @@ -package edu.wpi.first.wpilib.plugins.cpp.wizards.newproject; - -import java.lang.reflect.InvocationTargetException; -import java.util.Properties; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.ui.INewWizard; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchWizard; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; -import edu.wpi.first.wpilib.plugins.core.wizards.INewProjectInfo; -import edu.wpi.first.wpilib.plugins.core.wizards.NewProjectMainPage; -import edu.wpi.first.wpilib.plugins.core.wizards.ProjectCreationUtils; -import edu.wpi.first.wpilib.plugins.core.wizards.ProjectType; -import edu.wpi.first.wpilib.plugins.core.wizards.TeamNumberPage; -import edu.wpi.first.wpilib.plugins.cpp.WPILibCPPPlugin; - -/** - * - * Example Docs: - * This is a sample new wizard. Its role is to create a new file - * resource in the provided container. If the container resource - * (a folder or a project) is selected in the workspace - * when the wizard is opened, it will accept it as the target - * container. The wizard creates one file with the extension - * "mpe". If a sample multi-page editor (also available - * as a template) is registered for the same extension, it will - * be able to open it. - */ - -public class NewCPPWizard extends Wizard implements INewWizard { - private NewProjectMainPage page; - private ISelection selection; - private TeamNumberPage teamNumberPage; - - /** - * Constructor for SampleNewWizard. - */ - public NewCPPWizard() { - super(); - setNeedsProgressMonitor(true); - } - - /** - * Adding the page to the wizard. - */ - - public void addPages() { - if (TeamNumberPage.needsTeamNumberPage()) { - teamNumberPage = new TeamNumberPage(selection); - addPage(teamNumberPage); - } - page = new NewProjectMainPage(selection, teamNumberPage, INewProjectInfo.Null); - page.setTitle("Create New Robot C++ Project"); - page.setDescription("This wizard creates a new Robot C++ Project configured to use WPILib for programming FRC robots."); - page.setShowPackage(false); - page.setProjectTypes(CPPProjectType.TYPES); - addPage(page); - } - - /** - * This method is called when 'Finish' button is pressed in - * the wizard. We will create an operation and run it - * using wizard as execution context. - */ - public boolean performFinish() { - final String projectName = page.getProjectName(); - final String teamNumber = TeamNumberPage.getTeamNumberFromPage(teamNumberPage); - final ProjectType projectType = page.getProjectType(); - final String worldName = page.getWorld(); - WPILibCPPPlugin.logInfo("Project: "+projectName+" Project Type: "+projectType); - IRunnableWithProgress op = new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InvocationTargetException { - try { - doFinish(projectName, teamNumber, projectType, worldName, monitor); - } catch (CoreException e) { - throw new InvocationTargetException(e); - } finally { - monitor.done(); - } - } - }; - try { - getContainer().run(true, false, op); - } catch (InterruptedException e) { - return false; - } catch (InvocationTargetException e) { - Throwable realException = e.getTargetException(); - MessageDialog.openError(getShell(), "Error", realException.getMessage()); - return false; - } - return true; - } - - /** - * The worker method. It will find the container, create the - * file if missing or just replace its contents, and open - * the editor on the newly created file. - */ - - private void doFinish(String projectName, String teamNumber, ProjectType projectType, String worldName, IProgressMonitor monitor) throws CoreException { - Properties props = WPILibCore.getDefault().getProjectProperties(null); - props.setProperty("team-number", teamNumber); - WPILibCore.getDefault().saveGlobalProperties(props); - ProjectCreationUtils.createProject(new WPIRobotCPPProjectCreator(projectName, projectType, worldName)); - } - - /** - * We will accept the selection in the workbench to see if - * we can initialize from it. - * @see IWorkbenchWizard#init(IWorkbench, IStructuredSelection) - */ - public void init(IWorkbench workbench, IStructuredSelection selection) { - this.selection = selection; - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/newproject/WPIRobotCPPProjectCreator.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/newproject/WPIRobotCPPProjectCreator.java deleted file mode 100644 index ba49801764..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/wizards/newproject/WPIRobotCPPProjectCreator.java +++ /dev/null @@ -1,90 +0,0 @@ -package edu.wpi.first.wpilib.plugins.cpp.wizards.newproject; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.eclipse.cdt.build.core.scannerconfig.ScannerConfigNature; -import org.eclipse.cdt.core.CCProjectNature; -import org.eclipse.cdt.core.CCorePlugin; -import org.eclipse.cdt.core.index.IIndexManager; -import org.eclipse.cdt.core.model.ICElement; -import org.eclipse.cdt.managedbuilder.core.ManagedCProjectNature; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; - -import edu.wpi.first.wpilib.plugins.core.nature.FRCProjectNature; -import edu.wpi.first.wpilib.plugins.core.wizards.IProjectCreator; -import edu.wpi.first.wpilib.plugins.core.wizards.ProjectType; -import edu.wpi.first.wpilib.plugins.cpp.WPILibCPPPlugin; - -public class WPIRobotCPPProjectCreator implements IProjectCreator { - String projectName; - ProjectType projectType; - private String worldName; - - public WPIRobotCPPProjectCreator(String projectName, ProjectType projectType, String worldName) { - this.projectName = projectName; - this.projectType = projectType; - this.worldName = worldName; - } - - @Override - public String getName() { - return projectName; - } - - @Override - public String getPackageName() { - return ""; // C++ doesn't have the equivalent of a project name - } - - @Override - public Map getValues() { - Map vals = new HashMap(); - vals.put("$project", projectName); - vals.put("$cpp-location", WPILibCPPPlugin.getDefault().getCPPDir()); - vals.put("$world", worldName); - return vals; - } - - @Override - public List getNatures() { - List natures = new ArrayList<>(); - natures.add(CCProjectNature.C_NATURE_ID); - natures.add(CCProjectNature.CC_NATURE_ID); - natures.add(ManagedCProjectNature.MNG_NATURE_ID); - natures.add(ScannerConfigNature.NATURE_ID); - natures.add(FRCProjectNature.FRC_PROJECT_NATURE); - return natures; - } - - @Override - public ProjectType getProjectType() { - return projectType; - } - - @Override - public void initialize(IProject project) { - try { - CCorePlugin.getDefault().createCDTProject(project.getDescription(), project, null); - project.open(null); - } catch (CoreException e) { - WPILibCPPPlugin.logError("Error intializing FRC C++ project.", e); - } - } - - @Override - public void finalize(IProject project) throws CoreException { - updateVariables(project); - - // Freshen the index because otherwise it's red and angry - ICElement[] projects = {CCorePlugin.getDefault().getCoreModel().create(project)}; - CCorePlugin.getIndexManager().update(projects, IIndexManager.UPDATE_ALL | IIndexManager.UPDATE_EXTERNAL_FILES_FOR_PROJECT); - } - - private void updateVariables(IProject project) throws CoreException { - // TODO: implement C++ equivalent - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/ant-classloadertask.jar b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/ant-classloadertask.jar deleted file mode 100644 index d2f58d9f1d7a8fc909dac60aeb8244fe86e1c77b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70515 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%0AN%WpBBS9Z+2U6)+ZS`3kix{2`n)k*y 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 - - - - - - - - - - - - - - - - - - - - - - - Trying Target: ${target} - - - - roboRIO found via mDNS - - - - roboRIO not found via mDNS, falling back to static USB - - - - - roboRIO found via static USB - - - - - - - roboRIO not found via USB, falling back to static address of ${target} - - - - - - roboRIO found via Ethernet static - - - - - - - - - - [athena-deploy] Copying code over. - - - - - - - - [athena-deploy] Starting program. - - - - - - - - - - - - - - - - - - - - [simulate] You may now run Gazebo - - - [simulate] You can now run your DriverStation! - - - - [simulate] Running Code. - - - - - - - - - - - - - - - - - - - - roboRIO image version validated - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/jsch-0.1.50.jar b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/jsch-0.1.50.jar deleted file mode 100644 index 85c044f216987b60403b85d64f9617c53573753f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 249282 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≫gUR)%P|pT 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 diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/robotCommand b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/robotCommand deleted file mode 100644 index 06757bd83d..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/robotCommand +++ /dev/null @@ -1 +0,0 @@ -/usr/local/frc/bin/netconsole-host /home/lvuser/FRCUserProgram diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java.feature/build.properties b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java.feature/build.properties deleted file mode 100644 index 64f93a9f0b..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java.feature/build.properties +++ /dev/null @@ -1 +0,0 @@ -bin.includes = feature.xml diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java.feature/feature.xml b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java.feature/feature.xml deleted file mode 100644 index 632a1820a7..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java.feature/feature.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - FRC Robot Java Program Development Environment. - - - - * Copyright (c) 2015 FIRST and WPI -* All rights reserved. - - - - * Copyright (c) 2015 FIRST and WPI -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or -* without modification, are permitted provided that the following -* conditions are met: -* Redistributions of source code must retain the above -* copyright notice, this list of conditions and the following -* disclaimer. Redistributions in binary form must reproduce the -* above copyright notice, this list of conditions and the following -* disclaimer in the documentation and/or other materials provided -* with the distribution. Neither the name of the FIRST nor the -* names of its contributors may be used to endorse or promote -* products derived from this software without specific prior -* written permission. -* -* THIS SOFTWARE IS PROVIDED BY FIRST AND CONTRIBUTORS``AS IS'' -* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT -* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -* EVENT SHALL FIRST OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - - - - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java.feature/pom.xml b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java.feature/pom.xml deleted file mode 100644 index 5d259ac0dd..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java.feature/pom.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - 4.0.0 - edu.wpi.first.wpilib.plugins.java.feature - eclipse-feature - - - edu.wpi.first.wpilib.plugins - edu.wpi.first.wpilib.plugins - 0.1.0.qualifier - .. - - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/.project b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/.project deleted file mode 100644 index 02b92fbf34..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/.project +++ /dev/null @@ -1,34 +0,0 @@ - - - edu.wpi.first.wpilib.plugins.java - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - org.eclipse.m2e.core.maven2Builder - - - - - - org.eclipse.m2e.core.maven2Nature - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/META-INF/MANIFEST.MF b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/META-INF/MANIFEST.MF deleted file mode 100644 index c0e4927e75..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/META-INF/MANIFEST.MF +++ /dev/null @@ -1,23 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: WPILib_Java_Robot_Development -Bundle-SymbolicName: edu.wpi.first.wpilib.plugins.java;singleton:=true -Bundle-Version: 0.1.0.qualifier -Bundle-Activator: edu.wpi.first.wpilib.plugins.java.WPILibJavaPlugin -Bundle-Vendor: Worcester Polytechnic Institute -Require-Bundle: org.eclipse.ui, - org.eclipse.core.runtime, - org.eclipse.core.resources;bundle-version="3.8.1", - edu.wpi.first.wpilib.plugins.core;bundle-version="0.1.0", - org.eclipse.jdt;bundle-version="3.8.0", - org.eclipse.jdt.core;bundle-version="3.8.2", - org.eclipse.jdt.debug;bundle-version="3.7.101", - org.eclipse.jdt.debug.ui;bundle-version="3.6.100", - org.eclipse.jdt.launching;bundle-version="3.6.100", - org.eclipse.jdt.ui;bundle-version="3.8.1", - org.eclipse.debug.core;bundle-version="3.7.100", - org.eclipse.debug.ui;bundle-version="3.8.1", - org.eclipse.ui.editors;bundle-version="3.8.0", - org.eclipse.ui.ide;bundle-version="3.8.1" -Bundle-RequiredExecutionEnvironment: JavaSE-1.7 -Bundle-ActivationPolicy: lazy diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/build.properties b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/build.properties deleted file mode 100644 index b91237bcf1..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/build.properties +++ /dev/null @@ -1,8 +0,0 @@ -source.. = src/main/java/ -output.. = bin/ -bin.includes = META-INF/,\ - .,\ - plugin.xml,\ - resources/ -src.includes = src/,\ - resources/ diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/plugin.xml b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/plugin.xml deleted file mode 100644 index 8e70003133..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/plugin.xml +++ /dev/null @@ -1,245 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/pom.xml b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/pom.xml deleted file mode 100644 index e58b6a88fc..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/pom.xml +++ /dev/null @@ -1,381 +0,0 @@ - - - 4.0.0 - edu.wpi.first.wpilib.plugins.java - eclipse-plugin - - - edu.wpi.first.wpilib.plugins - edu.wpi.first.wpilib.plugins - 0.1.0.qualifier - .. - - - - DEVELOPMENT - ${project.build.directory}/java-zip - - - - - - . - - resources/configuration.properties - - true - - - - - maven-resources-plugin - 2.6 - - - copy-ant-resources-to-java-zip - generate-sources - - copy-resources - - - ${java-zip} - - - src/main/resources/java-zip - - - - - - - - org.apache.maven.plugins - maven-dependency-plugin - 2.8 - - - - - fetch-jar-zip-dependencies - compile - - copy - - - - - - edu.wpi.first.wpilib.networktables.java - NetworkTables - 3.0.0-SNAPSHOT - arm - jar - NetworkTables.jar - ${java-zip}/lib - - - edu.wpi.first.wpilibj - wpilibJavaFinal - 0.1.0-SNAPSHOT - jar - WPILib.jar - ${java-zip}/lib - - - - edu.wpi.first.wpilib.networktables.java - NetworkTables - 3.0.0-SNAPSHOT - sources - ${java-zip}/lib - NetworkTables-sources.jar - - - edu.wpi.first.wpilibj - wpilibJavaFinal - 0.1.0-SNAPSHOT - sources - ${java-zip}/lib - WPILib-sources.jar - - - - - edu.wpi.first.wpilibj - wpilibJavaFinal - 0.1.0-SNAPSHOT - javadoc - ${java-zip}/javadoc-jar - - - - false - true - - - - - - fetch-sim-jar-zip-dependencies - compile - - copy - - - ${java-zip}/sim/lib - false - true - - - - org.gazebosim - JavaGazebo - 0.1.0-SNAPSHOT - - - edu.wpi.first.wpilibj - wpilibJavaSim - 0.1.0-SNAPSHOT - jar - - - edu.wpi.first.wpilib.networktables.java - NetworkTables - 3.0.0-SNAPSHOT - arm - - - - net.java.jinput - jinput - 2.0.5 - - - net.java.jinput - jinput-platform - 2.0.5 - natives-linux - jar - - - net.java.jutils - jutils - 1.0.0 - - - - com.google.protobuf - protobuf-java - 2.5.0 - - - - edu.wpi.first.wpilibj.simulation - SimDS - 0.1.0-SNAPSHOT - SimDS.jar - ${java-zip}/sim/tools - - - - - - - - org.apache.maven.plugins - maven-antrun-plugin - 1.7 - - - - - set-version-info - - run - - process-sources - - - - - - - - - - - true - - - - - - unzip-javadocs - compile - - run - - - - - - - - - - - - - - - - unzip-jinput-libs - compile - - run - - - - - - - - - - - generate-jar-zip - compile - - run - - - - - - - - - - - - - - - org.eclipse.m2e - lifecycle-mapping - 1.0.0 - - - - - - - org.apache.maven.plugins - - - maven-dependency-plugin - - [2.8,) - - copy - - - - - - - - - - - - - - - - - - - edu.wpi.first.wpilib.networktables.java - NetworkTables - 3.0.0-SNAPSHOT - arm - jar - - - edu.wpi.first.wpilibj - wpilibJavaFinal - 0.1.0-SNAPSHOT - jar - - - edu.wpi.first.wpilibj - wpilibJavaSim - 0.1.0-SNAPSHOT - jar - - - edu.wpi.first.wpilibj - wpilibJavaFinal - 0.1.0-SNAPSHOT - sources - - - - - - - edu.wpi.first.wpilib.networktables.java - NetworkTables - 3.0.0-SNAPSHOT - sources - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/configuration.properties b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/configuration.properties deleted file mode 100644 index cbfaca2ede..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/configuration.properties +++ /dev/null @@ -1,2 +0,0 @@ -timestamp=${timestamp} -version=${version} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/icons/Button.png b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/icons/Button.png deleted file mode 100644 index f6584ec8230f7e694a19aafd50e265c7d7b2f1dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 790 zcmV+x1L^#UP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ;oJmAMRCwB?lgn=maRA3Zzj^G=>~0@ByX}^3>BFk_LPUv!)JaGjq>(6pfnGdL z;@~2Y2yrD&4kWmVdW8rH5kb7)ua?!V-6`9h?RIwT?EG9vD&gdN{2acg&qqip`Jaiu zuob{YU>&gV7b^oVfKlKgVE^qP25j%M;)mC^x3O+;4ZX_;(6kWF#3x>kedNlU4_tlt zgek}A2VTuRXfQ${XQ;oIA*+$~sRqpM9%M&1giHcEkN5l$j#uMUP372~dyMA`tAV=$ zP=pZmP0N>YG}%atm_=wBej;QIv9yRNFk_@gzW#2Kd#mO1&~e!i*8DcVHuKW1P&OJ{lkV?AB?(kGqG(f0WZ;dmppmS*xzO07*qoM6N<$g5uCwxc~qF diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/icons/Command.png b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/icons/Command.png deleted file mode 100644 index c3d9c2d991a047859c110040f70b34863a840bdf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3287 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 - - - - - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/build.properties b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/build.properties deleted file mode 100644 index 2a2ec518f6..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/build.properties +++ /dev/null @@ -1,4 +0,0 @@ -# Project specific information -package=$package -robot.class=${package}.Robot -simulation.world.file=$world \ No newline at end of file diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/build.xml b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/build.xml deleted file mode 100644 index 2182d373a5..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/build.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/Command.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/Command.java deleted file mode 100644 index ff7510756d..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/Command.java +++ /dev/null @@ -1,36 +0,0 @@ -package $package; - -import edu.wpi.first.wpilibj.command.Command; - -/** - * - */ -public class $classname extends Command { - - public $classname() { - // Use requires() here to declare subsystem dependencies - // eg. requires(chassis); - } - - // Called just before this Command runs the first time - protected void initialize() { - } - - // Called repeatedly when this Command is scheduled to run - protected void execute() { - } - - // Make this return true when this Command no longer needs to run execute() - protected boolean isFinished() { - return false; - } - - // Called once after isFinished returns true - protected void end() { - } - - // Called when another command which requires one or more of the same - // subsystems is scheduled to run - protected void interrupted() { - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/CommandGroup.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/CommandGroup.java deleted file mode 100644 index 29e66e86ea..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/CommandGroup.java +++ /dev/null @@ -1,28 +0,0 @@ -package $package; - -import edu.wpi.first.wpilibj.command.CommandGroup; - -/** - * - */ -public class $classname extends CommandGroup { - - public $classname() { - // Add Commands here: - // e.g. addSequential(new Command1()); - // addSequential(new Command2()); - // these will run in order. - - // To run multiple commands at the same time, - // use addParallel() - // e.g. addParallel(new Command1()); - // addSequential(new Command2()); - // Command1 and Command2 will run in parallel. - - // A command group will require all of the subsystems that each member - // would require. - // e.g. if Command1 requires chassis, and Command2 requires arm, - // a CommandGroup containing them would require both the chassis and the - // arm. - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/ExampleCommand.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/ExampleCommand.java deleted file mode 100644 index 7d04aa17c1..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/ExampleCommand.java +++ /dev/null @@ -1,39 +0,0 @@ - -package $package.commands; - -import edu.wpi.first.wpilibj.command.Command; - -import $package.Robot; - -/** - * - */ -public class ExampleCommand extends Command { - - public ExampleCommand() { - // Use requires() here to declare subsystem dependencies - requires(Robot.exampleSubsystem); - } - - // Called just before this Command runs the first time - protected void initialize() { - } - - // Called repeatedly when this Command is scheduled to run - protected void execute() { - } - - // Make this return true when this Command no longer needs to run execute() - protected boolean isFinished() { - return false; - } - - // Called once after isFinished returns true - protected void end() { - } - - // Called when another command which requires one or more of the same - // subsystems is scheduled to run - protected void interrupted() { - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/ExampleSubsystem.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/ExampleSubsystem.java deleted file mode 100644 index 6baed1bd73..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/ExampleSubsystem.java +++ /dev/null @@ -1,19 +0,0 @@ - -package $package.subsystems; - -import edu.wpi.first.wpilibj.command.Subsystem; - -/** - * - */ -public class ExampleSubsystem extends Subsystem { - - // Put methods for controlling this subsystem - // here. Call these from Commands. - - public void initDefaultCommand() { - // Set the default command for a subsystem here. - //setDefaultCommand(new MySpecialCommand()); - } -} - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/OI.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/OI.java deleted file mode 100644 index 16bfa8ebf4..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/OI.java +++ /dev/null @@ -1,38 +0,0 @@ -package $package; - -import edu.wpi.first.wpilibj.buttons.Button; -import $package.commands.ExampleCommand; - -/** - * 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()); -} - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/PIDSubsystem.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/PIDSubsystem.java deleted file mode 100644 index 1f468fce70..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/PIDSubsystem.java +++ /dev/null @@ -1,34 +0,0 @@ -package $package; - -import edu.wpi.first.wpilibj.command.PIDSubsystem; - -/** - * - */ -public class $classname extends PIDSubsystem { - - // Initialize your subsystem here - public $classname() { - // Use these to get going: - // setSetpoint() - Sets where the PID controller should move the system - // to - // enable() - Enables the PID controller. - } - - public void initDefaultCommand() { - // Set the default command for a subsystem here. - //setDefaultCommand(new MySpecialCommand()); - } - - protected double returnPIDInput() { - // Return your input value for the PID loop - // e.g. a sensor, like a potentiometer: - // yourPot.getAverageVoltage() / kYourMaxVoltage; - return 0.0; - } - - protected void usePIDOutput(double output) { - // Use output to drive your system, like a motor - // e.g. yourMotor.set(output); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/Robot.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/Robot.java deleted file mode 100644 index 6073cf4d5d..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/Robot.java +++ /dev/null @@ -1,81 +0,0 @@ - -package $package; - -import edu.wpi.first.wpilibj.IterativeRobot; -import edu.wpi.first.wpilibj.command.Command; -import edu.wpi.first.wpilibj.command.Scheduler; -import edu.wpi.first.wpilibj.livewindow.LiveWindow; -import $package.commands.ExampleCommand; -import $package.subsystems.ExampleSubsystem; - -/** - * The VM is configured to automatically run this class, and to call the - * functions corresponding to each mode, as described in the IterativeRobot - * documentation. If you change the name of this class or the package after - * creating this project, you must also update the manifest file in the resource - * directory. - */ -public class Robot extends IterativeRobot { - - public static final ExampleSubsystem exampleSubsystem = new ExampleSubsystem(); - public static OI oi; - - Command autonomousCommand; - - /** - * This function is run when the robot is first started up and should be - * used for any initialization code. - */ - public void robotInit() { - oi = new OI(); - // instantiate the command used for the autonomous period - autonomousCommand = new ExampleCommand(); - } - - /** - * This function is called once each time the robot enters Disabled mode. - * You can use it to reset any subsystem information you want to clear when - * the robot is disabled. - */ - public void disabledInit(){ - - } - - public void disabledPeriodic() { - Scheduler.getInstance().run(); - } - - public void autonomousInit() { - // schedule the autonomous command (example) - if (autonomousCommand != null) autonomousCommand.start(); - } - - /** - * This function is called periodically during autonomous - */ - public void autonomousPeriodic() { - Scheduler.getInstance().run(); - } - - public void teleopInit() { - // This makes sure that the autonomous stops running when - // teleop starts running. If you want the autonomous to - // continue until interrupted by another command, remove - // this line or comment it out. - if (autonomousCommand != null) autonomousCommand.cancel(); - } - - /** - * This function is called periodically during operator control - */ - public void teleopPeriodic() { - Scheduler.getInstance().run(); - } - - /** - * This function is called periodically during test mode - */ - public void testPeriodic() { - LiveWindow.run(); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/RobotMap.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/RobotMap.java deleted file mode 100644 index 2a08cd36bc..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/RobotMap.java +++ /dev/null @@ -1,18 +0,0 @@ -package $package; -/** - * 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; -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/Subsystem.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/Subsystem.java deleted file mode 100644 index ae97a4ba8f..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/Subsystem.java +++ /dev/null @@ -1,18 +0,0 @@ -package $package; - -import edu.wpi.first.wpilibj.command.Subsystem; - -/** - * - */ -public class $classname extends Subsystem { - - // Put methods for controlling this subsystem - // here. Call these from Commands. - - public void initDefaultCommand() { - // Set the default command for a subsystem here. - //setDefaultCommand(new MySpecialCommand()); - } -} - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/Trigger.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/Trigger.java deleted file mode 100644 index d399b201fb..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/command-based/Trigger.java +++ /dev/null @@ -1,13 +0,0 @@ -package $package; - -import edu.wpi.first.wpilibj.buttons.Trigger; - -/** - * - */ -public class $classname extends Trigger { - - public boolean get() { - return false; - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/2015Vision/Color_src/Robot.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/2015Vision/Color_src/Robot.java deleted file mode 100644 index 62a7f22b89..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/2015Vision/Color_src/Robot.java +++ /dev/null @@ -1,240 +0,0 @@ -package $package; - -import java.lang.Math; -import java.util.Comparator; -import java.util.Vector; - -import com.ni.vision.NIVision; -import com.ni.vision.NIVision.Image; -import com.ni.vision.NIVision.ImageType; - -import edu.wpi.first.wpilibj.CameraServer; -import edu.wpi.first.wpilibj.SampleRobot; -import edu.wpi.first.wpilibj.Timer; -import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; - -/** - * Example of finding yellow totes based on color. - * This example utilizes an image file, which you need to copy to the roboRIO - * To use a camera you will have to integrate the appropriate camera details with this example. - * To use a USB camera instead, see the SimpelVision and AdvancedVision examples for details - * on using the USB camera. To use an Axis Camera, see the AxisCamera example for details on - * using an Axis Camera. - * - * Sample omages can be found here: http://wp.wpi.edu/wpilib/2015/01/16/sample-images-for-vision-projects/ - */ -public class Robot extends SampleRobot { - //A structure to hold measurements of a particle - public class ParticleReport implements Comparator, Comparable{ - double PercentAreaToImageArea; - double Area; - double ConvexHullArea; - double BoundingRectLeft; - double BoundingRectTop; - double BoundingRectRight; - double BoundingRectBottom; - - public int compareTo(ParticleReport r) - { - return (int)(r.Area - this.Area); - } - - public int compare(ParticleReport r1, ParticleReport r2) - { - return (int)(r1.Area - r2.Area); - } - }; - - //Structure to represent the scores for the various tests used for target identification - public class Scores { - double Trapezoid; - double LongAspect; - double ShortAspect; - double AreaToConvexHullArea; - }; - - //Images - Image frame; - Image binaryFrame; - int imaqError; - - //Constants - NIVision.Range TOTE_HUE_RANGE = new NIVision.Range(24, 49); //Default hue range for yellow tote - NIVision.Range TOTE_SAT_RANGE = new NIVision.Range(67, 255); //Default saturation range for yellow tote - NIVision.Range TOTE_VAL_RANGE = new NIVision.Range(49, 255); //Default value range for yellow tote - double AREA_MINIMUM = 0.5; //Default Area minimum for particle as a percentage of total image area - double LONG_RATIO = 2.22; //Tote long side = 26.9 / Tote height = 12.1 = 2.22 - double SHORT_RATIO = 1.4; //Tote short side = 16.9 / Tote height = 12.1 = 1.4 - double SCORE_MIN = 75.0; //Minimum score to be considered a tote - double VIEW_ANGLE = 49.4; //View angle fo camera, set to Axis m1011 by default, 64 for m1013, 51.7 for 206, 52 for HD3000 square, 60 for HD3000 640x480 - NIVision.ParticleFilterCriteria2 criteria[] = new NIVision.ParticleFilterCriteria2[1]; - NIVision.ParticleFilterOptions2 filterOptions = new NIVision.ParticleFilterOptions2(0,0,1,1); - Scores scores = new Scores(); - - public void robotInit() { - // create images - frame = NIVision.imaqCreateImage(ImageType.IMAGE_RGB, 0); - binaryFrame = NIVision.imaqCreateImage(ImageType.IMAGE_U8, 0); - criteria[0] = new NIVision.ParticleFilterCriteria2(NIVision.MeasurementType.MT_AREA_BY_IMAGE_AREA, AREA_MINIMUM, 100.0, 0, 0); - - //Put default values to SmartDashboard so fields will appear - SmartDashboard.putNumber("Tote hue min", TOTE_HUE_RANGE.minValue); - SmartDashboard.putNumber("Tote hue max", TOTE_HUE_RANGE.maxValue); - SmartDashboard.putNumber("Tote sat min", TOTE_SAT_RANGE.minValue); - SmartDashboard.putNumber("Tote sat max", TOTE_SAT_RANGE.maxValue); - SmartDashboard.putNumber("Tote val min", TOTE_VAL_RANGE.minValue); - SmartDashboard.putNumber("Tote val max", TOTE_VAL_RANGE.maxValue); - SmartDashboard.putNumber("Area min %", AREA_MINIMUM); - } - - public void autonomous() { - while (isAutonomous() && isEnabled()) - { - //read file in from disk. For this example to run you need to copy image20.jpg from the SampleImages folder to the - //directory shown below using FTP or SFTP: http://wpilib.screenstepslive.com/s/4485/m/24166/l/282299-roborio-ftp - NIVision.imaqReadFile(frame, "/home/lvuser/SampleImages/image20.jpg"); - - //Update threshold values from SmartDashboard. For performance reasons it is recommended to remove this after calibration is finished. - TOTE_HUE_RANGE.minValue = (int)SmartDashboard.getNumber("Tote hue min", TOTE_HUE_RANGE.minValue); - TOTE_HUE_RANGE.maxValue = (int)SmartDashboard.getNumber("Tote hue max", TOTE_HUE_RANGE.maxValue); - TOTE_SAT_RANGE.minValue = (int)SmartDashboard.getNumber("Tote sat min", TOTE_SAT_RANGE.minValue); - TOTE_SAT_RANGE.maxValue = (int)SmartDashboard.getNumber("Tote sat max", TOTE_SAT_RANGE.maxValue); - TOTE_VAL_RANGE.minValue = (int)SmartDashboard.getNumber("Tote val min", TOTE_VAL_RANGE.minValue); - TOTE_VAL_RANGE.maxValue = (int)SmartDashboard.getNumber("Tote val max", TOTE_VAL_RANGE.maxValue); - - //Threshold the image looking for yellow (tote color) - NIVision.imaqColorThreshold(binaryFrame, frame, 255, NIVision.ColorMode.HSV, TOTE_HUE_RANGE, TOTE_SAT_RANGE, TOTE_VAL_RANGE); - - //Send particle count to dashboard - int numParticles = NIVision.imaqCountParticles(binaryFrame, 1); - SmartDashboard.putNumber("Masked particles", numParticles); - - //Send masked image to dashboard to assist in tweaking mask. - CameraServer.getInstance().setImage(binaryFrame); - - //filter out small particles - float areaMin = (float)SmartDashboard.getNumber("Area min %", AREA_MINIMUM); - criteria[0].lower = areaMin; - imaqError = NIVision.imaqParticleFilter4(binaryFrame, binaryFrame, criteria, filterOptions, null); - - //Send particle count after filtering to dashboard - numParticles = NIVision.imaqCountParticles(binaryFrame, 1); - SmartDashboard.putNumber("Filtered particles", numParticles); - - if(numParticles > 0) - { - //Measure particles and sort by particle size - Vector particles = new Vector(); - for(int particleIndex = 0; particleIndex < numParticles; particleIndex++) - { - ParticleReport par = new ParticleReport(); - par.PercentAreaToImageArea = NIVision.imaqMeasureParticle(binaryFrame, particleIndex, 0, NIVision.MeasurementType.MT_AREA_BY_IMAGE_AREA); - par.Area = NIVision.imaqMeasureParticle(binaryFrame, particleIndex, 0, NIVision.MeasurementType.MT_AREA); - par.ConvexHullArea = NIVision.imaqMeasureParticle(binaryFrame, particleIndex, 0, NIVision.MeasurementType.MT_CONVEX_HULL_AREA); - par.BoundingRectTop = NIVision.imaqMeasureParticle(binaryFrame, particleIndex, 0, NIVision.MeasurementType.MT_BOUNDING_RECT_TOP); - par.BoundingRectLeft = NIVision.imaqMeasureParticle(binaryFrame, particleIndex, 0, NIVision.MeasurementType.MT_BOUNDING_RECT_LEFT); - par.BoundingRectBottom = NIVision.imaqMeasureParticle(binaryFrame, particleIndex, 0, NIVision.MeasurementType.MT_BOUNDING_RECT_BOTTOM); - par.BoundingRectRight = NIVision.imaqMeasureParticle(binaryFrame, particleIndex, 0, NIVision.MeasurementType.MT_BOUNDING_RECT_RIGHT); - particles.add(par); - } - particles.sort(null); - - //This example only scores the largest particle. Extending to score all particles and choosing the desired one is left as an exercise - //for the reader. Note that the long and short side scores expect a single tote and will not work for a stack of 2 or more totes. - //Modification of the code to accommodate 2 or more stacked totes is left as an exercise for the reader. - scores.Trapezoid = TrapezoidScore(particles.elementAt(0)); - SmartDashboard.putNumber("Trapezoid", scores.Trapezoid); - scores.LongAspect = LongSideScore(particles.elementAt(0)); - SmartDashboard.putNumber("Long Aspect", scores.LongAspect); - scores.ShortAspect = ShortSideScore(particles.elementAt(0)); - SmartDashboard.putNumber("Short Aspect", scores.ShortAspect); - scores.AreaToConvexHullArea = ConvexHullAreaScore(particles.elementAt(0)); - SmartDashboard.putNumber("Convex Hull Area", scores.AreaToConvexHullArea); - boolean isTote = scores.Trapezoid > SCORE_MIN && (scores.LongAspect > SCORE_MIN || scores.ShortAspect > SCORE_MIN) && scores.AreaToConvexHullArea > SCORE_MIN; - boolean isLong = scores.LongAspect > scores.ShortAspect; - - //Send distance and tote status to dashboard. The bounding rect, particularly the horizontal center (left - right) may be useful for rotating/driving towards a tote - SmartDashboard.putBoolean("IsTote", isTote); - SmartDashboard.putNumber("Distance", computeDistance(binaryFrame, particles.elementAt(0), isLong)); - } else { - SmartDashboard.putBoolean("IsTote", false); - } - - Timer.delay(0.005); // wait for a motor update time - } - } - - public void operatorControl() { - while(isOperatorControl() && isEnabled()) { - Timer.delay(0.005); // wait for a motor update time - } - } - - //Comparator function for sorting particles. Returns true if particle 1 is larger - static boolean CompareParticleSizes(ParticleReport particle1, ParticleReport particle2) - { - //we want descending sort order - return particle1.PercentAreaToImageArea > particle2.PercentAreaToImageArea; - } - - /** - * Converts a ratio with ideal value of 1 to a score. The resulting function is piecewise - * linear going from (0,0) to (1,100) to (2,0) and is 0 for all inputs outside the range 0-2 - */ - double ratioToScore(double ratio) - { - return (Math.max(0, Math.min(100*(1-Math.abs(1-ratio)), 100))); - } - - /** - * Method to score convex hull area. This scores how "complete" the particle is. Particles with large holes will score worse than a filled in shape - */ - double ConvexHullAreaScore(ParticleReport report) - { - return ratioToScore((report.Area/report.ConvexHullArea)*1.18); - } - - /** - * Method to score if the particle appears to be a trapezoid. Compares the convex hull (filled in) area to the area of the bounding box. - * The expectation is that the convex hull area is about 95.4% of the bounding box area for an ideal tote. - */ - double TrapezoidScore(ParticleReport report) - { - return ratioToScore(report.ConvexHullArea/((report.BoundingRectRight-report.BoundingRectLeft)*(report.BoundingRectBottom-report.BoundingRectTop)*.954)); - } - - /** - * Method to score if the aspect ratio of the particle appears to match the long side of a tote. - */ - double LongSideScore(ParticleReport report) - { - return ratioToScore(((report.BoundingRectRight-report.BoundingRectLeft)/(report.BoundingRectBottom-report.BoundingRectTop))/LONG_RATIO); - } - - /** - * Method to score if the aspect ratio of the particle appears to match the short side of a tote. - */ - double ShortSideScore(ParticleReport report){ - return ratioToScore(((report.BoundingRectRight-report.BoundingRectLeft)/(report.BoundingRectBottom-report.BoundingRectTop))/SHORT_RATIO); - } - - /** - * Computes the estimated distance to a target using the width of the particle in the image. For more information and graphics - * showing the math behind this approach see the Vision Processing section of the ScreenStepsLive documentation. - * - * @param image The image to use for measuring the particle estimated rectangle - * @param report The Particle Analysis Report for the particle - * @param isLong Boolean indicating if the target is believed to be the long side of a tote - * @return The estimated distance to the target in feet. - */ - double computeDistance (Image image, ParticleReport report, boolean isLong) { - double normalizedWidth, targetWidth; - NIVision.GetImageSizeResult size; - - size = NIVision.imaqGetImageSize(image); - normalizedWidth = 2*(report.BoundingRectRight - report.BoundingRectLeft)/size.width; - targetWidth = isLong ? 26.0 : 16.9; - - return targetWidth/(normalizedWidth*12*Math.tan(VIEW_ANGLE*Math.PI/(180*2))); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/2015Vision/Retro_src/Robot.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/2015Vision/Retro_src/Robot.java deleted file mode 100644 index 93633892b2..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/2015Vision/Retro_src/Robot.java +++ /dev/null @@ -1,214 +0,0 @@ -package $package; - -import java.lang.Math; -import java.util.Comparator; -import java.util.Vector; - -import com.ni.vision.NIVision; -import com.ni.vision.NIVision.Image; -import com.ni.vision.NIVision.ImageType; - -import edu.wpi.first.wpilibj.CameraServer; -import edu.wpi.first.wpilibj.SampleRobot; -import edu.wpi.first.wpilibj.Timer; -import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; - -/** - * Example of finding yellow totes based on retroreflective target. - * This example utilizes an image file, which you need to copy to the roboRIO - * To use a camera you will have to integrate the appropriate camera details with this example. - * To use a USB camera instead, see the SimpelVision and AdvancedVision examples for details - * on using the USB camera. To use an Axis Camera, see the AxisCamera example for details on - * using an Axis Camera. - * - * Sample images can found here: http://wp.wpi.edu/wpilib/2015/01/16/sample-images-for-vision-projects/ - */ -public class Robot extends SampleRobot { - //A structure to hold measurements of a particle - public class ParticleReport implements Comparator, Comparable{ - double PercentAreaToImageArea; - double Area; - double BoundingRectLeft; - double BoundingRectTop; - double BoundingRectRight; - double BoundingRectBottom; - - public int compareTo(ParticleReport r) - { - return (int)(r.Area - this.Area); - } - - public int compare(ParticleReport r1, ParticleReport r2) - { - return (int)(r1.Area - r2.Area); - } - }; - - //Structure to represent the scores for the various tests used for target identification - public class Scores { - double Area; - double Aspect; - }; - - //Images - Image frame; - Image binaryFrame; - int imaqError; - - //Constants - NIVision.Range TOTE_HUE_RANGE = new NIVision.Range(101, 64); //Default hue range for yellow tote - NIVision.Range TOTE_SAT_RANGE = new NIVision.Range(88, 255); //Default saturation range for yellow tote - NIVision.Range TOTE_VAL_RANGE = new NIVision.Range(134, 255); //Default value range for yellow tote - double AREA_MINIMUM = 0.5; //Default Area minimum for particle as a percentage of total image area - double LONG_RATIO = 2.22; //Tote long side = 26.9 / Tote height = 12.1 = 2.22 - double SHORT_RATIO = 1.4; //Tote short side = 16.9 / Tote height = 12.1 = 1.4 - double SCORE_MIN = 75.0; //Minimum score to be considered a tote - double VIEW_ANGLE = 49.4; //View angle fo camera, set to Axis m1011 by default, 64 for m1013, 51.7 for 206, 52 for HD3000 square, 60 for HD3000 640x480 - NIVision.ParticleFilterCriteria2 criteria[] = new NIVision.ParticleFilterCriteria2[1]; - NIVision.ParticleFilterOptions2 filterOptions = new NIVision.ParticleFilterOptions2(0,0,1,1); - Scores scores = new Scores(); - - public void robotInit() { - // create images - frame = NIVision.imaqCreateImage(ImageType.IMAGE_RGB, 0); - binaryFrame = NIVision.imaqCreateImage(ImageType.IMAGE_U8, 0); - criteria[0] = new NIVision.ParticleFilterCriteria2(NIVision.MeasurementType.MT_AREA_BY_IMAGE_AREA, AREA_MINIMUM, 100.0, 0, 0); - - //Put default values to SmartDashboard so fields will appear - SmartDashboard.putNumber("Tote hue min", TOTE_HUE_RANGE.minValue); - SmartDashboard.putNumber("Tote hue max", TOTE_HUE_RANGE.maxValue); - SmartDashboard.putNumber("Tote sat min", TOTE_SAT_RANGE.minValue); - SmartDashboard.putNumber("Tote sat max", TOTE_SAT_RANGE.maxValue); - SmartDashboard.putNumber("Tote val min", TOTE_VAL_RANGE.minValue); - SmartDashboard.putNumber("Tote val max", TOTE_VAL_RANGE.maxValue); - SmartDashboard.putNumber("Area min %", AREA_MINIMUM); - } - - public void autonomous() { - while (isAutonomous() && isEnabled()) - { - //read file in from disk. For this example to run you need to copy image.jpg from the SampleImages folder to the - //directory shown below using FTP or SFTP: http://wpilib.screenstepslive.com/s/4485/m/24166/l/282299-roborio-ftp - NIVision.imaqReadFile(frame, "/home/lvuser/SampleImages/image.jpg"); - - //Update threshold values from SmartDashboard. For performance reasons it is recommended to remove this after calibration is finished. - TOTE_HUE_RANGE.minValue = (int)SmartDashboard.getNumber("Tote hue min", TOTE_HUE_RANGE.minValue); - TOTE_HUE_RANGE.maxValue = (int)SmartDashboard.getNumber("Tote hue max", TOTE_HUE_RANGE.maxValue); - TOTE_SAT_RANGE.minValue = (int)SmartDashboard.getNumber("Tote sat min", TOTE_SAT_RANGE.minValue); - TOTE_SAT_RANGE.maxValue = (int)SmartDashboard.getNumber("Tote sat max", TOTE_SAT_RANGE.maxValue); - TOTE_VAL_RANGE.minValue = (int)SmartDashboard.getNumber("Tote val min", TOTE_VAL_RANGE.minValue); - TOTE_VAL_RANGE.maxValue = (int)SmartDashboard.getNumber("Tote val max", TOTE_VAL_RANGE.maxValue); - - //Threshold the image looking for yellow (tote color) - NIVision.imaqColorThreshold(binaryFrame, frame, 255, NIVision.ColorMode.HSV, TOTE_HUE_RANGE, TOTE_SAT_RANGE, TOTE_VAL_RANGE); - - //Send particle count to dashboard - int numParticles = NIVision.imaqCountParticles(binaryFrame, 1); - SmartDashboard.putNumber("Masked particles", numParticles); - - //Send masked image to dashboard to assist in tweaking mask. - CameraServer.getInstance().setImage(binaryFrame); - - //filter out small particles - float areaMin = (float)SmartDashboard.getNumber("Area min %", AREA_MINIMUM); - criteria[0].lower = areaMin; - imaqError = NIVision.imaqParticleFilter4(binaryFrame, binaryFrame, criteria, filterOptions, null); - - //Send particle count after filtering to dashboard - numParticles = NIVision.imaqCountParticles(binaryFrame, 1); - SmartDashboard.putNumber("Filtered particles", numParticles); - - if(numParticles > 0) - { - //Measure particles and sort by particle size - Vector particles = new Vector(); - for(int particleIndex = 0; particleIndex < numParticles; particleIndex++) - { - ParticleReport par = new ParticleReport(); - par.PercentAreaToImageArea = NIVision.imaqMeasureParticle(binaryFrame, particleIndex, 0, NIVision.MeasurementType.MT_AREA_BY_IMAGE_AREA); - par.Area = NIVision.imaqMeasureParticle(binaryFrame, particleIndex, 0, NIVision.MeasurementType.MT_AREA); - par.BoundingRectTop = NIVision.imaqMeasureParticle(binaryFrame, particleIndex, 0, NIVision.MeasurementType.MT_BOUNDING_RECT_TOP); - par.BoundingRectLeft = NIVision.imaqMeasureParticle(binaryFrame, particleIndex, 0, NIVision.MeasurementType.MT_BOUNDING_RECT_LEFT); - par.BoundingRectBottom = NIVision.imaqMeasureParticle(binaryFrame, particleIndex, 0, NIVision.MeasurementType.MT_BOUNDING_RECT_BOTTOM); - par.BoundingRectRight = NIVision.imaqMeasureParticle(binaryFrame, particleIndex, 0, NIVision.MeasurementType.MT_BOUNDING_RECT_RIGHT); - particles.add(par); - } - particles.sort(null); - - //This example only scores the largest particle. Extending to score all particles and choosing the desired one is left as an exercise - //for the reader. Note that this scores and reports information about a single particle (single L shaped target). To get accurate information - //about the location of the tote (not just the distance) you will need to correlate two adjacent targets in order to find the true center of the tote. - scores.Aspect = AspectScore(particles.elementAt(0)); - SmartDashboard.putNumber("Aspect", scores.Aspect); - scores.Area = AreaScore(particles.elementAt(0)); - SmartDashboard.putNumber("Area", scores.Area); - boolean isTote = scores.Aspect > SCORE_MIN && scores.Area > SCORE_MIN; - - //Send distance and tote status to dashboard. The bounding rect, particularly the horizontal center (left - right) may be useful for rotating/driving towards a tote - SmartDashboard.putBoolean("IsTote", isTote); - SmartDashboard.putNumber("Distance", computeDistance(binaryFrame, particles.elementAt(0))); - } else { - SmartDashboard.putBoolean("IsTote", false); - } - - Timer.delay(0.005); // wait for a motor update time - } - } - - public void operatorControl() { - while(isOperatorControl() && isEnabled()) { - Timer.delay(0.005); // wait for a motor update time - } - } - - //Comparator function for sorting particles. Returns true if particle 1 is larger - static boolean CompareParticleSizes(ParticleReport particle1, ParticleReport particle2) - { - //we want descending sort order - return particle1.PercentAreaToImageArea > particle2.PercentAreaToImageArea; - } - - /** - * Converts a ratio with ideal value of 1 to a score. The resulting function is piecewise - * linear going from (0,0) to (1,100) to (2,0) and is 0 for all inputs outside the range 0-2 - */ - double ratioToScore(double ratio) - { - return (Math.max(0, Math.min(100*(1-Math.abs(1-ratio)), 100))); - } - - double AreaScore(ParticleReport report) - { - double boundingArea = (report.BoundingRectBottom - report.BoundingRectTop) * (report.BoundingRectRight - report.BoundingRectLeft); - //Tape is 7" edge so 49" bounding rect. With 2" wide tape it covers 24" of the rect. - return ratioToScore((49/24)*report.Area/boundingArea); - } - - /** - * Method to score if the aspect ratio of the particle appears to match the retro-reflective target. Target is 7"x7" so aspect should be 1 - */ - double AspectScore(ParticleReport report) - { - return ratioToScore(((report.BoundingRectRight-report.BoundingRectLeft)/(report.BoundingRectBottom-report.BoundingRectTop))); - } - - /** - * Computes the estimated distance to a target using the width of the particle in the image. For more information and graphics - * showing the math behind this approach see the Vision Processing section of the ScreenStepsLive documentation. - * - * @param image The image to use for measuring the particle estimated rectangle - * @param report The Particle Analysis Report for the particle - * @param isLong Boolean indicating if the target is believed to be the long side of a tote - * @return The estimated distance to the target in feet. - */ - double computeDistance (Image image, ParticleReport report) { - double normalizedWidth, targetWidth; - NIVision.GetImageSizeResult size; - - size = NIVision.imaqGetImageSize(image); - normalizedWidth = 2*(report.BoundingRectRight - report.BoundingRectLeft)/size.width; - targetWidth = 7; - - return targetWidth/(normalizedWidth*12*Math.tan(VIEW_ANGLE*Math.PI/(180*2))); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/AxisCameraSample/src/org/usfirst/frc/team190/robot/Robot.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/AxisCameraSample/src/org/usfirst/frc/team190/robot/Robot.java deleted file mode 100755 index 72e34ce1fa..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/AxisCameraSample/src/org/usfirst/frc/team190/robot/Robot.java +++ /dev/null @@ -1,55 +0,0 @@ -package $package; - -import com.ni.vision.NIVision; -import com.ni.vision.NIVision.DrawMode; -import com.ni.vision.NIVision.Image; -import com.ni.vision.NIVision.ShapeMode; - -import edu.wpi.first.wpilibj.CameraServer; -import edu.wpi.first.wpilibj.SampleRobot; -import edu.wpi.first.wpilibj.Timer; -import edu.wpi.first.wpilibj.vision.AxisCamera; - -/** - * This demo shows the use of the AxisCamera class. - * Uses AxisCamera class to manually acquire a new image each frame, and annotate the image by drawing - * a circle on it, and show it on the FRC Dashboard. - */ - -public class Robot extends SampleRobot { - int session; - Image frame; - AxisCamera camera; - - public void robotInit() { - - frame = NIVision.imaqCreateImage(NIVision.ImageType.IMAGE_RGB, 0); - - // open the camera at the IP address assigned. This is the IP address that the camera - // can be accessed through the web interface. - camera = new AxisCamera("10.1.91.100"); - } - - public void operatorControl() { - - /** - * grab an image from the camera, draw the circle, and provide it for the camera server - * which will in turn send it to the dashboard. - */ - NIVision.Rect rect = new NIVision.Rect(10, 10, 100, 100); - - while (isOperatorControl() && isEnabled()) { - camera.getImage(frame); - NIVision.imaqDrawShapeOnImage(frame, frame, rect, - DrawMode.DRAW_VALUE, ShapeMode.SHAPE_OVAL, 0.0f); - - CameraServer.getInstance().setImage(frame); - - /** robot code here! **/ - Timer.delay(0.005); // wait for a motor update time - } - } - - public void test() { - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/CANTalon/src/org/usfirst/frc/team190/robot/Robot.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/CANTalon/src/org/usfirst/frc/team190/robot/Robot.java deleted file mode 100755 index 3d4dbb1145..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/CANTalon/src/org/usfirst/frc/team190/robot/Robot.java +++ /dev/null @@ -1,37 +0,0 @@ -package $package; - - -import edu.wpi.first.wpilibj.SpeedController; -import edu.wpi.first.wpilibj.CANTalon; -import edu.wpi.first.wpilibj.SampleRobot; -import edu.wpi.first.wpilibj.Timer; - -/** - * This is a short sample program demonstrating how to use the basic throttle - * mode of the new CAN Talon. - */ -public class Robot extends SampleRobot { - - CANTalon motor; - - public Robot() { - motor = new CANTalon(1); // Initialize the CanTalonSRX on device 1. - } - - /** - * Runs the motor. - */ - public void operatorControl() { - while (isOperatorControl() && isEnabled()) { - // Set the motor's output to half power. - // This takes a number from -1 (100% speed in reverse) to +1 (100% speed - // going forward) - motor.set(0.5); - - Timer.delay(0.01); // Note that the CANTalon only receives updates every - // 10ms, so updating more quickly would not gain you - // anything. - } - motor.disable(); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/CANTalonPID/src/org/usfirst/frc/team190/robot/Robot.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/CANTalonPID/src/org/usfirst/frc/team190/robot/Robot.java deleted file mode 100755 index 090e1d8226..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/CANTalonPID/src/org/usfirst/frc/team190/robot/Robot.java +++ /dev/null @@ -1,62 +0,0 @@ -package $package; - - -import edu.wpi.first.wpilibj.SpeedController; -import edu.wpi.first.wpilibj.CANTalon; -import edu.wpi.first.wpilibj.SampleRobot; -import edu.wpi.first.wpilibj.Timer; - -/** - * This is a short sample program demonstrating how to use the Talon SRX over - * CAN to run a closed-loop PID controller with an analog potentiometer. - */ -public class Robot extends SampleRobot { - - CANTalon motor; - - public Robot() { - motor = new CANTalon(1); // Initialize the CanTalonSRX on device 1. - - // This sets the mode of the m_motor. The options are: - // PercentVbus: basic throttle; no closed-loop. - // Current: Runs the motor with the specified current if possible. - // Speed: Runs a PID control loop to keep the motor going at a constant - // speed using the specified sensor. - // Position: Runs a PID control loop to move the motor to a specified move - // the motor to a specified sensor position. - // Voltage: Runs the m_motor at a constant voltage, if possible. - // Follower: The m_motor will run at the same throttle as the specified - // other talon. - motor.changeControlMode(CANTalon.ControlMode.Position); - // This command allows you to specify which feedback device to use when doing - // closed-loop control. The options are: - // AnalogPot: Basic analog potentiometer - // QuadEncoder: Quadrature Encoder - // AnalogEncoder: Analog Encoder - // EncRising: Counts the rising edges of the QuadA pin (allows use of a - // non-quadrature encoder) - // EncFalling: Same as EncRising, but counts on falling edges. - motor.setFeedbackDevice(CANTalon.FeedbackDevice.AnalogPot); - // This sets the basic P, I , and D values (F, Izone, and rampRate can also - // be set, but are ignored here). - // These must all be positive floating point numbers (reverseSensor will - // multiply the sensor values by negative one in case your sensor is flipped - // relative to your motor). - // These values are in units of throttle / sensor_units where throttle ranges - // from -1023 to +1023 and sensor units are from 0 - 1023 for analog - // potentiometers, encoder ticks for encoders, and position / 10ms for - // speeds. - motor.setPID(1.0, 0.0, 0.0); - } - - public void operatorControl() { - while (isOperatorControl() && isEnabled()) { - // In closed loop mode, this sets the goal in the units mentioned above. - // Since we are using an analog potentiometer, this will try to go to - // the middle of the potentiometer range. - motor.set(512); - - Timer.delay(5.0); - } - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/OI.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/OI.java deleted file mode 100644 index 19b93f17ed..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/OI.java +++ /dev/null @@ -1,57 +0,0 @@ - -package $package; - -import edu.wpi.first.wpilibj.Joystick; -import edu.wpi.first.wpilibj.buttons.JoystickButton; -import $package.commands.*; - -import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; - -/** - * 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 { - private Joystick joy = new Joystick(0); - - public OI() { - // Put Some buttons on the SmartDashboard - SmartDashboard.putData("Elevator Bottom", new SetElevatorSetpoint(0)); - SmartDashboard.putData("Elevator Platform", new SetElevatorSetpoint(0.2)); - SmartDashboard.putData("Elevator Top", new SetElevatorSetpoint(0.3)); - - SmartDashboard.putData("Wrist Horizontal", new SetWristSetpoint(0)); - SmartDashboard.putData("Raise Wrist", new SetWristSetpoint(-45)); - - SmartDashboard.putData("Open Claw", new OpenClaw()); - SmartDashboard.putData("Close Claw", new CloseClaw()); - - SmartDashboard.putData("Deliver Soda", new Autonomous()); - - // Create some buttons - JoystickButton d_up = new JoystickButton(joy, 5); - JoystickButton d_right= new JoystickButton(joy, 6); - JoystickButton d_down= new JoystickButton(joy, 7); - JoystickButton d_left = new JoystickButton(joy, 8); - JoystickButton l2 = new JoystickButton(joy, 9); - JoystickButton r2 = new JoystickButton(joy, 10); - JoystickButton l1 = new JoystickButton(joy, 11); - JoystickButton r1 = new JoystickButton(joy, 12); - - // Connect the buttons to commands - d_up.whenPressed(new SetElevatorSetpoint(0.2)); - d_down.whenPressed(new SetElevatorSetpoint(-0.2)); - d_right.whenPressed(new CloseClaw()); - d_left.whenPressed(new OpenClaw()); - - r1.whenPressed(new PrepareToPickup()); - r2.whenPressed(new Pickup()); - l1.whenPressed(new Place()); - l2.whenPressed(new Autonomous()); - } - - public Joystick getJoystick() { - return joy; - } -} - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/Robot.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/Robot.java deleted file mode 100644 index 4fe9902f3e..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/Robot.java +++ /dev/null @@ -1,103 +0,0 @@ -/*----------------------------------------------------------------------------*/ -/* Copyright (c) FIRST 2008. 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 $package; - -import edu.wpi.first.wpilibj.IterativeRobot; -import edu.wpi.first.wpilibj.command.Command; -import edu.wpi.first.wpilibj.command.Scheduler; -import edu.wpi.first.wpilibj.livewindow.LiveWindow; -import $package.commands.Autonomous; -import $package.subsystems.Claw; -import $package.subsystems.DriveTrain; -import $package.subsystems.Elevator; -import $package.subsystems.Wrist; -import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; - -/** - * The VM is configured to automatically run this class, and to call the - * functions corresponding to each mode, as described in the IterativeRobot - * documentation. If you change the name of this class or the package after - * creating this project, you must also update the manifest file in the resource - * directory. - */ -public class Robot extends IterativeRobot { - Command autonomousCommand; - - public static DriveTrain drivetrain; - public static Elevator elevator; - public static Wrist wrist; - public static Claw claw; - public static OI oi; - - /** - * This function is run when the robot is first started up and should be - * used for any initialization code. - */ - public void robotInit() { - // Initialize all subsystems - drivetrain = new DriveTrain(); - elevator = new Elevator(); - wrist = new Wrist(); - claw = new Claw(); - oi = new OI(); - - // instantiate the command used for the autonomous period - autonomousCommand = new Autonomous(); - - // Show what command your subsystem is running on the SmartDashboard - SmartDashboard.putData(drivetrain); - SmartDashboard.putData(elevator); - SmartDashboard.putData(wrist); - SmartDashboard.putData(claw); - } - - public void autonomousInit() { - autonomousCommand.start(); // schedule the autonomous command (example) - } - - /** - * This function is called periodically during autonomous - */ - public void autonomousPeriodic() { - Scheduler.getInstance().run(); - log(); - } - - public void teleopInit() { - // This makes sure that the autonomous stops running when - // teleop starts running. If you want the autonomous to - // continue until interrupted by another command, remove - // this line or comment it out. - autonomousCommand.cancel(); - } - - /** - * This function is called periodically during operator control - */ - public void teleopPeriodic() { - Scheduler.getInstance().run(); - log(); - } - - /** - * This function is called periodically during test mode - */ - public void testPeriodic() { - LiveWindow.run(); - } - - /** - * The log method puts interesting information to the SmartDashboard. - */ - private void log() { - wrist.log(); - elevator.log(); - drivetrain.log(); - claw.log(); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/Autonomous.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/Autonomous.java deleted file mode 100644 index e2cfbe8f12..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/Autonomous.java +++ /dev/null @@ -1,22 +0,0 @@ - -package $package.commands; - -import edu.wpi.first.wpilibj.command.CommandGroup; - -/** - * The main autonomous command to pickup and deliver the - * soda to the box. - */ -public class Autonomous extends CommandGroup { - public Autonomous() { - addSequential(new PrepareToPickup()); - addSequential(new Pickup()); - addSequential(new SetDistanceToBox(0.10)); - // addSequential(new DriveStraight(4)); // Use Encoders if ultrasonic is broken - addSequential(new Place()); - addSequential(new SetDistanceToBox(0.60)); - // addSequential(new DriveStraight(-2)); // Use Encoders if ultrasonic is broken - addParallel(new SetWristSetpoint(-45)); - addSequential(new CloseClaw()); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/CloseClaw.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/CloseClaw.java deleted file mode 100644 index 4a4cdfdde4..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/CloseClaw.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package $package.commands; - -import edu.wpi.first.wpilibj.command.Command; -import $package.Robot; - -/** - * Closes the claw for one second. Real robots should use sensors, stalling - * motors is BAD! - */ -public class CloseClaw extends Command { - - public CloseClaw() { - requires(Robot.claw); - } - - // Called just before this Command runs the first time - protected void initialize() { - Robot.claw.close(); - } - - // Called repeatedly when this Command is scheduled to run - protected void execute() { - } - - // Make this return true when this Command no longer needs to run execute() - protected boolean isFinished() { - return Robot.claw.isGrabbing(); - } - - // Called once after isFinished returns true - protected void end() { - // NOTE: Doesn't stop in simulation due to lower friction causing the can to fall out - // + there is no need to worry about stalling the motor or crushing the can. - if (!Robot.isSimulation()) - Robot.claw.stop(); - } - - // Called when another command which requires one or more of the same - // subsystems is scheduled to run - protected void interrupted() { - end(); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/DriveStraight.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/DriveStraight.java deleted file mode 100644 index 352856f038..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/DriveStraight.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package $package.commands; - -import edu.wpi.first.wpilibj.PIDController; -import edu.wpi.first.wpilibj.PIDOutput; -import edu.wpi.first.wpilibj.PIDSource; -import edu.wpi.first.wpilibj.command.Command; -import $package.Robot; - -/** - * Drive the given distance straight (negative values go backwards). - * Uses a local PID controller to run a simple PID loop that is only - * enabled while this command is running. The input is the averaged - * values of the left and right encoders. - */ -public class DriveStraight extends Command { - private PIDController pid; - - public DriveStraight(double distance) { - requires(Robot.drivetrain); - pid = new PIDController(4, 0, 0, - new PIDSource() { public double pidGet() { - return Robot.drivetrain.getDistance(); - }}, - new PIDOutput() { public void pidWrite(double d) { - Robot.drivetrain.drive(d, d); - }}); - pid.setAbsoluteTolerance(0.01); - pid.setSetpoint(distance); - } - - // Called just before this Command runs the first time - protected void initialize() { - // Get everything in a safe starting state. - Robot.drivetrain.reset(); - pid.reset(); - pid.enable(); - } - - // Called repeatedly when this Command is scheduled to run - protected void execute() {} - - // Make this return true when this Command no longer needs to run execute() - protected boolean isFinished() { - return pid.onTarget(); - } - - // Called once after isFinished returns true - protected void end() { - // Stop PID and the wheels - pid.disable(); - Robot.drivetrain.drive(0, 0); - } - - // Called when another command which requires one or more of the same - // subsystems is scheduled to run - protected void interrupted() { - end(); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/OpenClaw.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/OpenClaw.java deleted file mode 100644 index ca8bfd1ce1..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/OpenClaw.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package $package.commands; - -import edu.wpi.first.wpilibj.command.Command; -import $package.Robot; - -/** - * Opens the claw for one second. Real robots should use sensors, stalling - * motors is BAD! - */ -public class OpenClaw extends Command { - - public OpenClaw() { - requires(Robot.claw); - setTimeout(1); - } - - // Called just before this Command runs the first time - protected void initialize() { - Robot.claw.open(); - } - - // Called repeatedly when this Command is scheduled to run - protected void execute() { - } - - // Make this return true when this Command no longer needs to run execute() - protected boolean isFinished() { - return isTimedOut(); - } - - // Called once after isFinished returns true - protected void end() { - Robot.claw.stop(); - } - - // Called when another command which requires one or more of the same - // subsystems is scheduled to run - protected void interrupted() { - end(); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/Pickup.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/Pickup.java deleted file mode 100644 index 940d2015c4..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/Pickup.java +++ /dev/null @@ -1,15 +0,0 @@ -package $package.commands; - -import edu.wpi.first.wpilibj.command.CommandGroup; - -/** - * Pickup a soda can (if one is between the open claws) and - * get it in a safe state to drive around. - */ -public class Pickup extends CommandGroup { - public Pickup() { - addSequential(new CloseClaw()); - addParallel(new SetWristSetpoint(-45)); - addSequential(new SetElevatorSetpoint(0.25)); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/Place.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/Place.java deleted file mode 100644 index ca060b8ff5..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/Place.java +++ /dev/null @@ -1,14 +0,0 @@ -package $package.commands; - -import edu.wpi.first.wpilibj.command.CommandGroup; - -/** - * Place a held soda can onto the platform. - */ -public class Place extends CommandGroup { - public Place() { - addSequential(new SetElevatorSetpoint(0.25)); - addSequential(new SetWristSetpoint(0)); - addSequential(new OpenClaw()); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/PrepareToPickup.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/PrepareToPickup.java deleted file mode 100644 index 47c1f9e2d9..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/PrepareToPickup.java +++ /dev/null @@ -1,14 +0,0 @@ -package $package.commands; - -import edu.wpi.first.wpilibj.command.CommandGroup; - -/** - * Make sure the robot is in a state to pickup soda cans. - */ -public class PrepareToPickup extends CommandGroup { - public PrepareToPickup() { - addParallel(new OpenClaw()); - addParallel(new SetWristSetpoint(0)); - addSequential(new SetElevatorSetpoint(0)); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/SetDistanceToBox.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/SetDistanceToBox.java deleted file mode 100644 index c56e6c23d3..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/SetDistanceToBox.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package $package.commands; - -import edu.wpi.first.wpilibj.PIDController; -import edu.wpi.first.wpilibj.PIDOutput; -import edu.wpi.first.wpilibj.PIDSource; -import edu.wpi.first.wpilibj.command.Command; -import $package.Robot; - -/** - * Drive until the robot is the given distance away from the box. Uses a local - * PID controller to run a simple PID loop that is only enabled while this - * command is running. The input is the averaged values of the left and right - * encoders. - */ -public class SetDistanceToBox extends Command { - private PIDController pid; - - public SetDistanceToBox(double distance) { - requires(Robot.drivetrain); - pid = new PIDController(-2, 0, 0, new PIDSource() { - public double pidGet() { - return Robot.drivetrain.getDistanceToObstacle(); - } - }, new PIDOutput() { - public void pidWrite(double d) { - Robot.drivetrain.drive(d, d); - } - }); - pid.setAbsoluteTolerance(0.01); - pid.setSetpoint(distance); - } - - // Called just before this Command runs the first time - protected void initialize() { - // Get everything in a safe starting state. - Robot.drivetrain.reset(); - pid.reset(); - pid.enable(); - } - - // Called repeatedly when this Command is scheduled to run - protected void execute() { - } - - // Make this return true when this Command no longer needs to run execute() - protected boolean isFinished() { - return pid.onTarget(); - } - - // Called once after isFinished returns true - protected void end() { - // Stop PID and the wheels - pid.disable(); - Robot.drivetrain.drive(0, 0); - } - - // Called when another command which requires one or more of the same - // subsystems is scheduled to run - protected void interrupted() { - end(); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/SetElevatorSetpoint.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/SetElevatorSetpoint.java deleted file mode 100644 index e4f9763e63..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/SetElevatorSetpoint.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package $package.commands; - -import edu.wpi.first.wpilibj.command.Command; -import $package.Robot; - -/** - * Move the elevator to a given location. This command finishes when it is within - * the tolerance, but leaves the PID loop running to maintain the position. Other - * commands using the elevator should make sure they disable PID! - */ -public class SetElevatorSetpoint extends Command { - private double setpoint; - - public SetElevatorSetpoint(double setpoint) { - this.setpoint = setpoint; - requires(Robot.elevator); - } - - // Called just before this Command runs the first time - protected void initialize() { - Robot.elevator.enable(); - Robot.elevator.setSetpoint(setpoint); - } - - // Called repeatedly when this Command is scheduled to run - protected void execute() { - } - - // Make this return true when this Command no longer needs to run execute() - protected boolean isFinished() { - return Robot.elevator.onTarget(); - } - - // Called once after isFinished returns true - protected void end() { - } - - // Called when another command which requires one or more of the same - // subsystems is scheduled to run - protected void interrupted() { - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/SetWristSetpoint.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/SetWristSetpoint.java deleted file mode 100644 index e2c95e6a84..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/SetWristSetpoint.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package $package.commands; - -import edu.wpi.first.wpilibj.command.Command; -import $package.Robot; - -/** - * Move the wrist to a given angle. This command finishes when it is within - * the tolerance, but leaves the PID loop running to maintain the position. - * Other commands using the wrist should make sure they disable PID! - */ -public class SetWristSetpoint extends Command { - private double setpoint; - - public SetWristSetpoint(double setpoint) { - this.setpoint = setpoint; - requires(Robot.wrist); - } - - // Called just before this Command runs the first time - protected void initialize() { - Robot.wrist.enable(); - Robot.wrist.setSetpoint(setpoint); - } - - // Called repeatedly when this Command is scheduled to run - protected void execute() { - } - - // Make this return true when this Command no longer needs to run execute() - protected boolean isFinished() { - return Robot.wrist.onTarget(); - } - - // Called once after isFinished returns true - protected void end() { - } - - // Called when another command which requires one or more of the same - // subsystems is scheduled to run - protected void interrupted() { - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/TankDriveWithJoystick.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/TankDriveWithJoystick.java deleted file mode 100644 index 8296c4fd78..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/commands/TankDriveWithJoystick.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package $package.commands; - -import $package.Robot; -import edu.wpi.first.wpilibj.command.Command; - -/** - * Have the robot drive tank style using the PS3 Joystick until interrupted. - */ -public class TankDriveWithJoystick extends Command { - - public TankDriveWithJoystick() { - requires(Robot.drivetrain); - } - - // Called just before this Command runs the f iirst time - protected void initialize() {} - - // Called repeatedly when this Command is scheduled to run - protected void execute() { - Robot.drivetrain.drive(Robot.oi.getJoystick()); - } - - // Make this return true when this Command no longer needs to run execute() - protected boolean isFinished() { - return false; // Runs until interrupted - } - - // Called once after isFinished returns true - protected void end() { - Robot.drivetrain.drive(0, 0); - } - - // Called when another command which requires one or more of the same - // subsystems is scheduled to run - protected void interrupted() { - end(); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/subsystems/Claw.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/subsystems/Claw.java deleted file mode 100644 index f199317440..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/subsystems/Claw.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package $package.subsystems; - -import edu.wpi.first.wpilibj.DigitalInput; -import edu.wpi.first.wpilibj.SpeedController; -import edu.wpi.first.wpilibj.Victor; -import edu.wpi.first.wpilibj.command.Subsystem; -import edu.wpi.first.wpilibj.livewindow.LiveWindow; - -/** - * The claw subsystem is a simple system with a motor for opening and closing. - * If using stronger motors, you should probably use a sensor so that the - * motors don't stall. - */ -public class Claw extends Subsystem { - private SpeedController motor; - private DigitalInput contact; - - public Claw() { - super(); - motor = new Victor(7); - contact = new DigitalInput(5); - - // Let's show everything on the LiveWindow - LiveWindow.addActuator("Claw", "Motor", (Victor) motor); - LiveWindow.addActuator("Claw", "Limit Switch", contact); - } - - public void initDefaultCommand() {} - public void log() {} - - /** - * Set the claw motor to move in the open direction. - */ - public void open() { - motor.set(-1); - } - - /** - * Set the claw motor to move in the close direction. - */ - public void close() { - motor.set(1); - } - - /** - * Stops the claw motor from moving. - */ - public void stop() { - motor.set(0); - } - - /** - * Return true when the robot is grabbing an object hard enough - * to trigger the limit switch. - */ - public boolean isGrabbing() { - return contact.get(); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/subsystems/DriveTrain.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/subsystems/DriveTrain.java deleted file mode 100644 index cd23edf782..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/subsystems/DriveTrain.java +++ /dev/null @@ -1,134 +0,0 @@ -package $package.subsystems; - -import edu.wpi.first.wpilibj.AnalogGyro; -import edu.wpi.first.wpilibj.AnalogInput; -import edu.wpi.first.wpilibj.Encoder; -import edu.wpi.first.wpilibj.Joystick.AxisType; -import edu.wpi.first.wpilibj.Joystick; -import edu.wpi.first.wpilibj.RobotDrive; -import edu.wpi.first.wpilibj.SpeedController; -import edu.wpi.first.wpilibj.Talon; -import edu.wpi.first.wpilibj.command.Subsystem; -import edu.wpi.first.wpilibj.livewindow.LiveWindow; -import $package.Robot; -import $package.commands.TankDriveWithJoystick; -import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; - -/** - * The DriveTrain subsystem incorporates the sensors and actuators attached to - * the robots chassis. These include four drive motors, a left and right encoder - * and a gyro. - */ -public class DriveTrain extends Subsystem { - private SpeedController front_left_motor, back_left_motor, - front_right_motor, back_right_motor; - private RobotDrive drive; - private Encoder left_encoder, right_encoder; - private AnalogInput rangefinder; - private AnalogGyro gyro; - - public DriveTrain() { - super(); - front_left_motor = new Talon(1); - back_left_motor = new Talon(2); - front_right_motor = new Talon(3); - back_right_motor = new Talon(4); - drive = new RobotDrive(front_left_motor, back_left_motor, - front_right_motor, back_right_motor); - left_encoder = new Encoder(1, 2); - right_encoder = new Encoder(3, 4); - - // Encoders may measure differently in the real world and in - // simulation. In this example the robot moves 0.042 barleycorns - // per tick in the real world, but the simulated encoders - // simulate 360 tick encoders. This if statement allows for the - // real robot to handle this difference in devices. - if (Robot.isReal()) { - left_encoder.setDistancePerPulse(0.042); - right_encoder.setDistancePerPulse(0.042); - } else { - // Circumference in ft = 4in/12(in/ft)*PI - left_encoder.setDistancePerPulse((4.0/12.0*Math.PI) / 360.0); - right_encoder.setDistancePerPulse((4.0/12.0*Math.PI) / 360.0); - } - - rangefinder = new AnalogInput(6); - gyro = new AnalogGyro(1); - - // Let's show everything on the LiveWindow - LiveWindow.addActuator("Drive Train", "Front_Left Motor", (Talon) front_left_motor); - LiveWindow.addActuator("Drive Train", "Back Left Motor", (Talon) back_left_motor); - LiveWindow.addActuator("Drive Train", "Front Right Motor", (Talon) front_right_motor); - LiveWindow.addActuator("Drive Train", "Back Right Motor", (Talon) back_right_motor); - LiveWindow.addSensor("Drive Train", "Left Encoder", left_encoder); - LiveWindow.addSensor("Drive Train", "Right Encoder", right_encoder); - LiveWindow.addSensor("Drive Train", "Rangefinder", rangefinder); - LiveWindow.addSensor("Drive Train", "Gyro", gyro); - } - - /** - * When no other command is running let the operator drive around - * using the PS3 joystick. - */ - public void initDefaultCommand() { - setDefaultCommand(new TankDriveWithJoystick()); - } - - /** - * The log method puts interesting information to the SmartDashboard. - */ - public void log() { - SmartDashboard.putNumber("Left Distance", left_encoder.getDistance()); - SmartDashboard.putNumber("Right Distance", right_encoder.getDistance()); - SmartDashboard.putNumber("Left Speed", left_encoder.getRate()); - SmartDashboard.putNumber("Right Speed", right_encoder.getRate()); - SmartDashboard.putNumber("Gyro", gyro.getAngle()); - } - - /** - * Tank style driving for the DriveTrain. - * @param left Speed in range [-1,1] - * @param right Speed in range [-1,1] - */ - public void drive(double left, double right) { - drive.tankDrive(left, right); - } - - /** - * @param joy The ps3 style joystick to use to drive tank style. - */ - public void drive(Joystick joy) { - drive(-joy.getY(), -joy.getAxis(AxisType.kThrottle)); - } - - /** - * @return The robots heading in degrees. - */ - public double getHeading() { - return gyro.getAngle(); - } - - /** - * Reset the robots sensors to the zero states. - */ - public void reset() { - gyro.reset(); - left_encoder.reset(); - right_encoder.reset(); - } - - /** - * @return The distance driven (average of left and right encoders). - */ - public double getDistance() { - return (left_encoder.getDistance() + right_encoder.getDistance())/2; - } - - /** - * @return The distance to the obstacle detected by the rangefinder. - */ - public double getDistanceToObstacle() { - // Really meters in simulation since it's a rangefinder... - return rangefinder.getAverageVoltage(); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/subsystems/Elevator.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/subsystems/Elevator.java deleted file mode 100644 index c14308f00a..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/subsystems/Elevator.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package $package.subsystems; - -import edu.wpi.first.wpilibj.AnalogPotentiometer; -import edu.wpi.first.wpilibj.SpeedController; -import edu.wpi.first.wpilibj.Victor; -import edu.wpi.first.wpilibj.command.PIDSubsystem; -import edu.wpi.first.wpilibj.interfaces.Potentiometer; -import edu.wpi.first.wpilibj.livewindow.LiveWindow; -import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; - -import $package.Robot; - -/** - * The elevator subsystem uses PID to go to a given height. Unfortunately, in it's current - * state PID values for simulation are different than in the real world do to minor differences. - */ -public class Elevator extends PIDSubsystem { - private SpeedController motor; - private Potentiometer pot; - - private static final double kP_real = 4, kI_real = 0.07, - kP_simulation = 18, kI_simulation = 0.2; - - public Elevator() { - super(kP_real, kI_real, 0); - if (Robot.isSimulation()) { // Check for simulation and update PID values - getPIDController().setPID(kP_simulation, kI_simulation, 0, 0); - } - setAbsoluteTolerance(0.005); - - motor = new Victor(5); - - // Conversion value of potentiometer varies between the real world and simulation - if (Robot.isReal()) { - pot = new AnalogPotentiometer(2, -2.0/5); - } else { - pot = new AnalogPotentiometer(2); // Defaults to meters - } - - // Let's show everything on the LiveWindow - LiveWindow.addActuator("Elevator", "Motor", (Victor) motor); - LiveWindow.addSensor("Elevator", "Pot", (AnalogPotentiometer) pot); - LiveWindow.addActuator("Elevator", "PID", getPIDController()); - } - - public void initDefaultCommand() {} - - /** - * The log method puts interesting information to the SmartDashboard. - */ - public void log() { - SmartDashboard.putData("Wrist Pot", (AnalogPotentiometer) pot); - } - - /** - * Use the potentiometer as the PID sensor. This method is automatically - * called by the subsystem. - */ - protected double returnPIDInput() { - return pot.get(); - } - - - /** - * Use the motor as the PID output. This method is automatically called by - * the subsystem. - */ - protected void usePIDOutput(double d) { - motor.set(d); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/subsystems/Wrist.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/subsystems/Wrist.java deleted file mode 100644 index b5ab894d30..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GearsBot/src/org/usfirst/frc/team190/robot/subsystems/Wrist.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package $package.subsystems; - -import edu.wpi.first.wpilibj.AnalogPotentiometer; -import edu.wpi.first.wpilibj.SpeedController; -import edu.wpi.first.wpilibj.Victor; -import edu.wpi.first.wpilibj.command.PIDSubsystem; -import edu.wpi.first.wpilibj.interfaces.Potentiometer; -import edu.wpi.first.wpilibj.livewindow.LiveWindow; -import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; - -import $package.Robot; - -/** - * The wrist subsystem is like the elevator, but with a rotational joint instead - * of a linear joint. - */ -public class Wrist extends PIDSubsystem { - private SpeedController motor; - private Potentiometer pot; - - private static final double kP_real = 1, - kP_simulation = 0.05; - - public Wrist() { - super(kP_real, 0, 0); - if (Robot.isSimulation()) { // Check for simulation and update PID values - getPIDController().setPID(kP_simulation, 0, 0, 0); - } - setAbsoluteTolerance(2.5); - - motor = new Victor(6); - - // Conversion value of potentiometer varies between the real world and simulation - if (Robot.isReal()) { - pot = new AnalogPotentiometer(3, -270.0/5); - } else { - pot = new AnalogPotentiometer(3); // Defaults to degrees - } - - // Let's show everything on the LiveWindow - LiveWindow.addActuator("Wrist", "Motor", (Victor) motor); - LiveWindow.addSensor("Wrist", "Pot", (AnalogPotentiometer) pot); - LiveWindow.addActuator("Wrist", "PID", getPIDController()); - } - - public void initDefaultCommand() {} - - /** - * The log method puts interesting information to the SmartDashboard. - */ - public void log() { - SmartDashboard.putData("Wrist Angle", (AnalogPotentiometer) pot); - } - - /** - * Use the potentiometer as the PID sensor. This method is automatically - * called by the subsystem. - */ - protected double returnPIDInput() { - return pot.get(); - } - - /** - * Use the motor as the PID output. This method is automatically called by - * the subsystem. - */ - protected void usePIDOutput(double d) { - motor.set(d); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GettingStarted/src/org/usfirst/frc/team190/robot/Robot.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GettingStarted/src/org/usfirst/frc/team190/robot/Robot.java deleted file mode 100644 index 9524c56547..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GettingStarted/src/org/usfirst/frc/team190/robot/Robot.java +++ /dev/null @@ -1,69 +0,0 @@ -package $package; - -import edu.wpi.first.wpilibj.IterativeRobot; -import edu.wpi.first.wpilibj.Joystick; -import edu.wpi.first.wpilibj.RobotDrive; -import edu.wpi.first.wpilibj.livewindow.LiveWindow; - -/** - * The VM is configured to automatically run this class, and to call the - * functions corresponding to each mode, as described in the IterativeRobot - * documentation. If you change the name of this class or the package after - * creating this project, you must also update the manifest file in the resource - * directory. - */ -public class Robot extends IterativeRobot { - RobotDrive myRobot; - Joystick stick; - int autoLoopCounter; - - /** - * This function is run when the robot is first started up and should be - * used for any initialization code. - */ - public void robotInit() { - myRobot = new RobotDrive(0,1); - stick = new Joystick(0); - } - - /** - * This function is run once each time the robot enters autonomous mode - */ - public void autonomousInit() { - autoLoopCounter = 0; - } - - /** - * This function is called periodically during autonomous - */ - public void autonomousPeriodic() { - if(autoLoopCounter < 100) //Check if we've completed 100 loops (approximately 2 seconds) - { - myRobot.drive(-0.5, 0.0); // drive forwards half speed - autoLoopCounter++; - } else { - myRobot.drive(0.0, 0.0); // stop robot - } - } - - /** - * This function is called once each time the robot enters tele-operated mode - */ - public void teleopInit(){ - } - - /** - * This function is called periodically during operator control - */ - public void teleopPeriodic() { - myRobot.arcadeDrive(stick); - } - - /** - * This function is called periodically during test mode - */ - public void testPeriodic() { - LiveWindow.run(); - } - -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/Gyro/src/org/usfirst/frc/team190/robot/Robot.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/Gyro/src/org/usfirst/frc/team190/robot/Robot.java deleted file mode 100644 index ac0163cb43..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/Gyro/src/org/usfirst/frc/team190/robot/Robot.java +++ /dev/null @@ -1,86 +0,0 @@ - -package $package; - -import edu.wpi.first.wpilibj.AnalogGyro; -import edu.wpi.first.wpilibj.CANTalon; -import edu.wpi.first.wpilibj.SampleRobot; -import edu.wpi.first.wpilibj.RobotDrive; -import edu.wpi.first.wpilibj.Joystick; - -/** - * This is a sample program to demonstrate how to use a gyro sensor to make a robot drive - * straight. This program uses a joystick to drive forwards and backwards while the gyro - * is used for direction keeping. - * - * WARNING: While it may look like a good choice to use for your code if you're inexperienced, - * don't. Unless you know what you are doing, complex code will be much more difficult under - * this system. Use IterativeRobot or Command-Based instead if you're new. - */ -public class Robot extends SampleRobot { - - final int gyroChannel = 0; //analog input - final int joystickChannel = 0; //usb number in DriverStation - - //channels for motors - final int leftMotorChannel = 1; - final int rightMotorChannel = 0; - final int leftRearMotorChannel = 3; - final int rightRearMotorChannel = 2; - - double angleSetpoint = 0.0; - final double pGain = .006; //propotional turning constant - - //gyro calibration constant, may need to be adjusted; - //gyro value of 360 is set to correspond to one full revolution - final double voltsPerDegreePerSecond = .0128; - - RobotDrive myRobot; - AnalogGyro gyro; - Joystick joystick; - - public Robot() - { - //make objects for the drive train, gyro, and joystick - myRobot = new RobotDrive(new CANTalon(leftMotorChannel), new CANTalon( - leftRearMotorChannel), new CANTalon(rightMotorChannel), - new CANTalon(rightRearMotorChannel)); - gyro = new AnalogGyro(gyroChannel); - joystick = new Joystick(joystickChannel); - } - - /** - * Runs during autonomous. - */ - public void autonomous() { - - } - - /** - * Sets the gyro sensitivity and drives the robot when the joystick is pushed. The - * motor speed is set from the joystick while the RobotDrive turning value is assigned - * from the error between the setpoint and the gyro angle. - */ - public void operatorControl() { - double turningValue; - gyro.setSensitivity(voltsPerDegreePerSecond); //calibrates gyro values to equal degrees - while (isOperatorControl() && isEnabled()) { - - turningValue = (angleSetpoint - gyro.getAngle())*pGain; - if(joystick.getY() <= 0) - { - //forwards - myRobot.drive(joystick.getY(), turningValue); - } else { - //backwards - myRobot.drive(joystick.getY(), -turningValue); - } - } - } - - /** - * Runs during test mode. - */ - public void test(){ - - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GyroMecanum/src/org/usfirst/frc/team190/robot/Robot.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GyroMecanum/src/org/usfirst/frc/team190/robot/Robot.java deleted file mode 100644 index ceffce0e64..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/GyroMecanum/src/org/usfirst/frc/team190/robot/Robot.java +++ /dev/null @@ -1,71 +0,0 @@ - -package $package; - -import edu.wpi.first.wpilibj.AnalogGyro; -import edu.wpi.first.wpilibj.CANTalon; -import edu.wpi.first.wpilibj.SampleRobot; -import edu.wpi.first.wpilibj.RobotDrive; -import edu.wpi.first.wpilibj.Joystick; -import edu.wpi.first.wpilibj.Timer; -import edu.wpi.first.wpilibj.RobotDrive.MotorType; - -/** - * This is a sample program that uses mecanum drive with a gyro sensor to maintian - * rotation vectorsin relation to the starting orientation of the robot (field-oriented controls). - * - * WARNING: While it may look like a good choice to use for your code if you're inexperienced, - * don't. Unless you know what you are doing, complex code will be much more difficult under - * this system. Use IterativeRobot or Command-Based instead if you're new. - */ -public class Robot extends SampleRobot { - RobotDrive myRobot; - Joystick joystick; - AnalogGyro gyro; - - //channels for motors - final int leftMotorChannel = 1; - final int rightMotorChannel = 0; - final int leftRearMotorChannel = 3; - final int rightRearMotorChannel = 2; - - final int gyroChannel = 0; //analog input - - //gyro calibration constant, may need to be adjusted so that a gyro value of 360 - //equals 360 degrees - final double voltsPerDegreePerSecond = .0128; - - public Robot() { - //make objects for drive train, joystick, and gyro - myRobot = new RobotDrive(new CANTalon(leftMotorChannel), new CANTalon(leftRearMotorChannel), - new CANTalon(rightMotorChannel), new CANTalon(rightRearMotorChannel)); - myRobot.setInvertedMotor(MotorType.kFrontLeft, true); // invert the left side motors - myRobot.setInvertedMotor(MotorType.kRearLeft, true); // you may need to change or remove this to match your robot - - joystick = new Joystick(0); - gyro = new AnalogGyro(gyroChannel); - } - - /** - * Runs during autonomous. - */ - public void autonomous() { - - } - - /** - * Gyro sensitivity is set and mecanum drive is used with the gyro angle as an input. - */ - public void operatorControl() { - gyro.setSensitivity(voltsPerDegreePerSecond); //calibrate gyro to have the value equal to degrees - while (isOperatorControl() && isEnabled()) { - myRobot.mecanumDrive_Cartesian(joystick.getX(), joystick.getY(), joystick.getZ(), gyro.getAngle()); - Timer.delay(0.005); // wait 5ms to avoid hogging CPU cycles - } - } - - /** - * Runs during test mode - */ - public void test() { - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/IntermediateVision/src/org/usfirst/frc/team190/robot/Robot.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/IntermediateVision/src/org/usfirst/frc/team190/robot/Robot.java deleted file mode 100755 index f26661f198..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/IntermediateVision/src/org/usfirst/frc/team190/robot/Robot.java +++ /dev/null @@ -1,57 +0,0 @@ -package $package; - -import com.ni.vision.NIVision; -import com.ni.vision.NIVision.DrawMode; -import com.ni.vision.NIVision.Image; -import com.ni.vision.NIVision.ShapeMode; - -import edu.wpi.first.wpilibj.CameraServer; -import edu.wpi.first.wpilibj.SampleRobot; -import edu.wpi.first.wpilibj.Timer; - -/** - * This is a demo program showing the use of the NIVision class to do vision processing. - * The image is acquired from the USB Webcam, then a circle is overlayed on it. - * The NIVision class supplies dozens of methods for different types of processing. - * The resulting image can then be sent to the FRC PC Dashboard with setImage() - */ -public class Robot extends SampleRobot { - int session; - Image frame; - - public void robotInit() { - - frame = NIVision.imaqCreateImage(NIVision.ImageType.IMAGE_RGB, 0); - - // the camera name (ex "cam0") can be found through the roborio web interface - session = NIVision.IMAQdxOpenCamera("cam0", - NIVision.IMAQdxCameraControlMode.CameraControlModeController); - NIVision.IMAQdxConfigureGrab(session); - } - - public void operatorControl() { - NIVision.IMAQdxStartAcquisition(session); - - /** - * grab an image, draw the circle, and provide it for the camera server - * which will in turn send it to the dashboard. - */ - NIVision.Rect rect = new NIVision.Rect(10, 10, 100, 100); - - while (isOperatorControl() && isEnabled()) { - - NIVision.IMAQdxGrab(session, frame, 1); - NIVision.imaqDrawShapeOnImage(frame, frame, rect, - DrawMode.DRAW_VALUE, ShapeMode.SHAPE_OVAL, 0.0f); - - CameraServer.getInstance().setImage(frame); - - /** robot code here! **/ - Timer.delay(0.005); // wait for a motor update time - } - NIVision.IMAQdxStopAcquisition(session); - } - - public void test() { - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/MecanumDrive/src/org/usfirst/frc/team190/robot/Robot.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/MecanumDrive/src/org/usfirst/frc/team190/robot/Robot.java deleted file mode 100755 index 492e13a2f0..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/MecanumDrive/src/org/usfirst/frc/team190/robot/Robot.java +++ /dev/null @@ -1,52 +0,0 @@ -package $package; - - -import edu.wpi.first.wpilibj.Joystick; -import edu.wpi.first.wpilibj.RobotDrive; -import edu.wpi.first.wpilibj.RobotDrive.MotorType; -import edu.wpi.first.wpilibj.SampleRobot; -import edu.wpi.first.wpilibj.Timer; - -/** - * This is a demo program showing how to use Mecanum control with the RobotDrive class. - */ -public class Robot extends SampleRobot { - - RobotDrive robotDrive; - Joystick stick; - - // Channels for the wheels - final int frontLeftChannel = 2; - final int rearLeftChannel = 3; - final int frontRightChannel = 1; - final int rearRightChannel = 0; - - // The channel on the driver station that the joystick is connected to - final int joystickChannel = 0; - - public Robot() { - robotDrive = new RobotDrive(frontLeftChannel, rearLeftChannel, frontRightChannel, rearRightChannel); - robotDrive.setInvertedMotor(MotorType.kFrontLeft, true); // invert the left side motors - robotDrive.setInvertedMotor(MotorType.kRearLeft, true); // you may need to change or remove this to match your robot - robotDrive.setExpiration(0.1); - - stick = new Joystick(joystickChannel); - } - - - /** - * Runs the motors with Mecanum drive. - */ - public void operatorControl() { - robotDrive.setSafetyEnabled(true); - while (isOperatorControl() && isEnabled()) { - - // Use the joystick X axis for lateral movement, Y axis for forward movement, and Z axis for rotation. - // This sample does not use field-oriented drive, so the gyro input is set to zero. - robotDrive.mecanumDrive_Cartesian(stick.getX(), stick.getY(), stick.getZ(), 0); - - Timer.delay(0.005); // wait 5ms to avoid hogging CPU cycles - } - } - -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/MotorControl/src/org/usfirst/frc/team190/robot/Robot.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/MotorControl/src/org/usfirst/frc/team190/robot/Robot.java deleted file mode 100755 index 3afd18751d..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/MotorControl/src/org/usfirst/frc/team190/robot/Robot.java +++ /dev/null @@ -1,44 +0,0 @@ -package $package; - - -import edu.wpi.first.wpilibj.Joystick; -import edu.wpi.first.wpilibj.SpeedController; -import edu.wpi.first.wpilibj.Talon; -import edu.wpi.first.wpilibj.SampleRobot; -import edu.wpi.first.wpilibj.Timer; - -/** - * This sample program shows how to control a motor using a joystick. In the operator - * control part of the program, the joystick is read and the value is written to the motor. - * - * Joystick analog values range from -1 to 1 and speed controller inputs also range from -1 - * to 1 making it easy to work together. The program also delays a short time in the loop - * to allow other threads to run. This is generally a good idea, especially since the joystick - * values are only transmitted from the Driver Station once every 20ms. - */ -public class Robot extends SampleRobot { - - private SpeedController motor; // the motor to directly control with a joystick - private Joystick stick; - - private final double k_updatePeriod = 0.005; // update every 0.005 seconds/5 milliseconds (200Hz) - - public Robot() { - motor = new Talon(0); // initialize the motor as a Talon on channel 0 - stick = new Joystick(0); // initialize the joystick on port 0 - } - - /** - * Runs the motor from a joystick. - */ - public void operatorControl() { - while (isOperatorControl() && isEnabled()) { - // Set the motor's output. - // This takes a number from -1 (100% speed in reverse) to +1 (100% speed going forward) - motor.set(stick.getY()); - - Timer.delay(k_updatePeriod); // wait 5ms to the next update - } - - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/OI.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/OI.java deleted file mode 100644 index cdd515b3f4..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/OI.java +++ /dev/null @@ -1,48 +0,0 @@ -package $package; - -import $package.commands.Collect; -import $package.commands.DriveForward; -import $package.commands.LowGoal; -import $package.commands.SetCollectionSpeed; -import $package.commands.SetPivotSetpoint; -import $package.commands.Shoot; -import $package.subsystems.Collector; -import $package.subsystems.Pivot; -import $package.triggers.DoubleButton; - -import edu.wpi.first.wpilibj.Joystick; -import edu.wpi.first.wpilibj.buttons.JoystickButton; -import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; - -/** - * The operator interface of the robot, it has been simplified from the real - * robot to allow control with a single PS3 joystick. As a result, not all - * functionality from the real robot is available. - */ -public class OI { - public Joystick joystick; - - public OI() { - joystick = new Joystick(0); - - new JoystickButton(joystick, 12).whenPressed(new LowGoal()); - new JoystickButton(joystick, 10).whenPressed(new Collect()); - - new JoystickButton(joystick, 11).whenPressed(new SetPivotSetpoint(Pivot.SHOOT)); - new JoystickButton(joystick, 9).whenPressed(new SetPivotSetpoint(Pivot.SHOOT_NEAR)); - - new DoubleButton(joystick, 2, 3).whenActive(new Shoot()); - - - // SmartDashboard Buttons - SmartDashboard.putData("Drive Forward", new DriveForward(2.25)); - SmartDashboard.putData("Drive Backward", new DriveForward(-2.25)); - SmartDashboard.putData("Start Rollers", new SetCollectionSpeed(Collector.FORWARD)); - SmartDashboard.putData("Stop Rollers", new SetCollectionSpeed(Collector.STOP)); - SmartDashboard.putData("Reverse Rollers", new SetCollectionSpeed(Collector.REVERSE)); - } - - public Joystick getJoystick() { - return joystick; - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/Robot.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/Robot.java deleted file mode 100644 index bd8376f452..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/Robot.java +++ /dev/null @@ -1,122 +0,0 @@ -package $package; - -import edu.wpi.first.wpilibj.IterativeRobot; -import edu.wpi.first.wpilibj.command.Command; -import edu.wpi.first.wpilibj.command.Scheduler; -import edu.wpi.first.wpilibj.livewindow.LiveWindow; - -import $package.commands.DriveAndShootAutonomous; -import $package.commands.DriveForward; -import $package.subsystems.Collector; -import $package.subsystems.DriveTrain; -import $package.subsystems.Pivot; -import $package.subsystems.Pneumatics; -import $package.subsystems.Shooter; - -import edu.wpi.first.wpilibj.smartdashboard.SendableChooser; -import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; - -/** - * This is the main class for running the PacGoat code. - * - * The VM is configured to automatically run this class, and to call the - * functions corresponding to each mode, as described in the IterativeRobot - * documentation. If you change the name of this class or the package after - * creating this project, you must also update the manifest file in the resource - * directory. - */ -public class Robot extends IterativeRobot { - Command autonomousCommand; - public static OI oi; - - public static DriveTrain drivetrain; - public static Collector collector; - public static Shooter shooter; - public static Pneumatics pneumatics; - public static Pivot pivot; - - public SendableChooser autoChooser; - public SendableChooser autonomousDirectionChooser; - - // This function is run when the robot is first started up and should be - // used for any initialization code. - public void robotInit() { - // Initialize the subsystems - drivetrain = new DriveTrain(); - collector = new Collector(); - shooter = new Shooter(); - pneumatics = new Pneumatics(); - pivot = new Pivot(); - SmartDashboard.putData(drivetrain); - SmartDashboard.putData(collector); - SmartDashboard.putData(shooter); - SmartDashboard.putData(pneumatics); - SmartDashboard.putData(pivot); - - // This MUST be here. If the OI creates Commands (which it very likely - // will), constructing it during the construction of CommandBase (from - // which commands extend), subsystems are not guaranteed to be - // yet. Thus, their requires() statements may grab null pointers. Bad - // news. Don't move it. - oi = new OI(); - - // instantiate the command used for the autonomous period - autoChooser = new SendableChooser(); - autoChooser.addDefault("Drive and Shoot", new DriveAndShootAutonomous()); - autoChooser.addObject("Drive Forward", new DriveForward()); - SmartDashboard.putData("Auto Mode", autoChooser); - - pneumatics.start(); // Pressurize the pneumatics. - } - - public void autonomousInit() { - autonomousCommand = (Command) autoChooser.getSelected(); - autonomousCommand.start(); - } - - // This function is called periodically during autonomous - public void autonomousPeriodic() { - Scheduler.getInstance().run(); - log(); - } - - public void teleopInit() { - // This makes sure that the autonomous stops running when - // teleop starts running. If you want the autonomous to - // continue until interrupted by another command, remove - // this line or comment it out. - if (autonomousCommand != null) { - autonomousCommand.cancel(); - } - } - - // This function is called periodically during operator control - public void teleopPeriodic() { - Scheduler.getInstance().run(); - log(); - } - - // This function called periodically during test mode - public void testPeriodic() { - LiveWindow.run(); - } - - public void disabledInit() { - Robot.shooter.unlatch(); - } - - // This function is called periodically while disabled - public void disabledPeriodic() { - log(); - } - - /** - * Log interesting values to the SmartDashboard. - */ - private void log() { - Robot.pneumatics.writePressure(); - SmartDashboard.putNumber("Pivot Pot Value", Robot.pivot.getAngle()); - SmartDashboard.putNumber("Left Distance", drivetrain.getLeftEncoder().getDistance()); - SmartDashboard.putNumber("Right Distance", drivetrain.getRightEncoder().getDistance()); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/CheckForHotGoal.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/CheckForHotGoal.java deleted file mode 100644 index dda0096921..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/CheckForHotGoal.java +++ /dev/null @@ -1,37 +0,0 @@ -package $package.commands; - -import $package.Robot; - -import edu.wpi.first.wpilibj.command.Command; - -/** - * This command looks for the hot goal and waits until it's detected or timed - * out. The timeout is because it's better to shoot and get some autonomous - * points than get none. When called sequentially, this command will block until - * the hot goal is detected or until it is timed out. - */ -public class CheckForHotGoal extends Command { - public CheckForHotGoal(double time) { - setTimeout(time); - } - - // Called just before this Command runs the first time - protected void initialize() {} - - // Called repeatedly when this Command is scheduled to run - protected void execute() {} - - // Make this return true when this Command no longer needs to run execute() - protected boolean isFinished() { - return isTimedOut() || Robot.shooter.goalIsHot(); - } - - // Called once after isFinished returns true - protected void end() {} - - // Called when another command which requires one or more of the same - // subsystems is scheduled to run - protected void interrupted() { - end(); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/CloseClaw.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/CloseClaw.java deleted file mode 100644 index 25529ec2cc..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/CloseClaw.java +++ /dev/null @@ -1,39 +0,0 @@ -package $package.commands; - -import $package.Robot; - -import edu.wpi.first.wpilibj.command.Command; - -/** - * Close the claw. - * - * NOTE: It doesn't wait for the claw to close since there is no sensor to - * detect that. - */ -public class CloseClaw extends Command { - - public CloseClaw() { - requires(Robot.collector); - } - - // Called just before this Command runs the first time - protected void initialize() { - Robot.collector.close(); - } - - // Called repeatedly when this Command is scheduled to run - protected void execute() { - } - - // Make this return true when this Command no longer needs to run execute() - protected boolean isFinished() { - return true; - } - - // Called once after isFinished returns true - protected void end() {} - - // Called when another command which requires one or more of the same - // subsystems is scheduled to run - protected void interrupted() {} -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/Collect.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/Collect.java deleted file mode 100644 index 96426946ba..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/Collect.java +++ /dev/null @@ -1,18 +0,0 @@ -package $package.commands; - -import $package.subsystems.Collector; -import $package.subsystems.Pivot; - -import edu.wpi.first.wpilibj.command.CommandGroup; - -/** - * Get the robot set to collect balls. - */ -public class Collect extends CommandGroup { - public Collect() { - addSequential(new SetCollectionSpeed(Collector.FORWARD)); - addParallel(new CloseClaw()); - addSequential(new SetPivotSetpoint(Pivot.COLLECT)); - addSequential(new WaitForBall()); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/DriveAndShootAutonomous.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/DriveAndShootAutonomous.java deleted file mode 100644 index a93f9fd033..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/DriveAndShootAutonomous.java +++ /dev/null @@ -1,23 +0,0 @@ -package $package.commands; - -import $package.Robot; - -import edu.wpi.first.wpilibj.command.CommandGroup; - -/** - * Drive over the line and then shoot the ball. If the hot goal is not detected, - * it will wait briefly. - */ -public class DriveAndShootAutonomous extends CommandGroup { - public DriveAndShootAutonomous() { - addSequential(new CloseClaw()); - addSequential(new WaitForPressure(), 2); - if (Robot.isReal()) { - // NOTE: Simulation doesn't currently have the concept of hot. - addSequential(new CheckForHotGoal(2)); - } - addSequential(new SetPivotSetpoint(45)); - addSequential(new DriveForward(8, 0.3)); - addSequential(new Shoot()); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/DriveForward.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/DriveForward.java deleted file mode 100644 index 7faf22a6a2..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/DriveForward.java +++ /dev/null @@ -1,58 +0,0 @@ -package $package.commands; - -import $package.Robot; - -import edu.wpi.first.wpilibj.command.Command; - -/** - * This command drives the robot over a given distance with simple proportional - * control This command will drive a given distance limiting to a maximum speed. - */ -public class DriveForward extends Command { - private double driveForwardSpeed; - private double distance; - private double error; - private final double TOLERANCE = .1; - private final double KP = -1.0 / 5.0; - - public DriveForward() { - this(10, 0.5); - } - - public DriveForward(double dist) { - this(dist, 0.5); - } - - public DriveForward(double dist, double maxSpeed) { - requires(Robot.drivetrain); - distance = dist; - driveForwardSpeed = maxSpeed; - } - - protected void initialize() { - Robot.drivetrain.getRightEncoder().reset(); - setTimeout(2); - } - - protected void execute() { - error = (distance - Robot.drivetrain.getRightEncoder().getDistance()); - if (driveForwardSpeed * KP * error >= driveForwardSpeed) { - Robot.drivetrain.tankDrive(driveForwardSpeed, driveForwardSpeed); - } else { - Robot.drivetrain.tankDrive(driveForwardSpeed * KP * error, - driveForwardSpeed * KP * error); - } - } - - protected boolean isFinished() { - return (Math.abs(error) <= TOLERANCE) || isTimedOut(); - } - - protected void end() { - Robot.drivetrain.stop(); - } - - protected void interrupted() { - end(); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/DriveWithJoystick.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/DriveWithJoystick.java deleted file mode 100644 index 2d34b8b788..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/DriveWithJoystick.java +++ /dev/null @@ -1,34 +0,0 @@ -package $package.commands; - -import $package.Robot; - -import edu.wpi.first.wpilibj.command.Command; - -/** - * This command allows PS3 joystick to drive the robot. It is always running - * except when interrupted by another command. - */ -public class DriveWithJoystick extends Command { - public DriveWithJoystick() { - requires(Robot.drivetrain); - } - - protected void initialize() { - } - - protected void execute() { - Robot.drivetrain.tankDrive(Robot.oi.getJoystick()); - } - - protected boolean isFinished() { - return false; - } - - protected void end() { - Robot.drivetrain.stop(); - } - - protected void interrupted() { - end(); - } -} \ No newline at end of file diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/ExtendShooter.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/ExtendShooter.java deleted file mode 100644 index 2d585b6921..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/ExtendShooter.java +++ /dev/null @@ -1,41 +0,0 @@ -package $package.commands; - -import $package.Robot; - -import edu.wpi.first.wpilibj.command.Command; - -/** - * Extend the shooter and then retract it after a second. - */ -public class ExtendShooter extends Command { - - public ExtendShooter() { - requires(Robot.shooter); - setTimeout(1); - } - - // Called just before this Command runs the first time - protected void initialize() { - Robot.shooter.extendBoth(); - } - - // Called repeatedly when this Command is scheduled to run - protected void execute() { - } - - // Make this return true when this Command no longer needs to run execute() - protected boolean isFinished() { - return isTimedOut(); - } - - // Called once after isFinished returns true - protected void end() { - Robot.shooter.retractBoth(); - } - - // Called when another command which requires one or more of the same - // subsystems is scheduled to run - protected void interrupted() { - end(); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/LowGoal.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/LowGoal.java deleted file mode 100644 index 5dd84f9566..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/LowGoal.java +++ /dev/null @@ -1,17 +0,0 @@ -package $package.commands; - -import $package.subsystems.Collector; -import $package.subsystems.Pivot; - -import edu.wpi.first.wpilibj.command.CommandGroup; - -/** - * Spit the ball out into the low goal assuming that the robot is in front of it. - */ -public class LowGoal extends CommandGroup { - public LowGoal() { - addSequential(new SetPivotSetpoint(Pivot.LOW_GOAL)); - addSequential(new SetCollectionSpeed(Collector.REVERSE)); - addSequential(new ExtendShooter()); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/OpenClaw.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/OpenClaw.java deleted file mode 100644 index b4eb35bcfb..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/OpenClaw.java +++ /dev/null @@ -1,36 +0,0 @@ -package $package.commands; - -import $package.Robot; - -import edu.wpi.first.wpilibj.command.Command; - -/** - * Opens the claw - */ -public class OpenClaw extends Command { - - public OpenClaw() { - requires(Robot.collector); - } - - // Called just before this Command runs the first time - protected void initialize() { - Robot.collector.open(); - } - - // Called repeatedly when this Command is scheduled to run - protected void execute() { - } - - // Make this return true when this Command no longer needs to run execute() - protected boolean isFinished() { - return Robot.collector.isOpen(); - } - - // Called once after isFinished returns true - protected void end() {} - - // Called when another command which requires one or more of the same - // subsystems is scheduled to run - protected void interrupted() {} -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/SetCollectionSpeed.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/SetCollectionSpeed.java deleted file mode 100644 index ec39826bee..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/SetCollectionSpeed.java +++ /dev/null @@ -1,39 +0,0 @@ -package $package.commands; - -import $package.Robot; - -import edu.wpi.first.wpilibj.command.Command; - -/** - * This command sets the collector rollers spinning at the given speed. Since - * there is no sensor for detecting speed, it finishes immediately. As a result, - * the spinners may still be adjusting their speed. - */ -public class SetCollectionSpeed extends Command { - private double speed; - - public SetCollectionSpeed(double speed) { - requires(Robot.collector); - this.speed = speed; - } - - // Called just before this Command runs the first time - protected void initialize() { - Robot.collector.setSpeed(speed); - } - - // Called repeatedly when this Command is scheduled to run - protected void execute() {} - - // Make this return true when this Command no longer needs to run execute() - protected boolean isFinished() { - return true; - } - - // Called once after isFinished returns true - protected void end() {} - - // Called when another command which requires one or more of the same - // subsystems is scheduled to run - protected void interrupted() {} -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/SetPivotSetpoint.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/SetPivotSetpoint.java deleted file mode 100644 index 4a1643eed6..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/SetPivotSetpoint.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package $package.commands; - -import $package.Robot; - -import edu.wpi.first.wpilibj.command.Command; - -/** - * Moves the pivot to a given angle. This command finishes when it is within - * the tolerance, but leaves the PID loop running to maintain the position. - * Other commands using the pivot should make sure they disable PID! - */ -public class SetPivotSetpoint extends Command { - private double setpoint; - - public SetPivotSetpoint(double setpoint) { - this.setpoint = setpoint; - requires(Robot.pivot); - } - - // Called just before this Command runs the first time - protected void initialize() { - Robot.pivot.enable(); - Robot.pivot.setSetpoint(setpoint); - } - - // Called repeatedly when this Command is scheduled to run - protected void execute() {} - - // Make this return true when this Command no longer needs to run execute() - protected boolean isFinished() { - return Robot.pivot.onTarget(); - } - - // Called once after isFinished returns true - protected void end() {} - - // Called when another command which requires one or more of the same - // subsystems is scheduled to run - protected void interrupted() {} -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/Shoot.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/Shoot.java deleted file mode 100644 index d08200ef28..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/Shoot.java +++ /dev/null @@ -1,17 +0,0 @@ -package $package.commands; - -import $package.subsystems.Collector; - -import edu.wpi.first.wpilibj.command.CommandGroup; - -/** - * Shoot the ball at the current angle. - */ -public class Shoot extends CommandGroup { - public Shoot() { - addSequential(new WaitForPressure()); - addSequential(new SetCollectionSpeed(Collector.STOP)); - addSequential(new OpenClaw()); - addSequential(new ExtendShooter()); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/WaitForBall.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/WaitForBall.java deleted file mode 100644 index 5684d26af9..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/WaitForBall.java +++ /dev/null @@ -1,35 +0,0 @@ -package $package.commands; - -import $package.Robot; - -import edu.wpi.first.wpilibj.command.Command; - -/** - * Wait until the collector senses that it has the ball. This command does - * nothing and is intended to be used in command groups to wait for this - * condition. - */ -public class WaitForBall extends Command { - - public WaitForBall() { - requires(Robot.collector); - } - - // Called just before this Command runs the first time - protected void initialize() {} - - // Called repeatedly when this Command is scheduled to run - protected void execute() {} - - // Make this return true when this Command no longer needs to run execute() - protected boolean isFinished() { - return Robot.collector.hasBall(); - } - - // Called once after isFinished returns true - protected void end() {} - - // Called when another command which requires one or more of the same - // subsystems is scheduled to run - protected void interrupted() {} -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/WaitForPressure.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/WaitForPressure.java deleted file mode 100644 index f1b6ab9d75..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/commands/WaitForPressure.java +++ /dev/null @@ -1,34 +0,0 @@ -package $package.commands; - -import $package.Robot; - -import edu.wpi.first.wpilibj.command.Command; - -/** - * Wait until the pneumatics are fully pressurized. This command does nothing - * and is intended to be used in command groups to wait for this condition. - */ -public class WaitForPressure extends Command { - - public WaitForPressure() { - requires(Robot.pneumatics); - } - - // Called just before this Command runs the first time - protected void initialize() {} - - // Called repeatedly when this Command is scheduled to run - protected void execute() {} - - // Make this return true when this Command no longer needs to run execute() - protected boolean isFinished() { - return Robot.pneumatics.isPressurized(); - } - - // Called once after isFinished returns true - protected void end() {} - - // Called when another command which requires one or more of the same - // subsystems is scheduled to run - protected void interrupted() {} -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/subsystems/Collector.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/subsystems/Collector.java deleted file mode 100644 index 898be2651d..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/subsystems/Collector.java +++ /dev/null @@ -1,91 +0,0 @@ -package $package.subsystems; - -import edu.wpi.first.wpilibj.DigitalInput; -import edu.wpi.first.wpilibj.Solenoid; -import edu.wpi.first.wpilibj.SpeedController; -import edu.wpi.first.wpilibj.Victor; -import edu.wpi.first.wpilibj.command.Subsystem; -import edu.wpi.first.wpilibj.livewindow.LiveWindow; - -/** - * The Collector subsystem has one motor for the rollers, a limit switch for ball - * detection, a piston for opening and closing the claw, and a reed switch to - * check if the piston is open. - */ -public class Collector extends Subsystem { - // Constants for some useful speeds - public static final double FORWARD = 1; - public static final double STOP = 0; - public static final double REVERSE = -1; - - // Subsystem devices - private SpeedController rollerMotor; - private DigitalInput ballDetector; - private Solenoid piston; - private DigitalInput openDetector; - - public Collector() { - // Configure devices - rollerMotor = new Victor(6); - ballDetector = new DigitalInput(10); - openDetector = new DigitalInput(6); - piston = new Solenoid(1, 1); - - // Put everything to the LiveWindow for testing. - LiveWindow.addActuator("Collector", "Roller Motor", (Victor) rollerMotor); - LiveWindow.addSensor("Collector", "Ball Detector", ballDetector); - LiveWindow.addSensor("Collector", "Claw Open Detector", openDetector); - LiveWindow.addActuator("Collector", "Piston", piston); - } - - /** - * NOTE: The current simulation model uses the the lower part of the claw - * since the limit switch wasn't exported. At some point, this will be - * updated. - * - * @return Whether or not the robot has the ball. - */ - public boolean hasBall() { - return ballDetector.get(); // TODO: prepend ! to reflect real robot - } - - /** - * @param speed The speed to spin the rollers. - */ - public void setSpeed(double speed) { - rollerMotor.set(-speed); - } - - /** - * Stop the rollers from spinning - */ - public void stop() { - rollerMotor.set(0); - } - - /** - * @return Whether or not the claw is open. - */ - public boolean isOpen() { - return openDetector.get(); // TODO: prepend ! to reflect real robot - } - - /** - * Open the claw up. (For shooting) - */ - public void open() { - piston.set(true); - } - - /** - * Close the claw. (For collecting and driving) - */ - public void close() { - piston.set(false); - } - - /** - * No default command. - */ - @Override protected void initDefaultCommand() {} -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/subsystems/DriveTrain.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/subsystems/DriveTrain.java deleted file mode 100644 index e6c9e11159..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/subsystems/DriveTrain.java +++ /dev/null @@ -1,127 +0,0 @@ -package $package.subsystems; - -import $package.Robot; -import $package.commands.DriveWithJoystick; - -import edu.wpi.first.wpilibj.AnalogGyro; -import edu.wpi.first.wpilibj.CounterBase.EncodingType; -import edu.wpi.first.wpilibj.Encoder; -import edu.wpi.first.wpilibj.Joystick; -import edu.wpi.first.wpilibj.PIDSource.PIDSourceParameter; -import edu.wpi.first.wpilibj.RobotDrive; -import edu.wpi.first.wpilibj.SpeedController; -import edu.wpi.first.wpilibj.Victor; -import edu.wpi.first.wpilibj.command.Subsystem; -import edu.wpi.first.wpilibj.livewindow.LiveWindow; - -/** - * The DriveTrain subsystem controls the robot's chassis and reads in - * information about it's speed and position. - */ -public class DriveTrain extends Subsystem { - // Subsystem devices - private SpeedController frontLeftCIM, frontRightCIM; - private SpeedController backLeftCIM, backRightCIM; - private RobotDrive drive; - private Encoder rightEncoder, leftEncoder; - private AnalogGyro gyro; - - public DriveTrain() { - // Configure drive motors - frontLeftCIM = new Victor(1); - frontRightCIM = new Victor(2); - backLeftCIM = new Victor(3); - backRightCIM = new Victor(4); - LiveWindow.addActuator("DriveTrain", "Front Left CIM", (Victor) frontLeftCIM); - LiveWindow.addActuator("DriveTrain", "Front Right CIM", (Victor) frontRightCIM); - LiveWindow.addActuator("DriveTrain", "Back Left CIM", (Victor) backLeftCIM); - LiveWindow.addActuator("DriveTrain", "Back Right CIM", (Victor) backRightCIM); - - // Configure the RobotDrive to reflect the fact that all our motors are - // wired backwards and our drivers sensitivity preferences. - drive = new RobotDrive(frontLeftCIM, backLeftCIM, frontRightCIM, backRightCIM); - drive.setSafetyEnabled(true); - drive.setExpiration(0.1); - drive.setSensitivity(0.5); - drive.setMaxOutput(1.0); - drive.setInvertedMotor(RobotDrive.MotorType.kFrontLeft, true); - drive.setInvertedMotor(RobotDrive.MotorType.kRearLeft, true); - drive.setInvertedMotor(RobotDrive.MotorType.kFrontRight, true); - drive.setInvertedMotor(RobotDrive.MotorType.kRearRight, true); - - // Configure encoders - rightEncoder = new Encoder(1, 2, true, EncodingType.k4X); - leftEncoder = new Encoder(3, 4, false, EncodingType.k4X); - rightEncoder.setPIDSourceParameter(PIDSourceParameter.kDistance); - leftEncoder.setPIDSourceParameter(PIDSourceParameter.kDistance); - - if (Robot.isReal()) { // Converts to feet - rightEncoder.setDistancePerPulse(0.0785398); - leftEncoder.setDistancePerPulse(0.0785398); - } else { // Convert to feet 4in diameter wheels with 360 tick simulated encoders - rightEncoder.setDistancePerPulse((4.0/*in*/*Math.PI)/(360.0*12.0/*in/ft*/)); - leftEncoder.setDistancePerPulse((4.0/*in*/*Math.PI)/(360.0*12.0/*in/ft*/)); - } - - LiveWindow.addSensor("DriveTrain", "Right Encoder", rightEncoder); - LiveWindow.addSensor("DriveTrain", "Left Encoder", leftEncoder); - - // Configure gyro - gyro = new AnalogGyro(2); - if (Robot.isReal()) { - gyro.setSensitivity(0.007); // TODO: Handle more gracefully? - } - LiveWindow.addSensor("DriveTrain", "Gyro", gyro); - } - - /** - * When other commands aren't using the drivetrain, allow tank drive with - * the joystick. - */ - public void initDefaultCommand() { - setDefaultCommand(new DriveWithJoystick()); - } - - /** - * @param joy PS3 style joystick to use as the input for tank drive. - */ - public void tankDrive(Joystick joy) { - drive.tankDrive(joy.getY(), joy.getRawAxis(4)); - } - - /** - * @param leftAxis Left sides value - * @param rightAxis Right sides value - */ - public void tankDrive(double leftAxis, double rightAxis) { - drive.tankDrive(leftAxis, rightAxis); - } - - /** - * Stop the drivetrain from moving. - */ - public void stop() { - drive.tankDrive(0, 0); - } - - /** - * @return The encoder getting the distance and speed of left side of the drivetrain. - */ - public Encoder getLeftEncoder() { - return leftEncoder; - } - - /** - * @return The encoder getting the distance and speed of right side of the drivetrain. - */ - public Encoder getRightEncoder() { - return rightEncoder; - } - - /** - * @return The current angle of the drivetrain. - */ - public double getAngle() { - return gyro.getAngle(); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/subsystems/Pivot.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/subsystems/Pivot.java deleted file mode 100644 index fee1cf5b94..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/subsystems/Pivot.java +++ /dev/null @@ -1,94 +0,0 @@ -package $package.subsystems; - -import $package.Robot; - -import edu.wpi.first.wpilibj.*; -import edu.wpi.first.wpilibj.command.PIDSubsystem; -import edu.wpi.first.wpilibj.interfaces.Potentiometer; -import edu.wpi.first.wpilibj.livewindow.LiveWindow; - -/** - * The Pivot subsystem contains the Van-door motor and the pot for PID control - * of angle of the pivot and claw. - */ -public class Pivot extends PIDSubsystem { - // Constants for some useful angles - public static final double COLLECT = 105; - public static final double LOW_GOAL = 90; - public static final double SHOOT = 45; - public static final double SHOOT_NEAR = 30; - - // Subsystem devices - private DigitalInput upperLimitSwitch; - private DigitalInput lowerLimitSwitch; - private Potentiometer pot; - private SpeedController motor; - - public Pivot() { - super("Pivot", 7.0, 0.0, 8.0); - setAbsoluteTolerance(0.005); - getPIDController().setContinuous(false); - if (Robot.isSimulation()) { // PID is different in simulation. - getPIDController().setPID(0.5, 0.001, 2); - setAbsoluteTolerance(5); - } - - // Motor to move the pivot. - motor = new Victor(5); - - // Sensors for measuring the position of the pivot. - upperLimitSwitch = new DigitalInput(13); - lowerLimitSwitch = new DigitalInput(12); - - // 0 degrees is vertical facing up. - // Angle increases the more forward the pivot goes. - pot = new AnalogPotentiometer(1); - - // Put everything to the LiveWindow for testing. - LiveWindow.addSensor("Pivot", "Upper Limit Switch", upperLimitSwitch); - LiveWindow.addSensor("Pivot", "Lower Limit Switch", lowerLimitSwitch); - LiveWindow.addSensor("Pivot", "Pot", (AnalogPotentiometer) pot); - LiveWindow.addActuator("Pivot", "Motor", (Victor) motor); - LiveWindow.addActuator("Pivot", "PIDSubsystem Controller", getPIDController()); - } - - /** - * No default command, if PID is enabled, the current setpoint will be maintained. - */ - public void initDefaultCommand() {} - - /** - * @return The angle read in by the potentiometer - */ - protected double returnPIDInput() { - return pot.get(); - } - - /** - * Set the motor speed based off of the PID output - */ - protected void usePIDOutput(double output) { - motor.pidWrite(output); - } - - /** - * @return If the pivot is at its upper limit. - */ - public boolean isAtUpperLimit() { - return upperLimitSwitch.get(); // TODO: inverted from real robot (prefix with !) - } - - /** - * @return If the pivot is at its lower limit. - */ - public boolean isAtLowerLimit() { - return lowerLimitSwitch.get(); // TODO: inverted from real robot (prefix with !) - } - - /** - * @return The current angle of the pivot. - */ - public double getAngle() { - return pot.get(); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/subsystems/Pneumatics.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/subsystems/Pneumatics.java deleted file mode 100644 index dd6c4a815d..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/subsystems/Pneumatics.java +++ /dev/null @@ -1,61 +0,0 @@ -package $package.subsystems; - -import $package.Robot; - -import edu.wpi.first.wpilibj.*; -import edu.wpi.first.wpilibj.command.Subsystem; -import edu.wpi.first.wpilibj.livewindow.LiveWindow; -import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; - -/** - * The Pneumatics subsystem contains the compressor and a pressure sensor. - * - * NOTE: The simulator currently doesn't support the compressor or pressure sensors. - */ -public class Pneumatics extends Subsystem { - AnalogInput pressureSensor; - Compressor compressor; - - private static final double MAX_PRESSURE = 2.55; - - public Pneumatics() { - pressureSensor = new AnalogInput(3); - if (Robot.isReal()) { - compressor = new Compressor(); - } - - LiveWindow.addSensor("Pneumatics", "Pressure Sensor", pressureSensor); - } - - /** - * No default command - */ - public void initDefaultCommand() {} - - /** - * Start the compressor going. The compressor automatically starts and stops as it goes above and below maximum pressure. - */ - public void start() { - if (Robot.isReal()) { - compressor.start(); - } - } - - /** - * @return Whether or not the system is fully pressurized. - */ - public boolean isPressurized() { - if (Robot.isReal()) { - return MAX_PRESSURE <= pressureSensor.getVoltage(); - } else { - return true; // NOTE: Simulation always has full pressure - } - } - - /** - * Puts the pressure on the SmartDashboard. - */ - public void writePressure() { - SmartDashboard.putNumber("Pressure", pressureSensor.getVoltage()); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/subsystems/Shooter.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/subsystems/Shooter.java deleted file mode 100644 index 67ffcda623..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/subsystems/Shooter.java +++ /dev/null @@ -1,166 +0,0 @@ -package $package.subsystems; - -import edu.wpi.first.wpilibj.DigitalInput; -import edu.wpi.first.wpilibj.DoubleSolenoid; -import edu.wpi.first.wpilibj.Solenoid; -import edu.wpi.first.wpilibj.command.Subsystem; -import edu.wpi.first.wpilibj.livewindow.LiveWindow; - -/** - * The Shooter subsystem handles shooting. The mechanism for shooting is - * slightly complicated because it has to pneumatic cylinders for shooting, and - * a third latch to allow the pressure to partially build up and reduce the - * effect of the airflow. For shorter shots, when full power isn't needed, only - * one cylinder fires. - * - * NOTE: Simulation currently approximates this as as single pneumatic cylinder - * and ignores the latch. - */ -public class Shooter extends Subsystem { - // Devices - DoubleSolenoid piston1; - DoubleSolenoid piston2; - Solenoid latchPiston; - DigitalInput piston1ReedSwitchFront; - DigitalInput piston1ReedSwitchBack; - DigitalInput hotGoalSensor; // NOTE: Currently ignored in simulation - - public Shooter() { - // Configure Devices - hotGoalSensor = new DigitalInput(3); - piston1 = new DoubleSolenoid(1, 3, 4); - piston2 = new DoubleSolenoid(1, 5, 6); - latchPiston = new Solenoid(1, 2); - piston1ReedSwitchFront = new DigitalInput(9); - piston1ReedSwitchBack = new DigitalInput(11); - - // Put everything to the LiveWindow for testing. - LiveWindow.addSensor("Shooter", "Hot Goal Sensor", hotGoalSensor); - LiveWindow.addSensor("Shooter", "Piston1 Reed Switch Front ", - piston1ReedSwitchFront); - LiveWindow.addSensor("Shooter", "Piston1 Reed Switch Back ", - piston1ReedSwitchBack); - LiveWindow.addActuator("Shooter", "Latch Piston", latchPiston); - } - - /** - * No default command. - */ - public void initDefaultCommand() {} - - /** - * Extend both solenoids to shoot. - */ - public void extendBoth() { - piston1.set(DoubleSolenoid.Value.kForward); - piston2.set(DoubleSolenoid.Value.kForward); - } - - /** - * Retract both solenoids to prepare to shoot. - */ - public void retractBoth() { - piston1.set(DoubleSolenoid.Value.kReverse); - piston2.set(DoubleSolenoid.Value.kReverse); - } - - /** - * Extend solenoid 1 to shoot. - */ - public void extend1() { - piston1.set(DoubleSolenoid.Value.kForward); - } - - /** - * Retract solenoid 1 to prepare to shoot. - */ - public void retract1() { - piston1.set(DoubleSolenoid.Value.kReverse); - } - - /** - * Extend solenoid 2 to shoot. - */ - public void extend2() { - piston2.set(DoubleSolenoid.Value.kReverse); - } - - /** - * Retract solenoid 2 to prepare to shoot. - */ - public void retract2() { - piston2.set(DoubleSolenoid.Value.kForward); - } - - /** - * Turns off the piston1 double solenoid. This won't actuate anything - * because double solenoids preserve their state when turned off. This - * should be called in order to reduce the amount of time that the coils are - * powered. - */ - public void off1() { - piston1.set(DoubleSolenoid.Value.kOff); - } - - /** - * Turns off the piston1 double solenoid. This won't actuate anything - * because double solenoids preserve their state when turned off. This - * should be called in order to reduce the amount of time that the coils are - * powered. - */ - public void off2() { - piston2.set(DoubleSolenoid.Value.kOff); - } - - /** - * Release the latch so that we can shoot - */ - public void unlatch() { - latchPiston.set(true); - } - - /** - * Latch so that pressure can build up and we aren't limited by air flow. - */ - public void latch() { - latchPiston.set(false); - } - - /** - * Toggles the latch postions - */ - public void toggleLatchPosition() { - latchPiston.set(!latchPiston.get()); - } - - /** - * @return Whether or not piston 1 is fully extended. - */ - public boolean piston1IsExtended() { - return !piston1ReedSwitchFront.get(); - } - - /** - * @return Whether or not piston 1 is fully retracted. - */ - public boolean piston1IsRetracted() { - return !piston1ReedSwitchBack.get(); - } - - /** - * Turns off all double solenoids. Double solenoids hold their position when - * they are turned off. We should turn them off whenever possible to extend - * the life of the coils - */ - public void offBoth() { - piston1.set(DoubleSolenoid.Value.kOff); - piston2.set(DoubleSolenoid.Value.kOff); - } - - /** - * @return Whether or not the goal is hot as read by the banner sensor - */ - public boolean goalIsHot() { - return hotGoalSensor.get(); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/triggers/DoubleButton.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/triggers/DoubleButton.java deleted file mode 100644 index 773ae627e9..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PacGoat/src/org/usfirst/frc/team190/pacgoat/triggers/DoubleButton.java +++ /dev/null @@ -1,23 +0,0 @@ -package $package.triggers; - -import edu.wpi.first.wpilibj.Joystick; -import edu.wpi.first.wpilibj.buttons.*; - -/** - * A custom button that is triggered when two buttons on a Joystick are - * simultaneously pressed. - */ -public class DoubleButton extends Trigger { - private Joystick joy; - private int button1, button2; - - public DoubleButton(Joystick joy, int button1, int button2) { - this.joy = joy; - this.button1 = button1; - this.button2 = button2; - } - - public boolean get() { - return joy.getRawButton(button1) && joy.getRawButton(button2); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/Potentiometer/src/org/usfirst/frc/team190/robot/Robot.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/Potentiometer/src/org/usfirst/frc/team190/robot/Robot.java deleted file mode 100644 index c95388981a..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/Potentiometer/src/org/usfirst/frc/team190/robot/Robot.java +++ /dev/null @@ -1,83 +0,0 @@ - -package $package; - -import edu.wpi.first.wpilibj.AnalogInput; -import edu.wpi.first.wpilibj.SampleRobot; -import edu.wpi.first.wpilibj.Joystick; -import edu.wpi.first.wpilibj.Victor; - -/** - * This is a sample program to demonstrate the use of a soft potentiometer and proportional - * control to reach and maintain position setpoints on an elevator mechanism. A joystick - * button is used to switch elevator setpoints. - * - * WARNING: While it may look like a good choice to use for your code if you're inexperienced, - * don't. Unless you know what you are doing, complex code will be much more difficult under - * this system. Use IterativeRobot or Command-Based instead if you're new. - */ -public class Robot extends SampleRobot { - final int potChannel = 1; //analog input pin - final int motorChannel = 7; //PWM channel - final int joystickChannel = 0; //usb number in DriverStation - final int buttonNumber = 4; //joystick button - - final double setpoints[] = {1.0, 2.6, 4.3}; //bottom, middle, and top elevator setpoints - - final double pGain = 1.0; //proportional speed constant - double motorSpeed; - double currentPosition; //sensor voltage reading corresponding to current elevator position - - AnalogInput potentiometer; - Victor elevatorMotor; - Joystick joystick; - - public Robot() { - //make objects for the potentiometer, elevator motor controller, and joystick - potentiometer = new AnalogInput(potChannel); - elevatorMotor = new Victor(motorChannel); - joystick = new Joystick(joystickChannel); - } - - /** - * Runs during autonomous. - */ - public void autonomous() { - - } - - /** - * Moves elevator to a selectable setpoint that can be changed by pressing a button on - * the joystick. Proportional control is used to reach and maintain the desired setpoint - * by obtaining values from the potentiometer and comparing them to the setpoint value. - */ - public void operatorControl() { - boolean buttonState; - boolean prevButtonState = false; - - int index = 0; //setpoint array index - double currentSetpoint; //holds desired setpoint - currentSetpoint = setpoints[0]; //set to first setpoint - - while (isOperatorControl() && isEnabled()) { - buttonState = joystick.getRawButton(buttonNumber); //check if button is pressed - - //if button has been pressed and released once - if(buttonState && !prevButtonState) { - index = (index + 1) % setpoints.length; //increment set point, reset if at end of array - currentSetpoint = setpoints[index]; //set setpoint - } - prevButtonState = buttonState; //record previous button state - - currentPosition = potentiometer.getAverageVoltage(); //get position value - motorSpeed = (currentPosition - currentSetpoint)*pGain; //convert position error to speed - elevatorMotor.set(motorSpeed); //drive elevator motor - } - } - - /** - * Runs during test mode - */ - public void test() { - - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PotentiometerPID/src/org/usfirst/frc/team190/robot/Robot.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PotentiometerPID/src/org/usfirst/frc/team190/robot/Robot.java deleted file mode 100644 index b45781c67f..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/PotentiometerPID/src/org/usfirst/frc/team190/robot/Robot.java +++ /dev/null @@ -1,85 +0,0 @@ - -package $package; - -import edu.wpi.first.wpilibj.AnalogInput; -import edu.wpi.first.wpilibj.PIDController; -import edu.wpi.first.wpilibj.SampleRobot; -import edu.wpi.first.wpilibj.Joystick; -import edu.wpi.first.wpilibj.Victor; - -/** - * This is a sample program to demonstrate how to use a soft potentiometer and a PID - * controller to reach and maintain position setpoints on an elevator mechanism. - * - * WARNING: While it may look like a good choice to use for your code if you're inexperienced, - * don't. Unless you know what you are doing, complex code will be much more difficult under - * this system. Use IterativeRobot or Command-Based instead if you're new. - */ -public class Robot extends SampleRobot { - final int potChannel = 1; //analog input pin - final int motorChannel = 7; //PWM channel - final int joystickChannel = 0; //usb number in DriverStation - final int buttonNumber = 4; //button on joystick - - final double setPoints[] = {1.0, 2.6, 4.3}; //bottom, middle, and top elevator setpoints - - //proportional, integral, and derivative speed constants; motor inverted - //DANGER: when tuning PID constants, high/inappropriate values for pGain, iGain, - //and dGain may cause dangerous, uncontrollable, or undesired behavior! - final double pGain = -5.0, iGain = -0.02, dGain = -2.0; //these may need to be positive for a non-inverted motor - - PIDController pidController; - AnalogInput potentiometer; - Victor elevatorMotor; - Joystick joystick; - - public Robot() { - //make objects for potentiometer, the elevator motor controller, and the joystick - potentiometer = new AnalogInput(potChannel); - elevatorMotor = new Victor(motorChannel); - joystick = new Joystick(joystickChannel); - - //potentiometer (AnalogInput) and elevatorMotor (Victor) can be used as a - //PIDSource and PIDOutput respectively - pidController = new PIDController(pGain, iGain, dGain, potentiometer, elevatorMotor); - } - - /** - * Runs during autonomous. - */ - public void autonomous() { - - } - - /** - * Uses a PIDController and an array of setpoints to switch and maintain elevator - * positions. The elevator setpoint is selected by a joystick button. - */ - public void operatorControl() { - pidController.setInputRange(0, 5); //0 to 5V - pidController.setSetpoint(setPoints[0]); //set to first setpoint - - int index = 0; - boolean currentValue; - boolean previousValue = false; - - while (isOperatorControl() && isEnabled()) { - pidController.enable(); //begin PID control - - //when the button is pressed once, the selected elevator setpoint is incremented - currentValue = joystick.getRawButton(buttonNumber); - if(currentValue && !previousValue){ - pidController.setSetpoint(setPoints[index]); - index = (index + 1) % setPoints.length; //index of elevator setpoint wraps around - } - previousValue = currentValue; - } - } - - /** - * Runs during test mode. - */ - public void test() { - - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/QuickVision/src/org/usfirst/frc/team190/robot/Robot.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/QuickVision/src/org/usfirst/frc/team190/robot/Robot.java deleted file mode 100755 index bc7835bfd1..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/QuickVision/src/org/usfirst/frc/team190/robot/Robot.java +++ /dev/null @@ -1,35 +0,0 @@ -package $package; - -import edu.wpi.first.wpilibj.CameraServer; -import edu.wpi.first.wpilibj.SampleRobot; -import edu.wpi.first.wpilibj.Timer; - -/** - * This is a demo program showing the use of the CameraServer class. - * With start automatic capture, there is no opportunity to process the image. - * Look at the IntermediateVision sample for how to process the image before sending it to the FRC PC Dashboard. - */ -public class Robot extends SampleRobot { - - CameraServer server; - - public Robot() { - server = CameraServer.getInstance(); - server.setQuality(50); - //the camera name (ex "cam0") can be found through the roborio web interface - server.startAutomaticCapture("cam0"); - } - - /** - * start up automatic capture you should see the video stream from the - * webcam in your FRC PC Dashboard. - */ - public void operatorControl() { - - while (isOperatorControl() && isEnabled()) { - /** robot code here! **/ - Timer.delay(0.005); // wait for a motor update time - } - } - -} \ No newline at end of file diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/TankDrive/src/org/usfirst/frc/team190/robot/Robot.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/TankDrive/src/org/usfirst/frc/team190/robot/Robot.java deleted file mode 100755 index 3af139b29f..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/TankDrive/src/org/usfirst/frc/team190/robot/Robot.java +++ /dev/null @@ -1,46 +0,0 @@ -package $package; - - -import edu.wpi.first.wpilibj.SampleRobot; -import edu.wpi.first.wpilibj.RobotDrive; -import edu.wpi.first.wpilibj.Joystick; -import edu.wpi.first.wpilibj.Timer; - -/** - * This is a demo program showing the use of the RobotDrive class, specifically it - * contains the code necessary to operate a robot with tank drive. - * - * The VM is configured to automatically run this class, and to call the - * functions corresponding to each mode, as described in the SampleRobot - * documentation. If you change the name of this class or the package after - * creating this project, you must also update the manifest file in the resource - * directory. - * - * WARNING: While it may look like a good choice to use for your code if you're inexperienced, - * don't. Unless you know what you are doing, complex code will be much more difficult under - * this system. Use IterativeRobot or Command-Based instead if you're new. - */ -public class Robot extends SampleRobot { - RobotDrive myRobot; // class that handles basic drive operations - Joystick leftStick; // set to ID 1 in DriverStation - Joystick rightStick; // set to ID 2 in DriverStation - public Robot() { - myRobot = new RobotDrive(0, 1); - myRobot.setExpiration(0.1); - leftStick = new Joystick(0); - rightStick = new Joystick(1); - } - - - /** - * Runs the motors with tank steering. - */ - public void operatorControl() { - myRobot.setSafetyEnabled(true); - while (isOperatorControl() && isEnabled()) { - myRobot.tankDrive(leftStick, rightStick); - Timer.delay(0.005); // wait for a motor update time - } - } - -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/Ultrasonic/src/org/usfirst/frc/team190/robot/Robot.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/Ultrasonic/src/org/usfirst/frc/team190/robot/Robot.java deleted file mode 100644 index 79940f5501..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/Ultrasonic/src/org/usfirst/frc/team190/robot/Robot.java +++ /dev/null @@ -1,69 +0,0 @@ - -package $package; - -import edu.wpi.first.wpilibj.CANTalon; -import edu.wpi.first.wpilibj.SampleRobot; -import edu.wpi.first.wpilibj.RobotDrive; -import edu.wpi.first.wpilibj.AnalogInput; - -/** - * This is a sample program demonstrating how to use an ultrasonic sensor and proportional - * control to maintain a set distance from an object. - * - * WARNING: While it may look like a good choice to use for your code if you're inexperienced, - * don't. Unless you know what you are doing, complex code will be much more difficult under - * this system. Use IterativeRobot or Command-Based instead if you're new. - */ - -public class Robot extends SampleRobot { - AnalogInput ultrasonic; //ultrasonic sensor - RobotDrive myRobot; - - final int ultrasonicChannel = 3; //analog input pin - - //channels for motors - final int leftMotorChannel = 1; - final int rightMotorChannel = 0; - final int leftRearMotorChannel = 3; - final int rightRearMotorChannel = 2; - - int holdDistance = 12; //distance in inches the robot wants to stay from an object - final double valueToInches = 0.125; //factor to convert sensor values to a distance in inches - final double pGain = 0.05; //proportional speed constant - - - public Robot() { - //make objects for the sensor and the drive train - ultrasonic = new AnalogInput(ultrasonicChannel); - myRobot = new RobotDrive(new CANTalon(leftMotorChannel), new CANTalon(leftRearMotorChannel), - new CANTalon(rightMotorChannel), new CANTalon(rightRearMotorChannel)); - } - - /** - * Runs during autonomous. - */ - public void autonomous() { - - } - - /** - * Tells the robot to drive to a set distance (in inches) from an object using proportional control. - */ - public void operatorControl() { - - double currentDistance; //distance measured from the ultrasonic sensor values - double currentSpeed; //speed to set the drive train motors - - while (isOperatorControl() && isEnabled()) { - currentDistance = ultrasonic.getValue()*valueToInches; //sensor returns a value from 0-4095 that is scaled to inches - currentSpeed = (holdDistance - currentDistance)*pGain; //convert distance error to a motor speed - myRobot.drive(currentSpeed, 0); //drive robot - } - } - - /** - * Runs during test mode - */ - public void test() { - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/UltrasonicPID/src/org/usfirst/frc/team190/robot/Robot.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/UltrasonicPID/src/org/usfirst/frc/team190/robot/Robot.java deleted file mode 100644 index 45f39ea185..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/UltrasonicPID/src/org/usfirst/frc/team190/robot/Robot.java +++ /dev/null @@ -1,89 +0,0 @@ - -package $package; - -import edu.wpi.first.wpilibj.AnalogInput; -import edu.wpi.first.wpilibj.CANTalon; -import edu.wpi.first.wpilibj.PIDOutput; -import edu.wpi.first.wpilibj.SampleRobot; -import edu.wpi.first.wpilibj.RobotDrive; -import edu.wpi.first.wpilibj.PIDController; - -/** - * This is a sample program to demonstrate the use of a PID Controller with an ultrasonic - * sensor to reach and maintain a set distance from an object. - * - * WARNING: While it may look like a good choice to use for your code if you're inexperienced, - * don't. Unless you know what you are doing, complex code will be much more difficult under - * this system. Use IterativeRobot or Command-Based instead if you're new. - */ -public class Robot extends SampleRobot { - AnalogInput ultrasonic; //ultrasonic sensor - RobotDrive myRobot; - PIDController pidController; - - final int ultrasonicChannel = 3; //analog input - - //channels for motors - final int leftMotorChannel = 1; - final int rightMotorChannel = 0; - final int leftRearMotorChannel = 3; - final int rightRearMotorChannel = 2; - - int holdDistance = 12; //distance in inches the robot wants to stay from an object - - //proportional, integral, and derivative speed constants - //DANGER: when tuning PID constants, high/inappropriate values for pGain, iGain, - //and dGain may cause dangerous, uncontrollable, or undesired behavior! - final double pGain = 7, iGain = .018, dGain = 1.5; - - //conversion factor specific to the sensor being used. For this sensor, - //the sensor returned values from 0.0V to 5.0V with a resolution of 9.8mV/in. - final double VoltsToInches = 0.0098; - - //internal class to write to myRobot (a RobotDrive object) using a PIDOutput - public class MyPIDOutput implements PIDOutput { - @Override - public void pidWrite(double output) { - myRobot.drive(output, 0); //drive robot from PID output - } - } - - public Robot() { - //make objects for the sensor and drive train - ultrasonic = new AnalogInput(ultrasonicChannel); - myRobot = new RobotDrive(new CANTalon(leftMotorChannel), new CANTalon(leftRearMotorChannel), - new CANTalon(rightMotorChannel), new CANTalon(rightRearMotorChannel)); - - //ultrasonic (AnalogInput) can be used as a PIDSource without modification, - //PIDOutput is an instance of the internal class MyPIDOutput made earlier - pidController = new PIDController(pGain, iGain, dGain, ultrasonic, new MyPIDOutput()); - } - - /** - * Runs during autonomous. - */ - public void autonomous() { - } - - /** - * Drives the robot a set distance from an object using PID control and the - * ultrasonic sensor. - */ - public void operatorControl() { - pidController.setSetpoint(holdDistance*VoltsToInches); //set setpoint to 12 inches - - //Set expected range to 0-24 inches; e.g. at 24 inches from object go - //full forward, at 0 inches from object go full backward. - pidController.setInputRange(0, 24*VoltsToInches); - - while (isOperatorControl() && isEnabled()) { - pidController.enable(); //begin PID control - } - } - - /** - * Runs during test mode - */ - public void test() { - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/examples.xml b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/examples.xml deleted file mode 100755 index ebe02c943b..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/examples/examples.xml +++ /dev/null @@ -1,511 +0,0 @@ - - - - - Getting Started with Java - Examples for getting started with FRC Java - - - - Actuators - Example programs that demonstrate the use of various actuators - - - - Analog - Examples programs that show different uses of analog inputs, - outputs and various analog sensors - - - - CAN - Example programs that demonstrate the use of the CAN components in the control system - - - - Complete List - Complete list of all sample programs across all categories - - - - Digital - Example programs that demonstrate the sensors that use the digital I/O ports - - - - I2C - Example programs that demonstrate the use of I2C and various sensors that use it - - - - Joystick - Example programs that demonstate different uses of joysticks for robot driving - - - - Pneumatics - Example programs that demonstrate the use of the compressor and solenoids - - - - Robot and Motor - Example programs that demonstrate driving a robot and motors including safety, servos, etc. - - - - SPI - Example programs that demonstrate the use of the SPI bus and sensors that connect to it - - - - Safety - Example programs that demonstate the motor safety classes and how to use them with your programs - - - - Sensors - Example programs that demonstrate the use of the various commonly used sensors on FRC robots - - - - Vision - Example programs that demonstrate the use of USB Cameras and image processing - - - - Getting Started - An example program which demonstrates the simplest autonomous and - teleoperated routines. - - Getting Started with Java - Complete List - - - src/$package-dir - - - - - - - - Tank Drive - Demonstrate the use of the RobotDrive class doing teleop driving with tank steering - - Actuators - Complete List - Joystick - Robot and Motor - Safety - - - src/$package-dir - - - - - - - - Mecanum Drive - Demonstrate the use of the RobotDrive class doing teleop driving with Mecanum steering - - Actuators - Complete List - Joystick - Robot and Motor - Safety - - - src/$package-dir - - - - - - - - - Ultrasonic - Demonstrate maintaining a set distance using an ultrasonic sensor. - - Sensors - Complete List - Robot and Motor - CAN - Analog - - - src/$package-dir - - - - - - - - - Ultrasonic PID - Demonstrate maintaining a set distance using an ultrasonic sensor and PID Control. - - Sensors - Complete List - Robot and Motor - CAN - Analog - - - src/$package-dir - - - - - - - - - Potentiometer PID - An example to demonstrate the use of a potentiometer and PID control to reach elevator position setpoints. - - Sensors - Complete List - Actuators - Analog - Joystick - - - src/$package-dir - - - - - - - - - Potentiometer - An example to demonstrate the use of a potentiometer and basic proportional control to reach elevator position setpoints. - - Sensors - Complete List - Actuators - Analog - Joystick - - - src/$package-dir - - - - - - - - - Gyro - An example program showing how to drive straight with using a gyro sensor. - - Sensors - Complete List - Robot and Motor - CAN - Analog - Joystick - - - src/$package-dir - - - - - - - - - Gyro Mecanum - An example program showing how to perform mecanum drive with field oriented controls. - - Sensors - Complete List - Robot and Motor - CAN - Analog - Joystick - - - src/$package-dir - - - - - - - - - Motor Controller - Demonstrate controlling a single motor with a joystick - - Actuators - Complete List - Joystick - Robot and Motor - - - src/$package-dir - - - - - - - - CAN Talon SRX - Demonstrate running a Talon SRX with the basic throttle mode. - - Actuators - Complete List - Robot and Motor - - - src/$package-dir - - - - - - - - CAN Talon SRX PID - Demonstrate running a Talon SRX with PID Closed Loop control. - - Actuators - Complete List - Robot and Motor - - - src/$package-dir - - - - - - - - - CommandBased Robot - Examples for CommandBased robot programs. - - - - GearsBot - A fully functional example CommandBased program for WPIs GearsBot robot. This code can run on your computer if it supports simulation. - - CommandBased Robot - - /usr/share/frcsim/worlds/GearsBotDemo.world - - src/$package-dir - src/$package-dir/commands - src/$package-dir/subsystems - - - - - - - - - - - - - - - - - - - - - - - - PacGoat - A fully functional example CommandBased program for FRC Team 190's 2014 robot. This code can run on your computer if it supports simulation. - - CommandBased Robot - - /usr/share/frcsim/worlds/PacGoat2014.world - - src/$package-dir - src/$package-dir/commands - src/$package-dir/subsystems - src/$package-dir/triggers - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Simple Vision - Demonstrate the use of the CameraServer class to stream from a USB Webcam without processing the images. - - Vision - Complete List - - - src/$package-dir - - - - - - - - Intermediate Vision - Demonstrate the use of the NIVision class to capture image from a Webcam, process them, and then send them to the dashboard. - - Vision - Complete List - - - src/$package-dir - - - - - - - - 2015 Vision Color Sample - An example program that demonstrates image processing to locate Yellow totes by color. - This example uses a file which must be copied over to the roboRIO via FTP to demonstrate processing. - To use this code with a camera, you must integrate the code for image acquisition from the appropriate - camera example; - - - Vision - Complete List - - - src/$package-dir - - - - - - - - 2015 Vision Retro Sample - An example program that demonstrates image processing to locate Yellow totes by the retroreflective target. - This example uses a file which must be copied over to the roboRIO via FTP to demonstrate processing. - To use this code with a camera, you must integrate the code for image acquisition from the appropriate - camera example; - - - Vision - Complete List - - - src/$package-dir - - - - - - - - Axis Camera Sample - An example program that acquires images from an Axis network camera and adds some - annotation to the image as you might do for showing operators the result of some image - recognition, and sends it to the dashboard for display. This demonstrates the use of the - AxisCamera class. - - - Vision - Complete List - - - src/$package-dir - - - - - - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/iterative/Robot.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/iterative/Robot.java deleted file mode 100644 index b59c24f886..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/iterative/Robot.java +++ /dev/null @@ -1,43 +0,0 @@ - -package $package; - -import edu.wpi.first.wpilibj.IterativeRobot; - -/** - * The VM is configured to automatically run this class, and to call the - * functions corresponding to each mode, as described in the IterativeRobot - * documentation. If you change the name of this class or the package after - * creating this project, you must also update the manifest file in the resource - * directory. - */ -public class Robot extends IterativeRobot { - /** - * This function is run when the robot is first started up and should be - * used for any initialization code. - */ - public void robotInit() { - - } - - /** - * This function is called periodically during autonomous - */ - public void autonomousPeriodic() { - - } - - /** - * This function is called periodically during operator control - */ - public void teleopPeriodic() { - - } - - /** - * This function is called periodically during test mode - */ - public void testPeriodic() { - - } - -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/sample/Robot.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/sample/Robot.java deleted file mode 100644 index 9bed59e805..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/resources/templates/sample/Robot.java +++ /dev/null @@ -1,62 +0,0 @@ - -package $package; - - -import edu.wpi.first.wpilibj.SampleRobot; -import edu.wpi.first.wpilibj.RobotDrive; -import edu.wpi.first.wpilibj.Joystick; -import edu.wpi.first.wpilibj.Timer; - -/** - * This is a demo program showing the use of the RobotDrive class. - * The SampleRobot class is the base of a robot application that will automatically call your - * Autonomous and OperatorControl methods at the right time as controlled by the switches on - * the driver station or the field controls. - * - * The VM is configured to automatically run this class, and to call the - * functions corresponding to each mode, as described in the SampleRobot - * documentation. If you change the name of this class or the package after - * creating this project, you must also update the manifest file in the resource - * directory. - * - * WARNING: While it may look like a good choice to use for your code if you're inexperienced, - * don't. Unless you know what you are doing, complex code will be much more difficult under - * this system. Use IterativeRobot or Command-Based instead if you're new. - */ -public class Robot extends SampleRobot { - RobotDrive myRobot; - Joystick stick; - - public Robot() { - myRobot = new RobotDrive(0, 1); - myRobot.setExpiration(0.1); - stick = new Joystick(0); - } - - /** - * Drive left & right motors for 2 seconds then stop - */ - public void autonomous() { - myRobot.setSafetyEnabled(false); - myRobot.drive(-0.5, 0.0); // drive forwards half speed - Timer.delay(2.0); // for 2 seconds - myRobot.drive(0.0, 0.0); // stop robot - } - - /** - * Runs the motors with arcade steering. - */ - public void operatorControl() { - myRobot.setSafetyEnabled(true); - while (isOperatorControl() && isEnabled()) { - myRobot.arcadeDrive(stick); // drive with arcade style (use right stick) - Timer.delay(0.005); // wait for a motor update time - } - } - - /** - * Runs during test mode - */ - public void test() { - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/WPILibJavaPlugin.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/WPILibJavaPlugin.java deleted file mode 100644 index 4ad4033bad..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/WPILibJavaPlugin.java +++ /dev/null @@ -1,145 +0,0 @@ -package edu.wpi.first.wpilib.plugins.java; - -import java.io.File; -import java.io.FileInputStream; -import java.util.Properties; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IWorkspace; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Status; -import org.eclipse.jdt.core.JavaCore; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.ui.IStartup; -import org.eclipse.ui.plugin.AbstractUIPlugin; -import org.osgi.framework.BundleContext; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; -import edu.wpi.first.wpilib.plugins.core.ant.AntPropertiesParser; -import edu.wpi.first.wpilib.plugins.java.installer.JavaInstaller; - -/** - * The activator class controls the plug-in life cycle - */ -public class WPILibJavaPlugin extends AbstractUIPlugin implements IStartup { - - // The plug-in ID - public static final String PLUGIN_ID = "WPILib_Java_Robot_Development"; //$NON-NLS-1$ - - // The shared instance - private static WPILibJavaPlugin plugin; - - /** - * The constructor - */ - public WPILibJavaPlugin() { - } - - /* - * (non-Javadoc) - * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) - */ - public void start(BundleContext context) throws Exception { - super.start(context); - plugin = this; - } - - /* - * (non-Javadoc) - * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) - */ - public void stop(BundleContext context) throws Exception { - plugin = null; - super.stop(context); - } - - /** - * Returns the shared instance - * - * @return the shared instance - */ - public static WPILibJavaPlugin getDefault() { - return plugin; - } - - public String getCurrentVersion() { - try { - Properties props = new AntPropertiesParser(WPILibJavaPlugin.class.getResourceAsStream("/resources/configuration.properties")).getProperties(); - if (props.getProperty("version").startsWith("$")) { - return "DEVELOPMENT"; - } else { - return props.getProperty("version"); - } - } catch (CoreException e) { - WPILibJavaPlugin.logError("Error getting properties.", e); - return "DEVELOPMENT"; - } - } - public String getJavaPath() { - return WPILibCore.getDefault().getWPILibBaseDir() - + File.separator + "java" + File.separator + "current"; - } - - public Properties getProjectProperties(IProject project) { - Properties defaults = WPILibCore.getDefault().getProjectProperties(project); - Properties props; - try { - File file = new File(WPILibCore.getDefault().getWPILibBaseDir()+"/java/current/ant/build.properties"); - props = new AntPropertiesParser(new FileInputStream(file)).getProperties(defaults); - } catch (Exception e) { - WPILibJavaPlugin.logError("Error getting properties.", e); - props = new Properties(defaults); - } - return props; - } - - public void updateProjects() { - // Get the root of the workspace - IWorkspace workspace = ResourcesPlugin.getWorkspace(); - IWorkspaceRoot root = workspace.getRoot(); - // Get all projects in the workspace - IProject[] projects = root.getProjects(); - // Loop over all projects - for (IProject project : projects) { - try { - if(project.hasNature("edu.wpi.first.wpilib.plugins.core.nature.FRCProjectNature")){ - WPILibJavaPlugin.logInfo("Updating project"); - updateVariables(project); - } else { - } - } catch (CoreException e) { - WPILibJavaPlugin.logError("Error updating projects.", e); - } - } - } - - public void updateVariables(IProject project) throws CoreException { - Properties props = WPILibJavaPlugin.getDefault().getProjectProperties(project); - - try { - JavaCore.setClasspathVariable("wpilib", new Path(props.getProperty("wpilib.jar")), null); - JavaCore.setClasspathVariable("wpilib.sources", new Path(props.getProperty("wpilib.sources")), null); - JavaCore.setClasspathVariable("networktables", new Path(props.getProperty("networktables.jar")), null); - JavaCore.setClasspathVariable("networktables.sources", new Path(props.getProperty("networktables.sources")), null); - } catch (JavaModelException e) { - // Classpath variables didn't get set - WPILibJavaPlugin.logError("Error setting classpath..", e); - } - } - - @Override - public void earlyStartup() { - new JavaInstaller(getCurrentVersion()).installIfNecessary(); - } - - public static void logInfo(String msg) { - getDefault().getLog().log(new Status(Status.INFO, PLUGIN_ID, Status.OK, msg, null)); - } - - public static void logError(String msg, Exception e) { - getDefault().getLog().log(new Status(Status.ERROR, PLUGIN_ID, Status.OK, msg, e)); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/installer/JavaInstaller.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/installer/JavaInstaller.java deleted file mode 100644 index 3dade7364e..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/installer/JavaInstaller.java +++ /dev/null @@ -1,39 +0,0 @@ -package edu.wpi.first.wpilib.plugins.java.installer; - -import java.io.InputStream; -import org.eclipse.jface.preference.IPreferenceStore; - -import edu.wpi.first.wpilib.plugins.core.installer.AbstractInstaller; -import edu.wpi.first.wpilib.plugins.java.WPILibJavaPlugin; -import edu.wpi.first.wpilib.plugins.java.preferences.PreferenceConstants; - -/** - * Installs the given version of WPILib into the correct location. Where the - * install directory is usually ~/wpilib/java/version. - * - * @author alex - */ -public class JavaInstaller extends AbstractInstaller { - - public JavaInstaller(String version) { - super(version, - WPILibJavaPlugin.getDefault().getPreferenceStore().getString(PreferenceConstants.LIBRARY_INSTALLED), - WPILibJavaPlugin.getDefault().getJavaPath()); - } - - @Override - protected String getFeatureName() { - return "java"; - } - - @Override - protected void updateInstalledVersion(String version) { - IPreferenceStore prefs = WPILibJavaPlugin.getDefault().getPreferenceStore(); - prefs.setValue(PreferenceConstants.LIBRARY_INSTALLED, version); - } - - @Override - protected InputStream getInstallResourceStream() { - return JavaInstaller.class.getResourceAsStream("/resources/java.zip"); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/launching/DeployLaunchShortcut.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/launching/DeployLaunchShortcut.java deleted file mode 100644 index f107d763fc..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/launching/DeployLaunchShortcut.java +++ /dev/null @@ -1,24 +0,0 @@ -package edu.wpi.first.wpilib.plugins.java.launching; - -import org.eclipse.core.resources.IProject; - -/** - * Launch shortcut base functionality, common for deploying to the robot. - * Retrieves the project the operation is being called on, and runs the correct - * ant targets based on polymorphically determined data values - * - * @author Ryan O'Meara - * @author Alex Henning - */ -public class DeployLaunchShortcut extends JavaLaunchShortcut { - - /** - * Runs the ant script using the correct target for the indicated mode (deploy to cRIO or just compile) - * @param activeProj The project that the script will be run on/from - * @param mode The mode it will be run in (ILaunchManager.RUN_MODE or ILaunchManager.DEBUG_MODE) - */ - public void runConfig(IProject activeProj, String mode){ - runConfigHelper(activeProj, mode, "deploy", "debug-deploy"); - } -} - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/launching/JavaLaunchShortcut.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/launching/JavaLaunchShortcut.java deleted file mode 100644 index 481a4638ab..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/launching/JavaLaunchShortcut.java +++ /dev/null @@ -1,214 +0,0 @@ -package edu.wpi.first.wpilib.plugins.java.launching; - -import java.io.File; -import java.lang.reflect.Method; -import java.text.MessageFormat; -import java.util.HashMap; -import java.util.Map; -import java.util.Vector; - -import org.eclipse.core.internal.resources.Resource; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunch; -import org.eclipse.debug.core.ILaunchConfigurationType; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; -import org.eclipse.debug.core.ILaunchManager; -import org.eclipse.debug.ui.IDebugUIConstants; -import org.eclipse.debug.ui.ILaunchShortcut; -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants; -import org.eclipse.jdt.launching.IVMConnector; -import org.eclipse.jdt.launching.JavaRuntime; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IFileEditorInput; -import org.eclipse.ui.PlatformUI; - -import com.sun.jdi.connect.Connector.Argument; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; -import edu.wpi.first.wpilib.plugins.core.launching.AntLauncher; -import edu.wpi.first.wpilib.plugins.java.WPILibJavaPlugin; - -@SuppressWarnings("restriction") -public abstract class JavaLaunchShortcut implements ILaunchShortcut { - private static final int DEBUG_ATTACH_ATTEMPTS = 20; - private static final int DEBUG_ATTACH_RETRY_DELAY_SEC = 2; - - //Class constants - used to delineate types for launch shortcuts - public static final String DEPLOY_TYPE = "edu.wpi.first.wpilib.plugins.core.deploy"; - private static final String ANT_SERVER_THREAD_NAME = "Ant Build Server Connection"; - - private static ILaunch lastDeploy = null; - - /** - * Returns the launch type of the shortcut that was used, one of the constants - * defined in BaseLaunchShortcut - * @return Launch shortcut type - */ - public String getLaunchType() {return DEPLOY_TYPE;} - - public void launch(ISelection selection, String mode) { - // Extract resource from selection - StructuredSelection sel = (StructuredSelection)selection; - IProject activeProject = null; - // NOTE: This caused issues earlier, as the sel return was treated as a workspace, instead of a project - // When it is a valid FIRST project, the selection is always a JavaProject - if(sel.getFirstElement() instanceof IProject) { - activeProject = ((IProject)sel.getFirstElement()).getProject(); - } else if(sel.getFirstElement() instanceof IJavaElement) { - activeProject = ((IJavaElement)sel.getFirstElement()).getJavaProject().getProject(); - } else { - WPILibJavaPlugin.logError("Selection isn't a project: "+sel.toString(), null); - return; - } - - // Run config using project found in extracted resource, with indicated mode - runConfig(activeProject, mode); - } - - @Override - public void launch(IEditorPart editor, String mode) { - // Extract resource from editor - if (editor != null) { - IFileEditorInput input = (IFileEditorInput)editor.getEditorInput(); - IFile file = input.getFile(); - IProject activeProject = file.getProject(); - - // If editor existed, run config using extracted resource in indicated mode - runConfig(activeProject, mode); - } else { - WPILibJavaPlugin.logError("Editor was null.", null); - } - - } - - /** - * Runs the ant script using the correct target for the indicated mode (deploy to cRIO or just compile) - * @param activeProj The project that the script will be run on/from - * @param mode The mode it will be run in (ILaunchManager.RUN_MODE or ILaunchManager.DEBUG_MODE) - * @return - */ - public abstract void runConfig(IProject activeProj, String mode); - - /** - * Runs the ant script using the correct target for the indicated mode (deploy to cRIO or just compile) - * @param activeProj The project that the script will be run on/from - * @param mode The mode it will be run in (ILaunchManager.RUN_MODE or ILaunchManager.DEBUG_MODE) - */ - protected void runConfigHelper(IProject activeProj, String mode, String runTarget, String debugTarget){ - String targets = runTarget; - - if(mode.equals(ILaunchManager.RUN_MODE)){ - if(getLaunchType().equals(DEPLOY_TYPE)){ - targets = runTarget; - } - } else if ((mode.equals(ILaunchManager.DEBUG_MODE))&&(getLaunchType().equals(DEPLOY_TYPE))) { - targets = debugTarget; - try{ - PlatformUI.getWorkbench().showPerspective(IDebugUIConstants.ID_DEBUG_PERSPECTIVE, - PlatformUI.getWorkbench().getActiveWorkbenchWindow()); - - }catch(Exception e){} - } - - if((lastDeploy != null)&&(!lastDeploy.isTerminated())){ - WPILibJavaPlugin.logInfo("Last deploy running"); - //Find the server connection thread and kill it - Vector threadGroups = new Vector(); - ThreadGroup root = Thread.currentThread().getThreadGroup().getParent(); - while (root.getParent() != null) {root = root.getParent();} - threadGroups.add(root); - ThreadGroup threadGroup = threadGroups.remove(0); - int numThreads = threadGroup.activeCount(); - Thread[] threads = new Thread[numThreads*100]; - numThreads = threadGroup.enumerate(threads, true); - - for(Thread current: threads){ - if(current != null){ - if(current.getName().equals(ANT_SERVER_THREAD_NAME)){ - try{ - //Manually end thread and then try terminating launch - Method stopMethod = current.getClass().getMethod("stop"); - stopMethod.invoke(current); - lastDeploy.terminate(); - break; - } catch(Exception e) { - WPILibJavaPlugin.logError("Error stopping ant", e); - } - } - } - } - - WPILibJavaPlugin.logInfo("Waiting"); - try{wait(1000);}catch(Exception e){} - - } - - WPILibJavaPlugin.logInfo("Running ant file: " + activeProj.getLocation().toOSString() + File.separator + "build.xml"); - WPILibJavaPlugin.logInfo("Targets: " + targets + ", Mode: " + mode); - lastDeploy = AntLauncher.runAntFile(new File (activeProj.getLocation().toOSString() + File.separator + "build.xml"), targets, null, mode); - - if((mode.equals(ILaunchManager.DEBUG_MODE))&&(getLaunchType().equals(DEPLOY_TYPE))) { - try { - startDebugConfig(getRemoteDebugConfig(activeProj)); - } catch (CoreException | InterruptedException e) { - WPILibJavaPlugin.logError("Debug attach failed", e); - } - } - - try { - activeProj.refreshLocal(Resource.DEPTH_INFINITE, null); - } catch (Exception e) {} - } - - private ILaunchConfigurationWorkingCopy getRemoteDebugConfig(IProject activeProj) throws CoreException { - ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager(); - ILaunchConfigurationType type = manager.getLaunchConfigurationType(IJavaLaunchConfigurationConstants.ID_REMOTE_JAVA_APPLICATION); - ILaunchConfigurationWorkingCopy config = type.newInstance(null, "Debug "+activeProj.getName()); - config.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, activeProj.getName()); - config.setAttribute(IJavaLaunchConfigurationConstants.ATTR_ALLOW_TERMINATE, true); - config.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_CONNECTOR, IJavaLaunchConfigurationConstants.ID_SOCKET_ATTACH_VM_CONNECTOR); - IVMConnector connector = JavaRuntime.getVMConnector(IJavaLaunchConfigurationConstants.ID_SOCKET_ATTACH_VM_CONNECTOR); - Map def = connector.getDefaultArguments(); - Map argMap = new HashMap(def.size()); - argMap.put("hostname", getHostname(activeProj)); - argMap.put("port", "8348"); - WPILibJavaPlugin.logInfo(argMap.toString()); - config.setAttribute(IJavaLaunchConfigurationConstants.ATTR_CONNECT_MAP, argMap); - return config; - } - - protected String getHostname(IProject proj) { - return WPILibCore.getDefault().getTargetIP(proj); - } - - private void startDebugConfig(final ILaunchConfigurationWorkingCopy config) - throws CoreException, InterruptedException { - int remainingAttempts = DEBUG_ATTACH_ATTEMPTS; - - // Retry until success or rethrow of exception on failure - while (true) { - try { - WPILibJavaPlugin.logInfo("Attemping to attach debugger..."); - config.launch(ILaunchManager.DEBUG_MODE, null); - WPILibJavaPlugin.logInfo("Debugger attached."); - break; - } catch (CoreException e) { - if (--remainingAttempts > 0) { - String errorMsg = MessageFormat.format("Unable to attach debugger. " - + "{0} attempts remain - waiting {1} second(s) before retrying...", - remainingAttempts, DEBUG_ATTACH_RETRY_DELAY_SEC); - WPILibJavaPlugin.logError(errorMsg, null); - Thread.sleep(DEBUG_ATTACH_RETRY_DELAY_SEC * 1000); - } else { - throw e; - } - } - } - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/launching/SimulateLaunchShortcut.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/launching/SimulateLaunchShortcut.java deleted file mode 100644 index cb4fca6ca9..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/launching/SimulateLaunchShortcut.java +++ /dev/null @@ -1,26 +0,0 @@ -package edu.wpi.first.wpilib.plugins.java.launching; - -import org.eclipse.core.resources.IProject; - -import edu.wpi.first.wpilib.plugins.core.launching.SimulationNotification; - -public class SimulateLaunchShortcut extends JavaLaunchShortcut { - - - /** - * Runs the ant script using the correct target for the indicated mode (deploy to cRIO or just compile) - * @param activeProj The project that the script will be run on/from - * @param mode The mode it will be run in (ILaunchManager.RUN_MODE or ILaunchManager.DEBUG_MODE) - */ - public void runConfig(IProject activeProj, String mode){ - if (SimulationNotification.supportsSimulation()) { - runConfigHelper(activeProj, mode, "simulate", "debug-simulate"); - } else { - SimulationNotification.showUnsupported(); - } - } - - protected String getHostname(IProject proj) { - return "localhost"; - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/preferences/PreferenceConstants.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/preferences/PreferenceConstants.java deleted file mode 100644 index 396e04d797..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/preferences/PreferenceConstants.java +++ /dev/null @@ -1,8 +0,0 @@ -package edu.wpi.first.wpilib.plugins.java.preferences; - -/** - * Constant definitions for plug-in preferences - */ -public class PreferenceConstants { - public static final String LIBRARY_INSTALLED = "libraryVersion_current"; -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/preferences/PreferenceInitializer.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/preferences/PreferenceInitializer.java deleted file mode 100644 index 575f3fa440..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/preferences/PreferenceInitializer.java +++ /dev/null @@ -1,24 +0,0 @@ -package edu.wpi.first.wpilib.plugins.java.preferences; - -import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer; -import org.eclipse.jface.preference.IPreferenceStore; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; -import edu.wpi.first.wpilib.plugins.java.WPILibJavaPlugin; - -/** - * Class used to initialize default preference values. - */ -public class PreferenceInitializer extends AbstractPreferenceInitializer { - - /* - * (non-Javadoc) - * - * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences() - */ - public void initializeDefaultPreferences() { - IPreferenceStore store = WPILibJavaPlugin.getDefault().getPreferenceStore(); - if (!store.contains(PreferenceConstants.LIBRARY_INSTALLED)) - store.setValue(PreferenceConstants.LIBRARY_INSTALLED, "none"); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/examples/ExampleJavaProject.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/examples/ExampleJavaProject.java deleted file mode 100644 index 2aec019ece..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/examples/ExampleJavaProject.java +++ /dev/null @@ -1,59 +0,0 @@ -package edu.wpi.first.wpilib.plugins.java.wizards.examples; - -import java.util.List; -import java.util.Map; - -import edu.wpi.first.wpilib.plugins.core.wizards.IExampleProject; -import edu.wpi.first.wpilib.plugins.java.wizards.newproject.JavaProjectType; - -public class ExampleJavaProject extends JavaProjectType implements IExampleProject { - private String name, description, world; - private List tags; - private List packages; - private List files; - - public ExampleJavaProject(String name, String description, List tags, - String world, List packages, List files) { - this.name = name; - this.description = description; - this.tags = tags; - this.world = world; - this.packages = packages; - this.files = files; - } - - public String getName() { - return name; - } - - public String getContent() { - return "

"+name+"

"+description+"

"; - } - - public List getTags() { - return tags; - } - - public String getWorld() { - return world; - } - - @Override - public String[] getFolders(String packageName) { - String packageDir = packageName.replace(".", "/"); - for (int i = 0; i < packages.size(); i++) { - packages.set(i, packages.get(i).replaceAll("\\$package-dir", packageDir)); - } - return packages.toArray(new String[0]); - } - - @Override - public Map getFiles(String packageName) { - String packageDir = packageName.replace(".", "/"); - Map files = super.getFiles(packageName); - for (ExportFile file : this.files) { - files.put(file.destination.replaceAll("\\$package-dir", packageDir), file.source); - } - return files; - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/examples/ExampleJavaWizard.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/examples/ExampleJavaWizard.java deleted file mode 100644 index eb66e780ff..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/examples/ExampleJavaWizard.java +++ /dev/null @@ -1,67 +0,0 @@ -package edu.wpi.first.wpilib.plugins.java.wizards.examples; - -import java.net.URL; -import java.util.List; -import java.util.Properties; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jface.wizard.IWizardPage; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; -import edu.wpi.first.wpilib.plugins.core.wizards.ExampleWizard; -import edu.wpi.first.wpilib.plugins.core.wizards.IExampleProject; -import edu.wpi.first.wpilib.plugins.core.wizards.INewProjectInfo; -import edu.wpi.first.wpilib.plugins.core.wizards.IExampleProject.ExportFile; -import edu.wpi.first.wpilib.plugins.core.wizards.NewProjectMainPage; -import edu.wpi.first.wpilib.plugins.core.wizards.ProjectCreationUtils; -import edu.wpi.first.wpilib.plugins.java.WPILibJavaPlugin; -import edu.wpi.first.wpilib.plugins.java.wizards.newproject.WPIRobotJavaProjectCreator; - -public class ExampleJavaWizard extends ExampleWizard { - private NewProjectMainPage detailsPage; - - /** - * Constructor for SampleNewWizard. - */ - public ExampleJavaWizard() { - super(); - setNeedsProgressMonitor(true); - } - - @Override - protected void doFinish(IExampleProject ex, String teamNumber) throws CoreException { - Properties props = WPILibCore.getDefault().getProjectProperties(null); - props.setProperty("team-number", teamNumber); - WPILibCore.getDefault().saveGlobalProperties(props); - - final String projectName = detailsPage.getProjectName(); - final String packageName = detailsPage.getPackage(); - final String worldName = detailsPage.getWorld(); - ProjectCreationUtils.createProject(new WPIRobotJavaProjectCreator(projectName, packageName, ex, worldName)); - } - - @Override - protected IWizardPage getDetailsPage(INewProjectInfo info) { - if (detailsPage != null) return detailsPage; - detailsPage = new NewProjectMainPage(selection, getTeamNumberPage(), info); - detailsPage.setTitle("Create Example Robot Java Project"); - detailsPage.setDescription("This wizard creates a new example project based on your selection."); - return detailsPage; - } - - @Override - public IExampleProject makeExampleProject(String name, String description, - List tags, String world, List folders, List files) { - return new ExampleJavaProject(name, description, tags, world, folders, files); - } - - @Override - public URL getResourceURL() { - return WPILibJavaPlugin.getDefault().getBundle().getEntry("/resources/templates/examples"); - } - - @Override - public String getXMLFile() { - return "examples.xml"; - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/CommandGroupWizard.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/CommandGroupWizard.java deleted file mode 100644 index b2a22fa196..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/CommandGroupWizard.java +++ /dev/null @@ -1,9 +0,0 @@ -package edu.wpi.first.wpilib.plugins.java.wizards.file_template; - -public class CommandGroupWizard extends FileTemplateWizard { - - public CommandGroupWizard() { - super("CommandGroup", "command-based/CommandGroup.java", "commands"); - } - -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/CommandWizard.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/CommandWizard.java deleted file mode 100644 index fe277fe1d5..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/CommandWizard.java +++ /dev/null @@ -1,9 +0,0 @@ -package edu.wpi.first.wpilib.plugins.java.wizards.file_template; - -public class CommandWizard extends FileTemplateWizard { - - public CommandWizard() { - super("Command", "command-based/Command.java", "commands"); - } - -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/FileTemplateWizard.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/FileTemplateWizard.java deleted file mode 100644 index 73a653bca1..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/FileTemplateWizard.java +++ /dev/null @@ -1,126 +0,0 @@ -package edu.wpi.first.wpilib.plugins.java.wizards.file_template; - -import java.lang.reflect.InvocationTargetException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.HashMap; -import java.util.Map; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jdt.core.IPackageFragment; -import org.eclipse.jdt.core.IPackageFragmentRoot; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.ui.INewWizard; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchWizard; - -import edu.wpi.first.wpilib.plugins.core.wizards.ProjectCreationUtils; -import edu.wpi.first.wpilib.plugins.java.WPILibJavaPlugin; - -public class FileTemplateWizard extends Wizard implements INewWizard { - private String type, source, ending; - private FileTemplateWizardMainPage page; - private ISelection selection; - private IProject project; - - /** - * Constructor for SampleNewWizard. - */ - public FileTemplateWizard(String type, String source, String ending) { - super(); - setNeedsProgressMonitor(true); - this.type = type; - this.source = source; - this.ending = ending; - } - - /** - * Adding the page to the wizard. - */ - - public void addPages() { - page = new FileTemplateWizardMainPage(type, project, ending, selection); - addPage(page); - } - - /** - * This method is called when 'Finish' button is pressed in - * the wizard. We will create an operation and run it - * using wizard as execution context. - */ - public boolean performFinish() { - final IProject project = page.getProject(); - final String className = page.getClassName(); - final String packageName = page.getPackage(); - WPILibJavaPlugin.logInfo("Class: "+className+" Package: "+packageName); - IRunnableWithProgress op = new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InvocationTargetException { - try { - doFinish(project, className, packageName, monitor); - } catch (CoreException e) { - throw new InvocationTargetException(e); - } finally { - monitor.done(); - } - } - }; - try { - getContainer().run(true, false, op); - } catch (InterruptedException e) { - return false; - } catch (InvocationTargetException e) { - Throwable realException = e.getTargetException(); - MessageDialog.openError(getShell(), "Error", realException.getMessage()); - return false; - } - return true; - } - - /** - * The worker method. It will find the container, create the - * file if missing or just replace its contents, and open - * the editor on the newly created file. - */ - private void doFinish(IProject project, String className, String packageName, IProgressMonitor monitor) throws CoreException { - Map map = new HashMap(); - map.put("$classname", className); - map.put("$package", packageName); - String filepath = "src/"+packageName.replace(".", "/")+"/"+className+".java"; - try { - URL url = new URL(WPILibJavaPlugin.getDefault().getBundle().getEntry("/resources/templates/"), source); - ProjectCreationUtils.createTemplateFile(project, filepath, url, map); - } catch (MalformedURLException e) { - WPILibJavaPlugin.logError("Error finishing making file: "+className, e); - } - } - - /** - * We will accept the selection in the workbench to see if - * we can initialize from it. - * @see IWorkbenchWizard#init(IWorkbench, IStructuredSelection) - */ - public void init(IWorkbench workbench, IStructuredSelection selection) { - this.selection = selection; - WPILibJavaPlugin.logInfo(selection.toString()); - Object element = ((StructuredSelection) selection).getFirstElement(); - if (element != null) WPILibJavaPlugin.logInfo(element.getClass().toString()); - if (element instanceof IResource) { - project = ((IResource) element).getProject(); - } else if (element instanceof IPackageFragment) { - project = ((IPackageFragment) element).getJavaProject().getProject(); - } else if (element instanceof IPackageFragmentRoot) { - project = ((IPackageFragmentRoot) element).getJavaProject().getProject(); - } else if (element instanceof ICompilationUnit) { - project = ((ICompilationUnit) element).getJavaProject().getProject(); - } else WPILibJavaPlugin.logInfo("Element not instance of IResource"); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/FileTemplateWizardMainPage.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/FileTemplateWizardMainPage.java deleted file mode 100644 index 07d43953dc..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/FileTemplateWizardMainPage.java +++ /dev/null @@ -1,215 +0,0 @@ -package edu.wpi.first.wpilib.plugins.java.wizards.file_template; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jdt.core.IPackageFragmentRoot; -import org.eclipse.jdt.core.JavaCore; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jface.dialogs.IDialogPage; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Text; - -import edu.wpi.first.wpilib.plugins.core.nature.FRCProjectNature; -import edu.wpi.first.wpilib.plugins.core.wizards.IProjectFilter; -import edu.wpi.first.wpilib.plugins.core.wizards.ProjectComboField; -import edu.wpi.first.wpilib.plugins.java.WPILibJavaPlugin; - -/** - * The "New" wizard page allows setting the container for the new file as well - * as the file name. The page will only accept file name without the extension - * OR with the extension that matches the expected one (mpe). - */ - -public class FileTemplateWizardMainPage extends WizardPage { - private IProject project; - private String ending; - private ProjectComboField projectsCombo; - private Text classNameText; - private Text packageText; - - /** - * Constructor for SampleNewWizardPage. - * - * @param pageName - */ - public FileTemplateWizardMainPage(String type, IProject project, String ending, ISelection selection) { - super("wizardPage"); - setTitle("Create New "+type); - setDescription("This wizard creates a new "+type.toLowerCase()+" from a template."); - this.project = project; - this.ending = ending; - } - - /** - * @see IDialogPage#createControl(Composite) - */ - public void createControl(Composite parent) { - Composite container = new Composite(parent, SWT.NULL); - GridLayout layout = new GridLayout(); - container.setLayout(layout); - layout.numColumns = 2; - layout.verticalSpacing = 9; - - Label label = new Label(container, SWT.NULL); - label.setText("Pro&ject:"); - - projectsCombo = new ProjectComboField(container, SWT.BORDER | SWT.SINGLE, - new IProjectFilter() { - @Override public boolean accept(IProject project) { - try { - return project.hasNature(FRCProjectNature.FRC_PROJECT_NATURE) - && project.hasNature(JavaCore.NATURE_ID); - } catch (CoreException e) { - WPILibJavaPlugin.logError("Error looking for FRCJava project.", e); - return false; - } - } - }); - GridData gd = new GridData(GridData.FILL_HORIZONTAL); - projectsCombo.setLayoutData(gd); - projectsCombo.addSelectionListener(new SelectionListener() { - public void widgetSelected(SelectionEvent e){ - if (project == null){ - project = projectsCombo.getProject(); - } - packageText.setText(getDefaultPackage()); - } - public void widgetDefaultSelected(SelectionEvent e){} - }); - projectsCombo.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - dialogChanged(); - } - }); - - label = new Label(container, SWT.NULL); - label.setText("Class &Name:"); - - classNameText = new Text(container, SWT.BORDER | SWT.SINGLE); - gd = new GridData(GridData.FILL_HORIZONTAL); - classNameText.setLayoutData(gd); - classNameText.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - dialogChanged(); - } - }); - - label = new Label(container, SWT.NULL); - label.setText("&Package:"); - - packageText = new Text(container, SWT.BORDER | SWT.SINGLE); - gd = new GridData(GridData.FILL_HORIZONTAL); - packageText.setLayoutData(gd); - packageText.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - dialogChanged(); - } - }); - - initialize(); - dialogChanged(); - setControl(container); - } - - /** - * Tests if the current workbench selection is a suitable container to use. - */ - - private void initialize() { - WPILibJavaPlugin.logInfo("initialize"); - projectsCombo.setProject(project); - packageText.setText(getDefaultPackage()); - } - - /** - * Ensures that both text fields are set. - */ - - private void dialogChanged() { - String className = getClassName(); - String packageString = getPackage(); - - // Update the default package if necessary - if (project == null || !project.equals(projectsCombo.getProject())) { - String oldDefault = getDefaultPackage(); - project = projectsCombo.getProject(); - if (packageString.equals(oldDefault)) { - packageText.setText(getDefaultPackage()); - } - } - - if (!projectsCombo.isValid()) { - updateStatus("Must select a project."); - return; - } - if (className.length() == 0) { - updateStatus("Class name must be specified"); - return; - } - if (!className.matches("^([a-zA-Z_]{1}[a-zA-Z0-9_]*)$")) { - updateStatus("Must be a valid java class name"); - return; - } - if (packageString.length() == 0) { - updateStatus("Package must be specified"); - return; - } - if (!packageString.matches("^([a-zA-Z_]{1}[a-zA-Z0-9_]*(\\.[a-zA-Z_]{1}[a-zA-Z0-9_]*)*)$")) { - updateStatus("Must be valid java package"); - return; - } - updateStatus(null); - } - - private void updateStatus(String message) { - setErrorMessage(message); - setPageComplete(message == null); - } - - public IProject getProject() { - return projectsCombo.getProject(); - } - - public String getClassName() { - return classNameText.getText(); - } - - public String getPackage() { - return packageText.getText(); - } - - public String getDefaultPackage() { - WPILibJavaPlugin.logInfo("Project: "+project); - String defaultPackage = null; - if (project != null) { - try { - IPackageFragmentRoot root = JavaCore.create(project) - .getPackageFragmentRoot(project.getFolder("src")); - String backupPackage = ""; - for (IJavaElement child : root.getChildren()) { - if (child.getElementType()==IJavaElement.PACKAGE_FRAGMENT - && child.getElementName().endsWith("."+ending)) { - defaultPackage = child.getElementName(); - } - backupPackage = child.getElementName(); - } - if (defaultPackage == null) defaultPackage = backupPackage; - } catch (JavaModelException e) { - WPILibJavaPlugin.logError("Error getting default package.", e); - } - } - if (defaultPackage != null) return defaultPackage; - else return ""; - } -} \ No newline at end of file diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/PIDSubsystemWizard.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/PIDSubsystemWizard.java deleted file mode 100644 index d61cc1ad25..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/PIDSubsystemWizard.java +++ /dev/null @@ -1,9 +0,0 @@ -package edu.wpi.first.wpilib.plugins.java.wizards.file_template; - -public class PIDSubsystemWizard extends FileTemplateWizard { - - public PIDSubsystemWizard() { - super("PIDSubsystem", "command-based/PIDSubsystem.java", "subsystems"); - } - -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/SubsystemWizard.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/SubsystemWizard.java deleted file mode 100644 index 35c20b4da2..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/SubsystemWizard.java +++ /dev/null @@ -1,9 +0,0 @@ -package edu.wpi.first.wpilib.plugins.java.wizards.file_template; - -public class SubsystemWizard extends FileTemplateWizard { - - public SubsystemWizard() { - super("Subsystem", "command-based/Subsystem.java", "subsystems"); - } - -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/TriggerWizard.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/TriggerWizard.java deleted file mode 100644 index c2f3ac3b14..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/file_template/TriggerWizard.java +++ /dev/null @@ -1,9 +0,0 @@ -package edu.wpi.first.wpilib.plugins.java.wizards.file_template; - -public class TriggerWizard extends FileTemplateWizard { - - public TriggerWizard() { - super("Trigger", "command-based/Trigger.java", "triggers"); - } - -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/newproject/JavaProjectType.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/newproject/JavaProjectType.java deleted file mode 100644 index 376ad57da6..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/newproject/JavaProjectType.java +++ /dev/null @@ -1,69 +0,0 @@ -package edu.wpi.first.wpilib.plugins.java.wizards.newproject; - -import java.net.URL; -import java.util.HashMap; -import java.util.Map; - -import edu.wpi.first.wpilib.plugins.core.wizards.ProjectType; -import edu.wpi.first.wpilib.plugins.java.WPILibJavaPlugin; - -public class JavaProjectType implements ProjectType { - static ProjectType SAMPLE = new JavaProjectType() { - @Override public Map getFiles(String packageName) { - Map files = super.getFiles(packageName); - files.put("src/"+packageName.replace(".", "/")+"/Robot.java", "sample/Robot.java"); - return files; - } - }; - static ProjectType ITERATIVE = new JavaProjectType() { - @Override public Map getFiles(String packageName) { - Map files = super.getFiles(packageName); - files.put("src/"+packageName.replace(".", "/")+"/Robot.java", "iterative/Robot.java"); - return files; - } - }; - static ProjectType COMMAND_BASED = new JavaProjectType() { - @Override public String[] getFolders(String packageName) { - String[] paths = {"src/"+packageName.replace(".", "/"), - "src/"+packageName.replace(".", "/")+"/commands", - "src/"+packageName.replace(".", "/")+"/subsystems", - "src/"+packageName.replace(".", "/")+"/triggers"}; - return paths; - } - @Override public Map getFiles(String packageName) { - Map files = super.getFiles(packageName); - files.put("src/"+packageName.replace(".", "/")+"/Robot.java", "command-based/Robot.java"); - files.put("src/"+packageName.replace(".", "/")+"/RobotMap.java", "command-based/RobotMap.java"); - files.put("src/"+packageName.replace(".", "/")+"/OI.java", "command-based/OI.java"); - files.put("src/"+packageName.replace(".", "/")+"/commands/ExampleCommand.java", "command-based/ExampleCommand.java"); - files.put("src/"+packageName.replace(".", "/")+"/subsystems/ExampleSubsystem.java", "command-based/ExampleSubsystem.java"); - return files; - } - }; - @SuppressWarnings("serial") - static Map TYPES = new HashMap() {{ - put(ProjectType.SAMPLE, SAMPLE); - put(ProjectType.ITERATIVE, ITERATIVE); - put(ProjectType.COMMAND_BASED, COMMAND_BASED); - }}; - - @Override - public String[] getFolders(String packageName) { - String[] paths = {"src/"+packageName.replace(".", "/")}; - return paths; - } - - @Override - public Map getFiles(String packageName) { - HashMap files = new HashMap(); - files.put("build.xml", "build.xml"); - files.put("build.properties", "build.properties"); - files.put(".classpath", ".classpath"); - return files; - } - - @Override - public URL getBaseURL() { - return WPILibJavaPlugin.getDefault().getBundle().getEntry("/resources/templates/"); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/newproject/NewJavaWizard.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/newproject/NewJavaWizard.java deleted file mode 100644 index d73018698c..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/newproject/NewJavaWizard.java +++ /dev/null @@ -1,123 +0,0 @@ -package edu.wpi.first.wpilib.plugins.java.wizards.newproject; - -import java.lang.reflect.InvocationTargetException; -import java.util.Properties; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.ui.INewWizard; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchWizard; - -import edu.wpi.first.wpilib.plugins.core.WPILibCore; -import edu.wpi.first.wpilib.plugins.core.wizards.INewProjectInfo; -import edu.wpi.first.wpilib.plugins.core.wizards.NewProjectMainPage; -import edu.wpi.first.wpilib.plugins.core.wizards.ProjectCreationUtils; -import edu.wpi.first.wpilib.plugins.core.wizards.ProjectType; -import edu.wpi.first.wpilib.plugins.core.wizards.TeamNumberPage; -import edu.wpi.first.wpilib.plugins.java.WPILibJavaPlugin; - -/** - * - * Example Docs: - * This is a sample new wizard. Its role is to create a new file - * resource in the provided container. If the container resource - * (a folder or a project) is selected in the workspace - * when the wizard is opened, it will accept it as the target - * container. The wizard creates one file with the extension - * "mpe". If a sample multi-page editor (also available - * as a template) is registered for the same extension, it will - * be able to open it. - */ - -public class NewJavaWizard extends Wizard implements INewWizard { - private TeamNumberPage teamNumberPage; - private NewProjectMainPage page; - private ISelection selection; - - /** - * Constructor for SampleNewWizard. - */ - public NewJavaWizard() { - super(); - setNeedsProgressMonitor(true); - } - - /** - * Adding the page to the wizard. - */ - - public void addPages() { - if (TeamNumberPage.needsTeamNumberPage()) { - teamNumberPage = new TeamNumberPage(selection); - addPage(teamNumberPage); - } - page = new NewProjectMainPage(selection, teamNumberPage, INewProjectInfo.Null); - page.setProjectTypes(JavaProjectType.TYPES); - page.setTitle("Create New Robot Java Project"); - page.setDescription("This wizard creates a new Robot Java Project configured to use WPILib for programming FRC robots."); - addPage(page); - } - - /** - * This method is called when 'Finish' button is pressed in - * the wizard. We will create an operation and run it - * using wizard as execution context. - */ - public boolean performFinish() { - final String projectName = page.getProjectName(); - final String teamNumber = TeamNumberPage.getTeamNumberFromPage(teamNumberPage); - final String packageName = page.getPackage(); - final ProjectType projectType = page.getProjectType(); - final String worldName = page.getWorld(); - WPILibJavaPlugin.logInfo("Project: "+projectName+" Package: "+packageName+" Project Type: "+projectType); - IRunnableWithProgress op = new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InvocationTargetException { - try { - doFinish(projectName, teamNumber, packageName, projectType, worldName, monitor); - } catch (CoreException e) { - throw new InvocationTargetException(e); - } finally { - monitor.done(); - } - } - }; - try { - getContainer().run(true, false, op); - } catch (InterruptedException e) { - return false; - } catch (InvocationTargetException e) { - Throwable realException = e.getTargetException(); - MessageDialog.openError(getShell(), "Error", realException.getMessage()); - return false; - } - return true; - } - - /** - * The worker method. It will find the container, create the - * file if missing or just replace its contents, and open - * the editor on the newly created file. - */ - - private void doFinish(String projectName, String teamNumber, String packageName, ProjectType projectType, String worldName, IProgressMonitor monitor) throws CoreException { - Properties props = WPILibCore.getDefault().getProjectProperties(null); - props.setProperty("team-number", teamNumber); - WPILibCore.getDefault().saveGlobalProperties(props); - ProjectCreationUtils.createProject(new WPIRobotJavaProjectCreator(projectName, packageName, projectType, worldName)); - } - - /** - * We will accept the selection in the workbench to see if - * we can initialize from it. - * @see IWorkbenchWizard#init(IWorkbench, IStructuredSelection) - */ - public void init(IWorkbench workbench, IStructuredSelection selection) { - this.selection = selection; - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/newproject/WPIRobotJavaProjectCreator.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/newproject/WPIRobotJavaProjectCreator.java deleted file mode 100644 index 458b561293..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/java/edu/wpi/first/wpilib/plugins/java/wizards/newproject/WPIRobotJavaProjectCreator.java +++ /dev/null @@ -1,69 +0,0 @@ -package edu.wpi.first.wpilib.plugins.java.wizards.newproject; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.core.JavaCore; - -import edu.wpi.first.wpilib.plugins.core.nature.FRCProjectNature; -import edu.wpi.first.wpilib.plugins.core.wizards.IProjectCreator; -import edu.wpi.first.wpilib.plugins.core.wizards.ProjectType; -import edu.wpi.first.wpilib.plugins.java.WPILibJavaPlugin; - -public class WPIRobotJavaProjectCreator implements IProjectCreator { - String projectName, packageName, worldName; - ProjectType projectType; - - public WPIRobotJavaProjectCreator(String projectName, String packageName, ProjectType projectType, String worldName) { - this.projectName = projectName; - this.packageName = packageName; - this.projectType = projectType; - this.worldName = worldName; - } - - @Override - public String getName() { - return projectName; - } - - @Override - public String getPackageName() { - return packageName; - } - - @Override - public Map getValues() { - Map vals = new HashMap(); - vals.put("$project", projectName); - vals.put("$package", packageName); - vals.put("$world", worldName); - return vals; - } - - @Override - public List getNatures() { - List natures = new ArrayList<>(); - natures.add(JavaCore.NATURE_ID); - natures.add(FRCProjectNature.FRC_PROJECT_NATURE); - return natures; - } - - @Override - public ProjectType getProjectType() { - return projectType; - } - - @Override - public void initialize(IProject project) { - JavaCore.create(project); - } - - @Override - public void finalize(IProject project) throws CoreException { - WPILibJavaPlugin.getDefault().updateVariables(project); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/resources/java-zip/ant/ant-classloadertask.jar b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/resources/java-zip/ant/ant-classloadertask.jar deleted file mode 100644 index d2f58d9f1d7a8fc909dac60aeb8244fe86e1c77b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70515 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%0AN%WpBBS9Z+2U6)+ZS`3kix{2`n)k*y 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 - - - - - - - - - - - - - - - - - - - - - - - Trying Target: ${target} - - - - roboRIO found via mDNS - - - - roboRIO not found via mDNS, falling back to static USB - - - - - roboRIO found via static USB - - - - - - - roboRIO not found via USB, falling back to static address of ${target} - - - - - - roboRIO found via Ethernet static - - - - - - - - - [athena-compile] Compiling ${src.dir} with classpath=${classpath} to ${build.dir} - - - - - - - [athena-jar] Making jar ${dist.jar}. - - - - [athena-jar] Copying jars from ${classpath} to ${build.jars}. - - - - - - - - - - - - - - - - - - - - - - - - [athena-deploy] Copying code over. - - - - - - - - [athena-deploy] Starting program. - - - - - - - - [athena-deploy] Copying code over. - - - - - - - - [athena-deploy] Starting Debug program. - - - - - - - [jar-for-simulation] Building jar. - - - - - - - - - - - - - - - - - - - - - - [simulate] You may now run Gazebo - - - - [debug-simulate] You may now run your DriverStation. - - - - [simulate] Running Code. - - - - - - - - - - - [debug-simulate] Running Gazebo. - - - - - - - [debug-simulate] you may now run your DriverStation. - - - - [debug-simulate] Running Code. - - - - - - - - - - - - - - - - - - - - - - - - roboRIO image version validated - Checking for JRE. If this fails install the JRE using these instructions: https://wpilib.screenstepslive.com/s/4485/m/13503/l/288822-installing-java-8-on-the-roborio-using-the-frc-roborio-java-installer-java-only - - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/resources/java-zip/ant/frcdebug b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/resources/java-zip/ant/frcdebug deleted file mode 100644 index 206e7f86e8..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/resources/java-zip/ant/frcdebug +++ /dev/null @@ -1,2 +0,0 @@ -# This file is used as a flag to determine if debugging should be used. -# It is uploaded to the robot when launched in debug mode and should be removed automatically once used. \ No newline at end of file diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/resources/java-zip/ant/jsch-0.1.50.jar b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/resources/java-zip/ant/jsch-0.1.50.jar deleted file mode 100644 index 85c044f216987b60403b85d64f9617c53573753f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 249282 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≫gUR)%P|pT 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 diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/resources/java-zip/ant/robotCommand b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/resources/java-zip/ant/robotCommand deleted file mode 100644 index c1333b7408..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/resources/java-zip/ant/robotCommand +++ /dev/null @@ -1,2 +0,0 @@ -env LD_LIBRARY_PATH=/usr/local/frc/rpath-lib/ /usr/local/frc/bin/netconsole-host /usr/local/frc/JRE/bin/java -jar /home/lvuser/FRCUserProgram.jar - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/resources/java-zip/ant/robotDebugCommand b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/resources/java-zip/ant/robotDebugCommand deleted file mode 100644 index 2c26f35d8f..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/src/main/resources/java-zip/ant/robotDebugCommand +++ /dev/null @@ -1,2 +0,0 @@ -env LD_LIBRARY_PATH=/usr/local/frc/rpath-lib/ /usr/local/frc/bin/netconsole-host /usr/local/frc/JRE/bin/java -XX:+UsePerfData -agentlib:jdwp=transport=dt_socket,address=8348,server=y,suspend=y -jar /home/lvuser/FRCUserProgram.jar - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/META-INF/MANIFEST.MF b/eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/META-INF/MANIFEST.MF deleted file mode 100644 index 4e6a849bd8..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/META-INF/MANIFEST.MF +++ /dev/null @@ -1,11 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: WPILib_Riolog -Bundle-SymbolicName: edu.wpi.first.wpilib.plugins.riolog;singleton:=true -Bundle-Version: 0.1.0.qualifier -Bundle-Activator: netconsole2.Activator -Require-Bundle: org.eclipse.ui, - org.eclipse.core.runtime -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Bundle-ActivationPolicy: lazy -Bundle-Vendor: WPI & FIRST diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/README b/eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/README deleted file mode 100644 index 09ee25990a..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/README +++ /dev/null @@ -1,13 +0,0 @@ - - Riolog - -This is an Eclipse plugin that receives and displays text from UDP port 6666. It -defines a new view that displays the received text. - -To compile, open project in an Eclipse instance with the appropriate plugin -development tools, and Export as a deployable plugin/fragment. - -To install, copy the resulting jar file into $eclipse/dropins/, and start -Eclipse (-clean may be necessary). - -To enable, go to Window>Show View>Other... and choose General>Riolog. diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/build.properties b/eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/build.properties deleted file mode 100644 index caaec514ba..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/build.properties +++ /dev/null @@ -1,7 +0,0 @@ -source.. = src/ -output.. = bin/ -bin.includes = plugin.xml,\ - META-INF/,\ - .,\ - icons/,\ - contexts.xml diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/contexts.xml b/eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/contexts.xml deleted file mode 100644 index c3ed6a6474..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/contexts.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - This is the context help for the Riolog It was generated by a PDE template. - - - - - - - - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/icons/riolog.png b/eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/icons/riolog.png deleted file mode 100644 index 2d6bb56c0baec6ff3e6632f69e255a649f8638e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 344 zcmV-e0jK_nP)D^VLG_WzVF?3thGgwQTGr|SUR=NFW zU|=8`+pP8c57WznY`WPhH-auW6}F4v*WbTzJ_{BFjOb!$E=2)M1g#_hC^i7a3;!7Y zF_^4!!Eh$BJYECNgzcfs1?aJGDr^^n$to8HCN!UhsrWOTV%UYE@jn9t!++#ZcHI;L zk9U(*F8|Z_mtgf8&On@L+sk0J)`Nk80phi@uP-n(ob19LK4z=j{-L{ofq{YH-us9D zkyEM3DwqHHM`}>iz+8Ye@hAz(GgccHp@hxxXQwc|z{ASTV7AJQfrphF!w`RE4@NI} q7Y4IcZVXHeObnJ%X1IJ!9smHGCt^=VeMzwZ0000 - - - - - - - - - - - - - - - - - - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/pom.xml b/eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/pom.xml deleted file mode 100644 index 75dffb853c..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/pom.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - 4.0.0 - edu.wpi.first.wpilib.plugins.riolog - eclipse-plugin - - - edu.wpi.first.wpilib.plugins - edu.wpi.first.wpilib.plugins - 0.1.0.qualifier - .. - - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/src/netconsole2/Activator.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/src/netconsole2/Activator.java deleted file mode 100644 index 60d069df71..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/src/netconsole2/Activator.java +++ /dev/null @@ -1,61 +0,0 @@ -package netconsole2; - -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.ui.plugin.AbstractUIPlugin; -import org.osgi.framework.BundleContext; - -/** - * The activator class controls the plug-in life cycle - */ -public class Activator extends AbstractUIPlugin { - - // The plug-in ID - public static final String PLUGIN_ID = "riolog"; //$NON-NLS-1$ - - // The shared instance - private static Activator plugin; - - /** - * The constructor - */ - public Activator() { - } - - /* - * (non-Javadoc) - * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) - */ - public void start(BundleContext context) throws Exception { - super.start(context); - plugin = this; - } - - /* - * (non-Javadoc) - * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) - */ - public void stop(BundleContext context) throws Exception { - plugin = null; - super.stop(context); - } - - /** - * Returns the shared instance - * - * @return the shared instance - */ - public static Activator getDefault() { - return plugin; - } - - /** - * Returns an image descriptor for the image file at the given - * plug-in relative path - * - * @param path the path - * @return the image descriptor - */ - public static ImageDescriptor getImageDescriptor(String path) { - return imageDescriptorFromPlugin(PLUGIN_ID, path); - } -} diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/src/netconsole2/views/RiologView.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/src/netconsole2/views/RiologView.java deleted file mode 100644 index 29d36d7829..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.riolog/src/netconsole2/views/RiologView.java +++ /dev/null @@ -1,414 +0,0 @@ -package netconsole2.views; - -import java.io.IOException; -import java.net.DatagramPacket; -import java.net.DatagramSocket; -import java.net.InetSocketAddress; -import java.net.SocketException; -import java.util.ArrayList; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.LinkedBlockingQueue; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.IMenuListener; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.IToolBarManager; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.jface.action.Separator; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Menu; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.IActionBars; -import org.eclipse.ui.ISharedImages; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.part.ViewPart; - - -public class RiologView extends ViewPart { - public static Action confAction(String name, String tooltip, String img, - Action e) { - e.setText(name); - e.setToolTipText(tooltip); - e.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages() - .getImageDescriptor(img)); - return e; - } - - public static byte[] getPacket(DatagramSocket socket, DatagramPacket buf) { - try { - socket.receive(buf); - } catch (IOException e) { - return null; - } - byte[] ret = new byte[buf.getLength()]; - System.arraycopy(buf.getData(), 0, ret, 0, ret.length); - return ret; - } - - public static DatagramSocket makeRecvSocket() { - DatagramSocket socket = null; - try { - socket = new DatagramSocket(null); - socket.setReuseAddress(true); - socket.bind(new InetSocketAddress(6666)); - } catch (SocketException e) { - e.printStackTrace(); - socket.close(); - return null; - } - return socket; - } - - public static Thread startDaemonThread(Runnable r, String name) { - Thread t = new Thread(r, name); - t.setDaemon(true); - t.start(); - return t; - } - - /** - * The ID of the view as specified by the extension. - */ - public static final String ID = "netconsole2.views.RiologView"; - - Text text; - Thread listener; - Thread transferer; - - volatile DatagramSocket socket_hook = null; - volatile boolean discard = false; - volatile boolean paused = false; - volatile boolean cleanup = false; - - private Action clearAction; - private Action pauseAction; - private Action discardAction; - private Action unpauseAction; - private Action undiscardAction; - private Button discardButton; - private Button pauseButton; - - /** - * The constructor. - */ - public RiologView() { - } - - private void contributeToActionBars() { - IActionBars bars = getViewSite().getActionBars(); - fillLocalPullDown(bars.getMenuManager()); - fillLocalToolBar(bars.getToolBarManager()); - } - - /** - * This is a callback that will allow us to create the viewer and initialize - * it. - */ - public void createPartControl(Composite parent) { - GridLayout glayout = new GridLayout(); - glayout.numColumns = 1; - parent.setLayout(glayout); - - text = new Text(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL - | SWT.READ_ONLY); - { - GridData gdata = new GridData(); - gdata.grabExcessVerticalSpace = true; - gdata.grabExcessHorizontalSpace = true; - gdata.horizontalAlignment = SWT.FILL; - gdata.verticalAlignment = SWT.FILL; - text.setLayoutData(gdata); - } - - Composite row = new Composite(parent, SWT.NONE); - - row.setLayout(new FillLayout(SWT.HORIZONTAL)); - - { - GridData gdata = new GridData(); - gdata.grabExcessVerticalSpace = false; - gdata.grabExcessHorizontalSpace = true; - gdata.horizontalAlignment = SWT.FILL; - gdata.verticalAlignment = SWT.CENTER; - row.setLayoutData(gdata); - } - - - - // Create the help context id for the viewer's control - PlatformUI.getWorkbench().getHelpSystem() - .setHelp(parent, "netconsole2.text"); - makeActions(); - makeButtons(row); - hookContextMenu(); - contributeToActionBars(); - startListening(); - } - - public void makeButtons(Composite parent) { - pauseButton = new Button(parent, SWT.TOGGLE); - pauseButton.setText(pauseAction.getText()); - pauseButton.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - if (pauseButton.getSelection()) { - pauseAction.run(); - } else { - unpauseAction.run(); - } - } - }); - discardButton = new Button(parent, SWT.TOGGLE); - discardButton.setText(discardAction.getText()); - discardButton.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - if (discardButton.getSelection()) { - discardAction.run(); - } else { - undiscardAction.run(); - } - } - }); - Button clearButton = new Button(parent, SWT.PUSH); - clearButton.setText(clearAction.getText()); - clearButton.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - clearAction.run(); - } - }); - } - - @Override - public void dispose() { - stopListening(); - super.dispose(); - } - - private void fillContextMenu(IMenuManager manager) { - manager.add(pauseAction); - manager.add(unpauseAction); - manager.add(new Separator()); - manager.add(clearAction); - manager.add(new Separator()); - manager.add(discardAction); - manager.add(undiscardAction); - manager.add(new Separator()); - manager.add(confAction("Copy", "Copy selected text", - ISharedImages.IMG_TOOL_COPY, new Action() { - @Override - public void run() { - text.copy(); - } - })); - manager.add(confAction("Select All", "Select all text", "", - new Action() { - @Override - public void run() { - text.selectAll(); - } - })); - } - - private void fillLocalPullDown(IMenuManager manager) { - manager.add(pauseAction); - manager.add(unpauseAction); - manager.add(new Separator()); - manager.add(clearAction); - manager.add(new Separator()); - manager.add(discardAction); - manager.add(undiscardAction); - } - - private void fillLocalToolBar(IToolBarManager manager) { - manager.add(pauseAction); - manager.add(unpauseAction); - manager.add(new Separator()); - manager.add(clearAction); - manager.add(new Separator()); - manager.add(discardAction); - manager.add(undiscardAction); - } - - private void hookContextMenu() { - MenuManager menuMgr = new MenuManager("#PopupMenu"); - menuMgr.setRemoveAllWhenShown(true); - menuMgr.addMenuListener(new IMenuListener() { - public void menuAboutToShow(IMenuManager manager) { - RiologView.this.fillContextMenu(manager); - } - }); - Menu menu = menuMgr.createContextMenu(text); - text.setMenu(menu); - } - - private void makeActions() { - clearAction = confAction("Clear Log", "Empty the textbox", - ISharedImages.IMG_ETOOL_CLEAR, new Action() { - public void run() { - text.setText(""); - } - }); - - pauseAction = confAction("Pause Display", - "Stop adding packets to the textbox", - ISharedImages.IMG_ELCL_STOP, new Action() { - public void run() { - pauseAction.setEnabled(false); - unpauseAction.setEnabled(true); - pauseButton.setSelection(true); - pauseButton.setText("Show 0 Packets"); - paused = true; - } - }); - pauseAction.setEnabled(true); - unpauseAction = confAction("Continue Display", - "Continue adding packets to the textbox", - ISharedImages.IMG_TOOL_FORWARD, new Action() { - public void run() { - paused = false; - transferer.interrupt(); - pauseAction.setEnabled(true); - unpauseAction.setEnabled(false); - pauseButton.setSelection(false); - pauseButton.setText(pauseAction.getText()); - } - }); - unpauseAction.setEnabled(false); - - discardAction = confAction("Discard Incoming", - "Drop all incoming packets", ISharedImages.IMG_ETOOL_DELETE, - new Action() { - public void run() { - discard = true; - discardAction.setEnabled(false); - undiscardAction.setEnabled(true); - discardButton.setSelection(true); - discardButton.setText(undiscardAction.getText()); - } - }); - discardAction.setEnabled(true); - undiscardAction = confAction("Accept Incoming", - "Accept all incoming packets", ISharedImages.IMG_OBJ_ADD, - new Action() { - public void run() { - discard = false; - discardAction.setEnabled(true); - undiscardAction.setEnabled(false); - discardButton.setSelection(false); - discardButton.setText(discardAction.getText()); - } - }); - undiscardAction.setEnabled(false); - } - - /** - * Passing the focus request to the viewer's control. - */ - public void setFocus() { - text.setFocus(); - } - - public static String drainToString(ArrayList arr) { - int netlength = 0; - for (byte[] b : arr) { - netlength += b.length; - } - - byte[] sum = new byte[netlength]; - int mark = 0; - for (int i=0;i queue = new LinkedBlockingQueue<>(); - listener = startDaemonThread(new Runnable() { - @Override - public void run() { - DatagramSocket socket = makeRecvSocket(); - if (socket == null) - return; - socket_hook = socket; - byte[] buf = new byte[4096]; - DatagramPacket datagram = new DatagramPacket(buf, buf.length); - while (!Thread.interrupted()) { - byte[] s = getPacket(socket, datagram); - if (s != null && !discard) { - try { - queue.put(s); - } catch (InterruptedException e) { - socket.close(); - return; - } - } - } - socket.close(); - } - }, "Riolog-Listener"); - transferer = startDaemonThread(new Runnable() { - @Override - public void run() { - final ArrayList temp = new ArrayList<>(); - while (!cleanup) { - try { - temp.add(queue.take()); - } catch (InterruptedException e) { - if (cleanup) { - return; - } - } - queue.drainTo(temp); - if (!paused) { - Display.getDefault().syncExec(new Runnable() { - @Override - public void run() { - if (text.isDisposed()) - return; - text.append(drainToString(temp)); - } - }); - } else { - Display.getDefault().syncExec(new Runnable() { - @Override - public void run() { - if (paused) { - if (temp.size() == 1) { - pauseButton.setText("Show 1 Packet\u2002"); - } else { - pauseButton.setText("Show " + String.valueOf(temp.size()) + " Packets"); - } - } - } - }); - } - } - } - }, "Riolog-Transfer"); - } - - void stopListening() { - cleanup = true; - if (socket_hook != null) { - socket_hook.close(); - } - listener.interrupt(); - transferer.interrupt(); - } -} \ No newline at end of file diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.updatesite/index.html b/eclipse-plugins/edu.wpi.first.wpilib.plugins.updatesite/index.html deleted file mode 100644 index 3763331b5e..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.updatesite/index.html +++ /dev/null @@ -1,60 +0,0 @@ - - -WPILib Update Site - - - - - - -
- - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.updatesite/pom.xml b/eclipse-plugins/edu.wpi.first.wpilib.plugins.updatesite/pom.xml deleted file mode 100644 index 8c1f3a81f4..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.updatesite/pom.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - 4.0.0 - edu.wpi.first.wpilib.plugins.updatesite - eclipse-update-site - - - edu.wpi.first.wpilib.plugins - edu.wpi.first.wpilib.plugins - 0.1.0.qualifier - .. - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.updatesite/site.xml b/eclipse-plugins/edu.wpi.first.wpilib.plugins.updatesite/site.xml deleted file mode 100644 index f6498c4bba..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.updatesite/site.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - Core WPILib Robot Development Tools. - - - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.updatesite/web/site.css b/eclipse-plugins/edu.wpi.first.wpilib.plugins.updatesite/web/site.css deleted file mode 100644 index 62c6f9ffa4..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.updatesite/web/site.css +++ /dev/null @@ -1,12 +0,0 @@ - diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.updatesite/web/site.xsl b/eclipse-plugins/edu.wpi.first.wpilib.plugins.updatesite/web/site.xsl deleted file mode 100644 index c25380716c..0000000000 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.updatesite/web/site.xsl +++ /dev/null @@ -1,214 +0,0 @@ - - - - - - - - WPILib Update Site - - - -

WPILib Update Site

-

- - - - - - - - - - - - - - - - dark-row - - - light-row - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - dark-row - - - light-row - - - - - - - - - - - - - - - dark-row - - - light-row - - - - - - - - -
- - - -
- - - -
-
- ( - ) -
-
- - - - -
-
-
- - - - - - - - - - - - - - - - - - - - - -
Operating Systems:
Windows Systems:
Languages:
Architecture:
-


- Uncategorized -
- - - -
-
- ( - ) -
-
- - - - -
-

-
- - - - - - - - - - - - - - - - - - - - - -
Operating Systems:
Windows Systems:
Languages:
Architecture:
-
- - - -
-
- ( - ) -
-
- - - - -
-

-
- - - - - - - - - - - - - - - - - - - - - -
Operating Systems:
Windows Systems:
Languages:
Architecture:
-
- - -
-
-
diff --git a/eclipse-plugins/pom.xml b/eclipse-plugins/pom.xml deleted file mode 100644 index fe3ab7034e..0000000000 --- a/eclipse-plugins/pom.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - 4.0.0 - edu.wpi.first.wpilib.plugins - edu.wpi.first.wpilib.plugins - 0.1.0.qualifier - pom - - - edu.wpi.first.wpilib.plugins.core - edu.wpi.first.wpilib.plugins.core.feature - edu.wpi.first.wpilib.plugins.cpp - edu.wpi.first.wpilib.plugins.cpp.feature - edu.wpi.first.wpilib.plugins.java - edu.wpi.first.wpilib.plugins.java.feature - edu.wpi.first.wpilib.plugins.riolog - edu.wpi.first.wpilib.plugins.updatesite - - - - - 0.21.0 - - - - - juno - p2 - http://download.eclipse.org/releases/luna - - - FRC Binaries - http://first.wpi.edu/FRC/c/maven/ - - - - - - - org.eclipse.tycho - tycho-maven-plugin - ${tycho-version} - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - docline-java8-disable - - [1.8, - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - - -Xdoclint:none - - - - - - - - diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index fd7e590e5154e82211909581e71018372134fb27..e8c6bf7bb47dff6b81c2cf7a349eb7e912c9fbe2 100644 GIT binary patch delta 8143 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 a!dx4O5sX6+>;HLW1*YDjn0Eh}=l=nlz$2Le delta 8095 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/dev/null` diff --git a/hal/CMakeLists.txt b/hal/CMakeLists.txt deleted file mode 100644 index 5ad2e641a6..0000000000 --- a/hal/CMakeLists.txt +++ /dev/null @@ -1,17 +0,0 @@ -cmake_minimum_required(VERSION 2.8) -project(HAL) - -file(GLOB_RECURSE SRC_FILES lib/Athena/*.cpp) -include_directories(lib/Athena lib/Athena/FRC_FPGA_ChipObject include) -add_library(HALAthena STATIC ${SRC_FILES}) -target_link_libraries(HALAthena ${NI_LIBS}) -INSTALL(TARGETS HALAthena ARCHIVE DESTINATION lib COMPONENT lib) -INSTALL(FILES ${NI_LIBS} ${WPI_LD_LIBS} DESTINATION lib COMPONENT ni_lib) -INSTALL(DIRECTORY include DESTINATION ${CMAKE_INSTALL_PREFIX} COMPONENT headers) - -add_library(HALAthena_shared SHARED ${SRC_FILES}) -target_link_libraries(HALAthena_shared ${NI_LIBS}) -INSTALL(TARGETS HALAthena_shared LIBRARY DESTINATION lib COMPONENT lib) -# lib/ c m gcc_s ld-linux -# usr/lib -# FRC_NetworkCommunication FRC_FPGA_ChipObject RoboRIO_FRC_ChipObject diff --git a/hal/README.org b/hal/README.org deleted file mode 100644 index 9eb132a406..0000000000 --- a/hal/README.org +++ /dev/null @@ -1,94 +0,0 @@ - -* Purpose -The HAL is a hardware abstraction layer that provides a uniform -interface that can be used to access a number of primarily I/O -features in the underlying platform. The features include: -- Analog input, accumulation and triggers -- PWM, Relay and Solenoid output -- Digital input and output -- I2C and SPI communication -- Encoders and counters -- Interrupts and Notifiers - -The initial goal is to allow a higher level like WPILib to support -both the CRIO and the upcoming Athena platform only by changing which -version of the HAL it's running on. - -* Editing -You can always use any text editor and then build with Maven. There -are also eclipse project files so that it can be edited in the same -eclipse environment that teams develop with. For the AthenaXX, this -can be found in the =root= directory of this project. It imports as an -FRC Robot C++ Eclipse project. The Windriver project can be imported -from the =src= directory. - -* Building with Maven -There are multiple build targets that the HAL supports. Instructions -for setting up the environment and building each of these is described -below. Current targets are listed below: -- All: All of the following targets. -- include: The header files for the HAL. -- Azalea: CRIO C++ build. -- AthenaXX: Athena Dos Equis C++ build. -- AthenaXXJava: Athena Dos Equis Java build with auto-generated JNA - wrappers. - -Output from each build target is placed in the directory -=target/=. So, the Azalea output is placed in -=target/Azalea=. - -** All -Note: Windows only due to the Windriver requirement. -1. Ensure that =C:\WindRiver\gnu\3.4.4-vxworks-6.3\x86-win32\bin= is - on the system path so that =ccppc= and =arppc= can be accessed. -2. Set the environment variable =WIND_BASE= to =C:\WindRiver\vxworks-6.3=. -3. Ensure that - =$HOME/wpilib/toolchains/arm-none-linux-gnueabi-4.4.1/bin/= is on - the system path so that =arm-none-linux-gnueabi-g++= and - =arm-none-linux-gnueabi-ar= can be accessed. -4. Checkout and install the NI-Libraries from Github: - [[https://github.com/first/NI-Libraries]]. -5. Run the following maven command: - =mvn clean install= -6. Success - -** include -1. =cd= into the include directory: =cd include= -2. Run the following maven command: - =mvn clean install= -3. Success - -** Azalea -Note: Windows only. -1. Ensure that =C:\WindRiver\gnu\3.4.4-vxworks-6.3\x86-win32\bin= is - on the system path so that =ccppc= and =arppc= can be accessed. -2. Set the environment variable =WIND_BASE= to =C:\WindRiver\vxworks-6.3=. -3. =cd= into the AthenaXX directory: =cd AthenaXX= -4. =cd= into the Azalea directory: =cd Azalea= -5. Run the following maven command: - =mvn clean install= -6. Success - -** AthenaXX -1. Ensure that - =$HOME/wpilib/toolchains/arm-none-linux-gnueabi-4.4.1/bin/= is on - the system path so that =arm-none-linux-gnueabi-g++= and - =arm-none-linux-gnueabi-ar= can be accessed. -2. Install the include target. -3. =cd= into the AthenaXX directory: =cd AthenaXX= -4. Run the following maven command: - =mvn clean install= -5. Success - -** AthenaXXJava -1. Ensure that - =$HOME/wpilib/toolchains/arm-none-linux-gnueabi-4.4.1/bin/= is on - the system path so that =arm-none-linux-gnueabi-g++= and - =arm-none-linux-gnueabi-ar= can be accessed. -2. Checkout and install the NI-Libraries from Github: - [[https://github.com/first/NI-Libraries]]. -3. Install the include target. -4. =cd= into the AthenaXXJava directory: =cd AthenaXXJava= -5. Run the following maven command: - =mvn clean install= -6. Success diff --git a/jenkins/README b/jenkins/README deleted file mode 100644 index 099793941e..0000000000 --- a/jenkins/README +++ /dev/null @@ -1 +0,0 @@ -This directory contains special jenkins build options. \ No newline at end of file diff --git a/jenkins/build.gradle b/jenkins/build.gradle deleted file mode 100644 index 419c05922a..0000000000 --- a/jenkins/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -evaluationDependsOn(':wpilibj') -evaluationDependsOn(':wpilibc') - -task publishJavadoc(type: Copy) { - description = 'Publishes the generated javadoc to the docs/site/java folder' - group = 'WPILib' - def javadoc = project(':wpilibj').javadoc - dependsOn javadoc - from javadoc.destinationDir - destinationDir file('docs/site/java') -} - -task publishDoxygen(type: Copy) { - description = 'Publishes the generated doxygen to the docs/site/cpp folder' - group = 'WPILib' - def doxygen = project(':wpilibc').doxygen - dependsOn doxygen - from doxygen.outputDir - destinationDir file('docs/site/cpp') -} - -task publishDocs() { - description = 'Publishes the generated javadoc and doxygen to the docs/site/ folder' - group = 'WPILib' - dependsOn publishJavadoc - dependsOn publishDoxygen -} - -task clean(type: Delete) { - delete 'docs/site' -} diff --git a/jenkins/docs/.gitignore b/jenkins/docs/.gitignore deleted file mode 100644 index da3d33790f..0000000000 --- a/jenkins/docs/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -build/ -site/ \ No newline at end of file diff --git a/jenkins/docs/Makefile b/jenkins/docs/Makefile deleted file mode 100644 index 64600a90ed..0000000000 --- a/jenkins/docs/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -allwpilib=../.. -version=DEVELOPMENT - -all: java cpp site - -java: - mkdir -p build/java/ - mkdir -p site/java/ - cp -r $(allwpilib)/wpilibj/wpilibJava/src/main/java/* build/java/ - cp -r $(allwpilib)/wpilibj/wpilibJavaDevices/src/main/java/* build/java/ - # cp -r $(allwpilib)/networktables/java/src/main/java/* build/java/ - ( cat java.doxy ; echo "PROJECT_NUMBER=${version}" ) | doxygen - - -cpp: - mkdir -p build/cpp/ - mkdir -p site/cpp/ - cp -r $(allwpilib)/wpilibc/wpilibC++/src build/cpp/ - cp -r $(allwpilib)/wpilibc/wpilibC++/include build/cpp/ - cp -r $(allwpilib)/wpilibc/wpilibC++Devices/src build/cpp/ - cp -r $(allwpilib)/wpilibc/wpilibC++Devices/include build/cpp/ - # cp -r $(allwpilib)/networktables/cpp/lib build/cpp/ - # cp -r $(allwpilib)/networktables/cpp/include build/cpp/ - ( cat cpp.doxy ; echo "PROJECT_NUMBER=${version}" ) | doxygen - - -# TODO: HAL - -site: - mkdir -p build/site/ - -clean: - rm -rf build/ - rm -rf site/ diff --git a/jenkins/docs/cpp.doxy b/jenkins/docs/cpp.doxy deleted file mode 100644 index 604e293342..0000000000 --- a/jenkins/docs/cpp.doxy +++ /dev/null @@ -1,2305 +0,0 @@ -# Doxyfile 1.8.6 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. -# -# All text after a double hash (##) is considered a comment and is placed in -# front of the TAG it is preceding. -# -# All text after a single hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# For lists, items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (\" \"). - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all text -# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv -# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv -# for the list of possible encodings. -# The default value is: UTF-8. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by -# double-quotes, unless you are using Doxywizard) that should identify the -# project for which the documentation is generated. This name is used in the -# title of most generated pages and in a few other places. -# The default value is: My Project. - -PROJECT_NAME = "WPILibC++" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. This -# could be handy for archiving the generated documentation or if some version -# control system is used. - -PROJECT_NUMBER = 2015-Alpha-0.1 - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer a -# quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = - -# With the PROJECT_LOGO tag one can specify an logo or icon that is included in -# the documentation. The maximum height of the logo should not exceed 55 pixels -# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo -# to the output directory. - -PROJECT_LOGO = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path -# into which the generated documentation will be written. If a relative path is -# entered, it will be relative to the location where doxygen was started. If -# left blank the current directory will be used. - -OUTPUT_DIRECTORY = site/cpp - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- -# directories (in 2 levels) under the output directory of each output format and -# will distribute the generated files over these directories. Enabling this -# option can be useful when feeding doxygen a huge amount of source files, where -# putting all generated files in the same directory would otherwise causes -# performance problems for the file system. -# The default value is: NO. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, -# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), -# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, -# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, -# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, -# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, -# Ukrainian and Vietnamese. -# The default value is: English. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member -# descriptions after the members that are listed in the file and class -# documentation (similar to Javadoc). Set to NO to disable this. -# The default value is: YES. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief -# description of a member or function before the detailed description -# -# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. -# The default value is: YES. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator that is -# used to form the text in various listings. Each string in this list, if found -# as the leading text of the brief description, will be stripped from the text -# and the result, after processing the whole list, is used as the annotated -# text. Otherwise, the brief description is used as-is. If left blank, the -# following values are used ($name is automatically replaced with the name of -# the entity):The $name class, The $name widget, The $name file, is, provides, -# specifies, contains, represents, a, an and the. - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# doxygen will generate a detailed section even if there is only a brief -# description. -# The default value is: NO. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. -# The default value is: NO. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path -# before files name in the file list and in the header files. If set to NO the -# shortest path that makes the file name unique will be used -# The default value is: YES. - -FULL_PATH_NAMES = YES - -# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. -# Stripping is only done if one of the specified strings matches the left-hand -# part of the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the path to -# strip. -# -# Note that you can specify absolute paths here, but also relative paths, which -# will be relative from the directory where doxygen is started. -# This tag requires that the tag FULL_PATH_NAMES is set to YES. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the -# path mentioned in the documentation of a class, which tells the reader which -# header file to include in order to use a class. If left blank only the name of -# the header file containing the class definition is used. Otherwise one should -# specify the list of include paths that are normally passed to the compiler -# using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but -# less readable) file names. This can be useful is your file systems doesn't -# support long names like on DOS, Mac, or CD-ROM. -# The default value is: NO. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the -# first line (until the first dot) of a Javadoc-style comment as the brief -# description. If set to NO, the Javadoc-style will behave just like regular Qt- -# style comments (thus requiring an explicit @brief command for a brief -# description.) -# The default value is: NO. - -JAVADOC_AUTOBRIEF = YES - -# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first -# line (until the first dot) of a Qt-style comment as the brief description. If -# set to NO, the Qt-style will behave just like regular Qt-style comments (thus -# requiring an explicit \brief command for a brief description.) -# The default value is: NO. - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a -# multi-line C++ special comment block (i.e. a block of //! or /// comments) as -# a brief description. This used to be the default behavior. The new default is -# to treat a multi-line C++ comment block as a detailed description. Set this -# tag to YES if you prefer the old behavior instead. -# -# Note that setting this tag to YES also means that rational rose comments are -# not recognized any more. -# The default value is: NO. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the -# documentation from any documented member that it re-implements. -# The default value is: YES. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a -# new page for each member. If set to NO, the documentation of a member will be -# part of the file/class/namespace that contains it. -# The default value is: NO. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen -# uses this value to replace tabs by spaces in code fragments. -# Minimum value: 1, maximum value: 16, default value: 4. - -TAB_SIZE = 4 - -# This tag can be used to specify a number of aliases that act as commands in -# the documentation. An alias has the form: -# name=value -# For example adding -# "sideeffect=@par Side Effects:\n" -# will allow you to put the command \sideeffect (or @sideeffect) in the -# documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines. - -ALIASES = - -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding "class=itcl::class" -# will allow you to use the command class in the itcl::class meaning. - -TCL_SUBST = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. For -# instance, some of the names that are used will be different. The list of all -# members will be omitted, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or -# Python sources only. Doxygen will then generate output that is more tailored -# for that language. For instance, namespaces will be presented as packages, -# qualified scopes will look different, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources. Doxygen will then generate output that is tailored for Fortran. -# The default value is: NO. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for VHDL. -# The default value is: NO. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given -# extension. Doxygen has a built-in mapping, but you can override or extend it -# using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make -# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C -# (default is Fortran), use: inc=Fortran f=C. -# -# Note For files without extension you can use no_extension as a placeholder. -# -# Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments -# according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you can -# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in -# case of backward compatibilities issues. -# The default value is: YES. - -MARKDOWN_SUPPORT = YES - -# When enabled doxygen tries to link words that correspond to documented -# classes, or namespaces to their corresponding documentation. Such a link can -# be prevented in individual cases by by putting a % sign in front of the word -# or globally by setting AUTOLINK_SUPPORT to NO. -# The default value is: YES. - -AUTOLINK_SUPPORT = YES - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should set this -# tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); -# versus func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. -# The default value is: NO. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. -# The default value is: NO. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen -# will parse them like normal C++ but will assume all classes use public instead -# of private inheritance when no explicit protection keyword is present. -# The default value is: NO. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate -# getter and setter methods for a property. Setting this option to YES will make -# doxygen to replace the get and set methods by a property in the documentation. -# This will only work if the methods are indeed getting or setting a simple -# type. If this is not the case, or you want to show the methods anyway, you -# should set this option to NO. -# The default value is: YES. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. -# The default value is: NO. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES to allow class member groups of the same type -# (for instance a group of public functions) to be put as a subgroup of that -# type (e.g. under the Public Functions section). Set it to NO to prevent -# subgrouping. Alternatively, this can be done per class using the -# \nosubgrouping command. -# The default value is: YES. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions -# are shown inside the group in which they are included (e.g. using \ingroup) -# instead of on a separate page (for HTML and Man pages) or section (for LaTeX -# and RTF). -# -# Note that this feature does not work in combination with -# SEPARATE_MEMBER_PAGES. -# The default value is: NO. - -INLINE_GROUPED_CLASSES = NO - -# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions -# with only public data fields or simple typedef fields will be shown inline in -# the documentation of the scope in which they are defined (i.e. file, -# namespace, or group documentation), provided this scope is documented. If set -# to NO, structs, classes, and unions are shown on a separate page (for HTML and -# Man pages) or section (for LaTeX and RTF). -# The default value is: NO. - -INLINE_SIMPLE_STRUCTS = NO - -# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or -# enum is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically be -# useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. -# The default value is: NO. - -TYPEDEF_HIDES_STRUCT = NO - -# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This -# cache is used to resolve symbols given their name and scope. Since this can be -# an expensive process and often the same symbol appears multiple times in the -# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small -# doxygen will become slower. If the cache is too large, memory is wasted. The -# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range -# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 -# symbols. At the end of a run doxygen will report the cache usage and suggest -# the optimal cache size from a speed point of view. -# Minimum value: 0, maximum value: 9, default value: 0. - -LOOKUP_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. Private -# class members and static file members will be hidden unless the -# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. -# Note: This will also disable the warnings about undocumented members that are -# normally produced when WARNINGS is set to YES. -# The default value is: NO. - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will -# be included in the documentation. -# The default value is: NO. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal -# scope will be included in the documentation. -# The default value is: NO. - -EXTRACT_PACKAGE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file will be -# included in the documentation. -# The default value is: NO. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined -# locally in source files will be included in the documentation. If set to NO -# only classes defined in header files are included. Does not have any effect -# for Java sources. -# The default value is: YES. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local methods, -# which are defined in the implementation section but not in the interface are -# included in the documentation. If set to NO only methods in the interface are -# included. -# The default value is: NO. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base name of -# the file that contains the anonymous namespace. By default anonymous namespace -# are hidden. -# The default value is: NO. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all -# undocumented members inside documented classes or files. If set to NO these -# members will be included in the various overviews, but no documentation -# section is generated. This option has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. If set -# to NO these classes will be included in the various overviews. This option has -# no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO these declarations will be -# included in the documentation. -# The default value is: NO. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any -# documentation blocks found inside the body of a function. If set to NO these -# blocks will be appended to the function's detailed documentation block. -# The default value is: NO. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation that is typed after a -# \internal command is included. If the tag is set to NO then the documentation -# will be excluded. Set it to YES to include the internal documentation. -# The default value is: NO. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. -# The default value is: system dependent. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with -# their full class and namespace scopes in the documentation. If set to YES the -# scope will be hidden. -# The default value is: NO. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of -# the files that are included by a file in the documentation of that file. -# The default value is: YES. - -SHOW_INCLUDE_FILES = YES - -# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each -# grouped member an include statement to the documentation, telling the reader -# which file to include in order to use the member. -# The default value is: NO. - -SHOW_GROUPED_MEMB_INC = NO - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include -# files with double quotes in the documentation rather than with sharp brackets. -# The default value is: NO. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the -# documentation for inline members. -# The default value is: YES. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the -# (detailed) documentation of file and class members alphabetically by member -# name. If set to NO the members will appear in declaration order. -# The default value is: YES. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief -# descriptions of file, namespace and class members alphabetically by member -# name. If set to NO the members will appear in declaration order. Note that -# this will also influence the order of the classes in the class list. -# The default value is: NO. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the -# (brief and detailed) documentation of class members so that constructors and -# destructors are listed first. If set to NO the constructors will appear in the -# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. -# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief -# member documentation. -# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting -# detailed member documentation. -# The default value is: NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy -# of group names into alphabetical order. If set to NO the group names will -# appear in their defined order. -# The default value is: NO. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by -# fully-qualified names, including namespaces. If set to NO, the class list will -# be sorted only by class name, not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the alphabetical -# list. -# The default value is: NO. - -SORT_BY_SCOPE_NAME = NO - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper -# type resolution of all parameters of a function it will reject a match between -# the prototype and the implementation of a member function even if there is -# only one candidate or it is obvious which candidate to choose by doing a -# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still -# accept a match between prototype and implementation in such cases. -# The default value is: NO. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the -# todo list. This list is created by putting \todo commands in the -# documentation. -# The default value is: YES. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the -# test list. This list is created by putting \test commands in the -# documentation. -# The default value is: YES. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug -# list. This list is created by putting \bug commands in the documentation. -# The default value is: YES. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) -# the deprecated list. This list is created by putting \deprecated commands in -# the documentation. -# The default value is: YES. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional documentation -# sections, marked by \if ... \endif and \cond -# ... \endcond blocks. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the -# initial value of a variable or macro / define can have for it to appear in the -# documentation. If the initializer consists of more lines than specified here -# it will be hidden. Use a value of 0 to hide initializers completely. The -# appearance of the value of individual variables and macros / defines can be -# controlled using \showinitializer or \hideinitializer command in the -# documentation regardless of this setting. -# Minimum value: 0, maximum value: 10000, default value: 30. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at -# the bottom of the documentation of classes and structs. If set to YES the list -# will mention the files that were used to generate the documentation. -# The default value is: YES. - -SHOW_USED_FILES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This -# will remove the Files entry from the Quick Index and from the Folder Tree View -# (if specified). -# The default value is: YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces -# page. This will remove the Namespaces entry from the Quick Index and from the -# Folder Tree View (if specified). -# The default value is: YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command command input-file, where command is the value of the -# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided -# by doxygen. Whatever the program writes to standard output is used as the file -# version. For an example see the documentation. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. You can -# optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. -# -# Note that if you run doxygen from a directory containing a file called -# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE -# tag is left empty. - -LAYOUT_FILE = - -# The CITE_BIB_FILES tag can be used to specify one or more bib files containing -# the reference definitions. This must be a list of .bib files. The .bib -# extension is automatically appended if omitted. This requires the bibtex tool -# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. -# For LaTeX the style of the bibliography can be controlled using -# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the -# search path. Do not use file names with spaces, bibtex cannot handle them. See -# also \cite for info how to create references. - -CITE_BIB_FILES = - -#--------------------------------------------------------------------------- -# Configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated to -# standard output by doxygen. If QUIET is set to YES this implies that the -# messages are off. -# The default value is: NO. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES -# this implies that the warnings are on. -# -# Tip: Turn warnings on while writing the documentation. -# The default value is: YES. - -WARNINGS = YES - -# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate -# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag -# will automatically be disabled. -# The default value is: YES. - -WARN_IF_UNDOCUMENTED = YES - -# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some parameters -# in a documented function, or documenting parameters that don't exist or using -# markup commands wrongly. -# The default value is: YES. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that -# are documented, but have no documentation for their parameters or return -# value. If set to NO doxygen will only warn about wrong or incomplete parameter -# documentation, but not about the absence of documentation. -# The default value is: NO. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that doxygen -# can produce. The string should contain the $file, $line, and $text tags, which -# will be replaced by the file and line number from which the warning originated -# and the warning text. Optionally the format may contain $version, which will -# be replaced by the version of the file (if it could be obtained via -# FILE_VERSION_FILTER) -# The default value is: $file:$line: $text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning and error -# messages should be written. If left blank the output is written to standard -# error (stderr). - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# Configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag is used to specify the files and/or directories that contain -# documented source files. You may enter file names like myfile.cpp or -# directories like /usr/src/myproject. Separate the files or directories with -# spaces. -# Note: If this tag is empty the current directory is searched. - -INPUT = build/cpp - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses -# libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: http://www.gnu.org/software/libiconv) for the list of -# possible encodings. -# The default value is: UTF-8. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank the -# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, -# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, -# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, -# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, -# *.qsf, *.as and *.js. - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to specify whether or not subdirectories should -# be searched for input files as well. -# The default value is: NO. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should be -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. -# -# Note that relative paths are relative to the directory from which doxygen is -# run. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. -# The default value is: NO. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories for example use the pattern */test/* - -EXCLUDE_PATTERNS = nivision.h \ - pcre.h \ - */NetworkCommunication/* - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories use the pattern */test/* - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or directories -# that contain example code fragments that are included (see the \include -# command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank all -# files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude commands -# irrespective of the value of the RECURSIVE tag. -# The default value is: NO. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or directories -# that contain images that are to be included in the documentation (see the -# \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command: -# -# -# -# where is the value of the INPUT_FILTER tag, and is the -# name of an input file. Doxygen will then use the output that the filter -# program writes to standard output. If FILTER_PATTERNS is specified, this tag -# will be ignored. -# -# Note that the filter must not add or remove lines; it is applied before the -# code is scanned, but not when the output code is generated. If lines are added -# or removed, the anchors will not be placed correctly. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: pattern=filter -# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how -# filters are used. If the FILTER_PATTERNS tag is empty or if none of the -# patterns match the file name, INPUT_FILTER is applied. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER ) will also be used to filter the input files that are used for -# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). -# The default value is: NO. - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and -# it is also possible to disable source filtering for a specific pattern using -# *.ext= (so without naming a filter). -# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. - -FILTER_SOURCE_PATTERNS = - -# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that -# is part of the input, its contents will be placed on the main page -# (index.html). This can be useful if you have a project on for instance GitHub -# and want to reuse the introduction page also for the doxygen output. - -USE_MDFILE_AS_MAINPAGE = - -#--------------------------------------------------------------------------- -# Configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will be -# generated. Documented entities will be cross-referenced with these sources. -# -# Note: To get rid of all source code in the generated output, make sure that -# also VERBATIM_HEADERS is set to NO. -# The default value is: NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body of functions, -# classes and enums directly into the documentation. -# The default value is: NO. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any -# special comment blocks from generated source code fragments. Normal C, C++ and -# Fortran comments will always remain visible. -# The default value is: YES. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# function all documented functions referencing it will be listed. -# The default value is: NO. - -REFERENCED_BY_RELATION = NO - -# If the REFERENCES_RELATION tag is set to YES then for each documented function -# all documented entities called/used by that function will be listed. -# The default value is: NO. - -REFERENCES_RELATION = NO - -# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set -# to YES, then the hyperlinks from functions in REFERENCES_RELATION and -# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will -# link to the documentation. -# The default value is: YES. - -REFERENCES_LINK_SOURCE = YES - -# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the -# source code will show a tooltip with additional information such as prototype, -# brief description and links to the definition and documentation. Since this -# will make the HTML file larger and loading of large files a bit slower, you -# can opt to disable this feature. -# The default value is: YES. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -SOURCE_TOOLTIPS = YES - -# If the USE_HTAGS tag is set to YES then the references to source code will -# point to the HTML generated by the htags(1) tool instead of doxygen built-in -# source browser. The htags tool is part of GNU's global source tagging system -# (see http://www.gnu.org/software/global/global.html). You will need version -# 4.8.6 or higher. -# -# To use it do the following: -# - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the config file -# - Make sure the INPUT points to the root of the source tree -# - Run doxygen as normal -# -# Doxygen will invoke htags (and that will in turn invoke gtags), so these -# tools must be available from the command line (i.e. in the search path). -# -# The result: instead of the source browser generated by doxygen, the links to -# source code will now point to the output of htags. -# The default value is: NO. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a -# verbatim copy of the header file for each class for which an include is -# specified. Set to NO to disable this. -# See also: Section \class. -# The default value is: YES. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# Configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all -# compounds will be generated. Enable this if the project contains a lot of -# classes, structs, unions or interfaces. -# The default value is: YES. - -ALPHABETICAL_INDEX = YES - -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all classes will -# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag -# can be used to specify a prefix (or a list of prefixes) that should be ignored -# while generating the index headers. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output -# The default value is: YES. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_OUTPUT = . - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each -# generated HTML page (for example: .htm, .php, .asp). -# The default value is: .html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a user-defined HTML header file for -# each generated HTML page. If the tag is left blank doxygen will generate a -# standard header. -# -# To get valid HTML the header file that includes any scripts and style sheets -# that doxygen needs, which is dependent on the configuration options used (e.g. -# the setting GENERATE_TREEVIEW). It is highly recommended to start with a -# default header using -# doxygen -w html new_header.html new_footer.html new_stylesheet.css -# YourConfigFile -# and then modify the file new_header.html. See also section "Doxygen usage" -# for information on how to generate the default header that doxygen normally -# uses. -# Note: The header is subject to change so you typically have to regenerate the -# default header when upgrading to a newer version of doxygen. For a description -# of the possible markers and block names see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each -# generated HTML page. If the tag is left blank doxygen will generate a standard -# footer. See HTML_HEADER for more information on how to generate a default -# footer and what special commands can be used inside the footer. See also -# section "Doxygen usage" for information on how to generate the default footer -# that doxygen normally uses. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style -# sheet that is used by each HTML page. It can be used to fine-tune the look of -# the HTML output. If left blank doxygen will generate a default style sheet. -# See also section "Doxygen usage" for information on how to generate the style -# sheet that doxygen normally uses. -# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as -# it is more robust and this tag (HTML_STYLESHEET) will in the future become -# obsolete. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_STYLESHEET = - -# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user- -# defined cascading style sheet that is included after the standard style sheets -# created by doxygen. Using this option one can overrule certain style aspects. -# This is preferred over using HTML_STYLESHEET since it does not replace the -# standard style sheet and is therefor more robust against future updates. -# Doxygen will copy the style sheet file to the output directory. For an example -# see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that the -# files will be copied as-is; there are no commands or markers available. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen -# will adjust the colors in the stylesheet and background images according to -# this color. Hue is specified as an angle on a colorwheel, see -# http://en.wikipedia.org/wiki/Hue for more information. For instance the value -# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 -# purple, and 360 is red again. -# Minimum value: 0, maximum value: 359, default value: 220. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_HUE = 220 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use grayscales only. A -# value of 255 will produce the most vivid colors. -# Minimum value: 0, maximum value: 255, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the -# luminance component of the colors in the HTML output. Values below 100 -# gradually make the output lighter, whereas values above 100 make the output -# darker. The value divided by 100 is the actual gamma applied, so 80 represents -# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not -# change the gamma. -# Minimum value: 40, maximum value: 240, default value: 80. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_GAMMA = 80 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_DYNAMIC_SECTIONS = NO - -# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries -# shown in the various tree structured indices initially; the user can expand -# and collapse entries dynamically later on. Doxygen will expand the tree to -# such a level that at most the specified number of entries are visible (unless -# a fully collapsed tree already exceeds this amount). So setting the number of -# entries 1 will produce a full collapsed tree by default. 0 is a special value -# representing an infinite number of entries and will result in a full expanded -# tree by default. -# Minimum value: 0, maximum value: 9999, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_INDEX_NUM_ENTRIES = 100 - -# If the GENERATE_DOCSET tag is set to YES, additional index files will be -# generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: http://developer.apple.com/tools/xcode/), introduced with -# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a -# Makefile in the HTML output directory. Running make will produce the docset in -# that directory and running make install will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_DOCSET = NO - -# This tag determines the name of the docset feed. A documentation feed provides -# an umbrella under which multiple documentation sets from a single provider -# (such as a company or product suite) can be grouped. -# The default value is: Doxygen generated docs. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# This tag specifies a string that should uniquely identify the documentation -# set bundle. This should be a reverse domain-name style string, e.g. -# com.mycompany.MyDocSet. Doxygen will append .docset to the name. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify -# the documentation publisher. This should be a reverse domain-name style -# string, e.g. com.mycompany.MyDocSet.documentation. -# The default value is: org.doxygen.Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. -# The default value is: Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three -# additional HTML index files: index.hhp, index.hhc, and index.hhk. The -# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on -# Windows. -# -# The HTML Help Workshop contains a compiler that can convert all HTML output -# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML -# files are now used as the Windows 98 help format, and will replace the old -# Windows help format (.hlp) on all Windows platforms in the future. Compressed -# HTML files also contain an index, a table of contents, and you can search for -# words in the documentation. The HTML workshop also contains a viewer for -# compressed HTML files. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_HTMLHELP = NO - -# The CHM_FILE tag can be used to specify the file name of the resulting .chm -# file. You can add a path in front of the file if the result should not be -# written to the html output directory. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_FILE = - -# The HHC_LOCATION tag can be used to specify the location (absolute path -# including file name) of the HTML help compiler ( hhc.exe). If non-empty -# doxygen will try to run the HTML help compiler on the generated index.hhp. -# The file has to be specified with full path. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -HHC_LOCATION = - -# The GENERATE_CHI flag controls if a separate .chi index file is generated ( -# YES) or that it should be included in the master .chm file ( NO). -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -GENERATE_CHI = NO - -# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) -# and project file content. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_INDEX_ENCODING = - -# The BINARY_TOC flag controls whether a binary table of contents is generated ( -# YES) or a normal table of contents ( NO) in the .chm file. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members to -# the table of contents of the HTML help documentation and to the tree view. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that -# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help -# (.qch) of the generated HTML documentation. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify -# the file name of the resulting .qch file. The path specified is relative to -# the HTML output folder. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help -# Project output. For more information please see Qt Help Project / Namespace -# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt -# Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- -# folders). -# The default value is: doc. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_VIRTUAL_FOLDER = doc - -# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom -# filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's filter section matches. Qt Help Project / Filter Attributes (see: -# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_SECT_FILTER_ATTRS = - -# The QHG_LOCATION tag can be used to specify the location of Qt's -# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the -# generated .qhp file. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be -# generated, together with the HTML files, they form an Eclipse help plugin. To -# install this plugin and make it available under the help contents menu in -# Eclipse, the contents of the directory containing the HTML and XML files needs -# to be copied into the plugins directory of eclipse. The name of the directory -# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. -# After copying Eclipse needs to be restarted before the help appears. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the Eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have this -# name. Each documentation set should have its own identifier. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# If you want full control over the layout of the generated HTML pages it might -# be necessary to disable the index and replace it with your own. The -# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top -# of each HTML page. A value of NO enables the index and the value YES disables -# it. Since the tabs in the index contain the same information as the navigation -# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -DISABLE_INDEX = YES - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. If the tag -# value is set to YES, a side panel will be generated containing a tree-like -# index structure (just like the one that is generated for HTML Help). For this -# to work a browser that supports JavaScript, DHTML, CSS and frames is required -# (i.e. any modern browser). Windows users are probably better off using the -# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can -# further fine-tune the look of the index. As an example, the default style -# sheet generated by doxygen has an example that shows how to put an image at -# the root of the tree instead of the PROJECT_NAME. Since the tree basically has -# the same information as the tab index, you could consider setting -# DISABLE_INDEX to YES when enabling this option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_TREEVIEW = YES - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that -# doxygen will group on one line in the generated HTML documentation. -# -# Note that a value of 0 will completely suppress the enum values from appearing -# in the overview section. -# Minimum value: 0, maximum value: 20, default value: 4. -# This tag requires that the tag GENERATE_HTML is set to YES. - -ENUM_VALUES_PER_LINE = 4 - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used -# to set the initial width (in pixels) of the frame in which the tree is shown. -# Minimum value: 0, maximum value: 1500, default value: 250. -# This tag requires that the tag GENERATE_HTML is set to YES. - -TREEVIEW_WIDTH = 250 - -# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to -# external symbols imported via tag files in a separate window. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of LaTeX formulas included as images in -# the HTML documentation. When you change the font size after a successful -# doxygen run you need to manually remove any form_*.png images from the HTML -# output directory to force them to be regenerated. -# Minimum value: 8, maximum value: 50, default value: 10. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# http://www.mathjax.org) which uses client side Javascript for the rendering -# instead of using prerendered bitmaps. Use this if you do not have LaTeX -# installed or if you want to formulas look prettier in the HTML output. When -# enabled you may also need to install MathJax separately and configure the path -# to it using the MATHJAX_RELPATH option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -USE_MATHJAX = NO - -# When MathJax is enabled you can set the default output format to be used for -# the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/latest/output.html) for more details. -# Possible values are: HTML-CSS (which is slower, but has the best -# compatibility), NativeMML (i.e. MathML) and SVG. -# The default value is: HTML-CSS. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_FORMAT = HTML-CSS - -# When MathJax is enabled you need to specify the location relative to the HTML -# output directory using the MATHJAX_RELPATH option. The destination directory -# should contain the MathJax.js script. For instance, if the mathjax directory -# is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax -# Content Delivery Network so you can quickly see the result without installing -# MathJax. However, it is strongly recommended to install a local copy of -# MathJax from http://www.mathjax.org before deployment. -# The default value is: http://cdn.mathjax.org/mathjax/latest. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest - -# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax -# extension names that should be enabled during MathJax rendering. For example -# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_EXTENSIONS = - -# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces -# of code that will be used on startup of the MathJax code. See the MathJax site -# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an -# example see the documentation. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_CODEFILE = - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box for -# the HTML output. The underlying search engine uses javascript and DHTML and -# should work on any modern browser. Note that when using HTML help -# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) -# there is already a search function so this one should typically be disabled. -# For large projects the javascript based search engine can be slow, then -# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to -# search using the keyboard; to jump to the search box use + S -# (what the is depends on the OS and browser, but it is typically -# , /