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..d5bb0c3 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() @@ -111,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; } @@ -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); @@ -189,6 +194,7 @@ bool DynamicHID_::SetReport(USBSetup& setup) { return true; }*/ } + return (false); } bool DynamicHID_::setup(USBSetup& setup) @@ -237,6 +243,7 @@ bool DynamicHID_::setup(USBSetup& setup) return false; } + DynamicHID_::DynamicHID_(void) : PluggableUSBModule(PID_ENPOINT_COUNT, 1, epType), rootNode(NULL), descriptorSize(0), protocol(DYNAMIC_HID_REPORT_PROTOCOL), idle(1) @@ -246,6 +253,7 @@ DynamicHID_::DynamicHID_(void) : PluggableUSBModule(PID_ENPOINT_COUNT, 1, epType PluggableUSB().plug(this); } + int DynamicHID_::begin(void) { return 0; diff --git a/src/DynamicHID/DynamicHID.h b/src/DynamicHID/DynamicHID.h index 4f373f8..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; }; @@ -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; 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;