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