[wpimath] Add protobuf/struct for trivial types (#5935)

This implements de/serialization for the types that aren't templated (SwerveDriveKinematics) in C++ or where there is no trivial way to go round-trip (Splines) for the messages.
This commit is contained in:
PJ Reiniger
2023-11-21 13:14:06 -05:00
committed by GitHub
parent 35744a036e
commit bb05e20247
158 changed files with 4266 additions and 4 deletions

View File

@@ -0,0 +1,33 @@
// 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.
#include "frc/trajectory/proto/TrajectoryProto.h"
#include "trajectory.pb.h"
google::protobuf::Message* wpi::Protobuf<frc::Trajectory>::New(
google::protobuf::Arena* arena) {
return google::protobuf::Arena::CreateMessage<wpi::proto::ProtobufTrajectory>(
arena);
}
frc::Trajectory wpi::Protobuf<frc::Trajectory>::Unpack(
const google::protobuf::Message& msg) {
auto m = static_cast<const wpi::proto::ProtobufTrajectory*>(&msg);
std::vector<frc::Trajectory::State> states;
states.reserve(m->states().size());
for (const auto& protoState : m->states()) {
states.push_back(wpi::UnpackProtobuf<frc::Trajectory::State>(protoState));
}
return frc::Trajectory{states};
}
void wpi::Protobuf<frc::Trajectory>::Pack(google::protobuf::Message* msg,
const frc::Trajectory& value) {
auto m = static_cast<wpi::proto::ProtobufTrajectory*>(msg);
m->mutable_states()->Reserve(value.States().size());
for (const auto& state : value.States()) {
wpi::PackProtobuf(m->add_states(), state);
}
}

View File

@@ -0,0 +1,35 @@
// 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.
#include "frc/trajectory/proto/TrajectoryStateProto.h"
#include "trajectory.pb.h"
google::protobuf::Message* wpi::Protobuf<frc::Trajectory::State>::New(
google::protobuf::Arena* arena) {
return google::protobuf::Arena::CreateMessage<
wpi::proto::ProtobufTrajectoryState>(arena);
}
frc::Trajectory::State wpi::Protobuf<frc::Trajectory::State>::Unpack(
const google::protobuf::Message& msg) {
auto m = static_cast<const wpi::proto::ProtobufTrajectoryState*>(&msg);
return frc::Trajectory::State{
units::second_t{m->time()},
units::meters_per_second_t{m->velocity()},
units::meters_per_second_squared_t{m->acceleration()},
wpi::UnpackProtobuf<frc::Pose2d>(m->pose()),
units::curvature_t{m->curvature()},
};
}
void wpi::Protobuf<frc::Trajectory::State>::Pack(
google::protobuf::Message* msg, const frc::Trajectory::State& value) {
auto m = static_cast<wpi::proto::ProtobufTrajectoryState*>(msg);
m->set_time(value.t.value());
m->set_velocity(value.velocity.value());
m->set_acceleration(value.acceleration.value());
wpi::PackProtobuf(m->mutable_pose(), value.pose);
m->set_curvature(value.curvature.value());
}