diff options
Diffstat (limited to 'tmk_core/protocol/pjrc')
-rw-r--r-- | tmk_core/protocol/pjrc/main.c | 18 | ||||
-rw-r--r-- | tmk_core/protocol/pjrc/pjrc.c | 40 | ||||
-rw-r--r-- | tmk_core/protocol/pjrc/pjrc.h | 1 | ||||
-rw-r--r-- | tmk_core/protocol/pjrc/usb.c | 1464 | ||||
-rw-r--r-- | tmk_core/protocol/pjrc/usb.h | 144 | ||||
-rw-r--r-- | tmk_core/protocol/pjrc/usb_debug.c | 128 | ||||
-rw-r--r-- | tmk_core/protocol/pjrc/usb_debug.h | 15 | ||||
-rw-r--r-- | tmk_core/protocol/pjrc/usb_extra.c | 70 | ||||
-rw-r--r-- | tmk_core/protocol/pjrc/usb_extra.h | 12 | ||||
-rw-r--r-- | tmk_core/protocol/pjrc/usb_keyboard.c | 62 | ||||
-rw-r--r-- | tmk_core/protocol/pjrc/usb_keyboard.h | 8 | ||||
-rw-r--r-- | tmk_core/protocol/pjrc/usb_mouse.c | 88 | ||||
-rw-r--r-- | tmk_core/protocol/pjrc/usb_mouse.h | 25 |
13 files changed, 994 insertions, 1081 deletions
diff --git a/tmk_core/protocol/pjrc/main.c b/tmk_core/protocol/pjrc/main.c index 45eb17d4cd..d16051c5f8 100644 --- a/tmk_core/protocol/pjrc/main.c +++ b/tmk_core/protocol/pjrc/main.c @@ -1,17 +1,17 @@ /* Keyboard example with debug channel, for Teensy USB Development Board * http://www.pjrc.com/teensy/usb_keyboard.html * Copyright (c) 2008 PJRC.COM, LLC - * + * * 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 @@ -37,12 +37,9 @@ #include "host.h" #include "pjrc.h" +#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) -#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) - - -int main(void) -{ +int main(void) { // set for 16 MHz clock CPU_PRESCALE(0); @@ -52,7 +49,8 @@ int main(void) // If the Teensy is powered without a PC connected to the USB port, // this will wait forever. usb_init(); - while (!usb_configured()) /* wait */ ; + while (!usb_configured()) /* wait */ + ; print_set_sendchar(sendchar); @@ -69,6 +67,6 @@ int main(void) } } - keyboard_task(); + keyboard_task(); } } diff --git a/tmk_core/protocol/pjrc/pjrc.c b/tmk_core/protocol/pjrc/pjrc.c index 0562a12ffa..60932f59e8 100644 --- a/tmk_core/protocol/pjrc/pjrc.c +++ b/tmk_core/protocol/pjrc/pjrc.c @@ -22,54 +22,36 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include "host_driver.h" #include "pjrc.h" - /*------------------------------------------------------------------* * Host driver *------------------------------------------------------------------*/ static uint8_t keyboard_leds(void); -static void send_keyboard(report_keyboard_t *report); -static void send_mouse(report_mouse_t *report); -static void send_system(uint16_t data); -static void send_consumer(uint16_t data); +static void send_keyboard(report_keyboard_t *report); +static void send_mouse(report_mouse_t *report); +static void send_system(uint16_t data); +static void send_consumer(uint16_t data); -static host_driver_t driver = { - keyboard_leds, - send_keyboard, - send_mouse, - send_system, - send_consumer -}; +static host_driver_t driver = {keyboard_leds, send_keyboard, send_mouse, send_system, send_consumer}; -host_driver_t *pjrc_driver(void) -{ - return &driver; -} +host_driver_t *pjrc_driver(void) { return &driver; } -static uint8_t keyboard_leds(void) { - return usb_keyboard_leds; -} +static uint8_t keyboard_leds(void) { return usb_keyboard_leds; } -static void send_keyboard(report_keyboard_t *report) -{ - usb_keyboard_send_report(report); -} +static void send_keyboard(report_keyboard_t *report) { usb_keyboard_send_report(report); } -static void send_mouse(report_mouse_t *report) -{ +static void send_mouse(report_mouse_t *report) { #ifdef MOUSE_ENABLE usb_mouse_send(report->x, report->y, report->v, report->h, report->buttons); #endif } -static void send_system(uint16_t data) -{ +static void send_system(uint16_t data) { #ifdef EXTRAKEY_ENABLE usb_extra_system_send(data); #endif } -static void send_consumer(uint16_t data) -{ +static void send_consumer(uint16_t data) { #ifdef EXTRAKEY_ENABLE usb_extra_consumer_send(data); #endif diff --git a/tmk_core/protocol/pjrc/pjrc.h b/tmk_core/protocol/pjrc/pjrc.h index 06e79626fc..08a1ede186 100644 --- a/tmk_core/protocol/pjrc/pjrc.h +++ b/tmk_core/protocol/pjrc/pjrc.h @@ -20,7 +20,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include "host_driver.h" - host_driver_t *pjrc_driver(void); #endif diff --git a/tmk_core/protocol/pjrc/usb.c b/tmk_core/protocol/pjrc/usb.c index 09efbe0762..22fbcfdcd4 100644 --- a/tmk_core/protocol/pjrc/usb.c +++ b/tmk_core/protocol/pjrc/usb.c @@ -35,19 +35,18 @@ #include "print.h" #include "util.h" #ifdef SLEEP_LED_ENABLE -#include "sleep_led.h" +# include "sleep_led.h" #endif #include "suspend.h" #include "action.h" #include "action_util.h" #ifdef NKRO_ENABLE - #include "keycode_config.h" +# include "keycode_config.h" - extern keymap_config_t keymap_config; +extern keymap_config_t keymap_config; #endif - /************************************************************************** * * Configurable Options @@ -56,34 +55,32 @@ // You can change these to give your code its own name. #ifndef MANUFACTURER -# define STR_MANUFACTURER L"t.m.k." +# define STR_MANUFACTURER L"t.m.k." #else -# define STR_MANUFACTURER LSTR(MANUFACTURER) +# define STR_MANUFACTURER LSTR(MANUFACTURER) #endif #ifndef PRODUCT -# define STR_PRODUCT L"t.m.k. keyboard" +# define STR_PRODUCT L"t.m.k. keyboard" #else -# define STR_PRODUCT LSTR(PRODUCT) +# define STR_PRODUCT LSTR(PRODUCT) #endif - // Mac OS-X and Linux automatically load the correct drivers. On // Windows, even though the driver is supplied by Microsoft, an // INF file is needed to load the driver. These numbers need to // match the INF file. #ifndef VENDOR_ID -# define VENDOR_ID 0xFEED +# define VENDOR_ID 0xFEED #endif #ifndef PRODUCT_ID -# define PRODUCT_ID 0xBABE +# define PRODUCT_ID 0xBABE #endif #ifndef DEVICE_VER -# define DEVICE_VER 0x0100 +# define DEVICE_VER 0x0100 #endif - // USB devices are supposed to implment a halt feature, which is // rarely (if ever) used. If you comment this line out, the halt // code will be removed, saving 102 bytes of space (gcc 4.3.0). @@ -91,47 +88,44 @@ // operating systems. #define SUPPORT_ENDPOINT_HALT - - /************************************************************************** * * Endpoint Buffer Configuration * **************************************************************************/ -#define ENDPOINT0_SIZE 32 +#define ENDPOINT0_SIZE 32 bool remote_wakeup = false; -bool suspend = false; +bool suspend = false; // 0:control endpoint is enabled automatically by controller. static const uint8_t PROGMEM endpoint_config_table[] = { - // enable, UECFG0X(type, direction), UECFG1X(size, bank, allocation) - 1, EP_TYPE_INTERRUPT_IN, EP_SIZE(KBD_SIZE) | KBD_BUFFER, // 1 + // enable, UECFG0X(type, direction), UECFG1X(size, bank, allocation) + 1, EP_TYPE_INTERRUPT_IN, EP_SIZE(KBD_SIZE) | KBD_BUFFER, // 1 #ifdef MOUSE_ENABLE - 1, EP_TYPE_INTERRUPT_IN, EP_SIZE(MOUSE_SIZE) | MOUSE_BUFFER, // 2 + 1, EP_TYPE_INTERRUPT_IN, EP_SIZE(MOUSE_SIZE) | MOUSE_BUFFER, // 2 #else - 0, // 2 + 0, // 2 #endif #ifdef CONSOLE_ENABLE - 1, EP_TYPE_INTERRUPT_IN, EP_SIZE(DEBUG_TX_SIZE) | DEBUG_TX_BUFFER, // 3 + 1, EP_TYPE_INTERRUPT_IN, EP_SIZE(DEBUG_TX_SIZE) | DEBUG_TX_BUFFER, // 3 #else - 0, + 0, #endif #ifdef EXTRAKEY_ENABLE - 1, EP_TYPE_INTERRUPT_IN, EP_SIZE(EXTRA_SIZE) | EXTRA_BUFFER, // 4 + 1, EP_TYPE_INTERRUPT_IN, EP_SIZE(EXTRA_SIZE) | EXTRA_BUFFER, // 4 #else - 0, // 4 + 0, // 4 #endif #ifdef NKRO_ENABLE - 1, EP_TYPE_INTERRUPT_IN, EP_SIZE(KBD2_SIZE) | KBD2_BUFFER, // 5 + 1, EP_TYPE_INTERRUPT_IN, EP_SIZE(KBD2_SIZE) | KBD2_BUFFER, // 5 #else - 0, // 5 + 0, // 5 #endif - 0, // 6 + 0, // 6 }; - /************************************************************************** * * Descriptor Data @@ -144,93 +138,96 @@ static const uint8_t PROGMEM endpoint_config_table[] = { // in here should only be done by those who've read chapter 9 of the USB // spec and relevant portions of any USB class specifications! - static const uint8_t PROGMEM device_descriptor[] = { - 18, // bLength - 1, // bDescriptorType - 0x00, 0x02, // bcdUSB - 0, // bDeviceClass - 0, // bDeviceSubClass - 0, // bDeviceProtocol - ENDPOINT0_SIZE, // bMaxPacketSize0 - LSB(VENDOR_ID), MSB(VENDOR_ID), // idVendor - LSB(PRODUCT_ID), MSB(PRODUCT_ID), // idProduct - LSB(DEVICE_VER), MSB(DEVICE_VER), // bcdDevice - 1, // iManufacturer - 2, // iProduct - 0, // iSerialNumber - 1 // bNumConfigurations + 18, // bLength + 1, // bDescriptorType + 0x00, + 0x02, // bcdUSB + 0, // bDeviceClass + 0, // bDeviceSubClass + 0, // bDeviceProtocol + ENDPOINT0_SIZE, // bMaxPacketSize0 + LSB(VENDOR_ID), + MSB(VENDOR_ID), // idVendor + LSB(PRODUCT_ID), + MSB(PRODUCT_ID), // idProduct + LSB(DEVICE_VER), + MSB(DEVICE_VER), // bcdDevice + 1, // iManufacturer + 2, // iProduct + 0, // iSerialNumber + 1 // bNumConfigurations }; // Keyboard Protocol 1, HID 1.11 spec, Appendix B, page 59-60 static const uint8_t PROGMEM keyboard_hid_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, 0x01, // Report Count (1), - 0x75, 0x08, // Report Size (8), - 0x81, 0x03, // Input (Constant), ;Reserved byte - 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, KBD_REPORT_KEYS, // Report Count (), - 0x75, 0x08, // Report Size (8), - 0x15, 0x00, // Logical Minimum (0), - 0x25, 0xFF, // Logical Maximum(255), - 0x05, 0x07, // Usage Page (Key Codes), - 0x19, 0x00, // Usage Minimum (0), - 0x29, 0xFF, // Usage Maximum (255), - 0x81, 0x00, // Input (Data, Array), - 0xc0 // End Collection + 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, 0x01, // Report Count (1), + 0x75, 0x08, // Report Size (8), + 0x81, 0x03, // Input (Constant), ;Reserved byte + 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, KBD_REPORT_KEYS, // Report Count (), + 0x75, 0x08, // Report Size (8), + 0x15, 0x00, // Logical Minimum (0), + 0x25, 0xFF, // Logical Maximum(255), + 0x05, 0x07, // Usage Page (Key Codes), + 0x19, 0x00, // Usage Minimum (0), + 0x29, 0xFF, // Usage Maximum (255), + 0x81, 0x00, // Input (Data, Array), + 0xc0 // End Collection }; #ifdef NKRO_ENABLE static const uint8_t PROGMEM keyboard2_hid_report_desc[] = { - 0x05, 0x01, // Usage Page (Generic Desktop), - 0x09, 0x06, // Usage (Keyboard), - 0xA1, 0x01, // Collection (Application), - // bitmap of modifiers - 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 - // LED output report - 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), - 0x95, 0x01, // Report Count (1), - 0x75, 0x03, // Report Size (3), - 0x91, 0x03, // Output (Constant), - // bitmap of keys - 0x95, KBD2_REPORT_KEYS*8, // Report Count (), - 0x75, 0x01, // Report Size (1), - 0x15, 0x00, // Logical Minimum (0), - 0x25, 0x01, // Logical Maximum(1), - 0x05, 0x07, // Usage Page (Key Codes), - 0x19, 0x00, // Usage Minimum (0), - 0x29, KBD2_REPORT_KEYS*8-1, // Usage Maximum (), - 0x81, 0x02, // Input (Data, Variable, Absolute), - 0xc0 // End Collection + 0x05, 0x01, // Usage Page (Generic Desktop), + 0x09, 0x06, // Usage (Keyboard), + 0xA1, 0x01, // Collection (Application), + // bitmap of modifiers + 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 + // LED output report + 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), + 0x95, 0x01, // Report Count (1), + 0x75, 0x03, // Report Size (3), + 0x91, 0x03, // Output (Constant), + // bitmap of keys + 0x95, KBD2_REPORT_KEYS * 8, // Report Count (), + 0x75, 0x01, // Report Size (1), + 0x15, 0x00, // Logical Minimum (0), + 0x25, 0x01, // Logical Maximum(1), + 0x05, 0x07, // Usage Page (Key Codes), + 0x19, 0x00, // Usage Minimum (0), + 0x29, KBD2_REPORT_KEYS * 8 - 1, // Usage Maximum (), + 0x81, 0x02, // Input (Data, Variable, Absolute), + 0xc0 // End Collection }; #endif @@ -241,66 +238,66 @@ static const uint8_t PROGMEM keyboard2_hid_report_desc[] = { // http://www.microsoft.com/whdc/device/input/wheel.mspx static const uint8_t PROGMEM mouse_hid_report_desc[] = { /* mouse */ - 0x05, 0x01, // USAGE_PAGE (Generic Desktop) - 0x09, 0x02, // USAGE (Mouse) - 0xa1, 0x01, // COLLECTION (Application) - //0x85, REPORT_ID_MOUSE, // REPORT_ID (1) - 0x09, 0x01, // USAGE (Pointer) - 0xa1, 0x00, // COLLECTION (Physical) - // ---------------------------- Buttons - 0x05, 0x09, // USAGE_PAGE (Button) - 0x19, 0x01, // USAGE_MINIMUM (Button 1) - 0x29, 0x05, // USAGE_MAXIMUM (Button 5) - 0x15, 0x00, // LOGICAL_MINIMUM (0) - 0x25, 0x01, // LOGICAL_MAXIMUM (1) - 0x75, 0x01, // REPORT_SIZE (1) - 0x95, 0x05, // REPORT_COUNT (5) - 0x81, 0x02, // INPUT (Data,Var,Abs) - 0x75, 0x03, // REPORT_SIZE (3) - 0x95, 0x01, // REPORT_COUNT (1) - 0x81, 0x03, // INPUT (Cnst,Var,Abs) - // ---------------------------- X,Y position - 0x05, 0x01, // USAGE_PAGE (Generic Desktop) - 0x09, 0x30, // USAGE (X) - 0x09, 0x31, // USAGE (Y) - 0x15, 0x81, // LOGICAL_MINIMUM (-127) - 0x25, 0x7f, // LOGICAL_MAXIMUM (127) - 0x75, 0x08, // REPORT_SIZE (8) - 0x95, 0x02, // REPORT_COUNT (2) - 0x81, 0x06, // INPUT (Data,Var,Rel) - // ---------------------------- Vertical wheel - 0x09, 0x38, // USAGE (Wheel) - 0x15, 0x81, // LOGICAL_MINIMUM (-127) - 0x25, 0x7f, // LOGICAL_MAXIMUM (127) - 0x35, 0x00, // PHYSICAL_MINIMUM (0) - reset physical - 0x45, 0x00, // PHYSICAL_MAXIMUM (0) - 0x75, 0x08, // REPORT_SIZE (8) - 0x95, 0x01, // REPORT_COUNT (1) - 0x81, 0x06, // INPUT (Data,Var,Rel) - // ---------------------------- Horizontal wheel - 0x05, 0x0c, // USAGE_PAGE (Consumer Devices) - 0x0a, 0x38, 0x02, // USAGE (AC Pan) - 0x15, 0x81, // LOGICAL_MINIMUM (-127) - 0x25, 0x7f, // LOGICAL_MAXIMUM (127) - 0x75, 0x08, // REPORT_SIZE (8) - 0x95, 0x01, // REPORT_COUNT (1) - 0x81, 0x06, // INPUT (Data,Var,Rel) - 0xc0, // END_COLLECTION - 0xc0, // END_COLLECTION + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x02, // USAGE (Mouse) + 0xa1, 0x01, // COLLECTION (Application) + // 0x85, REPORT_ID_MOUSE, // REPORT_ID (1) + 0x09, 0x01, // USAGE (Pointer) + 0xa1, 0x00, // COLLECTION (Physical) + // ---------------------------- Buttons + 0x05, 0x09, // USAGE_PAGE (Button) + 0x19, 0x01, // USAGE_MINIMUM (Button 1) + 0x29, 0x05, // USAGE_MAXIMUM (Button 5) + 0x15, 0x00, // LOGICAL_MINIMUM (0) + 0x25, 0x01, // LOGICAL_MAXIMUM (1) + 0x75, 0x01, // REPORT_SIZE (1) + 0x95, 0x05, // REPORT_COUNT (5) + 0x81, 0x02, // INPUT (Data,Var,Abs) + 0x75, 0x03, // REPORT_SIZE (3) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x03, // INPUT (Cnst,Var,Abs) + // ---------------------------- X,Y position + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x30, // USAGE (X) + 0x09, 0x31, // USAGE (Y) + 0x15, 0x81, // LOGICAL_MINIMUM (-127) + 0x25, 0x7f, // LOGICAL_MAXIMUM (127) + 0x75, 0x08, // REPORT_SIZE (8) + 0x95, 0x02, // REPORT_COUNT (2) + 0x81, 0x06, // INPUT (Data,Var,Rel) + // ---------------------------- Vertical wheel + 0x09, 0x38, // USAGE (Wheel) + 0x15, 0x81, // LOGICAL_MINIMUM (-127) + 0x25, 0x7f, // LOGICAL_MAXIMUM (127) + 0x35, 0x00, // PHYSICAL_MINIMUM (0) - reset physical + 0x45, 0x00, // PHYSICAL_MAXIMUM (0) + 0x75, 0x08, // REPORT_SIZE (8) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x06, // INPUT (Data,Var,Rel) + // ---------------------------- Horizontal wheel + 0x05, 0x0c, // USAGE_PAGE (Consumer Devices) + 0x0a, 0x38, 0x02, // USAGE (AC Pan) + 0x15, 0x81, // LOGICAL_MINIMUM (-127) + 0x25, 0x7f, // LOGICAL_MAXIMUM (127) + 0x75, 0x08, // REPORT_SIZE (8) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x06, // INPUT (Data,Var,Rel) + 0xc0, // END_COLLECTION + 0xc0, // END_COLLECTION }; #endif static const uint8_t PROGMEM debug_hid_report_desc[] = { - 0x06, 0x31, 0xFF, // Usage Page 0xFF31 (vendor defined) - 0x09, 0x74, // Usage 0x74 - 0xA1, 0x53, // Collection 0x53 - 0x75, 0x08, // report size = 8 bits - 0x15, 0x00, // logical minimum = 0 - 0x26, 0xFF, 0x00, // logical maximum = 255 - 0x95, DEBUG_TX_SIZE, // report count - 0x09, 0x75, // usage - 0x81, 0x02, // Input (array) - 0xC0 // end collection + 0x06, 0x31, 0xFF, // Usage Page 0xFF31 (vendor defined) + 0x09, 0x74, // Usage 0x74 + 0xA1, 0x53, // Collection 0x53 + 0x75, 0x08, // report size = 8 bits + 0x15, 0x00, // logical minimum = 0 + 0x26, 0xFF, 0x00, // logical maximum = 255 + 0x95, DEBUG_TX_SIZE, // report count + 0x09, 0x75, // usage + 0x81, 0x02, // Input (array) + 0xC0 // end collection }; #ifdef EXTRAKEY_ENABLE @@ -308,225 +305,225 @@ static const uint8_t PROGMEM debug_hid_report_desc[] = { // http://www.microsoft.com/whdc/archive/w2kbd.mspx static const uint8_t PROGMEM extra_hid_report_desc[] = { /* system control */ - 0x05, 0x01, // USAGE_PAGE (Generic Desktop) - 0x09, 0x80, // USAGE (System Control) - 0xa1, 0x01, // COLLECTION (Application) - 0x85, REPORT_ID_SYSTEM, // REPORT_ID (2) - 0x15, 0x01, // LOGICAL_MINIMUM (0x1) - 0x25, 0xb7, // LOGICAL_MAXIMUM (0xb7) - 0x19, 0x01, // USAGE_MINIMUM (0x1) - 0x29, 0xb7, // USAGE_MAXIMUM (0xb7) - 0x75, 0x10, // REPORT_SIZE (16) - 0x95, 0x01, // REPORT_COUNT (1) - 0x81, 0x00, // INPUT (Data,Array,Abs) - 0xc0, // END_COLLECTION + 0x05, 0x01, // USAGE_PAGE (Generic Desktop) + 0x09, 0x80, // USAGE (System Control) + 0xa1, 0x01, // COLLECTION (Application) + 0x85, REPORT_ID_SYSTEM, // REPORT_ID (2) + 0x15, 0x01, // LOGICAL_MINIMUM (0x1) + 0x25, 0xb7, // LOGICAL_MAXIMUM (0xb7) + 0x19, 0x01, // USAGE_MINIMUM (0x1) + 0x29, 0xb7, // USAGE_MAXIMUM (0xb7) + 0x75, 0x10, // REPORT_SIZE (16) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x00, // INPUT (Data,Array,Abs) + 0xc0, // END_COLLECTION /* consumer */ - 0x05, 0x0c, // USAGE_PAGE (Consumer Devices) - 0x09, 0x01, // USAGE (Consumer Control) - 0xa1, 0x01, // COLLECTION (Application) - 0x85, REPORT_ID_CONSUMER, // REPORT_ID (3) - 0x15, 0x01, // LOGICAL_MINIMUM (0x1) - 0x26, 0x9c, 0x02, // LOGICAL_MAXIMUM (0x29c) - 0x19, 0x01, // USAGE_MINIMUM (0x1) - 0x2a, 0x9c, 0x02, // USAGE_MAXIMUM (0x29c) - 0x75, 0x10, // REPORT_SIZE (16) - 0x95, 0x01, // REPORT_COUNT (1) - 0x81, 0x00, // INPUT (Data,Array,Abs) - 0xc0, // END_COLLECTION + 0x05, 0x0c, // USAGE_PAGE (Consumer Devices) + 0x09, 0x01, // USAGE (Consumer Control) + 0xa1, 0x01, // COLLECTION (Application) + 0x85, REPORT_ID_CONSUMER, // REPORT_ID (3) + 0x15, 0x01, // LOGICAL_MINIMUM (0x1) + 0x26, 0x9c, 0x02, // LOGICAL_MAXIMUM (0x29c) + 0x19, 0x01, // USAGE_MINIMUM (0x1) + 0x2a, 0x9c, 0x02, // USAGE_MAXIMUM (0x29c) + 0x75, 0x10, // REPORT_SIZE (16) + 0x95, 0x01, // REPORT_COUNT (1) + 0x81, 0x00, // INPUT (Data,Array,Abs) + 0xc0, // END_COLLECTION }; #endif -#define KBD_HID_DESC_NUM 0 -#define KBD_HID_DESC_OFFSET (9+(9+9+7)*KBD_HID_DESC_NUM+9) +#define KBD_HID_DESC_NUM 0 +#define KBD_HID_DESC_OFFSET (9 + (9 + 9 + 7) * KBD_HID_DESC_NUM + 9) #ifdef MOUSE_ENABLE -# define MOUSE_HID_DESC_NUM (KBD_HID_DESC_NUM + 1) -# define MOUSE_HID_DESC_OFFSET (9+(9+9+7)*MOUSE_HID_DESC_NUM+9) +# define MOUSE_HID_DESC_NUM (KBD_HID_DESC_NUM + 1) +# define MOUSE_HID_DESC_OFFSET (9 + (9 + 9 + 7) * MOUSE_HID_DESC_NUM + 9) #else -# define MOUSE_HID_DESC_NUM (KBD_HID_DESC_NUM + 0) +# define MOUSE_HID_DESC_NUM (KBD_HID_DESC_NUM + 0) #endif #ifdef CONSOLE_ENABLE -#define DEBUG_HID_DESC_NUM (MOUSE_HID_DESC_NUM + 1) -#define DEBUG_HID_DESC_OFFSET (9+(9+9+7)*DEBUG_HID_DESC_NUM+9) +# define DEBUG_HID_DESC_NUM (MOUSE_HID_DESC_NUM + 1) +# define DEBUG_HID_DESC_OFFSET (9 + (9 + 9 + 7) * DEBUG_HID_DESC_NUM + 9) #else -# define DEBUG_HID_DESC_NUM (MOUSE_HID_DESC_NUM + 0) +# define DEBUG_HID_DESC_NUM (MOUSE_HID_DESC_NUM + 0) #endif #ifdef EXTRAKEY_ENABLE -# define EXTRA_HID_DESC_NUM (DEBUG_HID_DESC_NUM + 1) -# define EXTRA_HID_DESC_OFFSET (9+(9+9+7)*EXTRA_HID_DESC_NUM+9) +# define EXTRA_HID_DESC_NUM (DEBUG_HID_DESC_NUM + 1) +# define EXTRA_HID_DESC_OFFSET (9 + (9 + 9 + 7) * EXTRA_HID_DESC_NUM + 9) #else -# define EXTRA_HID_DESC_NUM (DEBUG_HID_DESC_NUM + 0) +# define EXTRA_HID_DESC_NUM (DEBUG_HID_DESC_NUM + 0) #endif #ifdef NKRO_ENABLE -# define KBD2_HID_DESC_NUM (EXTRA_HID_DESC_NUM + 1) -# define KBD2_HID_DESC_OFFSET (9+(9+9+7)*EXTRA_HID_DESC_NUM+9) +# define KBD2_HID_DESC_NUM (EXTRA_HID_DESC_NUM + 1) +# define KBD2_HID_DESC_OFFSET (9 + (9 + 9 + 7) * EXTRA_HID_DESC_NUM + 9) #else -# define KBD2_HID_DESC_NUM (EXTRA_HID_DESC_NUM + 0) +# define KBD2_HID_DESC_NUM (EXTRA_HID_DESC_NUM + 0) #endif -#define NUM_INTERFACES (KBD2_HID_DESC_NUM + 1) -#define CONFIG1_DESC_SIZE (9+(9+9+7)*NUM_INTERFACES) +#define NUM_INTERFACES (KBD2_HID_DESC_NUM + 1) +#define CONFIG1_DESC_SIZE (9 + (9 + 9 + 7) * NUM_INTERFACES) static const uint8_t PROGMEM config1_descriptor[CONFIG1_DESC_SIZE] = { - // configuration descriptor, USB spec 9.6.3, page 264-266, Table 9-10 - 9, // bLength; - 2, // bDescriptorType; - LSB(CONFIG1_DESC_SIZE), // wTotalLength - MSB(CONFIG1_DESC_SIZE), - NUM_INTERFACES, // bNumInterfaces - 1, // bConfigurationValue - 0, // iConfiguration - 0xA0, // bmAttributes - 50, // bMaxPower - - // interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12 - 9, // bLength - 4, // bDescriptorType - KBD_INTERFACE, // bInterfaceNumber - 0, // bAlternateSetting - 1, // bNumEndpoints - 0x03, // bInterfaceClass (0x03 = HID) - 0x01, // bInterfaceSubClass (0x01 = Boot) - 0x01, // bInterfaceProtocol (0x01 = Keyboard) - 0, // iInterface - // HID descriptor, HID 1.11 spec, section 6.2.1 - 9, // bLength - 0x21, // bDescriptorType - 0x11, 0x01, // bcdHID - 0, // bCountryCode - 1, // bNumDescriptors - 0x22, // bDescriptorType - sizeof(keyboard_hid_report_desc), // wDescriptorLength - 0, - // endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13 - 7, // bLength - 5, // bDescriptorType - KBD_ENDPOINT | 0x80, // bEndpointAddress - 0x03, // bmAttributes (0x03=intr) - KBD_SIZE, 0, // wMaxPacketSize - 10, // bInterval + // configuration descriptor, USB spec 9.6.3, page 264-266, Table 9-10 + 9, // bLength; + 2, // bDescriptorType; + LSB(CONFIG1_DESC_SIZE), // wTotalLength + MSB(CONFIG1_DESC_SIZE), + NUM_INTERFACES, // bNumInterfaces + 1, // bConfigurationValue + 0, // iConfiguration + 0xA0, // bmAttributes + 50, // bMaxPower + + // interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12 + 9, // bLength + 4, // bDescriptorType + KBD_INTERFACE, // bInterfaceNumber + 0, // bAlternateSetting + 1, // bNumEndpoints + 0x03, // bInterfaceClass (0x03 = HID) + 0x01, // bInterfaceSubClass (0x01 = Boot) + 0x01, // bInterfaceProtocol (0x01 = Keyboard) + 0, // iInterface + // HID descriptor, HID 1.11 spec, section 6.2.1 + 9, // bLength + 0x21, // bDescriptorType + 0x11, 0x01, // bcdHID + 0, // bCountryCode + 1, // bNumDescriptors + 0x22, // bDescriptorType + sizeof(keyboard_hid_report_desc), // wDescriptorLength + 0, + // endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13 + 7, // bLength + 5, // bDescriptorType + KBD_ENDPOINT | 0x80, // bEndpointAddress + 0x03, // bmAttributes (0x03=intr) + KBD_SIZE, 0, // wMaxPacketSize + 10, // bInterval #ifdef MOUSE_ENABLE - // interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12 - 9, // bLength - 4, // bDescriptorType - MOUSE_INTERFACE, // bInterfaceNumber - 0, // bAlternateSetting - 1, // bNumEndpoints - 0x03, // bInterfaceClass (0x03 = HID) - // ThinkPad T23 BIOS doesn't work with boot mouse. - 0x00, // bInterfaceSubClass (0x01 = Boot) - 0x00, // bInterfaceProtocol (0x02 = Mouse) -/* - 0x01, // bInterfaceSubClass (0x01 = Boot) - 0x02, // bInterfaceProtocol (0x02 = Mouse) -*/ - 0, // iInterface - // HID descriptor, HID 1.11 spec, section 6.2.1 - 9, // bLength - 0x21, // bDescriptorType - 0x11, 0x01, // bcdHID - 0, // bCountryCode - 1, // bNumDescriptors - 0x22, // bDescriptorType - sizeof(mouse_hid_report_desc), // wDescriptorLength - 0, - // endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13 - 7, // bLength - 5, // bDescriptorType - MOUSE_ENDPOINT | 0x80, // bEndpointAddress - 0x03, // bmAttributes (0x03=intr) - MOUSE_SIZE, 0, // wMaxPacketSize - 1, // bInterval + // interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12 + 9, // bLength + 4, // bDescriptorType + MOUSE_INTERFACE, // bInterfaceNumber + 0, // bAlternateSetting + 1, // bNumEndpoints + 0x03, // bInterfaceClass (0x03 = HID) + // ThinkPad T23 BIOS doesn't work with boot mouse. + 0x00, // bInterfaceSubClass (0x01 = Boot) + 0x00, // bInterfaceProtocol (0x02 = Mouse) + /* + 0x01, // bInterfaceSubClass (0x01 = Boot) + 0x02, // bInterfaceProtocol (0x02 = Mouse) + */ + 0, // iInterface + // HID descriptor, HID 1.11 spec, section 6.2.1 + 9, // bLength + 0x21, // bDescriptorType + 0x11, 0x01, // bcdHID + 0, // bCountryCode + 1, // bNumDescriptors + 0x22, // bDescriptorType + sizeof(mouse_hid_report_desc), // wDescriptorLength + 0, + // endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13 + 7, // bLength + 5, // bDescriptorType + MOUSE_ENDPOINT | 0x80, // bEndpointAddress + 0x03, // bmAttributes (0x03=intr) + MOUSE_SIZE, 0, // wMaxPacketSize + 1, // bInterval #endif #ifdef CONSOLE_ENABLE - // interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12 - 9, // bLength - 4, // bDescriptorType - DEBUG_INTERFACE, // bInterfaceNumber - 0, // bAlternateSetting - 1, // bNumEndpoints - 0x03, // bInterfaceClass (0x03 = HID) - 0x00, // bInterfaceSubClass - 0x00, // bInterfaceProtocol - 0, // iInterface - // HID descriptor, HID 1.11 spec, section 6.2.1 - 9, // bLength - 0x21, // bDescriptorType - 0x11, 0x01, // bcdHID - 0, // bCountryCode - 1, // bNumDescriptors - 0x22, // bDescriptorType - sizeof(debug_hid_report_desc), // wDescriptorLength - 0, - // endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13 - 7, // bLength - 5, // bDescriptorType - DEBUG_TX_ENDPOINT | 0x80, // bEndpointAddress - 0x03, // bmAttributes (0x03=intr) - DEBUG_TX_SIZE, 0, // wMaxPacketSize - 1, // bInterval + // interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12 + 9, // bLength + 4, // bDescriptorType + DEBUG_INTERFACE, // bInterfaceNumber + 0, // bAlternateSetting + 1, // bNumEndpoints + 0x03, // bInterfaceClass (0x03 = HID) + 0x00, // bInterfaceSubClass + 0x00, // bInterfaceProtocol + 0, // iInterface + // HID descriptor, HID 1.11 spec, section 6.2.1 + 9, // bLength + 0x21, // bDescriptorType + 0x11, 0x01, // bcdHID + 0, // bCountryCode + 1, // bNumDescriptors + 0x22, // bDescriptorType + sizeof(debug_hid_report_desc), // wDescriptorLength + 0, + // endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13 + 7, // bLength + 5, // bDescriptorType + DEBUG_TX_ENDPOINT | 0x80, // bEndpointAddress + 0x03, // bmAttributes (0x03=intr) + DEBUG_TX_SIZE, 0, // wMaxPacketSize + 1, // bInterval #endif #ifdef EXTRAKEY_ENABLE - // interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12 - 9, // bLength - 4, // bDescriptorType - EXTRA_INTERFACE, // bInterfaceNumber - 0, // bAlternateSetting - 1, // bNumEndpoints - 0x03, // bInterfaceClass (0x03 = HID) - 0x00, // bInterfaceSubClass - 0x00, // bInterfaceProtocol - 0, // iInterface - // HID descriptor, HID 1.11 spec, section 6.2.1 - 9, // bLength - 0x21, // bDescriptorType - 0x11, 0x01, // bcdHID - 0, // bCountryCode - 1, // bNumDescriptors - 0x22, // bDescriptorType - sizeof(extra_hid_report_desc), // wDescriptorLength - 0, - // endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13 - 7, // bLength - 5, // bDescriptorType - EXTRA_ENDPOINT | 0x80, // bEndpointAddress - 0x03, // bmAttributes (0x03=intr) - EXTRA_SIZE, 0, // wMaxPacketSize - 10, // bInterval + // interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12 + 9, // bLength + 4, // bDescriptorType + EXTRA_INTERFACE, // bInterfaceNumber + 0, // bAlternateSetting + 1, // bNumEndpoints + 0x03, // bInterfaceClass (0x03 = HID) + 0x00, // bInterfaceSubClass + 0x00, // bInterfaceProtocol + 0, // iInterface + // HID descriptor, HID 1.11 spec, section 6.2.1 + 9, // bLength + 0x21, // bDescriptorType + 0x11, 0x01, // bcdHID + 0, // bCountryCode + 1, // bNumDescriptors + 0x22, // bDescriptorType + sizeof(extra_hid_report_desc), // wDescriptorLength + 0, + // endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13 + 7, // bLength + 5, // bDescriptorType + EXTRA_ENDPOINT | 0x80, // bEndpointAddress + 0x03, // bmAttributes (0x03=intr) + EXTRA_SIZE, 0, // wMaxPacketSize + 10, // bInterval #endif #ifdef NKRO_ENABLE - // interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12 - 9, // bLength - 4, // bDescriptorType - KBD2_INTERFACE, // bInterfaceNumber - 0, // bAlternateSetting - 1, // bNumEndpoints - 0x03, // bInterfaceClass (0x03 = HID) - 0x00, // bInterfaceSubClass (0x01 = Boot) - 0x00, // bInterfaceProtocol (0x01 = Keyboard) - 0, // iInterface - // HID descriptor, HID 1.11 spec, section 6.2.1 - 9, // bLength - 0x21, // bDescriptorType - 0x11, 0x01, // bcdHID - 0, // bCountryCode - 1, // bNumDescriptors - 0x22, // bDescriptorType - sizeof(keyboard2_hid_report_desc), // wDescriptorLength - 0, - // endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13 - 7, // bLength - 5, // bDescriptorType - KBD2_ENDPOINT | 0x80, // bEndpointAddress - 0x03, // bmAttributes (0x03=intr) - KBD2_SIZE, 0, // wMaxPacketSize - 1, // bInterval + // interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12 + 9, // bLength + 4, // bDescriptorType + KBD2_INTERFACE, // bInterfaceNumber + 0, // bAlternateSetting + 1, // bNumEndpoints + 0x03, // bInterfaceClass (0x03 = HID) + 0x00, // bInterfaceSubClass (0x01 = Boot) + 0x00, // bInterfaceProtocol (0x01 = Keyboard) + 0, // iInterface + // HID descriptor, HID 1.11 spec, section 6.2.1 + 9, // bLength + 0x21, // bDescriptorType + 0x11, 0x01, // bcdHID + 0, // bCountryCode + 1, // bNumDescriptors + 0x22, // bDescriptorType + sizeof(keyboard2_hid_report_desc), // wDescriptorLength + 0, + // endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13 + 7, // bLength + 5, // bDescriptorType + KBD2_ENDPOINT | 0x80, // bEndpointAddress + 0x03, // bmAttributes (0x03=intr) + KBD2_SIZE, 0, // wMaxPacketSize + 1, // bInterval #endif }; @@ -534,64 +531,50 @@ static const uint8_t PROGMEM config1_descriptor[CONFIG1_DESC_SIZE] = { // can be completely removed if iManufacturer, iProduct, iSerialNumber // in the device desciptor are changed to zeros. struct usb_string_descriptor_struct { - uint8_t bLength; - uint8_t bDescriptorType; - int16_t wString[]; -}; -static const struct usb_string_descriptor_struct PROGMEM string0 = { - 4, - 3, - {0x0409} -}; -static const struct usb_string_descriptor_struct PROGMEM string1 = { - sizeof(STR_MANUFACTURER), - 3, - STR_MANUFACTURER -}; -static const struct usb_string_descriptor_struct PROGMEM string2 = { - sizeof(STR_PRODUCT), - 3, - STR_PRODUCT + uint8_t bLength; + uint8_t bDescriptorType; + int16_t wString[]; }; +static const struct usb_string_descriptor_struct PROGMEM string0 = {4, 3, {0x0409}}; +static const struct usb_string_descriptor_struct PROGMEM string1 = {sizeof(STR_MANUFACTURER), 3, STR_MANUFACTURER}; +static const struct usb_string_descriptor_struct PROGMEM string2 = {sizeof(STR_PRODUCT), 3, STR_PRODUCT}; // This table defines which descriptor data is sent for each specific // request from the host (in wValue and wIndex). static const struct descriptor_list_struct { - uint16_t wValue; // descriptor type - uint16_t wIndex; - const uint8_t *addr; - uint8_t length; + uint16_t wValue; // descriptor type + uint16_t wIndex; + const uint8_t *addr; + uint8_t length; } PROGMEM descriptor_list[] = { - // DEVICE descriptor - {0x0100, 0x0000, device_descriptor, sizeof(device_descriptor)}, - // CONFIGURATION descriptor - {0x0200, 0x0000, config1_descriptor, sizeof(config1_descriptor)}, - // HID/REPORT descriptors - {0x2100, KBD_INTERFACE, config1_descriptor+KBD_HID_DESC_OFFSET, 9}, - {0x2200, KBD_INTERFACE, keyboard_hid_report_desc, sizeof(keyboard_hid_report_desc)}, + // DEVICE descriptor + {0x0100, 0x0000, device_descriptor, sizeof(device_descriptor)}, + // CONFIGURATION descriptor + {0x0200, 0x0000, config1_descriptor, sizeof(config1_descriptor)}, + // HID/REPORT descriptors + {0x2100, KBD_INTERFACE, config1_descriptor + KBD_HID_DESC_OFFSET, 9}, + {0x2200, KBD_INTERFACE, keyboard_hid_report_desc, sizeof(keyboard_hid_report_desc)}, #ifdef MOUSE_ENABLE - {0x2100, MOUSE_INTERFACE, config1_descriptor+MOUSE_HID_DESC_OFFSET, 9}, - {0x2200, MOUSE_INTERFACE, mouse_hid_report_desc, sizeof(mouse_hid_report_desc)}, + {0x2100, MOUSE_INTERFACE, config1_descriptor + MOUSE_HID_DESC_OFFSET, 9}, + {0x2200, MOUSE_INTERFACE, mouse_hid_report_desc, sizeof(mouse_hid_report_desc)}, #endif #ifdef CONSOLE_ENABLE - {0x2100, DEBUG_INTERFACE, config1_descriptor+DEBUG_HID_DESC_OFFSET, 9}, - {0x2200, DEBUG_INTERFACE, debug_hid_report_desc, sizeof(debug_hid_report_desc)}, + {0x2100, DEBUG_INTERFACE, config1_descriptor + DEBUG_HID_DESC_OFFSET, 9}, + {0x2200, DEBUG_INTERFACE, debug_hid_report_desc, sizeof(debug_hid_report_desc)}, #endif #ifdef EXTRAKEY_ENABLE - {0x2100, EXTRA_INTERFACE, config1_descriptor+EXTRA_HID_DESC_OFFSET, 9}, - {0x2200, EXTRA_INTERFACE, extra_hid_report_desc, sizeof(extra_hid_report_desc)}, + {0x2100, EXTRA_INTERFACE, config1_descriptor + EXTRA_HID_DESC_OFFSET, 9}, + {0x2200, EXTRA_INTERFACE, extra_hid_report_desc, sizeof(extra_hid_report_desc)}, #endif #ifdef NKRO_ENABLE - {0x2100, KBD2_INTERFACE, config1_descriptor+KBD2_HID_DESC_OFFSET, 9}, - {0x2200, KBD2_INTERFACE, keyboard2_hid_report_desc, sizeof(keyboard2_hid_report_desc)}, + {0x2100, KBD2_INTERFACE, config1_descriptor + KBD2_HID_DESC_OFFSET, 9}, + {0x2200, KBD2_INTERFACE, keyboard2_hid_report_desc, sizeof(keyboard2_hid_report_desc)}, #endif - // STRING descriptors - {0x0300, 0x0000, (const uint8_t *)&string0, 4}, - {0x0301, 0x0409, (const uint8_t *)&string1, sizeof(STR_MANUFACTURER)}, - {0x0302, 0x0409, (const uint8_t *)&string2, sizeof(STR_PRODUCT)} -}; -#define NUM_DESC_LIST (sizeof(descriptor_list)/sizeof(struct descriptor_list_struct)) - + // STRING descriptors + {0x0300, 0x0000, (const uint8_t *)&string0, 4}, + {0x0301, 0x0409, (const uint8_t *)&string1, sizeof(STR_MANUFACTURER)}, + {0x0302, 0x0409, (const uint8_t *)&string2, sizeof(STR_PRODUCT)}}; +#define NUM_DESC_LIST (sizeof(descriptor_list) / sizeof(struct descriptor_list_struct)) /************************************************************************** * @@ -600,8 +583,7 @@ static const struct descriptor_list_struct { **************************************************************************/ // zero when we are not configured, non-zero when enumerated -static volatile uint8_t usb_configuration=0; - +static volatile uint8_t usb_configuration = 0; /************************************************************************** * @@ -609,400 +591,380 @@ static volatile uint8_t usb_configuration=0; * **************************************************************************/ - // initialize USB -void usb_init(void) -{ - HW_CONFIG(); - USB_FREEZE(); // enable USB - PLL_CONFIG(); // config PLL - while (!(PLLCSR & (1<<PLOCK))) ; // wait for PLL lock - USB_CONFIG(); // start USB clock - UDCON = 0; // enable attach resistor - usb_configuration = 0; - suspend = false; - UDIEN = (1<<EORSTE)|(1<<SOFE)|(1<<SUSPE)|(1<<WAKEUPE); - sei(); +void usb_init(void) { + HW_CONFIG(); + USB_FREEZE(); // enable USB + PLL_CONFIG(); // config PLL + while (!(PLLCSR & (1 << PLOCK))) + ; // wait for PLL lock + USB_CONFIG(); // start USB clock + UDCON = 0; // enable attach resistor + usb_configuration = 0; + suspend = false; + UDIEN = (1 << EORSTE) | (1 << SOFE) | (1 << SUSPE) | (1 << WAKEUPE); + sei(); } // return 0 if the USB is not configured, or the configuration // number selected by the HOST -uint8_t usb_configured(void) -{ - return usb_configuration && !suspend; -} +uint8_t usb_configured(void) { return usb_configuration && !suspend; } -void usb_remote_wakeup(void) -{ - UDCON |= (1<<RMWKUP); - while (UDCON & (1<<RMWKUP)); +void usb_remote_wakeup(void) { + UDCON |= (1 << RMWKUP); + while (UDCON & (1 << RMWKUP)) + ; } - - /************************************************************************** * * Private Functions - not intended for general user consumption.... * **************************************************************************/ - - // USB Device Interrupt - handle all device-level events // the transmit buffer flushing is triggered by the start of frame // -ISR(USB_GEN_vect) -{ - uint8_t intbits, t; - static uint8_t div4=0; - - intbits = UDINT; - UDINT = 0; - if ((intbits & (1<<SUSPI)) && (UDIEN & (1<<SUSPE)) && usb_configuration) { +ISR(USB_GEN_vect) { + uint8_t intbits, t; + static uint8_t div4 = 0; + + intbits = UDINT; + UDINT = 0; + if ((intbits & (1 << SUSPI)) && (UDIEN & (1 << SUSPE)) && usb_configuration) { #ifdef SLEEP_LED_ENABLE - sleep_led_enable(); -#endif - UDIEN &= ~(1<<SUSPE); - UDIEN |= (1<<WAKEUPE); - suspend = true; - } - if ((intbits & (1<<WAKEUPI)) && (UDIEN & (1<<WAKEUPE)) && usb_configuration) { - suspend_wakeup_init(); + sleep_led_enable(); +#endif + UDIEN &= ~(1 << SUSPE); + UDIEN |= (1 << WAKEUPE); + suspend = true; + } + if ((intbits & (1 << WAKEUPI)) && (UDIEN & (1 << WAKEUPE)) && usb_configuration) { + suspend_wakeup_init(); #ifdef SLEEP_LED_ENABLE - sleep_led_disable(); - // NOTE: converters may not accept this - led_set(host_keyboard_leds()); + sleep_led_disable(); + // NOTE: converters may not accept this + led_set(host_keyboard_leds()); #endif - UDIEN |= (1<<SUSPE); - UDIEN &= ~(1<<WAKEUPE); - suspend = false; - } - if (intbits & (1<<EORSTI)) { - UENUM = 0; - UECONX = 1; - UECFG0X = EP_TYPE_CONTROL; - UECFG1X = EP_SIZE(ENDPOINT0_SIZE) | EP_SINGLE_BUFFER; - UEIENX = (1<<RXSTPE); - usb_configuration = 0; + UDIEN |= (1 << SUSPE); + UDIEN &= ~(1 << WAKEUPE); + suspend = false; + } + if (intbits & (1 << EORSTI)) { + UENUM = 0; + UECONX = 1; + UECFG0X = EP_TYPE_CONTROL; + UECFG1X = EP_SIZE(ENDPOINT0_SIZE) | EP_SINGLE_BUFFER; + UEIENX = (1 << RXSTPE); + usb_configuration = 0; + } + if ((intbits & (1 << SOFI)) && usb_configuration) { + t = debug_flush_timer; + if (t) { + debug_flush_timer = --t; + if (!t) { + UENUM = DEBUG_TX_ENDPOINT; + while ((UEINTX & (1 << RWAL))) { + UEDATX = 0; + } + UEINTX = 0x3A; + } } - if ((intbits & (1<<SOFI)) && usb_configuration) { - t = debug_flush_timer; - if (t) { - debug_flush_timer = -- t; - if (!t) { - UENUM = DEBUG_TX_ENDPOINT; - while ((UEINTX & (1<<RWAL))) { - UEDATX = 0; - } - UEINTX = 0x3A; - } - } - /* TODO: should keep IDLE rate on each keyboard interface */ + /* TODO: should keep IDLE rate on each keyboard interface */ #ifdef NKRO_ENABLE - if (!keymap_config.nkro && keyboard_idle && (++div4 & 3) == 0) { + if (!keymap_config.nkro && keyboard_idle && (++div4 & 3) == 0) { #else - if (keyboard_idle && (++div4 & 3) == 0) { -#endif - UENUM = KBD_ENDPOINT; - if (UEINTX & (1<<RWAL)) { - usb_keyboard_idle_count++; - if (usb_keyboard_idle_count == keyboard_idle) { - usb_keyboard_idle_count = 0; - /* TODO: fix keyboard_report inconsistency */ -/* To avoid Mac SET_IDLE behaviour. - UEDATX = keyboard_report_prev->mods; - UEDATX = 0; - uint8_t keys = keyboard_protocol ? KBD_REPORT_KEYS : 6; - for (uint8_t i=0; i<keys; i++) { - UEDATX = keyboard_report_prev->keys[i]; - } - UEINTX = 0x3A; -*/ - } - } - } - } + if (keyboard_idle && (++div4 & 3) == 0) { +#endif + UENUM = KBD_ENDPOINT; + if (UEINTX & (1 << RWAL)) { + usb_keyboard_idle_count++; + if (usb_keyboard_idle_count == keyboard_idle) { + usb_keyboard_idle_count = 0; + /* TODO: fix keyboard_report inconsistency */ + /* To avoid Mac SET_IDLE behaviour. + UEDATX = keyboard_report_prev->mods; + UEDATX = 0; + uint8_t keys = keyboard_protocol ? KBD_REPORT_KEYS : 6; + for (uint8_t i=0; i<keys; i++) { + UEDATX = keyboard_report_prev->keys[i]; + } + UEINTX = 0x3A; + */ + } + } + } + } } - - // Misc functions to wait for ready and send/receive packets -static inline void usb_wait_in_ready(void) -{ - while (!(UEINTX & (1<<TXINI))) ; -} -static inline void usb_send_in(void) -{ - UEINTX = ~(1<<TXINI); -} -static inline void usb_wait_receive_out(void) -{ - while (!(UEINTX & (1<<RXOUTI))) ; +static inline void usb_wait_in_ready(void) { + while (!(UEINTX & (1 << TXINI))) + ; } -static inline void usb_ack_out(void) -{ - UEINTX = ~(1<<RXOUTI); +static inline void usb_send_in(void) { UEINTX = ~(1 << TXINI); } +static inline void usb_wait_receive_out(void) { + while (!(UEINTX & (1 << RXOUTI))) + ; } - - +static inline void usb_ack_out(void) { UEINTX = ~(1 << RXOUTI); } // USB Endpoint Interrupt - endpoint 0 is handled here. The // other endpoints are manipulated by the user-callable // functions, and the start-of-frame interrupt. // -ISR(USB_COM_vect) -{ - uint8_t intbits; - const uint8_t *list; - const uint8_t *cfg; - uint8_t i, n, len, en; - uint8_t bmRequestType; - uint8_t bRequest; - uint16_t wValue; - uint16_t wIndex; - uint16_t wLength; - uint16_t desc_val; - const uint8_t *desc_addr; - uint8_t desc_length; - - UENUM = 0; - intbits = UEINTX; - if (intbits & (1<<RXSTPI)) { - bmRequestType = UEDATX; - bRequest = UEDATX; - wValue = UEDATX; - wValue |= (UEDATX << 8); - wIndex = UEDATX; - wIndex |= (UEDATX << 8); - wLength = UEDATX; - wLength |= (UEDATX << 8); - UEINTX = ~((1<<RXSTPI) | (1<<RXOUTI) | (1<<TXINI)); - if (bRequest == GET_DESCRIPTOR) { - list = (const uint8_t *)descriptor_list; - for (i=0; ; i++) { - if (i >= NUM_DESC_LIST) { - UECONX = (1<<STALLRQ)|(1<<EPEN); //stall - return; - } - desc_val = pgm_read_word(list); - if (desc_val != wValue) { - list += sizeof(struct descriptor_list_struct); - continue; - } - list += 2; - desc_val = pgm_read_word(list); - if (desc_val != wIndex) { - list += sizeof(struct descriptor_list_struct)-2; - continue; - } - list += 2; - desc_addr = (const uint8_t *)pgm_read_word(list); - list += 2; - desc_length = pgm_read_byte(list); - break; - } - len = (wLength < 256) ? wLength : 255; - if (len > desc_length) len = desc_length; - do { - // wait for host ready for IN packet - do { - i = UEINTX; - } while (!(i & ((1<<TXINI)|(1<<RXOUTI)))); - if (i & (1<<RXOUTI)) return; // abort - // send IN packet - n = len < ENDPOINT0_SIZE ? len : ENDPOINT0_SIZE; - for (i = n; i; i--) { - UEDATX = pgm_read_byte(desc_addr++); - } - len -= n; - usb_send_in(); - } while (len || n == ENDPOINT0_SIZE); - return; +ISR(USB_COM_vect) { + uint8_t intbits; + const uint8_t *list; + const uint8_t *cfg; + uint8_t i, n, len, en; + uint8_t bmRequestType; + uint8_t bRequest; + uint16_t wValue; + uint16_t wIndex; + uint16_t wLength; + uint16_t desc_val; + const uint8_t *desc_addr; + uint8_t desc_length; + + UENUM = 0; + intbits = UEINTX; + if (intbits & (1 << RXSTPI)) { + bmRequestType = UEDATX; + bRequest = UEDATX; + wValue = UEDATX; + wValue |= (UEDATX << 8); + wIndex = UEDATX; + wIndex |= (UEDATX << 8); + wLength = UEDATX; + wLength |= (UEDATX << 8); + UEINTX = ~((1 << RXSTPI) | (1 << RXOUTI) | (1 << TXINI)); + if (bRequest == GET_DESCRIPTOR) { + list = (const uint8_t *)descriptor_list; + for (i = 0;; i++) { + if (i >= NUM_DESC_LIST) { + UECONX = (1 << STALLRQ) | (1 << EPEN); // stall + return; + } + desc_val = pgm_read_word(list); + if (desc_val != wValue) { + list += sizeof(struct descriptor_list_struct); + continue; + } + list += 2; + desc_val = pgm_read_word(list); + if (desc_val != wIndex) { + list += sizeof(struct descriptor_list_struct) - 2; + continue; } - if (bRequest == SET_ADDRESS) { - usb_send_in(); - usb_wait_in_ready(); - UDADDR = wValue | (1<<ADDEN); - return; - } - if (bRequest == SET_CONFIGURATION && bmRequestType == 0) { - usb_configuration = wValue; - usb_send_in(); - cfg = endpoint_config_table; - for (i=1; i<=MAX_ENDPOINT; i++) { - UENUM = i; - en = pgm_read_byte(cfg++); - if (en) { - UECONX = (1<<EPEN); - UECFG0X = pgm_read_byte(cfg++); - UECFG1X = pgm_read_byte(cfg++); - } else { - UECONX = 0; - } - } - UERST = UERST_MASK; - UERST = 0; - return; - } - if (bRequest == GET_CONFIGURATION && bmRequestType == 0x80) { - usb_wait_in_ready(); - UEDATX = usb_configuration; - usb_send_in(); - return; - } - - if (bRequest == GET_STATUS) { - usb_wait_in_ready(); - i = 0; - #ifdef SUPPORT_ENDPOINT_HALT - if (bmRequestType == 0x82) { - UENUM = wIndex; - if (UECONX & (1<<STALLRQ)) i = 1; - UENUM = 0; - } - #endif - UEDATX = i; - UEDATX = 0; - usb_send_in(); - return; - } - if (bRequest == CLEAR_FEATURE || bRequest == SET_FEATURE) { + list += 2; + desc_addr = (const uint8_t *)pgm_read_word(list); + list += 2; + desc_length = pgm_read_byte(list); + break; + } + len = (wLength < 256) ? wLength : 255; + if (len > desc_length) len = desc_length; + do { + // wait for host ready for IN packet + do { + i = UEINTX; + } while (!(i & ((1 << TXINI) | (1 << RXOUTI)))); + if (i & (1 << RXOUTI)) return; // abort + // send IN packet + n = len < ENDPOINT0_SIZE ? len : ENDPOINT0_SIZE; + for (i = n; i; i--) { + UEDATX = pgm_read_byte(desc_addr++); + } + len -= n; + usb_send_in(); + } while (len || n == ENDPOINT0_SIZE); + return; + } + if (bRequest == SET_ADDRESS) { + usb_send_in(); + usb_wait_in_ready(); + UDADDR = wValue | (1 << ADDEN); + return; + } + if (bRequest == SET_CONFIGURATION && bmRequestType == 0) { + usb_configuration = wValue; + usb_send_in(); + cfg = endpoint_config_table; + for (i = 1; i <= MAX_ENDPOINT; i++) { + UENUM = i; + en = pgm_read_byte(cfg++); + if (en) { + UECONX = (1 << EPEN); + UECFG0X = pgm_read_byte(cfg++); + UECFG1X = pgm_read_byte(cfg++); + } else { + UECONX = 0; + } + } + UERST = UERST_MASK; + UERST = 0; + return; + } + if (bRequest == GET_CONFIGURATION && bmRequestType == 0x80) { + usb_wait_in_ready(); + UEDATX = usb_configuration; + usb_send_in(); + return; + } + + if (bRequest == GET_STATUS) { + usb_wait_in_ready(); + i = 0; +#ifdef SUPPORT_ENDPOINT_HALT + if (bmRequestType == 0x82) { + UENUM = wIndex; + if (UECONX & (1 << STALLRQ)) i = 1; + UENUM = 0; + } +#endif + UEDATX = i; + UEDATX = 0; + usb_send_in(); + return; + } + if (bRequest == CLEAR_FEATURE || bRequest == SET_FEATURE) { #ifdef SUPPORT_ENDPOINT_HALT - if (bmRequestType == 0x02 && wValue == ENDPOINT_HALT) { - i = wIndex & 0x7F; - if (i >= 1 && i <= MAX_ENDPOINT) { - usb_send_in(); - UENUM = i; - if (bRequest == SET_FEATURE) { - UECONX = (1<<STALLRQ)|(1<<EPEN); - } else { - UECONX = (1<<STALLRQC)|(1<<RSTDT)|(1<<EPEN); - UERST = (1 << i); - UERST = 0; - } - return; - } + if (bmRequestType == 0x02 && wValue == ENDPOINT_HALT) { + i = wIndex & 0x7F; + if (i >= 1 && i <= MAX_ENDPOINT) { + usb_send_in(); + UENUM = i; + if (bRequest == SET_FEATURE) { + UECONX = (1 << STALLRQ) | (1 << EPEN); + } else { + UECONX = (1 << STALLRQC) | (1 << RSTDT) | (1 << EPEN); + UERST = (1 << i); + UERST = 0; } + return; + } + } #endif - if (bmRequestType == 0x00 && wValue == DEVICE_REMOTE_WAKEUP) { - if (bRequest == SET_FEATURE) { - remote_wakeup = true; - } else { - remote_wakeup = false; - } - usb_send_in(); - return; + if (bmRequestType == 0x00 && wValue == DEVICE_REMOTE_WAKEUP) { + if (bRequest == SET_FEATURE) { + remote_wakeup = true; + } else { + remote_wakeup = false; + } + usb_send_in(); + return; + } + } + if (wIndex == KBD_INTERFACE) { + if (bmRequestType == 0xA1) { + if (bRequest == HID_GET_REPORT) { + usb_wait_in_ready(); + UEDATX = keyboard_report->mods; + UEDATX = 0; + for (i = 0; i < 6; i++) { + UEDATX = keyboard_report->keys[i]; } - } - if (wIndex == KBD_INTERFACE) { - if (bmRequestType == 0xA1) { - if (bRequest == HID_GET_REPORT) { - usb_wait_in_ready(); - UEDATX = keyboard_report->mods; - UEDATX = 0; - for (i=0; i<6; i++) { - UEDATX = keyboard_report->keys[i]; - } - usb_send_in(); - return; - } - if (bRequest == HID_GET_IDLE) { - usb_wait_in_ready(); - UEDATX = keyboard_idle; - usb_send_in(); - return; - } - if (bRequest == HID_GET_PROTOCOL) { - usb_wait_in_ready(); - UEDATX = keyboard_protocol; - usb_send_in(); - return; - } - } - if (bmRequestType == 0x21) { - if (bRequest == HID_SET_REPORT) { - usb_wait_receive_out(); - usb_keyboard_leds = UEDATX; - usb_ack_out(); - usb_send_in(); - return; - } - if (bRequest == HID_SET_IDLE) { - keyboard_idle = (wValue >> 8); - usb_keyboard_idle_count = 0; - //usb_wait_in_ready(); - usb_send_in(); - return; - } - if (bRequest == HID_SET_PROTOCOL) { - keyboard_protocol = wValue; + usb_send_in(); + return; + } + if (bRequest == HID_GET_IDLE) { + usb_wait_in_ready(); + UEDATX = keyboard_idle; + usb_send_in(); + return; + } + if (bRequest == HID_GET_PROTOCOL) { + usb_wait_in_ready(); + UEDATX = keyboard_protocol; + usb_send_in(); + return; + } + } + if (bmRequestType == 0x21) { + if (bRequest == HID_SET_REPORT) { + usb_wait_receive_out(); + usb_keyboard_leds = UEDATX; + usb_ack_out(); + usb_send_in(); + return; + } + if (bRequest == HID_SET_IDLE) { + keyboard_idle = (wValue >> 8); + usb_keyboard_idle_count = 0; + // usb_wait_in_ready(); + usb_send_in(); + return; + } + if (bRequest == HID_SET_PROTOCOL) { + keyboard_protocol = wValue; #ifdef NKRO_ENABLE - keymap_config.nkro = !!keyboard_protocol; -#endif - clear_keyboard(); - //usb_wait_in_ready(); - usb_send_in(); - return; - } - } - } + keymap_config.nkro = !!keyboard_protocol; +#endif + clear_keyboard(); + // usb_wait_in_ready(); + usb_send_in(); + return; + } + } + } #ifdef MOUSE_ENABLE - if (wIndex == MOUSE_INTERFACE) { - if (bmRequestType == 0xA1) { - if (bRequest == HID_GET_REPORT) { - if (wValue == HID_REPORT_INPUT) { - usb_wait_in_ready(); - UEDATX = 0; - UEDATX = 0; - UEDATX = 0; - UEDATX = 0; - usb_send_in(); - return; - } - if (wValue == HID_REPORT_FEATURE) { - usb_wait_in_ready(); - UEDATX = 0x05; - usb_send_in(); - return; - } - } - if (bRequest == HID_GET_PROTOCOL) { - usb_wait_in_ready(); - UEDATX = usb_mouse_protocol; - usb_send_in(); - return; - } - } - if (bmRequestType == 0x21) { - if (bRequest == HID_SET_PROTOCOL) { - usb_mouse_protocol = wValue; - usb_send_in(); - return; - } - } - } -#endif - if (wIndex == DEBUG_INTERFACE) { - if (bRequest == HID_GET_REPORT && bmRequestType == 0xA1) { - len = wLength; - do { - // wait for host ready for IN packet - do { - i = UEINTX; - } while (!(i & ((1<<TXINI)|(1<<RXOUTI)))); - if (i & (1<<RXOUTI)) return; // abort - // send IN packet - n = len < ENDPOINT0_SIZE ? len : ENDPOINT0_SIZE; - for (i = n; i; i--) { - UEDATX = 0; - } - len -= n; - usb_send_in(); - } while (len || n == ENDPOINT0_SIZE); - return; - } - } - } - UECONX = (1<<STALLRQ) | (1<<EPEN); // stall + if (wIndex == MOUSE_INTERFACE) { + if (bmRequestType == 0xA1) { + if (bRequest == HID_GET_REPORT) { + if (wValue == HID_REPORT_INPUT) { + usb_wait_in_ready(); + UEDATX = 0; + UEDATX = 0; + UEDATX = 0; + UEDATX = 0; + usb_send_in(); + return; + } + if (wValue == HID_REPORT_FEATURE) { + usb_wait_in_ready(); + UEDATX = 0x05; + usb_send_in(); + return; + } + } + if (bRequest == HID_GET_PROTOCOL) { + usb_wait_in_ready(); + UEDATX = usb_mouse_protocol; + usb_send_in(); + return; + } + } + if (bmRequestType == 0x21) { + if (bRequest == HID_SET_PROTOCOL) { + usb_mouse_protocol = wValue; + usb_send_in(); + return; + } + } + } +#endif + if (wIndex == DEBUG_INTERFACE) { + if (bRequest == HID_GET_REPORT && bmRequestType == 0xA1) { + len = wLength; + do { + // wait for host ready for IN packet + do { + i = UEINTX; + } while (!(i & ((1 << TXINI) | (1 << RXOUTI)))); + if (i & (1 << RXOUTI)) return; // abort + // send IN packet + n = len < ENDPOINT0_SIZE ? len : ENDPOINT0_SIZE; + for (i = n; i; i--) { + UEDATX = 0; + } + len -= n; + usb_send_in(); + } while (len || n == ENDPOINT0_SIZE); + return; + } + } + } + UECONX = (1 << STALLRQ) | (1 << EPEN); // stall } diff --git a/tmk_core/protocol/pjrc/usb.h b/tmk_core/protocol/pjrc/usb.h index a195b671d0..50654dccf7 100644 --- a/tmk_core/protocol/pjrc/usb.h +++ b/tmk_core/protocol/pjrc/usb.h @@ -22,116 +22,110 @@ */ #ifndef USB_H -#define USB_H 1 +#define USB_H 1 #include <stdint.h> #include <stdbool.h> #include <avr/io.h> - extern bool remote_wakeup; extern bool suspend; -void usb_init(void); // initialize everything -uint8_t usb_configured(void); // is the USB port configured -void usb_remote_wakeup(void); - +void usb_init(void); // initialize everything +uint8_t usb_configured(void); // is the USB port configured +void usb_remote_wakeup(void); -#define EP_TYPE_CONTROL 0x00 -#define EP_TYPE_BULK_IN 0x81 -#define EP_TYPE_BULK_OUT 0x80 -#define EP_TYPE_INTERRUPT_IN 0xC1 -#define EP_TYPE_INTERRUPT_OUT 0xC0 -#define EP_TYPE_ISOCHRONOUS_IN 0x41 -#define EP_TYPE_ISOCHRONOUS_OUT 0x40 +#define EP_TYPE_CONTROL 0x00 +#define EP_TYPE_BULK_IN 0x81 +#define EP_TYPE_BULK_OUT 0x80 +#define EP_TYPE_INTERRUPT_IN 0xC1 +#define EP_TYPE_INTERRUPT_OUT 0xC0 +#define EP_TYPE_ISOCHRONOUS_IN 0x41 +#define EP_TYPE_ISOCHRONOUS_OUT 0x40 -#define EP_SINGLE_BUFFER 0x02 -#define EP_DOUBLE_BUFFER 0x06 +#define EP_SINGLE_BUFFER 0x02 +#define EP_DOUBLE_BUFFER 0x06 -#define EP_SIZE(s) ((s) == 64 ? 0x30 : \ - ((s) == 32 ? 0x20 : \ - ((s) == 16 ? 0x10 : \ - 0x00))) +#define EP_SIZE(s) ((s) == 64 ? 0x30 : ((s) == 32 ? 0x20 : ((s) == 16 ? 0x10 : 0x00))) -#if defined (__AVR_AT90USB162__) || defined (__AVR_AT90USB82__) -# define MAX_ENDPOINT 4 -# define UERST_MASK 0x1E +#if defined(__AVR_AT90USB162__) || defined(__AVR_AT90USB82__) +# define MAX_ENDPOINT 4 +# define UERST_MASK 0x1E #else -# define MAX_ENDPOINT 6 -# define UERST_MASK 0x7E +# define MAX_ENDPOINT 6 +# define UERST_MASK 0x7E #endif #define LSB(n) (n & 255) #define MSB(n) ((n >> 8) & 255) #if defined(__AVR_AT90USB162__) -#define HW_CONFIG() -#define PLL_CONFIG() (PLLCSR = ((1<<PLLE)|(1<<PLLP0))) -#define USB_CONFIG() (USBCON = (1<<USBE)) -#define USB_FREEZE() (USBCON = ((1<<USBE)|(1<<FRZCLK))) +# define HW_CONFIG() +# define PLL_CONFIG() (PLLCSR = ((1 << PLLE) | (1 << PLLP0))) +# define USB_CONFIG() (USBCON = (1 << USBE)) +# define USB_FREEZE() (USBCON = ((1 << USBE) | (1 << FRZCLK))) #elif defined(__AVR_ATmega32U4__) -#define HW_CONFIG() (UHWCON = 0x01) -#define PLL_CONFIG() (PLLCSR = 0x12) -#define USB_CONFIG() (USBCON = ((1<<USBE)|(1<<OTGPADE))) -#define USB_FREEZE() (USBCON = ((1<<USBE)|(1<<FRZCLK))) +# define HW_CONFIG() (UHWCON = 0x01) +# define PLL_CONFIG() (PLLCSR = 0x12) +# define USB_CONFIG() (USBCON = ((1 << USBE) | (1 << OTGPADE))) +# define USB_FREEZE() (USBCON = ((1 << USBE) | (1 << FRZCLK))) #elif defined(__AVR_AT90USB646__) -#define HW_CONFIG() (UHWCON = 0x81) -#define PLL_CONFIG() (PLLCSR = 0x1A) -#define USB_CONFIG() (USBCON = ((1<<USBE)|(1<<OTGPADE))) -#define USB_FREEZE() (USBCON = ((1<<USBE)|(1<<FRZCLK))) +# define HW_CONFIG() (UHWCON = 0x81) +# define PLL_CONFIG() (PLLCSR = 0x1A) +# define USB_CONFIG() (USBCON = ((1 << USBE) | (1 << OTGPADE))) +# define USB_FREEZE() (USBCON = ((1 << USBE) | (1 << FRZCLK))) #elif defined(__AVR_AT90USB1286__) -#define HW_CONFIG() (UHWCON = 0x81) -#define PLL_CONFIG() (PLLCSR = 0x16) -#define USB_CONFIG() (USBCON = ((1<<USBE)|(1<<OTGPADE))) -#define USB_FREEZE() (USBCON = ((1<<USBE)|(1<<FRZCLK))) +# define HW_CONFIG() (UHWCON = 0x81) +# define PLL_CONFIG() (PLLCSR = 0x16) +# define USB_CONFIG() (USBCON = ((1 << USBE) | (1 << OTGPADE))) +# define USB_FREEZE() (USBCON = ((1 << USBE) | (1 << FRZCLK))) #endif // standard control endpoint request types -#define GET_STATUS 0 -#define CLEAR_FEATURE 1 -#define SET_FEATURE 3 -#define SET_ADDRESS 5 -#define GET_DESCRIPTOR 6 -#define GET_CONFIGURATION 8 -#define SET_CONFIGURATION 9 -#define GET_INTERFACE 10 -#define SET_INTERFACE 11 +#define GET_STATUS 0 +#define CLEAR_FEATURE 1 +#define SET_FEATURE 3 +#define SET_ADDRESS 5 +#define GET_DESCRIPTOR 6 +#define GET_CONFIGURATION 8 +#define SET_CONFIGURATION 9 +#define GET_INTERFACE 10 +#define SET_INTERFACE 11 // HID (human interface device) -#define HID_GET_REPORT 1 -#define HID_GET_IDLE 2 -#define HID_GET_PROTOCOL 3 -#define HID_SET_REPORT 9 -#define HID_SET_IDLE 10 -#define HID_SET_PROTOCOL 11 -#define HID_REPORT_INPUT 1 -#define HID_REPORT_OUTPUT 2 -#define HID_REPORT_FEATURE 3 +#define HID_GET_REPORT 1 +#define HID_GET_IDLE 2 +#define HID_GET_PROTOCOL 3 +#define HID_SET_REPORT 9 +#define HID_SET_IDLE 10 +#define HID_SET_PROTOCOL 11 +#define HID_REPORT_INPUT 1 +#define HID_REPORT_OUTPUT 2 +#define HID_REPORT_FEATURE 3 // CDC (communication class device) -#define CDC_SET_LINE_CODING 0x20 -#define CDC_GET_LINE_CODING 0x21 -#define CDC_SET_CONTROL_LINE_STATE 0x22 +#define CDC_SET_LINE_CODING 0x20 +#define CDC_GET_LINE_CODING 0x21 +#define CDC_SET_CONTROL_LINE_STATE 0x22 // HID feature selectors -#define DEVICE_REMOTE_WAKEUP 1 -#define ENDPOINT_HALT 0 -#define TEST_MODE 2 - +#define DEVICE_REMOTE_WAKEUP 1 +#define ENDPOINT_HALT 0 +#define TEST_MODE 2 /*------------------------------------------------------------------* * Keyboard descriptor setting *------------------------------------------------------------------*/ -#define KBD_INTERFACE 0 -#define KBD_ENDPOINT 1 -#define KBD_SIZE 8 -#define KBD_BUFFER EP_SINGLE_BUFFER -#define KBD_REPORT_KEYS (KBD_SIZE - 2) +#define KBD_INTERFACE 0 +#define KBD_ENDPOINT 1 +#define KBD_SIZE 8 +#define KBD_BUFFER EP_SINGLE_BUFFER +#define KBD_REPORT_KEYS (KBD_SIZE - 2) // secondary keyboard #ifdef NKRO_ENABLE -#define KBD2_INTERFACE 4 -#define KBD2_ENDPOINT 5 -#define KBD2_SIZE 16 -#define KBD2_BUFFER EP_DOUBLE_BUFFER -#define KBD2_REPORT_KEYS (KBD2_SIZE - 1) +# define KBD2_INTERFACE 4 +# define KBD2_ENDPOINT 5 +# define KBD2_SIZE 16 +# define KBD2_BUFFER EP_DOUBLE_BUFFER +# define KBD2_REPORT_KEYS (KBD2_SIZE - 1) #endif #endif diff --git a/tmk_core/protocol/pjrc/usb_debug.c b/tmk_core/protocol/pjrc/usb_debug.c index c1e6f6544b..7e78d96c35 100644 --- a/tmk_core/protocol/pjrc/usb_debug.c +++ b/tmk_core/protocol/pjrc/usb_debug.c @@ -25,78 +25,74 @@ #include "sendchar.h" #include "usb_debug.h" - // the time remaining before we transmit any partially full // packet, or send a zero length packet. -volatile uint8_t debug_flush_timer=0; - +volatile uint8_t debug_flush_timer = 0; -int8_t sendchar(uint8_t c) -{ - static uint8_t previous_timeout=0; - uint8_t timeout, intr_state; +int8_t sendchar(uint8_t c) { + static uint8_t previous_timeout = 0; + uint8_t timeout, intr_state; - // if we're not online (enumerated and configured), error - if (!usb_configured()) return -1; - // interrupts are disabled so these functions can be - // used from the main program or interrupt context, - // even both in the same program! - intr_state = SREG; - cli(); - UENUM = DEBUG_TX_ENDPOINT; - // if we gave up due to timeout before, don't wait again - if (previous_timeout) { - if (!(UEINTX & (1<<RWAL))) { - SREG = intr_state; - return -1; - } - previous_timeout = 0; - } - // wait for the FIFO to be ready to accept data - timeout = UDFNUML + 4; - while (1) { - // are we ready to transmit? - if (UEINTX & (1<<RWAL)) break; - SREG = intr_state; - // have we waited too long? - if (UDFNUML == timeout) { - previous_timeout = 1; - return -1; - } - // has the USB gone offline? - if (!usb_configured()) return -1; - // get ready to try checking again - intr_state = SREG; - cli(); - UENUM = DEBUG_TX_ENDPOINT; - } - // actually write the byte into the FIFO - UEDATX = c; - // if this completed a packet, transmit it now! - if (!(UEINTX & (1<<RWAL))) { - UEINTX = 0x3A; - debug_flush_timer = 0; - } else { - debug_flush_timer = 2; - } - SREG = intr_state; - return 0; + // if we're not online (enumerated and configured), error + if (!usb_configured()) return -1; + // interrupts are disabled so these functions can be + // used from the main program or interrupt context, + // even both in the same program! + intr_state = SREG; + cli(); + UENUM = DEBUG_TX_ENDPOINT; + // if we gave up due to timeout before, don't wait again + if (previous_timeout) { + if (!(UEINTX & (1 << RWAL))) { + SREG = intr_state; + return -1; + } + previous_timeout = 0; + } + // wait for the FIFO to be ready to accept data + timeout = UDFNUML + 4; + while (1) { + // are we ready to transmit? + if (UEINTX & (1 << RWAL)) break; + SREG = intr_state; + // have we waited too long? + if (UDFNUML == timeout) { + previous_timeout = 1; + return -1; + } + // has the USB gone offline? + if (!usb_configured()) return -1; + // get ready to try checking again + intr_state = SREG; + cli(); + UENUM = DEBUG_TX_ENDPOINT; + } + // actually write the byte into the FIFO + UEDATX = c; + // if this completed a packet, transmit it now! + if (!(UEINTX & (1 << RWAL))) { + UEINTX = 0x3A; + debug_flush_timer = 0; + } else { + debug_flush_timer = 2; + } + SREG = intr_state; + return 0; } // immediately transmit any buffered output. -void usb_debug_flush_output(void) -{ - uint8_t intr_state; +void usb_debug_flush_output(void) { + uint8_t intr_state; - intr_state = SREG; - cli(); - if (debug_flush_timer) { - UENUM = DEBUG_TX_ENDPOINT; - while ((UEINTX & (1<<RWAL))) { - UEDATX = 0; - } - UEINTX = 0x3A; - debug_flush_timer = 0; - } - SREG = intr_state; + intr_state = SREG; + cli(); + if (debug_flush_timer) { + UENUM = DEBUG_TX_ENDPOINT; + while ((UEINTX & (1 << RWAL))) { + UEDATX = 0; + } + UEINTX = 0x3A; + debug_flush_timer = 0; + } + SREG = intr_state; } diff --git a/tmk_core/protocol/pjrc/usb_debug.h b/tmk_core/protocol/pjrc/usb_debug.h index e70f4ca3a7..efe075fa97 100644 --- a/tmk_core/protocol/pjrc/usb_debug.h +++ b/tmk_core/protocol/pjrc/usb_debug.h @@ -22,21 +22,18 @@ */ #ifndef USB_DEBUG_H -#define USB_DEBUG_H 1 +#define USB_DEBUG_H 1 #include <stdint.h> #include "usb.h" - -#define DEBUG_INTERFACE 2 -#define DEBUG_TX_ENDPOINT 3 -#define DEBUG_TX_SIZE 32 -#define DEBUG_TX_BUFFER EP_DOUBLE_BUFFER - +#define DEBUG_INTERFACE 2 +#define DEBUG_TX_ENDPOINT 3 +#define DEBUG_TX_SIZE 32 +#define DEBUG_TX_BUFFER EP_DOUBLE_BUFFER extern volatile uint8_t debug_flush_timer; - -void usb_debug_flush_output(void); // immediately transmit any buffered output +void usb_debug_flush_output(void); // immediately transmit any buffered output #endif diff --git a/tmk_core/protocol/pjrc/usb_extra.c b/tmk_core/protocol/pjrc/usb_extra.c index fe1f422c0d..1745e651c7 100644 --- a/tmk_core/protocol/pjrc/usb_extra.c +++ b/tmk_core/protocol/pjrc/usb_extra.c @@ -26,45 +26,37 @@ #include "host.h" #include "usb_extra.h" - -int8_t usb_extra_send(uint8_t report_id, uint16_t data) -{ - uint8_t intr_state, timeout; - - if (!usb_configured()) return -1; - intr_state = SREG; - cli(); - UENUM = EXTRA_ENDPOINT; - timeout = UDFNUML + 50; - while (1) { - // are we ready to transmit? - if (UEINTX & (1<<RWAL)) break; - SREG = intr_state; - // has the USB gone offline? - if (!usb_configured()) return -1; - // have we waited too long? - if (UDFNUML == timeout) return -1; - // get ready to try checking again - intr_state = SREG; - cli(); - UENUM = EXTRA_ENDPOINT; - } - - UEDATX = report_id; - UEDATX = data&0xFF; - UEDATX = (data>>8)&0xFF; - - UEINTX = 0x3A; - SREG = intr_state; - return 0; +int8_t usb_extra_send(uint8_t report_id, uint16_t data) { + uint8_t intr_state, timeout; + + if (!usb_configured()) return -1; + intr_state = SREG; + cli(); + UENUM = EXTRA_ENDPOINT; + timeout = UDFNUML + 50; + while (1) { + // are we ready to transmit? + if (UEINTX & (1 << RWAL)) break; + SREG = intr_state; + // has the USB gone offline? + if (!usb_configured()) return -1; + // have we waited too long? + if (UDFNUML == timeout) return -1; + // get ready to try checking again + intr_state = SREG; + cli(); + UENUM = EXTRA_ENDPOINT; + } + + UEDATX = report_id; + UEDATX = data & 0xFF; + UEDATX = (data >> 8) & 0xFF; + + UEINTX = 0x3A; + SREG = intr_state; + return 0; } -int8_t usb_extra_consumer_send(uint16_t bits) -{ - return usb_extra_send(REPORT_ID_CONSUMER, bits); -} +int8_t usb_extra_consumer_send(uint16_t bits) { return usb_extra_send(REPORT_ID_CONSUMER, bits); } -int8_t usb_extra_system_send(uint16_t bits) -{ - return usb_extra_send(REPORT_ID_SYSTEM, bits); -} +int8_t usb_extra_system_send(uint16_t bits) { return usb_extra_send(REPORT_ID_SYSTEM, bits); } diff --git a/tmk_core/protocol/pjrc/usb_extra.h b/tmk_core/protocol/pjrc/usb_extra.h index 042ac48373..674d582ac2 100644 --- a/tmk_core/protocol/pjrc/usb_extra.h +++ b/tmk_core/protocol/pjrc/usb_extra.h @@ -22,7 +22,7 @@ */ #ifndef USB_EXTRA_H -#define USB_EXTRA_H 1 +#define USB_EXTRA_H 1 /* * Enhanced keyboard features for Windows: * Audio control and System control @@ -33,12 +33,10 @@ #include <stdint.h> #include "usb.h" - -#define EXTRA_INTERFACE 3 -#define EXTRA_ENDPOINT 4 -#define EXTRA_SIZE 8 -#define EXTRA_BUFFER EP_DOUBLE_BUFFER - +#define EXTRA_INTERFACE 3 +#define EXTRA_ENDPOINT 4 +#define EXTRA_SIZE 8 +#define EXTRA_BUFFER EP_DOUBLE_BUFFER int8_t usb_extra_consumer_send(uint16_t bits); int8_t usb_extra_system_send(uint16_t bits); diff --git a/tmk_core/protocol/pjrc/usb_keyboard.c b/tmk_core/protocol/pjrc/usb_keyboard.c index 05f4797340..31856d0fda 100644 --- a/tmk_core/protocol/pjrc/usb_keyboard.c +++ b/tmk_core/protocol/pjrc/usb_keyboard.c @@ -31,34 +31,30 @@ #include "host.h" #ifdef NKRO_ENABLE - #include "keycode_config.h" +# include "keycode_config.h" - extern keymap_config_t keymap_config; +extern keymap_config_t keymap_config; #endif - // protocol setting from the host. We use exactly the same report // either way, so this variable only stores the setting since we // are required to be able to report which setting is in use. -uint8_t keyboard_protocol=1; +uint8_t keyboard_protocol = 1; // the idle configuration, how often we send the report to the // host (ms * 4) even when it hasn't changed // Windows and Linux set 0 while OS X sets 6(24ms) by SET_IDLE request. -uint8_t keyboard_idle=125; +uint8_t keyboard_idle = 125; // count until idle timeout -uint8_t usb_keyboard_idle_count=0; +uint8_t usb_keyboard_idle_count = 0; // 1=num lock, 2=caps lock, 4=scroll lock, 8=compose, 16=kana -volatile uint8_t usb_keyboard_leds=0; - +volatile uint8_t usb_keyboard_leds = 0; static inline int8_t send_report(report_keyboard_t *report, uint8_t endpoint, uint8_t keys_start, uint8_t keys_end); - -int8_t usb_keyboard_send_report(report_keyboard_t *report) -{ +int8_t usb_keyboard_send_report(report_keyboard_t *report) { int8_t result = 0; #ifdef NKRO_ENABLE @@ -76,41 +72,43 @@ int8_t usb_keyboard_send_report(report_keyboard_t *report) return 0; } -void usb_keyboard_print_report(report_keyboard_t *report) -{ +void usb_keyboard_print_report(report_keyboard_t *report) { if (!debug_keyboard) return; print("keys: "); - for (int i = 0; i < KEYBOARD_REPORT_KEYS; i++) { phex(report->keys[i]); print(" "); } - print(" mods: "); phex(report->mods); print("\n"); + for (int i = 0; i < KEYBOARD_REPORT_KEYS; i++) { + phex(report->keys[i]); + print(" "); + } + print(" mods: "); + phex(report->mods); + print("\n"); } - -static inline int8_t send_report(report_keyboard_t *report, uint8_t endpoint, uint8_t keys_start, uint8_t keys_end) -{ +static inline int8_t send_report(report_keyboard_t *report, uint8_t endpoint, uint8_t keys_start, uint8_t keys_end) { uint8_t intr_state, timeout; if (!usb_configured()) return -1; intr_state = SREG; cli(); - UENUM = endpoint; + UENUM = endpoint; timeout = UDFNUML + 50; while (1) { - // are we ready to transmit? - if (UEINTX & (1<<RWAL)) break; - SREG = intr_state; - // has the USB gone offline? - if (!usb_configured()) return -1; - // have we waited too long? - if (UDFNUML == timeout) return -1; - // get ready to try checking again - intr_state = SREG; - cli(); - UENUM = endpoint; + // are we ready to transmit? + if (UEINTX & (1 << RWAL)) break; + SREG = intr_state; + // has the USB gone offline? + if (!usb_configured()) return -1; + // have we waited too long? + if (UDFNUML == timeout) return -1; + // get ready to try checking again + intr_state = SREG; + cli(); + UENUM = endpoint; } for (uint8_t i = keys_start; i < keys_end; i++) { - UEDATX = report->raw[i]; + UEDATX = report->raw[i]; } UEINTX = 0x3A; - SREG = intr_state; + SREG = intr_state; return 0; } diff --git a/tmk_core/protocol/pjrc/usb_keyboard.h b/tmk_core/protocol/pjrc/usb_keyboard.h index 9b798e9a86..919685fde4 100644 --- a/tmk_core/protocol/pjrc/usb_keyboard.h +++ b/tmk_core/protocol/pjrc/usb_keyboard.h @@ -22,19 +22,17 @@ */ #ifndef USB_KEYBOARD_H -#define USB_KEYBOARD_H 1 +#define USB_KEYBOARD_H 1 #include <stdint.h> #include <stdbool.h> #include "usb.h" #include "host.h" - -extern uint8_t usb_keyboard_idle_count; +extern uint8_t usb_keyboard_idle_count; extern volatile uint8_t usb_keyboard_leds; - int8_t usb_keyboard_send_report(report_keyboard_t *report); -void usb_keyboard_print_report(report_keyboard_t *report); +void usb_keyboard_print_report(report_keyboard_t *report); #endif diff --git a/tmk_core/protocol/pjrc/usb_mouse.c b/tmk_core/protocol/pjrc/usb_mouse.c index d81db756f3..9e3639571c 100644 --- a/tmk_core/protocol/pjrc/usb_mouse.c +++ b/tmk_core/protocol/pjrc/usb_mouse.c @@ -27,55 +27,57 @@ #include "print.h" #include "debug.h" +uint8_t usb_mouse_protocol = 1; -uint8_t usb_mouse_protocol=1; +int8_t usb_mouse_send(int8_t x, int8_t y, int8_t wheel_v, int8_t wheel_h, uint8_t buttons) { + uint8_t intr_state, timeout; + if (!usb_configured()) return -1; + if (x == -128) x = -127; + if (y == -128) y = -127; + if (wheel_v == -128) wheel_v = -127; + if (wheel_h == -128) wheel_h = -127; + intr_state = SREG; + cli(); + UENUM = MOUSE_ENDPOINT; + timeout = UDFNUML + 50; + while (1) { + // are we ready to transmit? + if (UEINTX & (1 << RWAL)) break; + SREG = intr_state; + // has the USB gone offline? + if (!usb_configured()) return -1; + // have we waited too long? + if (UDFNUML == timeout) return -1; + // get ready to try checking again + intr_state = SREG; + cli(); + UENUM = MOUSE_ENDPOINT; + } + UEDATX = buttons; + UEDATX = x; + UEDATX = y; + if (usb_mouse_protocol) { + UEDATX = wheel_v; + UEDATX = wheel_h; + } -int8_t usb_mouse_send(int8_t x, int8_t y, int8_t wheel_v, int8_t wheel_h, uint8_t buttons) -{ - uint8_t intr_state, timeout; - - if (!usb_configured()) return -1; - if (x == -128) x = -127; - if (y == -128) y = -127; - if (wheel_v == -128) wheel_v = -127; - if (wheel_h == -128) wheel_h = -127; - intr_state = SREG; - cli(); - UENUM = MOUSE_ENDPOINT; - timeout = UDFNUML + 50; - while (1) { - // are we ready to transmit? - if (UEINTX & (1<<RWAL)) break; - SREG = intr_state; - // has the USB gone offline? - if (!usb_configured()) return -1; - // have we waited too long? - if (UDFNUML == timeout) return -1; - // get ready to try checking again - intr_state = SREG; - cli(); - UENUM = MOUSE_ENDPOINT; - } - UEDATX = buttons; - UEDATX = x; - UEDATX = y; - if (usb_mouse_protocol) { - UEDATX = wheel_v; - UEDATX = wheel_h; - } - - UEINTX = 0x3A; - SREG = intr_state; - return 0; + UEINTX = 0x3A; + SREG = intr_state; + return 0; } void usb_mouse_print(int8_t x, int8_t y, int8_t wheel_v, int8_t wheel_h, uint8_t buttons) { if (!debug_mouse) return; print("usb_mouse[btn|x y v h]: "); - phex(buttons); print("|"); - phex(x); print(" "); - phex(y); print(" "); - phex(wheel_v); print(" "); - phex(wheel_h); print("\n"); + phex(buttons); + print("|"); + phex(x); + print(" "); + phex(y); + print(" "); + phex(wheel_v); + print(" "); + phex(wheel_h); + print("\n"); } diff --git a/tmk_core/protocol/pjrc/usb_mouse.h b/tmk_core/protocol/pjrc/usb_mouse.h index ce26887c9b..ba7df230de 100644 --- a/tmk_core/protocol/pjrc/usb_mouse.h +++ b/tmk_core/protocol/pjrc/usb_mouse.h @@ -22,29 +22,26 @@ */ #ifndef USB_MOUSE_H -#define USB_MOUSE_H 1 +#define USB_MOUSE_H 1 #include <stdint.h> #include <stdbool.h> #include "usb.h" +#define MOUSE_INTERFACE 1 +#define MOUSE_ENDPOINT 2 +#define MOUSE_SIZE 8 +#define MOUSE_BUFFER EP_SINGLE_BUFFER -#define MOUSE_INTERFACE 1 -#define MOUSE_ENDPOINT 2 -#define MOUSE_SIZE 8 -#define MOUSE_BUFFER EP_SINGLE_BUFFER - -#define MOUSE_BTN1 (1<<0) -#define MOUSE_BTN2 (1<<1) -#define MOUSE_BTN3 (1<<2) -#define MOUSE_BTN4 (1<<3) -#define MOUSE_BTN5 (1<<4) - +#define MOUSE_BTN1 (1 << 0) +#define MOUSE_BTN2 (1 << 1) +#define MOUSE_BTN3 (1 << 2) +#define MOUSE_BTN4 (1 << 3) +#define MOUSE_BTN5 (1 << 4) extern uint8_t usb_mouse_protocol; - int8_t usb_mouse_send(int8_t x, int8_t y, int8_t wheel_v, int8_t wheel_h, uint8_t buttons); -void usb_mouse_print(int8_t x, int8_t y, int8_t wheel_v, int8_t wheel_h, uint8_t buttons); +void usb_mouse_print(int8_t x, int8_t y, int8_t wheel_v, int8_t wheel_h, uint8_t buttons); #endif |