From ac2879d312f3cca787db0b14f27edf9359130cc3 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 19 Apr 2015 11:12:37 +0200 Subject: Initial import --- usb.go | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 usb.go (limited to 'usb.go') diff --git a/usb.go b/usb.go new file mode 100644 index 0000000..4770f92 --- /dev/null +++ b/usb.go @@ -0,0 +1,76 @@ +package main + +import ( + "bufio" + "log" + + "github.com/kylelemons/gousb/usb" +) + +type Device struct { + ctx *usb.Context + dev *usb.Device +} + +var ( + vendor = usb.ID(0x0b4d) + product = usb.ID(0x110a) + debug = 3 +) + +func CC100(desc *usb.Descriptor) bool { + return desc.Vendor == vendor && desc.Product == product +} + +func NewDevice() (d Device) { + ctx := usb.NewContext() + ctx.Debug(debug) + devs, err := ctx.ListDevices(CC100) + if err != nil { + log.Fatal(err) + } + if len(devs) != 1 { + for _, dev := range devs { + dev.Close() + } + log.Fatal("wrong number of devices") + } + return Device{ctx: ctx, dev: devs[0]} +} + +func (d Device) Close() { + d.dev.Close() + d.ctx.Close() +} + +func (d Device) Handle() *bufio.ReadWriter { + var ( + r *bufio.Reader + w *bufio.Writer + ) + + for _, c := range d.dev.Configs { + for _, i := range c.Interfaces { + for _, s := range i.Setups { + for _, ep := range s.Endpoints { + e, err := d.dev.OpenEndpoint( + c.Config, + i.Number, + s.Number, + ep.Address) + if err != nil { + log.Fatal(err) + } + switch ep.Direction() { + case usb.ENDPOINT_DIR_OUT: + w = bufio.NewWriter(e) + case usb.ENDPOINT_DIR_IN: + r = bufio.NewReader(e) + } + } + } + } + } + + return bufio.NewReadWriter(r, w) +} -- cgit v1.2.3