Add device model & config
This commit is contained in:
		
							parent
							
								
									c7390993dc
								
							
						
					
					
						commit
						d1740c625e
					
				@ -91,11 +91,13 @@ endif()
 | 
			
		||||
 | 
			
		||||
set(MYNTEYE_SRCS
 | 
			
		||||
  ${UVC_SRC}
 | 
			
		||||
  src/internal/config.cc
 | 
			
		||||
  src/internal/strings.cc
 | 
			
		||||
  src/internal/types.cc
 | 
			
		||||
  src/public/types.cc
 | 
			
		||||
  src/device/context.cc
 | 
			
		||||
  src/device/device.cc
 | 
			
		||||
  src/device/device_s.cc
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
set(MYNTEYE_LINKLIBS
 | 
			
		||||
 | 
			
		||||
@ -16,6 +16,17 @@ MYNTEYE_BEGIN_NAMESPACE
 | 
			
		||||
 * @brief Public enumeration types.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @ingroup enumerations
 | 
			
		||||
 * @brief Device model.
 | 
			
		||||
 */
 | 
			
		||||
enum class Model : std::uint8_t {
 | 
			
		||||
  /** Standard */
 | 
			
		||||
  STANDARD,
 | 
			
		||||
  /** Last guard */
 | 
			
		||||
  LAST
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @ingroup enumerations
 | 
			
		||||
 * @brief Streams define different type of data.
 | 
			
		||||
@ -154,6 +165,7 @@ enum class Option : std::uint8_t {
 | 
			
		||||
      return os << static_cast<utype>(value);                            \
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
MYNTEYE_ENUM_HELPERS(Model)
 | 
			
		||||
MYNTEYE_ENUM_HELPERS(Stream)
 | 
			
		||||
MYNTEYE_ENUM_HELPERS(Capabilities)
 | 
			
		||||
MYNTEYE_ENUM_HELPERS(Info)
 | 
			
		||||
 | 
			
		||||
@ -2,12 +2,16 @@
 | 
			
		||||
 | 
			
		||||
#include <glog/logging.h>
 | 
			
		||||
 | 
			
		||||
#include "device/device_s.h"
 | 
			
		||||
#include "internal/config.h"
 | 
			
		||||
#include "internal/strings.h"
 | 
			
		||||
#include "internal/types.h"
 | 
			
		||||
#include "uvc/uvc.h"
 | 
			
		||||
 | 
			
		||||
MYNTEYE_BEGIN_NAMESPACE
 | 
			
		||||
 | 
			
		||||
Device::Device() {
 | 
			
		||||
Device::Device(const Model &model, std::shared_ptr<uvc::device> device)
 | 
			
		||||
    : model_(model), device_(device) {
 | 
			
		||||
  VLOG(2) << __func__;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -18,10 +22,61 @@ Device::~Device() {
 | 
			
		||||
std::shared_ptr<Device> Device::Create(
 | 
			
		||||
    const std::string &name, std::shared_ptr<uvc::device> device) {
 | 
			
		||||
  if (name == "MYNTEYE") {
 | 
			
		||||
    return std::make_shared<StandardDevice>(device);
 | 
			
		||||
  } else if (strings::starts_with(name, "MYNT-EYE-")) {
 | 
			
		||||
    // TODO(JohnZhao): Create different device by name, such as MYNT-EYE-S1000
 | 
			
		||||
  }
 | 
			
		||||
  return nullptr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool Device::Supports(const Stream &stream) const {
 | 
			
		||||
  auto &&supports = stream_supports_map.at(Model::STANDARD);
 | 
			
		||||
  return supports.find(stream) != supports.end();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool Device::Supports(const Capabilities &capability) const {
 | 
			
		||||
  auto &&supports = capabilities_supports_map.at(Model::STANDARD);
 | 
			
		||||
  return supports.find(capability) != supports.end();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool Device::Supports(const Option &option) const {
 | 
			
		||||
  auto &&supports = option_supports_map.at(Model::STANDARD);
 | 
			
		||||
  return supports.find(option) != supports.end();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::shared_ptr<DeviceInfo> Device::GetInfo() const {
 | 
			
		||||
  return device_info_;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::string Device::GetInfo(const Info &info) const {
 | 
			
		||||
  CHECK_NOTNULL(device_info_);
 | 
			
		||||
  switch (info) {
 | 
			
		||||
    case Info::DEVICE_NAME: {
 | 
			
		||||
      return device_info_->name;
 | 
			
		||||
    } break;
 | 
			
		||||
    case Info::SERIAL_NUMBER: {
 | 
			
		||||
      return device_info_->serial_number;
 | 
			
		||||
    } break;
 | 
			
		||||
    case Info::FIRMWARE_VERSION: {
 | 
			
		||||
      return device_info_->firmware_version.to_string();
 | 
			
		||||
    } break;
 | 
			
		||||
    case Info::HARDWARE_VERSION: {
 | 
			
		||||
      return device_info_->hardware_version.to_string();
 | 
			
		||||
    } break;
 | 
			
		||||
    case Info::SPEC_VERSION: {
 | 
			
		||||
      return device_info_->spec_version.to_string();
 | 
			
		||||
    } break;
 | 
			
		||||
    case Info::LENS_TYPE: {
 | 
			
		||||
      return device_info_->lens_type.to_string();
 | 
			
		||||
    } break;
 | 
			
		||||
    case Info::IMU_TYPE: {
 | 
			
		||||
      return device_info_->imu_type.to_string();
 | 
			
		||||
    } break;
 | 
			
		||||
    case Info::NOMINAL_BASELINE: {
 | 
			
		||||
      return std::to_string(device_info_->nominal_baseline);
 | 
			
		||||
    } break;
 | 
			
		||||
    default: { LOG(FATAL) << "Unknown device info"; }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MYNTEYE_END_NAMESPACE
 | 
			
		||||
 | 
			
		||||
@ -6,6 +6,7 @@
 | 
			
		||||
#include <string>
 | 
			
		||||
 | 
			
		||||
#include "mynteye/mynteye.h"
 | 
			
		||||
#include "mynteye/types.h"
 | 
			
		||||
 | 
			
		||||
MYNTEYE_BEGIN_NAMESPACE
 | 
			
		||||
 | 
			
		||||
@ -15,15 +16,36 @@ struct device;
 | 
			
		||||
 | 
			
		||||
}  // namespace uvc
 | 
			
		||||
 | 
			
		||||
struct DeviceInfo;
 | 
			
		||||
 | 
			
		||||
class Device {
 | 
			
		||||
 public:
 | 
			
		||||
  Device();
 | 
			
		||||
  Device(const Model &model, std::shared_ptr<uvc::device> device);
 | 
			
		||||
  virtual ~Device();
 | 
			
		||||
 | 
			
		||||
  static std::shared_ptr<Device> Create(
 | 
			
		||||
      const std::string &name, std::shared_ptr<uvc::device> device);
 | 
			
		||||
 | 
			
		||||
  bool Supports(const Stream &stream) const;
 | 
			
		||||
  bool Supports(const Capabilities &capability) const;
 | 
			
		||||
  bool Supports(const Option &option) const;
 | 
			
		||||
 | 
			
		||||
  std::shared_ptr<DeviceInfo> GetInfo() const;
 | 
			
		||||
  std::string GetInfo(const Info &info) const;
 | 
			
		||||
 | 
			
		||||
  Model model() const {
 | 
			
		||||
    return model_;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 protected:
 | 
			
		||||
  std::shared_ptr<uvc::device> device() const {
 | 
			
		||||
    return device_;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  Model model_;
 | 
			
		||||
  std::shared_ptr<uvc::device> device_;
 | 
			
		||||
  std::shared_ptr<DeviceInfo> device_info_;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
MYNTEYE_END_NAMESPACE
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										16
									
								
								src/device/device_s.cc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/device/device_s.cc
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,16 @@
 | 
			
		||||
#include "device/device_s.h"
 | 
			
		||||
 | 
			
		||||
#include <glog/logging.h>
 | 
			
		||||
 | 
			
		||||
MYNTEYE_BEGIN_NAMESPACE
 | 
			
		||||
 | 
			
		||||
StandardDevice::StandardDevice(std::shared_ptr<uvc::device> device)
 | 
			
		||||
    : Device(Model::STANDARD, device) {
 | 
			
		||||
  VLOG(2) << __func__;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
StandardDevice::~StandardDevice() {
 | 
			
		||||
  VLOG(2) << __func__;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MYNTEYE_END_NAMESPACE
 | 
			
		||||
							
								
								
									
										19
									
								
								src/device/device_s.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/device/device_s.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,19 @@
 | 
			
		||||
#ifndef MYNTEYE_DEVICE_S_H_  // NOLINT
 | 
			
		||||
#define MYNTEYE_DEVICE_S_H_
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <memory>
 | 
			
		||||
 | 
			
		||||
#include "device/device.h"
 | 
			
		||||
 | 
			
		||||
MYNTEYE_BEGIN_NAMESPACE
 | 
			
		||||
 | 
			
		||||
class StandardDevice : public Device {
 | 
			
		||||
 public:
 | 
			
		||||
  explicit StandardDevice(std::shared_ptr<uvc::device> device);
 | 
			
		||||
  virtual ~StandardDevice();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
MYNTEYE_END_NAMESPACE
 | 
			
		||||
 | 
			
		||||
#endif  // MYNTEYE_DEVICE_S_H_ NOLINT
 | 
			
		||||
							
								
								
									
										18
									
								
								src/internal/config.cc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/internal/config.cc
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,18 @@
 | 
			
		||||
#include "internal/config.h"
 | 
			
		||||
 | 
			
		||||
MYNTEYE_BEGIN_NAMESPACE
 | 
			
		||||
 | 
			
		||||
const std::map<Model, StreamSupports> stream_supports_map = {
 | 
			
		||||
    {Model::STANDARD, {Stream::LEFT, Stream::RIGHT}}};
 | 
			
		||||
 | 
			
		||||
const std::map<Model, CapabilitiesSupports> capabilities_supports_map = {
 | 
			
		||||
    {Model::STANDARD, {Capabilities::STEREO, Capabilities::IMU}}};
 | 
			
		||||
 | 
			
		||||
const std::map<Model, OptionSupports> option_supports_map = {
 | 
			
		||||
    {Model::STANDARD,
 | 
			
		||||
     {Option::GAIN, Option::BRIGHTNESS, Option::CONTRAST, Option::FRAME_RATE,
 | 
			
		||||
      Option::IMU_FREQUENCY, Option::EXPOSURE_MODE, Option::MAX_GAIN,
 | 
			
		||||
      Option::MAX_EXPOSURE_TIME, Option::DESIRED_BRIGHTNESS, Option::IR_CONTROL,
 | 
			
		||||
      Option::HDR_MODE, Option::ZERO_DRIFT_CALIBRATION, Option::ERASE_CHIP}}};
 | 
			
		||||
 | 
			
		||||
MYNTEYE_END_NAMESPACE
 | 
			
		||||
							
								
								
									
										23
									
								
								src/internal/config.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								src/internal/config.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,23 @@
 | 
			
		||||
#ifndef MYNTEYE_INTERNAL_CONFIG_H_  // NOLINT
 | 
			
		||||
#define MYNTEYE_INTERNAL_CONFIG_H_
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <map>
 | 
			
		||||
#include <set>
 | 
			
		||||
 | 
			
		||||
#include "mynteye/mynteye.h"
 | 
			
		||||
#include "mynteye/types.h"
 | 
			
		||||
 | 
			
		||||
MYNTEYE_BEGIN_NAMESPACE
 | 
			
		||||
 | 
			
		||||
using StreamSupports = std::set<Stream>;
 | 
			
		||||
using CapabilitiesSupports = std::set<Capabilities>;
 | 
			
		||||
using OptionSupports = std::set<Option>;
 | 
			
		||||
 | 
			
		||||
extern const std::map<Model, StreamSupports> stream_supports_map;
 | 
			
		||||
extern const std::map<Model, CapabilitiesSupports> capabilities_supports_map;
 | 
			
		||||
extern const std::map<Model, OptionSupports> option_supports_map;
 | 
			
		||||
 | 
			
		||||
MYNTEYE_END_NAMESPACE
 | 
			
		||||
 | 
			
		||||
#endif  // MYNTEYE_INTERNAL_CONFIG_H_ NOLINT
 | 
			
		||||
@ -4,6 +4,19 @@
 | 
			
		||||
 | 
			
		||||
MYNTEYE_BEGIN_NAMESPACE
 | 
			
		||||
 | 
			
		||||
const char *to_string(const Model &value) {
 | 
			
		||||
#define CASE(X)  \
 | 
			
		||||
  case Model::X: \
 | 
			
		||||
    return "Model::" #X;
 | 
			
		||||
  switch (value) {
 | 
			
		||||
    CASE(STANDARD)
 | 
			
		||||
    default:
 | 
			
		||||
      CHECK(is_valid(value));
 | 
			
		||||
      return "Model::UNKNOWN";
 | 
			
		||||
  }
 | 
			
		||||
#undef CASE
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char *to_string(const Stream &value) {
 | 
			
		||||
#define CASE(X)   \
 | 
			
		||||
  case Stream::X: \
 | 
			
		||||
 | 
			
		||||
@ -4,6 +4,10 @@
 | 
			
		||||
 | 
			
		||||
MYNTEYE_USE_NAMESPACE
 | 
			
		||||
 | 
			
		||||
TEST(Model, VerifyToString) {
 | 
			
		||||
  EXPECT_STREQ("Model::STANDARD", to_string(Model::STANDARD));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST(Stream, VerifyToString) {
 | 
			
		||||
  EXPECT_STREQ("Stream::LEFT", to_string(Stream::LEFT));
 | 
			
		||||
  EXPECT_STREQ("Stream::RIGHT", to_string(Stream::RIGHT));
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user