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
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));
|
|
}
|
|
}
|
|
}
|