-
Notifications
You must be signed in to change notification settings - Fork 2
/
bbox.go
67 lines (56 loc) · 1.26 KB
/
bbox.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package main
import (
"os"
"os/signal"
"github.com/siggy/bbox/bbox"
"github.com/siggy/bbox/bbox/leds"
)
func main() {
sig := make(chan os.Signal, 1)
signal.Notify(sig, os.Interrupt, os.Kill)
// beat changes
// keyboard => loop
// keyboard => render
// keyboard => leds
msgs := []chan bbox.Beats{
make(chan bbox.Beats),
make(chan bbox.Beats),
make(chan bbox.Beats),
}
// tempo changes
// keyboard => loop
tempo := make(chan int)
// ticks
// loop => render
// loop => leds
ticks := []chan int{
make(chan int),
make(chan int),
}
// interval changes
// loop => render
// loop => leds
intervals := []chan bbox.Interval{
make(chan bbox.Interval),
make(chan bbox.Interval),
}
// keyboard broadcasts quit with close(msgs)
keyboard := bbox.InitKeyboard(bbox.WriteonlyBeats(msgs), tempo, bbox.KeyMapsRPI, false)
loop := bbox.InitLoop(msgs[0], tempo, bbox.WriteonlyInt(ticks), bbox.WriteonlyInterval(intervals))
render := bbox.InitRender(msgs[1], ticks[0], intervals[0])
leds := leds.InitLedBeats(msgs[2], ticks[1], intervals[1])
go keyboard.Run()
go loop.Run()
go render.Run()
go leds.Run()
defer keyboard.Close()
defer loop.Close()
defer render.Close()
defer leds.Close()
for {
select {
case <-sig:
return
}
}
}