Files
allwpilib/wpilibc/src/main/native/include/wpi/simulation/SimHooks.hpp
Peter Johnson dacded37e5 [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>
2025-12-12 20:25:57 -08:00

92 lines
1.7 KiB
C++

// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <stdint.h>
#include "wpi/hal/DriverStationTypes.h"
#include "wpi/hal/HALBase.h"
#include "wpi/units/time.hpp"
namespace wpi::sim {
/**
* Override the HAL runtime type (simulated/real).
*
* @param type runtime type
*/
void SetRuntimeType(HAL_RuntimeType type);
/**
* Waits until the user program has started.
*/
void WaitForProgramStart();
/**
* Sets flag that indicates if the user program has started.
*
* @param started true if started
*/
void SetProgramStarted(bool started);
/**
* Returns true if the user program has started.
*
* @return True if the user program has started.
*/
bool GetProgramStarted();
/**
* Sets the user program state (control word).
*
* @param controlWord control word
*/
void SetProgramState(wpi::hal::ControlWord controlWord);
/**
* Gets the user program state (control word).
*
* @return Control word
*/
wpi::hal::ControlWord GetProgramState();
/**
* Restart the simulator time.
*/
void RestartTiming();
/**
* Pause the simulator time.
*/
void PauseTiming();
/**
* Resume the simulator time.
*/
void ResumeTiming();
/**
* Check if the simulator time is paused.
*
* @return true if paused
*/
bool IsTimingPaused();
/**
* Advance the simulator time and wait for all notifiers to run.
*
* @param delta the amount to advance (in seconds)
*/
void StepTiming(wpi::units::second_t delta);
/**
* Advance the simulator time and return immediately.
*
* @param delta the amount to advance (in seconds)
*/
void StepTimingAsync(wpi::units::second_t delta);
} // namespace wpi::sim