XLinkConnection.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 // Std
4 #include <atomic>
5 #include <chrono>
6 #include <cstdint>
7 #include <list>
8 #include <mutex>
9 #include <string>
10 #include <thread>
11 #include <tuple>
12 #include <unordered_map>
13 #include <vector>
14 
15 // project
16 #include "depthai/utility/Path.hpp"
18 
19 // Libraries
20 #include <XLink/XLinkPublicDefines.h>
21 
22 namespace dai {
23 
27 struct DeviceInfo {
28  DeviceInfo() = default;
29  DeviceInfo(std::string name, std::string mxid, XLinkDeviceState_t state, XLinkProtocol_t protocol, XLinkPlatform_t platform, XLinkError_t status);
34  explicit DeviceInfo(std::string mxidOrName);
35  explicit DeviceInfo(const deviceDesc_t& desc);
36  deviceDesc_t getXLinkDeviceDesc() const;
37  std::string getMxId() const;
38  std::string toString() const;
39 
40  std::string name = "";
41  std::string mxid = "";
42  XLinkDeviceState_t state = X_LINK_ANY_STATE;
43  XLinkProtocol_t protocol = X_LINK_ANY_PROTOCOL;
44  XLinkPlatform_t platform = X_LINK_ANY_PLATFORM;
45  XLinkError_t status = X_LINK_SUCCESS;
46 };
47 
52  public:
53  // static API
54 
63  static std::vector<DeviceInfo> getAllConnectedDevices(XLinkDeviceState_t state = X_LINK_ANY_STATE,
64  bool skipInvalidDevices = true,
65  XLinkPlatform_t platform = X_LINK_MYRIAD_X);
66 
72  static std::tuple<bool, DeviceInfo> getFirstDevice(XLinkDeviceState_t state = X_LINK_ANY_STATE, bool skipInvalidDevices = true);
73 
81  static std::tuple<bool, DeviceInfo> getDeviceByMxId(std::string mxId, XLinkDeviceState_t state = X_LINK_ANY_STATE, bool skipInvalidDevice = true);
82 
89  static DeviceInfo bootBootloader(const DeviceInfo& devInfo);
90 
97 
98  XLinkConnection(const DeviceInfo& deviceDesc, std::vector<std::uint8_t> mvcmdBinary, XLinkDeviceState_t expectedState = X_LINK_BOOTED);
99  XLinkConnection(const DeviceInfo& deviceDesc, dai::Path pathToMvcmd, XLinkDeviceState_t expectedState = X_LINK_BOOTED);
100  explicit XLinkConnection(const DeviceInfo& deviceDesc, XLinkDeviceState_t expectedState = X_LINK_BOOTED);
101 
103 
104  void setRebootOnDestruction(bool reboot);
105  bool getRebootOnDestruction() const;
106 
107  int getLinkId() const;
108 
114  void close();
115 
123  bool isClosed() const;
124 
131 
132  private:
133  friend struct XLinkReadError;
134  friend struct XLinkWriteError;
135  // static
136  static bool bootAvailableDevice(const deviceDesc_t& deviceToBoot, const dai::Path& pathToMvcmd);
137  static bool bootAvailableDevice(const deviceDesc_t& deviceToBoot, std::vector<std::uint8_t>& mvcmd);
138  static std::string convertErrorCodeToString(XLinkError_t errorCode);
139 
140  void initDevice(const DeviceInfo& deviceToInit, XLinkDeviceState_t expectedState = X_LINK_BOOTED);
141 
142  bool bootDevice = true;
143  bool bootWithPath = true;
145  std::vector<std::uint8_t> mvcmd;
146 
148 
149  int deviceLinkId = -1;
150 
152 
153  // closed
154  mutable std::mutex closedMtx;
155  bool closed{false};
156 
157  constexpr static std::chrono::milliseconds WAIT_FOR_BOOTUP_TIMEOUT{15000};
158  constexpr static std::chrono::milliseconds WAIT_FOR_CONNECT_TIMEOUT{5000};
159  constexpr static std::chrono::milliseconds POLLING_DELAY_TIME{10};
160 };
161 
162 } // namespace dai
dai::XLinkConnection::initDevice
void initDevice(const DeviceInfo &deviceToInit, XLinkDeviceState_t expectedState=X_LINK_BOOTED)
Definition: XLinkConnection.cpp:381
dai::XLinkConnection::getAllConnectedDevices
static std::vector< DeviceInfo > getAllConnectedDevices(XLinkDeviceState_t state=X_LINK_ANY_STATE, bool skipInvalidDevices=true, XLinkPlatform_t platform=X_LINK_MYRIAD_X)
Definition: XLinkConnection.cpp:113
dai::XLinkConnection::POLLING_DELAY_TIME
constexpr static std::chrono::milliseconds POLLING_DELAY_TIME
Definition: XLinkConnection.hpp:159
dai::XLinkConnection::pathToMvcmd
dai::Path pathToMvcmd
Definition: XLinkConnection.hpp:144
dai::DeviceInfo
Definition: XLinkConnection.hpp:27
dai::XLinkConnection::convertErrorCodeToString
static std::string convertErrorCodeToString(XLinkError_t errorCode)
Definition: XLinkConnection.cpp:504
dai::XLinkConnection::getFirstDevice
static std::tuple< bool, DeviceInfo > getFirstDevice(XLinkDeviceState_t state=X_LINK_ANY_STATE, bool skipInvalidDevices=true)
Definition: XLinkConnection.cpp:160
dai::XLinkConnection::bootBootloader
static DeviceInfo bootBootloader(const DeviceInfo &devInfo)
Definition: XLinkConnection.cpp:221
dai::DeviceInfo::toString
std::string toString() const
Definition: XLinkConnection.cpp:79
dai::XLinkConnection::deviceInfo
DeviceInfo deviceInfo
Definition: XLinkConnection.hpp:151
dai::XLinkConnection::getRebootOnDestruction
bool getRebootOnDestruction() const
Definition: XLinkConnection.cpp:365
dai::XLinkConnection::WAIT_FOR_BOOTUP_TIMEOUT
constexpr static std::chrono::milliseconds WAIT_FOR_BOOTUP_TIMEOUT
Definition: XLinkConnection.hpp:157
dai::XLinkReadError
Definition: XLinkStream.hpp:94
dai::DeviceInfo::state
XLinkDeviceState_t state
Definition: XLinkConnection.hpp:42
dai::XLinkConnection::closed
bool closed
Definition: XLinkConnection.hpp:155
dai::XLinkConnection::closedMtx
std::mutex closedMtx
Definition: XLinkConnection.hpp:154
dai::XLinkConnection::~XLinkConnection
~XLinkConnection()
Definition: XLinkConnection.cpp:357
dai::XLinkConnection::getLinkId
int getLinkId() const
Definition: XLinkConnection.cpp:500
dai::ProfilingData
Definition: ProfilingData.hpp:5
dai::XLinkWriteError
Definition: XLinkStream.hpp:98
ProfilingData.hpp
dai::DeviceInfo::DeviceInfo
DeviceInfo()=default
dai::DeviceInfo::name
std::string name
Definition: XLinkConnection.hpp:40
dai::XLinkConnection::getGlobalProfilingData
static ProfilingData getGlobalProfilingData()
Definition: XLinkConnection.cpp:508
dai::XLinkConnection::bootAvailableDevice
static bool bootAvailableDevice(const deviceDesc_t &deviceToBoot, const dai::Path &pathToMvcmd)
Definition: XLinkConnection.cpp:369
dai::DeviceInfo::status
XLinkError_t status
Definition: XLinkConnection.hpp:45
dai::XLinkConnection::XLinkConnection
XLinkConnection(const DeviceInfo &deviceDesc, std::vector< std::uint8_t > mvcmdBinary, XLinkDeviceState_t expectedState=X_LINK_BOOTED)
Definition: XLinkConnection.cpp:286
Path.hpp
dai::XLinkConnection::getProfilingData
ProfilingData getProfilingData()
Definition: XLinkConnection.cpp:519
dai::DeviceInfo::getMxId
std::string getMxId() const
Definition: XLinkConnection.cpp:75
dai::XLinkConnection::deviceLinkId
int deviceLinkId
Definition: XLinkConnection.hpp:149
dai::XLinkConnection::setRebootOnDestruction
void setRebootOnDestruction(bool reboot)
Definition: XLinkConnection.cpp:361
dai::DeviceInfo::protocol
XLinkProtocol_t protocol
Definition: XLinkConnection.hpp:43
dai::DeviceInfo::getXLinkDeviceDesc
deviceDesc_t getXLinkDeviceDesc() const
Definition: XLinkConnection.cpp:56
dai::XLinkConnection::getDeviceByMxId
static std::tuple< bool, DeviceInfo > getDeviceByMxId(std::string mxId, XLinkDeviceState_t state=X_LINK_ANY_STATE, bool skipInvalidDevice=true)
Definition: XLinkConnection.cpp:192
dai::XLinkConnection::rebootOnDestruction
bool rebootOnDestruction
Definition: XLinkConnection.hpp:147
dai::XLinkConnection::close
void close()
Definition: XLinkConnection.cpp:315
dai::DeviceInfo::mxid
std::string mxid
Definition: XLinkConnection.hpp:41
dai::Path
Represents paths on a filesystem; accepts utf-8, Windows utf-16 wchar_t, or std::filesystem::path.
Definition: Path.hpp:27
dai::XLinkConnection
Definition: XLinkConnection.hpp:51
dai::XLinkConnection::WAIT_FOR_CONNECT_TIMEOUT
constexpr static std::chrono::milliseconds WAIT_FOR_CONNECT_TIMEOUT
Definition: XLinkConnection.hpp:158
dai::DeviceInfo::platform
XLinkPlatform_t platform
Definition: XLinkConnection.hpp:44
dai
Definition: CameraExposureOffset.hpp:6
dai::XLinkConnection::bootWithPath
bool bootWithPath
Definition: XLinkConnection.hpp:143
dai::XLinkConnection::bootDevice
bool bootDevice
Definition: XLinkConnection.hpp:142
dai::XLinkConnection::isClosed
bool isClosed() const
Definition: XLinkConnection.cpp:310
dai::XLinkConnection::mvcmd
std::vector< std::uint8_t > mvcmd
Definition: XLinkConnection.hpp:145


depthai
Author(s): Martin Peterlin
autogenerated on Sat Mar 22 2025 02:58:19