Files
allwpilib/wpilibc/src/main/native/include/frc/livewindow/LiveWindow.h
2020-01-13 12:19:08 -08:00

86 lines
2.0 KiB
C++

/*----------------------------------------------------------------------------*/
/* Copyright (c) 2012-2020 FIRST. All Rights Reserved. */
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in the root directory of */
/* the project. */
/*----------------------------------------------------------------------------*/
#pragma once
#include <functional>
#include <memory>
namespace frc {
class Sendable;
/**
* The LiveWindow class is the public interface for putting sensors and
* actuators on the LiveWindow.
*/
class LiveWindow {
public:
LiveWindow(const LiveWindow&) = delete;
LiveWindow& operator=(const LiveWindow&) = delete;
std::function<void()> enabled;
std::function<void()> disabled;
/**
* Get an instance of the LiveWindow main class.
*
* This is a singleton to guarantee that there is only a single instance
* regardless of how many times GetInstance is called.
*/
static LiveWindow* GetInstance();
/**
* Enable telemetry for a single component.
*
* @param sendable component
*/
void EnableTelemetry(Sendable* component);
/**
* Disable telemetry for a single component.
*
* @param sendable component
*/
void DisableTelemetry(Sendable* component);
/**
* Disable ALL telemetry.
*/
void DisableAllTelemetry();
bool IsEnabled() const;
/**
* Change the enabled status of LiveWindow.
*
* If it changes to enabled, start livewindow running otherwise stop it
*/
void SetEnabled(bool enabled);
/**
* Tell all the sensors to update (send) their values.
*
* Actuators are handled through callbacks on their value changing from the
* SmartDashboard widgets.
*/
void UpdateValues();
private:
LiveWindow();
struct Impl;
std::unique_ptr<Impl> m_impl;
/**
* Updates the entries, without using a mutex or lock.
*/
void UpdateValuesUnsafe();
};
} // namespace frc