Program Listing for File Device.hpp

Return to documentation for file (include/depthai/device/Device.hpp)

#pragma once

// std
#include <chrono>
#include <condition_variable>
#include <deque>
#include <memory>
#include <mutex>
#include <string>
#include <unordered_map>

// project
#include "DataQueue.hpp"
#include "depthai/device/DeviceBase.hpp"

namespace dai {
class Device : public DeviceBase {
   public:
    using DeviceBase::DeviceBase;  // inherit the ctors

    explicit Device(const Pipeline& pipeline);

    template <typename T, std::enable_if_t<std::is_same<T, bool>::value, bool> = true>
    [[deprecated("Use constructor taking 'UsbSpeed' instead")]] Device(const Pipeline& pipeline, T usb2Mode);

    Device(const Pipeline& pipeline, UsbSpeed maxUsbSpeed);

    Device(const Pipeline& pipeline, const dai::Path& pathToCmd);

    Device(const Pipeline& pipeline, const DeviceInfo& devInfo);

    template <typename T, std::enable_if_t<std::is_same<T, bool>::value, bool> = true>
    [[deprecated("Use constructor taking 'UsbSpeed' instead")]] Device(const Pipeline& pipeline, const DeviceInfo& devInfo, T usb2Mode);

    Device(const Pipeline& pipeline, const DeviceInfo& devInfo, UsbSpeed maxUsbSpeed);

    Device(const Pipeline& pipeline, const DeviceInfo& devInfo, const dai::Path& pathToCmd);

    Device();

    ~Device() override;

    static constexpr std::size_t EVENT_QUEUE_MAXIMUM_SIZE{2048};

    std::shared_ptr<DataOutputQueue> getOutputQueue(const std::string& name);

    std::shared_ptr<DataOutputQueue> getOutputQueue(const std::string& name, unsigned int maxSize, bool blocking = true);

    std::vector<std::string> getOutputQueueNames() const;

    std::shared_ptr<DataInputQueue> getInputQueue(const std::string& name);

    std::shared_ptr<DataInputQueue> getInputQueue(const std::string& name, unsigned int maxSize, bool blocking = true);

    std::vector<std::string> getInputQueueNames() const;

    // void setCallback(const std::string& name, std::function<std::shared_ptr<RawBuffer>(std::shared_ptr<RawBuffer>)> cb);

    std::vector<std::string> getQueueEvents(const std::vector<std::string>& queueNames,
                                            std::size_t maxNumEvents = std::numeric_limits<std::size_t>::max(),
                                            std::chrono::microseconds timeout = std::chrono::microseconds(-1));
    std::vector<std::string> getQueueEvents(const std::initializer_list<std::string>& queueNames,
                                            std::size_t maxNumEvents = std::numeric_limits<std::size_t>::max(),
                                            std::chrono::microseconds timeout = std::chrono::microseconds(-1));

    std::vector<std::string> getQueueEvents(std::string queueName,
                                            std::size_t maxNumEvents = std::numeric_limits<std::size_t>::max(),
                                            std::chrono::microseconds timeout = std::chrono::microseconds(-1));

    std::vector<std::string> getQueueEvents(std::size_t maxNumEvents = std::numeric_limits<std::size_t>::max(),
                                            std::chrono::microseconds timeout = std::chrono::microseconds(-1));

    std::string getQueueEvent(const std::vector<std::string>& queueNames, std::chrono::microseconds timeout = std::chrono::microseconds(-1));
    std::string getQueueEvent(const std::initializer_list<std::string>& queueNames, std::chrono::microseconds timeout = std::chrono::microseconds(-1));

    std::string getQueueEvent(std::string queueName, std::chrono::microseconds timeout = std::chrono::microseconds(-1));

    std::string getQueueEvent(std::chrono::microseconds timeout = std::chrono::microseconds(-1));

   private:
    std::unordered_map<std::string, std::shared_ptr<DataOutputQueue>> outputQueueMap;
    std::unordered_map<std::string, std::shared_ptr<DataInputQueue>> inputQueueMap;
    std::unordered_map<std::string, DataOutputQueue::CallbackId> callbackIdMap;

    // Event queue
    std::mutex eventMtx;
    std::condition_variable eventCv;
    std::deque<std::string> eventQueue;

    bool startPipelineImpl(const Pipeline& pipeline) override;
    void closeImpl() override;
};

}  // namespace dai