On this page
article
peary/device/Device.hpp
peary/device/Device.hpp
Peary Device Base Class. More…
Namespaces
| Name |
|---|
| peary |
| peary::device |
Classes
| Name | |
|---|---|
| class | peary::device::Device Abstract Peary Device class definition. |
Detailed Description
Peary Device Base Class.
Copyright: Copyright (c) 2016-2025 CERN and the Peary Caribou authors. This software is distributed under the terms of the LGPL-3.0-only License, copied verbatim in the file “LICENSE.md”. SPDX-License-Identifier: LGPL-3.0-only
Source code
#pragma once
#include <any>
#include <cstdint>
#include <filesystem>
#include <optional>
#include <string>
#include <string_view>
#include <vector>
#include "peary/config/configuration.hpp"
#include "peary/device/exceptions.hpp"
#include "peary/utils/constants.hpp"
#include "peary/utils/datatypes.hpp"
#include "peary/utils/dispatcher.hpp"
namespace peary::device {
class Device {
public:
explicit Device(std::string_view name, const config::Configuration&);
virtual ~Device();
bool isManaged() { return managedDevice; };
std::string getVersion();
virtual std::string getFirmwareVersion() = 0;
std::string getName() { return name_; };
virtual std::string getType() = 0;
virtual void powerOn() = 0;
virtual void powerOff() = 0;
virtual void daqStart() = 0;
virtual void daqStop() = 0;
virtual std::optional<utils::pearyRawData> getRawData() = 0;
virtual std::optional<utils::pearyRawDataVector> getRawData(const unsigned int noFrames) = 0;
virtual std::optional<utils::pearydata> getData() = 0;
virtual std::optional<utils::pearydataVector> getData(const unsigned int noFrames) = 0;
virtual void configure() = 0;
virtual void setRegister(const std::string& name, uintptr_t value) = 0;
virtual uintptr_t getRegister(const std::string& name) = 0;
virtual std::vector<std::pair<std::string, uintptr_t>> getRegisters() = 0;
virtual bool hasRegister(const std::string& name) const = 0;
virtual void reset() = 0;
virtual void setVoltage(const std::string& name, double voltage) = 0;
virtual void setCurrentLimit(const std::string& name, double current_limit) = 0;
virtual void switchOn(const std::string& name) = 0;
virtual void switchOff(const std::string& name) = 0;
virtual void setCurrent(const std::string& name, double current, utils::Polarity polarity) = 0;
virtual double getVoltage(const std::string& name) = 0;
virtual double getCurrent(const std::string& name) = 0;
virtual double getPower(const std::string& name) = 0;
virtual void configureClock(const std::string& name, const std::any& config) = 0;
virtual void disableClock(const std::string& name) = 0;
virtual bool isClockLocked(const std::string& name) = 0;
virtual void setClockFrequency(const std::string& name, uint64_t frequency) = 0;
virtual void setMemory(const std::string& name, size_t offset, uintptr_t value) = 0;
virtual void setMemory(const std::string& name, uintptr_t value) = 0;
virtual uintptr_t getMemory(const std::string& name, size_t offset) = 0;
virtual uintptr_t getMemory(const std::string& name) = 0;
virtual std::vector<std::pair<std::string, uintptr_t>> getMemories() = 0;
virtual bool hasMemory(const std::string& name) const = 0;
virtual std::vector<std::string> listMemories() = 0;
virtual std::vector<std::string> listRegisters() = 0;
virtual std::vector<std::pair<std::string, std::string>> listResources() = 0;
std::vector<std::pair<std::string, std::size_t>> listCommands();
std::string command(const std::string& name, const std::vector<std::string>& args = std::vector<std::string>());
std::string command(const std::string& name, const std::string& arg);
protected:
utils::Dispatcher _dispatcher;
private:
static bool managedDevice;
// Make the device manager a friend class to allow toggling the Device::managedDevice flag
friend class DeviceManager;
/* Device name */
std::string name_;
}; // class Device
} // namespace peary::device
Updated on 2026-01-30 at 22:01:05 +0100