package pages import ( "fmt" "os" "github.com/HikariKnight/quickpassthrough/internal/configs" lsiommu "github.com/HikariKnight/quickpassthrough/internal/lsiommu" "github.com/HikariKnight/quickpassthrough/pkg/command" "github.com/HikariKnight/quickpassthrough/pkg/menu" "github.com/gookit/color" ) func selectUSB(config *configs.Config) { // Clear the screen command.Clear() // Get the users GPUs usbs := lsiommu.GetIOMMU("-u", "-F", "vendor:,prod_name,optional_revision:,device_id") // Generate a list of choices based on the GPUs and get the users selection choice := menu.GenIOMMUMenu("Select a USB to view the IOMMU groups of", usbs, 1) // Parse the choice switch choice { case "back": disableVideo(config) case "": // If ESC is pressed fmt.Println("") os.Exit(0) default: // View the selected GPU viewUSB(choice, config) } } func viewUSB(id string, config *configs.Config, ext ...int) { // Clear the screen command.Clear() // Set mode to relative mode := "-r" // Set mode to relative extended if len(ext) > 0 { mode = "-rr" } // Get the IOMMU listings for USB controllers group := lsiommu.GetIOMMU("-u", mode, "-i", id, "-F", "vendor:,prod_name,optional_revision:,device_id") // Write a title title := color.New(color.BgHiBlue, color.White, color.Bold) title.Println("This list should only show the USB controller") // Print all the usb controllers for _, v := range group { fmt.Println(v) } // Add a new line for tidyness fmt.Println("") // Make an empty string var choice string // Ask if we shall use the devices for passthrough if len(ext) == 0 { choice = menu.YesNo("Use all listed devices for passthrough?") } else { choice = menu.YesNoEXT("Use all listed devices for passthrough?") } // Parse the choice switch choice { case "": // If ESC is pressed fmt.Println("") os.Exit(0) case "n": // Go back to selecting a gpu selectUSB(config) case "y": // Go to the select a usb controller } }