fix(type): fix conflict
This commit is contained in:
		
						commit
						559a812c65
					
				@ -14,7 +14,7 @@
 | 
			
		||||
 | 
			
		||||
cmake_minimum_required(VERSION 3.0)
 | 
			
		||||
 | 
			
		||||
project(mynteye VERSION 2.3.1 LANGUAGES C CXX)
 | 
			
		||||
project(mynteye VERSION 2.3.2 LANGUAGES C CXX)
 | 
			
		||||
 | 
			
		||||
include(cmake/Common.cmake)
 | 
			
		||||
 | 
			
		||||
@ -220,6 +220,7 @@ if(WITH_API)
 | 
			
		||||
    src/mynteye/api/processor/rectify_processor_ocv.cc
 | 
			
		||||
    src/mynteye/api/config.cc
 | 
			
		||||
    src/mynteye/api/correspondence.cc
 | 
			
		||||
    src/mynteye/api/version_checker.cc
 | 
			
		||||
  )
 | 
			
		||||
  if(WITH_CAM_MODELS)
 | 
			
		||||
    list(APPEND MYNTEYE_SRCS
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										10
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								README.md
									
									
									
									
									
								
							@ -1,6 +1,6 @@
 | 
			
		||||
# MYNT® EYE S SDK
 | 
			
		||||
 | 
			
		||||
[](https://github.com/slightech/MYNT-EYE-S-SDK)
 | 
			
		||||
[](https://github.com/slightech/MYNT-EYE-S-SDK)
 | 
			
		||||
 | 
			
		||||
## Overview
 | 
			
		||||
 | 
			
		||||
@ -17,11 +17,11 @@ Please follow the guide doc to install the SDK on different platforms.
 | 
			
		||||
## Documentations
 | 
			
		||||
 | 
			
		||||
* [API Doc](https://github.com/slightech/MYNT-EYE-S-SDK/releases): API reference, some guides and data spec.
 | 
			
		||||
  * en: [](https://github.com/slightech/MYNT-EYE-S-SDK/files/2893965/mynt-eye-s-sdk-apidoc-2.3.1-en.pdf) [](https://github.com/slightech/MYNT-EYE-S-SDK/files/2893979/mynt-eye-s-sdk-apidoc-2.3.1-en.zip) [](https://slightech.github.io/MYNT-EYE-S-SDK/)
 | 
			
		||||
  * zh-Hans: [](https://github.com/slightech/MYNT-EYE-S-SDK/files/2893985/mynt-eye-s-sdk-apidoc-2.3.1-zh-Hans.pdf) [](https://github.com/slightech/MYNT-EYE-S-SDK/files/2893986/mynt-eye-s-sdk-apidoc-2.3.1-zh-Hans.zip) [](http://doc.myntai.com/resource/api/mynt-eye-s-sdk-apidoc-2.3.1-zh-Hans/mynt-eye-s-sdk-apidoc-2.3.1-zh-Hans/index.html)
 | 
			
		||||
  * en: [](https://github.com/slightech/MYNT-EYE-S-SDK/files/2913110/mynt-eye-s-sdk-apidoc-2.3.2-en.pdf) [](https://github.com/slightech/MYNT-EYE-S-SDK/files/2913111/mynt-eye-s-sdk-apidoc-2.3.2-en.zip) [](https://slightech.github.io/MYNT-EYE-S-SDK/)
 | 
			
		||||
  * zh-Hans: [](https://github.com/slightech/MYNT-EYE-S-SDK/files/2913112/mynt-eye-s-sdk-apidoc-2.3.2-zh-Hans.pdf) [](https://github.com/slightech/MYNT-EYE-S-SDK/files/2913113/mynt-eye-s-sdk-apidoc-2.3.2-zh-Hans.zip) [](http://doc.myntai.com/resource/api/mynt-eye-s-sdk-apidoc-2.3.2-zh-Hans/mynt-eye-s-sdk-apidoc-2.3.2-zh-Hans/index.html)
 | 
			
		||||
* [Guide Doc](https://github.com/slightech/MYNT-EYE-S-SDK-Guide/releases): How to install and start using the SDK.
 | 
			
		||||
  * en: [](https://github.com/slightech/MYNT-EYE-S-SDK-Guide/files/2893975/mynt-eye-s-sdk-guide-2.3.1-en.pdf) [](https://github.com/slightech/MYNT-EYE-S-SDK-Guide/files/2893996/mynt-eye-s-sdk-guide-2.3.1-en.zip) [](https://slightech.github.io/MYNT-EYE-S-SDK-Guide/)
 | 
			
		||||
  * zh-Hans: [](https://github.com/slightech/MYNT-EYE-S-SDK-Guide/files/2893997/mynt-eye-s-sdk-guide-2.3.1-zh-Hans.pdf) [](https://github.com/slightech/MYNT-EYE-S-SDK-Guide/files/2893997/mynt-eye-s-sdk-guide-2.3.1-zh-Hans.pdf) [](http://doc.myntai.com/resource/sdk/mynt-eye-s-sdk-guide-2.3.1-zh-Hans/mynt-eye-s-sdk-guide-2.3.1-zh-Hans/index.html)
 | 
			
		||||
  * en: [](https://github.com/slightech/MYNT-EYE-S-SDK-Guide/files/2913052/mynt-eye-s-sdk-guide-2.3.2-en.pdf) [](https://github.com/slightech/MYNT-EYE-S-SDK-Guide/files/2913053/mynt-eye-s-sdk-guide-2.3.2-en.zip) [](https://slightech.github.io/MYNT-EYE-S-SDK-Guide/)
 | 
			
		||||
  * zh-Hans: [](https://github.com/slightech/MYNT-EYE-S-SDK-Guide/files/2913054/mynt-eye-s-sdk-guide-2.3.2-zh-Hans.pdf) [](https://github.com/slightech/MYNT-EYE-S-SDK-Guide/files/2913056/mynt-eye-s-sdk-guide-2.3.2-zh-Hans.zip) [](http://doc.myntai.com/resource/sdk/mynt-eye-s-sdk-guide-2.3.2-zh-Hans/mynt-eye-s-sdk-guide-2.3.2-zh-Hans/index.html)
 | 
			
		||||
 | 
			
		||||
> Supported languages: `en`, `zh-Hans`.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -38,7 +38,7 @@ PROJECT_NAME           = "MYNT EYE S SDK"
 | 
			
		||||
# could be handy for archiving the generated documentation or if some version
 | 
			
		||||
# control system is used.
 | 
			
		||||
 | 
			
		||||
PROJECT_NUMBER         = 2.3.1
 | 
			
		||||
PROJECT_NUMBER         = 2.3.2
 | 
			
		||||
 | 
			
		||||
# Using the PROJECT_BRIEF tag one can provide an optional one line description
 | 
			
		||||
# for a project that appears at the top of each page and should give viewer a
 | 
			
		||||
 | 
			
		||||
@ -38,7 +38,7 @@ PROJECT_NAME           = "MYNT EYE S SDK"
 | 
			
		||||
# could be handy for archiving the generated documentation or if some version
 | 
			
		||||
# control system is used.
 | 
			
		||||
 | 
			
		||||
PROJECT_NUMBER         = 2.3.1
 | 
			
		||||
PROJECT_NUMBER         = 2.3.2
 | 
			
		||||
 | 
			
		||||
# Using the PROJECT_BRIEF tag one can provide an optional one line description
 | 
			
		||||
# for a project that appears at the top of each page and should give viewer a
 | 
			
		||||
 | 
			
		||||
@ -126,6 +126,8 @@ enum class Info : std::uint8_t {
 | 
			
		||||
  AUXILIARY_CHIP_VERSION,
 | 
			
		||||
  /** Isp version */
 | 
			
		||||
  ISP_VERSION,
 | 
			
		||||
  /** SDK version*/
 | 
			
		||||
  SDK_VERSION,
 | 
			
		||||
  /** Last guard */
 | 
			
		||||
  LAST
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -26,6 +26,7 @@
 | 
			
		||||
#include "mynteye/api/dl.h"
 | 
			
		||||
#include "mynteye/api/plugin.h"
 | 
			
		||||
#include "mynteye/api/synthetic.h"
 | 
			
		||||
#include "mynteye/api/version_checker.h"
 | 
			
		||||
#include "mynteye/device/device.h"
 | 
			
		||||
#include "mynteye/device/utils.h"
 | 
			
		||||
 | 
			
		||||
@ -222,7 +223,10 @@ API::~API() {
 | 
			
		||||
std::shared_ptr<API> API::Create(int argc, char *argv[]) {
 | 
			
		||||
  auto &&device = device::select();
 | 
			
		||||
  if (!device) return nullptr;
 | 
			
		||||
  return Create(argc, argv, device);
 | 
			
		||||
  auto api = Create(argc, argv, device);
 | 
			
		||||
  if (api && checkFirmwareVersion(api))
 | 
			
		||||
    return api;
 | 
			
		||||
  return nullptr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::shared_ptr<API> API::Create(
 | 
			
		||||
@ -261,7 +265,7 @@ std::shared_ptr<API> API::Create(const std::shared_ptr<Device> &device) {
 | 
			
		||||
    }
 | 
			
		||||
  } else {
 | 
			
		||||
    LOG(ERROR) <<"no device!";
 | 
			
		||||
    api = std::make_shared<API>(device, CalibrationModel::UNKNOW);
 | 
			
		||||
    return nullptr;
 | 
			
		||||
  }
 | 
			
		||||
  return api;
 | 
			
		||||
}
 | 
			
		||||
@ -324,6 +328,20 @@ std::shared_ptr<DeviceInfo> API::GetInfo() const {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::string API::GetInfo(const Info &info) const {
 | 
			
		||||
  if (info == Info::SDK_VERSION) {
 | 
			
		||||
    std::string info_path =
 | 
			
		||||
        utils::get_sdk_install_dir();
 | 
			
		||||
    info_path.append(MYNTEYE_OS_SEP "share" \
 | 
			
		||||
        MYNTEYE_OS_SEP "mynteye" MYNTEYE_OS_SEP "build.info");
 | 
			
		||||
 | 
			
		||||
    cv::FileStorage fs(info_path, cv::FileStorage::READ);
 | 
			
		||||
    if (!fs.isOpened()) {
 | 
			
		||||
      LOG(WARNING) << "build.info not found: " << info_path;
 | 
			
		||||
      return "null";
 | 
			
		||||
    }
 | 
			
		||||
    return fs["MYNTEYE_VERSION"];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return device_->GetInfo(info);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -511,66 +511,60 @@ bool Synthetic::IsStreamEnabledSynthetic(const Stream &stream) const {
 | 
			
		||||
 | 
			
		||||
void Synthetic::InitProcessors() {
 | 
			
		||||
  std::shared_ptr<Processor> rectify_processor = nullptr;
 | 
			
		||||
#ifdef WITH_CAM_MODELS
 | 
			
		||||
  std::shared_ptr<RectifyProcessor> rectify_processor_imp = nullptr;
 | 
			
		||||
#endif
 | 
			
		||||
  cv::Mat Q;
 | 
			
		||||
  if (calib_model_ ==  CalibrationModel::PINHOLE) {
 | 
			
		||||
    auto &&rectify_processor_ocv =
 | 
			
		||||
        std::make_shared<RectifyProcessorOCV>(intr_left_, intr_right_, extr_,
 | 
			
		||||
                                              RECTIFY_PROC_PERIOD);
 | 
			
		||||
    Q = rectify_processor_ocv->Q;
 | 
			
		||||
    rectify_processor = rectify_processor_ocv;
 | 
			
		||||
#ifdef WITH_CAM_MODELS
 | 
			
		||||
  } else if (calib_model_ == CalibrationModel::KANNALA_BRANDT) {
 | 
			
		||||
    rectify_processor_imp =
 | 
			
		||||
        std::make_shared<RectifyProcessor>(intr_left_, intr_right_, extr_,
 | 
			
		||||
                                           RECTIFY_PROC_PERIOD);
 | 
			
		||||
    rectify_processor = rectify_processor_imp;
 | 
			
		||||
#endif
 | 
			
		||||
  } else {
 | 
			
		||||
    LOG(ERROR) << "Unknow calib model type in device: "
 | 
			
		||||
              << calib_model_ << ", use default pinhole model";
 | 
			
		||||
    auto &&rectify_processor_ocv =
 | 
			
		||||
        std::make_shared<RectifyProcessorOCV>(intr_left_, intr_right_, extr_,
 | 
			
		||||
                                              RECTIFY_PROC_PERIOD);
 | 
			
		||||
    rectify_processor = rectify_processor_ocv;
 | 
			
		||||
  }
 | 
			
		||||
  std::shared_ptr<Processor> points_processor = nullptr;
 | 
			
		||||
  std::shared_ptr<Processor> depth_processor = nullptr;
 | 
			
		||||
 | 
			
		||||
  auto &&disparity_processor =
 | 
			
		||||
      std::make_shared<DisparityProcessor>(DisparityComputingMethod::SGBM,
 | 
			
		||||
                                           DISPARITY_PROC_PERIOD);
 | 
			
		||||
  auto &&disparitynormalized_processor =
 | 
			
		||||
      std::make_shared<DisparityNormalizedProcessor>(
 | 
			
		||||
          DISPARITY_NORM_PROC_PERIOD);
 | 
			
		||||
  std::shared_ptr<Processor> points_processor = nullptr;
 | 
			
		||||
  if (calib_model_ ==  CalibrationModel::PINHOLE) {
 | 
			
		||||
 | 
			
		||||
  auto root_processor =
 | 
			
		||||
        std::make_shared<RootProcessor>(ROOT_PROC_PERIOD);
 | 
			
		||||
 | 
			
		||||
  if (calib_model_ == CalibrationModel::PINHOLE) {
 | 
			
		||||
    // PINHOLE
 | 
			
		||||
    auto &&rectify_processor_ocv =
 | 
			
		||||
        std::make_shared<RectifyProcessorOCV>(intr_left_, intr_right_, extr_,
 | 
			
		||||
                                              RECTIFY_PROC_PERIOD);
 | 
			
		||||
    rectify_processor = rectify_processor_ocv;
 | 
			
		||||
    points_processor = std::make_shared<PointsProcessorOCV>(
 | 
			
		||||
        Q, POINTS_PROC_PERIOD);
 | 
			
		||||
        rectify_processor_ocv->Q, POINTS_PROC_PERIOD);
 | 
			
		||||
    depth_processor = std::make_shared<DepthProcessorOCV>(DEPTH_PROC_PERIOD);
 | 
			
		||||
 | 
			
		||||
    root_processor->AddChild(rectify_processor);
 | 
			
		||||
    rectify_processor->AddChild(disparity_processor);
 | 
			
		||||
    disparity_processor->AddChild(disparitynormalized_processor);
 | 
			
		||||
    disparity_processor->AddChild(points_processor);
 | 
			
		||||
    points_processor->AddChild(depth_processor);
 | 
			
		||||
#ifdef WITH_CAM_MODELS
 | 
			
		||||
  } else if (calib_model_ == CalibrationModel::KANNALA_BRANDT) {
 | 
			
		||||
    // KANNALA_BRANDT
 | 
			
		||||
    auto rectify_processor_imp =
 | 
			
		||||
        std::make_shared<RectifyProcessor>(intr_left_, intr_right_, extr_,
 | 
			
		||||
                                           RECTIFY_PROC_PERIOD);
 | 
			
		||||
    rectify_processor = rectify_processor_imp;
 | 
			
		||||
    points_processor = std::make_shared<PointsProcessor>(
 | 
			
		||||
        rectify_processor_imp -> getCalibInfoPair(),
 | 
			
		||||
        POINTS_PROC_PERIOD);
 | 
			
		||||
#endif
 | 
			
		||||
  } else {
 | 
			
		||||
    points_processor = std::make_shared<PointsProcessorOCV>(
 | 
			
		||||
        Q, POINTS_PROC_PERIOD);
 | 
			
		||||
  }
 | 
			
		||||
  std::shared_ptr<Processor> depth_processor = nullptr;
 | 
			
		||||
  if (calib_model_ ==  CalibrationModel::PINHOLE) {
 | 
			
		||||
    depth_processor = std::make_shared<DepthProcessorOCV>(DEPTH_PROC_PERIOD);
 | 
			
		||||
#ifdef WITH_CAM_MODELS
 | 
			
		||||
  } else if (calib_model_ == CalibrationModel::KANNALA_BRANDT) {
 | 
			
		||||
    depth_processor = std::make_shared<DepthProcessor>(
 | 
			
		||||
        rectify_processor_imp -> getCalibInfoPair(),
 | 
			
		||||
        DEPTH_PROC_PERIOD);
 | 
			
		||||
 | 
			
		||||
    root_processor->AddChild(rectify_processor);
 | 
			
		||||
    rectify_processor->AddChild(disparity_processor);
 | 
			
		||||
    disparity_processor->AddChild(disparitynormalized_processor);
 | 
			
		||||
    disparity_processor->AddChild(depth_processor);
 | 
			
		||||
    depth_processor->AddChild(points_processor);
 | 
			
		||||
#endif
 | 
			
		||||
  } else {
 | 
			
		||||
    depth_processor = std::make_shared<DepthProcessorOCV>(DEPTH_PROC_PERIOD);
 | 
			
		||||
    // UNKNOW
 | 
			
		||||
    LOG(ERROR) << "Unknow calib model type in device: "
 | 
			
		||||
               << calib_model_;
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  auto root_processor =
 | 
			
		||||
        std::make_shared<RootProcessor>(ROOT_PROC_PERIOD);
 | 
			
		||||
  root_processor->AddChild(rectify_processor);
 | 
			
		||||
 | 
			
		||||
  rectify_processor->addTargetStreams(
 | 
			
		||||
      {Stream::LEFT_RECTIFIED, Mode::MODE_LAST, Mode::MODE_LAST, nullptr});
 | 
			
		||||
@ -618,25 +612,7 @@ void Synthetic::InitProcessors() {
 | 
			
		||||
  depth_processor->SetPostProcessCallback(
 | 
			
		||||
      std::bind(&Synthetic::OnDepthPostProcess, this, _1));
 | 
			
		||||
 | 
			
		||||
  if (calib_model_ == CalibrationModel::PINHOLE) {
 | 
			
		||||
    // PINHOLE
 | 
			
		||||
    rectify_processor->AddChild(disparity_processor);
 | 
			
		||||
    disparity_processor->AddChild(disparitynormalized_processor);
 | 
			
		||||
    disparity_processor->AddChild(points_processor);
 | 
			
		||||
    points_processor->AddChild(depth_processor);
 | 
			
		||||
  } else if (calib_model_ == CalibrationModel::KANNALA_BRANDT) {
 | 
			
		||||
    // KANNALA_BRANDT
 | 
			
		||||
    rectify_processor->AddChild(disparity_processor);
 | 
			
		||||
    disparity_processor->AddChild(disparitynormalized_processor);
 | 
			
		||||
    disparity_processor->AddChild(depth_processor);
 | 
			
		||||
    depth_processor->AddChild(points_processor);
 | 
			
		||||
  } else {
 | 
			
		||||
    // UNKNOW
 | 
			
		||||
    LOG(ERROR) << "Unknow calib model type in device: "
 | 
			
		||||
               << calib_model_;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  processor_ = rectify_processor;
 | 
			
		||||
  processor_ = root_processor;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Synthetic::ProcessNativeStream(
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										136
									
								
								src/mynteye/api/version_checker.cc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								src/mynteye/api/version_checker.cc
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,136 @@
 | 
			
		||||
// Copyright 2018 Slightech Co., Ltd. All rights reserved.
 | 
			
		||||
//
 | 
			
		||||
// Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
// you may not use this file except in compliance with the License.
 | 
			
		||||
// You may obtain a copy of the License at
 | 
			
		||||
//
 | 
			
		||||
//     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
//
 | 
			
		||||
// Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
// distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
// See the License for the specific language governing permissions and
 | 
			
		||||
// limitations under the License.
 | 
			
		||||
#include "mynteye/api/version_checker.h"
 | 
			
		||||
#include "mynteye/device/utils.h"
 | 
			
		||||
#include "mynteye/logger.h"
 | 
			
		||||
#include "mynteye/types.h"
 | 
			
		||||
 | 
			
		||||
MYNTEYE_BEGIN_NAMESPACE
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
  const std::string device_type;
 | 
			
		||||
  const std::string sdk_version;
 | 
			
		||||
  const std::string firmware_version;
 | 
			
		||||
  const std::string status;
 | 
			
		||||
}firmware_version_match_table_unit;
 | 
			
		||||
 | 
			
		||||
const char* ERRO_DESCRIPTION_F =
 | 
			
		||||
    "Please update the firmware at first";
 | 
			
		||||
const char* ERRO_DESCRIPTION_S =
 | 
			
		||||
    "Please update the SDK at first";
 | 
			
		||||
const char* WARN_DESCRIPTION_F =
 | 
			
		||||
    "We suggest that you should update the firmware";
 | 
			
		||||
const char* WARN_DESCRIPTION_S =
 | 
			
		||||
    "We suggest that you should update the SDK";
 | 
			
		||||
const char* PASS_DESCRIPTION = "pass";
 | 
			
		||||
 | 
			
		||||
/** firmware/sdk version matched table */
 | 
			
		||||
/**----device type-----sdk version---firmware version-----pass tag-----*/
 | 
			
		||||
static const firmware_version_match_table_unit FSVM_TABLE[] ={
 | 
			
		||||
/** S1030 */
 | 
			
		||||
  {"MYNT-EYE-S1030",    ">2.3.0",         ">2.2.0",   PASS_DESCRIPTION},
 | 
			
		||||
  {"MYNT-EYE-S1030",    ">2.3.0",         "2.2.0",    WARN_DESCRIPTION_F},
 | 
			
		||||
  {"MYNT-EYE-S1030",    ">2.3.0",         "<2.2.0",   ERRO_DESCRIPTION_F},
 | 
			
		||||
  {"MYNT-EYE-S1030",    "<2.3.1",         "<2.2.0",   WARN_DESCRIPTION_S},
 | 
			
		||||
/** S2100 */
 | 
			
		||||
  {"MYNT-EYE-S2100",    ">2.3.0",         "1.0",      PASS_DESCRIPTION},
 | 
			
		||||
  {"MYNT-EYE-S2100",    "<2.3.1",         "1.0",      ERRO_DESCRIPTION_S},
 | 
			
		||||
/** S210A */
 | 
			
		||||
  {"MYNT-EYE-S210A",    ">2.3.0",         "1.0",      PASS_DESCRIPTION},
 | 
			
		||||
  {"MYNT-EYE-S210A",    "<2.3.1",         "1.0",      ERRO_DESCRIPTION_S},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void getVersion(const std::string &str, char *version) {
 | 
			
		||||
  std::string st1("");
 | 
			
		||||
  int j = 0;
 | 
			
		||||
  for (size_t i = 0; i < str.size(); i++) {
 | 
			
		||||
    if (str[i] == '.') {
 | 
			
		||||
      version[j++] = atoi(st1.c_str());
 | 
			
		||||
      st1 = "";
 | 
			
		||||
    } else {
 | 
			
		||||
      st1 += str[i];
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  version[j++] = atoi(st1.c_str());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool conditionMatch(const std::string& condition, const std::string& target) {
 | 
			
		||||
  char version[4] = {0};
 | 
			
		||||
  char version_c[4] = {0};
 | 
			
		||||
  getVersion(target, version);
 | 
			
		||||
  int tag_c = 0;
 | 
			
		||||
  std::string condition_c;
 | 
			
		||||
  if (condition[0] == '>') {
 | 
			
		||||
    tag_c = 1;
 | 
			
		||||
    condition_c = condition.substr(1);
 | 
			
		||||
  } else if (condition[0] == '<') {
 | 
			
		||||
    tag_c = -1;
 | 
			
		||||
    condition_c = condition.substr(1);
 | 
			
		||||
  } else {
 | 
			
		||||
    tag_c = 0;
 | 
			
		||||
    condition_c = condition;
 | 
			
		||||
  }
 | 
			
		||||
  getVersion(condition_c, version_c);
 | 
			
		||||
  int tag_big = memcmp(version, version_c, 4);
 | 
			
		||||
  if (tag_big * tag_c > 0 || (tag_big == 0 && tag_c == 0)) return true;
 | 
			
		||||
  return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
enum STATUS_UNIT {
 | 
			
		||||
  ST_PASS,
 | 
			
		||||
  ST_ERRO_F,
 | 
			
		||||
  ST_ERRO_S,
 | 
			
		||||
  ST_NOT_PASS
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
STATUS_UNIT checkUnit(const std::string& sdkv,
 | 
			
		||||
    const std::string& devn,
 | 
			
		||||
    const std::string& firmv,
 | 
			
		||||
    const firmware_version_match_table_unit& condition) {
 | 
			
		||||
    if (condition.device_type == devn &&
 | 
			
		||||
        conditionMatch(condition.sdk_version, sdkv) &&
 | 
			
		||||
        conditionMatch(condition.firmware_version, firmv)) {
 | 
			
		||||
      if (condition.status == ERRO_DESCRIPTION_F) return ST_ERRO_F;
 | 
			
		||||
      if (condition.status == ERRO_DESCRIPTION_S) return ST_ERRO_S;
 | 
			
		||||
      if (condition.status == WARN_DESCRIPTION_F ||
 | 
			
		||||
          condition.status == WARN_DESCRIPTION_S) {
 | 
			
		||||
        LOG(WARNING) << condition.status;
 | 
			
		||||
      }
 | 
			
		||||
      return ST_PASS;
 | 
			
		||||
    }
 | 
			
		||||
  return ST_NOT_PASS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool checkFirmwareVersion(const std::shared_ptr<API> api) {
 | 
			
		||||
  auto sdkv = api->GetInfo(Info::SDK_VERSION);
 | 
			
		||||
  auto devn = api->GetInfo(Info::DEVICE_NAME);
 | 
			
		||||
  auto firmv = api->GetInfo(Info::FIRMWARE_VERSION);
 | 
			
		||||
 | 
			
		||||
  for (size_t i =0;
 | 
			
		||||
      i < sizeof(FSVM_TABLE)/sizeof(firmware_version_match_table_unit);
 | 
			
		||||
      i++) {
 | 
			
		||||
    auto res = checkUnit(sdkv, devn, firmv, FSVM_TABLE[i]);
 | 
			
		||||
    if (res == ST_PASS) {
 | 
			
		||||
      return true;
 | 
			
		||||
    } else if (res == ST_ERRO_S || res == ST_ERRO_F) {
 | 
			
		||||
      LOG(ERROR) << FSVM_TABLE[i].status;
 | 
			
		||||
      return false;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  LOG(ERROR) << ERRO_DESCRIPTION_S;
 | 
			
		||||
  return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MYNTEYE_END_NAMESPACE
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										25
									
								
								src/mynteye/api/version_checker.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								src/mynteye/api/version_checker.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
			
		||||
// Copyright 2018 Slightech Co., Ltd. All rights reserved.
 | 
			
		||||
//
 | 
			
		||||
// Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
// you may not use this file except in compliance with the License.
 | 
			
		||||
// You may obtain a copy of the License at
 | 
			
		||||
//
 | 
			
		||||
//     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
//
 | 
			
		||||
// Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
// distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
// See the License for the specific language governing permissions and
 | 
			
		||||
// limitations under the License.
 | 
			
		||||
#ifndef MYNTEYE_API_VERSION_CHECKER_H_
 | 
			
		||||
#define MYNTEYE_API_VERSION_CHECKER_H_
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <string>
 | 
			
		||||
#include "mynteye/api/api.h"
 | 
			
		||||
 | 
			
		||||
MYNTEYE_BEGIN_NAMESPACE
 | 
			
		||||
bool checkFirmwareVersion(const std::shared_ptr<API> api);
 | 
			
		||||
MYNTEYE_END_NAMESPACE
 | 
			
		||||
 | 
			
		||||
#endif  // MYNTEYE_API_VERSION_CHECKER_H_
 | 
			
		||||
@ -650,7 +650,7 @@ class ROSWrapperNodelet : public nodelet::Nodelet {
 | 
			
		||||
          is_published_[stream] = false;
 | 
			
		||||
        }
 | 
			
		||||
        api_->Start(Source::VIDEO_STREAMING);
 | 
			
		||||
      } else if (sum_c > sum) {
 | 
			
		||||
      } else {
 | 
			
		||||
        if ((camera_publishers_[Stream::LEFT].getNumSubscribers() > 0 ||
 | 
			
		||||
            mono_publishers_[Stream::LEFT].getNumSubscribers() > 0) &&
 | 
			
		||||
            !is_published_[Stream::LEFT]) {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user