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  }