您的位置:首页 > 编程语言 > C#

C#:USB设备枚举(六)生成ListView数据源

2011-11-09 11:33 281 查看
/* ----------------------------------------------------------
文件名称:ListViewUsbItem.cs

作者:秦建辉

MSN:splashcn@msn.com
QQ:36748897

博客:http://blog.csdn.net/jhqin

开发环境:
Visual Studio V2010
.NET Framework 4 Client Profile

版本历史:
V1.0	2011年11月08日
为USB设备枚举信息生成ListView数据源
------------------------------------------------------------ */
using System;
using System.Collections.Generic;
using Splash.IO.PORTS;

namespace WPFUsbView
{
/// <summary>
/// TreeView节点对象
/// </summary>
internal class ListViewUsbItem
{
/// <summary>
/// USB属性名
/// </summary>
public String Name { get; set; }

/// <summary>
/// USB属性值
/// </summary>
public String Value { get; set; }

/// <summary>
/// 构造函数
/// </summary>
/// <param name="Name">USB属性名</param>
/// <param name="Value">USB属性值</param>
public ListViewUsbItem(String Name, String Value)
{
this.Name = Name;
this.Value = Value;
}

/// <summary>
/// 生成USB属性列表
/// </summary>
/// <param name="Data">用于生成列表的USB数据</param>
/// <returns>属性列表</returns>
public static List<ListViewUsbItem> UsbDetail(Object Data)
{
if (Data is String)
{   // 机器名
String Info = Data as String;
if (!String.IsNullOrEmpty(Info))
{
String[] Content = Info.Split(new Char[] { ':' });
if (Content.Length == 2)
{
return new List<ListViewUsbItem>(1) { new ListViewUsbItem(Content[0], Content[1]) };
}
}
}
else if (Data is HostControllerInfo)
{   // 主控制器信息
HostControllerInfo Info = (HostControllerInfo)Data;
return new List<ListViewUsbItem>(3)
{
new ListViewUsbItem("Name", Info.Name),
new ListViewUsbItem("PNPDeviceID", Info.PNPDeviceID),
new ListViewUsbItem("HcdDriverKeyName", Info.HcdDriverKeyName)
};
}
else if (Data is UsbNodeInformation)
{   // USB节点信息
UsbNodeInformation Info = (UsbNodeInformation)Data;

List<ListViewUsbItem> Items = new List<ListViewUsbItem>();
Add(ref Items, Info);
return Items;
}
else if (Data is UsbNodeConnectionInformation)
{   // USB节点连接信息
UsbNodeConnectionInformation Info = (UsbNodeConnectionInformation)Data;
if(Info.ConnectionStatus != USB_CONNECTION_STATUS.DeviceConnected)
return null;

List<ListViewUsbItem> Items = new List<ListViewUsbItem>();
Add(ref Items, Info);
return Items;
}
else if (Data is ExternalHubInfo)
{   // 外部Hub信息
ExternalHubInfo Info = (ExternalHubInfo)Data;

List<ListViewUsbItem> Items = new List<ListViewUsbItem>();

// 加入USB节点信息
Items.Add(new ListViewUsbItem("Node Information:", null));
Add(ref Items, Info.NodeInfo);

// 加入USB节点连接信息
Items.Add(new ListViewUsbItem(null, null));
Items.Add(new ListViewUsbItem("Node Connection Information:", null));
Add(ref Items, Info.NodeConnectionInfo);

return Items;
}

return null;
}

/// <summary>
/// 增加USB节点信息
/// </summary>
/// <param name="Items">要增加的列表</param>
/// <param name="Info">要增加的信息</param>
private static void Add(ref List<ListViewUsbItem> Items, UsbNodeInformation Info)
{
if (Info.NodeType == USB_HUB_NODE.UsbHub)
{
Items.Add(new ListViewUsbItem("Name", Info.Name));
Items.Add(new ListViewUsbItem("PNPDeviceID", Info.PNPDeviceID));
Items.Add(new ListViewUsbItem("DevicePath", Info.DevicePath));
Items.Add(new ListViewUsbItem("NodeType", Info.NodeType.ToString()));
Items.Add(new ListViewUsbItem("HubIsBusPowered", Info.HubIsBusPowered.ToString()));
Items.Add(new ListViewUsbItem("NumberOfPorts", Info.NumberOfPorts.ToString()));
Items.Add(new ListViewUsbItem("HubCharacteristics", "0x" + Info.HubCharacteristics.ToString("X4")));
Items.Add(new ListViewUsbItem("PowerOnToPowerGood", (Info.PowerOnToPowerGood * 2).ToString() + "ms"));
Items.Add(new ListViewUsbItem("HubControlCurrent", Info.HubControlCurrent.ToString()));
}
else
{
Items.Add(new ListViewUsbItem("Name", Info.Name));
Items.Add(new ListViewUsbItem("PNPDeviceID", Info.PNPDeviceID));
Items.Add(new ListViewUsbItem("DevicePath", Info.DevicePath));
Items.Add(new ListViewUsbItem("NodeType", Info.NodeType.ToString()));
Items.Add(new ListViewUsbItem("NumberOfInterfaces", Info.NumberOfInterfaces.ToString()));
}
}

/// <summary>
/// 增加USB节点连接信息
/// </summary>
/// <param name="Items">要增加的列表</param>
/// <param name="Info">要增加的信息</param>
private static void Add(ref List<ListViewUsbItem> Items, UsbNodeConnectionInformation Info)
{
Items.Add(new ListViewUsbItem("DevicePath", Info.DevicePath));
Items.Add(new ListViewUsbItem("ConnectionIndex", Info.ConnectionIndex.ToString()));
Items.Add(new ListViewUsbItem("CurrentConfigurationValue", "0x" + Info.CurrentConfigurationValue.ToString("X2")));
Items.Add(new ListViewUsbItem("Speed", ((USB_DEVICE_SPEED)Info.Speed).ToString()));
Items.Add(new ListViewUsbItem("DeviceIsHub", Info.DeviceIsHub.ToString()));
Items.Add(new ListViewUsbItem("DeviceAddress", Info.DeviceAddress.ToString()));
Items.Add(new ListViewUsbItem("NumberOfOpenPipes", Info.NumberOfOpenPipes.ToString()));

// 设备描述符
Items.Add(new ListViewUsbItem(null, null));
Items.Add(new ListViewUsbItem("Device Descriptor:", null));
Items.Add(new ListViewUsbItem("DescriptorType", "0x" + Info.DeviceDescriptor.bDescriptorType.ToString("X2")));
Items.Add(new ListViewUsbItem("UsbVersion", Info.DeviceDescriptor.UsbVersion));
Items.Add(new ListViewUsbItem("DeviceClass", "0x" + Info.DeviceDescriptor.bDeviceClass.ToString("X2")));
Items.Add(new ListViewUsbItem("DeviceSubClass", "0x" + Info.DeviceDescriptor.bDeviceSubClass.ToString("X2")));
Items.Add(new ListViewUsbItem("DeviceProtocol", "0x" + Info.DeviceDescriptor.bDeviceProtocol.ToString("X2")));
Items.Add(new ListViewUsbItem("MaxPacketSize0", Info.DeviceDescriptor.bMaxPacketSize0.ToString()));
Items.Add(new ListViewUsbItem("idVendor", "0x" + Info.DeviceDescriptor.idVendor.ToString("X4")));
Items.Add(new ListViewUsbItem("idProduct", "0x" + Info.DeviceDescriptor.idProduct.ToString("X4")));
Items.Add(new ListViewUsbItem("DeviceVersion", Info.DeviceDescriptor.DeviceVersion));
Items.Add(new ListViewUsbItem("Manufacturer", Info.DeviceDescriptor.Manufacturer));
Items.Add(new ListViewUsbItem("Product", Info.DeviceDescriptor.Product));
Items.Add(new ListViewUsbItem("SerialNumber", Info.DeviceDescriptor.SerialNumber));
Items.Add(new ListViewUsbItem("NumConfigurations", Info.DeviceDescriptor.bNumConfigurations.ToString()));

// 管道信息
foreach (UsbPipeInfo Pipe in Info.PipeList)
{
Items.Add(new ListViewUsbItem(null, null));
Items.Add(new ListViewUsbItem("Endpoint Descriptor:", null));
Items.Add(new ListViewUsbItem("ScheduleOffset", Pipe.ScheduleOffset.ToString()));
Items.Add(new ListViewUsbItem("DescriptorType", "0x" + Pipe.bDescriptorType.ToString("X2")));
Items.Add(new ListViewUsbItem("EndpointAddress", "0x" + Pipe.bEndpointAddress.ToString("X2")));
Items.Add(new ListViewUsbItem("bmAttributes", "0x" + Pipe.bmAttributes.ToString("X2")));
Items.Add(new ListViewUsbItem("MaxPacketSize", Pipe.wMaxPacketSize.ToString()));
Items.Add(new ListViewUsbItem("Interval", "0x" + Pipe.bInterval.ToString("X2")));
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息