/*----------------------------------------------------------------------------*/ /* Copyright (c) 2017-2018 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 #include #include #include "MockData/AnalogOutData.h" #include "MockData/NotifyListenerVector.h" namespace hal { class AnalogOutData { public: int32_t RegisterVoltageCallback(HAL_NotifyCallback callback, void* param, HAL_Bool initialNotify); void CancelVoltageCallback(int32_t uid); void InvokeVoltageCallback(HAL_Value value); double GetVoltage(); void SetVoltage(double voltage); int32_t RegisterInitializedCallback(HAL_NotifyCallback callback, void* param, HAL_Bool initialNotify); void CancelInitializedCallback(int32_t uid); void InvokeInitializedCallback(HAL_Value value); HAL_Bool GetInitialized(); void SetInitialized(HAL_Bool initialized); virtual void ResetData(); private: wpi::mutex m_registerMutex; std::atomic m_voltage{0.0}; std::shared_ptr m_voltageCallbacks = nullptr; std::atomic m_initialized{0}; std::shared_ptr m_initializedCallbacks = nullptr; }; extern AnalogOutData* SimAnalogOutData; } // namespace hal