Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
941da74
SolverLib and PedroPathing
Jaydenwithawhy Dec 29, 2025
dd56420
SolverLib and PedroPathing
Jaydenwithawhy Dec 31, 2025
754e5a1
SolverLib and PedroPathing
Jaydenwithawhy Jan 2, 2026
e25ce8b
SolverLib and PedroPathing
Jaydenwithawhy Jan 2, 2026
d62d079
more pedro
Jaydenwithawhy Jan 4, 2026
bdae9cd
more pedro
Jaydenwithawhy Jan 4, 2026
c9ee307
more pedro
Jaydenwithawhy Jan 7, 2026
58d482d
changing subsystems to run with InstantComands
Jaydenwithawhy Jan 10, 2026
4f7d7ab
feat(shooter): migrate Shooter subsystem to SubsystemBase with comman…
IamCoder18 Jan 10, 2026
4b76ce1
Merge remote-tracking branch 'origin/PedroPathing' into PedroPathing
IamCoder18 Jan 10, 2026
06c7d0e
Refactor Audience Auto and fix path names
IamCoder18 Jan 10, 2026
a6751fb
Fix: Subsystems inherit from SubsystemBase
IamCoder18 Jan 10, 2026
e6cb7e6
Deleted holdPoseDrive to fix later
IamCoder18 Jan 10, 2026
2eeb72c
Added MainTeleOp and Spindexer position getter
IamCoder18 Jan 10, 2026
a8938e7
changing subsystems to run with InstantComands
Jaydenwithawhy Jan 10, 2026
601d0ad
Auto and teleOp
Jaydenwithawhy Jan 11, 2026
1fdb736
Refactor: Rename Utills to Utils and add GamepadUtils
IamCoder18 Jan 11, 2026
33e944a
Cleaned up OldTeleOp and moved scheduler.run()
IamCoder18 Jan 11, 2026
9d10021
editing telop and auto
Jaydenwithawhy Jan 11, 2026
5fb582b
OldTeleOp changes
IamCoder18 Jan 11, 2026
fd21823
feat: Comment out shooter periodic call
IamCoder18 Jan 11, 2026
622a5c3
Refactor TeleOp drive to use follower method
IamCoder18 Jan 11, 2026
c389dee
feat: Replace OldTeleOp with MainTeleOp and refactor auto
IamCoder18 Jan 17, 2026
9e3806d
feat: Invert strafe and forward drive controls
IamCoder18 Jan 17, 2026
b78006e
feat: Implement conditional transfer based on shooter state
IamCoder18 Jan 17, 2026
bcf94f3
feat: Refactor transfer logic and improve telemetry
IamCoder18 Jan 17, 2026
3c6d01b
feat: Tune AudienceAuto wait times
IamCoder18 Jan 17, 2026
b76b2dc
feat: Refactor PID tuning and update dependencies
IamCoder18 Jan 18, 2026
4e62fca
feat(shooter): Tune PIDF constants and add tuning mode
IamCoder18 Jan 18, 2026
b2b51d7
editing telop and auto
Jaydenwithawhy Jan 19, 2026
8155779
feat: Refactor spindexer, transfer, and Limelight logic
IamCoder18 Jan 25, 2026
b0a9233
feat: Refactor auto shooting logic and improve subsystems
IamCoder18 Jan 25, 2026
d664cf4
feat: Refactor auto shooting logic and improve subsystems
IamCoder18 Jan 25, 2026
9d17d93
feat(auto): Add timeouts and improve reliability
IamCoder18 Jan 29, 2026
d3dfb15
feat: Refactor OpModes for multi-alliance and starting positions
IamCoder18 Jan 29, 2026
a464450
editing telop and auto
Jaydenwithawhy Jan 30, 2026
0804337
feat: Refactor OpModes for multi-alliance and starting positions
IamCoder18 Jan 31, 2026
ab38a92
Limelight and auto shoot in tellie
Jaydenwithawhy Jan 31, 2026
56659b8
Merge remote-tracking branch 'origin/PedroPathing' into PedroPathing
IamCoder18 Jan 31, 2026
554aba8
Merge remote-tracking branch 'origin/PedroPathing' into PedroPathing
IamCoder18 Jan 31, 2026
784a1ef
chore: Apply code formatting and cleanup
IamCoder18 Jan 31, 2026
623b3bb
Limelight
Jaydenwithawhy Jan 31, 2026
350ed81
feat(telemetry): Refactor Limelight and improve TeleOp telemetry
IamCoder18 Jan 31, 2026
0f9ceee
refactor: Clean up old OpModes and fix RGB indicator logic
IamCoder18 Jan 31, 2026
6f63785
Limelight
Jaydenwithawhy Jan 31, 2026
a5fe1ea
auto shooting
Jaydenwithawhy Jan 31, 2026
70f86c4
Merge remote-tracking branch 'origin/PedroPathing' into PedroPathing
Jaydenwithawhy Jan 31, 2026
62ac78e
refactor(spindexer): Base next target on current position
IamCoder18 Jan 31, 2026
cc3543c
refactor(opmodes): Update TeleOp groups and enhance shooter tuning
IamCoder18 Feb 1, 2026
03ff2f9
chore(tuning): Change default team in ShooterDistanceTuning
IamCoder18 Feb 1, 2026
310e3d4
LimeLight
Jaydenwithawhy Feb 1, 2026
72dd99d
Merge remote-tracking branch 'origin/PedroPathing' into PedroPathing
Jaydenwithawhy Feb 1, 2026
66e0665
LimeLight
Jaydenwithawhy Feb 1, 2026
7ba1036
refactor(limelight): Simplify and streamline Limelight subsystem
IamCoder18 Feb 1, 2026
e7eff69
refactor(shooter): Improve shooting logic and default state
IamCoder18 Feb 2, 2026
1b2d987
feat(controller): Add WiFi channel selector to menu
IamCoder18 Feb 2, 2026
3cc2bd2
feat(opmodes): Persist robot pose between OpModes
IamCoder18 Feb 4, 2026
241c945
front side buttion
Jaydenwithawhy Feb 4, 2026
5d6b2c0
feat(haptics): Add controller rumble feedback
IamCoder18 Feb 4, 2026
e7efc1e
frontside buttion and red auto
Jaydenwithawhy Feb 4, 2026
f431c26
Merge remote-tracking branch 'origin/PedroPathing' into PedroPathing
Jaydenwithawhy Feb 4, 2026
74947e5
frontside buttion and red auto
Jaydenwithawhy Feb 4, 2026
f187e88
refactor(controls): Overhaul TeleOp controls and improve spindexer logic
IamCoder18 Feb 4, 2026
f76509b
auto transfer
Jaydenwithawhy Feb 4, 2026
2100c39
comp
Jaydenwithawhy Feb 7, 2026
62d188d
comp
Jaydenwithawhy Feb 7, 2026
37eae9d
feat(auto): Add 2-spike park and improve OpMode transitions
IamCoder18 Feb 7, 2026
32d3bd3
refactor(codebase): Clean up unused code and improve consistency
IamCoder18 Feb 8, 2026
f87698c
after comp
Jaydenwithawhy Feb 8, 2026
d6ec58a
Merge remote-tracking branch 'origin/PedroPathing' into PedroPathing
Jaydenwithawhy Feb 8, 2026
9f8bb58
touch sensor
Jaydenwithawhy Feb 13, 2026
e5a9048
fix(auto): Adjust red alliance starting pose
IamCoder18 Feb 13, 2026
8bf94ce
Merge remote-tracking branch 'origin/PedroPathing' into PedroPathing
IamCoder18 Feb 13, 2026
7de8e13
refactor(teleop): Clean up unused code and adjust red alliance pose
IamCoder18 Feb 13, 2026
297e908
feat(auto): Adjust TeleOp auto-aim paths
IamCoder18 Feb 13, 2026
8ec8433
touch sensor
Jaydenwithawhy Feb 15, 2026
22e831b
feat(subsystem): Add colour sensor subsystem and tune shooter
IamCoder18 Feb 16, 2026
fa42ac1
fix(teleop): remove transfer overrides that interfere with automatic …
IamCoder18 Feb 16, 2026
16d145d
touch sensor, auto chages and other things i forgor
Jaydenwithawhy Feb 22, 2026
edd0e06
style: Whitespace cleanup
IamCoder18 Feb 22, 2026
b6e08e6
refactor: Remove SolversLib drive and ACME Dashboard annotations
IamCoder18 Feb 22, 2026
f68d6f2
refactor(deps): Update SolversLib and retune pathing and shooter cons…
IamCoder18 Feb 23, 2026
4e653cf
touch sensor and new auto
Jaydenwithawhy Feb 25, 2026
a9df6a1
feat(auto): Implement modular autonomous system and pose database
IamCoder18 Feb 27, 2026
389e503
feat(spindexer): implement slot detection and persistent positioning
IamCoder18 Feb 27, 2026
76fe3f5
feat(spindexer): implement slot detection and persistent positioning
IamCoder18 Feb 27, 2026
c9d814f
touch sensor and new auto
Jaydenwithawhy Feb 27, 2026
3e60b50
feat(auto): Implement Blue Modular Double Human Auto and enhance modu…
IamCoder18 Feb 28, 2026
90ce5ea
provicals owo
Jaydenwithawhy Feb 28, 2026
3e8ecb5
feat(teleop): Add end-game rumble alert and refactor transfer logic
IamCoder18 Feb 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,10 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
import android.app.ActionBar;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.AlertDialog;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.ServiceConnection;
import android.content.SharedPreferences;
Expand Down Expand Up @@ -125,10 +127,10 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
import org.firstinspires.ftc.robotcore.internal.webserver.RobotControllerWebInfo;
import org.firstinspires.ftc.robotserver.internal.programmingmode.ProgrammingModeManager;
import org.firstinspires.inspection.RcInspectionActivity;
import org.threeten.bp.YearMonth;
import org.xmlpull.v1.XmlPullParserException;

