* [hhkb](keyboard/hhkb/) - [Happy Hacking Keyboard professional][GH_hhkb] | * [hhkb](keyboard/hhkb/) - [Happy Hacking Keyboard professional][GH_hhkb] | ||||
* [macway](keyboard/macway/) - [Compact keyboard mod][GH_macway] | * [macway](keyboard/macway/) - [Compact keyboard mod][GH_macway] | ||||
* [hbkb](keyboard/hbkb/) - [Happy Buckling sprint keyboard(IBM Model M mod)][GH_hbkb] | * [hbkb](keyboard/hbkb/) - [Happy Buckling sprint keyboard(IBM Model M mod)][GH_hbkb] | ||||
* [IIgs_Standard](keyboard/IIgs_Standard/) - Apple [IIGS] keyboard mod(by JeffreySung) | |||||
* [IIgs_Standard](keyboard/IIgs/) - Apple [IIGS] keyboard mod(by JeffreySung) | |||||
* [hid_liber](keyboard/hid_liber/) - [HID liberation controller][HID_liber](by alaricljs) | * [hid_liber](keyboard/hid_liber/) - [HID liberation controller][HID_liber](by alaricljs) | ||||
* [phantom](keyboard/phantom/) - [Phantom keyboard][PHANTOM] (by Tranquilite) | * [phantom](keyboard/phantom/) - [Phantom keyboard][PHANTOM] (by Tranquilite) | ||||
* [gh60](keyboard/gh60/) - [GH60 keyboard][GH60] | * [gh60](keyboard/gh60/) - [GH60 keyboard][GH60] |
return keycode_to_action(keycode); | return keycode_to_action(keycode); | ||||
} | } | ||||
} | } | ||||
__attribute__ ((weak)) | |||||
const prog_macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { return MACRO_NONE; } | |||||
__attribute__ ((weak)) | |||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {} | |||||
#else | #else | ||||
/* | /* | ||||
* legacy keymap support | * legacy keymap support | ||||
return keycode_to_action(keycode); | return keycode_to_action(keycode); | ||||
} | } | ||||
} | } | ||||
/* not used for legacy keymap */ | |||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) | |||||
{ | |||||
} | |||||
#endif | #endif | ||||
__attribute__ ((weak)) | |||||
const prog_macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { return MACRO_NONE; } | |||||
__attribute__ ((weak)) | |||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {} | |||||
/* translates keycode to action */ | /* translates keycode to action */ | ||||
static action_t keycode_to_action(uint8_t keycode) | static action_t keycode_to_action(uint8_t keycode) |
# Target file name (without extension). | |||||
TARGET = m0110_lufa | |||||
# Directory common source filess exist | |||||
TOP_DIR = ../.. | |||||
# Directory keyboard dependent files exist | |||||
TARGET_DIR = . | |||||
# keyboard dependent files | |||||
SRC = keymap.c \ | |||||
matrix.c \ | |||||
led.c \ | |||||
m0110.c | |||||
CONFIG_H = config.h | |||||
# MCU name, you MUST set this to match the board you are using | |||||
# type "make clean" after changing this, so all files will be rebuilt | |||||
#MCU = at90usb162 # Teensy 1.0 | |||||
MCU = atmega32u4 # Teensy 2.0 | |||||
#MCU = at90usb646 # Teensy++ 1.0 | |||||
#MCU = at90usb1286 # Teensy++ 2.0 | |||||
# Processor frequency. | |||||
# Normally the first thing your program should do is set the clock prescaler, | |||||
# so your program will run at the correct speed. You should also set this | |||||
# variable to same clock speed. The _delay_ms() macro uses this, and many | |||||
# examples use this variable to calculate timings. Do not add a "UL" here. | |||||
F_CPU = 16000000 | |||||
# | |||||
# LUFA specific | |||||
# | |||||
# Target architecture (see library "Board Types" documentation). | |||||
ARCH = AVR8 | |||||
# Input clock frequency. | |||||
# This will define a symbol, F_USB, in all source code files equal to the | |||||
# input clock frequency (before any prescaling is performed) in Hz. This value may | |||||
# differ from F_CPU if prescaling is used on the latter, and is required as the | |||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed | |||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' | |||||
# at the end, this will be done automatically to create a 32-bit value in your | |||||
# source code. | |||||
# | |||||
# If no clock division is performed on the input clock inside the AVR (via the | |||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. | |||||
F_USB = $(F_CPU) | |||||
# Interrupt driven control endpoint task | |||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT | |||||
# Build Options | |||||
# *Comment out* to disable the options. | |||||
# | |||||
MOUSEKEY_ENABLE = yes # Mouse keys | |||||
#PS2_MOUSE_ENABLE = yes # PS/2 mouse(TrackPoint) support | |||||
EXTRAKEY_ENABLE = yes # Audio control and System control | |||||
CONSOLE_ENABLE = yes # Console for debug | |||||
#NKRO_ENABLE = yes # USB Nkey Rollover | |||||
# Boot Section Size in bytes | |||||
# Teensy halfKay 512 | |||||
# Atmel DFU loader 4096 | |||||
# LUFA bootloader 4096 | |||||
OPT_DEFS += -DBOOT_SIZE=4096 | |||||
#---------------- Programming Options -------------------------- | |||||
PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex | |||||
# Search Path | |||||
VPATH += $(TARGET_DIR) | |||||
VPATH += $(TOP_DIR) | |||||
include $(TOP_DIR)/protocol/lufa.mk | |||||
include $(TOP_DIR)/protocol.mk | |||||
include $(TOP_DIR)/common.mk | |||||
include $(TOP_DIR)/rules.mk | |||||
hasu: EXTRAFLAGS += -DHASU | |||||
hasu: all |
$ git clone git://github.com/tmk/tmk_keyboard.git (or download source) | $ git clone git://github.com/tmk/tmk_keyboard.git (or download source) | ||||
$ cd m0110_usb | $ cd m0110_usb | ||||
$ make | |||||
$ make -f Makefile.lufa clean | |||||
$ make -f Makefile.lufa | |||||
and program your Teensy with [PJRC Teensy loader](http://www.pjrc.com/teensy/loader.html). | and program your Teensy with [PJRC Teensy loader](http://www.pjrc.com/teensy/loader.html). | ||||
|---------------------------------------------------------| |---------------| | |---------------------------------------------------------| |---------------| | ||||
|Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | | 1| 2| 3| | | |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | | 1| 2| 3| | | ||||
`---------------------------------------------------------' |-----------|Ent| | `---------------------------------------------------------' |-----------|Ent| | ||||
|Alt|Gui | Space |Ctl |Alt| | 0| .| | | |||||
|Ctl|Alt | Space |Gui |Ctl| | 0| .| | | |||||
`-----------------------------------------------' `---------------' | `-----------------------------------------------' `---------------' | ||||
#### *HHKB/WASD Layer(WASD/IJKL)* | #### *HHKB/WASD Layer(WASD/IJKL)* | ||||
,---------------------------------------------------------. ,---------------. | ,---------------------------------------------------------. ,---------------. | ||||
|---------------------------------------------------------| |---------------| | |---------------------------------------------------------| |---------------| | ||||
|Shift |End| |PgD| | | |PgD| |End| |Shift | | 1| 2| 3| | | |Shift |End| |PgD| | | |PgD| |End| |Shift | | 1| 2| 3| | | ||||
`---------------------------------------------------------' |-----------|Ent| | `---------------------------------------------------------' |-----------|Ent| | ||||
|Alt|Gui | Space |Ctl |Alt| | 0| .| | | |||||
|Ctl|Alt | Space |Gui |Ctl| | 0| .| | | |||||
`-----------------------------------------------' `---------------' | `-----------------------------------------------' `---------------' | ||||
### M0110A | ### M0110A |
#define VENDOR_ID 0xFEED | #define VENDOR_ID 0xFEED | ||||
#define PRODUCT_ID 0x0110 | #define PRODUCT_ID 0x0110 | ||||
#define DEVICE_VER 0x0100 | |||||
#define MANUFACTURER t.m.k. | #define MANUFACTURER t.m.k. | ||||
#define PRODUCT M0110 keyboard converter | #define PRODUCT M0110 keyboard converter | ||||
#define DESCRIPTION convert M0110 keyboard to USB | #define DESCRIPTION convert M0110 keyboard to USB |
#include <stdint.h> | #include <stdint.h> | ||||
#include <stdbool.h> | #include <stdbool.h> | ||||
#include <avr/pgmspace.h> | #include <avr/pgmspace.h> | ||||
#include "usb_keyboard.h" | |||||
#include "keycode.h" | #include "keycode.h" | ||||
#include "print.h" | #include "print.h" | ||||
#include "debug.h" | #include "debug.h" | ||||
* |---------------------------------------------------------| |---------------| | * |---------------------------------------------------------| |---------------| | ||||
* |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shft|Up | | 1| 2| 3| | | * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shft|Up | | 1| 2| 3| | | ||||
* |---------------------------------------------------------| |-----------|Ent| | * |---------------------------------------------------------| |-----------|Ent| | ||||
* |Alt |Gui | Space |Ctl| \|Lft|Rgt|Dn | | 0| .| | | |||||
* |Ctl |Alt | Space |Gui| \|Lft|Rgt|Dn | | 0| .| | | |||||
* `---------------------------------------------------------' `---------------' | * `---------------------------------------------------------' `---------------' | ||||
*/ | */ | ||||
KEYMAP( | KEYMAP( | ||||
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, P7, P8, P9, PMNS, | TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, P7, P8, P9, PMNS, | ||||
FN0, A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS, | FN0, A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS, | ||||
LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, UP, P1, P2, P3, PENT, | LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, UP, P1, P2, P3, PENT, | ||||
LALT,LGUI, SPC, LCTL,BSLS,LEFT,RGHT,DOWN, P0, PDOT | |||||
LCTL,LALT, SPC, LGUI,BSLS,LEFT,RGHT,DOWN, P0, PDOT | |||||
), | ), | ||||
/* Cursor Layer(WASD, IJKL) | /* Cursor Layer(WASD, IJKL) | ||||
* ,---------------------------------------------------------. ,---------------. | * ,---------------------------------------------------------. ,---------------. | ||||
* |---------------------------------------------------------| |---------------| | * |---------------------------------------------------------| |---------------| | ||||
* |Shift |End| |PgD| | | |PgD| |End| |Shif|PgU| | 1| 2| 3| | | * |Shift |End| |PgD| | | |PgD| |End| |Shif|PgU| | 1| 2| 3| | | ||||
* |---------------------------------------------------------| |-----------|Ent| | * |---------------------------------------------------------| |-----------|Ent| | ||||
* |Alt |Gui | Space |Gui |Ins|Hom|End|PgD| | 0| .| | | |||||
* |Ctl |Alt | Space |Gui |Ins|Hom|End|PgD| | 0| .| | | |||||
* `---------------------------------------------------------' `---------------' | * `---------------------------------------------------------' `---------------' | ||||
*/ | */ | ||||
KEYMAP( | KEYMAP( | ||||
CAPS,HOME,UP, PGUP,NO, NO, NO, PGUP,UP, HOME,PSCR,SLCK,PAUS, P7, P8, P9, PMNS, | CAPS,HOME,UP, PGUP,NO, NO, NO, PGUP,UP, HOME,PSCR,SLCK,PAUS, P7, P8, P9, PMNS, | ||||
FN0, LEFT,DOWN,RGHT,NO, NO, NO, LEFT,DOWN,RGHT,NO, NO, ENT, P4, P5, P6, PPLS, | FN0, LEFT,DOWN,RGHT,NO, NO, NO, LEFT,DOWN,RGHT,NO, NO, ENT, P4, P5, P6, PPLS, | ||||
LSFT,END, NO, PGDN,NO, NO, NO, PGDN,NO, END, NO, PGUP, P1, P2, P3, PENT, | LSFT,END, NO, PGDN,NO, NO, NO, PGDN,NO, END, NO, PGUP, P1, P2, P3, PENT, | ||||
LALT,LGUI, SPC, LCTL,INS, HOME,END, PGDN, P0, PDOT | |||||
LCTL,LALT, SPC, LGUI,INS, HOME,END, PGDN, P0, PDOT | |||||
), | ), | ||||
}; | }; | ||||
ACTION_KEYMAP_TAP_TOGGLE(0), // FN0 | ACTION_KEYMAP_TAP_TOGGLE(0), // FN0 | ||||
ACTION_KEYMAP_TAP_KEY(1, KC_SLASH), // FN1 | ACTION_KEYMAP_TAP_KEY(1, KC_SLASH), // FN1 | ||||
ACTION_KEYMAP_TAP_KEY(2, KC_SCLN), // FN2 | ACTION_KEYMAP_TAP_KEY(2, KC_SCLN), // FN2 | ||||
ACTION_KEYMAP(2), // FN3 | |||||
ACTION_KEYMAP_MOMENTARY(2), // FN3 | |||||
ACTION_MACRO(LBRACKET), // FN4 | ACTION_MACRO(LBRACKET), // FN4 | ||||
ACTION_MACRO(RBRACKET), // FN5 | ACTION_MACRO(RBRACKET), // FN5 | ||||
ACTION_MACRO(DUMMY), // FN6 | ACTION_MACRO(DUMMY), // FN6 |
* |Gui|Alt | Space |Alt |Gui| | * |Gui|Alt | Space |Alt |Gui| | ||||
* `-------------------------------------------' | * `-------------------------------------------' | ||||
*/ | */ | ||||
KEYMAP(PWR, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ | |||||
KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ | |||||
CAPS,NO, NO, NO, NO, NO, NO, NO, PSCR,SLCK,PAUS, UP, NO, BSPC, \ | CAPS,NO, NO, NO, NO, NO, NO, NO, PSCR,SLCK,PAUS, UP, NO, BSPC, \ | ||||
LCTL,VOLD,VOLU,MUTE,NO, NO, PAST,PSLS,HOME,PGUP,LEFT,RGHT,ENT, \ | LCTL,VOLD,VOLU,MUTE,NO, NO, PAST,PSLS,HOME,PGUP,LEFT,RGHT,ENT, \ | ||||
LSFT,NO, NO, NO, NO, NO, PPLS,PMNS,END, PGDN,DOWN,RSFT,TRNS, \ | LSFT,NO, NO, NO, NO, NO, PPLS,PMNS,END, PGDN,DOWN,RSFT,TRNS, \ | ||||
* |Gui|Alt | Space |Alt |Gui| | * |Gui|Alt | Space |Alt |Gui| | ||||
* `-------------------------------------------' | * `-------------------------------------------' | ||||
*/ | */ | ||||
KEYMAP(ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ | |||||
KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ | |||||
TAB, HOME,PGDN,UP, PGUP,END, HOME,PGDN,PGUP,END, NO, NO, NO, BSPC, \ | TAB, HOME,PGDN,UP, PGUP,END, HOME,PGDN,PGUP,END, NO, NO, NO, BSPC, \ | ||||
LCTL,NO, LEFT,DOWN,RGHT,NO, LEFT,DOWN,UP, RGHT,NO, NO, ENT, \ | LCTL,NO, LEFT,DOWN,RGHT,NO, LEFT,DOWN,UP, RGHT,NO, NO, ENT, \ | ||||
LSFT,NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, TRNS,RSFT,NO, \ | LSFT,NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, TRNS,RSFT,NO, \ | ||||
* `--------------------------------------------' | * `--------------------------------------------' | ||||
* Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel | * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel | ||||
*/ | */ | ||||
KEYMAP(ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ | |||||
KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \ | |||||
TAB, NO, NO, NO, NO, NO, WH_L,WH_D,WH_U,WH_R,NO, NO, NO, BSPC, \ | TAB, NO, NO, NO, NO, NO, WH_L,WH_D,WH_U,WH_R,NO, NO, NO, BSPC, \ | ||||
LCTL,NO, ACL0,ACL1,ACL2,NO, MS_L,MS_D,MS_U,MS_R,TRNS,QUOT,ENT, \ | LCTL,NO, ACL0,ACL1,ACL2,NO, MS_L,MS_D,MS_U,MS_R,TRNS,QUOT,ENT, \ | ||||
LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,BTN4,BTN5,SLSH,RSFT,NO, \ | LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,BTN4,BTN5,SLSH,RSFT,NO, \ |
} else { | } else { | ||||
debug("kbuf: full\n"); | debug("kbuf: full\n"); | ||||
} | } | ||||
// NOTE: send key strokes of Macro | |||||
usbPoll(); | |||||
vusb_transfer_keyboard(); | |||||
} | } | ||||