You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

175 lines
8.6 KiB

/* License: Apache 2.0. See LICENSE file in root directory.
Copyright(c) 2017 Intel Corporation. All Rights Reserved. */
/** \file rs_context.h
* \brief Exposes RealSense context functionality for C compilers
*/
#ifndef LIBREALSENSE_RS2_CONTEXT_H
#define LIBREALSENSE_RS2_CONTEXT_H
#ifdef __cplusplus
extern "C" {
#endif
#include "rs_types.h"
/**
* \brief Creates RealSense context that is required for the rest of the API.
* Context settings are taken from the library configuration file's 'context' key.
* \param[in] api_version Users are expected to pass their version of \c RS2_API_VERSION to make sure they are running the correct librealsense version.
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored.
* \return Context object
*/
rs2_context* rs2_create_context(int api_version, rs2_error** error);
/**
* \brief Creates RealSense context that is required for the rest of the API, and accepts a settings JSON.
* \param[in] api_version Users are expected to pass their version of \c RS2_API_VERSION to make sure they are running the correct librealsense version.
* \param[in] json_settings Pointer to a string containing a JSON configuration to use, or null if none
* Possible <setting>:<default-value> :
* inherit: true - (bool) whether to inherit and override library configuration file values:
* the 'context' key in the file is taken as-is
* '<executable-name>/context' is merged, if it exists
* then the context-settings are merged
* dds: {} - (requires BUILD_WITH_DDS) false disables DDS; otherwise the DDS settings:
* domain: 0 - (int) the number of the DDS domain [0-232]
* participant: <exe name> - (string) the name of the participant
* (see additional settings in realdds/doc/device.md#Settings)
* format-conversion: full - (string) how to convert formats
* full: provide all conversions (e.g., YUYV -> RGB8 etc.)
* basic: use mostly raw camera formats (no RGB8 etc.); convert interleaved (Y8I -> 2xY8)
* raw: leave all formats from camera as they are
* options-update-interval: 1000 - (uint32_t) time interval in milliseconds for option value change notifications
* (see rs2_set_options_changed_callback)
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored.
* \return Context object
*/
rs2_context* rs2_create_context_ex(int api_version, const char * json_settings, rs2_error** error);
/**
* \brief Frees the relevant context object.
* \param[in] context Object that is no longer needed
*/
void rs2_delete_context(rs2_context* context);
/**
* set callback to get devices changed events
* these events will be raised by the context whenever new RealSense device is connected or existing device gets disconnected
* \param context Object representing librealsense session
* \param[in] callback callback object created from c++ application. ownership over the callback object is moved into the context
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
*/
void rs2_set_devices_changed_callback_cpp(rs2_context* context, rs2_devices_changed_callback* callback, rs2_error** error);
/**
* set callback to get devices changed events
* these events will be raised by the context whenever new RealSense device is connected or existing device gets disconnected
* \param context Object representing librealsense session
* \param[in] callback function pointer to register as per-notifications callback
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
*/
void rs2_set_devices_changed_callback(const rs2_context* context, rs2_devices_changed_callback_ptr callback, void* user, rs2_error** error);
/**
* Create a new device and add it to the context
* \param ctx The context to which the new device will be added
* \param file The file from which the device should be created
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored
* @return A pointer to a device that plays data from the file, or null in case of failure
*/
rs2_device* rs2_context_add_device(rs2_context* ctx, const char* file, rs2_error** error);
/**
* Add an instance of software device to the context
* \param ctx The context to which the new device will be added
* \param dev Instance of software device to register into the context
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored
*/
void rs2_context_add_software_device(rs2_context* ctx, rs2_device* dev, rs2_error** error);
/**
* Removes a playback device from the context, if exists
* \param[in] ctx The context from which the device should be removed
* \param[in] file The file name that was used to add the device
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored
*/
void rs2_context_remove_device(rs2_context* ctx, const char* file, rs2_error** error);
/**
* Removes tracking module.
* function query_devices() locks the tracking module in the tm_context object.
* If the tracking module device is not used it should be removed using this function, so that other applications could find it.
* This function can be used both before the call to query_device() to prevent enabling tracking modules or afterwards to
* release them.
*/
void rs2_context_unload_tracking_module(rs2_context* ctx, rs2_error** error);
/**
* create a static snapshot of all connected devices at the time of the call
* \param context Object representing librealsense session
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
* \return the list of devices, should be released by rs2_delete_device_list
*/
rs2_device_list* rs2_query_devices(const rs2_context* context, rs2_error** error);
#define RS2_PRODUCT_LINE_ANY 0xff
#define RS2_PRODUCT_LINE_ANY_INTEL 0xfe
#define RS2_PRODUCT_LINE_NON_INTEL 0x01
#define RS2_PRODUCT_LINE_D400 0x02
#define RS2_PRODUCT_LINE_SR300 0x04
#define RS2_PRODUCT_LINE_L500 0x08
#define RS2_PRODUCT_LINE_T200 0x10
#define RS2_PRODUCT_LINE_D500 0x20
#define RS2_PRODUCT_LINE_SW_ONLY 0x100 // enable to return only SW devices, including playback
#define RS2_PRODUCT_LINE_DEPTH ( RS2_PRODUCT_LINE_L500 | RS2_PRODUCT_LINE_SR300 | RS2_PRODUCT_LINE_D400 | RS2_PRODUCT_LINE_D500 )
#define RS2_PRODUCT_LINE_TRACKING RS2_PRODUCT_LINE_T200
/**
* create a static snapshot of all connected devices at the time of the call
* \param context Object representing librealsense session
* \param product_mask Controls what kind of devices will be returned
* \param[out] error if non-null, receives any error that occurs during this call, otherwise, errors are ignored
* \return the list of devices, should be released by rs2_delete_device_list
*/
rs2_device_list* rs2_query_devices_ex(const rs2_context* context, int product_mask, rs2_error** error);
/**
* \brief Creates RealSense device_hub .
* \param[in] context The context for the device hub
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored.
* \return Device hub object
*/
rs2_device_hub* rs2_create_device_hub(const rs2_context* context, rs2_error** error);
/**
* \brief Frees the relevant device hub object.
* \param[in] hub Object that is no longer needed
*/
void rs2_delete_device_hub(const rs2_device_hub* hub);
/**
* If any device is connected return it, otherwise wait until next RealSense device connects.
* Calling this method multiple times will cycle through connected devices
* \param[in] ctx The context to creat the device
* \param[in] hub The device hub object
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored.
* \return device object
*/
rs2_device* rs2_device_hub_wait_for_device(const rs2_device_hub* hub, rs2_error** error);
/**
* Checks if device is still connected
* \param[in] hub The device hub object
* \param[in] device The device
* \param[out] error If non-null, receives any error that occurs during this call, otherwise, errors are ignored.
* \return 1 if the device is connected, 0 otherwise
*/
int rs2_device_hub_is_device_connected(const rs2_device_hub* hub, const rs2_device* device, rs2_error** error);
#ifdef __cplusplus
}
#endif
#endif