control.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "douglasthrift.net/dtrobots/gamepad"
  6. )
  7. // drive modes
  8. const (
  9. tank = iota
  10. joystick
  11. )
  12. const driveModeCount = 2
  13. type driveMode int
  14. func (d driveMode) String() string {
  15. switch d {
  16. case tank:
  17. return "tank"
  18. case joystick:
  19. return "joystick"
  20. default:
  21. return "unknown"
  22. }
  23. }
  24. func (d *driveMode) Set(value string) error {
  25. switch value {
  26. case "tank":
  27. *d = tank
  28. case "joystick":
  29. *d = joystick
  30. default:
  31. return fmt.Errorf("unknown drive mode: %v", value)
  32. }
  33. return nil
  34. }
  35. func control(mode driveMode, g *gamepad.Gamepad) {
  36. log.Printf("control loop started (drive mode: %v)", mode)
  37. for {
  38. select {
  39. case e := <-g.LeftAnalog:
  40. log.Println("left analog", e)
  41. case e := <-g.RightAnalog:
  42. log.Println("right analog", e)
  43. case e := <-g.DPad:
  44. log.Println("dpad", e)
  45. case e := <-g.A:
  46. log.Println("a", e)
  47. case e := <-g.B:
  48. log.Println("b", e)
  49. case e := <-g.X:
  50. log.Println("x", e)
  51. case e := <-g.Y:
  52. log.Println("y", e)
  53. case e := <-g.Left:
  54. log.Println("left", e)
  55. case e := <-g.Right:
  56. log.Println("right", e)
  57. case e := <-g.Back:
  58. log.Println("back", e)
  59. case e := <-g.Start:
  60. log.Println("start", e)
  61. case e := <-g.Logitech:
  62. if e.IsButtonPress() {
  63. mode++
  64. mode %= driveModeCount
  65. log.Printf("switched drive mode: %v", mode)
  66. }
  67. }
  68. }
  69. }