-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
94 lines (86 loc) · 2 KB
/
main.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package main
import (
"flag"
"fmt"
"io/ioutil"
"log"
"os"
"os/exec"
"path/filepath"
"strings"
"syscall"
"time"
)
var (
pin1File string
pin2File string
musicDir string
)
func init() {
flag.StringVar(&pin1File, "pin1", "/sys/class/gpio/gpio11/value", "Filename of pin 1 'value'")
flag.StringVar(&pin2File, "pin2", "/sys/class/gpio/gpio12/value", "Filename of pin 2 'value'")
flag.StringVar(&musicDir, "music", ".", "Directory containing music")
flag.Parse()
}
func main() {
if _, err := os.Stat(pin1File); err != nil {
log.Fatalf("Pin 1 failed: %#v\n", err)
}
if _, err := os.Stat(pin2File); err != nil {
log.Fatalf("Pin 2 failed: %#v\n", err)
}
if _, err := os.Stat(musicDir); err != nil {
log.Fatalf("Music directory failed: %#v\n", err)
}
var cmd *exec.Cmd
for {
pin1 := readPin(pin1File)
//pin2 := readPin(pin2File)
if pin1 {
if cmd == nil {
fmt.Println("starting playing music")
files := getMusicFiles(musicDir)
args := append([]string{"-Z"}, files...)
cmd = exec.Command("/usr/bin/mpg123", args...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Start(); err != nil {
fmt.Printf("Playing music failed: %#v\n", err)
} else {
fmt.Println("started playing music")
}
}
} else {
if cmd != nil {
fmt.Println("stopping playing music")
if p := cmd.Process; p != nil {
p.Signal(syscall.SIGKILL)
cmd.Wait()
}
cmd = nil
fmt.Println("stopped playing music")
}
}
time.Sleep(time.Second)
}
}
func readPin(pinFile string) bool {
content, err := ioutil.ReadFile(pinFile)
if err != nil {
log.Fatalf("Failed to read pin %s: %#v\n", pinFile, err)
}
return strings.TrimSpace(string(content)) == "1"
}
func getMusicFiles(dir string) []string {
entries, err := ioutil.ReadDir(dir)
if err != nil {
return nil
}
result := make([]string, 0, len(entries))
for _, e := range entries {
if strings.HasSuffix(e.Name(), ".mp3") {
result = append(result, filepath.Join(dir, e.Name()))
}
}
return result
}