package goadb import ( "fmt" "os/exec" "strings" ) // Pair a device using the 6 digit code func PairDevice(endpoint string, code string) error { _, err := ExecuteCommand(fmt.Sprintf("pair %s %s", endpoint, code)) return err } // Connect to a device func ConnectDevice(endpoint string) (*Device,error) { //todo: check if the device is paired before connecting _, err := ExecuteCommand("connect " + endpoint) if err != nil { return nil,err } d := &Device{Serial: endpoint} return d,err } // Get the already connected adb devices func GetConnectedDevices() ([]Device, error) { var devices []Device output, err := ExecuteCommand("devices") if err != nil { return nil, fmt.Errorf("Failed to determine device status: %w", err) } lines := strings.Split(string(output), "\n") for _, line := range lines { if strings.Contains(line, "device") && !strings.Contains(line, "List of") { fields := strings.Fields(line) if len(fields) >= 2 && fields[1] == "device" { devices = append(devices, Device{Serial: fields[0]}) } } } return devices, nil } // Execute a raw adb command and return the output func ExecuteCommand(command string) ([]byte, error) { //Check if adb is available if _, err := exec.LookPath("adb"); err != nil { return nil, fmt.Errorf("adb binary not found in PATH") } cmd := exec.Command("sh", "-c", "adb "+command) output, err := cmd.CombinedOutput() if err != nil { return nil, fmt.Errorf("command failed: %v", err) } return output, nil }