Intel® RealSense™ Cross Platform API
Intel Realsense Cross-platform API
tm-device.h
Go to the documentation of this file.
1 // License: Apache 2.0. See LICENSE file in root directory.
2 // Copyright(c) 2017 Intel Corporation. All Rights Reserved.
3 #pragma once
4 
5 #include <memory>
6 #include <vector>
7 
8 #include "../device.h"
9 #include "../core/motion.h"
10 #include "TrackingManager.h"
11 #include "../media/playback/playback_device.h"
12 
13 
14 namespace librealsense
15 {
16  class tm2_sensor;
17 
18  class tm2_device : public virtual device, public tm2_extensions
19  {
20  public:
21  tm2_device(std::shared_ptr<perc::TrackingManager> manager,
22  perc::TrackingDevice* dev,
23  std::shared_ptr<context> ctx,
24  const platform::backend_device_group& group);
25  ~tm2_device();
26  void enable_loopback(const std::string& source_file) override;
27  void disable_loopback() override;
28  bool is_enabled() const override;
29  void connect_controller(const std::array<uint8_t, 6>& mac_address) override;
30  void disconnect_controller(int id) override;
31  private:
32  static const char* tm2_device_name()
33  {
34  return "Intel RealSense T260";
35  }
36  std::shared_ptr<perc::TrackingManager> _manager;
37  perc::TrackingDevice* _dev;
38  std::shared_ptr<tm2_sensor> _sensor;
39  };
40 
41  class tm2_sensor : public sensor_base, public video_sensor_interface, public perc::TrackingDevice::Listener
42  {
43  public:
44  tm2_sensor(tm2_device* owner, perc::TrackingDevice* dev);
45  ~tm2_sensor();
46  // sensor interface
49  void open(const stream_profiles& requests) override;
50  void close() override;
51  void start(frame_callback_ptr callback) override;
52  void stop() override;
53  rs2_intrinsics get_intrinsics(const stream_profile& profile) const override;
55 
56  // Tracking listener
58  void onVideoFrame(perc::TrackingData::VideoFrame& tm_frame) override;
59  void onAccelerometerFrame(perc::TrackingData::AccelerometerFrame& tm_frame) override;
60  void onGyroFrame(perc::TrackingData::GyroFrame& tm_frame) override;
61  void onPoseFrame(perc::TrackingData::PoseFrame& tm_frame) override;
62  void onControllerDiscoveryEventFrame(perc::TrackingData::ControllerDiscoveryEventFrame& frame) override;
63  void onControllerDisconnectedEventFrame(perc::TrackingData::ControllerDisconnectedEventFrame& frame) override;
64  void onControllerFrame(perc::TrackingData::ControllerFrame& frame) override;
65  void onControllerConnectedEventFrame(perc::TrackingData::ControllerConnectedEventFrame& frame) override;
66 
67  void enable_loopback(std::shared_ptr<playback_device> input);
68  void disable_loopback();
69  bool is_loopback_enabled() const;
70  void attach_controller(const std::array<uint8_t, 6>& mac_addr);
71  void detach_controller(int id);
72  void dispose();
73  private:
74  void handle_imu_frame(perc::TrackingData::TimestampedData& tm_frame_ts, unsigned long long frame_number, rs2_stream stream_type, int index, float3 imu_data, float temperature);
75  void pass_frames_to_fw(frame_holder fref);
76  void raise_controller_event(const std::string& msg, const std::string& serialized_data, double timestamp);
77  void raise_error_notification(const std::string& msg);
78 
79  dispatcher _dispatcher;
80  perc::TrackingDevice* _tm_dev;
81  std::mutex _configure_lock;
82  std::shared_ptr<playback_device> _loopback;
83  perc::TrackingData::Profile _tm_supported_profiles;
84  perc::TrackingData::Profile _tm_active_profiles;
85  };
86 }
void start(frame_callback_ptr callback) override
void onAccelerometerFrame(perc::TrackingData::AccelerometerFrame &tm_frame) override
void onPoseFrame(perc::TrackingData::PoseFrame &tm_frame) override
void onControllerDisconnectedEventFrame(perc::TrackingData::ControllerDisconnectedEventFrame &frame) override
std::shared_ptr< rs2_frame_callback > frame_callback_ptr
Definition: types.h:822
void onGyroFrame(perc::TrackingData::GyroFrame &tm_frame) override
Definition: concurrency.h:125
void onControllerConnectedEventFrame(perc::TrackingData::ControllerConnectedEventFrame &frame) override
void stop() override
void onControllerDiscoveryEventFrame(perc::TrackingData::ControllerDiscoveryEventFrame &frame) override
tm2_device(std::shared_ptr< perc::TrackingManager > manager, perc::TrackingDevice *dev, std::shared_ptr< context > ctx, const platform::backend_device_group &group)
void enable_loopback(std::shared_ptr< playback_device > input)
rs2_intrinsics get_intrinsics(const stream_profile &profile) const override
Definition: tm-device.h:18
Definition: archive.h:63
Definition: algo.h:16
rs2_motion_device_intrinsic get_motion_intrinsics(const motion_stream_profile_interface &profile) const
stream_profiles init_stream_profiles() override
void onVideoFrame(perc::TrackingData::VideoFrame &tm_frame) override
void disable_loopback() override
Definition: types.h:414
void close() override
void detach_controller(int id)
void onControllerFrame(perc::TrackingData::ControllerFrame &frame) override
bool is_enabled() const override
void connect_controller(const std::array< uint8_t, 6 > &mac_address) override
void enable_loopback(const std::string &source_file) override
rs2_stream
Streams are different types of data provided by RealSense devices.
Definition: rs_sensor.h:36
Definition: types.h:469
void open(const stream_profiles &requests) override
Definition: types.h:587
tm2_sensor(tm2_device *owner, perc::TrackingDevice *dev)
std::vector< std::shared_ptr< stream_profile_interface > > stream_profiles
Definition: streaming.h:104
Video stream intrinsics.
Definition: rs_types.h:55
void attach_controller(const std::array< uint8_t, 6 > &mac_addr)
Motion device intrinsics: scale, bias, and variances.
Definition: rs_types.h:68
void disconnect_controller(int id) override
Definition: sensor.h:31
Definition: tm-device.h:41
Definition: device.h:43
bool is_loopback_enabled() const
Definition: motion.h:26