mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-19 00:41:43 +00:00
[hal, wpilib] Add OpMode support (#7744)
User code: - OpModeRobot used as the robot base class - LinearOpMode and PeriodicOpMode are provided opmode base classes - In Java, annotations can be used to automatically register opmode classes Additional user code functionality: - OpMode (string) is available in addition to the overall auto/teleop/test robot mode - OpMode does not indicate enable (enable/disable is still separate) - The HAL API uses integer UIDs; these are exposed at the user API level as well for faster checks - User code creates opmodes on startup (these have name, category, description, etc). DS: - DS will present opmode selection lists for auto and teleop for match/practice. During a match, the DS will automatically activate the selected opmode in the corresponding match period. - For testing, an overall mode is selected (e.g. teleop/auto/test) and a single opmode is selected Future work: - Command framework support/integration - Python annotation support - Unit tests (needs race-free DS sim updates) - Porting of examples Co-authored-by: Joseph Eng <91924258+KangarooKoala@users.noreply.github.com>
This commit is contained in:
@@ -31,38 +31,21 @@ void DriverStationSim::SetEnabled(bool enabled) {
|
||||
HALSIM_SetDriverStationEnabled(enabled);
|
||||
}
|
||||
|
||||
std::unique_ptr<CallbackStore> DriverStationSim::RegisterAutonomousCallback(
|
||||
std::unique_ptr<CallbackStore> DriverStationSim::RegisterRobotModeCallback(
|
||||
NotifyCallback callback, bool initialNotify) {
|
||||
auto store = std::make_unique<CallbackStore>(
|
||||
-1, callback, &HALSIM_CancelDriverStationAutonomousCallback);
|
||||
store->SetUid(HALSIM_RegisterDriverStationAutonomousCallback(
|
||||
-1, callback, &HALSIM_CancelDriverStationRobotModeCallback);
|
||||
store->SetUid(HALSIM_RegisterDriverStationRobotModeCallback(
|
||||
&CallbackStoreThunk, store.get(), initialNotify));
|
||||
return store;
|
||||
}
|
||||
|
||||
bool DriverStationSim::GetAutonomous() {
|
||||
return HALSIM_GetDriverStationAutonomous();
|
||||
HAL_RobotMode DriverStationSim::GetRobotMode() {
|
||||
return HALSIM_GetDriverStationRobotMode();
|
||||
}
|
||||
|
||||
void DriverStationSim::SetAutonomous(bool autonomous) {
|
||||
HALSIM_SetDriverStationAutonomous(autonomous);
|
||||
}
|
||||
|
||||
std::unique_ptr<CallbackStore> DriverStationSim::RegisterTestCallback(
|
||||
NotifyCallback callback, bool initialNotify) {
|
||||
auto store = std::make_unique<CallbackStore>(
|
||||
-1, callback, &HALSIM_CancelDriverStationTestCallback);
|
||||
store->SetUid(HALSIM_RegisterDriverStationTestCallback(
|
||||
&CallbackStoreThunk, store.get(), initialNotify));
|
||||
return store;
|
||||
}
|
||||
|
||||
bool DriverStationSim::GetTest() {
|
||||
return HALSIM_GetDriverStationTest();
|
||||
}
|
||||
|
||||
void DriverStationSim::SetTest(bool test) {
|
||||
HALSIM_SetDriverStationTest(test);
|
||||
void DriverStationSim::SetRobotMode(HAL_RobotMode robotMode) {
|
||||
HALSIM_SetDriverStationRobotMode(robotMode);
|
||||
}
|
||||
|
||||
std::unique_ptr<CallbackStore> DriverStationSim::RegisterEStopCallback(
|
||||
@@ -152,6 +135,38 @@ void DriverStationSim::SetMatchTime(double matchTime) {
|
||||
HALSIM_SetDriverStationMatchTime(matchTime);
|
||||
}
|
||||
|
||||
std::unique_ptr<CallbackStore> DriverStationSim::RegisterOpModeCallback(
|
||||
NotifyCallback callback, bool initialNotify) {
|
||||
auto store = std::make_unique<CallbackStore>(
|
||||
-1, callback, &HALSIM_CancelDriverStationOpModeCallback);
|
||||
store->SetUid(HALSIM_RegisterDriverStationOpModeCallback(
|
||||
&CallbackStoreThunk, store.get(), initialNotify));
|
||||
return store;
|
||||
}
|
||||
|
||||
int64_t DriverStationSim::GetOpMode() {
|
||||
return HALSIM_GetDriverStationOpMode();
|
||||
}
|
||||
|
||||
void DriverStationSim::SetOpMode(int64_t opmode) {
|
||||
HALSIM_SetDriverStationOpMode(opmode);
|
||||
}
|
||||
|
||||
std::unique_ptr<CallbackStore> DriverStationSim::RegisterOpModeOptionsCallback(
|
||||
OpModeOptionsCallback callback, bool initialNotify) {
|
||||
auto store = std::make_unique<CallbackStore>(
|
||||
-1, callback, &HALSIM_CancelOpModeOptionsCallback);
|
||||
store->SetUid(HALSIM_RegisterOpModeOptionsCallback(
|
||||
&OpModeOptionsCallbackStoreThunk, store.get(), initialNotify));
|
||||
return store;
|
||||
}
|
||||
|
||||
OpModeOptions DriverStationSim::GetOpModeOptions() {
|
||||
int32_t len;
|
||||
auto options = HALSIM_GetOpModeOptions(&len);
|
||||
return {options, len};
|
||||
}
|
||||
|
||||
void DriverStationSim::NotifyNewData() {
|
||||
wpi::util::Event waitEvent{true};
|
||||
HAL_ProvideNewDataEventHandle(waitEvent.GetHandle());
|
||||
|
||||
Reference in New Issue
Block a user