Output cleanup
This commit is contained in:
1
lsusb/.gitignore
vendored
Normal file
1
lsusb/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
lsusb
|
72
lsusb/main.go
Normal file
72
lsusb/main.go
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"flag"
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"github.com/kylelemons/gousb/usb"
|
||||||
|
"github.com/kylelemons/gousb/usbid"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
ctx = usb.NewContext()
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
debug = flag.Int("debug", 0, "libusb debug level (0..3)")
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
flag.Parse()
|
||||||
|
ctx.Debug(*debug)
|
||||||
|
|
||||||
|
devs, err := ctx.ListDevices(func(bus, addr int, desc *usb.Descriptor) bool { return true })
|
||||||
|
defer func() {
|
||||||
|
for _, d := range devs {
|
||||||
|
d.Close()
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("list: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, dev := range devs {
|
||||||
|
desc, err := dev.Descriptor()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("desc: %s", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
bus := dev.BusNumber()
|
||||||
|
addr := dev.Address()
|
||||||
|
|
||||||
|
fmt.Printf("%03d:%03d %s\n", bus, addr, usbid.Describe(desc))
|
||||||
|
fmt.Printf(" Protocol: %s\n", usbid.Classify(desc))
|
||||||
|
|
||||||
|
cfgs, err := dev.Configurations()
|
||||||
|
defer func() {
|
||||||
|
for _, cfg := range cfgs {
|
||||||
|
cfg.Close()
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf(" - configs: %s", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, cfg := range cfgs {
|
||||||
|
fmt.Printf(" %s:\n", cfg)
|
||||||
|
for _, alt := range cfg.Interfaces {
|
||||||
|
fmt.Printf(" --------------\n")
|
||||||
|
for _, iface := range alt {
|
||||||
|
fmt.Printf(" %s\n", iface)
|
||||||
|
fmt.Printf(" %s\n", usbid.Classify(iface))
|
||||||
|
for _, end := range iface.Endpoints {
|
||||||
|
fmt.Printf(" %s\n", end)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Printf(" --------------\n")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -6,7 +6,6 @@ import "C"
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
"reflect"
|
"reflect"
|
||||||
"runtime"
|
"runtime"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
@@ -126,7 +125,7 @@ func newConfig(cfg *C.struct_libusb_config_descriptor) *Config {
|
|||||||
// *sigh*
|
// *sigh*
|
||||||
runtime.SetFinalizer(c, (*Config).Close)
|
runtime.SetFinalizer(c, (*Config).Close)
|
||||||
|
|
||||||
log.Printf("config %p initialized", c.cfg)
|
//log.Printf("config %p initialized", c.cfg)
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,7 +133,7 @@ func newConfig(cfg *C.struct_libusb_config_descriptor) *Config {
|
|||||||
// code. It should be called exactly once!
|
// code. It should be called exactly once!
|
||||||
func (c *Config) Close() error {
|
func (c *Config) Close() error {
|
||||||
if c.cfg != nil {
|
if c.cfg != nil {
|
||||||
log.Printf("config %p closed", c.cfg)
|
//log.Printf("config %p closed", c.cfg)
|
||||||
C.libusb_free_config_descriptor(c.cfg)
|
C.libusb_free_config_descriptor(c.cfg)
|
||||||
}
|
}
|
||||||
c.cfg = nil
|
c.cfg = nil
|
||||||
|
@@ -5,7 +5,6 @@ package usb
|
|||||||
import "C"
|
import "C"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
|
||||||
"reflect"
|
"reflect"
|
||||||
"runtime"
|
"runtime"
|
||||||
"time"
|
"time"
|
||||||
@@ -27,7 +26,7 @@ func newDeviceInfo(dev *C.libusb_device) *DeviceInfo {
|
|||||||
// I still can't get this to be called
|
// I still can't get this to be called
|
||||||
runtime.SetFinalizer(d, (*DeviceInfo).Close)
|
runtime.SetFinalizer(d, (*DeviceInfo).Close)
|
||||||
|
|
||||||
log.Printf("deviceInfo %p initialized", d.dev)
|
//log.Printf("deviceInfo %p initialized", d.dev)
|
||||||
return d
|
return d
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,7 +59,7 @@ func (d *DeviceInfo) Open() (*Device, error) {
|
|||||||
// code. It should be called exactly once!
|
// code. It should be called exactly once!
|
||||||
func (d *DeviceInfo) Close() error {
|
func (d *DeviceInfo) Close() error {
|
||||||
if d.dev != nil {
|
if d.dev != nil {
|
||||||
log.Printf("deviceInfo %p closed", d.dev)
|
//log.Printf("deviceInfo %p closed", d.dev)
|
||||||
C.libusb_unref_device(d.dev)
|
C.libusb_unref_device(d.dev)
|
||||||
}
|
}
|
||||||
d.dev = nil
|
d.dev = nil
|
||||||
@@ -79,7 +78,7 @@ func newDevice(handle *C.libusb_device_handle) *Device {
|
|||||||
// :(
|
// :(
|
||||||
runtime.SetFinalizer(d, (*Device).Close)
|
runtime.SetFinalizer(d, (*Device).Close)
|
||||||
|
|
||||||
log.Printf("device %p initialized", d.handle)
|
//log.Printf("device %p initialized", d.handle)
|
||||||
return d
|
return d
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,7 +124,7 @@ func (d *Device) SetConfig(cfg int) error {
|
|||||||
|
|
||||||
func (d *Device) Close() error {
|
func (d *Device) Close() error {
|
||||||
if d.handle != nil {
|
if d.handle != nil {
|
||||||
log.Printf("device %p closed", d.handle)
|
//log.Printf("device %p closed", d.handle)
|
||||||
C.libusb_unref_device(d.handle)
|
C.libusb_unref_device(d.handle)
|
||||||
}
|
}
|
||||||
d.handle = nil
|
d.handle = nil
|
||||||
|
@@ -5,7 +5,6 @@ package usb
|
|||||||
import "C"
|
import "C"
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
|
||||||
"reflect"
|
"reflect"
|
||||||
"runtime"
|
"runtime"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
@@ -22,7 +21,7 @@ func (c *Context) Debug(level int) {
|
|||||||
func NewContext() *Context {
|
func NewContext() *Context {
|
||||||
c := new(Context)
|
c := new(Context)
|
||||||
|
|
||||||
log.Printf("gousb initialized")
|
//log.Printf("gousb initialized")
|
||||||
if errno := C.libusb_init(&c.ctx); errno != 0 {
|
if errno := C.libusb_init(&c.ctx); errno != 0 {
|
||||||
panic(usbError(errno))
|
panic(usbError(errno))
|
||||||
}
|
}
|
||||||
@@ -69,7 +68,7 @@ func (c *Context) ListDevices(each func(bus, addr int, desc *Descriptor) bool) (
|
|||||||
func (c *Context) Close() error {
|
func (c *Context) Close() error {
|
||||||
if c.ctx != nil {
|
if c.ctx != nil {
|
||||||
C.libusb_exit(c.ctx)
|
C.libusb_exit(c.ctx)
|
||||||
log.Printf("gousb finished")
|
//log.Printf("gousb finished")
|
||||||
}
|
}
|
||||||
c.ctx = nil
|
c.ctx = nil
|
||||||
return nil
|
return nil
|
||||||
|
Reference in New Issue
Block a user