-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.go
More file actions
59 lines (54 loc) · 1.1 KB
/
main.go
File metadata and controls
59 lines (54 loc) · 1.1 KB
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
package main
import (
"flag"
"log"
"os"
"path/filepath"
"regexp"
"strconv"
"time"
"github.com/simulatedsimian/joystick"
)
func main() {
log.SetFlags(log.LstdFlags | log.Lshortfile)
versionRegex := regexp.MustCompile("[0-9]+$")
buttonId := flag.Int("button", 0, "action button")
flag.Parse()
devices, err := filepath.Glob("/dev/input/js*")
if err != nil {
log.Fatal(err)
}
var joysticks []joystick.Joystick
for _, v := range devices {
n, err := strconv.Atoi(versionRegex.FindString(v))
if err != nil {
log.Fatal(err)
}
js, err := joystick.Open(n)
if err != nil {
log.Fatal(err)
}
joysticks = append(joysticks, js)
defer js.Close()
}
var initialRelease bool
read:
for range time.NewTicker(10 * time.Millisecond).C {
for _, js := range joysticks {
state, err := js.Read()
if err != nil {
continue
}
for button := 0; button < js.ButtonCount(); button++ {
pressed := state.Buttons&(1<<uint32(button)) != 0
if button == *buttonId && pressed {
if initialRelease {
os.Exit(0)
}
continue read
}
}
}
initialRelease = true
}
}