MYNT-EYE-S-SDK/src/device/device.h

155 lines
3.9 KiB
C
Raw Normal View History

2018-04-04 05:50:27 +03:00
#ifndef MYNTEYE_DEVICE_H_ // NOLINT
#define MYNTEYE_DEVICE_H_
#pragma once
2018-04-12 06:48:09 +03:00
#include <limits>
2018-04-06 04:12:09 +03:00
#include <map>
2018-04-04 05:50:27 +03:00
#include <memory>
2018-04-08 20:20:00 +03:00
#include <mutex>
2018-04-04 05:50:27 +03:00
#include <string>
2018-04-08 07:23:33 +03:00
#include <vector>
2018-04-04 05:50:27 +03:00
#include "mynteye/mynteye.h"
2018-04-04 10:52:10 +03:00
#include "mynteye/types.h"
2018-04-04 05:50:27 +03:00
2018-04-06 04:12:09 +03:00
#include "internal/callbacks.h"
2018-04-04 05:50:27 +03:00
MYNTEYE_BEGIN_NAMESPACE
namespace uvc {
struct device;
} // namespace uvc
2018-04-04 10:52:10 +03:00
struct DeviceInfo;
2018-04-09 17:24:34 +03:00
class Channels;
2018-04-12 06:48:09 +03:00
class Motions;
2018-04-08 07:23:33 +03:00
class Streams;
2018-04-04 05:50:27 +03:00
class Device {
public:
2018-04-06 04:12:09 +03:00
using stream_callback_t = device::StreamCallback;
using motion_callback_t = device::MotionCallback;
using stream_callbacks_t = std::map<Stream, stream_callback_t>;
2018-04-04 10:52:10 +03:00
Device(const Model &model, std::shared_ptr<uvc::device> device);
2018-04-04 05:50:27 +03:00
virtual ~Device();
static std::shared_ptr<Device> Create(
const std::string &name, std::shared_ptr<uvc::device> device);
2018-04-06 04:12:09 +03:00
Model GetModel() const {
return model_;
}
2018-04-04 10:52:10 +03:00
bool Supports(const Stream &stream) const;
bool Supports(const Capabilities &capability) const;
bool Supports(const Option &option) const;
2018-04-08 07:23:33 +03:00
const std::vector<StreamRequest> &GetStreamRequests(
const Capabilities &capability) const;
void ConfigStreamRequest(
const Capabilities &capability, const StreamRequest &request);
2018-04-04 10:52:10 +03:00
std::shared_ptr<DeviceInfo> GetInfo() const;
std::string GetInfo(const Info &info) const;
2018-04-06 04:12:09 +03:00
ImgIntrinsics GetImgIntrinsics() const;
ImgExtrinsics GetImgExtrinsics() const;
2018-04-13 16:55:32 +03:00
void SetImgIntrinsics(const ImgIntrinsics &in);
void SetImgExtrinsics(const ImgExtrinsics &ex);
2018-04-06 04:12:09 +03:00
ImuIntrinsics GetImuIntrinsics() const;
ImuExtrinsics GetImuExtrinsics() const;
2018-04-13 16:55:32 +03:00
void SetImuIntrinsics(const ImuIntrinsics &in);
void SetImuExtrinsics(const ImuExtrinsics &ex);
2018-04-06 04:12:09 +03:00
2018-04-10 11:00:38 +03:00
void LogOptionInfos() const;
2018-04-09 19:26:22 +03:00
OptionInfo GetOptionInfo(const Option &option) const;
2018-04-10 11:00:38 +03:00
2018-04-09 19:26:22 +03:00
std::int32_t GetOptionValue(const Option &option) const;
void SetOptionValue(const Option &option, std::int32_t value);
2018-04-10 11:00:38 +03:00
bool RunOptionAction(const Option &option) const;
2018-04-09 19:26:22 +03:00
2018-04-06 04:12:09 +03:00
void SetStreamCallback(const Stream &stream, stream_callback_t callback);
void SetMotionCallback(motion_callback_t callback);
2018-04-04 10:52:10 +03:00
2018-04-08 17:35:49 +03:00
bool HasStreamCallback(const Stream &stream) const;
bool HasMotionCallback() const;
2018-04-07 04:36:41 +03:00
virtual void Start(const Source &source);
virtual void Stop(const Source &source);
2018-04-08 17:35:49 +03:00
void WaitForStreams();
std::vector<device::StreamData> GetStreamDatas(const Stream &stream);
device::StreamData GetLatestStreamData(const Stream &stream);
2018-04-12 06:48:09 +03:00
void EnableMotionDatas(
std::size_t max_size = std::numeric_limits<std::size_t>::max());
std::vector<device::MotionData> GetMotionDatas();
2018-04-04 10:52:10 +03:00
protected:
std::shared_ptr<uvc::device> device() const {
return device_;
}
2018-04-06 04:12:09 +03:00
std::shared_ptr<DeviceInfo> device_info() const {
return device_info_;
}
2018-04-08 07:23:33 +03:00
const StreamRequest &GetStreamRequest(const Capabilities &capability);
2018-04-06 04:28:17 +03:00
2018-04-07 04:36:41 +03:00
virtual void StartVideoStreaming();
virtual void StopVideoStreaming();
virtual void StartMotionTracking();
virtual void StopMotionTracking();
2018-04-08 17:35:49 +03:00
virtual std::vector<Stream> GetKeyStreams() const = 0;
2018-04-08 07:23:33 +03:00
bool video_streaming_;
bool motion_tracking_;
2018-04-04 05:50:27 +03:00
private:
2018-04-04 10:52:10 +03:00
Model model_;
std::shared_ptr<uvc::device> device_;
std::shared_ptr<DeviceInfo> device_info_;
2018-04-06 04:12:09 +03:00
ImgIntrinsics img_intrinsics_;
ImgExtrinsics img_extrinsics_;
ImuIntrinsics imu_intrinsics_;
ImuExtrinsics imu_extrinsics_;
stream_callbacks_t stream_callbacks_;
motion_callback_t motion_callback_;
2018-04-08 07:23:33 +03:00
std::shared_ptr<Streams> streams_;
std::map<Capabilities, StreamRequest> stream_config_requests_;
2018-04-08 20:20:00 +03:00
std::mutex mtx_streams_;
2018-04-09 17:24:34 +03:00
std::shared_ptr<Channels> channels_;
2018-04-12 06:48:09 +03:00
std::shared_ptr<Motions> motions_;
2018-04-13 16:55:32 +03:00
void ReadAllInfos();
2018-04-06 04:12:09 +03:00
2018-04-19 12:23:02 +03:00
void WriteDeviceInfo(const DeviceInfo &device_info);
2018-04-13 16:55:32 +03:00
void WriteImgParams(
const ImgIntrinsics &intrinsics, const ImgExtrinsics &extrinsics);
void WriteImuParams(
const ImuIntrinsics &intrinsics, const ImuExtrinsics &extrinsics);
2018-04-06 04:12:09 +03:00
// friend DeviceWriter;
2018-04-04 05:50:27 +03:00
};
MYNTEYE_END_NAMESPACE
#endif // MYNTEYE_DEVICE_H_ NOLINT