Browse Source

add a build option: USB_EXTRA_ENABLE

tags/v1.9
tmk 13 years ago
parent
commit
6b0c939d72
7 changed files with 121 additions and 35 deletions
  1. 30
    10
      Makefile.common
  2. 7
    5
      hhkb/Makefile
  3. 16
    3
      key_process.c
  4. 8
    5
      macway/Makefile
  5. 1
    1
      macway/config.h
  6. 50
    10
      usb.c
  7. 9
    1
      usb_extra.h

+ 30
- 10
Makefile.common View File

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
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)




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
$(REMOVE) $(TARGET).map $(REMOVE) $(TARGET).map
$(REMOVE) $(TARGET).sym $(REMOVE) $(TARGET).sym
$(REMOVE) $(TARGET).lss $(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 $(REMOVEDIR) .dep





+ 7
- 5
hhkb/Makefile View File

F_CPU = 16000000 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 include $(COMMON_DIR)/Makefile.common

+ 16
- 3
key_process.c View File

#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"
#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
#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);
} }
_delay_ms(1000); _delay_ms(1000);
} }
#endif


// normal keys // normal keys
else { else {
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;
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
_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();
} }
_delay_ms(1000); _delay_ms(1000);
break; break;
#endif
} }
} }



+ 8
- 5
macway/Makefile View File

F_CPU = 16000000 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 include $(COMMON_DIR)/Makefile.common

+ 1
- 1
macway/config.h View File

#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

+ 50
- 10
usb.c View File

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
}; };




}; };
#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/
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)
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[] = {
0x81, 0x07, // INPUT (Cnst,Var,Rel) 0x81, 0x07, // INPUT (Cnst,Var,Rel)
0xc0 // END_COLLECTION 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 #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 #else
# define NUM_INTERFACES 4
# define KBD2_HID_DESC_NUM (EXTRA_HID_DESC_NUM + 0)
#endif #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] = { 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;
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
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
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
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
// 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)},
} }
} }
} }
#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) {
} }
} }
} }
#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;

+ 9
- 1
usb_extra.h View File

#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"
#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…
Cancel
Save