Tidy up interfaces and pretty printing

This commit is contained in:
Kyle Lemons
2012-03-26 22:37:25 -07:00
parent ba2dd5404f
commit 0f572675c9
7 changed files with 222 additions and 71 deletions

48
usbid/describe.go Normal file
View File

@@ -0,0 +1,48 @@
package usbid
import (
"fmt"
"github.com/kylelemons/gousb/usb"
)
// Describe one of the following:
// - *usb.Descriptor Product (Vendor)
func Describe(val interface{}) string {
switch val := val.(type) {
case *usb.Descriptor:
if v, ok := Vendors[val.Vendor]; ok {
if d, ok := v.Product[val.Product]; ok {
return fmt.Sprintf("%s (%s)", d, v)
}
return fmt.Sprintf("Unknown (%s)", v)
}
return fmt.Sprintf("Unknown %s:%s", val.Vendor, val.Product)
}
return fmt.Sprintf("Unknown (%T)", val)
}
// Classify one of the following:
// - *usb.Descriptor Class SubClass Protocol
func Classify(val interface{}) string {
var class, sub, proto uint8
switch val := val.(type) {
case *usb.Descriptor:
class, sub, proto = val.Class, val.SubClass, val.Protocol
case *usb.Interface:
class, sub, proto = val.IfClass, val.IfSubClass, val.IfProtocol
default:
return fmt.Sprintf("Unknown (%T)", val)
}
if c, ok := Classes[class]; ok {
if s, ok := c.SubClass[sub]; ok {
if p, ok := s.Protocol[proto]; ok {
return fmt.Sprintf("%s (%s) %s", c, s, p)
}
return fmt.Sprintf("%s (%s)", c, s)
}
return fmt.Sprintf("%s", c)
}
return fmt.Sprintf("Unknown %s.%s.%s", class, sub, proto)
}