[hal] Update to new joystick protobuf definitions (#7991)

This commit is contained in:
Thad House
2025-05-31 10:52:27 -07:00
committed by GitHub
parent a6f601453a
commit 1991af34a5
9 changed files with 479 additions and 377 deletions

View File

@@ -82,7 +82,7 @@ std::optional<mrc::ControlData> wpi::Protobuf<mrc::ControlData>::Unpack(
ControlData.ControlWord = ToControlWord(Msg.ControlWord);
ControlData.MatchTime = Msg.MatchTime;
ControlData.CurrentOpMode = Msg.CurrentOpMode;
ControlData.CurrentOpMode = mrc::OpModeHash::FromValue(Msg.CurrentOpMode);
ControlData.SetJoystickCount(Joysticks.size());
for (size_t i = 0; i < ControlData.GetJoystickCount(); i++) {
@@ -101,7 +101,7 @@ bool wpi::Protobuf<mrc::ControlData>::Pack(OutputStream& Stream,
.ControlWord = FromControlWord(Value.ControlWord),
.MatchTime = Value.MatchTime,
.Joysticks = Joysticks.Callback(),
.CurrentOpMode = Value.CurrentOpMode,
.CurrentOpMode = Value.CurrentOpMode.ToValue(),
};
return Stream.Encode(Msg);
@@ -112,8 +112,9 @@ std::optional<mrc::Joystick> wpi::Protobuf<mrc::Joystick>::Unpack(
wpi::UnpackCallback<int16_t, MRC_MAX_NUM_AXES> AxesCb;
mrc_proto_ProtobufJoystickData Msg{
.ButtonCount = 0,
.AvailableButtons = 0,
.Buttons = 0,
.AvailableAxes = 0,
.Axes = AxesCb.Callback(),
.POVCount = 0,
.POVs = 0,
@@ -126,13 +127,15 @@ std::optional<mrc::Joystick> wpi::Protobuf<mrc::Joystick>::Unpack(
auto Axes = AxesCb.Items();
mrc::Joystick Joystick;
Joystick.Axes.SetCount(Axes.size());
Joystick.Axes.SetAvailable(Msg.AvailableAxes);
auto JoystickAxesCount =
(std::min)(Joystick.Axes.GetMaxAvailableCount(), Axes.size());
for (size_t i = 0; i < Joystick.Axes.GetCount(); i++) {
for (size_t i = 0; i < JoystickAxesCount; i++) {
Joystick.Axes.Axes()[i] = Axes[i];
}
Joystick.Buttons.SetCount(Msg.ButtonCount);
Joystick.Buttons.SetAvailable(Msg.AvailableButtons);
Joystick.Buttons.Buttons = Msg.Buttons;
Joystick.Povs.SetCount(Msg.POVCount);
@@ -157,8 +160,9 @@ bool wpi::Protobuf<mrc::Joystick>::Pack(OutputStream& Stream,
}
mrc_proto_ProtobufJoystickData Msg{
.ButtonCount = static_cast<uint32_t>(Value.Buttons.GetCount()),
.AvailableButtons = Value.Buttons.GetAvailable(),
.Buttons = Value.Buttons.Buttons,
.AvailableAxes = Value.Axes.GetAvailable(),
.Axes = AxesCb.Callback(),
.POVCount = static_cast<uint32_t>(Value.Povs.GetCount()),
.POVs = PovsStore,

View File

@@ -30,7 +30,7 @@ std::optional<mrc::OpMode> wpi::Protobuf<mrc::OpMode>::Unpack(
mrc::OpMode OutputData;
OutputData.MoveName(std::move(Name[0]));
OutputData.Hash = Msg.Hash;
OutputData.Hash = mrc::OpModeHash::FromValue(Msg.Hash);
return OutputData;
}
@@ -41,7 +41,7 @@ bool wpi::Protobuf<mrc::OpMode>::Pack(OutputStream& Stream,
wpi::PackCallback EventName{&EventNameStr};
mrc_proto_ProtobufOpMode Msg{
.Hash = Value.Hash,
.Hash = Value.Hash.ToValue(),
.Name = EventName.Callback(),
};

View File

@@ -15,6 +15,7 @@
#include <fmt/format.h>
#include <networktables/BooleanTopic.h>
#include <networktables/IntegerTopic.h>
#include <networktables/NetworkTableInstance.h>
#include <networktables/ProtobufTopic.h>
#include <networktables/StringArrayTopic.h>
@@ -84,6 +85,7 @@ struct SystemServerDriverStation {
nt::ProtobufPublisher<std::vector<mrc::OpMode>> teleopOpModes;
nt::ProtobufPublisher<std::vector<mrc::OpMode>> autoOpModes;
nt::ProtobufPublisher<std::vector<mrc::OpMode>> testOpModes;
nt::IntegerPublisher traceOpModePublisher;
NT_Listener controlDataListener;
@@ -155,20 +157,28 @@ struct SystemServerDriverStation {
.Publish();
std::vector<mrc::OpMode> staticTeleopOpModes;
staticTeleopOpModes.emplace_back(mrc::OpMode{"TeleOp", 2});
staticTeleopOpModes.emplace_back(
mrc::OpMode{"TeleOp", mrc::OpModeHash::MakeTele(2)});
teleopOpModes.Set(staticTeleopOpModes);
std::vector<mrc::OpMode> staticAutoOpModes;
staticAutoOpModes.emplace_back(mrc::OpMode{"Auto", 1});
staticAutoOpModes.emplace_back(
mrc::OpMode{"Auto", mrc::OpModeHash::MakeAuto(1)});
autoOpModes.Set(staticAutoOpModes);
std::vector<mrc::OpMode> staticTestOpModes;
staticTestOpModes.emplace_back(mrc::OpMode{"Test", 3});
staticTestOpModes.emplace_back(
mrc::OpMode{"Test", mrc::OpModeHash::MakeTest(3)});
testOpModes.Set(staticTestOpModes);
ntInst.AddListener(
controlDataSubscriber, NT_EVENT_VALUE_REMOTE | NT_EVENT_UNPUBLISH,
[this](const nt::Event& event) { HandleListener(event); });
traceOpModePublisher =
ntInst.GetIntegerTopic(ROBOT_CURRENT_OPMODE_TRACE_PATH)
.Publish(options);
traceOpModePublisher.GetTopic().SetCached(false);
}
void HandleListener(const nt::Event& event);
@@ -256,7 +266,7 @@ void JoystickDataCache::Update(const mrc::ControlData& data) {
povs[count].povs[i] = newPovs[i];
}
buttons[count].count = newStick.Buttons.GetCount();
buttons[count].count = newStick.Buttons.GetMaxAvailableCount();
buttons[count].buttons = newStick.Buttons.Buttons;
}
}
@@ -567,13 +577,25 @@ void HAL_ObserveUserProgramStarting(void) {
systemServerDs->hasUserCodeReadyPublisher.Set(true);
}
void HAL_ObserveUserProgramDisabled(void) {}
void HAL_ObserveUserProgramDisabled(void) {
systemServerDs->traceOpModePublisher.Set(
mrc::OpModeHash::MakeTele(1, false).ToValue());
}
void HAL_ObserveUserProgramAutonomous(void) {}
void HAL_ObserveUserProgramAutonomous(void) {
auto tVal = mrc::OpModeHash::MakeAuto(2, true).ToValue();
systemServerDs->traceOpModePublisher.Set(tVal);
}
void HAL_ObserveUserProgramTeleop(void) {}
void HAL_ObserveUserProgramTeleop(void) {
auto tVal = mrc::OpModeHash::MakeTele(1, true).ToValue();
systemServerDs->traceOpModePublisher.Set(tVal);
}
void HAL_ObserveUserProgramTest(void) {}
void HAL_ObserveUserProgramTest(void) {
systemServerDs->traceOpModePublisher.Set(
mrc::OpModeHash::MakeTest(3, true).ToValue());
}
HAL_Bool HAL_RefreshDSData(void) {
mrc::ControlData newestData;