From 90716ee069dd0f400a60896ae438c13745531dba Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 24 Sep 2016 03:18:42 +0200 Subject: rename files --- dev.go | 31 +++++++++++++++++ dev_darwin.go | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ dev_linux.go | 7 ++++ dev_openbsd.go | 8 +++++ device.go | 7 ---- device_darwin.go | 5 --- device_linux.go | 5 --- device_openbsd.go | 6 ---- lp.go | 31 ----------------- usb_darwin.go | 98 --------------------------------------------------- 10 files changed, 148 insertions(+), 152 deletions(-) create mode 100644 dev.go create mode 100644 dev_darwin.go create mode 100644 dev_linux.go create mode 100644 dev_openbsd.go delete mode 100644 device.go delete mode 100644 device_darwin.go delete mode 100644 device_linux.go delete mode 100644 device_openbsd.go delete mode 100644 lp.go delete mode 100644 usb_darwin.go diff --git a/dev.go b/dev.go new file mode 100644 index 0000000..b10ba2a --- /dev/null +++ b/dev.go @@ -0,0 +1,31 @@ +package robo + +import ( + "bufio" + "os" + "syscall" +) + +type LP struct { + *os.File +} + +func NewLP(path string) (LP, error) { + f, err := os.OpenFile(path, os.O_RDWR, 0666) + return LP{f}, err +} + +func (d LP) Close() error { + return d.File.Close() +} + +func (d LP) SetNonblock() { + fd := d.File.Fd() + syscall.SetNonblock(int(fd), true) +} + +func (d LP) Handle() *bufio.ReadWriter { + r := bufio.NewReader(d.File) + w := bufio.NewWriter(d.File) + return bufio.NewReadWriter(r, w) +} diff --git a/dev_darwin.go b/dev_darwin.go new file mode 100644 index 0000000..9363dc9 --- /dev/null +++ b/dev_darwin.go @@ -0,0 +1,102 @@ +package robo + +import ( + "errors" + "io" + + "github.com/kylelemons/gousb/usb" +) + +func Open() (io.ReadWriteCloser, error) { + return NewUSB() +} + +type USB struct { + ctx *usb.Context + dev *usb.Device + w io.Writer + r io.Reader +} + +var ( + graphtec = usb.ID(0x0b4d) + craftrobo = usb.ID(0x110a) + craftrobolite = usb.ID(0x111a) + silhouette = usb.ID(0x111c) + silhouette_sd = usb.ID(0x111d) + silhouette_cameo = usb.ID(0x1121) + silhouette_portrait = usb.ID(0x1123) +) + +func init() { + // bump timeouts + usb.DefaultReadTimeout *= 60 + usb.DefaultWriteTimeout *= 300 +} + +func match(desc *usb.Descriptor) bool { + if desc.Vendor == graphtec { + switch desc.Product { + case craftrobo, craftrobolite, + silhouette, silhouette_sd, + silhouette_cameo, silhouette_portrait: + return true + } + } + return false +} + +func NewUSB() (USB, error) { + u := USB{} + u.ctx = usb.NewContext() + devs, err := u.ctx.ListDevices(match) + if err != nil { + return USB{}, err + } + if len(devs) != 1 { + for _, dev := range devs { + dev.Close() + } + return USB{}, errors.New("Cannot find Craft ROBO") + } + u.dev = devs[0] + + for _, c := range u.dev.Configs { + for _, i := range c.Interfaces { + for _, s := range i.Setups { + for _, ep := range s.Endpoints { + e, err := u.dev.OpenEndpoint( + c.Config, + i.Number, + s.Number, + ep.Address) + if err != nil { + return USB{}, err + } + switch ep.Direction() { + case usb.ENDPOINT_DIR_OUT: + u.w = e + case usb.ENDPOINT_DIR_IN: + u.r = e + } + } + } + } + } + + return u, nil +} + +func (d USB) Close() error { + d.dev.Close() + d.ctx.Close() + return nil +} + +func (d USB) Read(b []byte) (int, error) { + return d.r.Read(b) +} + +func (d USB) Write(b []byte) (int, error) { + return d.w.Write(b) +} diff --git a/dev_linux.go b/dev_linux.go new file mode 100644 index 0000000..66cb3f1 --- /dev/null +++ b/dev_linux.go @@ -0,0 +1,7 @@ +package robo + +import "io" + +func Open() (io.ReadWriteCloser, error) { + return NewLP("/dev/usb/lp0") +} diff --git a/dev_openbsd.go b/dev_openbsd.go new file mode 100644 index 0000000..cb35e8e --- /dev/null +++ b/dev_openbsd.go @@ -0,0 +1,8 @@ +package robo + +import "io" + +func Open() (io.ReadWriteCloser, error) { + // note: ulpt* doesn't support read(), thus this dev is broken atm. + return NewLP("/dev/ulpt0") +} diff --git a/device.go b/device.go deleted file mode 100644 index 001b8de..0000000 --- a/device.go +++ /dev/null @@ -1,7 +0,0 @@ -package robo - -import "io" - -type Device interface { - io.ReadWriteCloser -} diff --git a/device_darwin.go b/device_darwin.go deleted file mode 100644 index f0fcf45..0000000 --- a/device_darwin.go +++ /dev/null @@ -1,5 +0,0 @@ -package robo - -func Open() (Device, error) { - return NewUSB() -} diff --git a/device_linux.go b/device_linux.go deleted file mode 100644 index 66ab472..0000000 --- a/device_linux.go +++ /dev/null @@ -1,5 +0,0 @@ -package robo - -func Open() (Device, error) { - return NewLP("/dev/usb/lp0") -} diff --git a/device_openbsd.go b/device_openbsd.go deleted file mode 100644 index 8621b4e..0000000 --- a/device_openbsd.go +++ /dev/null @@ -1,6 +0,0 @@ -// note: ulpt* doesn't support read(), thus this dev is broken atm. -package robo - -func Open() (Device, error) { - return NewLP("/dev/ulpt0") -} diff --git a/lp.go b/lp.go deleted file mode 100644 index b10ba2a..0000000 --- a/lp.go +++ /dev/null @@ -1,31 +0,0 @@ -package robo - -import ( - "bufio" - "os" - "syscall" -) - -type LP struct { - *os.File -} - -func NewLP(path string) (LP, error) { - f, err := os.OpenFile(path, os.O_RDWR, 0666) - return LP{f}, err -} - -func (d LP) Close() error { - return d.File.Close() -} - -func (d LP) SetNonblock() { - fd := d.File.Fd() - syscall.SetNonblock(int(fd), true) -} - -func (d LP) Handle() *bufio.ReadWriter { - r := bufio.NewReader(d.File) - w := bufio.NewWriter(d.File) - return bufio.NewReadWriter(r, w) -} diff --git a/usb_darwin.go b/usb_darwin.go deleted file mode 100644 index e0b1503..0000000 --- a/usb_darwin.go +++ /dev/null @@ -1,98 +0,0 @@ -package robo - -import ( - "errors" - "io" - - "github.com/kylelemons/gousb/usb" -) - -type USB struct { - ctx *usb.Context - dev *usb.Device - w io.Writer - r io.Reader -} - -var ( - graphtec = usb.ID(0x0b4d) - craftrobo = usb.ID(0x110a) - craftrobolite = usb.ID(0x111a) - silhouette = usb.ID(0x111c) - silhouette_sd = usb.ID(0x111d) - silhouette_cameo = usb.ID(0x1121) - silhouette_portrait = usb.ID(0x1123) -) - -func init() { - // bump timeouts - usb.DefaultReadTimeout *= 60 - usb.DefaultWriteTimeout *= 300 -} - -func match(desc *usb.Descriptor) bool { - if desc.Vendor == graphtec { - switch desc.Product { - case craftrobo, craftrobolite, - silhouette, silhouette_sd, - silhouette_cameo, silhouette_portrait: - return true - } - } - return false -} - -func NewUSB() (USB, error) { - u := USB{} - u.ctx = usb.NewContext() - devs, err := u.ctx.ListDevices(match) - if err != nil { - return USB{}, err - } - if len(devs) != 1 { - for _, dev := range devs { - dev.Close() - } - return USB{}, errors.New("Cannot find Craft ROBO") - } - u.dev = devs[0] - - for _, c := range u.dev.Configs { - for _, i := range c.Interfaces { - for _, s := range i.Setups { - for _, ep := range s.Endpoints { - e, err := u.dev.OpenEndpoint( - c.Config, - i.Number, - s.Number, - ep.Address) - if err != nil { - return USB{}, err - } - switch ep.Direction() { - case usb.ENDPOINT_DIR_OUT: - u.w = e - case usb.ENDPOINT_DIR_IN: - u.r = e - } - } - } - } - } - - return u, nil -} - -func (d USB) Close() error { - d.dev.Close() - d.ctx.Close() - return nil -} - -func (d USB) Read(b []byte) (int, error) { - return d.r.Read(b) -} - -func (d USB) Write(b []byte) (int, error) { - return d.w.Write(b) -} -- cgit v1.2.3