aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortmk <nobody@nowhere>2011-01-05 00:04:25 +0900
committertmk <nobody@nowhere>2011-01-05 00:19:43 +0900
commit6b0c939d72c11e404f84c926cf82f9501f8511ff (patch)
tree9df22c1991b8b293442b2f12fac08e910dc49d58
parent7272c65d3d24187487e7d38e332401002f5f233b (diff)
downloadfirmware-6b0c939d72c11e404f84c926cf82f9501f8511ff.tar.gz
firmware-6b0c939d72c11e404f84c926cf82f9501f8511ff.tar.bz2
firmware-6b0c939d72c11e404f84c926cf82f9501f8511ff.zip
add a build option: USB_EXTRA_ENABLE
-rw-r--r--Makefile.common40
-rw-r--r--hhkb/Makefile12
-rw-r--r--key_process.c19
-rw-r--r--macway/Makefile13
-rw-r--r--macway/config.h2
-rwxr-xr-xusb.c60
-rw-r--r--usb_extra.h10
7 files changed, 121 insertions, 35 deletions
diff --git a/Makefile.common b/Makefile.common
index 9e995c908..795e7b999 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 943785fef..f2192888f 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 e3bee02e3..2d4e78819 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 fffe1ad54..49dba6746 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 de9fc78b1..41bdc33de 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
diff --git a/usb.c b/usb.c
index 2ec20ca22..845b00bea 100755
--- 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;
diff --git a/usb_extra.h b/usb_extra.h
index 202f3223b..d6f9e8ba0 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)