From 997ab96804458b87a0736c195c5ab842d0e4224d Mon Sep 17 00:00:00 2001 From: billydragon Date: Mon, 14 Dec 2020 23:19:51 +0700 Subject: [PATCH 1/6] Fix some bugs in DinamicHID for Arduino DUE --- Readme.md | 3 +++ src/DynamicHID/DynamicHID.cpp | 11 ++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Readme.md b/Readme.md index 0bf9476..7dd5897 100644 --- a/Readme.md +++ b/Readme.md @@ -1,5 +1,8 @@ # Arduino Joystick With Force Feedback Library + +Fix DinamicHID for compile with Arduino DUE. + ## Statement ### This is a joy library for Atmega32UX chip with force feedback, which can be used to make game handle with vibration, game steering wheel with force feedback, etc.Multi-axis-force-feedback feature is added. diff --git a/src/DynamicHID/DynamicHID.cpp b/src/DynamicHID/DynamicHID.cpp index e052da0..0e2194a 100644 --- a/src/DynamicHID/DynamicHID.cpp +++ b/src/DynamicHID/DynamicHID.cpp @@ -20,12 +20,16 @@ */ #include "DynamicHID.h" +#include "Arduino.h" #if defined(USBCON) #ifdef _VARIANT_ARDUINO_DUE_X_ #define USB_SendControl USBD_SendControl #define USB_Send USBD_Send +#define USB_Recv USBD_Recv +#define USB_RecvControl USBD_RecvControl +//#define USB_Available USBD_Available #endif DynamicHID_& DynamicHID() @@ -141,7 +145,8 @@ bool DynamicHID_::GetReport(USBSetup& setup) { if (report_type == DYNAMIC_HID_REPORT_TYPE_FEATURE) { if ((report_id == 6))// && (gNewEffectBlockLoad.reportId==6)) { - _delay_us(500); + //_delay_us(500); + delayMicroseconds(500); USB_SendControl(TRANSFER_RELEASE, pidReportHandler.getPIDBlockLoad(), sizeof(USB_FFBReport_PIDBlockLoad_Feature_Data_t)); pidReportHandler.pidBlockLoad.reportId = 0; return (true); @@ -237,7 +242,7 @@ bool DynamicHID_::setup(USBSetup& setup) return false; } -DynamicHID_::DynamicHID_(void) : PluggableUSBModule(PID_ENPOINT_COUNT, 1, epType), +DynamicHID_::DynamicHID_(void) : PluggableUSBModule(PID_ENPOINT_COUNT, 1, (uint32_t *)epType), rootNode(NULL), descriptorSize(0), protocol(DYNAMIC_HID_REPORT_PROTOCOL), idle(1) { @@ -252,7 +257,7 @@ int DynamicHID_::begin(void) } bool DynamicHID_::usb_Available() { - return USB_Available(PID_ENDPOINT_OUT); + return USBD_Available(PID_ENDPOINT_OUT); } #endif /* if defined(USBCON) */ From beca5531e69567a6c434d2ffb8aa13c92d423c2d Mon Sep 17 00:00:00 2001 From: billydragon Date: Mon, 14 Dec 2020 23:23:39 +0700 Subject: [PATCH 2/6] #define USB_Available USBD_Available --- src/DynamicHID/DynamicHID.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/DynamicHID/DynamicHID.cpp b/src/DynamicHID/DynamicHID.cpp index 0e2194a..0ec98e3 100644 --- a/src/DynamicHID/DynamicHID.cpp +++ b/src/DynamicHID/DynamicHID.cpp @@ -29,7 +29,7 @@ #define USB_Send USBD_Send #define USB_Recv USBD_Recv #define USB_RecvControl USBD_RecvControl -//#define USB_Available USBD_Available +#define USB_Available USBD_Available #endif DynamicHID_& DynamicHID() @@ -257,7 +257,7 @@ int DynamicHID_::begin(void) } bool DynamicHID_::usb_Available() { - return USBD_Available(PID_ENDPOINT_OUT); + return USB_Available(PID_ENDPOINT_OUT); } #endif /* if defined(USBCON) */ From 4d739ec1f99d90f50877f659bd7eb93e86fa04a5 Mon Sep 17 00:00:00 2001 From: billydragon Date: Mon, 14 Dec 2020 23:58:40 +0700 Subject: [PATCH 3/6] fix compatible PluggableUSBModule() --- src/DynamicHID/DynamicHID.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/DynamicHID/DynamicHID.cpp b/src/DynamicHID/DynamicHID.cpp index 0ec98e3..07b4d94 100644 --- a/src/DynamicHID/DynamicHID.cpp +++ b/src/DynamicHID/DynamicHID.cpp @@ -242,6 +242,7 @@ bool DynamicHID_::setup(USBSetup& setup) return false; } +#ifdef _VARIANT_ARDUINO_DUE_X_ DynamicHID_::DynamicHID_(void) : PluggableUSBModule(PID_ENPOINT_COUNT, 1, (uint32_t *)epType), rootNode(NULL), descriptorSize(0), protocol(DYNAMIC_HID_REPORT_PROTOCOL), idle(1) @@ -250,6 +251,17 @@ DynamicHID_::DynamicHID_(void) : PluggableUSBModule(PID_ENPOINT_COUNT, 1, (uint3 epType[1] = EP_TYPE_INTERRUPT_OUT; PluggableUSB().plug(this); } +#else +DynamicHID_::DynamicHID_(void) : PluggableUSBModule(PID_ENPOINT_COUNT, 1, epType), + rootNode(NULL), descriptorSize(0), + protocol(DYNAMIC_HID_REPORT_PROTOCOL), idle(1) +{ + epType[0] = EP_TYPE_INTERRUPT_IN; + epType[1] = EP_TYPE_INTERRUPT_OUT; + PluggableUSB().plug(this); +} + +#endif int DynamicHID_::begin(void) { From e9d92f1350e5215b74b91c89b1ddc04f77c51631 Mon Sep 17 00:00:00 2001 From: billydragon Date: Tue, 15 Dec 2020 10:08:23 +0700 Subject: [PATCH 4/6] Fix + optimize Arduino DUE DinamicHID module --- src/DynamicHID/DynamicHID.cpp | 12 +----------- src/DynamicHID/DynamicHID.h | 6 +++++- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/DynamicHID/DynamicHID.cpp b/src/DynamicHID/DynamicHID.cpp index 07b4d94..0bfb5c4 100644 --- a/src/DynamicHID/DynamicHID.cpp +++ b/src/DynamicHID/DynamicHID.cpp @@ -242,16 +242,7 @@ bool DynamicHID_::setup(USBSetup& setup) return false; } -#ifdef _VARIANT_ARDUINO_DUE_X_ -DynamicHID_::DynamicHID_(void) : PluggableUSBModule(PID_ENPOINT_COUNT, 1, (uint32_t *)epType), - rootNode(NULL), descriptorSize(0), - protocol(DYNAMIC_HID_REPORT_PROTOCOL), idle(1) -{ - epType[0] = EP_TYPE_INTERRUPT_IN; - epType[1] = EP_TYPE_INTERRUPT_OUT; - PluggableUSB().plug(this); -} -#else + DynamicHID_::DynamicHID_(void) : PluggableUSBModule(PID_ENPOINT_COUNT, 1, epType), rootNode(NULL), descriptorSize(0), protocol(DYNAMIC_HID_REPORT_PROTOCOL), idle(1) @@ -261,7 +252,6 @@ DynamicHID_::DynamicHID_(void) : PluggableUSBModule(PID_ENPOINT_COUNT, 1, epType PluggableUSB().plug(this); } -#endif int DynamicHID_::begin(void) { diff --git a/src/DynamicHID/DynamicHID.h b/src/DynamicHID/DynamicHID.h index 4f373f8..3aeedcb 100644 --- a/src/DynamicHID/DynamicHID.h +++ b/src/DynamicHID/DynamicHID.h @@ -135,7 +135,11 @@ class DynamicHID_ : public PluggableUSBModule uint8_t getShortName(char* name); private: - uint8_t epType[2]; + #ifdef _VARIANT_ARDUINO_DUE_X_ + uint32_t epType[2]; + #else + uint8_t epType[2]; + #endif DynamicHIDSubDescriptor* rootNode; uint16_t descriptorSize; From b324612cc23d6ab8222427b4ffcdfb705a50e960 Mon Sep 17 00:00:00 2001 From: billydragon Date: Tue, 15 Dec 2020 10:44:45 +0700 Subject: [PATCH 5/6] clean up and optimized --- src/DynamicHID/DynamicHID.cpp | 1 + src/DynamicHID/DynamicHID.h | 2 +- src/Joystick.cpp | 2 +- src/Joystick.h | 6 ++++++ 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/DynamicHID/DynamicHID.cpp b/src/DynamicHID/DynamicHID.cpp index 0bfb5c4..c775b92 100644 --- a/src/DynamicHID/DynamicHID.cpp +++ b/src/DynamicHID/DynamicHID.cpp @@ -194,6 +194,7 @@ bool DynamicHID_::SetReport(USBSetup& setup) { return true; }*/ } + return (false); } bool DynamicHID_::setup(USBSetup& setup) diff --git a/src/DynamicHID/DynamicHID.h b/src/DynamicHID/DynamicHID.h index 3aeedcb..a9230dc 100644 --- a/src/DynamicHID/DynamicHID.h +++ b/src/DynamicHID/DynamicHID.h @@ -107,8 +107,8 @@ class DynamicHIDSubDescriptor { DynamicHIDSubDescriptor(const void *d, const uint16_t l, const void* pid_d, const uint16_t pid_l, const bool ipm = true) : data(d), length(l),pid_data(pid_d), pid_length(pid_l), inProgMem(ipm) { } const void* data; - const void* pid_data; const uint16_t length; + const void* pid_data; const uint16_t pid_length; const bool inProgMem; }; diff --git a/src/Joystick.cpp b/src/Joystick.cpp index 0e30657..efe0810 100644 --- a/src/Joystick.cpp +++ b/src/Joystick.cpp @@ -560,7 +560,7 @@ int32_t Joystick_::getEffectForce(volatile TEffectState& effect,Gains _gains,Eff void Joystick_::forceCalculator(int32_t* forces) { forces[0] = 0; forces[1] = 0; - int32_t force = 0; + //int32_t force = 0; for (int id = 0; id < MAX_EFFECTS; id++) { volatile TEffectState& effect = DynamicHID().pidReportHandler.g_EffectStates[id]; if ((effect.state == MEFFECTSTATE_PLAYING) && diff --git a/src/Joystick.h b/src/Joystick.h index 9aced73..9e28ac1 100644 --- a/src/Joystick.h +++ b/src/Joystick.h @@ -58,9 +58,15 @@ #define DIRECTION_ENABLE 0x04 #define X_AXIS_ENABLE 0x01 #define Y_AXIS_ENABLE 0x02 + +#ifndef FFB_AXIS_COUNT #define FFB_AXIS_COUNT 0x02 +#endif + #define FORCE_FEEDBACK_MAXGAIN 100 +#ifndef DEG_TO_RAD #define DEG_TO_RAD ((float)((float)3.14159265359 / 180.0)) +#endif struct Gains{ uint8_t totalGain = FORCE_FEEDBACK_MAXGAIN; From 53faddb9bad51bb24a3c8833d1880d84a433cdb7 Mon Sep 17 00:00:00 2001 From: Nguyen Duong Date: Sun, 20 Dec 2020 20:15:32 +0700 Subject: [PATCH 6/6] Removd (Byte) from USB_Recv(PID_ENDPOINT_OUT) --- src/DynamicHID/DynamicHID.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DynamicHID/DynamicHID.cpp b/src/DynamicHID/DynamicHID.cpp index c775b92..d5bb0c3 100644 --- a/src/DynamicHID/DynamicHID.cpp +++ b/src/DynamicHID/DynamicHID.cpp @@ -115,7 +115,7 @@ int DynamicHID_::RecvData(byte* data) { int count = 0; while (usb_Available()) { - data[count++] = (byte)USB_Recv(PID_ENDPOINT_OUT); + data[count++] = USB_Recv(PID_ENDPOINT_OUT); } return count; }