This class is used for perform I/O and other operations on Libusb-1.0 devices using with LibUsbDotNet.
This class is not a part of the low-level MonLibUsb API. This is UsbDevice class LibUsbDotNet uses to implement the low-level MonoLibUsb API.
internal UsbConfigInfo(MonoUsbDevice usbDevice, MonoUsbConfigDescriptor configDescriptor) { mUsbDevice = usbDevice; mUsbConfigDescriptor = new UsbConfigDescriptor(configDescriptor); List<MonoUsbInterface> monoUSBInterfaces = configDescriptor.InterfaceList; foreach (MonoUsbInterface usbInterface in monoUSBInterfaces) { List<MonoUsbAltInterfaceDescriptor> monoUSBAltInterfaces = usbInterface.AltInterfaceList; foreach (MonoUsbAltInterfaceDescriptor monoUSBAltInterface in monoUSBAltInterfaces) { UsbInterfaceInfo usbInterfaceInfo = new UsbInterfaceInfo(mUsbDevice, monoUSBAltInterface); mInterfaceList.Add(usbInterfaceInfo); } } }
private static ErrorCode GetConfigs(MonoUsbDevice usbDevice, out List <UsbConfigInfo> configInfoListRtn) { configInfoListRtn = new List <UsbConfigInfo>(); UsbError usbError = null; List <MonoUsbConfigDescriptor> configList = new List <MonoUsbConfigDescriptor>(); int iConfigs = usbDevice.Info.Descriptor.ConfigurationCount; for (int iConfig = 0; iConfig < iConfigs; iConfig++) { MonoUsbConfigHandle nextConfigHandle; int ret = MonoUsbApi.GetConfigDescriptor(usbDevice.mMonoUSBProfile.ProfileHandle, (byte)iConfig, out nextConfigHandle); Debug.Print("GetConfigDescriptor:{0}", ret); if (ret != 0 || nextConfigHandle.IsInvalid) { usbError = UsbError.Error(ErrorCode.MonoApiError, ret, String.Format("GetConfigDescriptor Failed at index:{0}", iConfig), usbDevice); return(usbError.ErrorCode); } try { MonoUsbConfigDescriptor nextConfig = new MonoUsbConfigDescriptor(); Marshal.PtrToStructure(nextConfigHandle.DangerousGetHandle(), nextConfig); UsbConfigInfo nextConfigInfo = new UsbConfigInfo(usbDevice, nextConfig); configInfoListRtn.Add(nextConfigInfo); } catch (Exception ex) { UsbError.Error(ErrorCode.InvalidConfig, Marshal.GetLastWin32Error(), ex.ToString(), usbDevice); } finally { if (!nextConfigHandle.IsInvalid) { nextConfigHandle.Close(); } } } return(ErrorCode.Success); }
private static ErrorCode GetConfigs(MonoUsbDevice usbDevice, out List<UsbConfigInfo> configInfoListRtn) { configInfoListRtn = new List<UsbConfigInfo>(); UsbError usbError = null; List<MonoUsbConfigDescriptor> configList = new List<MonoUsbConfigDescriptor>(); int iConfigs = usbDevice.Info.Descriptor.ConfigurationCount; for (int iConfig = 0; iConfig < iConfigs; iConfig++) { MonoUsbConfigHandle nextConfigHandle; int ret = MonoUsbApi.GetConfigDescriptor(usbDevice.mMonoUSBProfile.ProfileHandle, (byte) iConfig, out nextConfigHandle); Debug.WriteLine(string.Format("GetConfigDescriptor:{0}", ret)); if (ret != 0 || nextConfigHandle.IsInvalid) { usbError = UsbError.Error(ErrorCode.MonoApiError, ret, String.Format("GetConfigDescriptor Failed at index:{0}", iConfig), usbDevice); return usbError.ErrorCode; } try { MonoUsbConfigDescriptor nextConfig = new MonoUsbConfigDescriptor(); Marshal.PtrToStructure(nextConfigHandle.DangerousGetHandle(), nextConfig); UsbConfigInfo nextConfigInfo = new UsbConfigInfo(usbDevice, nextConfig); configInfoListRtn.Add(nextConfigInfo); } catch (Exception ex) { UsbError.Error(ErrorCode.InvalidConfig, Marshal.GetLastWin32Error(), ex.ToString(), usbDevice); } finally { if (!nextConfigHandle.IsInvalid) nextConfigHandle.Dispose(); } } return ErrorCode.Success; }