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.

113 lines
3.7 KiB

// License: Apache 2.0. See LICENSE file in root directory.
// Copyright(c) 2017 Intel Corporation. All Rights Reserved.
namespace Intel.RealSense
{
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
[DebuggerDisplay("{Value}", Name = "{Key}")]
internal sealed class OptionInternal : IOption
{
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private readonly IntPtr m_options;
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private readonly Option option;
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private readonly float min;
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private readonly float max;
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private readonly float step;
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private readonly float @default;
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private string description;
internal OptionInternal(IntPtr options, Option option)
{
m_options = options;
this.option = option;
object error;
NativeMethods.rs2_get_option_range(m_options, option, out min, out max, out step, out @default, out error);
}
/// <summary>Gets the option description</summary>
/// <value>human-readable option description</value>
public string Description
{
get
{
if (description == null)
{
object error;
var str = NativeMethods.rs2_get_option_description(m_options, option, out error);
description = Marshal.PtrToStringAnsi(str);
}
return description;
}
}
/// <summary>Gets or sets option value</summary>
/// <value>value of the option</value>
public float Value
{
get
{
object error;
return NativeMethods.rs2_get_option(m_options, option, out error);
}
set
{
object error;
NativeMethods.rs2_set_option(m_options, option, value, out error);
}
}
/// <summary>get option value description (in case specific option value hold special meaning)</summary>
/// <param name="value">value of the option</param>
/// <returns>human-readable description of a specific value of an option or null if no special meaning</returns>
public string GetValueDescription(float value)
{
object error;
var str = NativeMethods.rs2_get_option_value_description(m_options, option, value, out error);
return Marshal.PtrToStringAnsi(str);
}
public Option Key => option;
public float Min => min;
public float Max => max;
public float Step => step;
public float Default => @default;
/// <summary>Gets the option value description (in case specific option value hold special meaning)</summary>
/// <value>human-readable description of a specific value of an option or null if no special meaning</value>
public string ValueDescription => GetValueDescription(Value);
/// <summary>Gets a value indicating whether an option is read-only</summary>
/// <value><see langword="true"/> if option is read-only</value>
public bool ReadOnly
{
get
{
object error;
return NativeMethods.rs2_is_option_read_only(m_options, option, out error) != 0;
}
}
}
}