* SOFTWARE.
*/
+// ----- Includes -----
+
+// Local Includes
#include "usb_desc.h"
-// USB Descriptors are binary data which the USB host reads to
-// automatically detect a USB device's capabilities. The format
-// and meaning of every field is documented in numerous USB
-// standards. When working with USB descriptors, despite the
-// complexity of the standards and poor writing quality in many
-// of those documents, remember descriptors are nothing more
-// than constant binary data that tells the USB host what the
-// device can do. Computers will load drivers based on this data.
-// Those drivers then communicate on the endpoints specified by
-// the descriptors.
-// To configure a new combination of interfaces or make minor
-// changes to existing configuration (eg, change the name or ID
-// numbers), usually you would edit "usb_desc.h". This file
-// is meant to be configured by the header, so generally it is
-// only edited to add completely new USB interfaces or features.
+// ----- Macros -----
+#define LSB(n) ((n) & 255)
+#define MSB(n) (((n) >> 8) & 255)
-// **************************************************************
-// USB Device
-// **************************************************************
-#define LSB(n) ((n) & 255)
-#define MSB(n) (((n) >> 8) & 255)
+// ----- USB Device Descriptor -----
// USB Device Descriptor. The USB host reads this first, to learn
// what type of device is connected.
18, // bLength
1, // bDescriptorType
0x00, 0x02, // bcdUSB
-#ifdef DEVICE_CLASS
DEVICE_CLASS, // bDeviceClass
-#else
- 0,
-#endif
-#ifdef DEVICE_SUBCLASS
DEVICE_SUBCLASS, // bDeviceSubClass
-#else
- 0,
-#endif
-#ifdef DEVICE_PROTOCOL
DEVICE_PROTOCOL, // bDeviceProtocol
-#else
- 0,
-#endif
EP0_SIZE, // bMaxPacketSize0
LSB(VENDOR_ID), MSB(VENDOR_ID), // idVendor
LSB(PRODUCT_ID), MSB(PRODUCT_ID), // idProduct
1 // bNumConfigurations
};
+// USB Device Qualifier Descriptor
+static uint8_t device_qualifier_descriptor[] = {
+ 0 // Indicate only single speed
+ /* Device qualifier example (used for specifying multiple USB speeds)
+ 10, // bLength
+ 6, // bDescriptorType
+ 0x00, 0x02, // bcdUSB
+ DEVICE_CLASS, // bDeviceClass
+ DEVICE_SUBCLASS, // bDeviceSubClass
+ DEVICE_PROTOCOL, // bDeviceProtocol
+ EP0_SIZE, // bMaxPacketSize0
+ 1, // bNumOtherSpeedConfigurations
+ 0 // bReserved
+ */
+};
+
+// USB Debug Descriptor
+// XXX Not sure of exact use, lsusb requests it
+static uint8_t usb_debug_descriptor[] = {
+ 0
+};
+
+// XXX
// These descriptors must NOT be "const", because the USB DMA
// has trouble accessing flash memory with enough bandwidth
// while the processor is executing from flash.
+// XXX
-// **************************************************************
-// HID Report Descriptors
-// **************************************************************
+// ----- USB HID Report Descriptsors -----
// Each HID interface needs a special report descriptor that tells
// the meaning and format of the data.
-#ifdef KEYBOARD_INTERFACE
// Keyboard Protocol 1, HID 1.11 spec, Appendix B, page 59-60
static uint8_t keyboard_report_desc[] = {
- 0x05, 0x01, // Usage Page (Generic Desktop),
- 0x09, 0x06, // Usage (Keyboard),
- 0xA1, 0x01, // Collection (Application),
- 0x75, 0x01, // Report Size (1),
- 0x95, 0x08, // Report Count (8),
- 0x05, 0x07, // Usage Page (Key Codes),
- 0x19, 0xE0, // Usage Minimum (224),
- 0x29, 0xE7, // Usage Maximum (231),
- 0x15, 0x00, // Logical Minimum (0),
- 0x25, 0x01, // Logical Maximum (1),
- 0x81, 0x02, // Input (Data, Variable, Absolute), ;Modifier byte
- 0x95, 0x08, // Report Count (8),
- 0x75, 0x01, // Report Size (1),
- 0x15, 0x00, // Logical Minimum (0),
- 0x25, 0x01, // Logical Maximum (1),
- 0x05, 0x0C, // Usage Page (Consumer),
- 0x09, 0xE9, // Usage (Volume Increment),
- 0x09, 0xEA, // Usage (Volume Decrement),
- 0x09, 0xE2, // Usage (Mute),
- 0x09, 0xCD, // Usage (Play/Pause),
- 0x09, 0xB5, // Usage (Scan Next Track),
- 0x09, 0xB6, // Usage (Scan Previous Track),
- 0x09, 0xB7, // Usage (Stop),
- 0x09, 0xB8, // Usage (Eject),
- 0x81, 0x02, // Input (Data, Variable, Absolute), ;Media keys
- 0x95, 0x05, // Report Count (5),
- 0x75, 0x01, // Report Size (1),
- 0x05, 0x08, // Usage Page (LEDs),
- 0x19, 0x01, // Usage Minimum (1),
- 0x29, 0x05, // Usage Maximum (5),
- 0x91, 0x02, // Output (Data, Variable, Absolute), ;LED report
- 0x95, 0x01, // Report Count (1),
- 0x75, 0x03, // Report Size (3),
- 0x91, 0x03, // Output (Constant), ;LED report padding
- 0x95, 0x06, // Report Count (6),
- 0x75, 0x08, // Report Size (8),
- 0x15, 0x00, // Logical Minimum (0),
- 0x25, 0x7F, // Logical Maximum(104),
- 0x05, 0x07, // Usage Page (Key Codes),
- 0x19, 0x00, // Usage Minimum (0),
- 0x29, 0x7F, // Usage Maximum (104),
- 0x81, 0x00, // Input (Data, Array), ;Normal keys
- 0xc0 // End Collection
+ // Keyboard Collection
+ 0x05, 0x01, // Usage Page (Generic Desktop),
+ 0x09, 0x06, // Usage (Keyboard),
+ 0xA1, 0x01, // Collection (Application) - Keyboard,
+
+ // Modifier Byte
+ 0x75, 0x01, // Report Size (1),
+ 0x95, 0x08, // Report Count (8),
+ 0x05, 0x07, // Usage Page (Key Codes),
+ 0x19, 0xE0, // Usage Minimum (224),
+ 0x29, 0xE7, // Usage Maximum (231),
+ 0x15, 0x00, // Logical Minimum (0),
+ 0x25, 0x01, // Logical Maximum (1),
+ 0x81, 0x02, // Input (Data, Variable, Absolute),
+
+ // Reserved Byte
+ 0x75, 0x08, // Report Size (8),
+ 0x95, 0x01, // Report Count (1),
+ 0x81, 0x03, // Output (Constant),
+
+ // LED Report
+ 0x75, 0x01, // Report Size (1),
+ 0x95, 0x05, // Report Count (5),
+ 0x05, 0x08, // Usage Page (LEDs),
+ 0x19, 0x01, // Usage Minimum (1),
+ 0x29, 0x05, // Usage Maximum (5),
+ 0x91, 0x02, // Output (Data, Variable, Absolute),
+
+ // LED Report Padding
+ 0x75, 0x03, // Report Size (3),
+ 0x95, 0x01, // Report Count (1),
+ 0x91, 0x03, // Output (Constant),
+
+ // Normal Keys
+ 0x75, 0x08, // Report Size (8),
+ 0x95, 0x06, // Report Count (6),
+ 0x15, 0x00, // Logical Minimum (0),
+ 0x25, 0x7F, // Logical Maximum(104),
+ 0x05, 0x07, // Usage Page (Key Codes),
+ 0x19, 0x00, // Usage Minimum (0),
+ 0x29, 0x7F, // Usage Maximum (104),
+ 0x81, 0x00, // Input (Data, Array),
+ 0xc0, // End Collection - Keyboard
+};
+
+// Keyboard Protocol 1, HID 1.11 spec, Appendix B, page 59-60
+static uint8_t nkro_keyboard_report_desc[] = {
+ // Keyboard Collection
+ 0x05, 0x01, // Usage Page (Generic Desktop),
+ 0x09, 0x06, // Usage (Keyboard),
+ 0xA1, 0x01, // Collection (Application) - Keyboard,
+
+ // Modifier Byte
+ 0x85, 0x01, // Report ID (1),
+ 0x75, 0x01, // Report Size (1),
+ 0x95, 0x08, // Report Count (8),
+ 0x15, 0x00, // Logical Minimum (0),
+ 0x25, 0x01, // Logical Maximum (1),
+ 0x05, 0x07, // Usage Page (Key Codes),
+ 0x19, 0xE0, // Usage Minimum (224),
+ 0x29, 0xE7, // Usage Maximum (231),
+ 0x81, 0x02, // Input (Data, Variable, Absolute),
+
+ // LED Report
+ 0x85, 0x02, // Report ID (2),
+ 0x75, 0x01, // Report Size (1),
+ 0x95, 0x05, // Report Count (5),
+ 0x05, 0x08, // Usage Page (LEDs),
+ 0x19, 0x01, // Usage Minimum (1),
+ 0x29, 0x05, // Usage Maximum (5),
+ 0x91, 0x02, // Output (Data, Variable, Absolute),
+
+ // LED Report Padding
+ 0x75, 0x03, // Report Size (3),
+ 0x95, 0x01, // Report Count (1),
+ 0x91, 0x03, // Output (Constant),
+
+ // Normal Keys - Using an NKRO Bitmap
+ //
+ // NOTES:
+ // Supports all keys defined by the spec, except 1-3 which define error events
+ // and 0 which is "no keys pressed"
+ // See http://www.usb.org/developers/hidpage/Hut1_12v2.pdf Chapter 10
+ // Or Macros/PartialMap/usb_hid.h
+ //
+ // 165-175 are reserved/unused as well as 222-223 and 232-65535
+ // 224-231 are used for modifiers (see above)
+ //
+ // Packing of bitmaps are as follows:
+ // 4-164 : 20 bytes + 1 Report ID byte (0x04-0xA4)
+ // 176-221 : 6 bytes + 1 Report ID byte (0xB0-0xDD) (45 bits + 3 padding bits for 6 bytes total)
+ //
+ // 4-164 (20 bytes/160 bits)
+ 0x85, 0x03, // Report ID (3),
+ 0x75, 0x01, // Report Size (1),
+ 0x95, 0xA0, // Report Count (160),
+ 0x15, 0x00, // Logical Minimum (0),
+ 0x25, 0x01, // Logical Maximum (1),
+ 0x05, 0x07, // Usage Page (Key Codes),
+ 0x19, 0x04, // Usage Minimum (4),
+ 0x29, 0xA4, // Usage Maximum (164),
+ 0x81, 0x02, // Input (Data, Variable, Absolute, Bitfield),
+
+ // 176-221 (45 bits)
+ 0x85, 0x04, // Report ID (4),
+ 0x75, 0x01, // Report Size (1),
+ 0x95, 0x2D, // Report Count (45),
+ 0x15, 0x00, // Logical Minimum (0),
+ 0x25, 0x01, // Logical Maximum (1),
+ 0x05, 0x07, // Usage Page (Key Codes),
+ 0x19, 0xB0, // Usage Minimum (176),
+ 0x29, 0xDD, // Usage Maximum (221),
+ 0x81, 0x02, // Input (Data, Variable, Absolute, Bitfield),
+
+ // 176-221 Padding (3 bits)
+ 0x75, 0x03, // Report Size (3),
+ 0x95, 0x01, // Report Count (1),
+ 0x81, 0x03, // Input (Constant),
+ 0xc0, // End Collection - Keyboard
+
+ // System Control Collection
+ //
+ // NOTES:
+ // Not bothering with NKRO for this table. If there's need, I can implement it. -HaaTa
+ // Using a 1KRO scheme
+ 0x05, 0x01, // Usage Page (Generic Desktop),
+ 0x09, 0x80, // Usage (System Control),
+ 0xA1, 0x01, // Collection (Application),
+ 0x85, 0x05, // Report ID (5),
+ 0x75, 0x08, // Report Size (8),
+ 0x95, 0x01, // Report Count (1),
+ 0x16, 0x81, 0x00, // Logical Minimum (129),
+ 0x26, 0xB7, 0x00, // Logical Maximum (183),
+ 0x19, 0x81, // Usage Minimum (129),
+ 0x29, 0xB7, // Usage Maximum (183),
+ 0x81, 0x00, // Input (Data, Array),
+ 0xc0, // End Collection - System Control
+
+ // Consumer Control Collection - Media Keys
+ //
+ // NOTES:
+ // Not bothering with NKRO for this table. If there's a need, I can implement it. -HaaTa
+ // Using a 1KRO scheme
+ 0x05, 0x0c, // Usage Page (Consumer),
+ 0x09, 0x01, // Usage (Consumer Control),
+ 0xA1, 0x01, // Collection (Application),
+ 0x85, 0x06, // Report ID (6),
+ 0x75, 0x10, // Report Size (16),
+ 0x95, 0x01, // Report Count (1),
+ 0x16, 0x20, 0x00, // Logical Minimum (32),
+ 0x26, 0x9C, 0x02, // Logical Maximum (668),
+ 0x05, 0x0C, // Usage Page (Consumer),
+ 0x19, 0x20, // Usage Minimum (32),
+ 0x2A, 0x9C, 0x02, // Usage Maximum (668),
+ 0x81, 0x00, // Input (Data, Array),
+ 0xc0, // End Collection - Consumer Control
};
-#endif
-#ifdef MOUSE_INTERFACE
+/* MOUSE
// Mouse Protocol 1, HID 1.11 spec, Appendix B, page 59-60, with wheel extension
static uint8_t mouse_report_desc[] = {
0x05, 0x01, // Usage Page (Generic Desktop)
0x81, 0x06, // Input (Data, Variable, Relative)
0xC0 // End Collection
};
-#endif
+*/
-// **************************************************************
-// USB Configuration
-// **************************************************************
+// ----- USB Configuration -----
// USB Configuration Descriptor. This huge descriptor tells all
// of the devices capbilities.
static uint8_t config_descriptor[CONFIG_DESC_SIZE] = {
+// --- Configuration ---
+// - 9 bytes -
// configuration descriptor, USB spec 9.6.3, page 264-266, Table 9-10
9, // bLength;
2, // bDescriptorType;
- LSB(CONFIG_DESC_SIZE), // wTotalLength
+ LSB(CONFIG_DESC_SIZE), // wTotalLength
MSB(CONFIG_DESC_SIZE),
NUM_INTERFACE, // bNumInterfaces
1, // bConfigurationValue
0, // iConfiguration
0xC0, // bmAttributes
- 50, // bMaxPower
+ 250, // bMaxPower
-#ifdef CDC_IAD_DESCRIPTOR
+// --- Keyboard HID --- Boot Mode Keyboard Interface
+// - 9 bytes -
+ // interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
+ 9, // bLength
+ 4, // bDescriptorType
+ KEYBOARD_INTERFACE, // bInterfaceNumber
+ 0, // bAlternateSetting
+ 1, // bNumEndpoints
+ 0x03, // bInterfaceClass (0x03 = HID)
+ 0x01, // bInterfaceSubClass (0x00 = Non-Boot, 0x01 = Boot)
+ 0x01, // bInterfaceProtocol (0x01 = Keyboard)
+ 0, // iInterface
+// - 9 bytes -
+ // HID interface descriptor, HID 1.11 spec, section 6.2.1
+ 9, // bLength
+ 0x21, // bDescriptorType
+ 0x11, 0x01, // bcdHID
+ 0, // bCountryCode
+ 1, // bNumDescriptors
+ 0x22, // bDescriptorType
+ LSB(sizeof(keyboard_report_desc)), // wDescriptorLength
+ MSB(sizeof(keyboard_report_desc)),
+// - 7 bytes -
+ // endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13
+ 7, // bLength
+ 5, // bDescriptorType
+ KEYBOARD_ENDPOINT | 0x80, // bEndpointAddress
+ 0x03, // bmAttributes (0x03=intr)
+ KEYBOARD_SIZE, 0, // wMaxPacketSize
+ KEYBOARD_INTERVAL, // bInterval
+
+// --- NKRO Keyboard HID --- OS Mode Keyboard Interface
+// - 9 bytes -
+ // interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
+ 9, // bLength
+ 4, // bDescriptorType
+ NKRO_KEYBOARD_INTERFACE, // bInterfaceNumber
+ 0, // bAlternateSetting
+ 1, // bNumEndpoints
+ 0x03, // bInterfaceClass (0x03 = HID)
+ 0x00, // bInterfaceSubClass (0x00 = Non-Boot, 0x01 = Boot)
+ 0x01, // bInterfaceProtocol (0x01 = Keyboard)
+ 0, // iInterface
+// - 9 bytes -
+ // HID interface descriptor, HID 1.11 spec, section 6.2.1
+ 9, // bLength
+ 0x21, // bDescriptorType
+ 0x11, 0x01, // bcdHID
+ 0, // bCountryCode
+ 1, // bNumDescriptors
+ 0x22, // bDescriptorType
+ LSB(sizeof(nkro_keyboard_report_desc)), // wDescriptorLength
+ MSB(sizeof(nkro_keyboard_report_desc)),
+// - 7 bytes -
+ // endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13
+ 7, // bLength
+ 5, // bDescriptorType
+ NKRO_KEYBOARD_ENDPOINT | 0x80, // bEndpointAddress
+ 0x03, // bmAttributes (0x03=intr)
+ NKRO_KEYBOARD_SIZE, 0, // wMaxPacketSize
+ NKRO_KEYBOARD_INTERVAL, // bInterval
+
+// --- Serial CDC --- CDC IAD Descriptor
+// - 8 bytes -
// interface association descriptor, USB ECN, Table 9-Z
8, // bLength
11, // bDescriptorType
0x02, // bFunctionSubClass
0x01, // bFunctionProtocol
4, // iFunction
-#endif
-#ifdef CDC_DATA_INTERFACE
+// --- Serial CDC --- CDC Data Interface
+// - 9 bytes -
// interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
9, // bLength
4, // bDescriptorType
0x02, // bInterfaceSubClass
0x01, // bInterfaceProtocol
0, // iInterface
+// - 5 bytes -
// CDC Header Functional Descriptor, CDC Spec 5.2.3.1, Table 26
5, // bFunctionLength
0x24, // bDescriptorType
0x00, // bDescriptorSubtype
0x10, 0x01, // bcdCDC
+// - 5 bytes -
// Call Management Functional Descriptor, CDC Spec 5.2.3.2, Table 27
5, // bFunctionLength
0x24, // bDescriptorType
0x01, // bDescriptorSubtype
0x01, // bmCapabilities
1, // bDataInterface
+// - 4 bytes -
// Abstract Control Management Functional Descriptor, CDC Spec 5.2.3.3, Table 28
4, // bFunctionLength
0x24, // bDescriptorType
0x02, // bDescriptorSubtype
0x06, // bmCapabilities
+// - 5 bytes -
// Union Functional Descriptor, CDC Spec 5.2.3.8, Table 33
5, // bFunctionLength
0x24, // bDescriptorType
0x06, // bDescriptorSubtype
CDC_STATUS_INTERFACE, // bMasterInterface
CDC_DATA_INTERFACE, // bSlaveInterface0
+// - 7 bytes -
// endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13
7, // bLength
5, // bDescriptorType
0x03, // bmAttributes (0x03=intr)
CDC_ACM_SIZE, 0, // wMaxPacketSize
64, // bInterval
+// - 9 bytes -
// interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
9, // bLength
4, // bDescriptorType
0x00, // bInterfaceSubClass
0x00, // bInterfaceProtocol
0, // iInterface
+// - 7 bytes -
// endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13
7, // bLength
5, // bDescriptorType
0x02, // bmAttributes (0x02=bulk)
CDC_RX_SIZE, 0, // wMaxPacketSize
0, // bInterval
+// - 7 bytes -
// endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13
7, // bLength
5, // bDescriptorType
0x02, // bmAttributes (0x02=bulk)
CDC_TX_SIZE, 0, // wMaxPacketSize
0, // bInterval
-#endif // CDC_DATA_INTERFACE
-
-#ifdef KEYBOARD_INTERFACE
- // interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
- 9, // bLength
- 4, // bDescriptorType
- KEYBOARD_INTERFACE, // bInterfaceNumber
- 0, // bAlternateSetting
- 1, // bNumEndpoints
- 0x03, // bInterfaceClass (0x03 = HID)
- 0x01, // bInterfaceSubClass (0x01 = Boot)
- 0x01, // bInterfaceProtocol (0x01 = Keyboard)
- 0, // iInterface
- // HID interface descriptor, HID 1.11 spec, section 6.2.1
- 9, // bLength
- 0x21, // bDescriptorType
- 0x11, 0x01, // bcdHID
- 0, // bCountryCode
- 1, // bNumDescriptors
- 0x22, // bDescriptorType
- LSB(sizeof(keyboard_report_desc)), // wDescriptorLength
- MSB(sizeof(keyboard_report_desc)),
- // endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13
- 7, // bLength
- 5, // bDescriptorType
- KEYBOARD_ENDPOINT | 0x80, // bEndpointAddress
- 0x03, // bmAttributes (0x03=intr)
- KEYBOARD_SIZE, 0, // wMaxPacketSize
- KEYBOARD_INTERVAL, // bInterval
-#endif // KEYBOARD_INTERFACE
-#ifdef MOUSE_INTERFACE
+/*
+// Mouse Interface
+// - 9 bytes -
// interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
9, // bLength
4, // bDescriptorType
0x00, // bInterfaceSubClass (0x01 = Boot)
0x00, // bInterfaceProtocol (0x02 = Mouse)
0, // iInterface
+// - 9 bytes -
// HID interface descriptor, HID 1.11 spec, section 6.2.1
9, // bLength
0x21, // bDescriptorType
0x22, // bDescriptorType
LSB(sizeof(mouse_report_desc)), // wDescriptorLength
MSB(sizeof(mouse_report_desc)),
+// - 7 bytes -
// endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13
7, // bLength
5, // bDescriptorType
MOUSE_SIZE, 0, // wMaxPacketSize
MOUSE_INTERVAL, // bInterval
#endif // MOUSE_INTERFACE
+*/
};
-// **************************************************************
-// String Descriptors
-// **************************************************************
+// ----- String Descriptors -----
// The descriptors above can provide human readable strings,
// referenced by index numbers. These descriptors are the
};
-// **************************************************************
-// Descriptors List
-// **************************************************************
+
+// ----- Descriptors List -----
// This table provides access to all the descriptor data above.
//wValue, wIndex, address, length
{0x0100, 0x0000, device_descriptor, sizeof(device_descriptor)},
{0x0200, 0x0000, config_descriptor, sizeof(config_descriptor)},
-#ifdef KEYBOARD_INTERFACE
+ {0x0600, 0x0000, device_qualifier_descriptor, sizeof(device_qualifier_descriptor)},
+ {0x0A00, 0x0000, usb_debug_descriptor, sizeof(usb_debug_descriptor)},
{0x2200, KEYBOARD_INTERFACE, keyboard_report_desc, sizeof(keyboard_report_desc)},
- {0x2100, KEYBOARD_INTERFACE, config_descriptor+KEYBOARD_DESC_OFFSET, 9},
-#endif
-#ifdef MOUSE_INTERFACE
+ {0x2100, KEYBOARD_INTERFACE, config_descriptor + KEYBOARD_DESC_OFFSET, 9},
+ {0x2200, NKRO_KEYBOARD_INTERFACE, nkro_keyboard_report_desc, sizeof(nkro_keyboard_report_desc)},
+ {0x2100, NKRO_KEYBOARD_INTERFACE, config_descriptor + NKRO_KEYBOARD_DESC_OFFSET, 9},
+/* MOUSE
{0x2200, MOUSE_INTERFACE, mouse_report_desc, sizeof(mouse_report_desc)},
{0x2100, MOUSE_INTERFACE, config_descriptor+MOUSE_DESC_OFFSET, 9},
-#endif
+*/
{0x0300, 0x0000, (const uint8_t *)&string0, 0},
{0x0301, 0x0409, (const uint8_t *)&usb_string_manufacturer_name, 0},
{0x0302, 0x0409, (const uint8_t *)&usb_string_product_name, 0},
};
-// **************************************************************
-// Endpoint Configuration
-// **************************************************************
-#if 0
+// ----- Endpoint Configuration -----
+
+// See usb_desc.h for Endpoint configuration
// 0x00 = not used
// 0x19 = Recieve only
// 0x15 = Transmit only
// 0x1D = Transmit & Recieve
//
-const uint8_t usb_endpoint_config_table[NUM_ENDPOINTS] =
-{
- 0x00, 0x15, 0x19, 0x15, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-#endif
-
-
const uint8_t usb_endpoint_config_table[NUM_ENDPOINTS] =
{
#if (defined(ENDPOINT1_CONFIG) && NUM_ENDPOINTS >= 1)