diff options
Diffstat (limited to 'pkg/controller')
-rw-r--r-- | pkg/controller/controller.go | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/pkg/controller/controller.go b/pkg/controller/controller.go index b982c56..ab04fcc 100644 --- a/pkg/controller/controller.go +++ b/pkg/controller/controller.go @@ -25,16 +25,19 @@ package controller import ( "errors" "fmt" + "log" "strings" "github.com/scgolang/midi" ) const ( + BUTTON_ON = byte(0x90) + BUTTON_OFF = byte(0x80) NOTE_OFFSET_BUTTON = byte(0x00) NUM_BUTTONS = 4 - CC_LED = byte(0xB0) + LED_CC = byte(0xB0) NOTE_OFFSET_LED = byte(0x00) NUM_LEDS = 4 LED_OFF = byte(0x00) @@ -75,7 +78,31 @@ func NewController(c Config) (*Controller, error) { return ctrl, nil } +func (c *Controller) handleMidiPacket(p midi.Packet) { + num := p.Data[1] + switch p.Data[0] { + case BUTTON_ON: + log.Printf("controller: button %d pressed", num) + case BUTTON_OFF: + log.Printf("controller: button %d released", num) + default: + // ignore all other events + return + } +} + func (c *Controller) Init() error { + ch, err := c.Dev.Packets() + if err != nil { + return err + } + + go func() { + for { + // TODO: handle Errors (reopen the device!) + c.handleMidiPacket(<-ch) + } + }() return nil } @@ -93,7 +120,7 @@ func (c *Controller) setLed(num byte, value byte) error { return fmt.Errorf("this controller has only %d leds.", NUM_LEDS) } - n, err := c.Dev.Write([]byte{CC_LED, NOTE_OFFSET_LED + num, value}) + n, err := c.Dev.Write([]byte{LED_CC, NOTE_OFFSET_LED + num, value}) if err != nil { // reopen device? return err |