diff options
Diffstat (limited to 'cores')
| -rw-r--r-- | cores/arduino/USBAPI.h | 1 | ||||
| -rw-r--r-- | cores/arduino/USBCore.cpp | 14 | ||||
| -rw-r--r-- | cores/arduino/xinput/USB_XInput_Descriptors.cpp | 207 | ||||
| -rw-r--r-- | cores/arduino/xinput/USB_XInput_Descriptors.h | 46 | 
4 files changed, 257 insertions, 11 deletions
| diff --git a/cores/arduino/USBAPI.h b/cores/arduino/USBAPI.h index 04e3dd9..86713dd 100644 --- a/cores/arduino/USBAPI.h +++ b/cores/arduino/USBAPI.h @@ -42,6 +42,7 @@ typedef unsigned long u32;  #include "USBDesc.h"  #include "USBCore.h" +#include "xinput/USB_XInput_Descriptors.h"  //================================================================================  //================================================================================ diff --git a/cores/arduino/USBCore.cpp b/cores/arduino/USBCore.cpp index 6146954..f2f5540 100644 --- a/cores/arduino/USBCore.cpp +++ b/cores/arduino/USBCore.cpp @@ -34,7 +34,6 @@ volatile u8 RxLEDPulse; /**< Milliseconds remaining for data Rx LED pulse */  extern const u16 STRING_LANGUAGE[] PROGMEM;  extern const u8 STRING_PRODUCT[] PROGMEM;  extern const u8 STRING_MANUFACTURER[] PROGMEM; -extern const DeviceDescriptor USB_DeviceDescriptorIAD PROGMEM;  const u16 STRING_LANGUAGE[2] = {  	(3<<8) | (2+2), @@ -65,13 +64,6 @@ const u8 STRING_PRODUCT[] PROGMEM = USB_PRODUCT;  const u8 STRING_MANUFACTURER[] PROGMEM = USB_MANUFACTURER; - -#define DEVICE_CLASS 0x02 - -//	DEVICE DESCRIPTOR -const DeviceDescriptor USB_DeviceDescriptorIAD = -	D_DEVICE(0xEF,0x02,0x01,64,USB_VID,USB_PID,0x100,IMANUFACTURER,IPRODUCT,ISERIAL,1); -  //==================================================================  //================================================================== @@ -451,8 +443,8 @@ int USB_RecvControl(void* d, int len)  static  bool SendConfiguration(int maxlen)  { -	// InitControl(maxlen); -	// USB_SendControl( * Config Descriptor Here * ); +	InitControl(maxlen); +	USB_SendControl(TRANSFER_PGM, &USB_ConfigDescriptor, USB_ConfigDescriptorSize);  	return true;  } @@ -474,7 +466,7 @@ bool SendDescriptor(USBSetup& setup)  	const u8* desc_addr = 0;  	if (USB_DEVICE_DESCRIPTOR_TYPE == t)  	{ -		desc_addr = (const u8*)&USB_DeviceDescriptorIAD; +		desc_addr = (const u8*) &USB_DeviceDescriptor;  	}  	else if (USB_STRING_DESCRIPTOR_TYPE == t)  	{ diff --git a/cores/arduino/xinput/USB_XInput_Descriptors.cpp b/cores/arduino/xinput/USB_XInput_Descriptors.cpp new file mode 100644 index 0000000..c9acd02 --- /dev/null +++ b/cores/arduino/xinput/USB_XInput_Descriptors.cpp @@ -0,0 +1,207 @@ +/* + *  Project     Arduino XInput - AVR Core + *  @author     David Madison + *  @link       github.com/dmadison/ArduinoXInput_AVR + *  @license    MIT - Copyright (c) 2019 David Madison + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ + +#include "USB_XInput_Descriptors.h" + +#if defined(USBCON) + +const DeviceDescriptor USB_DeviceDescriptor = { +	0x12,           // bLength (18) +	0x01,           // bDescriptorType (DEVICE) +	USB_VERSION,    // bcdUSB (2.0) +	0xFF,           // bDeviceClass +	0xFF,           // bDeviceSubClass +	0xFF,           // bDeviceProtocol +	0x40,           // bMaxPacketSize0 +	USB_VID,        // idEVendor +	USB_PID,        // idProduct +	0x114,          // bcdDevice +	IMANUFACTURER,  // iManufacturer +	IPRODUCT,       // iProduct +	ISERIAL,        // iSerialNumber +	0x01,           // bNumConfigurations +}; + +const u8 USB_ConfigDescriptor[] = { +	// Configuration Descriptor +	0x09,        // bLength +	0x02,        // bDescriptorType (CONFIGURATION) +	0x99, 0x00,  // wTotalLength (153) +	0x04,        // bNumInterfaces +	0x01,        // bConfigurationValue +	0x00,        // iConfiguration +	0xA0,        // bmAttributes +	0xFA,        // bMaxPower + +	/* ---------------------------------------------------- */ +	// Interface 0: Control Data +	0x09,        // bLength +	0x04,        // bDescriptorType (INTERFACE) +	0x00,        // bInterfaceNumber +	0x00,        // bAlternateSetting +	0x02,        // bNumEndpoints +	0xFF,        // bInterfaceClass +	0x5D,        // bInterfaceSubClass +	0x01,        // bInterfaceProtocol +	0x00,        // iInterface + +	// Unknown Descriptor (If0) +	0x11,        // bLength +	0x21,        // bDescriptorType +	0x00, 0x01, 0x01, 0x25,  // ??? +	0x81,        // bEndpointAddress (IN, 1) +	0x14,        // bMaxDataSize +	0x00, 0x00, 0x00, 0x00, 0x13,  // ??? +	0x01,        // bEndpointAddress (OUT, 1) +	0x08,        // bMaxDataSize +	0x00, 0x00,  // ??? + +	// Endpoint 1: Control Data Out +	0x07,        // bLength +	0x05,        // bDescriptorType (ENDPOINT) +	0x81,        // bEndpointAddress (IN, 1) +	0x03,        // bmAttributes +	0x20, 0x00,  // wMaxPacketSize +	0x04,        // bInterval + +	// Endpoint 1: Control Data In +	0x07,        // bLength +	0x05,        // bDescriptorType (ENDPOINT) +	0x01,        // bEndpointAddress (OUT, 1) +	0x03,        // bmAttributes +	0x20, 0x00,  // wMaxPacketSize +	0x08,        // bInterval + +	/* ---------------------------------------------------- */ +	// Interface 1: Headset (and Expansion Port?) +	0x09,        // bLength +	0x04,        // bDescriptorType (INTERFACE) +	0x01,        // bInterfaceNumber +	0x00,        // bAlternateSetting +	0x04,        // bNumEndpoints +	0xFF,        // bInterfaceClass +	0x5D,        // bInterfaceSubClass +	0x03,        // bInterfaceProtocol +	0x00,        // iInterface + +	// Unknown Descriptor (If1) +	0x1B,        // bLength +	0x21,        // bDescriptorType +	0x00, 0x01, 0x01, 0x01,  // ??? +	0x82,        // bEndpointAddress (IN, 2) +	0x40,        // bMaxDataSize +	0x01,        // ??? +	0x02,        // bEndpointAddress (OUT, 2) +	0x20,        // bMaxDataSize +	0x16,        // ??? +	0x83,        // bEndpointAddress (IN, 3) +	0x00,        // bMaxDataSize +	0x00, 0x00, 0x00, 0x00, 0x00, 0x16,  // ??? +	0x03,        // bEndpointAddress (OUT, 3) +	0x00,        // bMaxDataSize +	0x00, 0x00, 0x00, 0x00, 0x00,  // ??? + +	// Endpoint 2: Microphone Data Out +	0x07,        // bLength +	0x05,        // bDescriptorType (ENDPOINT) +	0x82,        // bEndpointAddress (IN, 2) +	0x03,        // bmAttributes +	0x20, 0x00,  // wMaxPacketSize +	0x02,        // bInterval + +	// Endpoint 2: Headset Audio In +	0x07,        // bLength +	0x05,        // bDescriptorType (ENDPOINT) +	0x02,        // bEndpointAddress (OUT, 2) +	0x03,        // bmAttributes +	0x20, 0x00,  // wMaxPacketSize +	0x04,        // bInterval + +	// Endpoint 3: Unknown, Out +	0x07,        // bLength +	0x05,        // bDescriptorType (ENDPOINT) +	0x83,        // bEndpointAddress (IN, 3) +	0x03,        // bmAttributes +	0x20, 0x00,  // wMaxPacketSize +	0x40,        // bInterval + +	// Endpoint 3: Unknown, In +	0x07,        // bLength +	0x05,        // bDescriptorType (ENDPOINT) +	0x03,        // bEndpointAddress (OUT, 3) +	0x03,        // bmAttributes +	0x20, 0x00,  // wMaxPacketSize +	0x10,        // bInterval + +	/* ---------------------------------------------------- */ +	// Interface 2: Unknown +	0x09,        // bLength +	0x04,        // bDescriptorType (INTERFACE) +	0x02,        // bInterfaceNumber +	0x00,        // bAlternateSetting +	0x01,        // bNumEndpoints +	0xFF,        // bInterfaceClass +	0x5D,        // bInterfaceSubClass +	0x02,        // bInterfaceProtocol +	0x00,        // iInterface + +	// Unknown Descriptor (If2) +	0x09,        // bLength +	0x21,        // bDescriptorType +	0x00, 0x01, 0x01, 0x22,  // ??? +	0x84,        // bEndpointAddress (IN, 4) +	0x07,        // bMaxDataSize +	0x00,        // ??? + +	// Endpoint 4: Unknown, Out +	0x07,        // bLength +	0x05,        // bDescriptorType (ENDPOINT) +	0x84,        // bEndpointAddress (IN, 4) +	0x03,        // bmAttributes +	0x20, 0x00,  // wMaxPacketSize +	0x10,        // bInterval + +	/* ---------------------------------------------------- */ +	// Interface 3: Security Method +	0x09,        // bLength +	0x04,        // bDescriptorType (INTERFACE) +	0x03,        // bInterfaceNumber +	0x00,        // bAlternateSetting +	0x00,        // bNumEndpoints +	0xFF,        // bInterfaceClass +	0xFD,        // bInterfaceSubClass +	0x13,        // bInterfaceProtocol +	0x04,        // iInterface + +	// Unknown Descriptor (If3) +	0x06,        // bLength +	0x41,        // bDescriptorType +	0x00, 0x01, 0x01, 0x03,  // ??? +}; + +const u16 USB_ConfigDescriptorSize = sizeof(USB_ConfigDescriptor); + +#endif /* if defined(USBCON) */ diff --git a/cores/arduino/xinput/USB_XInput_Descriptors.h b/cores/arduino/xinput/USB_XInput_Descriptors.h new file mode 100644 index 0000000..e8c3c24 --- /dev/null +++ b/cores/arduino/xinput/USB_XInput_Descriptors.h @@ -0,0 +1,46 @@ +/* + *  Project     Arduino XInput - AVR Core + *  @author     David Madison + *  @link       github.com/dmadison/ArduinoXInput_AVR + *  @license    MIT - Copyright (c) 2019 David Madison + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ + +#include "USBAPI.h" + +#ifndef USB_XINPUT_DESCRIPTORS_H +#define USB_XINPUT_DESCRIPTORS_H + +#if defined(USBCON) + +extern const DeviceDescriptor USB_DeviceDescriptor PROGMEM; +extern const u8  USB_ConfigDescriptor[] PROGMEM; +extern const u16 USB_ConfigDescriptorSize PROGMEM; + +#undef USB_VID +#define USB_VID 0x045E + +#undef USB_PID +#define USB_PID 0x028E + +#endif /* if defined(USBCON) */ + +#endif /* ifndef USB_XINPUT_DESCRIPTORS_H */ | 
