20
20
21
21
#if defined(USBCON)
22
22
23
- #define EP_TYPE_CONTROL 0x00
24
- #define EP_TYPE_BULK_IN 0x81
25
- #define EP_TYPE_BULK_OUT 0x80
26
- #define EP_TYPE_INTERRUPT_IN 0xC1
27
- #define EP_TYPE_INTERRUPT_OUT 0xC0
28
- #define EP_TYPE_ISOCHRONOUS_IN 0x41
29
- #define EP_TYPE_ISOCHRONOUS_OUT 0x40
23
+ #define EP_TYPE_CONTROL ( 0x00 )
24
+ #define EP_TYPE_BULK_IN (( 1 <<EPTYPE1) | ( 1 <<EPDIR))
25
+ #define EP_TYPE_BULK_OUT ( 1 <<EPTYPE1)
26
+ #define EP_TYPE_INTERRUPT_IN (( 1 <<EPTYPE1) | ( 1 <<EPTYPE0) | ( 1 <<EPDIR))
27
+ #define EP_TYPE_INTERRUPT_OUT (( 1 <<EPTYPE1) | ( 1 <<EPTYPE0))
28
+ #define EP_TYPE_ISOCHRONOUS_IN (( 1 <<EPTYPE0) | ( 1 <<EPDIR))
29
+ #define EP_TYPE_ISOCHRONOUS_OUT ( 1 <<EPTYPE0)
30
30
31
31
/* * Pulse generation counters to keep track of the number of milliseconds remaining for each pulse type */
32
32
#define TX_RX_LED_PULSE_MS 100
@@ -71,19 +71,28 @@ const u8 STRING_PRODUCT[] PROGMEM = USB_PRODUCT;
71
71
72
72
const u8 STRING_MANUFACTURER[] PROGMEM = USB_MANUFACTURER;
73
73
74
-
75
- #ifdef CDC_ENABLED
76
- #define DEVICE_CLASS 0x02
77
- #else
78
- #define DEVICE_CLASS 0x00
79
- #endif
74
+ // edit by NicoHood
75
+ // refering to the official docs we have to use a different descriptor for CDC + HID:
76
+ // http://www.usb.org/developers/defined_class
80
77
81
78
// DEVICE DESCRIPTOR
79
+ #if defined(CDC_ENABLED) && defined(HID_ENABLED)
80
+ const DeviceDescriptor USB_DeviceDescriptor =
81
+ D_DEVICE (USB_DEVICE_CLASS_IAD, USB_DEVICE_SUB_CLASS_IAD, USB_DEVICE_PROTOCOL_IAD, 64 , USB_VID, USB_PID, 0x100 , IMANUFACTURER, IPRODUCT, 0 , 1 );
82
+
83
+ #elif defined(CDC_ENABLED)
82
84
const DeviceDescriptor USB_DeviceDescriptor =
83
- D_DEVICE (0x00 , 0x00 , 0x00 , 64 , USB_VID, USB_PID, 0x100 , IMANUFACTURER, IPRODUCT, 0 , 1 );
85
+ D_DEVICE (USB_DEVICE_CDC_CLASS, USB_DEVICE_CDC_SUB_CLASS, USB_DEVICE_CDC_PROTOCOL, 64 , USB_VID, USB_PID, 0x100 , IMANUFACTURER, IPRODUCT, 0 , 1 );
86
+
87
+ // #elif defined(HID_ENABLED)
88
+ #else
89
+ const DeviceDescriptor USB_DeviceDescriptor =
90
+ D_DEVICE (USB_DEVICE_NO_CLASS, USB_DEVICE_NO_SUB_CLASS, USB_DEVICE_NO_PROTOCOL, 64 , USB_VID, USB_PID, 0x100 , IMANUFACTURER, IPRODUCT, 0 , 1 );
91
+
92
+ #endif
84
93
85
94
const DeviceDescriptor USB_DeviceDescriptorA =
86
- D_DEVICE (DEVICE_CLASS, 0x00 , 0x00 , 64 , USB_VID, USB_PID, 0x100 , IMANUFACTURER, IPRODUCT, 0 , 1 );
95
+ D_DEVICE (USB_DEVICE_NO_CLASS, USB_DEVICE_NO_SUB_CLASS, USB_DEVICE_NO_PROTOCOL , 64 , USB_VID, USB_PID, 0x100 , IMANUFACTURER, IPRODUCT, 0 , 1 );
87
96
88
97
// ==================================================================
89
98
// ==================================================================
@@ -340,7 +349,7 @@ static
340
349
void InitEP (u8 index, u8 type, u8 size)
341
350
{
342
351
UENUM = index;
343
- UECONX = 1 ;
352
+ UECONX = ( 1 << EPEN) ;
344
353
UECFG0X = type;
345
354
UECFG1X = size;
346
355
}
@@ -351,7 +360,7 @@ void InitEndpoints()
351
360
for (u8 i = 1 ; i < sizeof (_initEndpoints); i++)
352
361
{
353
362
UENUM = i;
354
- UECONX = 1 ;
363
+ UECONX = ( 1 << EPEN) ;
355
364
UECFG0X = pgm_read_byte (_initEndpoints + i);
356
365
UECFG1X = EP_DOUBLE_64;
357
366
}
0 commit comments