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

215 篇文章 2 订阅
120 篇文章 3 订阅

作者:Splash

转自:http://blog.csdn.net/jhqin/article/details/6951738


[csharp] view plain copy
  1. /* ---------------------------------------------------------- 
  2. 文件名称:ListViewUsbItem.cs 
  3.  
  4. 作者:秦建辉 
  5.  
  6. MSN:splashcn@msn.com 
  7. QQ:36748897 
  8.  
  9. 博客:http://blog.csdn.net/jhqin 
  10.  
  11. 开发环境: 
  12.     Visual Studio V2010 
  13.     .NET Framework 4 Client Profile 
  14.  
  15. 版本历史:     
  16.     V1.0    2011年11月08日 
  17.             为USB设备枚举信息生成ListView数据源 
  18. ------------------------------------------------------------ */  
  19. using System;  
  20. using System.Collections.Generic;  
  21. using Splash.IO.PORTS;  
  22.   
  23. namespace WPFUsbView  
  24. {  
  25.     /// <summary>  
  26.     /// TreeView节点对象  
  27.     /// </summary>  
  28.     internal class ListViewUsbItem  
  29.     {  
  30.         /// <summary>  
  31.         /// USB属性名  
  32.         /// </summary>  
  33.         public String Name { getset; }  
  34.   
  35.         /// <summary>  
  36.         /// USB属性值  
  37.         /// </summary>  
  38.         public String Value { getset; }  
  39.   
  40.         /// <summary>  
  41.         /// 构造函数  
  42.         /// </summary>  
  43.         /// <param name="Name">USB属性名</param>  
  44.         /// <param name="Value">USB属性值</param>  
  45.         public ListViewUsbItem(String Name, String Value)  
  46.         {  
  47.             this.Name = Name;  
  48.             this.Value = Value;  
  49.         }  
  50.   
  51.         /// <summary>  
  52.         /// 生成USB属性列表  
  53.         /// </summary>  
  54.         /// <param name="Data">用于生成列表的USB数据</param>  
  55.         /// <returns>属性列表</returns>  
  56.         public static List<ListViewUsbItem> UsbDetail(Object Data)  
  57.         {  
  58.             if (Data is String)  
  59.             {   // 机器名  
  60.                 String Info = Data as String;  
  61.                 if (!String.IsNullOrEmpty(Info))  
  62.                 {  
  63.                     String[] Content = Info.Split(new Char[] { ':' });  
  64.                     if (Content.Length == 2)  
  65.                     {  
  66.                         return new List<ListViewUsbItem>(1) { new ListViewUsbItem(Content[0], Content[1]) };  
  67.                     }  
  68.                 }  
  69.             }  
  70.             else if (Data is HostControllerInfo)  
  71.             {   // 主控制器信息  
  72.                 HostControllerInfo Info = (HostControllerInfo)Data;  
  73.                 return new List<ListViewUsbItem>(3)  
  74.                 {  
  75.                     new ListViewUsbItem("Name", Info.Name),   
  76.                     new ListViewUsbItem("PNPDeviceID", Info.PNPDeviceID),                                         
  77.                     new ListViewUsbItem("HcdDriverKeyName", Info.HcdDriverKeyName)  
  78.                 };  
  79.             }  
  80.             else if (Data is UsbNodeInformation)  
  81.             {   // USB节点信息  
  82.                 UsbNodeInformation Info = (UsbNodeInformation)Data;  
  83.   
  84.                 List<ListViewUsbItem> Items = new List<ListViewUsbItem>();  
  85.                 Add(ref Items, Info);  
  86.                 return Items;                  
  87.             }  
  88.             else if (Data is UsbNodeConnectionInformation)  
  89.             {   // USB节点连接信息  
  90.                 UsbNodeConnectionInformation Info = (UsbNodeConnectionInformation)Data;  
  91.                 if(Info.ConnectionStatus != USB_CONNECTION_STATUS.DeviceConnected)  
  92.                     return null;  
  93.   
  94.                 List<ListViewUsbItem> Items = new List<ListViewUsbItem>();  
  95.                 Add(ref Items, Info);  
  96.                 return Items;          
  97.             }  
  98.             else if (Data is ExternalHubInfo)  
  99.             {   // 外部Hub信息  
  100.                 ExternalHubInfo Info = (ExternalHubInfo)Data;  
  101.   
  102.                 List<ListViewUsbItem> Items = new List<ListViewUsbItem>();  
  103.   
  104.                 // 加入USB节点信息  
  105.                 Items.Add(new ListViewUsbItem("Node Information:"null));  
  106.                 Add(ref Items, Info.NodeInfo);  
  107.   
  108.                 // 加入USB节点连接信息  
  109.                 Items.Add(new ListViewUsbItem(nullnull));  
  110.                 Items.Add(new ListViewUsbItem("Node Connection Information:"null));  
  111.                 Add(ref Items, Info.NodeConnectionInfo);  
  112.   
  113.                 return Items;  
  114.             }  
  115.   
  116.             return null;  
  117.         }  
  118.   
  119.         /// <summary>  
  120.         /// 增加USB节点信息  
  121.         /// </summary>  
  122.         /// <param name="Items">要增加的列表</param>  
  123.         /// <param name="Info">要增加的信息</param>  
  124.         private static void Add(ref List<ListViewUsbItem> Items, UsbNodeInformation Info)  
  125.         {  
  126.             if (Info.NodeType == USB_HUB_NODE.UsbHub)  
  127.             {  
  128.                 Items.Add(new ListViewUsbItem("Name", Info.Name));  
  129.                 Items.Add(new ListViewUsbItem("PNPDeviceID", Info.PNPDeviceID));  
  130.                 Items.Add(new ListViewUsbItem("DevicePath", Info.DevicePath));  
  131.                 Items.Add(new ListViewUsbItem("NodeType", Info.NodeType.ToString()));  
  132.                 Items.Add(new ListViewUsbItem("HubIsBusPowered", Info.HubIsBusPowered.ToString()));  
  133.                 Items.Add(new ListViewUsbItem("NumberOfPorts", Info.NumberOfPorts.ToString()));  
  134.                 Items.Add(new ListViewUsbItem("HubCharacteristics""0x" + Info.HubCharacteristics.ToString("X4")));  
  135.                 Items.Add(new ListViewUsbItem("PowerOnToPowerGood", (Info.PowerOnToPowerGood * 2).ToString() + "ms"));  
  136.                 Items.Add(new ListViewUsbItem("HubControlCurrent", Info.HubControlCurrent.ToString()));  
  137.             }  
  138.             else  
  139.             {  
  140.                 Items.Add(new ListViewUsbItem("Name", Info.Name));  
  141.                 Items.Add(new ListViewUsbItem("PNPDeviceID", Info.PNPDeviceID));  
  142.                 Items.Add(new ListViewUsbItem("DevicePath", Info.DevicePath));  
  143.                 Items.Add(new ListViewUsbItem("NodeType", Info.NodeType.ToString()));  
  144.                 Items.Add(new ListViewUsbItem("NumberOfInterfaces", Info.NumberOfInterfaces.ToString()));  
  145.             }  
  146.         }  
  147.   
  148.         /// <summary>  
  149.         /// 增加USB节点连接信息  
  150.         /// </summary>  
  151.         /// <param name="Items">要增加的列表</param>  
  152.         /// <param name="Info">要增加的信息</param>  
  153.         private static void Add(ref List<ListViewUsbItem> Items, UsbNodeConnectionInformation Info)  
  154.         {  
  155.             Items.Add(new ListViewUsbItem("DevicePath", Info.DevicePath));  
  156.             Items.Add(new ListViewUsbItem("ConnectionIndex", Info.ConnectionIndex.ToString()));  
  157.             Items.Add(new ListViewUsbItem("CurrentConfigurationValue""0x" + Info.CurrentConfigurationValue.ToString("X2")));  
  158.             Items.Add(new ListViewUsbItem("Speed", ((USB_DEVICE_SPEED)Info.Speed).ToString()));  
  159.             Items.Add(new ListViewUsbItem("DeviceIsHub", Info.DeviceIsHub.ToString()));  
  160.             Items.Add(new ListViewUsbItem("DeviceAddress", Info.DeviceAddress.ToString()));  
  161.             Items.Add(new ListViewUsbItem("NumberOfOpenPipes", Info.NumberOfOpenPipes.ToString()));  
  162.   
  163.             // 设备描述符  
  164.             Items.Add(new ListViewUsbItem(nullnull));  
  165.             Items.Add(new ListViewUsbItem("Device Descriptor:"null));  
  166.             Items.Add(new ListViewUsbItem("DescriptorType""0x" + Info.DeviceDescriptor.bDescriptorType.ToString("X2")));  
  167.             Items.Add(new ListViewUsbItem("UsbVersion", Info.DeviceDescriptor.UsbVersion));  
  168.             Items.Add(new ListViewUsbItem("DeviceClass""0x" + Info.DeviceDescriptor.bDeviceClass.ToString("X2")));  
  169.             Items.Add(new ListViewUsbItem("DeviceSubClass""0x" + Info.DeviceDescriptor.bDeviceSubClass.ToString("X2")));  
  170.             Items.Add(new ListViewUsbItem("DeviceProtocol""0x" + Info.DeviceDescriptor.bDeviceProtocol.ToString("X2")));  
  171.             Items.Add(new ListViewUsbItem("MaxPacketSize0", Info.DeviceDescriptor.bMaxPacketSize0.ToString()));  
  172.             Items.Add(new ListViewUsbItem("idVendor""0x" + Info.DeviceDescriptor.idVendor.ToString("X4")));  
  173.             Items.Add(new ListViewUsbItem("idProduct""0x" + Info.DeviceDescriptor.idProduct.ToString("X4")));  
  174.             Items.Add(new ListViewUsbItem("DeviceVersion", Info.DeviceDescriptor.DeviceVersion));  
  175.             Items.Add(new ListViewUsbItem("Manufacturer", Info.DeviceDescriptor.Manufacturer));  
  176.             Items.Add(new ListViewUsbItem("Product", Info.DeviceDescriptor.Product));  
  177.             Items.Add(new ListViewUsbItem("SerialNumber", Info.DeviceDescriptor.SerialNumber));  
  178.             Items.Add(new ListViewUsbItem("NumConfigurations", Info.DeviceDescriptor.bNumConfigurations.ToString()));  
  179.   
  180.             // 管道信息  
  181.             foreach (UsbPipeInfo Pipe in Info.PipeList)  
  182.             {  
  183.                 Items.Add(new ListViewUsbItem(nullnull));  
  184.                 Items.Add(new ListViewUsbItem("Endpoint Descriptor:"null));  
  185.                 Items.Add(new ListViewUsbItem("ScheduleOffset", Pipe.ScheduleOffset.ToString()));  
  186.                 Items.Add(new ListViewUsbItem("DescriptorType""0x" + Pipe.bDescriptorType.ToString("X2")));  
  187.                 Items.Add(new ListViewUsbItem("EndpointAddress""0x" + Pipe.bEndpointAddress.ToString("X2")));  
  188.                 Items.Add(new ListViewUsbItem("bmAttributes""0x" + Pipe.bmAttributes.ToString("X2")));  
  189.                 Items.Add(new ListViewUsbItem("MaxPacketSize", Pipe.wMaxPacketSize.ToString()));  
  190.                 Items.Add(new ListViewUsbItem("Interval""0x" + Pipe.bInterval.ToString("X2")));  
  191.             }  
  192.         }  
  193.     }  
  194. }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值