mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-07-04 03:11:43 +00:00
[hal] Update to new joystick protobuf definitions (#7991)
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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(),
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user