1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- 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)
- }
- }
- }
- }
|