64 std::vector<std::function<void()>> updates;
82 for (
auto const &update : updates) {
87#if (__has_include("frc/RobotController.h") && __has_include("frc/Timer.h")) || defined(_CTRE_DOCS_)
101#if (__has_include("frc/DriverStation.h") && __has_include("frc/simulation/DriverStationSim.h")) || defined(_CTRE_DOCS_)
128 std::string name, std::string schemaName,
130 std::function<std::span<uint8_t const>()> getter,
146 std::string name, std::string schemaName,
148 std::function<std::span<uint8_t const>()> getter,
152#if __has_include("wpi/struct/Struct.h") || defined(_CTRE_DOCS_)
162 template <
typename T,
typename... I>
163 requires wpi::StructSerializable<T, I...>
165 std::string name, I &&... info,
166 std::function<T
const &()> getter,
170 updates.emplace_back([name=std::move(name), ... info = std::forward<I>(info), setter=std::move(setter)] {
172 if (val.status.IsOK() && val.value) {
175 std::move(*val.value),
177 std::move(val.units),
180 setter(std::move(v));
184 updates.emplace_back([name=std::move(name), ... info = std::forward<I>(info), getter=std::move(getter)] {
200 template <
typename T,
typename... I>
201 requires wpi::StructSerializable<T, I...>
203 std::string name, I &&... info,
204 std::function<std::span<T const>()> getter,
208 updates.emplace_back([name=std::move(name), ... info = std::forward<I>(info), setter=std::move(setter)] {
210 if (val.status.IsOK() && val.value) {
213 std::move(*val.value),
215 std::move(val.units),
218 setter(std::move(v));
222 updates.emplace_back([name=std::move(name), ... info = std::forward<I>(info), getter=std::move(getter)] {
230#if __has_include("wpi/protobuf/Protobuf.h") || defined(_CTRE_DOCS_)
239 template <wpi::ProtobufSerializable T>
242 std::function<T
const &()> getter,
246 updates.emplace_back([name=std::move(name), setter=std::move(setter)] {
248 if (val.status.IsOK() && val.value) {
251 std::move(*val.value),
253 std::move(val.units),
256 setter(std::move(v));
260 updates.emplace_back([name=std::move(name), getter=std::move(getter)] {
278 std::function<std::span<uint8_t const>()> getter,
292 std::function<
bool()> getter,
306 std::function<int64_t()> getter,
320 std::function<
float()> getter,
334 std::function<
double()> getter,
348 std::function<std::string_view()> getter,
360 template <
typename U>
361 requires units::traits::is_unit_t_v<U>
364 std::function<U()> getter,
368 updates.emplace_back([name=std::move(name), setter=std::move(setter)] {
370 if (val.status.IsOK()) {
371 setter(std::move(val));
375 updates.emplace_back([name=std::move(name), getter=std::move(getter)] {
392 std::function<std::span<bool const>()> getter,
406 std::function<std::span<uint8_t const>()> getter,
420 std::function<std::span<int64_t const>()> getter,
434 std::function<std::span<float const>()> getter,
448 std::function<std::span<double const>()> getter,
462 std::function<std::span<std::string_view const>()> getter,
476 std::function<std::span<std::string const>()> getter,
Class for handling automatic logging and replay of custom signal inputs.
Definition HootAutoReplay.hpp:63
HootAutoReplay & WithFloatArray(std::string name, std::function< std::span< float const >()> getter, std::function< void(SignalMeasurement< std::vector< float > >)> setter)
Registers the array of floats as a Hoot-Replayed input.
HootAutoReplay & WithStructArray(std::string name, I &&... info, std::function< std::span< T const >()> getter, std::function< void(SignalMeasurement< std::vector< T > >)> setter)
Registers the array of WPILib Structs as a Hoot-Replayed input.
Definition HootAutoReplay.hpp:202
HootAutoReplay & WithBooleanArray(std::string name, std::function< std::span< uint8_t const >()> getter, std::function< void(SignalMeasurement< std::vector< uint8_t > >)> setter)
Registers the array of booleans as a Hoot-Replayed input.
HootAutoReplay & WithRaw(std::string name, std::function< std::span< uint8_t const >()> getter, std::function< void(SignalMeasurement< std::vector< uint8_t > >)> setter)
Registers the raw data bytes as a Hoot-Replayed input.
HootAutoReplay & WithSchemaValue(std::string name, std::string schemaName, HootSchemaType type, std::string_view schema, std::function< std::span< uint8_t const >()> getter, std::function< void(SignalMeasurement< std::vector< uint8_t > >)> setter)
Registers the schema-serialized bytes as a Hoot-Replayed input.
HootAutoReplay & WithTimestampReplay()
Registers Timer::GetTimestamp() logging and playback with this instance.
HootAutoReplay & WithDoubleArray(std::string name, std::function< std::span< double const >()> getter, std::function< void(SignalMeasurement< std::vector< double > >)> setter)
Registers the array of doubles as a Hoot-Replayed input.
HootAutoReplay & WithStringArray(std::string name, std::function< std::span< std::string const >()> getter, std::function< void(SignalMeasurement< std::vector< std::string > >)> setter)
Registers the array of strings as a Hoot-Replayed input.
HootAutoReplay & WithIntegerArray(std::string name, std::function< std::span< int64_t const >()> getter, std::function< void(SignalMeasurement< std::vector< int64_t > >)> setter)
Registers the array of integers as a Hoot-Replayed input.
HootAutoReplay & WithStringArray(std::string name, std::function< std::span< std::string_view const >()> getter, std::function< void(SignalMeasurement< std::vector< std::string > >)> setter)
Registers the array of strings as a Hoot-Replayed input.
HootAutoReplay & WithValue(std::string name, std::function< U()> getter, std::function< void(SignalMeasurement< U >)> setter)
Registers the unit value as a Hoot-Replayed input.
Definition HootAutoReplay.hpp:362
HootAutoReplay & WithBooleanArray(std::string name, std::function< std::span< bool const >()> getter, std::function< void(SignalMeasurement< std::vector< uint8_t > >)> setter)
Registers the array of booleans as a Hoot-Replayed input.
HootAutoReplay & WithInteger(std::string name, std::function< int64_t()> getter, std::function< void(SignalMeasurement< int64_t >)> setter)
Registers the integer as a Hoot-Replayed input.
HootAutoReplay & WithJoystickReplay()
Registers joystick logging and playback with this instance.
HootAutoReplay & WithBoolean(std::string name, std::function< bool()> getter, std::function< void(SignalMeasurement< bool >)> setter)
Registers the boolean as a Hoot-Replayed input.
HootAutoReplay & WithStruct(std::string name, I &&... info, std::function< T const &()> getter, std::function< void(SignalMeasurement< T >)> setter)
Registers the WPILib Struct as a Hoot-Replayed input.
Definition HootAutoReplay.hpp:164
HootAutoReplay & WithDouble(std::string name, std::function< double()> getter, std::function< void(SignalMeasurement< double >)> setter)
Registers the double as a Hoot-Replayed input.
HootAutoReplay & WithString(std::string name, std::function< std::string_view()> getter, std::function< void(SignalMeasurement< std::string >)> setter)
Registers the string as a Hoot-Replayed input.
void Update() const
Updates the state of the robot program by doing one of the following:
Definition HootAutoReplay.hpp:80
HootAutoReplay & WithProtobuf(std::string name, std::function< T const &()> getter, std::function< void(SignalMeasurement< T >)> setter)
Registers the protobuf as a Hoot-Replayed input.
Definition HootAutoReplay.hpp:240
HootAutoReplay & WithSchemaValue(std::string name, std::string schemaName, HootSchemaType type, std::span< uint8_t const > schema, std::function< std::span< uint8_t const >()> getter, std::function< void(SignalMeasurement< std::vector< uint8_t > >)> setter)
Registers the schema-serialized bytes as a Hoot-Replayed input.
HootAutoReplay & WithFloat(std::string name, std::function< float()> getter, std::function< void(SignalMeasurement< float >)> setter)
Registers the float as a Hoot-Replayed input.
static SignalMeasurement< std::optional< std::vector< T > > > GetStructArray(std::string_view name, I const &... info)
Gets a WPILib Struct array user signal.
Definition HootReplay.hpp:242
static SignalMeasurement< std::optional< T > > GetStruct(std::string_view name, I const &... info)
Gets a WPILib Struct user signal.
Definition HootReplay.hpp:209
static SignalMeasurement< U > GetValue(std::string_view name)
Gets a unit value user signal.
Definition HootReplay.hpp:360
static SignalMeasurement< std::optional< T > > GetProtobuf(std::string_view name)
Gets a Protobuf user signal.
Definition HootReplay.hpp:286
static ctre::phoenix::StatusCode WriteValue(std::string_view name, U value, units::time::second_t latencySeconds=0_s)
Writes the unit value to the log file.
Definition SignalLogger.hpp:398
static ctre::phoenix::StatusCode WriteStructArray(std::string_view name, std::span< T const > values, I const &... info, units::time::second_t latencySeconds=0_s)
Writes the array of WPILib Structs to the log file.
Definition SignalLogger.hpp:233
static ctre::phoenix::StatusCode WriteStruct(std::string_view name, T const &value, I const &... info, units::time::second_t latencySeconds=0_s)
Writes the WPILib Struct to the log file.
Definition SignalLogger.hpp:194
static ctre::phoenix::StatusCode WriteProtobuf(std::string_view name, T const &value, units::time::second_t latencySeconds=0_s)
Writes the protobuf to the log file.
Definition SignalLogger.hpp:278
CTREXPORT bool IsReplay()
Get whether the program is running in replay mode.
HootSchemaType
Supported schema types for a hoot user signal.
Definition HootSchemaType.hpp:15
Definition motor_constants.h:14
Information from a single measurement of a status signal.
Definition SignalMeasurement.hpp:20