add a build option: USB_EXTRA_ENABLE
This commit is contained in:
parent
7272c65d3d
commit
6b0c939d72
7 changed files with 124 additions and 38 deletions
|
@ -53,15 +53,18 @@ SRC = tmk.c \
|
||||||
layer.c \
|
layer.c \
|
||||||
key_process.c \
|
key_process.c \
|
||||||
usb_keyboard.c \
|
usb_keyboard.c \
|
||||||
usb_mouse.c \
|
|
||||||
usb_debug.c \
|
usb_debug.c \
|
||||||
usb_extra.c \
|
|
||||||
usb.c \
|
usb.c \
|
||||||
jump_bootloader.c \
|
jump_bootloader.c \
|
||||||
print.c \
|
print.c \
|
||||||
timer.c \
|
timer.c \
|
||||||
util.c
|
util.c
|
||||||
SRC += $(TARGET_SRC)
|
SRC += $(TARGET_SRC)
|
||||||
|
|
||||||
|
# Option modules
|
||||||
|
ifdef $(or MOUSEKEY_ENABLE, PS2_MOUSE_ENABLE)
|
||||||
|
SRC += usb_mouse.c
|
||||||
|
endif
|
||||||
ifdef MOUSEKEY_ENABLE
|
ifdef MOUSEKEY_ENABLE
|
||||||
SRC += mousekey.c
|
SRC += mousekey.c
|
||||||
endif
|
endif
|
||||||
|
@ -69,6 +72,17 @@ ifdef PS2_MOUSE_ENABLE
|
||||||
SRC += ps2.c \
|
SRC += ps2.c \
|
||||||
ps2_mouse.c
|
ps2_mouse.c
|
||||||
endif
|
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
|
# C source file search path
|
||||||
VPATH = $(TARGET_DIR):$(COMMON_DIR)
|
VPATH = $(TARGET_DIR):$(COMMON_DIR)
|
||||||
|
@ -127,15 +141,21 @@ CSTANDARD = -std=gnu99
|
||||||
|
|
||||||
|
|
||||||
OPT_DEFS =
|
OPT_DEFS =
|
||||||
ifdef USB_NKRO_ENABLE
|
|
||||||
OPT_DEFS += -DUSB_NKRO_ENABLE
|
|
||||||
endif
|
|
||||||
ifdef MOUSEKEY_ENABLE
|
ifdef MOUSEKEY_ENABLE
|
||||||
OPT_DEFS += -DMOUSEKEY_ENABLE
|
OPT_DEFS += -DMOUSEKEY_ENABLE
|
||||||
endif
|
endif
|
||||||
ifdef PS2_MOUSE_ENABLE
|
ifdef PS2_MOUSE_ENABLE
|
||||||
OPT_DEFS += -DPS2_MOUSE_ENABLE
|
OPT_DEFS += -DPS2_MOUSE_ENABLE
|
||||||
endif
|
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
|
# Place -D or -U options here for C sources
|
||||||
CDEFS = -DF_CPU=$(F_CPU)UL
|
CDEFS = -DF_CPU=$(F_CPU)UL
|
||||||
|
@ -622,11 +642,11 @@ clean_list :
|
||||||
$(REMOVE) $(TARGET).map
|
$(REMOVE) $(TARGET).map
|
||||||
$(REMOVE) $(TARGET).sym
|
$(REMOVE) $(TARGET).sym
|
||||||
$(REMOVE) $(TARGET).lss
|
$(REMOVE) $(TARGET).lss
|
||||||
$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o)
|
$(REMOVE) $(ALL_SRC:%.c=$(OBJDIR)/%.o)
|
||||||
$(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst)
|
$(REMOVE) $(ALL_SRC:%.c=$(OBJDIR)/%.lst)
|
||||||
$(REMOVE) $(SRC:.c=.s)
|
$(REMOVE) $(ALL_SRC:.c=.s)
|
||||||
$(REMOVE) $(SRC:.c=.d)
|
$(REMOVE) $(ALL_SRC:.c=.d)
|
||||||
$(REMOVE) $(SRC:.c=.i)
|
$(REMOVE) $(ALL_SRC:.c=.i)
|
||||||
$(REMOVEDIR) .dep
|
$(REMOVEDIR) .dep
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -69,10 +69,12 @@ MCU = at90usb1286 # Teensy++ 2.0
|
||||||
F_CPU = 16000000
|
F_CPU = 16000000
|
||||||
|
|
||||||
|
|
||||||
# Options
|
# Build Options
|
||||||
# comment out to disable
|
# comment out to disable the options.
|
||||||
USB_NKRO_ENABLE = yes
|
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||||
MOUSEKEY_ENABLE = yes
|
#PS2_MOUSE_ENABLE = yes # PS/2 mouse(TrackPoint) support
|
||||||
#PS2_MOUSE_ENABLE = yes
|
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
|
include $(COMMON_DIR)/Makefile.common
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "jump_bootloader.h"
|
#include "jump_bootloader.h"
|
||||||
#include "usb_keyboard.h"
|
#include "usb_keyboard.h"
|
||||||
#include "usb_mouse.h"
|
|
||||||
#include "usb_extra.h"
|
|
||||||
#include "usb_keycodes.h"
|
#include "usb_keycodes.h"
|
||||||
#include "usb.h"
|
#include "usb.h"
|
||||||
#include "layer.h"
|
#include "layer.h"
|
||||||
|
@ -22,6 +20,12 @@
|
||||||
#ifdef PS2_MOUSE_ENABLE
|
#ifdef PS2_MOUSE_ENABLE
|
||||||
# include "ps2_mouse.h"
|
# include "ps2_mouse.h"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef USB_EXTRA_ENABLE
|
||||||
|
# include "usb_extra.h"
|
||||||
|
#endif
|
||||||
|
#ifdef USB_MOUSE_ENABLE
|
||||||
|
# include "usb_mouse.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// TODO: refactoring
|
// TODO: refactoring
|
||||||
|
@ -67,6 +71,7 @@ void proc_matrix(void) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef USB_EXTRA_ENABLE
|
||||||
// audio control & system control
|
// audio control & system control
|
||||||
else if (code == KB_MUTE) {
|
else if (code == KB_MUTE) {
|
||||||
usb_extra_audio_send(AUDIO_MUTE);
|
usb_extra_audio_send(AUDIO_MUTE);
|
||||||
|
@ -88,6 +93,7 @@ void proc_matrix(void) {
|
||||||
}
|
}
|
||||||
_delay_ms(1000);
|
_delay_ms(1000);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// normal keys
|
// normal keys
|
||||||
else {
|
else {
|
||||||
|
@ -259,7 +265,9 @@ void proc_matrix(void) {
|
||||||
print("usb_keyboard_protocol:"); phex(usb_keyboard_protocol); print("\n");
|
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_config:"); phex(usb_keyboard_idle_config); print("\n");
|
||||||
print("usb_keyboard_idle_count:"); phex(usb_keyboard_idle_count); 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");
|
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");
|
if (usb_keyboard_nkro) print("USB_NKRO: enabled\n"); else print("USB_NKRO: disabled\n");
|
||||||
_delay_ms(500);
|
_delay_ms(500);
|
||||||
break;
|
break;
|
||||||
|
@ -267,13 +275,16 @@ void proc_matrix(void) {
|
||||||
usb_keyboard_clear_report();
|
usb_keyboard_clear_report();
|
||||||
usb_keyboard_send();
|
usb_keyboard_send();
|
||||||
usb_keyboard_protocol = !usb_keyboard_protocol;
|
usb_keyboard_protocol = !usb_keyboard_protocol;
|
||||||
usb_mouse_protocol = !usb_mouse_protocol;
|
|
||||||
print("keyboard protcol: ");
|
print("keyboard protcol: ");
|
||||||
if (usb_keyboard_protocol) print("report"); else print("boot");
|
if (usb_keyboard_protocol) print("report"); else print("boot");
|
||||||
print("\n");
|
print("\n");
|
||||||
|
|
||||||
|
#ifdef USB_MOUSE_ENABLE
|
||||||
|
usb_mouse_protocol = !usb_mouse_protocol;
|
||||||
print("mouse protcol: ");
|
print("mouse protcol: ");
|
||||||
if (usb_mouse_protocol) print("report"); else print("boot");
|
if (usb_mouse_protocol) print("report"); else print("boot");
|
||||||
print("\n");
|
print("\n");
|
||||||
|
#endif
|
||||||
_delay_ms(1000);
|
_delay_ms(1000);
|
||||||
break;
|
break;
|
||||||
#ifdef USB_NKRO_ENABLE
|
#ifdef USB_NKRO_ENABLE
|
||||||
|
@ -285,6 +296,7 @@ void proc_matrix(void) {
|
||||||
_delay_ms(1000);
|
_delay_ms(1000);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef USB_EXTRA_ENABLE
|
||||||
case KB_ESC:
|
case KB_ESC:
|
||||||
usb_keyboard_clear_report();
|
usb_keyboard_clear_report();
|
||||||
usb_keyboard_send();
|
usb_keyboard_send();
|
||||||
|
@ -295,6 +307,7 @@ void proc_matrix(void) {
|
||||||
}
|
}
|
||||||
_delay_ms(1000);
|
_delay_ms(1000);
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -69,10 +69,13 @@ MCU = atmega32u4 # Teensy 2.0
|
||||||
F_CPU = 16000000
|
F_CPU = 16000000
|
||||||
|
|
||||||
|
|
||||||
# Options
|
# Build Options
|
||||||
# comment out to disable
|
# comment out to disable the options.
|
||||||
#USB_NKRO_ENABLE = yes
|
#
|
||||||
MOUSEKEY_ENABLE = yes
|
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||||
PS2_MOUSE_ENABLE = yes
|
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
|
include $(COMMON_DIR)/Makefile.common
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#define CONFIG_H
|
#define CONFIG_H
|
||||||
|
|
||||||
#define VENDOR_ID 0xFEED
|
#define VENDOR_ID 0xFEED
|
||||||
#define PRODUCT_ID 0xBEEF
|
#define PRODUCT_ID 0xBEE0
|
||||||
#define MANUFACTURER t.m.k.
|
#define MANUFACTURER t.m.k.
|
||||||
#define PRODUCT Macway mod
|
#define PRODUCT Macway mod
|
||||||
#define DESCRIPTION t.m.k. keyboard firmware for Macway mod
|
#define DESCRIPTION t.m.k. keyboard firmware for Macway mod
|
||||||
|
|
66
usb.c
66
usb.c
|
@ -91,15 +91,23 @@ bool suspend = false;
|
||||||
static const uint8_t PROGMEM endpoint_config_table[] = {
|
static const uint8_t PROGMEM endpoint_config_table[] = {
|
||||||
// enable, UECFG0X(type, direction), UECFG1X(size, bank, allocation)
|
// enable, UECFG0X(type, direction), UECFG1X(size, bank, allocation)
|
||||||
1, EP_TYPE_INTERRUPT_IN, EP_SIZE(KBD_SIZE) | KBD_BUFFER, // 1
|
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
|
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
|
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
|
1, EP_TYPE_INTERRUPT_IN, EP_SIZE(EXTRA_SIZE) | EXTRA_BUFFER, // 4
|
||||||
|
#else
|
||||||
|
0, // 4
|
||||||
|
#endif
|
||||||
#ifdef USB_NKRO_ENABLE
|
#ifdef USB_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
|
#else
|
||||||
0, // 5
|
0, // 5
|
||||||
#endif
|
#endif
|
||||||
0, // 6
|
0, // 6
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -205,6 +213,7 @@ static uint8_t PROGMEM keyboard2_hid_report_desc[] = {
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USB_MOUSE_ENABLE
|
||||||
// Mouse Protocol 1, HID 1.11 spec, Appendix B, page 59-60, with wheel extension
|
// 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.microchip.com/forums/tm.aspx?high=&m=391435&mpage=1#391521
|
||||||
// http://www.keil.com/forum/15671/
|
// http://www.keil.com/forum/15671/
|
||||||
|
@ -281,6 +290,7 @@ static uint8_t PROGMEM mouse_hid_report_desc[] = {
|
||||||
0xc0, // END_COLLECTION
|
0xc0, // END_COLLECTION
|
||||||
0xc0 // END_COLLECTION
|
0xc0 // END_COLLECTION
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
static uint8_t PROGMEM debug_hid_report_desc[] = {
|
static uint8_t PROGMEM debug_hid_report_desc[] = {
|
||||||
0x06, 0x31, 0xFF, // Usage Page 0xFF31 (vendor defined)
|
0x06, 0x31, 0xFF, // Usage Page 0xFF31 (vendor defined)
|
||||||
|
@ -295,6 +305,7 @@ static uint8_t PROGMEM debug_hid_report_desc[] = {
|
||||||
0xC0 // end collection
|
0xC0 // end collection
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef USB_EXTRA_ENABLE
|
||||||
// audio controls & system controls
|
// audio controls & system controls
|
||||||
// http://www.microsoft.com/whdc/archive/w2kbd.mspx
|
// http://www.microsoft.com/whdc/archive/w2kbd.mspx
|
||||||
static uint8_t PROGMEM extra_hid_report_desc[] = {
|
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)
|
0x81, 0x07, // INPUT (Cnst,Var,Rel)
|
||||||
0xc0 // END_COLLECTION
|
0xc0 // END_COLLECTION
|
||||||
};
|
};
|
||||||
|
|
||||||
#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)
|
|
||||||
#else
|
|
||||||
# define NUM_INTERFACES 4
|
|
||||||
#endif
|
#endif
|
||||||
#define CONFIG1_DESC_SIZE (9+(9+9+7)*NUM_INTERFACES)
|
|
||||||
|
#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
|
||||||
|
|
||||||
|
#ifdef USB_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)
|
||||||
|
#else
|
||||||
|
# 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)
|
||||||
static uint8_t PROGMEM config1_descriptor[CONFIG1_DESC_SIZE] = {
|
static uint8_t PROGMEM config1_descriptor[CONFIG1_DESC_SIZE] = {
|
||||||
// configuration descriptor, USB spec 9.6.3, page 264-266, Table 9-10
|
// configuration descriptor, USB spec 9.6.3, page 264-266, Table 9-10
|
||||||
9, // bLength;
|
9, // bLength;
|
||||||
|
@ -382,6 +412,7 @@ static uint8_t PROGMEM config1_descriptor[CONFIG1_DESC_SIZE] = {
|
||||||
KBD_SIZE, 0, // wMaxPacketSize
|
KBD_SIZE, 0, // wMaxPacketSize
|
||||||
10, // bInterval
|
10, // bInterval
|
||||||
|
|
||||||
|
#ifdef USB_MOUSE_ENABLE
|
||||||
// interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
|
// interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
|
||||||
9, // bLength
|
9, // bLength
|
||||||
4, // bDescriptorType
|
4, // bDescriptorType
|
||||||
|
@ -413,6 +444,7 @@ static uint8_t PROGMEM config1_descriptor[CONFIG1_DESC_SIZE] = {
|
||||||
0x03, // bmAttributes (0x03=intr)
|
0x03, // bmAttributes (0x03=intr)
|
||||||
MOUSE_SIZE, 0, // wMaxPacketSize
|
MOUSE_SIZE, 0, // wMaxPacketSize
|
||||||
1, // bInterval
|
1, // bInterval
|
||||||
|
#endif
|
||||||
|
|
||||||
// interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
|
// interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
|
||||||
9, // bLength
|
9, // bLength
|
||||||
|
@ -441,6 +473,7 @@ static uint8_t PROGMEM config1_descriptor[CONFIG1_DESC_SIZE] = {
|
||||||
DEBUG_TX_SIZE, 0, // wMaxPacketSize
|
DEBUG_TX_SIZE, 0, // wMaxPacketSize
|
||||||
1, // bInterval
|
1, // bInterval
|
||||||
|
|
||||||
|
#ifdef USB_EXTRA_ENABLE
|
||||||
// interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
|
// interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
|
||||||
9, // bLength
|
9, // bLength
|
||||||
4, // bDescriptorType
|
4, // bDescriptorType
|
||||||
|
@ -467,6 +500,7 @@ static uint8_t PROGMEM config1_descriptor[CONFIG1_DESC_SIZE] = {
|
||||||
0x03, // bmAttributes (0x03=intr)
|
0x03, // bmAttributes (0x03=intr)
|
||||||
EXTRA_SIZE, 0, // wMaxPacketSize
|
EXTRA_SIZE, 0, // wMaxPacketSize
|
||||||
10, // bInterval
|
10, // bInterval
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef USB_NKRO_ENABLE
|
#ifdef USB_NKRO_ENABLE
|
||||||
// interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12
|
// 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
|
// HID/REPORT descriptors
|
||||||
{0x2100, KBD_INTERFACE, config1_descriptor+KBD_HID_DESC_OFFSET, 9},
|
{0x2100, KBD_INTERFACE, config1_descriptor+KBD_HID_DESC_OFFSET, 9},
|
||||||
{0x2200, KBD_INTERFACE, keyboard_hid_report_desc, sizeof(keyboard_hid_report_desc)},
|
{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},
|
{0x2100, MOUSE_INTERFACE, config1_descriptor+MOUSE_HID_DESC_OFFSET, 9},
|
||||||
{0x2200, MOUSE_INTERFACE, mouse_hid_report_desc, sizeof(mouse_hid_report_desc)},
|
{0x2200, MOUSE_INTERFACE, mouse_hid_report_desc, sizeof(mouse_hid_report_desc)},
|
||||||
|
#endif
|
||||||
{0x2100, DEBUG_INTERFACE, config1_descriptor+DEBUG_HID_DESC_OFFSET, 9},
|
{0x2100, DEBUG_INTERFACE, config1_descriptor+DEBUG_HID_DESC_OFFSET, 9},
|
||||||
{0x2200, DEBUG_INTERFACE, debug_hid_report_desc, sizeof(debug_hid_report_desc)},
|
{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},
|
{0x2100, EXTRA_INTERFACE, config1_descriptor+EXTRA_HID_DESC_OFFSET, 9},
|
||||||
{0x2200, EXTRA_INTERFACE, extra_hid_report_desc, sizeof(extra_hid_report_desc)},
|
{0x2200, EXTRA_INTERFACE, extra_hid_report_desc, sizeof(extra_hid_report_desc)},
|
||||||
|
#endif
|
||||||
#ifdef USB_NKRO_ENABLE
|
#ifdef USB_NKRO_ENABLE
|
||||||
{0x2100, KBD2_INTERFACE, config1_descriptor+KBD2_HID_DESC_OFFSET, 9},
|
{0x2100, KBD2_INTERFACE, config1_descriptor+KBD2_HID_DESC_OFFSET, 9},
|
||||||
{0x2200, KBD2_INTERFACE, keyboard2_hid_report_desc, sizeof(keyboard2_hid_report_desc)},
|
{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 (wIndex == MOUSE_INTERFACE) {
|
||||||
if (bmRequestType == 0xA1) {
|
if (bmRequestType == 0xA1) {
|
||||||
if (bRequest == HID_GET_REPORT) {
|
if (bRequest == HID_GET_REPORT) {
|
||||||
|
@ -913,6 +952,7 @@ ISR(USB_COM_vect)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
if (wIndex == DEBUG_INTERFACE) {
|
if (wIndex == DEBUG_INTERFACE) {
|
||||||
if (bRequest == HID_GET_REPORT && bmRequestType == 0xA1) {
|
if (bRequest == HID_GET_REPORT && bmRequestType == 0xA1) {
|
||||||
len = wLength;
|
len = wLength;
|
||||||
|
|
10
usb_extra.h
10
usb_extra.h
|
@ -1,5 +1,11 @@
|
||||||
#ifndef USB_EXTRA_H
|
#ifndef USB_EXTRA_H
|
||||||
#define USB_EXTRA_H 1
|
#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 <stdint.h>
|
||||||
#include "usb.h"
|
#include "usb.h"
|
||||||
|
@ -10,11 +16,13 @@
|
||||||
#define EXTRA_SIZE 2
|
#define EXTRA_SIZE 2
|
||||||
#define EXTRA_BUFFER EP_DOUBLE_BUFFER
|
#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_UP (1<<0)
|
||||||
#define AUDIO_VOL_DOWN (1<<1)
|
#define AUDIO_VOL_DOWN (1<<1)
|
||||||
#define AUDIO_MUTE (1<<2)
|
#define AUDIO_MUTE (1<<2)
|
||||||
|
|
||||||
|
// Generic Desktop Page(0x01) System Control(0x80)
|
||||||
#define SYSTEM_POWER_DOWN (1<<0)
|
#define SYSTEM_POWER_DOWN (1<<0)
|
||||||
#define SYSTEM_SLEEP (1<<1)
|
#define SYSTEM_SLEEP (1<<1)
|
||||||
#define SYSTEM_WAKE_UP (1<<2)
|
#define SYSTEM_WAKE_UP (1<<2)
|
||||||
|
|
Loading…
Reference in a new issue