package main import ( "fmt" "github.com/nsf/termbox-go" "github.com/simulatedsimian/joystick" "log" "os" "strconv" "time" ) func printAt(x, y int, s string) { for _, r := range s { termbox.SetCell(x, y, r, termbox.ColorDefault, termbox.ColorDefault) x++ } } func readJoystick(js joystick.Joystick, hidden bool) { jinfo, err := js.Read() check(err) w, h := termbox.Size() tbcd := termbox.ColorDefault termbox.Clear(tbcd, tbcd) printAt(1, h-1, "q - quit") if hidden { printAt(11, h-1, "s - show buttons:") } else { bs := "" printAt(11, h-1, "h - hide buttons:") for button := 0; button < js.ButtonCount(); button++ { if jinfo.Buttons&(1< 1 { i, err := strconv.Atoi(os.Args[1]) check(err) jsid = i } js, jserr := joystick.Open(jsid) check(jserr) err := termbox.Init() check(err) defer termbox.Close() eventQueue := make(chan termbox.Event) go func() { for { eventQueue <- termbox.PollEvent() } }() ticker := time.NewTicker(time.Millisecond * 40) hidden := false // Controls whether button display hidden or not. for doQuit := false; !doQuit; { select { case ev := <-eventQueue: if ev.Type == termbox.EventKey { if ev.Ch == 'q' { doQuit = true } else if ev.Ch == 'h' { hidden = true } else if ev.Ch == 's' { hidden = false } } if ev.Type == termbox.EventResize { termbox.Flush() } case <-ticker.C: readJoystick(js, hidden) } } }