From a26dbf6245042a9e4a5405d851b9bf8e66032b59 Mon Sep 17 00:00:00 2001 From: Nishanth Samala Date: Wed, 7 Aug 2019 23:08:58 -0400 Subject: [PATCH 1/5] added support for Adafruit TinyUSB capable devices --- Joystick/src/Joystick.cpp | 22 +++++++++++++++++++++- Joystick/src/Joystick.h | 10 +++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/Joystick/src/Joystick.cpp b/Joystick/src/Joystick.cpp index db988cc..4cc7bde 100644 --- a/Joystick/src/Joystick.cpp +++ b/Joystick/src/Joystick.cpp @@ -435,8 +435,12 @@ Joystick_::Joystick_( memcpy(customHidReportDescriptor, tempHidReportDescriptor, hidReportDescriptorSize); // Register HID Report Description +#ifdef USE_TINYUSB + _usb_hid.setReportDescriptor(customHidReportDescriptor, hidReportDescriptorSize); +#else DynamicHIDSubDescriptor *node = new DynamicHIDSubDescriptor(customHidReportDescriptor, hidReportDescriptorSize, false); DynamicHID().AppendDescriptor(node); +#endif // Setup Joystick State if (buttonCount > 0) { @@ -475,8 +479,15 @@ Joystick_::Joystick_( } } -void Joystick_::begin(bool initAutoSendState) +void Joystick_::begin(bool initAutoSendState, uint8_t intervalMs) { +#ifdef USE_TINYUSB + _usb_hid.setPollInterval(2); + _usb_hid.begin(); + + while(!USBDevice.mounted()) delay(1); +#endif + _autoSendState = initAutoSendState; sendState(); } @@ -674,7 +685,16 @@ void Joystick_::sendState() index += buildAndSetSimulationValue(_includeSimulatorFlags & JOYSTICK_INCLUDE_BRAKE, _brake, _brakeMinimum, _brakeMaximum, &(data[index])); index += buildAndSetSimulationValue(_includeSimulatorFlags & JOYSTICK_INCLUDE_STEERING, _steering, _steeringMinimum, _steeringMaximum, &(data[index])); +#ifdef USE_TINYUSB + if (_usb_hid.ready()) { + _usb_hid.sendReport(_hidReportId, data, _hidReportSize); + } + + if (USBDevice.suspended()) + USBDevice.remoteWakeup(); +#else DynamicHID().SendReport(_hidReportId, data, _hidReportSize); +#endif } #endif diff --git a/Joystick/src/Joystick.h b/Joystick/src/Joystick.h index a20d374..a256194 100644 --- a/Joystick/src/Joystick.h +++ b/Joystick/src/Joystick.h @@ -21,7 +21,11 @@ #ifndef JOYSTICK_h #define JOYSTICK_h +#ifdef USE_TINYUSB +#include +#else #include +#endif #if ARDUINO < 10606 #error The Joystick library requires Arduino IDE 1.6.6 or greater. Please update your IDE. @@ -107,6 +111,10 @@ class Joystick_ uint8_t _hidReportId; uint8_t _hidReportSize; +#ifdef USE_TINYUSB + Adafruit_USBD_HID _usb_hid; +#endif + protected: int buildAndSet16BitValue(bool includeValue, int16_t value, int16_t valueMinimum, int16_t valueMaximum, int16_t actualMinimum, int16_t actualMaximum, uint8_t dataLocation[]); int buildAndSetAxisValue(bool includeAxis, int16_t axisValue, int16_t axisMinimum, int16_t axisMaximum, uint8_t dataLocation[]); @@ -130,7 +138,7 @@ class Joystick_ bool includeBrake = true, bool includeSteering = true); - void begin(bool initAutoSendState = true); + void begin(bool initAutoSendState = true, uint8_t interval_ms = 2); void end(); // Set Range Functions From 3cb9d6932652825ac948923123e231b74082d8ff Mon Sep 17 00:00:00 2001 From: Nishanth Samala Date: Wed, 7 Aug 2019 23:09:38 -0400 Subject: [PATCH 2/5] remove hardcoded poll interval --- Joystick/src/Joystick.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Joystick/src/Joystick.cpp b/Joystick/src/Joystick.cpp index 4cc7bde..ba52023 100644 --- a/Joystick/src/Joystick.cpp +++ b/Joystick/src/Joystick.cpp @@ -482,7 +482,7 @@ Joystick_::Joystick_( void Joystick_::begin(bool initAutoSendState, uint8_t intervalMs) { #ifdef USE_TINYUSB - _usb_hid.setPollInterval(2); + _usb_hid.setPollInterval(intervalMs); _usb_hid.begin(); while(!USBDevice.mounted()) delay(1); From 0d2e537712f369f180dab20591b8939b466462a4 Mon Sep 17 00:00:00 2001 From: Nishanth Samala Date: Mon, 12 Aug 2019 17:38:48 -0400 Subject: [PATCH 3/5] Create library.json --- library.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 library.json diff --git a/library.json b/library.json new file mode 100644 index 0000000..b53cf9c --- /dev/null +++ b/library.json @@ -0,0 +1,7 @@ +{ + "name": "ArduinoJoystickLibrary", + "description": "Arduino library that allows an Arduino Leonardo, Arduino Micro, or Arudino Due to appear as a Joystick or Gamepad.", + "repository": "https://github.com/nsamala/ArduinoJoystickLibrary.git", + "srcDir": "Joystick/src", + "includeDir": "Joystick/src" +} From d4aa63b6891d025ba8dd749c4b43979cb456a6b6 Mon Sep 17 00:00:00 2001 From: Nishanth Samala Date: Sun, 1 Sep 2019 23:27:18 -0400 Subject: [PATCH 4/5] Adds support for Macchina M2 --- Joystick/src/DynamicHID/DynamicHID.cpp | 2 +- Joystick/src/DynamicHID/DynamicHID.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Joystick/src/DynamicHID/DynamicHID.cpp b/Joystick/src/DynamicHID/DynamicHID.cpp index 6c46a2c..7753acb 100644 --- a/Joystick/src/DynamicHID/DynamicHID.cpp +++ b/Joystick/src/DynamicHID/DynamicHID.cpp @@ -23,7 +23,7 @@ #if defined(USBCON) -#ifdef _VARIANT_ARDUINO_DUE_X_ +#if defined(_VARIANT_ARDUINO_DUE_X_) || defined(_VARIANT_MACCHINA_M2_) #define USB_SendControl USBD_SendControl #define USB_Send USBD_Send #endif diff --git a/Joystick/src/DynamicHID/DynamicHID.h b/Joystick/src/DynamicHID/DynamicHID.h index 0a9a6ef..9a56090 100644 --- a/Joystick/src/DynamicHID/DynamicHID.h +++ b/Joystick/src/DynamicHID/DynamicHID.h @@ -25,7 +25,7 @@ #include #include -#ifdef _VARIANT_ARDUINO_DUE_X_ +#if defined(_VARIANT_ARDUINO_DUE_X_) || defined(_VARIANT_MACCHINA_M2_) // The following values are the same as AVR's USBAPI.h // Reproduced here because SAM doesn't have these in // its own USBAPI.H @@ -119,7 +119,7 @@ class DynamicHID_ : public PluggableUSBModule uint8_t getShortName(char* name); private: - #ifdef _VARIANT_ARDUINO_DUE_X_ + #if defined(_VARIANT_ARDUINO_DUE_X_) || defined(_VARIANT_MACCHINA_M2_) uint32_t epType[1]; #else uint8_t epType[1]; From 97791b53a8216ae75c15424b8ac8763297845292 Mon Sep 17 00:00:00 2001 From: Nishanth Samala Date: Sun, 1 Sep 2019 23:28:55 -0400 Subject: [PATCH 5/5] moves src, examples and library.properties out of the Joystick folder --- .../DrivingControllerTest/DrivingControllerTest.ino | 0 .../FlightControllerTest/FlightControllerTest.ino | 0 .../examples => examples}/GamepadExample/GamepadExample.ino | 0 .../examples => examples}/HatSwitchTest/HatSwitchTest.ino | 0 .../examples => examples}/JoystickButton/JoystickButton.ino | 0 .../JoystickKeyboard/JoystickKeyboard.ino | 0 {Joystick/examples => examples}/JoystickTest/JoystickTest.ino | 0 .../MultipleJoystickTest/MultipleJoystickTest.ino | 0 library.json | 4 ++-- Joystick/library.properties => library.properties | 0 {Joystick/src => src}/DynamicHID/DynamicHID.cpp | 0 {Joystick/src => src}/DynamicHID/DynamicHID.h | 0 {Joystick/src => src}/Joystick.cpp | 0 {Joystick/src => src}/Joystick.h | 0 14 files changed, 2 insertions(+), 2 deletions(-) rename {Joystick/examples => examples}/DrivingControllerTest/DrivingControllerTest.ino (100%) rename {Joystick/examples => examples}/FlightControllerTest/FlightControllerTest.ino (100%) rename {Joystick/examples => examples}/GamepadExample/GamepadExample.ino (100%) rename {Joystick/examples => examples}/HatSwitchTest/HatSwitchTest.ino (100%) rename {Joystick/examples => examples}/JoystickButton/JoystickButton.ino (100%) rename {Joystick/examples => examples}/JoystickKeyboard/JoystickKeyboard.ino (100%) rename {Joystick/examples => examples}/JoystickTest/JoystickTest.ino (100%) rename {Joystick/examples => examples}/MultipleJoystickTest/MultipleJoystickTest.ino (100%) rename Joystick/library.properties => library.properties (100%) rename {Joystick/src => src}/DynamicHID/DynamicHID.cpp (100%) rename {Joystick/src => src}/DynamicHID/DynamicHID.h (100%) rename {Joystick/src => src}/Joystick.cpp (100%) rename {Joystick/src => src}/Joystick.h (100%) diff --git a/Joystick/examples/DrivingControllerTest/DrivingControllerTest.ino b/examples/DrivingControllerTest/DrivingControllerTest.ino similarity index 100% rename from Joystick/examples/DrivingControllerTest/DrivingControllerTest.ino rename to examples/DrivingControllerTest/DrivingControllerTest.ino diff --git a/Joystick/examples/FlightControllerTest/FlightControllerTest.ino b/examples/FlightControllerTest/FlightControllerTest.ino similarity index 100% rename from Joystick/examples/FlightControllerTest/FlightControllerTest.ino rename to examples/FlightControllerTest/FlightControllerTest.ino diff --git a/Joystick/examples/GamepadExample/GamepadExample.ino b/examples/GamepadExample/GamepadExample.ino similarity index 100% rename from Joystick/examples/GamepadExample/GamepadExample.ino rename to examples/GamepadExample/GamepadExample.ino diff --git a/Joystick/examples/HatSwitchTest/HatSwitchTest.ino b/examples/HatSwitchTest/HatSwitchTest.ino similarity index 100% rename from Joystick/examples/HatSwitchTest/HatSwitchTest.ino rename to examples/HatSwitchTest/HatSwitchTest.ino diff --git a/Joystick/examples/JoystickButton/JoystickButton.ino b/examples/JoystickButton/JoystickButton.ino similarity index 100% rename from Joystick/examples/JoystickButton/JoystickButton.ino rename to examples/JoystickButton/JoystickButton.ino diff --git a/Joystick/examples/JoystickKeyboard/JoystickKeyboard.ino b/examples/JoystickKeyboard/JoystickKeyboard.ino similarity index 100% rename from Joystick/examples/JoystickKeyboard/JoystickKeyboard.ino rename to examples/JoystickKeyboard/JoystickKeyboard.ino diff --git a/Joystick/examples/JoystickTest/JoystickTest.ino b/examples/JoystickTest/JoystickTest.ino similarity index 100% rename from Joystick/examples/JoystickTest/JoystickTest.ino rename to examples/JoystickTest/JoystickTest.ino diff --git a/Joystick/examples/MultipleJoystickTest/MultipleJoystickTest.ino b/examples/MultipleJoystickTest/MultipleJoystickTest.ino similarity index 100% rename from Joystick/examples/MultipleJoystickTest/MultipleJoystickTest.ino rename to examples/MultipleJoystickTest/MultipleJoystickTest.ino diff --git a/library.json b/library.json index b53cf9c..367e8b5 100644 --- a/library.json +++ b/library.json @@ -2,6 +2,6 @@ "name": "ArduinoJoystickLibrary", "description": "Arduino library that allows an Arduino Leonardo, Arduino Micro, or Arudino Due to appear as a Joystick or Gamepad.", "repository": "https://github.com/nsamala/ArduinoJoystickLibrary.git", - "srcDir": "Joystick/src", - "includeDir": "Joystick/src" + "srcDir": "src", + "includeDir": "src" } diff --git a/Joystick/library.properties b/library.properties similarity index 100% rename from Joystick/library.properties rename to library.properties diff --git a/Joystick/src/DynamicHID/DynamicHID.cpp b/src/DynamicHID/DynamicHID.cpp similarity index 100% rename from Joystick/src/DynamicHID/DynamicHID.cpp rename to src/DynamicHID/DynamicHID.cpp diff --git a/Joystick/src/DynamicHID/DynamicHID.h b/src/DynamicHID/DynamicHID.h similarity index 100% rename from Joystick/src/DynamicHID/DynamicHID.h rename to src/DynamicHID/DynamicHID.h diff --git a/Joystick/src/Joystick.cpp b/src/Joystick.cpp similarity index 100% rename from Joystick/src/Joystick.cpp rename to src/Joystick.cpp diff --git a/Joystick/src/Joystick.h b/src/Joystick.h similarity index 100% rename from Joystick/src/Joystick.h rename to src/Joystick.h