gobot.io/x/gobot@v1.16.0/platforms/joystick/bin/scanner.go (about) 1 // +build utils 2 // 3 // Do not build by default. 4 // 5 // Joystick scanner 6 // Based on original code from Jacky Boen 7 // https://github.com/veandco/go-sdl2/blob/master/examples/events/events.go 8 9 package main 10 11 import ( 12 "fmt" 13 "os" 14 15 "github.com/veandco/go-sdl2/sdl" 16 ) 17 18 var joysticks [16]*sdl.Joystick 19 20 func run() int { 21 var event sdl.Event 22 var running bool 23 24 sdl.Init(sdl.INIT_JOYSTICK) 25 defer sdl.Quit() 26 27 sdl.JoystickEventState(sdl.ENABLE) 28 29 running = true 30 for running { 31 for event = sdl.PollEvent(); event != nil; event = sdl.PollEvent() { 32 switch t := event.(type) { 33 case *sdl.QuitEvent: 34 running = false 35 case *sdl.JoyAxisEvent: 36 fmt.Printf("[%d ms] Axis: %d\tvalue:%d\n", 37 t.Timestamp, t.Axis, t.Value) 38 case *sdl.JoyBallEvent: 39 fmt.Printf("[%d ms] Ball:%d\txrel:%d\tyrel:%d\n", 40 t.Timestamp, t.Ball, t.XRel, t.YRel) 41 case *sdl.JoyButtonEvent: 42 fmt.Printf("[%d ms] Button:%d\tstate:%d\n", 43 t.Timestamp, t.Button, t.State) 44 case *sdl.JoyHatEvent: 45 fmt.Printf("[%d ms] Hat:%d\tvalue:%d\n", 46 t.Timestamp, t.Hat, t.Value) 47 case *sdl.JoyDeviceAddedEvent: 48 joysticks[int(t.Which)] = sdl.JoystickOpen(int(t.Which)) 49 if joysticks[int(t.Which)] != nil { 50 fmt.Printf("Joystick %d connected\n", t.Which) 51 } 52 case *sdl.JoyDeviceRemovedEvent: 53 if joystick := joysticks[int(t.Which)]; joystick != nil { 54 joystick.Close() 55 } 56 fmt.Printf("Joystick %d disconnected\n", t.Which) 57 default: 58 fmt.Printf("Unknown event\n") 59 } 60 } 61 62 sdl.Delay(16) 63 } 64 65 return 0 66 } 67 68 func main() { 69 os.Exit(run()) 70 }