56 lines
914 B
Go
56 lines
914 B
Go
package backend
|
|
|
|
import (
|
|
"io"
|
|
|
|
"github.com/jacobsa/go-serial/serial"
|
|
"github.com/tonychee7000/Arremi/consts"
|
|
)
|
|
|
|
var (
|
|
// MidiDev is a global midi device.
|
|
MidiDev *MIDIDevice
|
|
|
|
// MIDIError check this. if not nil, go exit
|
|
MIDIError error
|
|
)
|
|
|
|
func init() {
|
|
MidiDev, MIDIError = NewMIDIDevice()
|
|
}
|
|
|
|
// Run called by frontend.
|
|
func Run(chSerialName chan string, ch chan int, errCh chan error) {
|
|
serialName := <-chSerialName
|
|
|
|
sPort, err := serial.Open(serial.OpenOptions{
|
|
PortName: "/dev/" + serialName,
|
|
BaudRate: consts.SerialBaudrate,
|
|
DataBits: 8,
|
|
StopBits: 1,
|
|
ParityMode: serial.PARITY_NONE,
|
|
MinimumReadSize: 3,
|
|
})
|
|
if err != nil {
|
|
errCh <- err
|
|
return
|
|
}
|
|
defer MidiDev.AllNoteOff()
|
|
defer sPort.Close()
|
|
|
|
go func() {
|
|
_, err := io.Copy(MidiDev, sPort)
|
|
if err != nil {
|
|
errCh <- err
|
|
}
|
|
ch <- 1
|
|
}()
|
|
|
|
for {
|
|
select {
|
|
case <-ch:
|
|
return
|
|
}
|
|
}
|
|
}
|