On this page
article
peary/device/Device.hpp
peary/device/Device.hpp
Caribou Device Base Class. More…
Namespaces
| Name |
|---|
| peary |
| peary::device Forward declaration of CaribouDevice, Board, and Carboard classes. |
Classes
| Name | |
|---|---|
| class | peary::device::Device Abstract Caribou Device class definition. |
Detailed Description
Caribou 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 <string>
#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(const config::Configuration&);
virtual ~Device();
bool isManaged() { return managedDevice; };
std::string getVersion();
virtual std::string getFirmwareVersion() = 0;
virtual std::string getName() = 0;
virtual std::string getType() = 0;
virtual void powerOn() = 0;
virtual void powerOff() = 0;
virtual void daqStart() = 0;
virtual void daqStop() = 0;
virtual utils::pearyRawData getRawData() = 0;
virtual utils::pearyRawDataVector getRawData(const unsigned int noFrames) = 0;
virtual utils::pearydata getData() = 0;
virtual utils::pearydataVector getData(const unsigned int noFrames) = 0;
virtual void configure() = 0;
virtual void setRegister(std::string name, uintptr_t value) = 0;
virtual uintptr_t getRegister(std::string name) = 0;
virtual std::vector<std::pair<std::string, uintptr_t>> getRegisters() = 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 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;
}; // class Device
} // namespace peary::device
Updated on 2025-11-14 at 11:31:23 +0100