diff options
author | NicoHood <NicoHood@users.noreply.github.com> | 2015-08-07 19:45:18 +0200 |
---|---|---|
committer | NicoHood <NicoHood@users.noreply.github.com> | 2015-08-12 17:48:17 +0200 |
commit | d1fe40060e3c9b1f060e86221aeabf7f70a66316 (patch) | |
tree | 9f689cdf0c5db83cceccedf0e289d8ae0ccf2f50 | |
parent | 488ace3d138ef1eb183ab53b9b24fa9ea3eeb301 (diff) |
Added 16 byte endpoint support
-rw-r--r-- | cores/arduino/CDC.cpp | 4 | ||||
-rw-r--r-- | cores/arduino/USBAPI.h | 6 | ||||
-rw-r--r-- | cores/arduino/USBCore.cpp | 9 | ||||
-rw-r--r-- | libraries/HID/HID.cpp | 2 |
4 files changed, 17 insertions, 4 deletions
diff --git a/cores/arduino/CDC.cpp b/cores/arduino/CDC.cpp index 63983d9..7c7eacf 100644 --- a/cores/arduino/CDC.cpp +++ b/cores/arduino/CDC.cpp @@ -49,8 +49,8 @@ const CDCDescriptor _cdcInterface = // CDC data interface D_INTERFACE(CDC_DATA_INTERFACE,2,CDC_DATA_INTERFACE_CLASS,0,0), - D_ENDPOINT(USB_ENDPOINT_OUT(CDC_ENDPOINT_OUT),USB_ENDPOINT_TYPE_BULK,0x40,0), - D_ENDPOINT(USB_ENDPOINT_IN (CDC_ENDPOINT_IN ),USB_ENDPOINT_TYPE_BULK,0x40,0) + D_ENDPOINT(USB_ENDPOINT_OUT(CDC_ENDPOINT_OUT),USB_ENDPOINT_TYPE_BULK,USB_EP_SIZE,0), + D_ENDPOINT(USB_ENDPOINT_IN (CDC_ENDPOINT_IN ),USB_ENDPOINT_TYPE_BULK,USB_EP_SIZE,0) }; int CDC_GetInterface(u8* interfaceNum) diff --git a/cores/arduino/USBAPI.h b/cores/arduino/USBAPI.h index 4abd961..5caacc5 100644 --- a/cores/arduino/USBAPI.h +++ b/cores/arduino/USBAPI.h @@ -32,6 +32,12 @@ typedef unsigned long u32; #include "Arduino.h" +// This definitions is usefull if you want to reduce the EP_SIZE to 16 +// at the moment only 64 and 16 as EP_SIZE for all EPs are supported except the control endpoint +#ifndef USB_EP_SIZE +#define USB_EP_SIZE 64 +#endif + #if defined(USBCON) #include "USBDesc.h" diff --git a/cores/arduino/USBCore.cpp b/cores/arduino/USBCore.cpp index 05e2f24..fd25793 100644 --- a/cores/arduino/USBCore.cpp +++ b/cores/arduino/USBCore.cpp @@ -253,7 +253,7 @@ u8 USB_SendSpace(u8 ep) LockEP lock(ep); if (!ReadWriteAllowed()) return 0; - return 64 - FifoByteCount(); + return USB_EP_SIZE - FifoByteCount(); } // Blocking Send of data to an endpoint @@ -326,6 +326,7 @@ u8 _initEndpoints[] = #define EP_SINGLE_64 0x32 // EP0 #define EP_DOUBLE_64 0x36 // Other endpoints +#define EP_SINGLE_16 0x12 static void InitEP(u8 index, u8 type, u8 size) @@ -344,7 +345,13 @@ void InitEndpoints() UENUM = i; UECONX = (1<<EPEN); UECFG0X = _initEndpoints[i]; +#if USB_EP_SIZE == 16 + UECFG1X = EP_SINGLE_16; +#elif USB_EP_SIZE == 64 UECFG1X = EP_DOUBLE_64; +#else +#error Unsupported value for USB_EP_SIZE +#endif } UERST = 0x7E; // And reset them UERST = 0; diff --git a/libraries/HID/HID.cpp b/libraries/HID/HID.cpp index 04b5731..c629eb9 100644 --- a/libraries/HID/HID.cpp +++ b/libraries/HID/HID.cpp @@ -59,7 +59,7 @@ int HID_GetInterface(u8* interfaceNum) { D_INTERFACE(HID_INTERFACE,1,3,0,0), D_HIDREPORT(sizeof_hidReportDescriptor), - D_ENDPOINT(USB_ENDPOINT_IN (HID_ENDPOINT_INT),USB_ENDPOINT_TYPE_INTERRUPT,0x40,0x01) + D_ENDPOINT(USB_ENDPOINT_IN (HID_ENDPOINT_INT),USB_ENDPOINT_TYPE_INTERRUPT,USB_EP_SIZE,0x01) }; return USB_SendControl(0,&_hidInterface,sizeof(_hidInterface)); } |