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.

114 lines
3.8 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.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.InteropServices;
[DebuggerTypeProxy(typeof(DeviceListDebugView))]
[DebuggerDisplay("Count = {Count}")]
public class DeviceList : Base.Object, IEnumerable<Device>
{
internal static readonly Base.Deleter DeviceDeleter = NativeMethods.rs2_delete_device;
internal sealed class DeviceListDebugView
{
private readonly DeviceList dl;
[DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
public Device[] Items
{
get
{
Device[] array = new Device[dl.Count];
for (int i = 0; i < dl.Count; i++)
{
array.SetValue(dl[i], i);
}
return array;
}
}
public DeviceListDebugView(DeviceList optionList)
{
if (optionList == null)
{
throw new ArgumentNullException(nameof(optionList));
}
dl = optionList;
}
}
/// <summary>
/// Initializes a new instance of the <see cref="DeviceList"/> class.
/// </summary>
/// <param name="ptr">Native <c>rs2_device_list*</c> pointer</param>
public DeviceList(IntPtr ptr)
: base(ptr, NativeMethods.rs2_delete_device_list)
{
}
/// <summary>
/// Returns an iterable of devices in the list
/// </summary>
/// <returns>an iterable of devices in the list</returns>
public IEnumerator<Device> GetEnumerator()
{
object error;
int deviceCount = NativeMethods.rs2_get_device_count(Handle, out error);
for (int i = 0; i < deviceCount; i++)
{
var ptr = NativeMethods.rs2_create_device(Handle, i, out error);
yield return Device.Create<Device>(ptr, NativeMethods.rs2_delete_device);
}
}
/// <inheritdoc/>
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
/// <summary>Gets the number of devices in a list.</summary>
/// <value>Device count</value>
public int Count
{
get
{
object error;
int deviceCount = NativeMethods.rs2_get_device_count(Handle, out error);
return deviceCount;
}
}
/// <summary>Creates a device by index. The device object represents a physical camera and provides the means to manipulate it.</summary>
/// <param name="index">The zero based index of device to retrieve</param>
/// <returns>The requested device, should be released by rs2_delete_device</returns>
public Device this[int index]
{
get
{
object error;
var ptr = NativeMethods.rs2_create_device(Handle, index, out error);
return Device.Create<Device>(ptr, NativeMethods.rs2_delete_device);
}
}
/// <summary>Checks if a specific device is contained inside a device list.</summary>
/// <param name="device">RealSense device to check for</param>
/// <returns>True if the device is in the list and false otherwise</returns>
public bool Contains(Device device)
{
object error;
return System.Convert.ToBoolean(NativeMethods.rs2_device_list_contains(Handle, device.Handle, out error));
}
}
}