Intel® RealSense™ Cross Platform API
Intel Realsense Cross-platform API
controller_event_serializer.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 <string>
6 #include "TrackingManager.h"
7 
8 namespace librealsense
9 {
10  template<size_t SIZE>
11  inline std::string buffer_to_string(const uint8_t(&buff)[SIZE], char separator = ',', bool as_hex = false)
12  {
13  std::ostringstream oss;
14  if (as_hex)
15  oss << std::hex;
16 
17  for (size_t i = 0; i < SIZE; i++)
18  {
19  if (i != 0)
20  oss << separator;
21  oss << (int)buff[i];
22  }
23  return oss.str();
24  }
25 
26  std::string get_string(perc::Status value)
27  {
28 
29 #define CASE_RETURN_STR(X) case perc::Status::##X: {\
30  static std::string s##X##_str = make_less_screamy(#X);\
31  return s##X##_str; }
32 
33  switch (value)
34  {
35  CASE_RETURN_STR(SUCCESS)
36  CASE_RETURN_STR(COMMON_ERROR)
37  CASE_RETURN_STR(FEATURE_UNSUPPORTED)
38  CASE_RETURN_STR(ERROR_PARAMETER_INVALID)
39  CASE_RETURN_STR(INIT_FAILED)
40  CASE_RETURN_STR(ALLOC_FAILED)
41  CASE_RETURN_STR(ERROR_USB_TRANSFER)
42  CASE_RETURN_STR(ERROR_EEPROM_VERIFY_FAIL)
43  CASE_RETURN_STR(ERROR_FW_INTERNAL)
44  CASE_RETURN_STR(BUFFER_TOO_SMALL)
45  CASE_RETURN_STR(NOT_SUPPORTED_BY_FW)
46  CASE_RETURN_STR(DEVICE_BUSY)
47  CASE_RETURN_STR(TIMEOUT)
48  CASE_RETURN_STR(TABLE_NOT_EXIST)
49  CASE_RETURN_STR(TABLE_LOCKED)
50  CASE_RETURN_STR(DEVICE_STOPPED)
51  CASE_RETURN_STR(TEMPERATURE_WARNING)
52  CASE_RETURN_STR(TEMPERATURE_STOP)
53  CASE_RETURN_STR(CRC_ERROR)
54  CASE_RETURN_STR(INCOMPATIBLE)
55  CASE_RETURN_STR(SLAM_NO_DICTIONARY)
56  default: return to_string() << "Unknown (" << (int)value << ")";
57  }
58 #undef CASE_RETURN_STR
59  }
60 
61  inline std::ostream& operator<<(std::ostream& os, const perc::TrackingData::Version& v)
62  {
63  return os << v.major << "." << v.minor << "." << v.patch << "." << v.build;
64  }
65 
66  //TODO: Use json library for class
68  {
69  public:
70  static std::string serialized_data(const perc::TrackingData::ControllerDiscoveryEventFrame& frame)
71  {
72  std::string serialized_data = to_string()
73  << "\"MAC\" : [" << buffer_to_string(frame.macAddress) << "]";
74  return to_json(event_type_discovery(), serialized_data);
75  }
76 
77  static std::string serialized_data(const perc::TrackingData::ControllerDisconnectedEventFrame& frame)
78  {
79  std::string serialized_data = to_string()
80  << "\"ID\" : " << (int)frame.controllerId;
81  return to_json(event_type_disconnection(), serialized_data);
82  }
83 
84  static std::string serialized_data(const perc::TrackingData::ControllerFrame& frame)
85  {
86  std::string serialized_data = to_string() <<
87  "\"sensorIndex\": " << (int)frame.sensorIndex << ","
88  "\"frameId\": " << (int)frame.frameId << ","
89  "\"eventId\": " << (int)frame.eventId << ","
90  "\"instanceId\": " << (int)frame.instanceId << ","
91  "\"sensorData\": [" << buffer_to_string(frame.sensorData) << "]";
92  return to_json(event_type_frame(), serialized_data);
93  }
94 
95  static std::string serialized_data(const perc::TrackingData::ControllerConnectedEventFrame& frame)
96  {
97  std::string serialized_data = to_string() <<
98  "\"status\": \"" << get_string(frame.status) << "\","
99  "\"controllerId\": " << (int)frame.controllerId << ","
100  "\"manufacturerId\": " << (int)frame.manufacturerId << ","
101  "\"protocol\": \"" << frame.protocol << "\","
102  "\"app\": \"" << frame.app << "\","
103  "\"softDevice\": \"" << frame.softDevice << "\","
104  "\"bootLoader\": \"" << frame.bootLoader << "\"";
105  return to_json(event_type_frame(), serialized_data);
106  }
107 
108  static std::string serialized_data(const perc::TrackingData::ControllerDeviceConnect& c, uint8_t controller_id)
109  {
110  std::string serialized_data = to_string()
111  << "\"MAC\" : [" << buffer_to_string(c.macAddress) << "] ,"
112  "\"ID\" : " << (int)controller_id;
113  return to_json(event_type_connection(), serialized_data);
114  }
115  private:
116  static constexpr const char* prefix() { return R"JSON({"Event Type":"Controller Event", "Data" : {)JSON"; }
117  static constexpr const char* suffix() { return "}}"; }
118  static constexpr const char* event_type_frame() { return "Frame"; }
119  static constexpr const char* event_type_connection() { return "Connection"; }
120  static constexpr const char* event_type_disconnection() { return "Disconnection"; }
121  static constexpr const char* event_type_discovery() { return "Discovery"; }
122 
123  static std::string to_json(const char* sub_type, const std::string& data)
124  {
125  return to_string()
126  << prefix()
127  << "\"Sub Type\" : " << "\"" << sub_type << "\","
128  << "\"Data\" : {" << data << "}"
129  << suffix();
130  }
131  };
132 }
std::ostream & operator<<(std::ostream &os, const perc::TrackingData::Version &v)
Definition: controller_event_serializer.h:61
static std::string serialized_data(const perc::TrackingData::ControllerFrame &frame)
Definition: controller_event_serializer.h:84
Definition: backend.h:378
Definition: controller_event_serializer.h:67
#define CASE_RETURN_STR(X)
static std::string serialized_data(const perc::TrackingData::ControllerDiscoveryEventFrame &frame)
Definition: controller_event_serializer.h:70
Definition: archive.h:63
Definition: algo.h:16
static std::string serialized_data(const perc::TrackingData::ControllerConnectedEventFrame &frame)
Definition: controller_event_serializer.h:95
static std::string serialized_data(const perc::TrackingData::ControllerDisconnectedEventFrame &frame)
Definition: controller_event_serializer.h:77
Definition: types.h:55
std::string get_string(perc::Status value)
Definition: controller_event_serializer.h:26
std::string buffer_to_string(const uint8_t(&buff)[SIZE], char separator=',', bool as_hex=false)
Definition: controller_event_serializer.h:11
static std::string serialized_data(const perc::TrackingData::ControllerDeviceConnect &c, uint8_t controller_id)
Definition: controller_event_serializer.h:108