aboutsummaryrefslogtreecommitdiff
path: root/tmk_core
diff options
context:
space:
mode:
Diffstat (limited to 'tmk_core')
-rw-r--r--tmk_core/protocol/vusb/usbconfig.h22
-rw-r--r--tmk_core/protocol/vusb/vusb.c34
-rw-r--r--tmk_core/protocol/vusb/vusb.h8
3 files changed, 11 insertions, 53 deletions
diff --git a/tmk_core/protocol/vusb/usbconfig.h b/tmk_core/protocol/vusb/usbconfig.h
index f15616351..f118dc8ed 100644
--- a/tmk_core/protocol/vusb/usbconfig.h
+++ b/tmk_core/protocol/vusb/usbconfig.h
@@ -41,15 +41,6 @@ section at the end of this file).
41 * interrupt, the USB interrupt will also be triggered at Start-Of-Frame 41 * interrupt, the USB interrupt will also be triggered at Start-Of-Frame
42 * markers every millisecond.] 42 * markers every millisecond.]
43 */ 43 */
44#define USB_CFG_CLOCK_KHZ (F_CPU/1000)
45/* Clock rate of the AVR in kHz. Legal values are 12000, 12800, 15000, 16000,
46 * 16500, 18000 and 20000. The 12.8 MHz and 16.5 MHz versions of the code
47 * require no crystal, they tolerate +/- 1% deviation from the nominal
48 * frequency. All other rates require a precision of 2000 ppm and thus a
49 * crystal!
50 * Since F_CPU should be defined to your actual clock rate anyway, you should
51 * not need to modify this setting.
52 */
53#define USB_CFG_CHECK_CRC 0 44#define USB_CFG_CHECK_CRC 0
54/* Define this to 1 if you want that the driver checks integrity of incoming 45/* Define this to 1 if you want that the driver checks integrity of incoming
55 * data packets (CRC checks). CRC checks cost quite a bit of code size and are 46 * data packets (CRC checks). CRC checks cost quite a bit of code size and are
@@ -227,19 +218,6 @@ section at the end of this file).
227 * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand 218 * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
228 * the implications! 219 * the implications!
229 */ 220 */
230#define USB_CFG_DEVICE_CLASS 0
231#define USB_CFG_DEVICE_SUBCLASS 0
232/* See USB specification if you want to conform to an existing device class.
233 * Class 0xff is "vendor specific".
234 */
235#define USB_CFG_INTERFACE_CLASS 3 /* HID */
236#define USB_CFG_INTERFACE_SUBCLASS 1 /* Boot */
237#define USB_CFG_INTERFACE_PROTOCOL 1 /* Keyboard */
238/* See USB specification if you want to conform to an existing device class or
239 * protocol. The following classes must be set at interface level:
240 * HID class is 3, no subclass and protocol required (but may be useful!)
241 * CDC class is 2, use subclass 2 and protocol 1 for ACM
242 */
243#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 0 221#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 0
244/* Define this to the length of the HID report descriptor, if you implement 222/* Define this to the length of the HID report descriptor, if you implement
245 * an HID device. Otherwise don't define it or define it to 0. 223 * an HID device. Otherwise don't define it or define it to 0.
diff --git a/tmk_core/protocol/vusb/vusb.c b/tmk_core/protocol/vusb/vusb.c
index 470d29ba3..c4baf5ab0 100644
--- a/tmk_core/protocol/vusb/vusb.c
+++ b/tmk_core/protocol/vusb/vusb.c
@@ -28,7 +28,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
28#include "vusb.h" 28#include "vusb.h"
29#include <util/delay.h> 29#include <util/delay.h>
30 30
31#if defined(RAW_ENABLE) 31#ifdef RAW_ENABLE
32# include "raw_hid.h" 32# include "raw_hid.h"
33#endif 33#endif
34 34
@@ -158,7 +158,7 @@ typedef struct {
158} __attribute__((packed)) vusb_mouse_report_t; 158} __attribute__((packed)) vusb_mouse_report_t;
159 159
160static void send_mouse(report_mouse_t *report) { 160static void send_mouse(report_mouse_t *report) {
161#if defined(MOUSE_ENABLE) 161#ifdef MOUSE_ENABLE
162 vusb_mouse_report_t r = {.report_id = REPORT_ID_MOUSE, .report = *report}; 162 vusb_mouse_report_t r = {.report_id = REPORT_ID_MOUSE, .report = *report};
163 if (usbInterruptIsReady3()) { 163 if (usbInterruptIsReady3()) {
164 usbSetInterrupt3((void *)&r, sizeof(vusb_mouse_report_t)); 164 usbSetInterrupt3((void *)&r, sizeof(vusb_mouse_report_t));
@@ -410,7 +410,7 @@ const PROGMEM uchar mouse_extra_hid_report[] = {
410}; 410};
411#endif 411#endif
412 412
413#if defined(RAW_ENABLE) 413#ifdef RAW_ENABLE
414const PROGMEM uchar raw_hid_report[] = { 414const PROGMEM uchar raw_hid_report[] = {
415 0x06, 0x60, 0xFF, // Usage Page (Vendor Defined) 415 0x06, 0x60, 0xFF, // Usage Page (Vendor Defined)
416 0x09, 0x61, // Usage (Vendor Defined) 416 0x09, 0x61, // Usage (Vendor Defined)
@@ -479,7 +479,6 @@ const PROGMEM usbStringDescriptor_t usbStringDescriptorSerial = {
479 .bString = LSTR(SERIAL_NUMBER) 479 .bString = LSTR(SERIAL_NUMBER)
480}; 480};
481 481
482#if USB_CFG_DESCR_PROPS_DEVICE
483/* 482/*
484 * Device descriptor 483 * Device descriptor
485 */ 484 */
@@ -489,8 +488,8 @@ const PROGMEM usbDeviceDescriptor_t usbDeviceDescriptor = {
489 .bDescriptorType = USBDESCR_DEVICE 488 .bDescriptorType = USBDESCR_DEVICE
490 }, 489 },
491 .bcdUSB = 0x0110, 490 .bcdUSB = 0x0110,
492 .bDeviceClass = USB_CFG_DEVICE_CLASS, 491 .bDeviceClass = 0x00,
493 .bDeviceSubClass = USB_CFG_DEVICE_SUBCLASS, 492 .bDeviceSubClass = 0x00,
494 .bDeviceProtocol = 0x00, 493 .bDeviceProtocol = 0x00,
495 .bMaxPacketSize0 = 8, 494 .bMaxPacketSize0 = 8,
496 .idVendor = VENDOR_ID, 495 .idVendor = VENDOR_ID,
@@ -501,9 +500,7 @@ const PROGMEM usbDeviceDescriptor_t usbDeviceDescriptor = {
501 .iSerialNumber = 0x03, 500 .iSerialNumber = 0x03,
502 .bNumConfigurations = 1 501 .bNumConfigurations = 1
503}; 502};
504#endif
505 503
506#if USB_CFG_DESCR_PROPS_CONFIGURATION
507/* 504/*
508 * Configuration descriptors 505 * Configuration descriptors
509 */ 506 */
@@ -535,10 +532,10 @@ const PROGMEM usbConfigurationDescriptor_t usbConfigurationDescriptor = {
535 }, 532 },
536 .bInterfaceNumber = 0, 533 .bInterfaceNumber = 0,
537 .bAlternateSetting = 0x00, 534 .bAlternateSetting = 0x00,
538 .bNumEndpoints = USB_CFG_HAVE_INTRIN_ENDPOINT, 535 .bNumEndpoints = 1,
539 .bInterfaceClass = USB_CFG_INTERFACE_CLASS, 536 .bInterfaceClass = 0x03,
540 .bInterfaceSubClass = USB_CFG_INTERFACE_SUBCLASS, 537 .bInterfaceSubClass = 0x01,
541 .bInterfaceProtocol = USB_CFG_INTERFACE_PROTOCOL, 538 .bInterfaceProtocol = 0x01,
542 .iInterface = 0x00 539 .iInterface = 0x00
543 }, 540 },
544 .keyboardHID = { 541 .keyboardHID = {
@@ -552,7 +549,6 @@ const PROGMEM usbConfigurationDescriptor_t usbConfigurationDescriptor = {
552 .bDescriptorType = USBDESCR_HID_REPORT, 549 .bDescriptorType = USBDESCR_HID_REPORT,
553 .wDescriptorLength = sizeof(keyboard_hid_report) 550 .wDescriptorLength = sizeof(keyboard_hid_report)
554 }, 551 },
555# ifdef USB_CFG_HAVE_INTRIN_ENDPOINT
556 .keyboardINEndpoint = { 552 .keyboardINEndpoint = {
557 .header = { 553 .header = {
558 .bLength = sizeof(usbEndpointDescriptor_t), 554 .bLength = sizeof(usbEndpointDescriptor_t),
@@ -563,7 +559,6 @@ const PROGMEM usbConfigurationDescriptor_t usbConfigurationDescriptor = {
563 .wMaxPacketSize = 8, 559 .wMaxPacketSize = 8,
564 .bInterval = USB_POLLING_INTERVAL_MS 560 .bInterval = USB_POLLING_INTERVAL_MS
565 }, 561 },
566# endif
567 562
568# if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE) 563# if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE)
569 /* 564 /*
@@ -576,7 +571,7 @@ const PROGMEM usbConfigurationDescriptor_t usbConfigurationDescriptor = {
576 }, 571 },
577 .bInterfaceNumber = 1, 572 .bInterfaceNumber = 1,
578 .bAlternateSetting = 0x00, 573 .bAlternateSetting = 0x00,
579 .bNumEndpoints = USB_CFG_HAVE_INTRIN_ENDPOINT3, 574 .bNumEndpoints = 1,
580 .bInterfaceClass = 0x03, 575 .bInterfaceClass = 0x03,
581 .bInterfaceSubClass = 0x00, 576 .bInterfaceSubClass = 0x00,
582 .bInterfaceProtocol = 0x00, 577 .bInterfaceProtocol = 0x00,
@@ -593,7 +588,6 @@ const PROGMEM usbConfigurationDescriptor_t usbConfigurationDescriptor = {
593 .bDescriptorType = USBDESCR_HID_REPORT, 588 .bDescriptorType = USBDESCR_HID_REPORT,
594 .wDescriptorLength = sizeof(mouse_extra_hid_report) 589 .wDescriptorLength = sizeof(mouse_extra_hid_report)
595 }, 590 },
596# if USB_CFG_HAVE_INTRIN_ENDPOINT3
597 .mouseExtraINEndpoint = { 591 .mouseExtraINEndpoint = {
598 .header = { 592 .header = {
599 .bLength = sizeof(usbEndpointDescriptor_t), 593 .bLength = sizeof(usbEndpointDescriptor_t),
@@ -604,7 +598,6 @@ const PROGMEM usbConfigurationDescriptor_t usbConfigurationDescriptor = {
604 .wMaxPacketSize = 8, 598 .wMaxPacketSize = 8,
605 .bInterval = USB_POLLING_INTERVAL_MS 599 .bInterval = USB_POLLING_INTERVAL_MS
606 } 600 }
607# endif
608# elif defined(RAW_ENABLE) 601# elif defined(RAW_ENABLE)
609 .rawInterface = { 602 .rawInterface = {
610 .header = { 603 .header = {
@@ -630,7 +623,6 @@ const PROGMEM usbConfigurationDescriptor_t usbConfigurationDescriptor = {
630 .bDescriptorType = USBDESCR_HID_REPORT, 623 .bDescriptorType = USBDESCR_HID_REPORT,
631 .wDescriptorLength = sizeof(raw_hid_report) 624 .wDescriptorLength = sizeof(raw_hid_report)
632 }, 625 },
633# if USB_CFG_HAVE_INTRIN_ENDPOINT3
634 .rawINEndpoint = { 626 .rawINEndpoint = {
635 .header = { 627 .header = {
636 .bLength = sizeof(usbEndpointDescriptor_t), 628 .bLength = sizeof(usbEndpointDescriptor_t),
@@ -651,10 +643,8 @@ const PROGMEM usbConfigurationDescriptor_t usbConfigurationDescriptor = {
651 .wMaxPacketSize = RAW_EPSIZE, 643 .wMaxPacketSize = RAW_EPSIZE,
652 .bInterval = USB_POLLING_INTERVAL_MS 644 .bInterval = USB_POLLING_INTERVAL_MS
653 } 645 }
654# endif
655# endif 646# endif
656}; 647};
657#endif
658 648
659// clang-format on 649// clang-format on
660 650
@@ -670,18 +660,14 @@ USB_PUBLIC usbMsgLen_t usbFunctionDescriptor(struct usbRequest *rq) {
670 debug_hex16(rq->wLength.word); debug("\n"); 660 debug_hex16(rq->wLength.word); debug("\n");
671 */ 661 */
672 switch (rq->wValue.bytes[1]) { 662 switch (rq->wValue.bytes[1]) {
673#if USB_CFG_DESCR_PROPS_DEVICE
674 case USBDESCR_DEVICE: 663 case USBDESCR_DEVICE:
675 usbMsgPtr = (unsigned char *)&usbDeviceDescriptor; 664 usbMsgPtr = (unsigned char *)&usbDeviceDescriptor;
676 len = sizeof(usbDeviceDescriptor_t); 665 len = sizeof(usbDeviceDescriptor_t);
677 break; 666 break;
678#endif
679#if USB_CFG_DESCR_PROPS_CONFIGURATION
680 case USBDESCR_CONFIG: 667 case USBDESCR_CONFIG:
681 usbMsgPtr = (unsigned char *)&usbConfigurationDescriptor; 668 usbMsgPtr = (unsigned char *)&usbConfigurationDescriptor;
682 len = sizeof(usbConfigurationDescriptor_t); 669 len = sizeof(usbConfigurationDescriptor_t);
683 break; 670 break;
684#endif
685 case USBDESCR_STRING: 671 case USBDESCR_STRING:
686 switch (rq->wValue.bytes[0]) { 672 switch (rq->wValue.bytes[0]) {
687 case 0: 673 case 0:
diff --git a/tmk_core/protocol/vusb/vusb.h b/tmk_core/protocol/vusb/vusb.h
index 6d491266d..bb2a1726e 100644
--- a/tmk_core/protocol/vusb/vusb.h
+++ b/tmk_core/protocol/vusb/vusb.h
@@ -87,23 +87,17 @@ typedef struct usbConfigurationDescriptor {
87 usbConfigurationDescriptorHeader_t header; 87 usbConfigurationDescriptorHeader_t header;
88 usbInterfaceDescriptor_t keyboardInterface; 88 usbInterfaceDescriptor_t keyboardInterface;
89 usbHIDDescriptor_t keyboardHID; 89 usbHIDDescriptor_t keyboardHID;
90#ifdef USB_CFG_HAVE_INTRIN_ENDPOINT
91 usbEndpointDescriptor_t keyboardINEndpoint; 90 usbEndpointDescriptor_t keyboardINEndpoint;
92#endif
93 91
94#if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE) 92#if defined(MOUSE_ENABLE) || defined(EXTRAKEY_ENABLE)
95 usbInterfaceDescriptor_t mouseExtraInterface; 93 usbInterfaceDescriptor_t mouseExtraInterface;
96 usbHIDDescriptor_t mouseExtraHID; 94 usbHIDDescriptor_t mouseExtraHID;
97# ifdef USB_CFG_HAVE_INTRIN_ENDPOINT3
98 usbEndpointDescriptor_t mouseExtraINEndpoint; 95 usbEndpointDescriptor_t mouseExtraINEndpoint;
99# endif
100#elif defined(RAW_ENABLE) 96#elif defined(RAW_ENABLE)
101 usbInterfaceDescriptor_t rawInterface; 97 usbInterfaceDescriptor_t rawInterface;
102 usbHIDDescriptor_t rawHID; 98 usbHIDDescriptor_t rawHID;
103# ifdef USB_CFG_HAVE_INTRIN_ENDPOINT3
104 usbEndpointDescriptor_t rawINEndpoint; 99 usbEndpointDescriptor_t rawINEndpoint;
105 usbEndpointDescriptor_t rawOUTEndpoint; 100 usbEndpointDescriptor_t rawOUTEndpoint;
106# endif
107#endif 101#endif
108} __attribute__((packed)) usbConfigurationDescriptor_t; 102} __attribute__((packed)) usbConfigurationDescriptor_t;
109 103
@@ -112,6 +106,6 @@ typedef struct usbConfigurationDescriptor {
112host_driver_t *vusb_driver(void); 106host_driver_t *vusb_driver(void);
113void vusb_transfer_keyboard(void); 107void vusb_transfer_keyboard(void);
114 108
115#if defined(RAW_ENABLE) 109#ifdef RAW_ENABLE
116void raw_hid_task(void); 110void raw_hid_task(void);
117#endif 111#endif