]> git.donarmstrong.com Git - tmk_firmware.git/commitdiff
add a build option: USB_EXTRA_ENABLE
authortmk <nobody@nowhere>
Tue, 4 Jan 2011 15:04:25 +0000 (00:04 +0900)
committertmk <nobody@nowhere>
Tue, 4 Jan 2011 15:19:43 +0000 (00:19 +0900)
Makefile.common
hhkb/Makefile
key_process.c
macway/Makefile
macway/config.h
usb.c
usb_extra.h

index 9e995c908b1530c7e8f4f4cd5cd2ae4380f7e6c3..795e7b999bf9d3ff050b91d9e709d0d9f84327b9 100644 (file)
@@ -53,15 +53,18 @@ SRC =       tmk.c \
        layer.c \
        key_process.c \
        usb_keyboard.c \
-       usb_mouse.c \
        usb_debug.c \
-       usb_extra.c \
        usb.c \
        jump_bootloader.c \
        print.c \
        timer.c \
        util.c
 SRC += $(TARGET_SRC)
+
+# Option modules
+ifdef $(or MOUSEKEY_ENABLE, PS2_MOUSE_ENABLE)
+    SRC += usb_mouse.c
+endif
 ifdef MOUSEKEY_ENABLE
     SRC += mousekey.c
 endif
@@ -69,6 +72,17 @@ ifdef PS2_MOUSE_ENABLE
     SRC += ps2.c \
           ps2_mouse.c
 endif
+ifdef USB_EXTRA_ENABLE
+    SRC += usb_extra.c
+endif
+
+ALL_SRC = $(SRC)
+ALL_SRC += usb_mouse.c \
+          mousekey.c \
+          ps2.c \
+          ps2_mouse.c \
+          usb_extra.c
+
 
 # C source file search path
 VPATH = $(TARGET_DIR):$(COMMON_DIR)
@@ -127,15 +141,21 @@ CSTANDARD = -std=gnu99
 
 
 OPT_DEFS =
-ifdef USB_NKRO_ENABLE
-    OPT_DEFS += -DUSB_NKRO_ENABLE
-endif
 ifdef MOUSEKEY_ENABLE
     OPT_DEFS += -DMOUSEKEY_ENABLE
 endif
 ifdef PS2_MOUSE_ENABLE
     OPT_DEFS += -DPS2_MOUSE_ENABLE
 endif
+ifdef USB_EXTRA_ENABLE
+    OPT_DEFS += -DUSB_EXTRA_ENABLE
+endif
+ifdef USB_NKRO_ENABLE
+    OPT_DEFS += -DUSB_NKRO_ENABLE
+endif
+ifdef $(or MOUSEKEY_ENABLE, PS2_MOUSE_ENABLE)
+    OPT_DEFS += -DUSB_MOUSE_ENABLE
+endif
 
 # Place -D or -U options here for C sources
 CDEFS = -DF_CPU=$(F_CPU)UL
@@ -622,11 +642,11 @@ clean_list :
        $(REMOVE) $(TARGET).map
        $(REMOVE) $(TARGET).sym
        $(REMOVE) $(TARGET).lss
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)
-       $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)
-       $(REMOVE) $(SRC:.c=.s)
-       $(REMOVE) $(SRC:.c=.d)
-       $(REMOVE) $(SRC:.c=.i)
+       $(REMOVE) $(ALL_SRC:%.c=$(OBJDIR)/%.o)
+       $(REMOVE) $(ALL_SRC:%.c=$(OBJDIR)/%.lst)
+       $(REMOVE) $(ALL_SRC:.c=.s)
+       $(REMOVE) $(ALL_SRC:.c=.d)
+       $(REMOVE) $(ALL_SRC:.c=.i)
        $(REMOVEDIR) .dep
 
 
index 943785fef8add18f108a8134fd0f9054744f1e29..f2192888ff3be696c5eb0e38b00393692e3a9fbb 100644 (file)
@@ -69,10 +69,12 @@ MCU = at90usb1286      # Teensy++ 2.0
 F_CPU = 16000000
 
 
-# Options
-#     comment out to disable
-USB_NKRO_ENABLE = yes
-MOUSEKEY_ENABLE = yes
-#PS2_MOUSE_ENABLE = yes
+# Build Options
+#   comment out to disable the options.
+MOUSEKEY_ENABLE = yes  # Mouse keys
+#PS2_MOUSE_ENABLE = yes        # PS/2 mouse(TrackPoint) support
+USB_EXTRA_ENABLE = yes # Enhanced feature for Windows(Audio control and System control)
+USB_NKRO_ENABLE = yes  # USB Nkey Rollover
+
 
 include $(COMMON_DIR)/Makefile.common
