package main import ( "fmt" "log" "douglasthrift.net/dtrobots/gamepad" ) // drive modes const ( tank = iota joystick ) const driveModeCount = 2 type driveMode int func (d driveMode) String() string { switch d { case tank: return "tank" case joystick: return "joystick" default: return "unknown" } } func (d *driveMode) Set(value string) error { switch value { case "tank": *d = tank case "joystick": *d = joystick default: return fmt.Errorf("unknown drive mode: %v", value) } return nil } func control(mode driveMode, g *gamepad.Gamepad) { log.Printf("control loop started (drive mode: %v)", mode) for { select { case e := <-g.LeftAnalog: log.Println("left analog", e) case e := <-g.RightAnalog: log.Println("right analog", e) case e := <-g.DPad: log.Println("dpad", e) case e := <-g.A: log.Println("a", e) case e := <-g.B: log.Println("b", e) case e := <-g.X: log.Println("x", e) case e := <-g.Y: log.Println("y", e) case e := <-g.Left: log.Println("left", e) case e := <-g.Right: log.Println("right", e) case e := <-g.Back: log.Println("back", e) case e := <-g.Start: log.Println("start", e) case e := <-g.Logitech: if e.IsButtonPress() { mode++ mode %= driveModeCount log.Printf("switched drive mode: %v", mode) } } } }