-
Notifications
You must be signed in to change notification settings - Fork 4.9k
/
Copy pathrs_internal.h
542 lines (476 loc) · 25.2 KB
/
rs_internal.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
/* License: Apache 2.0. See LICENSE file in root directory.
Copyright(c) 2017 Intel Corporation. All Rights Reserved. */
/** \file rs_internal.h
* \brief
* Exposes RealSense internal functionality for C compilers
*/
#ifndef LIBREALSENSE_RS2_INTERNAL_H
#define LIBREALSENSE_RS2_INTERNAL_H
#ifdef __cplusplus
extern "C" {
#endif
#include "rs_types.h"
#include "rs_context.h"
#include "rs_sensor.h"
#include "rs_frame.h"
#include "rs_option.h"
/**
* librealsense Recorder is intended for effective unit-testing
* Currently supports three modes of operation:
*/
typedef enum rs2_recording_mode
{
RS2_RECORDING_MODE_BLANK_FRAMES, /* frame metadata will be recorded, but pixel data will be replaced with zeros to save space */
RS2_RECORDING_MODE_COMPRESSED, /* frames will be encoded using a proprietary lossy encoding, aiming at x5 compression at some CPU expense */
RS2_RECORDING_MODE_BEST_QUALITY, /* frames will not be compressed, but rather stored as-is. This gives best quality and low CPU overhead, but you might run out of memory */
RS2_RECORDING_MODE_COUNT
} rs2_recording_mode;
/** \brief All the parameters required to define a video stream. */
typedef struct rs2_video_stream
{
rs2_stream type;
int index;
int uid;
int width;
int height;
int fps;
int bpp;
rs2_format fmt;
rs2_intrinsics intrinsics;
} rs2_video_stream;
/** \brief All the parameters required to define a motion stream. */
typedef struct rs2_motion_stream
{
rs2_stream type;
int index;
int uid;
int fps;
rs2_format fmt;
rs2_motion_device_intrinsic intrinsics;
} rs2_motion_stream;
/** \brief All the parameters required to define a pose stream. */
typedef struct rs2_pose_stream
{
rs2_stream type;
int index;
int uid;
int fps;
rs2_format fmt;
} rs2_pose_stream;
/** \brief All the parameters required to define a video frame. */
typedef struct rs2_software_video_frame
{
void* pixels;
void(*deleter)(void*);
int stride;
int bpp;
rs2_time_t timestamp;
rs2_timestamp_domain domain;
int frame_number;
const rs2_stream_profile* profile;
} rs2_software_video_frame;
/** \brief All the parameters required to define a motion frame. */
typedef struct rs2_software_motion_frame
{
void* data;
void(*deleter)(void*);
rs2_time_t timestamp;
rs2_timestamp_domain domain;
int frame_number;
const rs2_stream_profile* profile;
} rs2_software_motion_frame;
/** \brief All the parameters required to define a pose frame. */
typedef struct rs2_software_pose_frame
{
struct pose_frame_info
{
float translation[3];
float velocity[3];
float acceleration[3];
float rotation[4];
float angular_velocity[3];
float angular_acceleration[3];
int tracker_confidence;
int mapper_confidence;
};
void* data;
void(*deleter)(void*);
rs2_time_t timestamp;
rs2_timestamp_domain domain;
int frame_number;
const rs2_stream_profile* profile;
} rs2_software_pose_frame;
/** \brief All the parameters required to define a sensor notification. */
typedef struct rs2_software_notification
{
rs2_notification_category category;
int type;
rs2_log_severity severity;
const char* description;
const char* serialized_data;
} rs2_software_notification;
struct rs2_software_device_destruction_callback;
/**
* Create librealsense context that will try to record all operations over librealsense into a file
* \param[in] api_version realsense API version as provided by RS2_API_VERSION macro
* \param[in] filename string representing the name of the file to record
* \param[in] section string representing the name of the section within existing recording
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
* \return context object, should be released by rs2_delete_context
*/
rs2_context* rs2_create_recording_context(int api_version, const char* filename, const char* section, rs2_recording_mode mode, rs2_error** error);
/**
* Create librealsense context that given a file will respond to calls exactly as the recording did
* if the user calls a method that was either not called during recording or violates causality of the recording error will be thrown
* \param[in] api_version realsense API version as provided by RS2_API_VERSION macro
* \param[in] filename string representing the name of the file to play back from
* \param[in] section string representing the name of the section within existing recording
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
* \return context object, should be released by rs2_delete_context
*/
rs2_context* rs2_create_mock_context(int api_version, const char* filename, const char* section, rs2_error** error);
/**
* Create librealsense context that given a file will respond to calls exactly as the recording did
* if the user calls a method that was either not called during recording or violates causality of the recording error will be thrown
* \param[in] api_version realsense API version as provided by RS2_API_VERSION macro
* \param[in] filename string representing the name of the file to play back from
* \param[in] section string representing the name of the section within existing recording
* \param[in] min_api_version reject any file that was recorded before this version
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
* \return context object, should be released by rs2_delete_context
*/
rs2_context* rs2_create_mock_context_versioned(int api_version, const char* filename, const char* section, const char* min_api_version, rs2_error** error);
/**
* Create software device to enable use librealsense logic without getting data from backend
* but inject the data from outside
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
* \return software device object, should be released by rs2_delete_device
*/
rs2_device* rs2_create_software_device(rs2_error** error);
/**
* Add sensor to the software device
* \param[in] dev the software device
* \param[in] sensor_name the name of the sensor
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
* \return software sensor object, should be released by rs2_delete_sensor
*/
rs2_sensor* rs2_software_device_add_sensor(rs2_device* dev, const char* sensor_name, rs2_error** error);
/**
* Inject video frame to software sonsor
* \param[in] sensor the software sensor
* \param[in] frame all the frame components
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
*/
void rs2_software_sensor_on_video_frame(rs2_sensor* sensor, rs2_software_video_frame frame, rs2_error** error);
/**
* Inject motion frame to software sonsor
* \param[in] sensor the software sensor
* \param[in] frame all the frame components
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
*/
void rs2_software_sensor_on_motion_frame(rs2_sensor* sensor, rs2_software_motion_frame frame, rs2_error** error);
/**
* Inject pose frame to software sonsor
* \param[in] sensor the software sensor
* \param[in] frame all the frame components
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
*/
void rs2_software_sensor_on_pose_frame(rs2_sensor* sensor, rs2_software_pose_frame frame, rs2_error** error);
/**
* Inject notification to software sonsor
* \param[in] sensor the software sensor
* \param[in] notif all the notification components
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
*/
void rs2_software_sensor_on_notification(rs2_sensor* sensor, rs2_software_notification notif, rs2_error** error);
/**
* Set frame metadata for the upcoming frames
* \param[in] sensor the software sensor
* \param[in] value metadata key to set
* \param[in] type metadata value
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
*/
void rs2_software_sensor_set_metadata(rs2_sensor* sensor, rs2_frame_metadata_value value, rs2_metadata_type type, rs2_error** error);
/**
* set callback to be notified when a specific software device is destroyed
* \param[in] dev software device
* \param[in] on_notification function pointer to register as callback
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
*/
void rs2_software_device_set_destruction_callback(const rs2_device* dev, rs2_software_device_destruction_callback_ptr on_notification, void* user, rs2_error** error);
/**
* set callback to be notified when a specific software device is destroyed
* \param[in] dev software device
* \param[in] callback callback object created from c++ application. ownership over the callback object is moved into the relevant device lock
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
*/
void rs2_software_device_set_destruction_callback_cpp(const rs2_device* dev, rs2_software_device_destruction_callback* callback, rs2_error** error);
/**
* Set the wanted matcher type that will be used by the syncer
* \param[in] dev the software device
* \param[in] matcher matcher type
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
*/
void rs2_software_device_create_matcher(rs2_device* dev, rs2_matchers matcher, rs2_error** error);
/**
* Register a camera info value for the software device
* \param[in] dev the software device
* \param[in] info identifier for the camera info to add.
* \param[in] val string value for this new camera info.
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
*/
void rs2_software_device_register_info(rs2_device* dev, rs2_camera_info info, const char *val, rs2_error** error);
/**
* Update an existing camera info value for the software device
* \param[in] dev the software device
* \param[in] info identifier for the camera info to add.
* \param[in] val string value for this new camera info.
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
*/
void rs2_software_device_update_info(rs2_device* dev, rs2_camera_info info, const char * val, rs2_error** error);
/**
* Add video stream to sensor
* \param[in] sensor the software sensor
* \param[in] video_stream all the stream components
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
*/
rs2_stream_profile* rs2_software_sensor_add_video_stream(rs2_sensor* sensor, rs2_video_stream video_stream, rs2_error** error);
/**
* Add video stream to sensor
* \param[in] sensor the software sensor
* \param[in] video_stream all the stream components
* \param[in] is_default whether or not the stream should be a default stream for the device
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
*/
rs2_stream_profile* rs2_software_sensor_add_video_stream_ex(rs2_sensor* sensor, rs2_video_stream video_stream, int is_default, rs2_error** error);
/**
* Add motion stream to sensor
* \param[in] sensor the software sensor
* \param[in] motion_stream all the stream components
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
*/
rs2_stream_profile* rs2_software_sensor_add_motion_stream(rs2_sensor* sensor, rs2_motion_stream motion_stream, rs2_error** error);
/**
* Add motion stream to sensor
* \param[in] sensor the software sensor
* \param[in] motion_stream all the stream components
* \param[in] is_default whether or not the stream should be a default stream for the device
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
*/
rs2_stream_profile* rs2_software_sensor_add_motion_stream_ex(rs2_sensor* sensor, rs2_motion_stream motion_stream, int is_default, rs2_error** error);
/**
* Add pose stream to sensor
* \param[in] sensor the software sensor
* \param[in] pose_stream all the stream components
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
*/
rs2_stream_profile* rs2_software_sensor_add_pose_stream(rs2_sensor* sensor, rs2_pose_stream pose_stream, rs2_error** error);
/**
* Add pose stream to sensor
* \param[in] sensor the software sensor
* \param[in] pose_stream all the stream components
* \param[in] is_default whether or not the stream should be a default stream for the device
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
*/
rs2_stream_profile* rs2_software_sensor_add_pose_stream_ex(rs2_sensor* sensor, rs2_pose_stream pose_stream, int is_default, rs2_error** error);
/**
* Add read only option to sensor
* \param[in] sensor the software sensor
* \param[in] option the wanted option
* \param[in] val the initial value
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
*/
void rs2_software_sensor_add_read_only_option(rs2_sensor* sensor, rs2_option option, float val, rs2_error** error);
/**
* Update the read only option added to sensor
* \param[in] sensor the software sensor
* \param[in] option the wanted option
* \param[in] val the wanted value
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
*/
void rs2_software_sensor_update_read_only_option(rs2_sensor* sensor, rs2_option option, float val, rs2_error** error);
/**
* Add an option to sensor
* \param[in] sensor the software sensor
* \param[in] option the wanted option
* \param[in] min the minimum value which will be accepted for this option
* \param[in] max the maximum value which will be accepted for this option
* \param[in] step the granularity of options which accept discrete values, or zero if the option accepts continuous values
* \param[in] def the initial value of the option
* \param[in] is_writable should the option be read-only or not
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
*/
void rs2_software_sensor_add_option(rs2_sensor* sensor, rs2_option option, float min, float max, float step, float def, int is_writable, rs2_error** error);
/**
* Sensors hold the parent device in scope via a shared_ptr. This function detaches that so that the software sensor doesn't keep the software device alive.
* Note that this is dangerous as it opens the door to accessing freed memory if care isn't taken.
* \param[in] sensor the software sensor
* \param[out] error if non-null, recieves any error that occurs during this call, otherwise, errors are ignored
*/
void rs2_software_sensor_detach(rs2_sensor* sensor, rs2_error** error);
/**
* \brief Creates RealSense firmware log message.
* \param[in] dev Device from which the FW log will be taken using the created message
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored.
* \return pointer to created empty firmware log message
*/
rs2_firmware_log_message* rs2_create_fw_log_message(rs2_device* dev, rs2_error** error);
/**
* \brief Gets RealSense firmware log.
* \param[in] dev Device from which the FW log should be taken
* \param[in] fw_log_msg Firmware log message object to be filled
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored.
* \return true for success, false for failure - failure happens if no firmware log was sent by the hardware monitor
*/
int rs2_get_fw_log(rs2_device* dev, rs2_firmware_log_message* fw_log_msg, rs2_error** error);
/**
* \brief Gets RealSense flash log - this is a fw log that has been written in the device during the previous shutdown of the device
* \param[in] dev Device from which the FW log should be taken
* \param[in] fw_log_msg Firmware log message object to be filled
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored.
* \return true for success, false for failure - failure happens if no firmware log was sent by the hardware monitor
*/
int rs2_get_flash_log(rs2_device* dev, rs2_firmware_log_message* fw_log_msg, rs2_error** error);
/**
* Delete RealSense firmware log message
* \param[in] device Realsense firmware log message to delete
*/
void rs2_delete_fw_log_message(rs2_firmware_log_message* msg);
/**
* \brief Gets RealSense firmware log message data.
* \param[in] msg firmware log message object
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored.
* \return pointer to start of the firmware log message data
*/
const unsigned char* rs2_fw_log_message_data(rs2_firmware_log_message* msg, rs2_error** error);
/**
* \brief Gets RealSense firmware log message size.
* \param[in] msg firmware log message object
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored.
* \return size of the firmware log message data
*/
int rs2_fw_log_message_size(rs2_firmware_log_message* msg, rs2_error** error);
/**
* \brief Gets RealSense firmware log message timestamp.
* \param[in] msg firmware log message object
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored.
* \return timestamp of the firmware log message
*/
unsigned int rs2_fw_log_message_timestamp(rs2_firmware_log_message* msg, rs2_error** error);
/**
* \brief Gets RealSense firmware log message severity.
* \param[in] msg firmware log message object
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored.
* \return severity of the firmware log message data
*/
rs2_log_severity rs2_fw_log_message_severity(const rs2_firmware_log_message* msg, rs2_error** error);
/**
* \brief Initializes RealSense firmware logs parser in device.
* \param[in] dev Device from which the FW log will be taken
* \param[in] xml_content content of the xml file needed for parsing
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored.
* \return true for success, false for failure - failure happens if opening the xml from the xml_path input fails
*/
int rs2_init_fw_log_parser(rs2_device* dev, const char* xml_content, rs2_error** error);
/**
* \brief Creates RealSense firmware log parsed message.
* \param[in] dev Device from which the FW log will be taken using the created message
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored.
* \return pointer to created empty firmware log message
*/
rs2_firmware_log_parsed_message* rs2_create_fw_log_parsed_message(rs2_device* dev, rs2_error** error);
/**
* \brief Deletes RealSense firmware log parsed message.
* \param[in] msg message to be deleted
*/
void rs2_delete_fw_log_parsed_message(rs2_firmware_log_parsed_message* fw_log_parsed_msg);
/**
* \brief Gets RealSense firmware log parser
* \param[in] dev Device from which the FW log will be taken
* \param[in] fw_log_msg firmware log message to be parsed
* \param[in] parsed_msg firmware log parsed message - place holder for the resulting parsed message
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored.
* \return true for success, false for failure - failure happens if message could not be parsed
*/
int rs2_parse_firmware_log(rs2_device* dev, rs2_firmware_log_message* fw_log_msg, rs2_firmware_log_parsed_message* parsed_msg, rs2_error** error);
/**
* \brief Gets RealSense firmware log parsed message.
* \param[in] fw_log_parsed_msg firmware log parsed message object
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored.
* \return message of the firmware log parsed message
*/
const char* rs2_get_fw_log_parsed_message(rs2_firmware_log_parsed_message* fw_log_parsed_msg, rs2_error** error);
/**
* \brief Gets RealSense firmware log parsed message file name.
* \param[in] fw_log_parsed_msg firmware log parsed message object
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored.
* \return file name of the firmware log parsed message
*/
const char* rs2_get_fw_log_parsed_file_name(rs2_firmware_log_parsed_message* fw_log_parsed_msg, rs2_error** error);
/**
* \brief Gets RealSense firmware log parsed message thread name.
* \param[in] fw_log_parsed_msg firmware log parsed message object
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored.
* \return thread name of the firmware log parsed message
*/
const char* rs2_get_fw_log_parsed_thread_name(rs2_firmware_log_parsed_message* fw_log_parsed_msg, rs2_error** error);
/**
* \brief Gets RealSense firmware log parsed message severity.
* \param[in] fw_log_parsed_msg firmware log parsed message object
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored.
* \return severity of the firmware log parsed message
*/
rs2_log_severity rs2_get_fw_log_parsed_severity(rs2_firmware_log_parsed_message* fw_log_parsed_msg, rs2_error** error);
/**
* \brief Gets RealSense firmware log parsed message relevant line (in the file that is returned by rs2_get_fw_log_parsed_file_name).
* \param[in] fw_log_parsed_msg firmware log parsed message object
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored.
* \return line number of the firmware log parsed message
*/
unsigned int rs2_get_fw_log_parsed_line(rs2_firmware_log_parsed_message* fw_log_parsed_msg, rs2_error** error);
/**
* \brief Gets RealSense firmware log parsed message timestamp
* \param[in] fw_log_parsed_msg firmware log parsed message object
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored.
* \return timestamp of the firmware log parsed message
*/
unsigned int rs2_get_fw_log_parsed_timestamp(rs2_firmware_log_parsed_message* fw_log_parsed_msg, rs2_error** error);
/**
* \brief Creates RealSense terminal parser.
* \param[in] xml_content content of the xml file needed for parsing
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored.
* \return pointer to created terminal parser object
*/
rs2_terminal_parser* rs2_create_terminal_parser(const char* xml_content, rs2_error** error);
/**
* \brief Deletes RealSense terminal parser.
* \param[in] terminal_parser terminal parser to be deleted
*/
void rs2_delete_terminal_parser(rs2_terminal_parser* terminal_parser);
/**
* \brief Parses terminal command via RealSense terminal parser
* \param[in] terminal_parser Terminal parser object
* \param[in] command command to be sent to the hw monitor of the device
* \param[in] size_of_command size of command to be sent to the hw monitor of the device
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored.
* \return command to hw monitor, in hex
*/
rs2_raw_data_buffer* rs2_terminal_parse_command(rs2_terminal_parser* terminal_parser,
const char* command, unsigned int size_of_command, rs2_error** error);
/**
* \brief Parses terminal response via RealSense terminal parser
* \param[in] terminal_parser Terminal parser object
* \param[in] command command sent to the hw monitor of the device
* \param[in] size_of_command size of the command to sent to the hw monitor of the device
* \param[in] response response received by the hw monitor of the device
* \param[in] size_of_response size of the response received by the hw monitor of the device
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored.
* \return answer parsed
*/
rs2_raw_data_buffer* rs2_terminal_parse_response(rs2_terminal_parser* terminal_parser,
const char* command, unsigned int size_of_command,
const void* response, unsigned int size_of_response, rs2_error** error);
#ifdef __cplusplus
}
#endif
#endif