grim/gousb2snes
Clone
Summary
Browse
Changes
Graph
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
)
}