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 new file mode 100644 index 0000000..367e8b5 --- /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": "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 98% rename from Joystick/src/DynamicHID/DynamicHID.cpp rename to src/DynamicHID/DynamicHID.cpp index 6c46a2c..7753acb 100644 --- a/Joystick/src/DynamicHID/DynamicHID.cpp +++ b/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/src/DynamicHID/DynamicHID.h similarity index 96% rename from Joystick/src/DynamicHID/DynamicHID.h rename to src/DynamicHID/DynamicHID.h index 0a9a6ef..9a56090 100644 --- a/Joystick/src/DynamicHID/DynamicHID.h +++ b/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]; diff --git a/Joystick/src/Joystick.cpp b/src/Joystick.cpp similarity index 97% rename from Joystick/src/Joystick.cpp rename to src/Joystick.cpp index db988cc..ba52023 100644 --- a/Joystick/src/Joystick.cpp +++ b/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(intervalMs); + _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/src/Joystick.h similarity index 97% rename from Joystick/src/Joystick.h rename to src/Joystick.h index a20d374..a256194 100644 --- a/Joystick/src/Joystick.h +++ b/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