Initializes the usb context.
Finds all device profiles matching the MyVidPidPredicate.
Writes the VendorID and ProductID to console output.
Loops through all of the devices configurations.
Writes the bConfigurationValue to console output.
Interate through the InterfaceList.
Interate through the AltInterfaceList.
Writes the bInterfaceNumber and bAlternateSetting to console output.
Interates through the EndpointList.
Writes the bEndpointAddress, EndpointType, and wMaxPacketSize to console output.
Closes profile list and exits the usb context.
using System; using System.Collections.Generic; using LibUsbDotNet.Main; using MonoLibUsb; using MonoLibUsb.Descriptors; using MonoLibUsb.Profile; using Usb = MonoLibUsb.MonoUsbApi; namespace MonoUsb.ShowConfig { internal class ShowConfig { private static MonoUsbSessionHandle sessionHandle; // Predicate functions for finding only devices with the specified VendorID & ProductID. private static bool MyVidPidPredicate(MonoUsbProfile profile) { if (profile.DeviceDescriptor.VendorID == 0x04d8 && profile.DeviceDescriptor.ProductID == 0x0053) return true; return false; } public static void Main(string[] args) { // Initialize the context. sessionHandle = new MonoUsbSessionHandle(); if (sessionHandle.IsInvalid) throw new Exception(String.Format("Failed intialized libusb context.\n{0}:{1}", MonoUsbSessionHandle.LastErrorCode, MonoUsbSessionHandle.LastErrorString)); MonoUsbProfileList profileList = new MonoUsbProfileList(); // The list is initially empty. // Each time refresh is called the list contents are updated. int ret = profileList.Refresh(sessionHandle); if (ret < 0) throw new Exception("Failed to retrieve device list."); Console.WriteLine("{0} device(s) found.", ret); // Use the GetList() method to get a generic List of MonoUsbProfiles // Find all profiles that match in the MyVidPidPredicate. List<MonoUsbProfile> myVidPidList = profileList.GetList().FindAll(MyVidPidPredicate); // myVidPidList reresents a list of connected USB devices that matched // in MyVidPidPredicate. foreach (MonoUsbProfile profile in myVidPidList) { // Write the VendorID and ProductID to console output. Console.WriteLine("[Device] Vid:{0:X4} Pid:{1:X4}", profile.DeviceDescriptor.VendorID, profile.DeviceDescriptor.ProductID); // Loop through all of the devices configurations. for (byte i = 0; i < profile.DeviceDescriptor.ConfigurationCount; i++) { // Get a handle to the configuration. MonoUsbConfigHandle configHandle; if (MonoUsbApi.GetConfigDescriptor(profile.ProfileHandle, i, out configHandle) < 0) continue; if (configHandle.IsInvalid) continue; // Create a MonoUsbConfigDescriptor instance for this config handle. MonoUsbConfigDescriptor configDescriptor = new MonoUsbConfigDescriptor(configHandle); // Write the bConfigurationValue to console output. Console.WriteLine(" [Config] bConfigurationValue:{0}", configDescriptor.bConfigurationValue); // Interate through the InterfaceList foreach (MonoUsbInterface usbInterface in configDescriptor.InterfaceList) { // Interate through the AltInterfaceList foreach (MonoUsbAltInterfaceDescriptor usbAltInterface in usbInterface.AltInterfaceList) { // Write the bInterfaceNumber and bAlternateSetting to console output. Console.WriteLine(" [Interface] bInterfaceNumber:{0} bAlternateSetting:{1}", usbAltInterface.bInterfaceNumber, usbAltInterface.bAlternateSetting); // Interate through the EndpointList foreach (MonoUsbEndpointDescriptor endpoint in usbAltInterface.EndpointList) { // Write the bEndpointAddress, EndpointType, and wMaxPacketSize to console output. Console.WriteLine(" [Endpoint] bEndpointAddress:{0:X2} EndpointType:{1} wMaxPacketSize:{2}", endpoint.bEndpointAddress, (EndpointType) (endpoint.bmAttributes & 0x3), endpoint.wMaxPacketSize); } } } // Not neccessary, but good programming practice. configHandle.Close(); } } // Not neccessary, but good programming practice. profileList.Close(); // Not neccessary, but good programming practice. sessionHandle.Close(); } } }
Imports System Imports System.Collections.Generic Imports LibUsbDotNet.Main Imports MonoLibUsb Imports MonoLibUsb.Descriptors Imports MonoLibUsb.Profile Imports Usb = MonoLibUsb.MonoUsbApi Namespace MonoUsb.ShowConfig Friend Class ShowConfig Private Shared sessionHandle As MonoUsbSessionHandle ' Predicate functions for finding only devices with the specified VendorID & ProductID. Private Shared Function MyVidPidPredicate(profile As MonoUsbProfile) As Boolean If profile.DeviceDescriptor.VendorID = &H4d8 AndAlso profile.DeviceDescriptor.ProductID = &H53 Then Return True End If Return False End Function Public Shared Sub Main(args As String()) ' Initialize the context. sessionHandle = New MonoUsbSessionHandle() If sessionHandle.IsInvalid Then Throw New Exception([String].Format("Failed intialized libusb context." & vbLf & "{0}:{1}", MonoUsbSessionHandle.LastErrorCode, MonoUsbSessionHandle.LastErrorString)) End If Dim profileList As New MonoUsbProfileList() ' The list is initially empty. ' Each time refresh is called the list contents are updated. Dim ret As Integer = profileList.Refresh(sessionHandle) If ret < 0 Then Throw New Exception("Failed to retrieve device list.") End If Console.WriteLine("{0} device(s) found.", ret) ' Use the GetList() method to get a generic List of MonoUsbProfiles ' Find all profiles that match in the MyVidPidPredicate. Dim myVidPidList As List(Of MonoUsbProfile) = profileList.GetList().FindAll(AddressOf MyVidPidPredicate) ' myVidPidList reresents a list of connected USB devices that matched ' in MyVidPidPredicate. For Each profile As MonoUsbProfile In myVidPidList ' Write the VendorID and ProductID to console output. Console.WriteLine("[Device] Vid:{0:X4} Pid:{1:X4}", profile.DeviceDescriptor.VendorID, profile.DeviceDescriptor.ProductID) ' Loop through all of the devices configurations. For i As Byte = 0 To profile.DeviceDescriptor.ConfigurationCount - 1 ' Get a handle to the configuration. Dim configHandle As MonoUsbConfigHandle If MonoUsbApi.GetConfigDescriptor(profile.ProfileHandle, i, configHandle) < 0 Then Continue For End If If configHandle.IsInvalid Then Continue For End If ' Create a MonoUsbConfigDescriptor instance for this config handle. Dim configDescriptor As New MonoUsbConfigDescriptor(configHandle) ' Write the bConfigurationValue to console output. Console.WriteLine(" [Config] bConfigurationValue:{0}", configDescriptor.bConfigurationValue) ' Interate through the InterfaceList For Each usbInterface As MonoUsbInterface In configDescriptor.InterfaceList ' Interate through the AltInterfaceList For Each usbAltInterface As MonoUsbAltInterfaceDescriptor In usbInterface.AltInterfaceList ' Write the bInterfaceNumber and bAlternateSetting to console output. Console.WriteLine(" [Interface] bInterfaceNumber:{0} bAlternateSetting:{1}", usbAltInterface.bInterfaceNumber, usbAltInterface.bAlternateSetting) ' Interate through the EndpointList For Each endpoint As MonoUsbEndpointDescriptor In usbAltInterface.EndpointList ' Write the bEndpointAddress, EndpointType, and wMaxPacketSize to console output. Console.WriteLine(" [Endpoint] bEndpointAddress:{0:X2} EndpointType:{1} wMaxPacketSize:{2}", endpoint.bEndpointAddress, CType((endpoint.bmAttributes And &H3), EndpointType), endpoint.wMaxPacketSize) Next Next Next ' Not neccessary, but good programming practice. configHandle.Close() Next Next ' Not neccessary, but good programming practice. profileList.Close() ' Not neccessary, but good programming practice. sessionHandle.Close() End Sub End Class End Namespace
Create a new console application in your favorite designer.
Verify your project references:
System.dll
LibUsbDotNet.dll
Add/edit the main class. Copy/Paste code from one of the examples above.