grim/gousb2snes

Update the package path for the new repository host
draft default tip
2020-04-27, Gary Kramlich
2bff12a54574
Update the package path for the new repository host
package sd2snes
import (
"errors"
"io"
"github.com/jacobsa/go-serial/serial"
)
type Client struct {
sock io.ReadWriteCloser
}
func New() (*Client, error) {
opts := serial.OpenOptions{
PortName: "/dev/ttyACM0",
BaudRate: 9600,
DataBits: 8,
StopBits: 1,
MinimumReadSize: 4,
}
sock, err := serial.Open(opts)
if err != nil {
return nil, err
}
return &Client{
sock: sock,
}, nil
}
func (c *Client) Close() {
c.sock.Close()
}
func (c *Client) Send(cmd Command) error {
opcode, ns, flags := cmd.Identifier()
req := make([]byte, 512)
header := []byte{'U', 'S', 'B', 'A', byte(opcode), byte(ns), byte(flags)}
overwrite(req, header)
n, err := c.sock.Write(req)
if err != nil {
return err
}
if n == 0 {
return errors.New("failed to write!")
}
resp := make([]byte, 512)
total := 0
for total < 512 {
n, err = c.sock.Read(resp[total:])
total += n
if err != nil {
return err
}
}
if !equal(resp, []byte{'U', 'S', 'B', 'A', byte(OpCodeResponse)}) {
return errors.New("Bad response")
}
if resp[5] == 1 {
return errors.New("Bad response")
}
return cmd.Process(resp)
}