Control drones with a proper joystick
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

events.h 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /*
  2. * Saitek X52 Arduino USB Host Shield Library.
  3. * Copyright 2016 by Thomas Buck <xythobuz@xythobuz.de>
  4. *
  5. * Based on the USB Host Library HID Joystick example
  6. * https://www.circuitsathome.com/mcu/hid-joystick-code-sample
  7. *
  8. * This program is free software; you can redistribute it and/or
  9. * modify it under the terms of the GNU General Public License as
  10. * published by the Free Software Foundation, version 2.
  11. */
  12. #ifndef __JOYSTICK_EVENTS_H__
  13. #define __JOYSTICK_EVENTS_H__
  14. #include <stdint.h>
  15. class GamePadEventData;
  16. class X52;
  17. class JoystickEvents {
  18. public:
  19. JoystickEvents(JoystickEvents* _client = 0) : client(_client) { }
  20. virtual void OnGamePadChanged(const GamePadEventData& evt) = 0;
  21. virtual void OnHatSwitch(uint8_t hat) = 0;
  22. virtual void OnButtonUp(uint8_t but_id) = 0;
  23. virtual void OnButtonDown(uint8_t but_id) = 0;
  24. virtual void OnMouseMoved(uint8_t x, uint8_t y) = 0;
  25. protected:
  26. JoystickEvents* client;
  27. };
  28. class JoystickEventsDeadZone : public JoystickEvents {
  29. public:
  30. JoystickEventsDeadZone(JoystickEvents* client = 0) : JoystickEvents(client) { }
  31. virtual void OnGamePadChanged(const GamePadEventData& evt);
  32. virtual void OnHatSwitch(uint8_t hat);
  33. virtual void OnButtonUp(uint8_t but_id);
  34. virtual void OnButtonDown(uint8_t but_id);
  35. virtual void OnMouseMoved(uint8_t x, uint8_t y);
  36. private:
  37. const static GamePadEventData deadZone;
  38. const static uint8_t deadZoneMouseX, deadZoneMouseY;
  39. const static GamePadEventData centerValue;
  40. const static uint8_t centerMouseX, centerMouseY;
  41. };
  42. class JoystickEventsCPPM : public JoystickEvents {
  43. public:
  44. JoystickEventsCPPM(JoystickEvents* client = 0);
  45. virtual void OnGamePadChanged(const GamePadEventData& evt);
  46. virtual void OnHatSwitch(uint8_t hat);
  47. virtual void OnButtonUp(uint8_t but_id);
  48. virtual void OnButtonDown(uint8_t but_id);
  49. virtual void OnMouseMoved(uint8_t x, uint8_t y);
  50. private:
  51. const static uint8_t channels = 12;
  52. uint16_t values[channels];
  53. };
  54. class JoystickEventsButtons : public JoystickEvents {
  55. public:
  56. JoystickEventsButtons(X52* x = 0, JoystickEvents* client = 0);
  57. virtual void OnGamePadChanged(const GamePadEventData& evt);
  58. virtual void OnHatSwitch(uint8_t hat);
  59. virtual void OnButtonUp(uint8_t but_id);
  60. virtual void OnButtonDown(uint8_t but_id);
  61. virtual void OnMouseMoved(uint8_t x, uint8_t y);
  62. private:
  63. enum MenuState {
  64. NONE = 0,
  65. MAINMENU,
  66. STATES_EDIT,
  67. EDIT_CHANNELS,
  68. EDIT_FRAME_LENGTH,
  69. EDIT_PULSE_LENGTH,
  70. EDIT_INVERT,
  71. STATES_MAX
  72. };
  73. void printMenu();
  74. void menuHelper(uint8_t count, const char** menu, const char* title);
  75. void printValue(uint16_t min, uint16_t max, const char* title);
  76. X52* x52;
  77. MenuState state;
  78. uint8_t index;
  79. uint16_t value;
  80. };
  81. #endif // __JOYSTICK_EVENTS_H__