diff options
| -rw-r--r-- | Makefile.common | 40 | ||||
| -rw-r--r-- | hhkb/Makefile | 12 | ||||
| -rw-r--r-- | key_process.c | 19 | ||||
| -rw-r--r-- | macway/Makefile | 13 | ||||
| -rw-r--r-- | macway/config.h | 2 | ||||
| -rwxr-xr-x | usb.c | 60 | ||||
| -rw-r--r-- | usb_extra.h | 10 | 
7 files changed, 121 insertions, 35 deletions
| diff --git a/Makefile.common b/Makefile.common index 9e995c908b..795e7b999b 100644 --- a/Makefile.common +++ b/Makefile.common @@ -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 diff --git a/hhkb/Makefile b/hhkb/Makefile index 943785fef8..f2192888ff 100644 --- a/hhkb/Makefile +++ b/hhkb/Makefile @@ -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 diff --git a/key_process.c b/key_process.c index e3bee02e3b..2d4e788195 100644 --- a/key_process.c +++ b/key_process.c @@ -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" @@ -22,6 +20,12 @@  #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          }      } diff --git a/macway/Makefile b/macway/Makefile index fffe1ad544..49dba6746a 100644 --- a/macway/Makefile +++ b/macway/Makefile @@ -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 diff --git a/macway/config.h b/macway/config.h index de9fc78b10..41bdc33de0 100644 --- a/macway/config.h +++ b/macway/config.h @@ -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 @@ -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; diff --git a/usb_extra.h b/usb_extra.h index 202f3223b3..d6f9e8ba0a 100644 --- a/usb_extra.h +++ b/usb_extra.h @@ -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" @@ -10,11 +16,13 @@  #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) | 