index e3bee02e3b904a1fc912dc0409cc8207148d0e7e..2d4e788195e053b7a03d3612439bef225a0a8ab0 100644 (file)
@@ -8,8 +8,6 @@
 #include "util.h"
 #include "jump_bootloader.h"
 #include "usb_keyboard.h"
-#include "usb_mouse.h"
-#include "usb_extra.h"
 #include "usb_keycodes.h"
 #include "usb.h"
 #include "layer.h"
 #ifdef PS2_MOUSE_ENABLE
 #   include "ps2_mouse.h"
 #endif
+#ifdef USB_EXTRA_ENABLE
+#   include "usb_extra.h"
+#endif
+#ifdef USB_MOUSE_ENABLE
+#   include "usb_mouse.h"
+#endif
 
 
 // TODO: refactoring
@@ -67,6 +71,7 @@ void proc_matrix(void) {
 #endif
             }
 
+#ifdef USB_EXTRA_ENABLE
             // audio control & system control
             else if (code == KB_MUTE) {
                 usb_extra_audio_send(AUDIO_MUTE);
@@ -88,6 +93,7 @@ void proc_matrix(void) {
                 }
                 _delay_ms(1000);
             }
+#endif
 
             // normal keys
             else {
@@ -259,7 +265,9 @@ void proc_matrix(void) {
                 print("usb_keyboard_protocol:"); phex(usb_keyboard_protocol); print("\n");
                 print("usb_keyboard_idle_config:"); phex(usb_keyboard_idle_config); print("\n");
                 print("usb_keyboard_idle_count:"); phex(usb_keyboard_idle_count); print("\n");
+#ifdef USB_MOUSE_ENABLE
                 print("usb_mouse_protocol:"); phex(usb_mouse_protocol); print("\n");
+#endif
                 if (usb_keyboard_nkro) print("USB_NKRO: enabled\n"); else print("USB_NKRO: disabled\n");
                 _delay_ms(500);
                 break;
@@ -267,13 +275,16 @@ void proc_matrix(void) {
                 usb_keyboard_clear_report();
                 usb_keyboard_send();
                 usb_keyboard_protocol = !usb_keyboard_protocol;
-                usb_mouse_protocol = !usb_mouse_protocol;
                 print("keyboard protcol: ");
                 if (usb_keyboard_protocol) print("report"); else print("boot");
                 print("\n");
+
+#ifdef USB_MOUSE_ENABLE
+                usb_mouse_protocol = !usb_mouse_protocol;
                 print("mouse protcol: ");
                 if (usb_mouse_protocol) print("report"); else print("boot");
                 print("\n");
+#endif
                 _delay_ms(1000);
                 break;
 #ifdef USB_NKRO_ENABLE
@@ -285,6 +296,7 @@ void proc_matrix(void) {
                 _delay_ms(1000);
                 break;
 #endif
+#ifdef USB_EXTRA_ENABLE
             case KB_ESC:
                 usb_keyboard_clear_report();
                 usb_keyboard_send();
@@ -295,6 +307,7 @@ void proc_matrix(void) {
                 }
                 _delay_ms(1000);
                 break;
+#endif
         }
     }
 
index fffe1ad5444f4c7abf076f4d465bd4f7c9b35cb9..49dba6746a34f2143f0ac7b870a70ff7baf57d82 100644 (file)
@@ -69,10 +69,13 @@ MCU = atmega32u4       # Teensy 2.0
 F_CPU = 16000000
 
 
-# Options
-#     comment out to disable
-#USB_NKRO_ENABLE = yes
-MOUSEKEY_ENABLE = yes
-PS2_MOUSE_ENABLE = yes
+# Build Options
+#   comment out to disable the options.
+#
+MOUSEKEY_ENABLE = yes  # Mouse keys
+PS2_MOUSE_ENABLE = yes # PS/2 mouse(TrackPoint) support
+USB_EXTRA_ENABLE = yes # Enhanced feature for Windows(Audio control and System control)
+#USB_NKRO_ENABLE = yes # USB Nkey Rollover
+
 
 include $(COMMON_DIR)/Makefile.common
index de9fc78b106b8e6d37ebfe23f8e27a6adaca2ff8..41bdc33de0b997a874d35eb81db9f76e8f1d3a97 100644 (file)
@@ -2,7 +2,7 @@
 #define CONFIG_H
 
 #define VENDOR_ID       0xFEED
-#define PRODUCT_ID      0xBEEF
+#define PRODUCT_ID      0xBEE0
 #define MANUFACTURER    t.m.k.
 #define PRODUCT         Macway mod
 #define DESCRIPTION     t.m.k. keyboard firmware for Macway mod
diff --git a/usb.c b/usb.c
index 2ec20ca227b18eb32b5c13280f64bae8ee618ff7..845b00bea770b0b2344a39f28957e1aeddfbabe9 100755 (executable)
--- a/usb.c
+++ b/usb.c
@@ -91,15 +91,23 @@ bool suspend = false;
 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
+#ifdef USB_MOUSE_ENABLE
        1, EP_TYPE_INTERRUPT_IN,  EP_SIZE(MOUSE_SIZE)    | MOUSE_BUFFER,    // 2
+#else
+        0,                                                                  // 2
+#endif
        1, EP_TYPE_INTERRUPT_IN,  EP_SIZE(DEBUG_TX_SIZE) | DEBUG_TX_BUFFER, // 3
+#ifdef USB_EXTRA_ENABLE
        1, EP_TYPE_INTERRUPT_IN,  EP_SIZE(EXTRA_SIZE)    | EXTRA_BUFFER,    // 4
+#else
+        0,                                                                  // 4
+#endif
 #ifdef USB_NKRO_ENABLE
        1, EP_TYPE_INTERRUPT_IN,  EP_SIZE(KBD2_SIZE)     | KBD2_BUFFER,     // 5
 #else
-        0, // 5
+        0,                                                                  // 5
 #endif
-        0, // 6
+        0,                                                                  // 6
 };
 
 
@@ -205,6 +213,7 @@ static uint8_t PROGMEM keyboard2_hid_report_desc[] = {
 };
 #endif
 
+#ifdef USB_MOUSE_ENABLE
 // Mouse Protocol 1, HID 1.11 spec, Appendix B, page 59-60, with wheel extension
 // http://www.microchip.com/forums/tm.aspx?high=&m=391435&mpage=1#391521
 // http://www.keil.com/forum/15671/
@@ -281,6 +290,7 @@ static uint8_t PROGMEM mouse_hid_report_desc[] = {
     0xc0,              //   END_COLLECTION
     0xc0               // END_COLLECTION
 };
+#endif
 
 static uint8_t PROGMEM debug_hid_report_desc[] = {
        0x06, 0x31, 0xFF,                       // Usage Page 0xFF31 (vendor defined)
@@ -295,6 +305,7 @@ static uint8_t PROGMEM debug_hid_report_desc[] = {
        0xC0                                    // end collection
 };
 
+#ifdef USB_EXTRA_ENABLE
 // audio controls & system controls
 // http://www.microsoft.com/whdc/archive/w2kbd.mspx
 static uint8_t PROGMEM extra_hid_report_desc[] = {
@@ -331,18 +342,37 @@ static uint8_t PROGMEM extra_hid_report_desc[] = {
     0x81, 0x07,                    //   INPUT (Cnst,Var,Rel)
     0xc0                           // END_COLLECTION
 };
+#endif
+
+#define KBD_HID_DESC_NUM                0
+#define KBD_HID_DESC_OFFSET             (9+(9+9+7)*KBD_HID_DESC_NUM+9)
+
+#ifdef USB_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)
+#else
+#   define MOUSE_HID_DESC_NUM           (KBD_HID_DESC_NUM + 0)
+#endif
+
+#define DEBUG_HID_DESC_NUM              (MOUSE_HID_DESC_NUM + 1)
+#define DEBUG_HID_DESC_OFFSET           (9+(9+9+7)*DEBUG_HID_DESC_NUM+9)
+
+#ifdef USB_EXTRA_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)
+#else
+#   define EXTRA_HID_DESC_NUM           (DEBUG_HID_DESC_NUM + 0)
+#endif
 
-#define KBD_HID_DESC_OFFSET    (9+(9+9+7)*0+9)
-#define MOUSE_HID_DESC_OFFSET  (9+(9+9+7)*1+9)
-#define DEBUG_HID_DESC_OFFSET  (9+(9+9+7)*2+9)
-#define EXTRA_HID_DESC_OFFSET  (9+(9+9+7)*3+9)
 #ifdef USB_NKRO_ENABLE
-#   define NUM_INTERFACES      5
-#   define KBD2_HID_DESC_OFFSET        (9+(9+9+7)*4+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 NUM_INTERFACES      4
+#   define KBD2_HID_DESC_NUM            (EXTRA_HID_DESC_NUM + 0)
 #endif
-#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 uint8_t PROGMEM config1_descriptor[CONFIG1_DESC_SIZE] = {
        // configuration descriptor, USB spec 9.6.3, page 264-266, Table 9-10
        9,                                      // bLength;
@@ -382,6 +412,7 @@ static uint8_t PROGMEM config1_descriptor[CONFIG1_DESC_SIZE] = {
        KBD_SIZE, 0,                            // wMaxPacketSize
        10,                                     // bInterval
 
+#ifdef USB_MOUSE_ENABLE
        // interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
        9,                                      // bLength
        4,                                      // bDescriptorType
@@ -413,6 +444,7 @@ static uint8_t PROGMEM config1_descriptor[CONFIG1_DESC_SIZE] = {
        0x03,                                   // bmAttributes (0x03=intr)
        MOUSE_SIZE, 0,                          // wMaxPacketSize
        1,                                      // bInterval
+#endif
 
        // interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
        9,                                      // bLength
@@ -441,6 +473,7 @@ static uint8_t PROGMEM config1_descriptor[CONFIG1_DESC_SIZE] = {
        DEBUG_TX_SIZE, 0,                       // wMaxPacketSize
        1,                                      // bInterval
 
+#ifdef USB_EXTRA_ENABLE
        // interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
        9,                                      // bLength
        4,                                      // bDescriptorType
@@ -467,6 +500,7 @@ static uint8_t PROGMEM config1_descriptor[CONFIG1_DESC_SIZE] = {
        0x03,                                   // bmAttributes (0x03=intr)
        EXTRA_SIZE, 0,                          // wMaxPacketSize
        10,                                     // bInterval
+#endif
 
 #ifdef USB_NKRO_ENABLE
        // interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
@@ -537,12 +571,16 @@ static struct descriptor_list_struct {
         // 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 USB_MOUSE_ENABLE
        {0x2100, MOUSE_INTERFACE, config1_descriptor+MOUSE_HID_DESC_OFFSET, 9},
        {0x2200, MOUSE_INTERFACE, mouse_hid_report_desc, sizeof(mouse_hid_report_desc)},
+#endif
        {0x2100, DEBUG_INTERFACE, config1_descriptor+DEBUG_HID_DESC_OFFSET, 9},
        {0x2200, DEBUG_INTERFACE, debug_hid_report_desc, sizeof(debug_hid_report_desc)},
+#ifdef USB_EXTRA_ENABLE
        {0x2100, EXTRA_INTERFACE, config1_descriptor+EXTRA_HID_DESC_OFFSET, 9},
        {0x2200, EXTRA_INTERFACE, extra_hid_report_desc, sizeof(extra_hid_report_desc)},
+#endif
 #ifdef USB_NKRO_ENABLE
        {0x2100, KBD2_INTERFACE, config1_descriptor+KBD2_HID_DESC_OFFSET, 9},
        {0x2200, KBD2_INTERFACE, keyboard2_hid_report_desc, sizeof(keyboard2_hid_report_desc)},
@@ -879,6 +917,7 @@ ISR(USB_COM_vect)
                                }
                        }
                }
+#ifdef USB_MOUSE_ENABLE
                if (wIndex == MOUSE_INTERFACE) {
                        if (bmRequestType == 0xA1) {
                                if (bRequest == HID_GET_REPORT) {
@@ -913,6 +952,7 @@ ISR(USB_COM_vect)
                                }
                        }
                }
+#endif
                if (wIndex == DEBUG_INTERFACE) {
                        if (bRequest == HID_GET_REPORT && bmRequestType == 0xA1) {
                                len = wLength;
index 202f3223b366fca445d44f0cc958d1b319fde057..d6f9e8ba0aef9d868eec5d7ca6b30bfecd74f0ff 100644 (file)
@@ -1,5 +1,11 @@
 #ifndef USB_EXTRA_H
 #define  USB_EXTRA_H 1
+/*
+ * Enhanced keyboard features for Windows:
+ * Audio control and System control
+ *
+ * http://www.microsoft.com/whdc/archive/w2kbd.mspx
+ */
 
 #include <stdint.h>
 #include "usb.h"
 #define EXTRA_SIZE             2
 #define EXTRA_BUFFER           EP_DOUBLE_BUFFER
 
-// http://www.microsoft.com/whdc/archive/w2kbd.mspx
+
+// Consumer Page(0x0C) Consumer Control(0x01)
 #define AUDIO_VOL_UP           (1<<0)
 #define AUDIO_VOL_DOWN         (1<<1)
 #define AUDIO_MUTE             (1<<2)
 
+// Generic Desktop Page(0x01) System Control(0x80)
 #define SYSTEM_POWER_DOWN      (1<<0)
 #define SYSTEM_SLEEP           (1<<1)
 #define SYSTEM_WAKE_UP         (1<<2)