import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
Expand Down Expand Up @@ -303,7 +305,7 @@ protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_ftc_controller);

preferencesHelper = new PreferencesHelper(TAG, context);
preferencesHelper.writeBooleanPrefIfDifferent(context.getString(R.string.pref_rc_connected), true);
preferencesHelper.writeBooleanPrefIfDifferent(context.getString(com.qualcomm.robotcore.R.string.pref_rc_connected), true);
preferencesHelper.getSharedPreferences().registerOnSharedPreferenceChangeListener(sharedPreferencesListener);

// Check if this RC app is from a later FTC season than what was installed previously
Expand All @@ -312,10 +314,10 @@ protected void onCreate(Bundle savedInstanceState) {
if (ftcSeasonYearOfCurrentlyInstalledRc > ftcSeasonYearOfPreviouslyInstalledRc) {
preferencesHelper.writeIntPrefIfDifferent(getString(R.string.pref_ftc_season_year_of_current_rc), ftcSeasonYearOfCurrentlyInstalledRc);
// Since it's a new FTC season, we should reset certain settings back to their default values.
preferencesHelper.writeBooleanPrefIfDifferent(getString(R.string.pref_warn_about_2_4_ghz_band), true);
preferencesHelper.writeBooleanPrefIfDifferent(getString(R.string.pref_warn_about_obsolete_software), true);
preferencesHelper.writeBooleanPrefIfDifferent(getString(R.string.pref_warn_about_mismatched_app_versions), true);
preferencesHelper.writeBooleanPrefIfDifferent(getString(R.string.pref_warn_about_incorrect_clocks), true);
preferencesHelper.writeBooleanPrefIfDifferent(getString(com.qualcomm.robotcore.R.string.pref_warn_about_2_4_ghz_band), true);
preferencesHelper.writeBooleanPrefIfDifferent(getString(com.qualcomm.robotcore.R.string.pref_warn_about_obsolete_software), true);
preferencesHelper.writeBooleanPrefIfDifferent(getString(com.qualcomm.robotcore.R.string.pref_warn_about_mismatched_app_versions), true);
preferencesHelper.writeBooleanPrefIfDifferent(getString(com.qualcomm.robotcore.R.string.pref_warn_about_incorrect_clocks), true);
}

entireScreenLayout = (LinearLayout) findViewById(R.id.entire_screen);
Expand Down Expand Up @@ -399,7 +401,7 @@ public boolean onMenuItemClick(MenuItem item) {
RobotLog.logDeviceInfo();
AndroidBoard.getInstance().logAndroidBoardInfo();

if (preferencesHelper.readBoolean(getString(R.string.pref_wifi_automute), false)) {
if (preferencesHelper.readBoolean(getString(com.qualcomm.ftccommon.R.string.pref_wifi_automute), false)) {
initWifiMute(true);
}

Expand Down Expand Up @@ -504,11 +506,11 @@ protected void readNetworkType() {
if (Device.isRevControlHub() == true) {
networkType = NetworkType.RCWIRELESSAP;
} else {
networkType = NetworkType.fromString(preferencesHelper.readString(context.getString(R.string.pref_pairing_kind), NetworkType.globalDefaultAsString()));
networkType = NetworkType.fromString(preferencesHelper.readString(context.getString(com.qualcomm.robotcore.R.string.pref_pairing_kind), NetworkType.globalDefaultAsString()));
}

// update the app_settings
preferencesHelper.writeStringPrefIfDifferent(context.getString(R.string.pref_pairing_kind), networkType.toString());
preferencesHelper.writeStringPrefIfDifferent(context.getString(com.qualcomm.robotcore.R.string.pref_pairing_kind), networkType.toString());
}

@Override
Expand Down Expand Up @@ -583,6 +585,10 @@ else if (id == R.id.action_settings) {
startActivityForResult(settingsIntent, RequestCode.SETTINGS_ROBOT_CONTROLLER.ordinal());
return true;
}
else if (id == R.id.action_wifi_channel) {
showWifiChannelSelector();
return true;
}
else if (id == R.id.action_about) {
Intent intent = new Intent(AppUtil.getDefContext(), FtcAboutActivity.class);
startActivity(intent);
Expand Down Expand Up @@ -617,6 +623,39 @@ else if (id == R.id.action_exit_app) {
return super.onOptionsItemSelected(item);
}

private void showWifiChannelSelector() {
List<Integer> channelList = new ArrayList<>();
channelList.add(0); // Auto
// 2.4 GHz
for (int i = 1; i <= 13; i++) {
channelList.add(i);
}
// Expanded range for 5GHz and other frequencies (overlapping)
// Includes 72-96 range specifically requested
for (int i = 32; i <= 177; i++) {
channelList.add(i);
}

final Integer[] channels = channelList.toArray(new Integer[0]);
String[] channelLabels = new String[channels.length];
for (int i = 0; i < channels.length; i++) {
channelLabels[i] = channels[i] == 0 ? "Auto" : String.valueOf(channels[i]);
}

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Select WiFi Channel (Incl. Non-standard)");
builder.setItems(channelLabels, (dialog, which) -> {
int selectedChannel = channels[which];
preferencesHelper.writeIntPrefIfDifferent(getString(com.qualcomm.ftccommon.R.string.pref_wifip2p_channel), selectedChannel);
if (wifiDirectChannelChanger == null) {
wifiDirectChannelChanger = new WifiDirectChannelChanger();
}
wifiDirectChannelChanger.changeToChannel(selectedChannel);
AppUtil.getInstance().showToast(UILocation.BOTH, "Channel set to " + (selectedChannel == 0 ? "Auto" : selectedChannel));
});
builder.show();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Expand Down Expand Up @@ -703,7 +742,7 @@ private void updateUIAndRequestRobotSetup() {
requestRobotSetup(LynxConstants.isRevControlHub()
? new Runnable() {
@Override public void run() {
showRestartRobotCompleteToast(R.string.toastRobotSetupComplete);
showRestartRobotCompleteToast(com.qualcomm.ftccommon.R.string.toastRobotSetupComplete);
}
}
: null);
Expand Down Expand Up @@ -757,7 +796,7 @@ private void requestRobotRestart() {
shutdownRobot();
requestRobotSetup(new Runnable() {
@Override public void run() {
showRestartRobotCompleteToast(R.string.toastRestartRobotComplete);
showRestartRobotCompleteToast(com.qualcomm.ftccommon.R.string.toastRestartRobotComplete);
}
});
}
Expand Down Expand Up @@ -800,10 +839,10 @@ public void onMenuVisibilityChanged(boolean isVisible) {

protected class SharedPreferencesListener implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(context.getString(R.string.pref_app_theme))) {
ThemedActivity.restartForAppThemeChange(getTag(), getString(R.string.appThemeChangeRestartNotifyRC));
} else if (key.equals(context.getString(R.string.pref_wifi_automute))) {
if (preferencesHelper.readBoolean(context.getString(R.string.pref_wifi_automute), false)) {
if (key.equals(context.getString(com.qualcomm.robotcore.R.string.pref_app_theme))) {
ThemedActivity.restartForAppThemeChange(getTag(), getString(com.qualcomm.robotcore.R.string.appThemeChangeRestartNotifyRC));
} else if (key.equals(context.getString(com.qualcomm.ftccommon.R.string.pref_wifi_automute))) {
if (preferencesHelper.readBoolean(context.getString(com.qualcomm.ftccommon.R.string.pref_wifi_automute), false)) {
initWifiMute(true);
} else {
initWifiMute(false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,6 @@
import android.Manifest;
import android.os.Bundle;

import com.qualcomm.ftcrobotcontroller.R;

import org.firstinspires.ftc.robotcore.internal.system.Misc;
import org.firstinspires.ftc.robotcore.internal.system.PermissionValidatorActivity;

Expand All @@ -60,19 +58,19 @@ public class PermissionValidatorWrapper extends PermissionValidatorActivity {

public String mapPermissionToExplanation(final String permission) {
if (permission.equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
return Misc.formatForUser(R.string.permRcWriteExternalStorageExplain);
return Misc.formatForUser(com.qualcomm.robotcore.R.string.permRcWriteExternalStorageExplain);
} else if (permission.equals(Manifest.permission.READ_EXTERNAL_STORAGE)) {
return Misc.formatForUser(R.string.permRcReadExternalStorageExplain);
return Misc.formatForUser(com.qualcomm.robotcore.R.string.permRcReadExternalStorageExplain);
} else if (permission.equals(Manifest.permission.CAMERA)) {
return Misc.formatForUser(R.string.permRcCameraExplain);
return Misc.formatForUser(com.qualcomm.robotcore.R.string.permRcCameraExplain);
} else if (permission.equals(Manifest.permission.ACCESS_COARSE_LOCATION)) {
return Misc.formatForUser(R.string.permAccessLocationExplain);
return Misc.formatForUser(com.qualcomm.robotcore.R.string.permAccessLocationExplain);
} else if (permission.equals(Manifest.permission.ACCESS_FINE_LOCATION)) {
return Misc.formatForUser(R.string.permAccessLocationExplain);
return Misc.formatForUser(com.qualcomm.robotcore.R.string.permAccessLocationExplain);
} else if (permission.equals(Manifest.permission.READ_PHONE_STATE)) {
return Misc.formatForUser(R.string.permReadPhoneState);
return Misc.formatForUser(com.qualcomm.robotcore.R.string.permReadPhoneState);
}
return Misc.formatForUser(R.string.permGenericExplain);
return Misc.formatForUser(com.qualcomm.robotcore.R.string.permGenericExplain);
}

@Override
Expand Down
7 changes: 7 additions & 0 deletions FtcRobotController/src/main/res/menu/ftc_robot_controller.xml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
android:orderInCategory="100"
app:showAsAction="never"
android:title="@string/settings_menu_item"/>

<item
android:id="@+id/action_wifi_channel"
android:orderInCategory="150"
app:showAsAction="never"
android:title="@string/wifi_channel_menu_item"/>

<item
android:id="@+id/action_restart_robot"
android:orderInCategory="200"
Expand Down
1 change: 1 addition & 0 deletions FtcRobotController/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<string name="restart_robot_menu_item">Restart Robot</string>
<string name="configure_robot_menu_item">Configure Robot</string>
<string name="about_menu_item">About</string>
<string name="wifi_channel_menu_item">Change WiFi Channel</string>
<string name="exit_menu_item">Exit</string>

<!-- Toast messages -->
Expand Down
14 changes: 4 additions & 10 deletions TeamCode/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -24,19 +24,13 @@ android {
}
repositories {
maven {
url = 'https://maven.brott.dev/'
url "https://repo.dairy.foundation/releases"
}
}

dependencies {
implementation project(':FtcRobotController')

implementation "com.acmerobotics.roadrunner:ftc:0.1.23"
implementation "com.acmerobotics.roadrunner:core:1.0.1"
implementation "com.acmerobotics.roadrunner:actions:1.0.1"
implementation "com.acmerobotics.dashboard:dashboard:0.4.17"
}




implementation "org.solverslib:core:0.3.4" // core
implementation "org.solverslib:pedroPathing:0.3.3" // pedroPathing
}
Loading