package gamepad import ( "codeisalie/gono/pkg/comm" "log" "time" "github.com/splace/joysticks" ) // Run initializes the plotter func Run(c *comm.Comm) { motorsState := false device := joysticks.Connect(1) if device == nil { panic("no HIDs") } // using Connect allows a device to be interrogated log.Printf("HID#1:- Buttons:%d, Hats:%d\n", len(device.Buttons), len(device.HatAxes)/2) // get/assign channels for specific events b1press := device.OnClose(1) b7press := device.OnClose(7) b8press := device.OnClose(8) b10press := device.OnClose(10) h1move := device.OnMove(3) // start feeding OS events onto the event channels. go device.ParcelOutEvents() // handle event channels go func() { for { select { case <-b1press: log.Println("button #1 pressed") case <-b7press: log.Println("button #7 pressed") case <-b8press: log.Println("button #8 pressed") case <-b10press: log.Println("button #10 pressed", motorsState) if motorsState == false { // c.Send(comm.EnableMotors) motorsState = true } else { // c.Send(comm.DisableMotors) motorsState = false } case h := <-h1move: hpos := h.(joysticks.CoordsEvent) log.Println(".hat #1 moved too:", hpos) } } }() time.Sleep(time.Second * 60) log.Println("Shutting down due to timeout.") }