Beispiel #1
0
        void findWasatchProfiles()
        {
            if (monoUsbSession == null || monoUsbSession.IsInvalid)
            {
                return;
            }

            MonoUsbProfileList profileList = new MonoUsbProfileList();

            int deviceCount = profileList.Refresh(monoUsbSession);

            if (deviceCount < 0)
            {
                logger.error("init: Failed to retrieve device list");
                return;
            }
            logger.info("{0} device(s) found.", deviceCount);

            profiles = profileList.GetList().FindAll(predicateWasatchVid);
            foreach (MonoUsbProfile profile in profiles)
            {
                logger.info("[Device] Vid:{0:X4} Pid:{1:X4}", profile.DeviceDescriptor.VendorID, profile.DeviceDescriptor.ProductID);
                logger.info("  Descriptors: {0}", profile.DeviceDescriptor);

                for (byte i = 0; i < profile.DeviceDescriptor.ConfigurationCount; i++)
                {
                    MonoUsbConfigHandle configHandle;

                    if (MonoUsbApi.GetConfigDescriptor(profile.ProfileHandle, i, out configHandle) < 0)
                    {
                        continue;
                    }

                    if (configHandle.IsInvalid)
                    {
                        continue;
                    }

                    MonoUsbConfigDescriptor configDescriptor = new MonoUsbConfigDescriptor(configHandle);
                    logger.info("  [Config] bConfigurationValue: {0}", configDescriptor.bConfigurationValue);

                    foreach (MonoUsbInterface usbInterface in configDescriptor.InterfaceList)
                    {
                        foreach (MonoUsbAltInterfaceDescriptor usbAltInterface in usbInterface.AltInterfaceList)
                        {
                            logger.info("    [Interface] bInterfaceNumber: {0}, bAlternateSetting: {1}",
                                        usbAltInterface.bInterfaceNumber, usbAltInterface.bAlternateSetting);

                            foreach (MonoUsbEndpointDescriptor endpoint in usbAltInterface.EndpointList)
                            {
                                // Write the bEndpointAddress, EndpointType, and wMaxPacketSize to console output.
                                logger.info("      [Endpoint] bEndpointAddress: 0x{0:X2}, EndpointType: {1}, wMaxPacketSize: {2}",
                                            endpoint.bEndpointAddress, (EndpointType)(endpoint.bmAttributes & 0x3), endpoint.wMaxPacketSize);
                            }
                        }
                    }
                    configHandle.Close();
                }
                // profile.Close();
            }
        }