mirror of
https://github.com/Astatin3/Vision-Minibot.git
synced 2026-06-08 16:18:02 -06:00
Update to 2025, pathplanner issue
This commit is contained in:
@@ -1,2 +0,0 @@
|
|||||||
# Auto detect text files and perform LF normalization
|
|
||||||
* text=auto
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
name: Java CI
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v1
|
|
||||||
- name: Set up JDK 17
|
|
||||||
uses: actions/setup-java@v1
|
|
||||||
with:
|
|
||||||
java-version: 17
|
|
||||||
- name: Change wrapper permissions
|
|
||||||
run: chmod +x ./gradlew
|
|
||||||
- name: Build with Gradle
|
|
||||||
run: ./gradlew build
|
|
||||||
+6
-2
@@ -169,6 +169,8 @@ out/
|
|||||||
.fleet
|
.fleet
|
||||||
|
|
||||||
# Simulation GUI and other tools window save file
|
# Simulation GUI and other tools window save file
|
||||||
|
networktables.json
|
||||||
|
simgui.json
|
||||||
*-window.json
|
*-window.json
|
||||||
|
|
||||||
# Simulation data log directory
|
# Simulation data log directory
|
||||||
@@ -176,5 +178,7 @@ logs/
|
|||||||
|
|
||||||
# Folder that has CTRE Phoenix Sim device config storage
|
# Folder that has CTRE Phoenix Sim device config storage
|
||||||
ctre_sim/
|
ctre_sim/
|
||||||
simgui.json
|
|
||||||
simgui-ds.json
|
# clangd
|
||||||
|
/.cache
|
||||||
|
compile_commands.json
|
||||||
|
|||||||
Generated
-3
@@ -1,3 +0,0 @@
|
|||||||
# Default ignored files
|
|
||||||
/shelf/
|
|
||||||
/workspace.xml
|
|
||||||
Generated
-17
@@ -1,17 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="GradleSettings">
|
|
||||||
<option name="linkedExternalProjectsSettings">
|
|
||||||
<GradleProjectSettings>
|
|
||||||
<option name="distributionType" value="DEFAULT_WRAPPED" />
|
|
||||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
|
||||||
<option name="gradleJvm" value="temurin-11" />
|
|
||||||
<option name="modules">
|
|
||||||
<set>
|
|
||||||
<option value="$PROJECT_DIR$" />
|
|
||||||
</set>
|
|
||||||
</option>
|
|
||||||
</GradleProjectSettings>
|
|
||||||
</option>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
Generated
-4
@@ -1,4 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
|
||||||
</project>
|
|
||||||
Generated
-6
@@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="VcsDirectoryMappings">
|
|
||||||
<mapping directory="" vcs="Git" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
/*----------------------------------------------------------------------------*/
|
|
||||||
/* Copyright (c) 2019 FIRST. All Rights Reserved. */
|
|
||||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
|
||||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
|
||||||
/* the project. */
|
|
||||||
/*----------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
package frc4388.robot.commands;
|
|
||||||
|
|
||||||
import edu.wpi.first.wpilibj2.command.*;
|
|
||||||
import frc4388.robot.subsystems.*;
|
|
||||||
import org.junit.*;
|
|
||||||
|
|
||||||
import static org.mockito.Mockito.mock;
|
|
||||||
import static org.mockito.Mockito.verify;
|
|
||||||
|
|
||||||
public class CommandTest {
|
|
||||||
private CommandScheduler scheduler = null;
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void setup() {
|
|
||||||
scheduler = CommandScheduler.getInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Update this to use an actual command. Won't work with inline commands for some reason
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testExample() {
|
|
||||||
// Arrange
|
|
||||||
Drive drive = mock(Drive.class);
|
|
||||||
RunCommand command = new RunCommand(() -> drive.driveWithInput(0, 0), drive);
|
|
||||||
|
|
||||||
// Act
|
|
||||||
scheduler.schedule(command);
|
|
||||||
scheduler.run();
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
verify(drive).driveWithInput(0, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
/*----------------------------------------------------------------------------*/
|
|
||||||
/* Copyright (c) 2018-2019 FIRST. All Rights Reserved. */
|
|
||||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
|
||||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
|
||||||
/* the project. */
|
|
||||||
/*----------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
package frc4388.robot.subsystems;
|
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
|
||||||
import static org.mockito.Mockito.*;
|
|
||||||
|
|
||||||
import org.junit.*;
|
|
||||||
|
|
||||||
import edu.wpi.first.wpilibj.Spark;
|
|
||||||
import frc4388.robot.Constants.LEDConstants;
|
|
||||||
import frc4388.utility.LEDPatterns;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Based off the LEDSubsystemTest class
|
|
||||||
*/
|
|
||||||
public class SubsystemTest {
|
|
||||||
@Test
|
|
||||||
public void testConstructor() {
|
|
||||||
// Arrange
|
|
||||||
Spark ledController = mock(Spark.class);
|
|
||||||
|
|
||||||
// Act
|
|
||||||
LED led = new LED(ledController);
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
assertEquals(LEDConstants.DEFAULT_PATTERN.getValue(), led.getPattern().getValue(), 0.0001);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testPatterns() {
|
|
||||||
// Arrange
|
|
||||||
Spark ledController = mock(Spark.class);
|
|
||||||
LED led = new LED(ledController);
|
|
||||||
|
|
||||||
// Act
|
|
||||||
led.setPattern(LEDPatterns.RAINBOW_RAINBOW);
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
assertEquals(LEDPatterns.RAINBOW_RAINBOW.getValue(), led.getPattern().getValue(), 0.0001);
|
|
||||||
|
|
||||||
// Act
|
|
||||||
led.setPattern(LEDPatterns.BLUE_BREATH);
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
assertEquals(LEDPatterns.BLUE_BREATH.getValue(), led.getPattern().getValue(), 0.0001);
|
|
||||||
|
|
||||||
// Act
|
|
||||||
led.setPattern(LEDPatterns.SOLID_BLACK);
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
assertEquals(LEDPatterns.SOLID_BLACK.getValue(), led.getPattern().getValue(), 0.0001);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
/*----------------------------------------------------------------------------*/
|
|
||||||
/* Copyright (c) 2018-2019 FIRST. All Rights Reserved. */
|
|
||||||
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
|
||||||
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
|
||||||
/* the project. */
|
|
||||||
/*----------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
package frc4388.utility;
|
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
|
||||||
import static org.mockito.Mockito.*;
|
|
||||||
|
|
||||||
import com.kauailabs.navx.frc.AHRS;
|
|
||||||
|
|
||||||
import org.junit.*;
|
|
||||||
|
|
||||||
import frc4388.mocks.MockPigeonIMU;
|
|
||||||
import frc4388.robot.Constants.DriveConstants;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Based on the RobotGyroUtilityTest class
|
|
||||||
*/
|
|
||||||
public class UtilityTest {
|
|
||||||
private RobotGyro gyroPigeon;
|
|
||||||
private RobotGyro gyroNavX;
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testConstructor() {
|
|
||||||
// Arrange
|
|
||||||
MockPigeonIMU pigeon = new MockPigeonIMU(DriveConstants.DRIVE_PIGEON_ID);
|
|
||||||
AHRS navX = mock(AHRS.class);
|
|
||||||
gyroPigeon = new RobotGyro(pigeon);
|
|
||||||
gyroNavX = new RobotGyro(navX);
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
assertEquals(true, gyroPigeon.m_isGyroAPigeon);
|
|
||||||
assertEquals(pigeon, gyroPigeon.getPigeon());
|
|
||||||
assertEquals(null, gyroPigeon.getNavX());
|
|
||||||
assertEquals(false, gyroNavX.m_isGyroAPigeon);
|
|
||||||
assertEquals(navX, gyroNavX.getNavX());
|
|
||||||
assertEquals(null, gyroNavX.getPigeon());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testHeadingPigeon() {
|
|
||||||
// Arrange
|
|
||||||
MockPigeonIMU pigeon = new MockPigeonIMU(DriveConstants.DRIVE_PIGEON_ID);
|
|
||||||
gyroPigeon = new RobotGyro(pigeon);
|
|
||||||
|
|
||||||
// Act & Assert
|
|
||||||
assertEquals(-90, gyroPigeon.getHeading(270), 0.0001);
|
|
||||||
assertEquals(-45, gyroPigeon.getHeading(315), 0.0001);
|
|
||||||
assertEquals(-60, gyroPigeon.getHeading(-60), 0.0001);
|
|
||||||
assertEquals(30, gyroPigeon.getHeading(30), 0.0001);
|
|
||||||
assertEquals(0, gyroPigeon.getHeading(0), 0.0001);
|
|
||||||
assertEquals(180, gyroPigeon.getHeading(180), 0.0001);
|
|
||||||
assertEquals(-180, gyroPigeon.getHeading(-180), 0.0001);
|
|
||||||
assertEquals(97, gyroPigeon.getHeading(1537), 0.0001);
|
|
||||||
assertEquals(99, gyroPigeon.getHeading(-2781), 0.0001);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"enableCppIntellisense": false,
|
"enableCppIntellisense": false,
|
||||||
"currentLanguage": "java",
|
"currentLanguage": "java",
|
||||||
"projectYear": "2024",
|
"projectYear": "2025beta",
|
||||||
"teamNumber": 4388
|
"teamNumber": 4388
|
||||||
}
|
}
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
Copyright (c) 2009-2024 FIRST
|
|
||||||
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.
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
# Robot-Essentials
|
|
||||||
Basic code for any Ridgebotics robot project
|
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
Copyright (c) 2009-2023 FIRST and other WPILib contributors
|
Copyright (c) 2009-2024 FIRST and other WPILib contributors
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
|||||||
+10
-7
@@ -1,6 +1,6 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id "java"
|
id "java"
|
||||||
id "edu.wpi.first.GradleRIO" version "2024.3.2"
|
id "edu.wpi.first.GradleRIO" version "2025.1.1-beta-2"
|
||||||
}
|
}
|
||||||
|
|
||||||
java {
|
java {
|
||||||
@@ -33,6 +33,8 @@ deploy {
|
|||||||
frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) {
|
frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) {
|
||||||
files = project.fileTree('src/main/deploy')
|
files = project.fileTree('src/main/deploy')
|
||||||
directory = '/home/lvuser/deploy'
|
directory = '/home/lvuser/deploy'
|
||||||
|
deleteOldFiles = false // Change to true to delete files on roboRIO that no
|
||||||
|
// longer exist in deploy directory on roboRIO
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -50,6 +52,7 @@ def includeDesktopSupport = false
|
|||||||
// Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries.
|
// Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries.
|
||||||
// Also defines JUnit 5.
|
// Also defines JUnit 5.
|
||||||
dependencies {
|
dependencies {
|
||||||
|
annotationProcessor wpi.java.deps.wpilibAnnotations()
|
||||||
implementation wpi.java.deps.wpilib()
|
implementation wpi.java.deps.wpilib()
|
||||||
implementation wpi.java.vendor.java()
|
implementation wpi.java.vendor.java()
|
||||||
|
|
||||||
@@ -67,14 +70,14 @@ dependencies {
|
|||||||
nativeRelease wpi.java.vendor.jniRelease(wpi.platforms.desktop)
|
nativeRelease wpi.java.vendor.jniRelease(wpi.platforms.desktop)
|
||||||
simulationRelease wpi.sim.enableRelease()
|
simulationRelease wpi.sim.enableRelease()
|
||||||
|
|
||||||
//testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1'
|
testImplementation 'org.junit.jupiter:junit-jupiter:5.10.1'
|
||||||
//testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
|
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
|
||||||
}
|
}
|
||||||
|
|
||||||
// test {
|
test {
|
||||||
// useJUnitPlatform()
|
useJUnitPlatform()
|
||||||
// systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true'
|
systemProperty 'junit.jupiter.extensions.autodetection.enabled', 'true'
|
||||||
//}
|
}
|
||||||
|
|
||||||
// Simulation configuration (e.g. environment variables).
|
// Simulation configuration (e.g. environment variables).
|
||||||
wpi.sim.addGui().defaultEnabled = true
|
wpi.sim.addGui().defaultEnabled = true
|
||||||
|
|||||||
Vendored
BIN
Binary file not shown.
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=permwrapper/dists
|
distributionPath=permwrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip
|
||||||
networkTimeout=10000
|
networkTimeout=10000
|
||||||
validateDistributionUrl=true
|
validateDistributionUrl=true
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
|||||||
@@ -15,6 +15,8 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
#
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
#
|
#
|
||||||
@@ -55,7 +57,7 @@
|
|||||||
# Darwin, MinGW, and NonStop.
|
# Darwin, MinGW, and NonStop.
|
||||||
#
|
#
|
||||||
# (3) This script is generated from the Groovy template
|
# (3) This script is generated from the Groovy template
|
||||||
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
||||||
# within the Gradle project.
|
# within the Gradle project.
|
||||||
#
|
#
|
||||||
# You can find Gradle at https://github.com/gradle/gradle/.
|
# You can find Gradle at https://github.com/gradle/gradle/.
|
||||||
@@ -84,7 +86,8 @@ done
|
|||||||
# shellcheck disable=SC2034
|
# shellcheck disable=SC2034
|
||||||
APP_BASE_NAME=${0##*/}
|
APP_BASE_NAME=${0##*/}
|
||||||
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
|
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
|
||||||
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
|
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
|
||||||
|
' "$PWD" ) || exit
|
||||||
|
|
||||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||||
MAX_FD=maximum
|
MAX_FD=maximum
|
||||||
|
|||||||
Vendored
+12
-10
@@ -13,6 +13,8 @@
|
|||||||
@rem See the License for the specific language governing permissions and
|
@rem See the License for the specific language governing permissions and
|
||||||
@rem limitations under the License.
|
@rem limitations under the License.
|
||||||
@rem
|
@rem
|
||||||
|
@rem SPDX-License-Identifier: Apache-2.0
|
||||||
|
@rem
|
||||||
|
|
||||||
@if "%DEBUG%"=="" @echo off
|
@if "%DEBUG%"=="" @echo off
|
||||||
@rem ##########################################################################
|
@rem ##########################################################################
|
||||||
@@ -43,11 +45,11 @@ set JAVA_EXE=java.exe
|
|||||||
%JAVA_EXE% -version >NUL 2>&1
|
%JAVA_EXE% -version >NUL 2>&1
|
||||||
if %ERRORLEVEL% equ 0 goto execute
|
if %ERRORLEVEL% equ 0 goto execute
|
||||||
|
|
||||||
echo.
|
echo. 1>&2
|
||||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
|
||||||
echo.
|
echo. 1>&2
|
||||||
echo Please set the JAVA_HOME variable in your environment to match the
|
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||||
echo location of your Java installation.
|
echo location of your Java installation. 1>&2
|
||||||
|
|
||||||
goto fail
|
goto fail
|
||||||
|
|
||||||
@@ -57,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
|||||||
|
|
||||||
if exist "%JAVA_EXE%" goto execute
|
if exist "%JAVA_EXE%" goto execute
|
||||||
|
|
||||||
echo.
|
echo. 1>&2
|
||||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
|
||||||
echo.
|
echo. 1>&2
|
||||||
echo Please set the JAVA_HOME variable in your environment to match the
|
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||||
echo location of your Java installation.
|
echo location of your Java installation. 1>&2
|
||||||
|
|
||||||
goto fail
|
goto fail
|
||||||
|
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
[]
|
|
||||||
+1
-1
@@ -4,7 +4,7 @@ pluginManagement {
|
|||||||
repositories {
|
repositories {
|
||||||
mavenLocal()
|
mavenLocal()
|
||||||
gradlePluginPortal()
|
gradlePluginPortal()
|
||||||
String frcYear = '2024'
|
String frcYear = '2025'
|
||||||
File frcHome
|
File frcHome
|
||||||
if (OperatingSystem.current().isWindows()) {
|
if (OperatingSystem.current().isWindows()) {
|
||||||
String publicFolder = System.getenv('PUBLIC')
|
String publicFolder = System.getenv('PUBLIC')
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"version": "2025.0",
|
||||||
|
"command": {
|
||||||
|
"type": "sequential",
|
||||||
|
"data": {
|
||||||
|
"commands": [
|
||||||
|
{
|
||||||
|
"type": "path",
|
||||||
|
"data": {
|
||||||
|
"pathName": "New Path"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"resetOdom": true,
|
||||||
|
"folder": null,
|
||||||
|
"choreoAuto": false
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,54 @@
|
|||||||
|
{
|
||||||
|
"version": "2025.0",
|
||||||
|
"waypoints": [
|
||||||
|
{
|
||||||
|
"anchor": {
|
||||||
|
"x": 13.882261436839258,
|
||||||
|
"y": 3.061093579814278
|
||||||
|
},
|
||||||
|
"prevControl": null,
|
||||||
|
"nextControl": {
|
||||||
|
"x": 14.693915037547589,
|
||||||
|
"y": 2.6668618308988026
|
||||||
|
},
|
||||||
|
"isLocked": false,
|
||||||
|
"linkedName": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"anchor": {
|
||||||
|
"x": 14.728700191862979,
|
||||||
|
"y": 1.2522655553831117
|
||||||
|
},
|
||||||
|
"prevControl": {
|
||||||
|
"x": 13.928641642594021,
|
||||||
|
"y": 1.3218358640107113
|
||||||
|
},
|
||||||
|
"nextControl": null,
|
||||||
|
"isLocked": false,
|
||||||
|
"linkedName": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"rotationTargets": [],
|
||||||
|
"constraintZones": [],
|
||||||
|
"pointTowardsZones": [],
|
||||||
|
"eventMarkers": [],
|
||||||
|
"globalConstraints": {
|
||||||
|
"maxVelocity": 3.0,
|
||||||
|
"maxAcceleration": 3.0,
|
||||||
|
"maxAngularVelocity": 540.0,
|
||||||
|
"maxAngularAcceleration": 720.0,
|
||||||
|
"nominalVoltage": 12.0,
|
||||||
|
"unlimited": false
|
||||||
|
},
|
||||||
|
"goalEndState": {
|
||||||
|
"velocity": 0,
|
||||||
|
"rotation": 0.0
|
||||||
|
},
|
||||||
|
"reversed": false,
|
||||||
|
"folder": null,
|
||||||
|
"idealStartingState": {
|
||||||
|
"velocity": 0,
|
||||||
|
"rotation": 0.0
|
||||||
|
},
|
||||||
|
"useDefaultConstraints": true
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"robotWidth": 0.9,
|
||||||
|
"robotLength": 0.9,
|
||||||
|
"holonomicMode": false,
|
||||||
|
"pathFolders": [],
|
||||||
|
"autoFolders": [],
|
||||||
|
"defaultMaxVel": 3.0,
|
||||||
|
"defaultMaxAccel": 3.0,
|
||||||
|
"defaultMaxAngVel": 540.0,
|
||||||
|
"defaultMaxAngAccel": 720.0,
|
||||||
|
"defaultNominalVoltage": 12.0,
|
||||||
|
"robotMass": 74.088,
|
||||||
|
"robotMOI": 6.883,
|
||||||
|
"robotTrackwidth": 0.546,
|
||||||
|
"driveWheelRadius": 0.048,
|
||||||
|
"driveGearing": 5.143,
|
||||||
|
"maxDriveSpeed": 5.45,
|
||||||
|
"driveMotorType": "krakenX60",
|
||||||
|
"driveCurrentLimit": 60.0,
|
||||||
|
"wheelCOF": 1.2,
|
||||||
|
"flModuleX": 0.273,
|
||||||
|
"flModuleY": 0.273,
|
||||||
|
"frModuleX": 0.273,
|
||||||
|
"frModuleY": -0.273,
|
||||||
|
"blModuleX": -0.273,
|
||||||
|
"blModuleY": 0.273,
|
||||||
|
"brModuleX": -0.273,
|
||||||
|
"brModuleY": -0.273,
|
||||||
|
"bumperOffsetX": 0.0,
|
||||||
|
"bumperOffsetY": 0.0,
|
||||||
|
"robotFeatures": []
|
||||||
|
}
|
||||||
@@ -7,6 +7,8 @@
|
|||||||
|
|
||||||
package frc4388.robot;
|
package frc4388.robot;
|
||||||
|
|
||||||
|
import com.pathplanner.lib.util.ReplanningConfig;
|
||||||
|
|
||||||
import edu.wpi.first.math.trajectory.TrapezoidProfile;
|
import edu.wpi.first.math.trajectory.TrapezoidProfile;
|
||||||
import frc4388.utility.Gains;
|
import frc4388.utility.Gains;
|
||||||
import frc4388.utility.LEDPatterns;
|
import frc4388.utility.LEDPatterns;
|
||||||
@@ -68,7 +70,7 @@ public final class Constants {
|
|||||||
// public static final int RIGHT_BACK_STEER_ID = 9;
|
// public static final int RIGHT_BACK_STEER_ID = 9;
|
||||||
// public static final int RIGHT_BACK_ENCODER_ID = 13;
|
// public static final int RIGHT_BACK_ENCODER_ID = 13;
|
||||||
|
|
||||||
// public static final int DRIVE_PIGEON_ID = 14;
|
public static final int DRIVE_PIGEON_ID = 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class PIDConstants {
|
public static final class PIDConstants {
|
||||||
@@ -88,6 +90,8 @@ public final class Constants {
|
|||||||
|
|
||||||
public static final double PATH_MAX_VEL = 0.3; // TODO: find the actual value
|
public static final double PATH_MAX_VEL = 0.3; // TODO: find the actual value
|
||||||
public static final double PATH_MAX_ACC = 0.3; // TODO: find the actual value
|
public static final double PATH_MAX_ACC = 0.3; // TODO: find the actual value
|
||||||
|
|
||||||
|
public static final ReplanningConfig replanningConfig = new ReplanningConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class Conversions {
|
public static final class Conversions {
|
||||||
@@ -131,6 +135,7 @@ public final class Constants {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static final class VisionConstants {
|
public static final class VisionConstants {
|
||||||
|
public static final String CAMERA_NAME = "photonvision";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class DriveConstants {
|
public static final class DriveConstants {
|
||||||
|
|||||||
@@ -7,7 +7,10 @@
|
|||||||
|
|
||||||
package frc4388.robot;
|
package frc4388.robot;
|
||||||
|
|
||||||
|
import edu.wpi.first.math.geometry.Rotation3d;
|
||||||
|
import edu.wpi.first.math.geometry.Translation3d;
|
||||||
import edu.wpi.first.wpilibj.TimedRobot;
|
import edu.wpi.first.wpilibj.TimedRobot;
|
||||||
|
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
|
||||||
import edu.wpi.first.wpilibj2.command.Command;
|
import edu.wpi.first.wpilibj2.command.Command;
|
||||||
import edu.wpi.first.wpilibj2.command.CommandScheduler;
|
import edu.wpi.first.wpilibj2.command.CommandScheduler;
|
||||||
import frc4388.utility.DeferredBlock;
|
import frc4388.utility.DeferredBlock;
|
||||||
|
|||||||
@@ -7,9 +7,13 @@
|
|||||||
|
|
||||||
package frc4388.robot;
|
package frc4388.robot;
|
||||||
|
|
||||||
|
import com.pathplanner.lib.auto.AutoBuilder;
|
||||||
|
import com.pathplanner.lib.commands.PathPlannerAuto;
|
||||||
|
|
||||||
// Drive Systems
|
// Drive Systems
|
||||||
import edu.wpi.first.wpilibj.DriverStation;
|
import edu.wpi.first.wpilibj.DriverStation;
|
||||||
import edu.wpi.first.wpilibj.GenericHID;
|
import edu.wpi.first.wpilibj.GenericHID;
|
||||||
|
import edu.wpi.first.wpilibj.smartdashboard.SendableChooser;
|
||||||
import frc4388.utility.controller.XboxController;
|
import frc4388.utility.controller.XboxController;
|
||||||
import frc4388.utility.controller.DeadbandedXboxController;
|
import frc4388.utility.controller.DeadbandedXboxController;
|
||||||
import frc4388.robot.Constants.OIConstants;
|
import frc4388.robot.Constants.OIConstants;
|
||||||
@@ -25,11 +29,11 @@ import edu.wpi.first.wpilibj2.command.RunCommand;
|
|||||||
import frc4388.utility.controller.VirtualController;
|
import frc4388.utility.controller.VirtualController;
|
||||||
import frc4388.robot.commands.Swerve.neoJoystickPlayback;
|
import frc4388.robot.commands.Swerve.neoJoystickPlayback;
|
||||||
import frc4388.robot.commands.Swerve.neoJoystickRecorder;
|
import frc4388.robot.commands.Swerve.neoJoystickRecorder;
|
||||||
|
import frc4388.robot.subsystems.RobotLocalizer;
|
||||||
// Subsystems
|
// Subsystems
|
||||||
// import frc4388.robot.subsystems.LED;
|
// import frc4388.robot.subsystems.LED;
|
||||||
import frc4388.robot.subsystems.SwerveDrive;
|
import frc4388.robot.subsystems.SwerveDrive;
|
||||||
|
import frc4388.robot.subsystems.TankDrive;
|
||||||
// Utilites
|
// Utilites
|
||||||
import frc4388.utility.DeferredBlock;
|
import frc4388.utility.DeferredBlock;
|
||||||
import frc4388.utility.configurable.ConfigurableString;
|
import frc4388.utility.configurable.ConfigurableString;
|
||||||
@@ -55,6 +59,14 @@ public class RobotContainer {
|
|||||||
|
|
||||||
// m_robotMap.gyro);
|
// m_robotMap.gyro);
|
||||||
|
|
||||||
|
|
||||||
|
// ! /* Autos */
|
||||||
|
private final RobotLocalizer robotLocalizer = new RobotLocalizer(m_robotMap.gyro, m_robotMap.cam);
|
||||||
|
private final SendableChooser<Command> autoChooser;
|
||||||
|
|
||||||
|
|
||||||
|
private final TankDrive tankDrive = new TankDrive(m_robotMap.FR, m_robotMap.FL, m_robotMap.BL, m_robotMap.BR, robotLocalizer);
|
||||||
|
|
||||||
/* Controllers */
|
/* Controllers */
|
||||||
private final DeadbandedXboxController m_driverXbox = new DeadbandedXboxController(OIConstants.XBOX_DRIVER_ID);
|
private final DeadbandedXboxController m_driverXbox = new DeadbandedXboxController(OIConstants.XBOX_DRIVER_ID);
|
||||||
private final DeadbandedXboxController m_operatorXbox = new DeadbandedXboxController(OIConstants.XBOX_OPERATOR_ID);
|
private final DeadbandedXboxController m_operatorXbox = new DeadbandedXboxController(OIConstants.XBOX_OPERATOR_ID);
|
||||||
@@ -66,9 +78,9 @@ public class RobotContainer {
|
|||||||
|
|
||||||
// ! Teleop Commands
|
// ! Teleop Commands
|
||||||
|
|
||||||
// ! /* Autos */
|
|
||||||
private String lastAutoName = "defualt.auto";
|
// private String lastAutoName = "defualt.auto";
|
||||||
private ConfigurableString autoplaybackName = new ConfigurableString("Auto Playback Name", lastAutoName);
|
// private ConfigurableString autoplaybackName = new ConfigurableString("Auto Playback Name", lastAutoName);
|
||||||
// private neoJoystickPlayback autoPlayback = new neoJoystickPlayback(m_robotSwerveDrive,
|
// private neoJoystickPlayback autoPlayback = new neoJoystickPlayback(m_robotSwerveDrive,
|
||||||
// () -> autoplaybackName.get(), // lastAutoName
|
// () -> autoplaybackName.get(), // lastAutoName
|
||||||
// new VirtualController[]{getVirtualDriverController(), getVirtualOperatorController()},
|
// new VirtualController[]{getVirtualDriverController(), getVirtualOperatorController()},
|
||||||
@@ -87,11 +99,11 @@ public class RobotContainer {
|
|||||||
/* Default Commands */
|
/* Default Commands */
|
||||||
// ! Swerve Drive Default Command (Regular Rotation)
|
// ! Swerve Drive Default Command (Regular Rotation)
|
||||||
// drives the robot with a two-axis input from the driver controller
|
// drives the robot with a two-axis input from the driver controller
|
||||||
m_robotMap.tankDrive.setDefaultCommand(new RunCommand(() -> {
|
tankDrive.setDefaultCommand(new RunCommand(() -> {
|
||||||
m_robotMap.tankDrive.driveWithInput(getDeadbandedDriverController().getLeft(),
|
tankDrive.driveWithInput(getDeadbandedDriverController().getLeft(),
|
||||||
getDeadbandedDriverController().getRight(),
|
getDeadbandedDriverController().getRight(),
|
||||||
true);
|
true);
|
||||||
}, m_robotMap.tankDrive)
|
}, tankDrive)
|
||||||
.withName("SwerveDrive DefaultCommand"));
|
.withName("SwerveDrive DefaultCommand"));
|
||||||
// m_robotMap.tankDrive.setToSlow();
|
// m_robotMap.tankDrive.setToSlow();
|
||||||
|
|
||||||
@@ -120,7 +132,7 @@ public class RobotContainer {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
autoChooser = AutoBuilder.buildAutoChooser();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -201,9 +213,7 @@ public class RobotContainer {
|
|||||||
*/
|
*/
|
||||||
public Command getAutonomousCommand() {
|
public Command getAutonomousCommand() {
|
||||||
// return autoPlayback;
|
// return autoPlayback;
|
||||||
return new Command() {
|
return autoChooser.getSelected();
|
||||||
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -8,6 +8,12 @@
|
|||||||
package frc4388.robot;
|
package frc4388.robot;
|
||||||
|
|
||||||
import com.ctre.phoenix6.hardware.TalonFX;
|
import com.ctre.phoenix6.hardware.TalonFX;
|
||||||
|
import com.pathplanner.lib.commands.PathPlannerAuto;
|
||||||
|
|
||||||
|
import edu.wpi.first.wpilibj2.command.Command;
|
||||||
|
|
||||||
|
import org.photonvision.PhotonCamera;
|
||||||
|
|
||||||
import com.ctre.phoenix.motorcontrol.can.TalonSRX;
|
import com.ctre.phoenix.motorcontrol.can.TalonSRX;
|
||||||
import com.ctre.phoenix6.hardware.CANcoder;
|
import com.ctre.phoenix6.hardware.CANcoder;
|
||||||
import com.ctre.phoenix6.hardware.Pigeon2;
|
import com.ctre.phoenix6.hardware.Pigeon2;
|
||||||
@@ -15,6 +21,7 @@ import com.ctre.phoenix6.hardware.Pigeon2;
|
|||||||
// import edu.wpi.first.wpilibj.motorcontrol.Spark;
|
// import edu.wpi.first.wpilibj.motorcontrol.Spark;
|
||||||
// import frc4388.robot.Constants.LEDConstants;
|
// import frc4388.robot.Constants.LEDConstants;
|
||||||
import frc4388.robot.Constants.SwerveDriveConstants;
|
import frc4388.robot.Constants.SwerveDriveConstants;
|
||||||
|
import frc4388.robot.Constants.VisionConstants;
|
||||||
import frc4388.robot.subsystems.SwerveModule;
|
import frc4388.robot.subsystems.SwerveModule;
|
||||||
import frc4388.robot.subsystems.TankDrive;
|
import frc4388.robot.subsystems.TankDrive;
|
||||||
import frc4388.utility.RobotGyro;
|
import frc4388.utility.RobotGyro;
|
||||||
@@ -24,8 +31,9 @@ import frc4388.utility.RobotGyro;
|
|||||||
* testing and modularization.
|
* testing and modularization.
|
||||||
*/
|
*/
|
||||||
public class RobotMap {
|
public class RobotMap {
|
||||||
// private Pigeon2 m_pigeon2 = new Pigeon2(SwerveDriveConstants.IDs.DRIVE_PIGEON_ID);
|
private Pigeon2 m_pigeon2 = new Pigeon2(SwerveDriveConstants.IDs.DRIVE_PIGEON_ID);
|
||||||
// public RobotGyro gyro = new RobotGyro(m_pigeon2);
|
public RobotGyro gyro = new RobotGyro(m_pigeon2);
|
||||||
|
public PhotonCamera cam = new PhotonCamera(VisionConstants.CAMERA_NAME);
|
||||||
|
|
||||||
// public SwerveModule leftFront;
|
// public SwerveModule leftFront;
|
||||||
// public SwerveModule rightFront;
|
// public SwerveModule rightFront;
|
||||||
@@ -65,7 +73,6 @@ public class RobotMap {
|
|||||||
// public final CANcoder rightBackEncoder = new CANcoder(SwerveDriveConstants.IDs.RIGHT_BACK_ENCODER_ID);
|
// public final CANcoder rightBackEncoder = new CANcoder(SwerveDriveConstants.IDs.RIGHT_BACK_ENCODER_ID);
|
||||||
|
|
||||||
void configureDriveMotorControllers() {
|
void configureDriveMotorControllers() {
|
||||||
this.tankDrive = new TankDrive(FR, FL, BL, BR);
|
|
||||||
// initialize SwerveModules
|
// initialize SwerveModules
|
||||||
// this.rightFront = new SwerveModule(rightFrontWheel, rightFrontSteer, rightFrontEncoder, SwerveDriveConstants.DefaultSwerveRotOffsets.FRONT_RIGHT_ROT_OFFSET);
|
// this.rightFront = new SwerveModule(rightFrontWheel, rightFrontSteer, rightFrontEncoder, SwerveDriveConstants.DefaultSwerveRotOffsets.FRONT_RIGHT_ROT_OFFSET);
|
||||||
// this.leftFront = new SwerveModule(leftFrontWheel, leftFrontSteer, leftFrontEncoder, SwerveDriveConstants.DefaultSwerveRotOffsets.FRONT_LEFT_ROT_OFFSET);
|
// this.leftFront = new SwerveModule(leftFrontWheel, leftFrontSteer, leftFrontEncoder, SwerveDriveConstants.DefaultSwerveRotOffsets.FRONT_LEFT_ROT_OFFSET);
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ package frc4388.robot.subsystems;
|
|||||||
|
|
||||||
import com.ctre.phoenix6.controls.Follower;
|
import com.ctre.phoenix6.controls.Follower;
|
||||||
import com.ctre.phoenix6.hardware.TalonFX;
|
import com.ctre.phoenix6.hardware.TalonFX;
|
||||||
|
import com.ctre.phoenix6.hardware.core.CorePigeon2;
|
||||||
|
|
||||||
import edu.wpi.first.wpilibj.drive.DifferentialDrive;
|
import edu.wpi.first.wpilibj.drive.DifferentialDrive;
|
||||||
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
|
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
|
||||||
|
|||||||
@@ -0,0 +1,108 @@
|
|||||||
|
package frc4388.robot.subsystems;
|
||||||
|
|
||||||
|
import org.photonvision.PhotonCamera;
|
||||||
|
import org.photonvision.targeting.PhotonTrackedTarget;
|
||||||
|
|
||||||
|
import com.pathplanner.lib.path.PathPlannerPath;
|
||||||
|
|
||||||
|
import edu.wpi.first.math.geometry.Pose2d;
|
||||||
|
import edu.wpi.first.math.geometry.Rotation3d;
|
||||||
|
import edu.wpi.first.math.geometry.Transform3d;
|
||||||
|
import edu.wpi.first.math.geometry.Translation2d;
|
||||||
|
import edu.wpi.first.math.geometry.Translation3d;
|
||||||
|
import edu.wpi.first.math.kinematics.ChassisSpeeds;
|
||||||
|
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
|
||||||
|
import edu.wpi.first.wpilibj2.command.SubsystemBase;
|
||||||
|
import frc4388.utility.RobotGyro;
|
||||||
|
|
||||||
|
public class RobotLocalizer extends SubsystemBase {
|
||||||
|
private RobotGyro gyro;
|
||||||
|
private Pose2d lastPose2d = new Pose2d();
|
||||||
|
private PhotonCamera camera;
|
||||||
|
|
||||||
|
|
||||||
|
public RobotLocalizer(RobotGyro gyro, PhotonCamera cam) {
|
||||||
|
this.gyro = gyro;
|
||||||
|
this.camera = cam;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void periodic() {
|
||||||
|
// time
|
||||||
|
// Translation3d accel = gyro.getAcceleration();
|
||||||
|
|
||||||
|
// SmartDashboard.putNumber("Accel X", accel.getX());
|
||||||
|
// SmartDashboard.putNumber("Accel Y", accel.getY());
|
||||||
|
// SmartDashboard.putNumber("Accel Z", accel.getZ());
|
||||||
|
|
||||||
|
// Rotation3d rot = gyro.getRotation3d();
|
||||||
|
|
||||||
|
// SmartDashboard.putNumber("Rot X", rot.getX());
|
||||||
|
// SmartDashboard.putNumber("Rot Y", rot.getY());
|
||||||
|
// SmartDashboard.putNumber("Rot Z", rot.getZ());
|
||||||
|
|
||||||
|
// boolean tagExists = SmartDashboard.getBoolean("photonvision/Camera_Module_v1/hasTarget", false);
|
||||||
|
|
||||||
|
Translation2d pos;
|
||||||
|
|
||||||
|
var result = camera.getAllUnreadResults();
|
||||||
|
// if (result.hasTargets()) {
|
||||||
|
// PhotonTrackedTarget target = result.getBestTarget();
|
||||||
|
// Transform3d pos3d = target.getBestCameraToTarget();
|
||||||
|
// pos = new Translation2d(pos3d.getX(), pos3d.getY());
|
||||||
|
// } else {
|
||||||
|
pos = lastPose2d.getTranslation();
|
||||||
|
// }
|
||||||
|
|
||||||
|
// results.
|
||||||
|
// if (!results.isEmpty()) {
|
||||||
|
|
||||||
|
// double totalX = 0;
|
||||||
|
// double totalY = 0;
|
||||||
|
|
||||||
|
// // Camera processed a new frame since last
|
||||||
|
// // Get the last one in the list.
|
||||||
|
// var result = results.get(results.size() - 1);
|
||||||
|
// // PhotonTrackedTarget targets = result.getMultiTagResult();
|
||||||
|
|
||||||
|
// if (result.hasTargets()) {
|
||||||
|
// PhotonTrackedTarget target = result.getBestTarget();
|
||||||
|
// Transform3d pos3d = target.getBestCameraToTarget();
|
||||||
|
// pos = new Translation2d(pos3d.getX(), pos3d.getY());
|
||||||
|
// } else {
|
||||||
|
// pos = lastPose2d.getTranslation();
|
||||||
|
// }
|
||||||
|
// }else {
|
||||||
|
// pos = lastPose2d.getTranslation();
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
lastPose2d = new Pose2d(
|
||||||
|
pos,
|
||||||
|
gyro.getRotation2d()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pathplanner function
|
||||||
|
public Pose2d getPose(){
|
||||||
|
return lastPose2d;
|
||||||
|
}
|
||||||
|
|
||||||
|
// PathPlanner func
|
||||||
|
public void resetPose(Pose2d pose){
|
||||||
|
lastPose2d = pose;
|
||||||
|
}
|
||||||
|
|
||||||
|
// PathPlanner
|
||||||
|
public ChassisSpeeds getChassisSpeeds() {
|
||||||
|
return new ChassisSpeeds();
|
||||||
|
}
|
||||||
|
|
||||||
|
// PathPlanner
|
||||||
|
public void setChassisSpeeds(ChassisSpeeds target) {
|
||||||
|
System.out.println(target);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -150,7 +150,7 @@ public class SwerveModule extends SubsystemBase {
|
|||||||
public Rotation2d getAngle() {
|
public Rotation2d getAngle() {
|
||||||
// * Note: This assumes that the CANCoders are setup with the default feedback coefficient and the sensor value reports degrees.
|
// * Note: This assumes that the CANCoders are setup with the default feedback coefficient and the sensor value reports degrees.
|
||||||
// return Rotation2d.fromDegrees(encoder.getAbsolutePosition());
|
// return Rotation2d.fromDegrees(encoder.getAbsolutePosition());
|
||||||
return Rotation2d.fromRotations(encoder.getPosition().getValue());
|
return Rotation2d.fromRotations(encoder.getPosition().getValue().baseUnitMagnitude());
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getAngularVel() {
|
public double getAngularVel() {
|
||||||
@@ -184,7 +184,7 @@ public class SwerveModule extends SubsystemBase {
|
|||||||
*/
|
*/
|
||||||
public SwerveModuleState getState() {
|
public SwerveModuleState getState() {
|
||||||
return new SwerveModuleState(
|
return new SwerveModuleState(
|
||||||
Units.inchesToMeters(driveMotor.getVelocity().getValue() *
|
Units.inchesToMeters(driveMotor.getVelocity().getValue().baseUnitMagnitude() *
|
||||||
SwerveDriveConstants.Conversions.INCHES_PER_WHEEL_REV *
|
SwerveDriveConstants.Conversions.INCHES_PER_WHEEL_REV *
|
||||||
SwerveDriveConstants.Conversions.WHEEL_REV_PER_MOTOR_REV),
|
SwerveDriveConstants.Conversions.WHEEL_REV_PER_MOTOR_REV),
|
||||||
getAngle()
|
getAngle()
|
||||||
|
|||||||
@@ -1,23 +1,52 @@
|
|||||||
package frc4388.robot.subsystems;
|
package frc4388.robot.subsystems;
|
||||||
|
|
||||||
|
import java.util.function.BooleanSupplier;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
import com.ctre.phoenix.motorcontrol.ControlMode;
|
import com.ctre.phoenix.motorcontrol.ControlMode;
|
||||||
import com.ctre.phoenix.motorcontrol.can.TalonSRX;
|
import com.ctre.phoenix.motorcontrol.can.TalonSRX;
|
||||||
|
import com.pathplanner.lib.auto.AutoBuilder;
|
||||||
|
import com.pathplanner.lib.controllers.PPLTVController;
|
||||||
|
import com.pathplanner.lib.path.PathPlannerPath;
|
||||||
|
|
||||||
import edu.wpi.first.math.geometry.Translation2d;
|
import edu.wpi.first.math.geometry.Translation2d;
|
||||||
|
import edu.wpi.first.wpilibj.DriverStation;
|
||||||
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
|
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
|
||||||
|
import edu.wpi.first.wpilibj2.command.Command;
|
||||||
import edu.wpi.first.wpilibj2.command.SubsystemBase;
|
import edu.wpi.first.wpilibj2.command.SubsystemBase;
|
||||||
|
import frc4388.robot.Constants.SwerveDriveConstants.AutoConstants;
|
||||||
|
|
||||||
public class TankDrive extends SubsystemBase{
|
public class TankDrive extends SubsystemBase{
|
||||||
private TalonSRX FR;
|
private TalonSRX FR;
|
||||||
private TalonSRX FL;
|
private TalonSRX FL;
|
||||||
private TalonSRX BL;
|
private TalonSRX BL;
|
||||||
private TalonSRX BR;
|
private TalonSRX BR;
|
||||||
|
private RobotLocalizer robotLocalizer;
|
||||||
|
|
||||||
public TankDrive(TalonSRX FR,TalonSRX FL,TalonSRX BL, TalonSRX BR){
|
public TankDrive(TalonSRX FR,TalonSRX FL,TalonSRX BL, TalonSRX BR, RobotLocalizer robotLocalizer){
|
||||||
this.FR = FR;
|
this.FR = FR;
|
||||||
this.FL = FL;
|
this.FL = FL;
|
||||||
this.BL = BL;
|
this.BL = BL;
|
||||||
this.BR = BR;
|
this.BR = BR;
|
||||||
|
this.robotLocalizer = robotLocalizer;
|
||||||
|
|
||||||
|
|
||||||
|
// Configure AutoBuilder last
|
||||||
|
AutoBuilder.configureLTV(
|
||||||
|
robotLocalizer::getPose,
|
||||||
|
robotLocalizer::resetPose,
|
||||||
|
robotLocalizer::getChassisSpeeds,
|
||||||
|
robotLocalizer::setChassisSpeeds,
|
||||||
|
0.02, // Default loop time
|
||||||
|
AutoConstants.replanningConfig,
|
||||||
|
new BooleanSupplier() {
|
||||||
|
@Override
|
||||||
|
public boolean getAsBoolean() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
this
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final ControlMode mode = ControlMode.PercentOutput;
|
private static final ControlMode mode = ControlMode.PercentOutput;
|
||||||
@@ -58,5 +87,6 @@ public class TankDrive extends SubsystemBase{
|
|||||||
SmartDashboard.putNumber("FL", FL_rot);
|
SmartDashboard.putNumber("FL", FL_rot);
|
||||||
SmartDashboard.putNumber("BL", BL_rot);
|
SmartDashboard.putNumber("BL", BL_rot);
|
||||||
SmartDashboard.putNumber("BR", BR_rot);
|
SmartDashboard.putNumber("BR", BR_rot);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,12 +9,15 @@ package frc4388.utility;
|
|||||||
|
|
||||||
// import com.ctre.phoenix.sensors.WPI_Pigeon2;
|
// import com.ctre.phoenix.sensors.WPI_Pigeon2;
|
||||||
import com.ctre.phoenix6.hardware.Pigeon2;
|
import com.ctre.phoenix6.hardware.Pigeon2;
|
||||||
import com.kauailabs.navx.frc.AHRS;
|
// import com.kauailabs.navx.frc.AHRS;
|
||||||
|
|
||||||
// import edu.wpi.first.wpilibj.GyroBase;
|
// import edu.wpi.first.wpilibj.GyroBase;
|
||||||
// import edu.wpi.first.wpilibj.interfaces.Gyro;
|
// import edu.wpi.first.wpilibj.interfaces.Gyro;
|
||||||
import edu.wpi.first.math.MathUtil;
|
import edu.wpi.first.math.MathUtil;
|
||||||
import edu.wpi.first.math.geometry.Rotation2d;
|
import edu.wpi.first.math.geometry.Rotation2d;
|
||||||
|
import edu.wpi.first.math.geometry.Rotation3d;
|
||||||
|
import edu.wpi.first.math.geometry.Translation2d;
|
||||||
|
import edu.wpi.first.math.geometry.Translation3d;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gyro class that allows for interchangeable use between a pigeon and a navX
|
* Gyro class that allows for interchangeable use between a pigeon and a navX
|
||||||
@@ -23,7 +26,7 @@ public class RobotGyro {
|
|||||||
private RobotTime m_robotTime = RobotTime.getInstance();
|
private RobotTime m_robotTime = RobotTime.getInstance();
|
||||||
|
|
||||||
private Pigeon2 m_pigeon = null;
|
private Pigeon2 m_pigeon = null;
|
||||||
private AHRS m_navX = null;
|
// private AHRS m_navX = null;
|
||||||
public boolean m_isGyroAPigeon; //true if pigeon, false if navX
|
public boolean m_isGyroAPigeon; //true if pigeon, false if navX
|
||||||
|
|
||||||
private double m_lastPigeonAngle;
|
private double m_lastPigeonAngle;
|
||||||
@@ -45,10 +48,10 @@ public class RobotGyro {
|
|||||||
* Creates a Gyro based on a navX
|
* Creates a Gyro based on a navX
|
||||||
* @param gyro the gyroscope to use for Gyro
|
* @param gyro the gyroscope to use for Gyro
|
||||||
*/
|
*/
|
||||||
public RobotGyro(AHRS gyro){
|
// public RobotGyro(AHRS gyro){
|
||||||
m_navX = gyro;
|
// m_navX = gyro;
|
||||||
m_isGyroAPigeon = false;
|
// m_isGyroAPigeon = false;
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resets yaw, pitch, and roll.
|
* Resets yaw, pitch, and roll.
|
||||||
@@ -98,33 +101,33 @@ public class RobotGyro {
|
|||||||
public void reset() {
|
public void reset() {
|
||||||
resetZeroValues();
|
resetZeroValues();
|
||||||
|
|
||||||
if (m_isGyroAPigeon) {
|
// if (m_isGyroAPigeon) {
|
||||||
m_pigeon.setYaw(0);
|
m_pigeon.setYaw(0);
|
||||||
} else {
|
// } else {
|
||||||
m_navX.reset();
|
// // m_navX.reset();
|
||||||
}
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reset(double val) {
|
public void reset(double val) {
|
||||||
resetZeroValues();
|
resetZeroValues();
|
||||||
|
|
||||||
if (m_isGyroAPigeon) {
|
// if (m_isGyroAPigeon) {
|
||||||
m_pigeon.setYaw(val);
|
m_pigeon.setYaw(val);
|
||||||
} else {
|
// } else {
|
||||||
m_navX.reset();
|
// // m_navX.reset();
|
||||||
}
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void resetFlip() {
|
public void resetFlip() {
|
||||||
resetZeroValues();
|
resetZeroValues();
|
||||||
|
|
||||||
if (m_isGyroAPigeon) {
|
// if (m_isGyroAPigeon) {
|
||||||
m_pigeon.setYaw(180);
|
m_pigeon.setYaw(180);
|
||||||
} else {
|
// } else {
|
||||||
m_navX.reset();
|
// m_navX.reset();
|
||||||
}
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,7 +137,7 @@ public class RobotGyro {
|
|||||||
if (m_isGyroAPigeon) {
|
if (m_isGyroAPigeon) {
|
||||||
m_pigeon.setYaw(90);
|
m_pigeon.setYaw(90);
|
||||||
} else {
|
} else {
|
||||||
m_navX.reset();
|
// m_navX.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -145,7 +148,7 @@ public class RobotGyro {
|
|||||||
if (m_isGyroAPigeon) {
|
if (m_isGyroAPigeon) {
|
||||||
m_pigeon.setYaw(270);
|
m_pigeon.setYaw(270);
|
||||||
} else {
|
} else {
|
||||||
m_navX.reset();
|
// m_navX.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -156,7 +159,7 @@ public class RobotGyro {
|
|||||||
if (m_isGyroAPigeon) {
|
if (m_isGyroAPigeon) {
|
||||||
m_pigeon.setYaw(60);
|
m_pigeon.setYaw(60);
|
||||||
} else {
|
} else {
|
||||||
m_navX.reset();
|
// m_navX.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -167,7 +170,7 @@ public class RobotGyro {
|
|||||||
if (m_isGyroAPigeon) {
|
if (m_isGyroAPigeon) {
|
||||||
m_pigeon.setYaw(-60);
|
m_pigeon.setYaw(-60);
|
||||||
} else {
|
} else {
|
||||||
m_navX.reset();
|
// m_navX.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -191,12 +194,30 @@ public class RobotGyro {
|
|||||||
return m_pigeon.getRotation2d();
|
return m_pigeon.getRotation2d();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Rotation3d getRotation3d() {
|
||||||
|
return m_pigeon.getRotation3d();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Translation2d getAcceleration2d() {
|
||||||
|
return new Translation2d(
|
||||||
|
m_pigeon.getAccelerationX().getValue().baseUnitMagnitude(),
|
||||||
|
m_pigeon.getAccelerationY().getValue().baseUnitMagnitude());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Translation3d getAcceleration3d() {
|
||||||
|
return new Translation3d(
|
||||||
|
m_pigeon.getAccelerationX().getValue().baseUnitMagnitude(),
|
||||||
|
m_pigeon.getAccelerationY().getValue().baseUnitMagnitude(),
|
||||||
|
m_pigeon.getAccelerationZ().getValue().baseUnitMagnitude());
|
||||||
|
}
|
||||||
|
|
||||||
public double getAngle() {
|
public double getAngle() {
|
||||||
if (m_isGyroAPigeon) {
|
// if (m_isGyroAPigeon) {
|
||||||
return getPigeonAngles()[2];
|
return getPigeonAngles()[2];
|
||||||
} else {
|
// } else {
|
||||||
return m_navX.getAngle();
|
// return m_navX.getAngle();
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getYaw() {
|
public double getYaw() {
|
||||||
@@ -226,11 +247,11 @@ public class RobotGyro {
|
|||||||
* @return The current pitch value in degrees (-90 to 90).
|
* @return The current pitch value in degrees (-90 to 90).
|
||||||
*/
|
*/
|
||||||
public double getPitch() {
|
public double getPitch() {
|
||||||
if (m_isGyroAPigeon) {
|
// if (m_isGyroAPigeon) {
|
||||||
return MathUtil.clamp(getPigeonAngles()[1], -90, 90);
|
return MathUtil.clamp(getPigeonAngles()[1], -90, 90);
|
||||||
} else {
|
// } else {
|
||||||
return MathUtil.clamp(m_navX.getPitch(), -90, 90);
|
// return MathUtil.clamp(m_navX.getPitch(), -90, 90);
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -240,28 +261,28 @@ public class RobotGyro {
|
|||||||
* @return The current roll value in degrees (-90 to 90).
|
* @return The current roll value in degrees (-90 to 90).
|
||||||
*/
|
*/
|
||||||
public double getRoll() {
|
public double getRoll() {
|
||||||
if (m_isGyroAPigeon) {
|
// if (m_isGyroAPigeon) {
|
||||||
return MathUtil.clamp(getPigeonAngles()[2], -90, 90);
|
return MathUtil.clamp(getPigeonAngles()[2], -90, 90);
|
||||||
} else {
|
// } else {
|
||||||
return MathUtil.clamp(m_navX.getRoll(), -90, 90);
|
// return MathUtil.clamp(m_navX.getRoll(), -90, 90);
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getRate() {
|
public double getRate() {
|
||||||
if (m_isGyroAPigeon) {
|
// if (m_isGyroAPigeon) {
|
||||||
return m_deltaPigeonAngle / m_robotTime.m_deltaTime * 1000;
|
return m_deltaPigeonAngle / m_robotTime.m_deltaTime * 1000;
|
||||||
} else {
|
// } else {
|
||||||
return m_navX.getRate();
|
// // return m_navX.getRate();
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
public Pigeon2 getPigeon(){
|
public Pigeon2 getPigeon(){
|
||||||
return m_pigeon;
|
return m_pigeon;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AHRS getNavX(){
|
// public AHRS getNavX(){
|
||||||
return m_navX;
|
// return m_navX;
|
||||||
}
|
// }
|
||||||
|
|
||||||
public void close() throws Exception {
|
public void close() throws Exception {
|
||||||
|
|
||||||
|
|||||||
@@ -1,31 +0,0 @@
|
|||||||
/**
|
|
||||||
* This file is a configuration file generated by the `Template` extension on `vscode`
|
|
||||||
* @see https://marketplace.visualstudio.com/items?itemName=yongwoo.template
|
|
||||||
*/
|
|
||||||
module.exports = {
|
|
||||||
// You can change the template path to another path
|
|
||||||
templateRootPath: "./.templates",
|
|
||||||
// After copying the template file the `replaceFileTextFn` function is executed
|
|
||||||
replaceFileTextFn: (fileText, templateName, utils) => {
|
|
||||||
// @see https://www.npmjs.com/package/change-case
|
|
||||||
const { changeCase } = utils;
|
|
||||||
// You can change the text in the file
|
|
||||||
return fileText
|
|
||||||
.replace(/__templateName__/gm, templateName)
|
|
||||||
.replace(
|
|
||||||
/__templateNameToPascalCase__/gm,
|
|
||||||
changeCase.pascalCase(templateName)
|
|
||||||
)
|
|
||||||
.replace(
|
|
||||||
/__templateNameToParamCase__/gm,
|
|
||||||
changeCase.paramCase(templateName)
|
|
||||||
);
|
|
||||||
},
|
|
||||||
replaceFileNameFn: (fileName, templateName, utils) => {
|
|
||||||
const { path } = utils;
|
|
||||||
// @see https://nodejs.org/api/path.html#path_path_parse_path
|
|
||||||
const { base } = path.parse(fileName);
|
|
||||||
// You can change the file name
|
|
||||||
return base;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
"name": "NavX",
|
"name": "NavX",
|
||||||
"version": "2024.1.0",
|
"version": "2024.1.0",
|
||||||
"uuid": "cb311d09-36e9-4143-a032-55bb2b94443b",
|
"uuid": "cb311d09-36e9-4143-a032-55bb2b94443b",
|
||||||
"frcYear": "2024",
|
"frcYear": "2025",
|
||||||
"mavenUrls": [
|
"mavenUrls": [
|
||||||
"https://dev.studica.com/maven/release/2024/"
|
"https://dev.studica.com/maven/release/2024/"
|
||||||
],
|
],
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"fileName": "PathplannerLib2024.json",
|
||||||
|
"name": "PathplannerLib",
|
||||||
|
"version": "2024.2.8",
|
||||||
|
"uuid": "1b42324f-17c6-4875-8e77-1c312bc8c786",
|
||||||
|
"frcYear": "2024",
|
||||||
|
"mavenUrls": [
|
||||||
|
"https://3015rangerrobotics.github.io/pathplannerlib/repo"
|
||||||
|
],
|
||||||
|
"jsonUrl": "https://3015rangerrobotics.github.io/pathplannerlib/PathplannerLib2024.json",
|
||||||
|
"javaDependencies": [
|
||||||
|
{
|
||||||
|
"groupId": "com.pathplanner.lib",
|
||||||
|
"artifactId": "PathplannerLib-java",
|
||||||
|
"version": "2024.2.8"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"jniDependencies": [],
|
||||||
|
"cppDependencies": [
|
||||||
|
{
|
||||||
|
"groupId": "com.pathplanner.lib",
|
||||||
|
"artifactId": "PathplannerLib-cpp",
|
||||||
|
"version": "2024.2.8",
|
||||||
|
"libName": "PathplannerLib",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sharedLibrary": false,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal",
|
||||||
|
"linuxathena",
|
||||||
|
"linuxarm32",
|
||||||
|
"linuxarm64"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,151 @@
|
|||||||
|
{
|
||||||
|
"fileName": "Phoenix5.json",
|
||||||
|
"name": "CTRE-Phoenix (v5)",
|
||||||
|
"version": "5.33.1",
|
||||||
|
"frcYear": 2024,
|
||||||
|
"uuid": "ab676553-b602-441f-a38d-f1296eff6537",
|
||||||
|
"mavenUrls": [
|
||||||
|
"https://maven.ctr-electronics.com/release/"
|
||||||
|
],
|
||||||
|
"jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix/Phoenix5-frc2024-latest.json",
|
||||||
|
"requires": [
|
||||||
|
{
|
||||||
|
"uuid": "e995de00-2c64-4df5-8831-c1441420ff19",
|
||||||
|
"errorMessage": "Phoenix 5 requires low-level libraries from Phoenix 6. Please add the Phoenix 6 vendordep before adding Phoenix 5.",
|
||||||
|
"offlineFileName": "Phoenix6.json",
|
||||||
|
"onlineUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2024-latest.json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"javaDependencies": [
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix",
|
||||||
|
"artifactId": "api-java",
|
||||||
|
"version": "5.33.1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix",
|
||||||
|
"artifactId": "wpiapi-java",
|
||||||
|
"version": "5.33.1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"jniDependencies": [
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix",
|
||||||
|
"artifactId": "cci",
|
||||||
|
"version": "5.33.1",
|
||||||
|
"isJar": false,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"validPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"linuxathena"
|
||||||
|
],
|
||||||
|
"simMode": "hwsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix.sim",
|
||||||
|
"artifactId": "cci-sim",
|
||||||
|
"version": "5.33.1",
|
||||||
|
"isJar": false,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"validPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"cppDependencies": [
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix",
|
||||||
|
"artifactId": "wpiapi-cpp",
|
||||||
|
"version": "5.33.1",
|
||||||
|
"libName": "CTRE_Phoenix_WPI",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sharedLibrary": true,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"linuxathena"
|
||||||
|
],
|
||||||
|
"simMode": "hwsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix",
|
||||||
|
"artifactId": "api-cpp",
|
||||||
|
"version": "5.33.1",
|
||||||
|
"libName": "CTRE_Phoenix",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sharedLibrary": true,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"linuxathena"
|
||||||
|
],
|
||||||
|
"simMode": "hwsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix",
|
||||||
|
"artifactId": "cci",
|
||||||
|
"version": "5.33.1",
|
||||||
|
"libName": "CTRE_PhoenixCCI",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sharedLibrary": true,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"linuxathena"
|
||||||
|
],
|
||||||
|
"simMode": "hwsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix.sim",
|
||||||
|
"artifactId": "wpiapi-cpp-sim",
|
||||||
|
"version": "5.33.1",
|
||||||
|
"libName": "CTRE_Phoenix_WPISim",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sharedLibrary": true,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix.sim",
|
||||||
|
"artifactId": "api-cpp-sim",
|
||||||
|
"version": "5.33.1",
|
||||||
|
"libName": "CTRE_PhoenixSim",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sharedLibrary": true,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix.sim",
|
||||||
|
"artifactId": "cci-sim",
|
||||||
|
"version": "5.33.1",
|
||||||
|
"libName": "CTRE_PhoenixCCISim",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sharedLibrary": true,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,339 @@
|
|||||||
|
{
|
||||||
|
"fileName": "Phoenix6.json",
|
||||||
|
"name": "CTRE-Phoenix (v6)",
|
||||||
|
"version": "24.3.0",
|
||||||
|
"frcYear": 2024,
|
||||||
|
"uuid": "e995de00-2c64-4df5-8831-c1441420ff19",
|
||||||
|
"mavenUrls": [
|
||||||
|
"https://maven.ctr-electronics.com/release/"
|
||||||
|
],
|
||||||
|
"jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2024-latest.json",
|
||||||
|
"conflictsWith": [
|
||||||
|
{
|
||||||
|
"uuid": "3fcf3402-e646-4fa6-971e-18afe8173b1a",
|
||||||
|
"errorMessage": "The combined Phoenix-6-And-5 vendordep is no longer supported. Please remove the vendordep and instead add both the latest Phoenix 6 vendordep and Phoenix 5 vendordep.",
|
||||||
|
"offlineFileName": "Phoenix6And5.json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"javaDependencies": [
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6",
|
||||||
|
"artifactId": "wpiapi-java",
|
||||||
|
"version": "24.3.0"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"jniDependencies": [
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6",
|
||||||
|
"artifactId": "tools",
|
||||||
|
"version": "24.3.0",
|
||||||
|
"isJar": false,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"validPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"linuxathena"
|
||||||
|
],
|
||||||
|
"simMode": "hwsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
|
"artifactId": "tools-sim",
|
||||||
|
"version": "24.3.0",
|
||||||
|
"isJar": false,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"validPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
|
"artifactId": "simTalonSRX",
|
||||||
|
"version": "24.3.0",
|
||||||
|
"isJar": false,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"validPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
|
"artifactId": "simTalonFX",
|
||||||
|
"version": "24.3.0",
|
||||||
|
"isJar": false,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"validPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
|
"artifactId": "simVictorSPX",
|
||||||
|
"version": "24.3.0",
|
||||||
|
"isJar": false,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"validPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
|
"artifactId": "simPigeonIMU",
|
||||||
|
"version": "24.3.0",
|
||||||
|
"isJar": false,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"validPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
|
"artifactId": "simCANCoder",
|
||||||
|
"version": "24.3.0",
|
||||||
|
"isJar": false,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"validPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
|
"artifactId": "simProTalonFX",
|
||||||
|
"version": "24.3.0",
|
||||||
|
"isJar": false,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"validPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
|
"artifactId": "simProCANcoder",
|
||||||
|
"version": "24.3.0",
|
||||||
|
"isJar": false,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"validPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
|
"artifactId": "simProPigeon2",
|
||||||
|
"version": "24.3.0",
|
||||||
|
"isJar": false,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"validPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"cppDependencies": [
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6",
|
||||||
|
"artifactId": "wpiapi-cpp",
|
||||||
|
"version": "24.3.0",
|
||||||
|
"libName": "CTRE_Phoenix6_WPI",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sharedLibrary": true,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"linuxathena"
|
||||||
|
],
|
||||||
|
"simMode": "hwsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6",
|
||||||
|
"artifactId": "tools",
|
||||||
|
"version": "24.3.0",
|
||||||
|
"libName": "CTRE_PhoenixTools",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sharedLibrary": true,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"linuxathena"
|
||||||
|
],
|
||||||
|
"simMode": "hwsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
|
"artifactId": "wpiapi-cpp-sim",
|
||||||
|
"version": "24.3.0",
|
||||||
|
"libName": "CTRE_Phoenix6_WPISim",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sharedLibrary": true,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
|
"artifactId": "tools-sim",
|
||||||
|
"version": "24.3.0",
|
||||||
|
"libName": "CTRE_PhoenixTools_Sim",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sharedLibrary": true,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
|
"artifactId": "simTalonSRX",
|
||||||
|
"version": "24.3.0",
|
||||||
|
"libName": "CTRE_SimTalonSRX",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sharedLibrary": true,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
|
"artifactId": "simTalonFX",
|
||||||
|
"version": "24.3.0",
|
||||||
|
"libName": "CTRE_SimTalonFX",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sharedLibrary": true,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
|
"artifactId": "simVictorSPX",
|
||||||
|
"version": "24.3.0",
|
||||||
|
"libName": "CTRE_SimVictorSPX",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sharedLibrary": true,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
|
"artifactId": "simPigeonIMU",
|
||||||
|
"version": "24.3.0",
|
||||||
|
"libName": "CTRE_SimPigeonIMU",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sharedLibrary": true,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
|
"artifactId": "simCANCoder",
|
||||||
|
"version": "24.3.0",
|
||||||
|
"libName": "CTRE_SimCANCoder",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sharedLibrary": true,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
|
"artifactId": "simProTalonFX",
|
||||||
|
"version": "24.3.0",
|
||||||
|
"libName": "CTRE_SimProTalonFX",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sharedLibrary": true,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
|
"artifactId": "simProCANcoder",
|
||||||
|
"version": "24.3.0",
|
||||||
|
"libName": "CTRE_SimProCANcoder",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sharedLibrary": true,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
|
"artifactId": "simProPigeon2",
|
||||||
|
"version": "24.3.0",
|
||||||
|
"libName": "CTRE_SimProPigeon2",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sharedLibrary": true,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"fileName": "WPILibNewCommands.json",
|
||||||
|
"name": "WPILib-New-Commands",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"uuid": "111e20f7-815e-48f8-9dd6-e675ce75b266",
|
||||||
|
"frcYear": "2024",
|
||||||
|
"mavenUrls": [],
|
||||||
|
"jsonUrl": "",
|
||||||
|
"javaDependencies": [
|
||||||
|
{
|
||||||
|
"groupId": "edu.wpi.first.wpilibNewCommands",
|
||||||
|
"artifactId": "wpilibNewCommands-java",
|
||||||
|
"version": "wpilib"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"jniDependencies": [],
|
||||||
|
"cppDependencies": [
|
||||||
|
{
|
||||||
|
"groupId": "edu.wpi.first.wpilibNewCommands",
|
||||||
|
"artifactId": "wpilibNewCommands-cpp",
|
||||||
|
"version": "wpilib",
|
||||||
|
"libName": "wpilibNewCommands",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sourcesClassifier": "sources",
|
||||||
|
"sharedLibrary": true,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"linuxathena",
|
||||||
|
"linuxarm32",
|
||||||
|
"linuxarm64",
|
||||||
|
"windowsx86-64",
|
||||||
|
"windowsx86",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
{
|
||||||
|
"fileName": "photonlib.json",
|
||||||
|
"name": "photonlib",
|
||||||
|
"version": "v2025.0.0-beta-6",
|
||||||
|
"uuid": "515fe07e-bfc6-11fa-b3de-0242ac130004",
|
||||||
|
"frcYear": "2024",
|
||||||
|
"mavenUrls": [
|
||||||
|
"https://maven.photonvision.org/repository/internal",
|
||||||
|
"https://maven.photonvision.org/repository/snapshots"
|
||||||
|
],
|
||||||
|
"jsonUrl": "https://maven.photonvision.org/repository/internal/org/photonvision/photonlib-json/1.0/photonlib-json-1.0.json",
|
||||||
|
"jniDependencies": [
|
||||||
|
{
|
||||||
|
"groupId": "org.photonvision",
|
||||||
|
"artifactId": "photontargeting-cpp",
|
||||||
|
"version": "v2025.0.0-beta-6",
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"isJar": false,
|
||||||
|
"validPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxathena",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"cppDependencies": [
|
||||||
|
{
|
||||||
|
"groupId": "org.photonvision",
|
||||||
|
"artifactId": "photonlib-cpp",
|
||||||
|
"version": "v2025.0.0-beta-6",
|
||||||
|
"libName": "photonlib",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sharedLibrary": true,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxathena",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "org.photonvision",
|
||||||
|
"artifactId": "photontargeting-cpp",
|
||||||
|
"version": "v2025.0.0-beta-6",
|
||||||
|
"libName": "photontargeting",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sharedLibrary": true,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxathena",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"javaDependencies": [
|
||||||
|
{
|
||||||
|
"groupId": "org.photonvision",
|
||||||
|
"artifactId": "photonlib-java",
|
||||||
|
"version": "v2025.0.0-beta-6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "org.photonvision",
|
||||||
|
"artifactId": "photontargeting-java",
|
||||||
|
"version": "v2025.0.0-beta-6"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"fileName": "PathplannerLib.json",
|
||||||
|
"name": "PathplannerLib",
|
||||||
|
"version": "2024.2.8",
|
||||||
|
"uuid": "1b42324f-17c6-4875-8e77-1c312bc8c786",
|
||||||
|
"frcYear": "2025",
|
||||||
|
"mavenUrls": [
|
||||||
|
"https://3015rangerrobotics.github.io/pathplannerlib/repo"
|
||||||
|
],
|
||||||
|
"jsonUrl": "https://3015rangerrobotics.github.io/pathplannerlib/PathplannerLib.json",
|
||||||
|
"javaDependencies": [
|
||||||
|
{
|
||||||
|
"groupId": "com.pathplanner.lib",
|
||||||
|
"artifactId": "PathplannerLib-java",
|
||||||
|
"version": "2024.2.8"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"jniDependencies": [],
|
||||||
|
"cppDependencies": [
|
||||||
|
{
|
||||||
|
"groupId": "com.pathplanner.lib",
|
||||||
|
"artifactId": "PathplannerLib-cpp",
|
||||||
|
"version": "2024.2.8",
|
||||||
|
"libName": "PathplannerLib",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sharedLibrary": false,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal",
|
||||||
|
"linuxathena",
|
||||||
|
"linuxarm32",
|
||||||
|
"linuxarm64"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
+206
-16
@@ -1,151 +1,341 @@
|
|||||||
{
|
{
|
||||||
"fileName": "Phoenix5.json",
|
|
||||||
|
"fileName": "Phoenix5-frc2025-beta-latest.json",
|
||||||
|
|
||||||
"name": "CTRE-Phoenix (v5)",
|
"name": "CTRE-Phoenix (v5)",
|
||||||
"version": "5.33.1",
|
|
||||||
"frcYear": 2024,
|
"version": "5.34.0-beta-4",
|
||||||
|
|
||||||
|
"frcYear": "2025",
|
||||||
|
|
||||||
"uuid": "ab676553-b602-441f-a38d-f1296eff6537",
|
"uuid": "ab676553-b602-441f-a38d-f1296eff6537",
|
||||||
|
|
||||||
"mavenUrls": [
|
"mavenUrls": [
|
||||||
|
|
||||||
"https://maven.ctr-electronics.com/release/"
|
"https://maven.ctr-electronics.com/release/"
|
||||||
|
|
||||||
],
|
],
|
||||||
"jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix/Phoenix5-frc2024-latest.json",
|
|
||||||
|
"jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix/Phoenix5-frc2025-beta-latest.json",
|
||||||
|
|
||||||
"requires": [
|
"requires": [
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
"uuid": "e995de00-2c64-4df5-8831-c1441420ff19",
|
"uuid": "e995de00-2c64-4df5-8831-c1441420ff19",
|
||||||
|
|
||||||
"errorMessage": "Phoenix 5 requires low-level libraries from Phoenix 6. Please add the Phoenix 6 vendordep before adding Phoenix 5.",
|
"errorMessage": "Phoenix 5 requires low-level libraries from Phoenix 6. Please add the Phoenix 6 vendordep before adding Phoenix 5.",
|
||||||
"offlineFileName": "Phoenix6.json",
|
|
||||||
"onlineUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2024-latest.json"
|
"offlineFileName": "Phoenix6-frc2025-beta-latest.json",
|
||||||
|
|
||||||
|
"onlineUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2025-beta-latest.json"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
|
"conflictsWith": [
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
"uuid": "e7900d8d-826f-4dca-a1ff-182f658e98af",
|
||||||
|
|
||||||
|
"errorMessage": "Users must use the Phoenix 5 replay vendordep when using the Phoenix 6 replay vendordep.",
|
||||||
|
|
||||||
|
"offlineFileName": "Phoenix6-replay-frc2025-beta-latest.json"
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
"uuid": "fbc886a4-2cec-40c0-9835-71086a8cc3df",
|
||||||
|
|
||||||
|
"errorMessage": "Users cannot have both the replay and regular Phoenix 5 vendordeps in their robot program.",
|
||||||
|
|
||||||
|
"offlineFileName": "Phoenix5-replay-frc2025-beta-latest.json"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
],
|
||||||
|
|
||||||
"javaDependencies": [
|
"javaDependencies": [
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
"groupId": "com.ctre.phoenix",
|
"groupId": "com.ctre.phoenix",
|
||||||
|
|
||||||
"artifactId": "api-java",
|
"artifactId": "api-java",
|
||||||
"version": "5.33.1"
|
|
||||||
|
"version": "5.34.0-beta-4"
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
"groupId": "com.ctre.phoenix",
|
"groupId": "com.ctre.phoenix",
|
||||||
|
|
||||||
"artifactId": "wpiapi-java",
|
"artifactId": "wpiapi-java",
|
||||||
"version": "5.33.1"
|
|
||||||
|
"version": "5.34.0-beta-4"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
"jniDependencies": [
|
"jniDependencies": [
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
"groupId": "com.ctre.phoenix",
|
"groupId": "com.ctre.phoenix",
|
||||||
|
|
||||||
"artifactId": "cci",
|
"artifactId": "cci",
|
||||||
"version": "5.33.1",
|
|
||||||
|
"version": "5.34.0-beta-4",
|
||||||
|
|
||||||
"isJar": false,
|
"isJar": false,
|
||||||
|
|
||||||
"skipInvalidPlatforms": true,
|
"skipInvalidPlatforms": true,
|
||||||
|
|
||||||
"validPlatforms": [
|
"validPlatforms": [
|
||||||
|
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
|
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
|
||||||
|
"linuxarm64",
|
||||||
|
|
||||||
"linuxathena"
|
"linuxathena"
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
"simMode": "hwsim"
|
"simMode": "hwsim"
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
"groupId": "com.ctre.phoenix.sim",
|
"groupId": "com.ctre.phoenix.sim",
|
||||||
|
|
||||||
"artifactId": "cci-sim",
|
"artifactId": "cci-sim",
|
||||||
"version": "5.33.1",
|
|
||||||
|
"version": "5.34.0-beta-4",
|
||||||
|
|
||||||
"isJar": false,
|
"isJar": false,
|
||||||
|
|
||||||
"skipInvalidPlatforms": true,
|
"skipInvalidPlatforms": true,
|
||||||
|
|
||||||
"validPlatforms": [
|
"validPlatforms": [
|
||||||
|
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
|
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
|
||||||
|
"linuxarm64",
|
||||||
|
|
||||||
"osxuniversal"
|
"osxuniversal"
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
"simMode": "swsim"
|
"simMode": "swsim"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
"cppDependencies": [
|
"cppDependencies": [
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
"groupId": "com.ctre.phoenix",
|
"groupId": "com.ctre.phoenix",
|
||||||
|
|
||||||
"artifactId": "wpiapi-cpp",
|
"artifactId": "wpiapi-cpp",
|
||||||
"version": "5.33.1",
|
|
||||||
|
"version": "5.34.0-beta-4",
|
||||||
|
|
||||||
"libName": "CTRE_Phoenix_WPI",
|
"libName": "CTRE_Phoenix_WPI",
|
||||||
|
|
||||||
"headerClassifier": "headers",
|
"headerClassifier": "headers",
|
||||||
|
|
||||||
"sharedLibrary": true,
|
"sharedLibrary": true,
|
||||||
|
|
||||||
"skipInvalidPlatforms": true,
|
"skipInvalidPlatforms": true,
|
||||||
|
|
||||||
"binaryPlatforms": [
|
"binaryPlatforms": [
|
||||||
|
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
|
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
|
||||||
|
"linuxarm64",
|
||||||
|
|
||||||
"linuxathena"
|
"linuxathena"
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
"simMode": "hwsim"
|
"simMode": "hwsim"
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
"groupId": "com.ctre.phoenix",
|
"groupId": "com.ctre.phoenix",
|
||||||
|
|
||||||
"artifactId": "api-cpp",
|
"artifactId": "api-cpp",
|
||||||
"version": "5.33.1",
|
|
||||||
|
"version": "5.34.0-beta-4",
|
||||||
|
|
||||||
"libName": "CTRE_Phoenix",
|
"libName": "CTRE_Phoenix",
|
||||||
|
|
||||||
"headerClassifier": "headers",
|
"headerClassifier": "headers",
|
||||||
|
|
||||||
"sharedLibrary": true,
|
"sharedLibrary": true,
|
||||||
|
|
||||||
"skipInvalidPlatforms": true,
|
"skipInvalidPlatforms": true,
|
||||||
|
|
||||||
"binaryPlatforms": [
|
"binaryPlatforms": [
|
||||||
|
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
|
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
|
||||||
|
"linuxarm64",
|
||||||
|
|
||||||
"linuxathena"
|
"linuxathena"
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
"simMode": "hwsim"
|
"simMode": "hwsim"
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
"groupId": "com.ctre.phoenix",
|
"groupId": "com.ctre.phoenix",
|
||||||
|
|
||||||
"artifactId": "cci",
|
"artifactId": "cci",
|
||||||
"version": "5.33.1",
|
|
||||||
|
"version": "5.34.0-beta-4",
|
||||||
|
|
||||||
"libName": "CTRE_PhoenixCCI",
|
"libName": "CTRE_PhoenixCCI",
|
||||||
|
|
||||||
"headerClassifier": "headers",
|
"headerClassifier": "headers",
|
||||||
|
|
||||||
"sharedLibrary": true,
|
"sharedLibrary": true,
|
||||||
|
|
||||||
"skipInvalidPlatforms": true,
|
"skipInvalidPlatforms": true,
|
||||||
|
|
||||||
"binaryPlatforms": [
|
"binaryPlatforms": [
|
||||||
|
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
|
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
|
||||||
|
"linuxarm64",
|
||||||
|
|
||||||
"linuxathena"
|
"linuxathena"
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
"simMode": "hwsim"
|
"simMode": "hwsim"
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
"groupId": "com.ctre.phoenix.sim",
|
"groupId": "com.ctre.phoenix.sim",
|
||||||
|
|
||||||
"artifactId": "wpiapi-cpp-sim",
|
"artifactId": "wpiapi-cpp-sim",
|
||||||
"version": "5.33.1",
|
|
||||||
|
"version": "5.34.0-beta-4",
|
||||||
|
|
||||||
"libName": "CTRE_Phoenix_WPISim",
|
"libName": "CTRE_Phoenix_WPISim",
|
||||||
|
|
||||||
"headerClassifier": "headers",
|
"headerClassifier": "headers",
|
||||||
|
|
||||||
"sharedLibrary": true,
|
"sharedLibrary": true,
|
||||||
|
|
||||||
"skipInvalidPlatforms": true,
|
"skipInvalidPlatforms": true,
|
||||||
|
|
||||||
"binaryPlatforms": [
|
"binaryPlatforms": [
|
||||||
|
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
|
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
|
||||||
|
"linuxarm64",
|
||||||
|
|
||||||
"osxuniversal"
|
"osxuniversal"
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
"simMode": "swsim"
|
"simMode": "swsim"
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
"groupId": "com.ctre.phoenix.sim",
|
"groupId": "com.ctre.phoenix.sim",
|
||||||
|
|
||||||
"artifactId": "api-cpp-sim",
|
"artifactId": "api-cpp-sim",
|
||||||
"version": "5.33.1",
|
|
||||||
|
"version": "5.34.0-beta-4",
|
||||||
|
|
||||||
"libName": "CTRE_PhoenixSim",
|
"libName": "CTRE_PhoenixSim",
|
||||||
|
|
||||||
"headerClassifier": "headers",
|
"headerClassifier": "headers",
|
||||||
|
|
||||||
"sharedLibrary": true,
|
"sharedLibrary": true,
|
||||||
|
|
||||||
"skipInvalidPlatforms": true,
|
"skipInvalidPlatforms": true,
|
||||||
|
|
||||||
"binaryPlatforms": [
|
"binaryPlatforms": [
|
||||||
|
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
|
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
|
||||||
|
"linuxarm64",
|
||||||
|
|
||||||
"osxuniversal"
|
"osxuniversal"
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
"simMode": "swsim"
|
"simMode": "swsim"
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
"groupId": "com.ctre.phoenix.sim",
|
"groupId": "com.ctre.phoenix.sim",
|
||||||
|
|
||||||
"artifactId": "cci-sim",
|
"artifactId": "cci-sim",
|
||||||
"version": "5.33.1",
|
|
||||||
|
"version": "5.34.0-beta-4",
|
||||||
|
|
||||||
"libName": "CTRE_PhoenixCCISim",
|
"libName": "CTRE_PhoenixCCISim",
|
||||||
|
|
||||||
"headerClassifier": "headers",
|
"headerClassifier": "headers",
|
||||||
|
|
||||||
"sharedLibrary": true,
|
"sharedLibrary": true,
|
||||||
|
|
||||||
"skipInvalidPlatforms": true,
|
"skipInvalidPlatforms": true,
|
||||||
|
|
||||||
"binaryPlatforms": [
|
"binaryPlatforms": [
|
||||||
|
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
|
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
|
||||||
|
"linuxarm64",
|
||||||
|
|
||||||
"osxuniversal"
|
"osxuniversal"
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
||||||
"simMode": "swsim"
|
"simMode": "swsim"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
}
|
}
|
||||||
+108
-58
@@ -1,50 +1,80 @@
|
|||||||
{
|
{
|
||||||
"fileName": "Phoenix6.json",
|
"fileName": "Phoenix6-frc2025-beta-latest.json",
|
||||||
"name": "CTRE-Phoenix (v6)",
|
"name": "CTRE-Phoenix (v6)",
|
||||||
"version": "24.3.0",
|
"version": "25.0.0-beta-4",
|
||||||
"frcYear": 2024,
|
"frcYear": "2025",
|
||||||
"uuid": "e995de00-2c64-4df5-8831-c1441420ff19",
|
"uuid": "e995de00-2c64-4df5-8831-c1441420ff19",
|
||||||
"mavenUrls": [
|
"mavenUrls": [
|
||||||
"https://maven.ctr-electronics.com/release/"
|
"https://maven.ctr-electronics.com/release/"
|
||||||
],
|
],
|
||||||
"jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2024-latest.json",
|
"jsonUrl": "https://maven.ctr-electronics.com/release/com/ctre/phoenix6/latest/Phoenix6-frc2025-beta-latest.json",
|
||||||
"conflictsWith": [
|
"conflictsWith": [
|
||||||
{
|
{
|
||||||
"uuid": "3fcf3402-e646-4fa6-971e-18afe8173b1a",
|
"uuid": "e7900d8d-826f-4dca-a1ff-182f658e98af",
|
||||||
"errorMessage": "The combined Phoenix-6-And-5 vendordep is no longer supported. Please remove the vendordep and instead add both the latest Phoenix 6 vendordep and Phoenix 5 vendordep.",
|
"errorMessage": "Users can not have both the replay and regular Phoenix 6 vendordeps in their robot program.",
|
||||||
"offlineFileName": "Phoenix6And5.json"
|
"offlineFileName": "Phoenix6-replay-frc2025-beta-latest.json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"javaDependencies": [
|
"javaDependencies": [
|
||||||
{
|
{
|
||||||
"groupId": "com.ctre.phoenix6",
|
"groupId": "com.ctre.phoenix6",
|
||||||
"artifactId": "wpiapi-java",
|
"artifactId": "wpiapi-java",
|
||||||
"version": "24.3.0"
|
"version": "25.0.0-beta-4"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"jniDependencies": [
|
"jniDependencies": [
|
||||||
{
|
{
|
||||||
"groupId": "com.ctre.phoenix6",
|
"groupId": "com.ctre.phoenix6",
|
||||||
"artifactId": "tools",
|
"artifactId": "api-cpp",
|
||||||
"version": "24.3.0",
|
"version": "25.0.0-beta-4",
|
||||||
"isJar": false,
|
"isJar": false,
|
||||||
"skipInvalidPlatforms": true,
|
"skipInvalidPlatforms": true,
|
||||||
"validPlatforms": [
|
"validPlatforms": [
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
"linuxarm64",
|
||||||
|
"linuxathena"
|
||||||
|
],
|
||||||
|
"simMode": "hwsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6",
|
||||||
|
"artifactId": "tools",
|
||||||
|
"version": "25.0.0-beta-4",
|
||||||
|
"isJar": false,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"validPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"linuxarm64",
|
||||||
"linuxathena"
|
"linuxathena"
|
||||||
],
|
],
|
||||||
"simMode": "hwsim"
|
"simMode": "hwsim"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"groupId": "com.ctre.phoenix6.sim",
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
"artifactId": "tools-sim",
|
"artifactId": "api-cpp-sim",
|
||||||
"version": "24.3.0",
|
"version": "25.0.0-beta-4",
|
||||||
"isJar": false,
|
"isJar": false,
|
||||||
"skipInvalidPlatforms": true,
|
"skipInvalidPlatforms": true,
|
||||||
"validPlatforms": [
|
"validPlatforms": [
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
"linuxarm64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
|
"artifactId": "tools-sim",
|
||||||
|
"version": "25.0.0-beta-4",
|
||||||
|
"isJar": false,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"validPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"linuxarm64",
|
||||||
"osxuniversal"
|
"osxuniversal"
|
||||||
],
|
],
|
||||||
"simMode": "swsim"
|
"simMode": "swsim"
|
||||||
@@ -52,25 +82,13 @@
|
|||||||
{
|
{
|
||||||
"groupId": "com.ctre.phoenix6.sim",
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
"artifactId": "simTalonSRX",
|
"artifactId": "simTalonSRX",
|
||||||
"version": "24.3.0",
|
"version": "25.0.0-beta-4",
|
||||||
"isJar": false,
|
|
||||||
"skipInvalidPlatforms": true,
|
|
||||||
"validPlatforms": [
|
|
||||||
"windowsx86-64",
|
|
||||||
"linuxx86-64",
|
|
||||||
"osxuniversal"
|
|
||||||
],
|
|
||||||
"simMode": "swsim"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"groupId": "com.ctre.phoenix6.sim",
|
|
||||||
"artifactId": "simTalonFX",
|
|
||||||
"version": "24.3.0",
|
|
||||||
"isJar": false,
|
"isJar": false,
|
||||||
"skipInvalidPlatforms": true,
|
"skipInvalidPlatforms": true,
|
||||||
"validPlatforms": [
|
"validPlatforms": [
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
"linuxarm64",
|
||||||
"osxuniversal"
|
"osxuniversal"
|
||||||
],
|
],
|
||||||
"simMode": "swsim"
|
"simMode": "swsim"
|
||||||
@@ -78,12 +96,13 @@
|
|||||||
{
|
{
|
||||||
"groupId": "com.ctre.phoenix6.sim",
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
"artifactId": "simVictorSPX",
|
"artifactId": "simVictorSPX",
|
||||||
"version": "24.3.0",
|
"version": "25.0.0-beta-4",
|
||||||
"isJar": false,
|
"isJar": false,
|
||||||
"skipInvalidPlatforms": true,
|
"skipInvalidPlatforms": true,
|
||||||
"validPlatforms": [
|
"validPlatforms": [
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
"linuxarm64",
|
||||||
"osxuniversal"
|
"osxuniversal"
|
||||||
],
|
],
|
||||||
"simMode": "swsim"
|
"simMode": "swsim"
|
||||||
@@ -91,12 +110,13 @@
|
|||||||
{
|
{
|
||||||
"groupId": "com.ctre.phoenix6.sim",
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
"artifactId": "simPigeonIMU",
|
"artifactId": "simPigeonIMU",
|
||||||
"version": "24.3.0",
|
"version": "25.0.0-beta-4",
|
||||||
"isJar": false,
|
"isJar": false,
|
||||||
"skipInvalidPlatforms": true,
|
"skipInvalidPlatforms": true,
|
||||||
"validPlatforms": [
|
"validPlatforms": [
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
"linuxarm64",
|
||||||
"osxuniversal"
|
"osxuniversal"
|
||||||
],
|
],
|
||||||
"simMode": "swsim"
|
"simMode": "swsim"
|
||||||
@@ -104,12 +124,13 @@
|
|||||||
{
|
{
|
||||||
"groupId": "com.ctre.phoenix6.sim",
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
"artifactId": "simCANCoder",
|
"artifactId": "simCANCoder",
|
||||||
"version": "24.3.0",
|
"version": "25.0.0-beta-4",
|
||||||
"isJar": false,
|
"isJar": false,
|
||||||
"skipInvalidPlatforms": true,
|
"skipInvalidPlatforms": true,
|
||||||
"validPlatforms": [
|
"validPlatforms": [
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
"linuxarm64",
|
||||||
"osxuniversal"
|
"osxuniversal"
|
||||||
],
|
],
|
||||||
"simMode": "swsim"
|
"simMode": "swsim"
|
||||||
@@ -117,12 +138,13 @@
|
|||||||
{
|
{
|
||||||
"groupId": "com.ctre.phoenix6.sim",
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
"artifactId": "simProTalonFX",
|
"artifactId": "simProTalonFX",
|
||||||
"version": "24.3.0",
|
"version": "25.0.0-beta-4",
|
||||||
"isJar": false,
|
"isJar": false,
|
||||||
"skipInvalidPlatforms": true,
|
"skipInvalidPlatforms": true,
|
||||||
"validPlatforms": [
|
"validPlatforms": [
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
"linuxarm64",
|
||||||
"osxuniversal"
|
"osxuniversal"
|
||||||
],
|
],
|
||||||
"simMode": "swsim"
|
"simMode": "swsim"
|
||||||
@@ -130,12 +152,13 @@
|
|||||||
{
|
{
|
||||||
"groupId": "com.ctre.phoenix6.sim",
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
"artifactId": "simProCANcoder",
|
"artifactId": "simProCANcoder",
|
||||||
"version": "24.3.0",
|
"version": "25.0.0-beta-4",
|
||||||
"isJar": false,
|
"isJar": false,
|
||||||
"skipInvalidPlatforms": true,
|
"skipInvalidPlatforms": true,
|
||||||
"validPlatforms": [
|
"validPlatforms": [
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
"linuxarm64",
|
||||||
"osxuniversal"
|
"osxuniversal"
|
||||||
],
|
],
|
||||||
"simMode": "swsim"
|
"simMode": "swsim"
|
||||||
@@ -143,12 +166,27 @@
|
|||||||
{
|
{
|
||||||
"groupId": "com.ctre.phoenix6.sim",
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
"artifactId": "simProPigeon2",
|
"artifactId": "simProPigeon2",
|
||||||
"version": "24.3.0",
|
"version": "25.0.0-beta-4",
|
||||||
"isJar": false,
|
"isJar": false,
|
||||||
"skipInvalidPlatforms": true,
|
"skipInvalidPlatforms": true,
|
||||||
"validPlatforms": [
|
"validPlatforms": [
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
"linuxarm64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
|
"artifactId": "simProCANrange",
|
||||||
|
"version": "25.0.0-beta-4",
|
||||||
|
"isJar": false,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"validPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"linuxarm64",
|
||||||
"osxuniversal"
|
"osxuniversal"
|
||||||
],
|
],
|
||||||
"simMode": "swsim"
|
"simMode": "swsim"
|
||||||
@@ -158,7 +196,7 @@
|
|||||||
{
|
{
|
||||||
"groupId": "com.ctre.phoenix6",
|
"groupId": "com.ctre.phoenix6",
|
||||||
"artifactId": "wpiapi-cpp",
|
"artifactId": "wpiapi-cpp",
|
||||||
"version": "24.3.0",
|
"version": "25.0.0-beta-4",
|
||||||
"libName": "CTRE_Phoenix6_WPI",
|
"libName": "CTRE_Phoenix6_WPI",
|
||||||
"headerClassifier": "headers",
|
"headerClassifier": "headers",
|
||||||
"sharedLibrary": true,
|
"sharedLibrary": true,
|
||||||
@@ -166,6 +204,7 @@
|
|||||||
"binaryPlatforms": [
|
"binaryPlatforms": [
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
"linuxarm64",
|
||||||
"linuxathena"
|
"linuxathena"
|
||||||
],
|
],
|
||||||
"simMode": "hwsim"
|
"simMode": "hwsim"
|
||||||
@@ -173,7 +212,7 @@
|
|||||||
{
|
{
|
||||||
"groupId": "com.ctre.phoenix6",
|
"groupId": "com.ctre.phoenix6",
|
||||||
"artifactId": "tools",
|
"artifactId": "tools",
|
||||||
"version": "24.3.0",
|
"version": "25.0.0-beta-4",
|
||||||
"libName": "CTRE_PhoenixTools",
|
"libName": "CTRE_PhoenixTools",
|
||||||
"headerClassifier": "headers",
|
"headerClassifier": "headers",
|
||||||
"sharedLibrary": true,
|
"sharedLibrary": true,
|
||||||
@@ -181,6 +220,7 @@
|
|||||||
"binaryPlatforms": [
|
"binaryPlatforms": [
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
"linuxarm64",
|
||||||
"linuxathena"
|
"linuxathena"
|
||||||
],
|
],
|
||||||
"simMode": "hwsim"
|
"simMode": "hwsim"
|
||||||
@@ -188,7 +228,7 @@
|
|||||||
{
|
{
|
||||||
"groupId": "com.ctre.phoenix6.sim",
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
"artifactId": "wpiapi-cpp-sim",
|
"artifactId": "wpiapi-cpp-sim",
|
||||||
"version": "24.3.0",
|
"version": "25.0.0-beta-4",
|
||||||
"libName": "CTRE_Phoenix6_WPISim",
|
"libName": "CTRE_Phoenix6_WPISim",
|
||||||
"headerClassifier": "headers",
|
"headerClassifier": "headers",
|
||||||
"sharedLibrary": true,
|
"sharedLibrary": true,
|
||||||
@@ -196,6 +236,7 @@
|
|||||||
"binaryPlatforms": [
|
"binaryPlatforms": [
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
"linuxarm64",
|
||||||
"osxuniversal"
|
"osxuniversal"
|
||||||
],
|
],
|
||||||
"simMode": "swsim"
|
"simMode": "swsim"
|
||||||
@@ -203,7 +244,7 @@
|
|||||||
{
|
{
|
||||||
"groupId": "com.ctre.phoenix6.sim",
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
"artifactId": "tools-sim",
|
"artifactId": "tools-sim",
|
||||||
"version": "24.3.0",
|
"version": "25.0.0-beta-4",
|
||||||
"libName": "CTRE_PhoenixTools_Sim",
|
"libName": "CTRE_PhoenixTools_Sim",
|
||||||
"headerClassifier": "headers",
|
"headerClassifier": "headers",
|
||||||
"sharedLibrary": true,
|
"sharedLibrary": true,
|
||||||
@@ -211,6 +252,7 @@
|
|||||||
"binaryPlatforms": [
|
"binaryPlatforms": [
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
"linuxarm64",
|
||||||
"osxuniversal"
|
"osxuniversal"
|
||||||
],
|
],
|
||||||
"simMode": "swsim"
|
"simMode": "swsim"
|
||||||
@@ -218,7 +260,7 @@
|
|||||||
{
|
{
|
||||||
"groupId": "com.ctre.phoenix6.sim",
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
"artifactId": "simTalonSRX",
|
"artifactId": "simTalonSRX",
|
||||||
"version": "24.3.0",
|
"version": "25.0.0-beta-4",
|
||||||
"libName": "CTRE_SimTalonSRX",
|
"libName": "CTRE_SimTalonSRX",
|
||||||
"headerClassifier": "headers",
|
"headerClassifier": "headers",
|
||||||
"sharedLibrary": true,
|
"sharedLibrary": true,
|
||||||
@@ -226,21 +268,7 @@
|
|||||||
"binaryPlatforms": [
|
"binaryPlatforms": [
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
"osxuniversal"
|
"linuxarm64",
|
||||||
],
|
|
||||||
"simMode": "swsim"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"groupId": "com.ctre.phoenix6.sim",
|
|
||||||
"artifactId": "simTalonFX",
|
|
||||||
"version": "24.3.0",
|
|
||||||
"libName": "CTRE_SimTalonFX",
|
|
||||||
"headerClassifier": "headers",
|
|
||||||
"sharedLibrary": true,
|
|
||||||
"skipInvalidPlatforms": true,
|
|
||||||
"binaryPlatforms": [
|
|
||||||
"windowsx86-64",
|
|
||||||
"linuxx86-64",
|
|
||||||
"osxuniversal"
|
"osxuniversal"
|
||||||
],
|
],
|
||||||
"simMode": "swsim"
|
"simMode": "swsim"
|
||||||
@@ -248,7 +276,7 @@
|
|||||||
{
|
{
|
||||||
"groupId": "com.ctre.phoenix6.sim",
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
"artifactId": "simVictorSPX",
|
"artifactId": "simVictorSPX",
|
||||||
"version": "24.3.0",
|
"version": "25.0.0-beta-4",
|
||||||
"libName": "CTRE_SimVictorSPX",
|
"libName": "CTRE_SimVictorSPX",
|
||||||
"headerClassifier": "headers",
|
"headerClassifier": "headers",
|
||||||
"sharedLibrary": true,
|
"sharedLibrary": true,
|
||||||
@@ -256,6 +284,7 @@
|
|||||||
"binaryPlatforms": [
|
"binaryPlatforms": [
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
"linuxarm64",
|
||||||
"osxuniversal"
|
"osxuniversal"
|
||||||
],
|
],
|
||||||
"simMode": "swsim"
|
"simMode": "swsim"
|
||||||
@@ -263,7 +292,7 @@
|
|||||||
{
|
{
|
||||||
"groupId": "com.ctre.phoenix6.sim",
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
"artifactId": "simPigeonIMU",
|
"artifactId": "simPigeonIMU",
|
||||||
"version": "24.3.0",
|
"version": "25.0.0-beta-4",
|
||||||
"libName": "CTRE_SimPigeonIMU",
|
"libName": "CTRE_SimPigeonIMU",
|
||||||
"headerClassifier": "headers",
|
"headerClassifier": "headers",
|
||||||
"sharedLibrary": true,
|
"sharedLibrary": true,
|
||||||
@@ -271,6 +300,7 @@
|
|||||||
"binaryPlatforms": [
|
"binaryPlatforms": [
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
"linuxarm64",
|
||||||
"osxuniversal"
|
"osxuniversal"
|
||||||
],
|
],
|
||||||
"simMode": "swsim"
|
"simMode": "swsim"
|
||||||
@@ -278,7 +308,7 @@
|
|||||||
{
|
{
|
||||||
"groupId": "com.ctre.phoenix6.sim",
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
"artifactId": "simCANCoder",
|
"artifactId": "simCANCoder",
|
||||||
"version": "24.3.0",
|
"version": "25.0.0-beta-4",
|
||||||
"libName": "CTRE_SimCANCoder",
|
"libName": "CTRE_SimCANCoder",
|
||||||
"headerClassifier": "headers",
|
"headerClassifier": "headers",
|
||||||
"sharedLibrary": true,
|
"sharedLibrary": true,
|
||||||
@@ -286,6 +316,7 @@
|
|||||||
"binaryPlatforms": [
|
"binaryPlatforms": [
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
"linuxarm64",
|
||||||
"osxuniversal"
|
"osxuniversal"
|
||||||
],
|
],
|
||||||
"simMode": "swsim"
|
"simMode": "swsim"
|
||||||
@@ -293,7 +324,7 @@
|
|||||||
{
|
{
|
||||||
"groupId": "com.ctre.phoenix6.sim",
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
"artifactId": "simProTalonFX",
|
"artifactId": "simProTalonFX",
|
||||||
"version": "24.3.0",
|
"version": "25.0.0-beta-4",
|
||||||
"libName": "CTRE_SimProTalonFX",
|
"libName": "CTRE_SimProTalonFX",
|
||||||
"headerClassifier": "headers",
|
"headerClassifier": "headers",
|
||||||
"sharedLibrary": true,
|
"sharedLibrary": true,
|
||||||
@@ -301,6 +332,7 @@
|
|||||||
"binaryPlatforms": [
|
"binaryPlatforms": [
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
"linuxarm64",
|
||||||
"osxuniversal"
|
"osxuniversal"
|
||||||
],
|
],
|
||||||
"simMode": "swsim"
|
"simMode": "swsim"
|
||||||
@@ -308,7 +340,7 @@
|
|||||||
{
|
{
|
||||||
"groupId": "com.ctre.phoenix6.sim",
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
"artifactId": "simProCANcoder",
|
"artifactId": "simProCANcoder",
|
||||||
"version": "24.3.0",
|
"version": "25.0.0-beta-4",
|
||||||
"libName": "CTRE_SimProCANcoder",
|
"libName": "CTRE_SimProCANcoder",
|
||||||
"headerClassifier": "headers",
|
"headerClassifier": "headers",
|
||||||
"sharedLibrary": true,
|
"sharedLibrary": true,
|
||||||
@@ -316,6 +348,7 @@
|
|||||||
"binaryPlatforms": [
|
"binaryPlatforms": [
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
"linuxarm64",
|
||||||
"osxuniversal"
|
"osxuniversal"
|
||||||
],
|
],
|
||||||
"simMode": "swsim"
|
"simMode": "swsim"
|
||||||
@@ -323,7 +356,7 @@
|
|||||||
{
|
{
|
||||||
"groupId": "com.ctre.phoenix6.sim",
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
"artifactId": "simProPigeon2",
|
"artifactId": "simProPigeon2",
|
||||||
"version": "24.3.0",
|
"version": "25.0.0-beta-4",
|
||||||
"libName": "CTRE_SimProPigeon2",
|
"libName": "CTRE_SimProPigeon2",
|
||||||
"headerClassifier": "headers",
|
"headerClassifier": "headers",
|
||||||
"sharedLibrary": true,
|
"sharedLibrary": true,
|
||||||
@@ -331,6 +364,23 @@
|
|||||||
"binaryPlatforms": [
|
"binaryPlatforms": [
|
||||||
"windowsx86-64",
|
"windowsx86-64",
|
||||||
"linuxx86-64",
|
"linuxx86-64",
|
||||||
|
"linuxarm64",
|
||||||
|
"osxuniversal"
|
||||||
|
],
|
||||||
|
"simMode": "swsim"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "com.ctre.phoenix6.sim",
|
||||||
|
"artifactId": "simProCANrange",
|
||||||
|
"version": "25.0.0-beta-4",
|
||||||
|
"libName": "CTRE_SimProCANrange",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sharedLibrary": true,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxx86-64",
|
||||||
|
"linuxarm64",
|
||||||
"osxuniversal"
|
"osxuniversal"
|
||||||
],
|
],
|
||||||
"simMode": "swsim"
|
"simMode": "swsim"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"name": "WPILib-New-Commands",
|
"name": "WPILib-New-Commands",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"uuid": "111e20f7-815e-48f8-9dd6-e675ce75b266",
|
"uuid": "111e20f7-815e-48f8-9dd6-e675ce75b266",
|
||||||
"frcYear": "2024",
|
"frcYear": "2025",
|
||||||
"mavenUrls": [],
|
"mavenUrls": [],
|
||||||
"jsonUrl": "",
|
"jsonUrl": "",
|
||||||
"javaDependencies": [
|
"javaDependencies": [
|
||||||
|
|||||||
@@ -0,0 +1,71 @@
|
|||||||
|
{
|
||||||
|
"fileName": "photonlib.json",
|
||||||
|
"name": "photonlib",
|
||||||
|
"version": "v2025.0.0-beta-6",
|
||||||
|
"uuid": "515fe07e-bfc6-11fa-b3de-0242ac130004",
|
||||||
|
"frcYear": "2025",
|
||||||
|
"mavenUrls": [
|
||||||
|
"https://maven.photonvision.org/repository/internal",
|
||||||
|
"https://maven.photonvision.org/repository/snapshots"
|
||||||
|
],
|
||||||
|
"jsonUrl": "https://maven.photonvision.org/repository/internal/org/photonvision/photonlib-json/1.0/photonlib-json-1.0.json",
|
||||||
|
"jniDependencies": [
|
||||||
|
{
|
||||||
|
"groupId": "org.photonvision",
|
||||||
|
"artifactId": "photontargeting-cpp",
|
||||||
|
"version": "v2025.0.0-beta-6",
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"isJar": false,
|
||||||
|
"validPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxathena",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"cppDependencies": [
|
||||||
|
{
|
||||||
|
"groupId": "org.photonvision",
|
||||||
|
"artifactId": "photonlib-cpp",
|
||||||
|
"version": "v2025.0.0-beta-6",
|
||||||
|
"libName": "photonlib",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sharedLibrary": true,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxathena",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "org.photonvision",
|
||||||
|
"artifactId": "photontargeting-cpp",
|
||||||
|
"version": "v2025.0.0-beta-6",
|
||||||
|
"libName": "photontargeting",
|
||||||
|
"headerClassifier": "headers",
|
||||||
|
"sharedLibrary": true,
|
||||||
|
"skipInvalidPlatforms": true,
|
||||||
|
"binaryPlatforms": [
|
||||||
|
"windowsx86-64",
|
||||||
|
"linuxathena",
|
||||||
|
"linuxx86-64",
|
||||||
|
"osxuniversal"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"javaDependencies": [
|
||||||
|
{
|
||||||
|
"groupId": "org.photonvision",
|
||||||
|
"artifactId": "photonlib-java",
|
||||||
|
"version": "v2025.0.0-beta-6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupId": "org.photonvision",
|
||||||
|
"artifactId": "photontargeting-java",
|
||||||
|
"version": "v2025.0.0-beta-6"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user