50 lines
920 B
Go
50 lines
920 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
func ProcUSB(devpath string) (segment string, err error) {
|
|
var (
|
|
bus, conf, iface int
|
|
port_path []int
|
|
work string
|
|
)
|
|
|
|
res := strings.Split(devpath, ":")
|
|
if len(res) != 2 {
|
|
err = ErrInvalidUSBFormat
|
|
return
|
|
}
|
|
|
|
// Bus and ports
|
|
if _, err = fmt.Sscanf(res[0], "%d-%s", &bus, &work); err != nil {
|
|
err = ErrInvalidUSBFormat
|
|
return
|
|
}
|
|
|
|
for _, v := range strings.Split(work, ".") {
|
|
var cp int
|
|
if _, err = fmt.Sscanf(v, "%d", &cp); err != nil {
|
|
err = ErrInvalidUSBFormat
|
|
return
|
|
}
|
|
port_path = append(port_path, cp)
|
|
}
|
|
|
|
// Configuration and interface
|
|
if _, err = fmt.Sscanf(res[1], "%d.%d", &conf, &iface); err != nil {
|
|
err = ErrInvalidUSBFormat
|
|
return
|
|
}
|
|
|
|
var b strings.Builder
|
|
for _, v := range port_path {
|
|
b.WriteString(fmt.Sprintf("u%d", v))
|
|
}
|
|
b.WriteString(fmt.Sprintf("i%d", iface))
|
|
segment = b.String()
|
|
return
|
|
}
|