Split Sendable into NT and non-NT portions (#3432)

The non-NT portion has been moved to wpiutil.
The NT portion has been moved to ntcore (as NTSendable).

SendableBuilder similarly split and moved.

SendableRegistry moved to wpiutil.

In C++, SendableHelper also moved to wpiutil.

This enables use of Sendable from wpimath and also enables
moving several classes from wpilib to wpimath.
This commit is contained in:
Peter Johnson
2021-06-13 16:38:05 -07:00
committed by GitHub
parent ef4ea84cb5
commit b417d961ec
196 changed files with 1147 additions and 891 deletions

View File

@@ -4,36 +4,41 @@
#include "frc/shuffleboard/ComplexWidget.h"
#include "frc/smartdashboard/Sendable.h"
#include <wpi/sendable/Sendable.h>
#include "frc/smartdashboard/SendableBuilderImpl.h"
using namespace frc;
ComplexWidget::ComplexWidget(ShuffleboardContainer& parent,
std::string_view title, Sendable& sendable)
std::string_view title, wpi::Sendable& sendable)
: ShuffleboardValue(title),
ShuffleboardWidget(parent, title),
m_sendable(sendable) {}
ComplexWidget::~ComplexWidget() = default;
void ComplexWidget::EnableIfActuator() {
if (m_builder.IsActuator()) {
m_builder.StartLiveWindowMode();
if (m_builder && static_cast<SendableBuilderImpl&>(*m_builder).IsActuator()) {
static_cast<SendableBuilderImpl&>(*m_builder).StartLiveWindowMode();
}
}
void ComplexWidget::DisableIfActuator() {
if (m_builder.IsActuator()) {
m_builder.StopLiveWindowMode();
if (m_builder && static_cast<SendableBuilderImpl&>(*m_builder).IsActuator()) {
static_cast<SendableBuilderImpl&>(*m_builder).StopLiveWindowMode();
}
}
void ComplexWidget::BuildInto(std::shared_ptr<nt::NetworkTable> parentTable,
std::shared_ptr<nt::NetworkTable> metaTable) {
BuildMetadata(metaTable);
if (!m_builderInit) {
m_builder.SetTable(parentTable->GetSubTable(GetTitle()));
m_sendable.InitSendable(m_builder);
m_builder.StartListeners();
m_builderInit = true;
if (!m_builder) {
m_builder = std::make_unique<SendableBuilderImpl>();
static_cast<SendableBuilderImpl&>(*m_builder)
.SetTable(parentTable->GetSubTable(GetTitle()));
m_sendable.InitSendable(static_cast<SendableBuilderImpl&>(*m_builder));
static_cast<SendableBuilderImpl&>(*m_builder).StartListeners();
}
m_builder.UpdateTable();
m_builder->Update();
}

View File

@@ -9,9 +9,8 @@
#include <string>
#include <wpi/DenseMap.h>
#include "frc/smartdashboard/SendableBuilder.h"
#include "frc/smartdashboard/SendableRegistry.h"
#include <wpi/sendable/SendableBuilder.h>
#include <wpi/sendable/SendableRegistry.h>
namespace frc {
namespace detail {
@@ -21,12 +20,12 @@ std::shared_ptr<SendableCameraWrapper>& GetSendableCameraWrapper(
return wrappers[static_cast<int>(source)];
}
void AddToSendableRegistry(frc::Sendable* sendable, std::string name) {
SendableRegistry::GetInstance().Add(sendable, name);
void AddToSendableRegistry(wpi::Sendable* sendable, std::string name) {
wpi::SendableRegistry::GetInstance().Add(sendable, name);
}
} // namespace detail
void SendableCameraWrapper::InitSendable(SendableBuilder& builder) {
void SendableCameraWrapper::InitSendable(wpi::SendableBuilder& builder) {
builder.AddStringProperty(
".ShuffleboardURI", [this] { return m_uri; }, nullptr);
}

View File

@@ -4,12 +4,13 @@
#include "frc/shuffleboard/ShuffleboardContainer.h"
#include <wpi/sendable/SendableRegistry.h>
#include "frc/Errors.h"
#include "frc/shuffleboard/ComplexWidget.h"
#include "frc/shuffleboard/ShuffleboardComponent.h"
#include "frc/shuffleboard/ShuffleboardLayout.h"
#include "frc/shuffleboard/SimpleWidget.h"
#include "frc/smartdashboard/SendableRegistry.h"
using namespace frc;
@@ -57,7 +58,7 @@ ShuffleboardLayout& ShuffleboardContainer::GetLayout(std::string_view title) {
}
ComplexWidget& ShuffleboardContainer::Add(std::string_view title,
Sendable& sendable) {
wpi::Sendable& sendable) {
CheckTitle(title);
auto widget = std::make_unique<ComplexWidget>(*this, title, sendable);
auto ptr = widget.get();
@@ -65,8 +66,8 @@ ComplexWidget& ShuffleboardContainer::Add(std::string_view title,
return *ptr;
}
ComplexWidget& ShuffleboardContainer::Add(Sendable& sendable) {
auto name = SendableRegistry::GetInstance().GetName(&sendable);
ComplexWidget& ShuffleboardContainer::Add(wpi::Sendable& sendable) {
auto name = wpi::SendableRegistry::GetInstance().GetName(&sendable);
if (name.empty()) {
FRC_ReportError(err::Error, "{}", "Sendable must have a name");
}