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

/* ----------------------------------------------------------
文件名称: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")));
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值