From 39ca6c311a2410999cd059088792d4d120de78bd Mon Sep 17 00:00:00 2001 From: ilcato Date: Wed, 6 Jun 2018 11:05:22 +0200 Subject: [PATCH] Added support for SAMD devices --- Joystick/library.properties | 4 ++-- Joystick/src/DynamicHID/DynamicHID.cpp | 4 ++++ Joystick/src/DynamicHID/DynamicHID.h | 4 ++++ Joystick/src/Joystick.cpp | 18 ++++++++++++++---- Joystick/src/Joystick.h | 12 +++++++++--- 5 files changed, 33 insertions(+), 9 deletions(-) diff --git a/Joystick/library.properties b/Joystick/library.properties index abb7a26..9f0530d 100644 --- a/Joystick/library.properties +++ b/Joystick/library.properties @@ -2,8 +2,8 @@ name=Joystick version=2.0.5 author=Matthew Heironimus maintainer=Matthew Heironimus -sentence=Arduino library that allows an Arduino Leonardo, Arduino Micro, or Arudino Due to appear as a Joystick or Gamepad. +sentence=Arduino library that allows an Arduino Leonardo, Arduino Micro, or Arudino Due/MKR to appear as a Joystick or Gamepad. paragraph=This library is built on the PluggableUSB library. It can be used with or without other HID-based libraries (Mouse, Keyboard, etc.). category=Device Control url=https://github.com/MHeironimus/ArduinoJoystickLibrary -architectures=avr,sam +architectures=avr,sam,samd diff --git a/Joystick/src/DynamicHID/DynamicHID.cpp b/Joystick/src/DynamicHID/DynamicHID.cpp index 6c46a2c..29aa0a2 100644 --- a/Joystick/src/DynamicHID/DynamicHID.cpp +++ b/Joystick/src/DynamicHID/DynamicHID.cpp @@ -21,6 +21,8 @@ #include "DynamicHID.h" +#if !defined(ARDUINO_SAMD_VARIANT_COMPLIANCE) + #if defined(USBCON) #ifdef _VARIANT_ARDUINO_DUE_X_ @@ -167,3 +169,5 @@ int DynamicHID_::begin(void) } #endif /* if defined(USBCON) */ + +#endif // !defined(!defined(ARDUINO_SAMD_VARIANT_COMPLIANCE)) \ No newline at end of file diff --git a/Joystick/src/DynamicHID/DynamicHID.h b/Joystick/src/DynamicHID/DynamicHID.h index 0a9a6ef..fd4df1a 100644 --- a/Joystick/src/DynamicHID/DynamicHID.h +++ b/Joystick/src/DynamicHID/DynamicHID.h @@ -25,6 +25,8 @@ #include #include +#if !defined(ARDUINO_SAMD_VARIANT_COMPLIANCE) + #ifdef _VARIANT_ARDUINO_DUE_X_ // The following values are the same as AVR's USBAPI.h // Reproduced here because SAM doesn't have these in @@ -142,3 +144,5 @@ DynamicHID_& DynamicHID(); #endif // USBCON #endif // DYNAMIC_HID_h + +#endif // !defined(ARDUINO_SAMD_VARIANT_COMPLIANCE) diff --git a/Joystick/src/Joystick.cpp b/Joystick/src/Joystick.cpp index db988cc..8fa99b2 100644 --- a/Joystick/src/Joystick.cpp +++ b/Joystick/src/Joystick.cpp @@ -20,7 +20,7 @@ #include "Joystick.h" -#if defined(_USING_DYNAMIC_HID) +#if defined(_USING_DYNAMIC_HID) || defined(_USING_HID) #define JOYSTICK_REPORT_ID_INDEX 7 #define JOYSTICK_AXIS_MINIMUM -32767 @@ -435,8 +435,14 @@ Joystick_::Joystick_( memcpy(customHidReportDescriptor, tempHidReportDescriptor, hidReportDescriptorSize); // Register HID Report Description - DynamicHIDSubDescriptor *node = new DynamicHIDSubDescriptor(customHidReportDescriptor, hidReportDescriptorSize, false); - DynamicHID().AppendDescriptor(node); + #if defined(_USING_DYNAMIC_HID) + DynamicHIDSubDescriptor *node = new DynamicHIDSubDescriptor(customHidReportDescriptor, hidReportDescriptorSize, false); + DynamicHID().AppendDescriptor(node); + #else + static HIDSubDescriptor node(customHidReportDescriptor, hidReportDescriptorSize); + HID().AppendDescriptor(&node); + #endif + // Setup Joystick State if (buttonCount > 0) { @@ -674,7 +680,11 @@ 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])); - DynamicHID().SendReport(_hidReportId, data, _hidReportSize); + #if defined(_USING_DYNAMIC_HID) + DynamicHID().SendReport(_hidReportId, data, _hidReportSize); + #else + HID().SendReport(_hidReportId,data,_hidReportSize); + #endif } #endif diff --git a/Joystick/src/Joystick.h b/Joystick/src/Joystick.h index a20d374..5e7e4c3 100644 --- a/Joystick/src/Joystick.h +++ b/Joystick/src/Joystick.h @@ -21,7 +21,13 @@ #ifndef JOYSTICK_h #define JOYSTICK_h +#include + +#if defined(ARDUINO_SAMD_VARIANT_COMPLIANCE) +#include +#else #include +#endif // defined(ARDUINO_SAMD_VARIANT_COMPLIANCE) #if ARDUINO < 10606 #error The Joystick library requires Arduino IDE 1.6.6 or greater. Please update your IDE. @@ -33,11 +39,11 @@ #endif // !defined(USBCON) #endif // ARDUINO > 10606 -#if !defined(_USING_DYNAMIC_HID) +#if !defined(_USING_DYNAMIC_HID) && !defined(_USING_HID) #warning "Using legacy HID core (non pluggable)" -#else // !defined(_USING_DYNAMIC_HID) +#else // !defined(_USING_DYNAMIC_HID) && !defined(_USING_HID) //================================================================================ // Joystick (Gamepad) @@ -214,5 +220,5 @@ class Joystick_ void sendState(); }; -#endif // !defined(_USING_DYNAMIC_HID) +#endif // !defined(_USING_DYNAMIC_HID) && !defined(_USING_HID) #endif // JOYSTICK_h