package ttymididrv import ( "sync" "gitlab.com/gomidi/midi" ) type driver struct { mu sync.RWMutex outs []midi.Out opened []midi.Port closed bool } func New(name string, baud int) midi.Driver { d := &driver{} d.outs = []midi.Out{ &out{ name: name, baud: baud, number: 0, driver: d, }, } return d } func (d *driver) String() string { return "ttymididrv" } func (d *driver) Close() (err error) { d.mu.RLock() if d.closed { d.mu.RUnlock() return midi.ErrPortClosed } d.mu.RUnlock() d.mu.Lock() d.closed = true d.mu.Unlock() for _, p := range d.opened { err = p.Close() } return } func (d *driver) Ins() ([]midi.In, error) { d.mu.Lock() defer d.mu.Unlock() if d.closed { return nil, midi.ErrPortClosed } return nil, nil } func (d *driver) Outs() ([]midi.Out, error) { d.mu.Lock() defer d.mu.Unlock() if d.closed { return nil, midi.ErrPortClosed } return d.outs, nil }