Merge remote-tracking branch 'tmk/master' into cub_layout
This commit is contained in:
commit
0a4cc0db31
45 changed files with 1509 additions and 663 deletions
3
.gitmodules
vendored
3
.gitmodules
vendored
|
|
@ -1,3 +1,6 @@
|
||||||
[submodule "protocol/usb_hid/USB_Host_Shield_2.0"]
|
[submodule "protocol/usb_hid/USB_Host_Shield_2.0"]
|
||||||
path = protocol/usb_hid/USB_Host_Shield_2.0
|
path = protocol/usb_hid/USB_Host_Shield_2.0
|
||||||
url = git@github.com:tmk/USB_Host_Shield_2.0.git
|
url = git@github.com:tmk/USB_Host_Shield_2.0.git
|
||||||
|
[submodule "protocol/lufa/LUFA-git"]
|
||||||
|
path = protocol/lufa/LUFA-git
|
||||||
|
url = https://github.com/abcminiuser/lufa.git
|
||||||
|
|
|
||||||
|
|
@ -301,13 +301,13 @@ static bool command_common(uint8_t code)
|
||||||
case KC_S:
|
case KC_S:
|
||||||
print("\n\n----- Status -----\n");
|
print("\n\n----- Status -----\n");
|
||||||
print_val_hex8(host_keyboard_leds());
|
print_val_hex8(host_keyboard_leds());
|
||||||
|
print_val_hex8(keyboard_protocol);
|
||||||
|
print_val_hex8(keyboard_idle);
|
||||||
#ifdef PROTOCOL_PJRC
|
#ifdef PROTOCOL_PJRC
|
||||||
print_val_hex8(UDCON);
|
print_val_hex8(UDCON);
|
||||||
print_val_hex8(UDIEN);
|
print_val_hex8(UDIEN);
|
||||||
print_val_hex8(UDINT);
|
print_val_hex8(UDINT);
|
||||||
print_val_hex8(usb_keyboard_leds);
|
print_val_hex8(usb_keyboard_leds);
|
||||||
print_val_hex8(usb_keyboard_protocol);
|
|
||||||
print_val_hex8(usb_keyboard_idle_config);
|
|
||||||
print_val_hex8(usb_keyboard_idle_count);
|
print_val_hex8(usb_keyboard_idle_count);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
#ifdef NKRO_ENABLE
|
#ifdef NKRO_ENABLE
|
||||||
bool keyboard_nkro = false;
|
bool keyboard_nkro = true;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static host_driver_t *driver;
|
static host_driver_t *driver;
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,9 @@ extern "C" {
|
||||||
extern bool keyboard_nkro;
|
extern bool keyboard_nkro;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
uint8_t keyboard_idle;
|
||||||
|
uint8_t keyboard_protocol;
|
||||||
|
|
||||||
|
|
||||||
/* host driver */
|
/* host driver */
|
||||||
void host_set_driver(host_driver_t *driver);
|
void host_set_driver(host_driver_t *driver);
|
||||||
|
|
|
||||||
|
|
@ -48,11 +48,17 @@ TOP_DIR = ../..
|
||||||
TARGET_DIR = .
|
TARGET_DIR = .
|
||||||
|
|
||||||
# project specific files
|
# project specific files
|
||||||
SRC = keymap.c \
|
SRC = keymap_common.c \
|
||||||
matrix.c \
|
matrix.c \
|
||||||
led.c \
|
led.c \
|
||||||
adb.c
|
adb.c
|
||||||
|
|
||||||
|
ifdef KEYMAP
|
||||||
|
SRC := keymap_$(KEYMAP).c $(SRC)
|
||||||
|
else
|
||||||
|
SRC := keymap_ansi.c $(SRC)
|
||||||
|
endif
|
||||||
|
|
||||||
CONFIG_H = config.h
|
CONFIG_H = config.h
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,11 +8,17 @@ TOP_DIR = ../..
|
||||||
TARGET_DIR = .
|
TARGET_DIR = .
|
||||||
|
|
||||||
# keyboard dependent files
|
# keyboard dependent files
|
||||||
SRC = keymap.c \
|
SRC = keymap_common.c \
|
||||||
matrix.c \
|
matrix.c \
|
||||||
led.c \
|
led.c \
|
||||||
adb.c
|
adb.c
|
||||||
|
|
||||||
|
ifdef KEYMAP
|
||||||
|
SRC := keymap_$(KEYMAP).c $(SRC)
|
||||||
|
else
|
||||||
|
SRC := keymap_ansi.c $(SRC)
|
||||||
|
endif
|
||||||
|
|
||||||
CONFIG_H = config.h
|
CONFIG_H = config.h
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,17 +7,29 @@ But binary size is about 10KB or more it doesn't fit into 8K flash like ATMega8U
|
||||||
Discuss: http://geekhack.org/showwiki.php?title=Island:14290
|
Discuss: http://geekhack.org/showwiki.php?title=Island:14290
|
||||||
|
|
||||||
|
|
||||||
Build
|
Wiring
|
||||||
-----
|
------
|
||||||
0. Connect ADB keyboard to Teensy by 3 lines(Vcc, GND, Data). By default Data line uses port D0.
|
0. Connect ADB keyboard to Teensy by 3 lines(Vcc, GND, Data). By default Data line uses port PD0.
|
||||||
This converter uses AVR's internal pull-up, but it seems to be too weak, in particular when you want to use a long or coiled cable.
|
This converter uses AVR's internal pull-up, but it seems to be too weak, in particular when you want to use a long or coiled cable.
|
||||||
The external pull-up resistor(1K-10K Ohm) on Data is strongly recommended.
|
The external pull-up resistor(1K-10K Ohm) on Data is strongly recommended.
|
||||||
1. Define following macros for ADB connection in config.h if you use other than port D0.
|
1. Define following macros for ADB connection in config.h if you use other than port PD0.
|
||||||
ADB_PORT, ADB_PIN, ADB_DDR, ADB_DATA_BIT
|
ADB_PORT, ADB_PIN, ADB_DDR, ADB_DATA_BIT
|
||||||
2. make
|
2. make
|
||||||
3. program Teensy
|
3. program Teensy
|
||||||
|
|
||||||
|
|
||||||
|
Build
|
||||||
|
-----
|
||||||
|
Just make
|
||||||
|
|
||||||
|
$ make clean
|
||||||
|
$ make
|
||||||
|
|
||||||
|
If your keyboard is ISO layout
|
||||||
|
|
||||||
|
$ make KEYMAP=iso
|
||||||
|
|
||||||
|
|
||||||
LOCKING CAPSLOCK
|
LOCKING CAPSLOCK
|
||||||
----------------
|
----------------
|
||||||
Many of old ADB keyboards have mechanical push-lock switch for Capslock key and this converter supports the locking Capslock key by default. See README in top directory for more detail about this feature.
|
Many of old ADB keyboards have mechanical push-lock switch for Capslock key and this converter supports the locking Capslock key by default. See README in top directory for more detail about this feature.
|
||||||
|
|
@ -48,7 +60,7 @@ effort at this time.
|
||||||
* |-----------------------------------------------------------| ,---. |---------------|
|
* |-----------------------------------------------------------| ,---. |---------------|
|
||||||
* |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| |
|
* |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| |
|
||||||
* |-----------------------------------------------------------| ,-----------. |-----------|Ent|
|
* |-----------------------------------------------------------| ,-----------. |-----------|Ent|
|
||||||
* |Ctrl |Gui |Alt | Space | | | | |Lef|Dow|Rig| | 0| .| |
|
* |Ctrl |Alt |Gui | Space |Gui |Alt |Ctrl | |Lef|Dow|Rig| | 0| .| |
|
||||||
* `-----------------------------------------------------------' `-----------' `---------------'
|
* `-----------------------------------------------------------' `-----------' `---------------'
|
||||||
*/
|
*/
|
||||||
KEYMAP(
|
KEYMAP(
|
||||||
|
|
@ -68,11 +80,17 @@ To get help press `h` holding Magic key. Magic key is `Power key`.
|
||||||
|
|
||||||
Notes
|
Notes
|
||||||
-----
|
-----
|
||||||
Many ADB keyboards has no discrimination between right modifier and left one,
|
Not-extended ADB keyboards have no discrimination between right modifier and left one,
|
||||||
you will always see left control even if you press right control key.
|
you will always see left control even if you press right control key.
|
||||||
Apple Extended Keyboard and Apple Extended Keyboard II are the examples.
|
Apple Extended Keyboard and Apple Extended Keyboard II can discriminate both side
|
||||||
Though ADB protocol itself has the ability of distinction between right and left.
|
modifiers except for GUI key(Windows/Command).
|
||||||
And most ADB keyboard has no NKRO functionality, though ADB protocol itself has that.
|
|
||||||
See protocol/adb.c for more info.
|
And most ADB keyboard has no diodes in its matrix so they are not NKRO,
|
||||||
|
though ADB protocol itself supports it. See protocol/adb.c for more info.
|
||||||
|
|
||||||
|
If keyobard has ISO layout you need to use ISO keymap with `make KEYMAP=iso`. With ANSI
|
||||||
|
keymap you will suffer from swapped keys problem.
|
||||||
|
|
||||||
|
https://github.com/tmk/tmk_keyboard/issues/35
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|
|
||||||
16
converter/adb_usb/keymap_ansi.c
Normal file
16
converter/adb_usb/keymap_ansi.c
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
#include "keymap_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
KEYMAP_EXT_ANSI(
|
||||||
|
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, PWR,
|
||||||
|
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PEQL,PSLS,PAST,
|
||||||
|
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9, PMNS,
|
||||||
|
LCAP,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, RSFT, UP, P1, P2, P3,
|
||||||
|
LCTL,LALT,LGUI, SPC, RALT,RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
};
|
||||||
30
converter/adb_usb/keymap_common.c
Normal file
30
converter/adb_usb/keymap_common.c
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
/*
|
||||||
|
Copyright 2011,2012,2013 Jun Wako <wakojun@gmail.com>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include "keymap_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
/* translates key to keycode */
|
||||||
|
uint8_t keymap_key_to_keycode(uint8_t layer, key_t key)
|
||||||
|
{
|
||||||
|
return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* translates Fn keycode to action */
|
||||||
|
action_t keymap_fn_to_action(uint8_t keycode)
|
||||||
|
{
|
||||||
|
return (action_t){ .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) };
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright 2011 Jun Wako <wakojun@gmail.com>
|
Copyright 2011,2012,2013 Jun Wako <wakojun@gmail.com>
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -14,64 +14,26 @@ GNU General Public License for more details.
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
#ifndef KEYMAP_COMMON_H
|
||||||
|
#define KEYMAP_COMMON_H
|
||||||
|
|
||||||
/*
|
|
||||||
* Keymap for ADB keyboard
|
|
||||||
*/
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <avr/pgmspace.h>
|
#include <avr/pgmspace.h>
|
||||||
#include "keycode.h"
|
#include "keycode.h"
|
||||||
|
#include "action.h"
|
||||||
|
#include "action_macro.h"
|
||||||
|
#include "report.h"
|
||||||
#include "print.h"
|
#include "print.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "util.h"
|
|
||||||
#include "keymap.h"
|
#include "keymap.h"
|
||||||
|
|
||||||
|
|
||||||
#define KEYCODE(layer, row, col) (pgm_read_byte(&keymaps[(layer)][(row)][(col)]))
|
extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
|
||||||
|
extern const uint16_t fn_actions[];
|
||||||
|
|
||||||
#define KEYMAP_ALL( \
|
|
||||||
K35, K7A,K78,K63,K76, K60,K61,K62,K64, K65,K6D,K67,K6F, K69,K6B,K71, K7F, \
|
|
||||||
K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K72,K73,K74, K47,K51,K4B,K43, \
|
|
||||||
K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E,K2A, K75,K77,K79, K59,K5B,K5C,K4E, \
|
|
||||||
K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27, K24, K56,K57,K58,K45, \
|
|
||||||
K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C, K7B, K3E, K53,K54,K55, \
|
|
||||||
K36,K3A,K37, K31, K7C,K7D, K3B,K3D,K3C, K52, K41,K4C, \
|
|
||||||
/* for ISO/JIS keyboard */ \
|
|
||||||
K0A, /* NON-US \ and | 0x64 */ \
|
|
||||||
K34, /* Keypad ENTER 0x58 */ \
|
|
||||||
K40, /* F17 0x6C */ \
|
|
||||||
K44, /* F18? 0x6d */ \
|
|
||||||
K4F, /* F18 0x6d */ \
|
|
||||||
K50, /* F19 0x6e */ \
|
|
||||||
K5A, /* F20 0x6f */ \
|
|
||||||
K5D, /* INTL3(Yen) 0x89 */ \
|
|
||||||
K5E, /* INTL1(Ro) 0x87 */ \
|
|
||||||
K5F, /* Keypad Comma 0x85 */ \
|
|
||||||
K66, /* LANG2(Eisu) 0x91 */ \
|
|
||||||
K68, /* LANG1(Kana) 0x90 */ \
|
|
||||||
K6A, /* F16 0x6B */ \
|
|
||||||
K6E /* Application 0x65 */ \
|
|
||||||
) { \
|
|
||||||
{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
|
|
||||||
{ KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
|
|
||||||
{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
|
|
||||||
{ KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
|
|
||||||
{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
|
|
||||||
{ KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
|
|
||||||
{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
|
|
||||||
{ KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_NO }, \
|
|
||||||
{ KC_##K40, KC_##K41, KC_NO, KC_##K43, KC_##K44, KC_##K45, KC_NO, KC_##K47 }, \
|
|
||||||
{ KC_NO, KC_NO, KC_NO, KC_##K4B, KC_##K4C, KC_NO, KC_##K4E, KC_##K4F }, \
|
|
||||||
{ KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
|
|
||||||
{ KC_##K58, KC_##K59, KC_##K5A, KC_##K5B, KC_##K5C, KC_##K5D, KC_##K5E, KC_##K5F }, \
|
|
||||||
{ KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
|
|
||||||
{ KC_##K68, KC_##K69, KC_##K6A, KC_##K6B, KC_NO, KC_##K6D, KC_##K6E, KC_##K6F }, \
|
|
||||||
{ KC_NO, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
|
|
||||||
{ KC_##K78, KC_##K79, KC_##K7A, KC_##K7B, KC_##K7C, KC_##K7D, KC_NO, KC_##K7F } \
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Apple Extended Keyboard US
|
/* M0115 Apple Extended Keyboard ANSI
|
||||||
* ,---. ,---------------. ,---------------. ,---------------. ,-----------. ,---.
|
* ,---. ,---------------. ,---------------. ,---------------. ,-----------. ,---.
|
||||||
* |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| |Pwr|
|
* |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| |Pwr|
|
||||||
* `---' `---------------' `---------------' `---------------' `-----------' `---'
|
* `---' `---------------' `---------------' `---------------' `-----------' `---'
|
||||||
|
|
@ -87,38 +49,78 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* |Ctrl |Opt |Cmd | Space | |Opt |Ctrl | |Lef|Dow|Rig| | 0| .| |
|
* |Ctrl |Opt |Cmd | Space | |Opt |Ctrl | |Lef|Dow|Rig| | 0| .| |
|
||||||
* `-----------------------------------------------------------' `-----------' `---------------'
|
* `-----------------------------------------------------------' `-----------' `---------------'
|
||||||
*/
|
*/
|
||||||
#define KEYMAP_EXTENDED_US( \
|
#define KEYMAP_EXT_ANSI( \
|
||||||
K35, K7A,K78,K63,K76, K60,K61,K62,K64, K65,K6D,K67,K6F, K69,K6B,K71, K7F, \
|
K35, K7A,K78,K63,K76, K60,K61,K62,K64, K65,K6D,K67,K6F, K69,K6B,K71, K7F, \
|
||||||
K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K72,K73,K74, K47,K51,K4B,K43, \
|
K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K72,K73,K74, K47,K51,K4B,K43, \
|
||||||
K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E,K2A, K75,K77,K79, K59,K5B,K5C,K4E, \
|
K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E,K2A, K75,K77,K79, K59,K5B,K5C,K4E, \
|
||||||
K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27, K24, K56,K57,K58,K45, \
|
K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27, K24, K56,K57,K58,K45, \
|
||||||
K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C, K7B, K3E, K53,K54,K55, \
|
K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C, K7B, K3E, K53,K54,K55, \
|
||||||
K36,K3A,K37, K31, K7C,K7D, K3B,K3D,K3C, K52, K41,K4C \
|
K36,K3A,K37, K31, K7C,K7D, K3B,K3D,K3C, K52, K41,K4C \
|
||||||
) KEYMAP_ALL( \
|
) { \
|
||||||
|
{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
|
||||||
|
{ KC_##K08, KC_##K09, KC_NUBS, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
|
||||||
|
{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
|
||||||
|
{ KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
|
||||||
|
{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
|
||||||
|
{ KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
|
||||||
|
{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_PENT, KC_##K35, KC_##K36, KC_##K37 }, \
|
||||||
|
{ KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_NO }, \
|
||||||
|
{ KC_F17, KC_##K41, KC_NO, KC_##K43, KC_F18, KC_##K45, KC_NO, KC_##K47 }, \
|
||||||
|
{ KC_NO, KC_NO, KC_NO, KC_##K4B, KC_##K4C, KC_NO, KC_##K4E, KC_F18 }, \
|
||||||
|
{ KC_F19, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
|
||||||
|
{ KC_##K58, KC_##K59, KC_F20, KC_##K5B, KC_##K5C, KC_INT3, KC_INT1, KC_PCMM }, \
|
||||||
|
{ KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_LANG2, KC_##K67 }, \
|
||||||
|
{ KC_LANG1, KC_##K69, KC_F16, KC_##K6B, KC_NO, KC_##K6D, KC_APP, KC_##K6F }, \
|
||||||
|
{ KC_NO, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
|
||||||
|
{ KC_##K78, KC_##K79, KC_##K7A, KC_##K7B, KC_##K7C, KC_##K7D, KC_NO, KC_##K7F } \
|
||||||
|
}
|
||||||
|
|
||||||
|
/* M0115 Apple Extended Keyboard ISO
|
||||||
|
* ,---. ,---------------. ,---------------. ,---------------. ,-----------. ,---.
|
||||||
|
* |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| |Pwr|
|
||||||
|
* `---' `---------------' `---------------' `---------------' `-----------' `---'
|
||||||
|
* ,-----------------------------------------------------------. ,-----------. ,---------------.
|
||||||
|
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa| |Ins|Hom|PgU| |NmL| =| /| *|
|
||||||
|
* |-----------------------------------------------------------| |-----------| |---------------|
|
||||||
|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Retur| |Del|End|PgD| | 7| 8| 9| -|
|
||||||
|
* |------------------------------------------------------` | `-----------' |---------------|
|
||||||
|
* |CapsLo| A| S| D| F| G| H| J| K| L| ;| '| #| | | 4| 5| 6| +|
|
||||||
|
* |-----------------------------------------------------------| ,---. |---------------|
|
||||||
|
* |Shif| \| Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| |
|
||||||
|
* |-----------------------------------------------------------| ,-----------. |-----------|Ent|
|
||||||
|
* |Ctrl |Opt |Cmd | Space | |Opt |Ctrl | |Lef|Dow|Rig| | 0| .| |
|
||||||
|
* `-----------------------------------------------------------' `-----------' `---------------'
|
||||||
|
*/
|
||||||
|
#define KEYMAP_EXT_ISO( \
|
||||||
K35, K7A,K78,K63,K76, K60,K61,K62,K64, K65,K6D,K67,K6F, K69,K6B,K71, K7F, \
|
K35, K7A,K78,K63,K76, K60,K61,K62,K64, K65,K6D,K67,K6F, K69,K6B,K71, K7F, \
|
||||||
K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K72,K73,K74, K47,K51,K4B,K43, \
|
K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K72,K73,K74, K47,K51,K4B,K43, \
|
||||||
K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E,K2A, K75,K77,K79, K59,K5B,K5C,K4E, \
|
K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E,K24, K75,K77,K79, K59,K5B,K5C,K4E, \
|
||||||
K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27, K24, K56,K57,K58,K45, \
|
K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27,K2A, K56,K57,K58,K45, \
|
||||||
K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C, K7B, K3E, K53,K54,K55, \
|
K38,K0A,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C, K7B, K3E, K53,K54,K55, \
|
||||||
K36,K3A,K37, K31, K7C,K7D, K3B,K3D,K3C, K52, K41,K4C, \
|
K36,K3A,K37, K31, K7C,K7D, K3B,K3D,K3C, K52, K41,K4C \
|
||||||
/* for ISO/JIS keyboard */ \
|
) { \
|
||||||
NONUS_BSLASH, /* NON-US \ and | 0x64 */ \
|
{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
|
||||||
KP_ENTER, /* Keypad ENTER 0x58 */ \
|
{ KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
|
||||||
F17, /* F17 0x6C */ \
|
{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
|
||||||
F18, /* F18? 0x6d */ \
|
{ KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
|
||||||
F18, /* F18 0x6d */ \
|
{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
|
||||||
F19, /* F19 0x6e */ \
|
{ KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
|
||||||
F20, /* F20 0x6f */ \
|
{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_PENT, KC_##K35, KC_##K36, KC_##K37 }, \
|
||||||
INT3, /* INTL3(Yen) 0x89 */ \
|
{ KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_NO }, \
|
||||||
INT1, /* INTL1(Ro) 0x87 */ \
|
{ KC_F17, KC_##K41, KC_NO, KC_##K43, KC_F18, KC_##K45, KC_NO, KC_##K47 }, \
|
||||||
KP_COMMA, /* Keypad Comma 0x85 */ \
|
{ KC_NO, KC_NO, KC_NO, KC_##K4B, KC_##K4C, KC_NO, KC_##K4E, KC_F18 }, \
|
||||||
LANG2, /* LANG2(Eisu) 0x91 */ \
|
{ KC_F19, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
|
||||||
LANG1, /* LANG1(Kana) 0x90 */ \
|
{ KC_##K58, KC_##K59, KC_F20, KC_##K5B, KC_##K5C, KC_INT3, KC_INT1, KC_PCMM }, \
|
||||||
F16, /* F16 0x6B */ \
|
{ KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_LANG2, KC_##K67 }, \
|
||||||
APPLICATION /* Application 0x65 */ \
|
{ KC_LANG1, KC_##K69, KC_F16, KC_##K6B, KC_NO, KC_##K6D, KC_APP, KC_##K6F }, \
|
||||||
)
|
{ KC_NO, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
|
||||||
|
{ KC_##K78, KC_##K79, KC_##K7A, KC_##K7B, KC_##K7C, KC_##K7D, KC_NO, KC_##K7F } \
|
||||||
|
}
|
||||||
|
|
||||||
/* M0116
|
|
||||||
|
|
||||||
|
|
||||||
|
/* M0116 Apple Standard Keyboard ANSI
|
||||||
* +-------+
|
* +-------+
|
||||||
* | power |
|
* | power |
|
||||||
* +-------+
|
* +-------+
|
||||||
|
|
@ -134,7 +136,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
* |cap|opt|comnd| ` | | \ |lef|rig|dwn|up | | 0 | . | |
|
* |cap|opt|comnd| ` | | \ |lef|rig|dwn|up | | 0 | . | |
|
||||||
* +---------------------------------------------------------+ +-------+---+---+
|
* +---------------------------------------------------------+ +-------+---+---+
|
||||||
*/
|
*/
|
||||||
#define KEYMAP_M0116( \
|
#define KEYMAP_M0116_ANSI( \
|
||||||
K7F, \
|
K7F, \
|
||||||
K35,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K47,K51,K4B,K43, \
|
K35,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K47,K51,K4B,K43, \
|
||||||
K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E, K59,K5B,K5C,K45, \
|
K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E, K59,K5B,K5C,K45, \
|
||||||
|
|
@ -160,55 +162,51 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
{ KC_NO , KC_NO, KC_NO , KC_##K7B, KC_NO, KC_NO, KC_NO, KC_##K7F } \
|
{ KC_NO , KC_NO, KC_NO , KC_##K7B, KC_NO, KC_NO, KC_NO, KC_##K7F } \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
// Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
|
|
||||||
static const uint8_t PROGMEM fn_layer[] = {
|
|
||||||
0, // Fn0
|
|
||||||
0, // Fn1
|
|
||||||
0, // Fn2
|
|
||||||
0, // Fn3
|
|
||||||
0, // Fn4
|
|
||||||
0, // Fn5
|
|
||||||
0, // Fn6
|
|
||||||
0 // Fn7
|
|
||||||
};
|
|
||||||
|
|
||||||
// Assign Fn key(0-7) to a keycode sent when release Fn key without use of the layer.
|
|
||||||
// See layer.c for details.
|
|
||||||
static const uint8_t PROGMEM fn_keycode[] = {
|
|
||||||
KC_NO, // Fn0
|
|
||||||
KC_NO, // Fn1
|
|
||||||
KC_NO, // Fn2
|
|
||||||
KC_NO, // Fn3
|
|
||||||
KC_NO, // Fn4
|
|
||||||
KC_NO, // Fn5
|
|
||||||
KC_NO, // Fn6
|
|
||||||
KC_NO // Fn7
|
|
||||||
};
|
|
||||||
|
|
||||||
static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
KEYMAP_EXTENDED_US(
|
|
||||||
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, PWR,
|
|
||||||
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PEQL,PSLS,PAST,
|
|
||||||
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9, PMNS,
|
|
||||||
LCAP,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, RSFT, UP, P1, P2, P3,
|
|
||||||
LCTL,LGUI,LALT, SPC, RGUI,RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
|
|
||||||
),
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col)
|
/*
|
||||||
{
|
ADB ANSI/ISO Keymapping Note
|
||||||
return KEYCODE(layer, row, col);
|
============================
|
||||||
}
|
ANSI
|
||||||
|
,----------- ----------.
|
||||||
|
| *a| 1| 2 =|Backspa|
|
||||||
|
|----------- ----------|
|
||||||
|
|Tab | Q| | ]| *c|
|
||||||
|
|----------- ----------|
|
||||||
|
|CapsLo| A| '|Return |
|
||||||
|
|----------- ----------|
|
||||||
|
|Shift | Shift |
|
||||||
|
`----------- ----------'
|
||||||
|
|
||||||
uint8_t keymap_fn_layer(uint8_t index)
|
ISO
|
||||||
{
|
,----------- ----------.
|
||||||
return pgm_read_byte(&fn_layer[index]);
|
| *a| 1| 2 =|Backspa|
|
||||||
}
|
|----------- ----------|
|
||||||
|
|Tab | Q| | ]|Retur|
|
||||||
|
|----------- -----` |
|
||||||
|
|CapsLo| A| '| *c| |
|
||||||
|
|----------- ----------|
|
||||||
|
|Shif| *b| Shift |
|
||||||
|
`----------- ----------'
|
||||||
|
|
||||||
uint8_t keymap_fn_keycode(uint8_t index)
|
ADB Keyboard scan code:
|
||||||
{
|
ADB scan code USB usage
|
||||||
return pgm_read_byte(&fn_keycode[index]);
|
------------- ---------
|
||||||
}
|
Key ANSI ISO ANSI ISO
|
||||||
|
---------------------------------------------
|
||||||
|
*a 0x32 0x0A 0x35 0x35
|
||||||
|
*b ---- 0x32 ---- 0x64
|
||||||
|
*c 0x2A 0x2A 0x31 0x31(or 0x32)
|
||||||
|
|
||||||
|
|
||||||
|
TMK ADB-USB mapping:
|
||||||
|
ADB USB(ANSI) USB(ISO)
|
||||||
|
---------------------------------
|
||||||
|
0x32 0x35 0x64
|
||||||
|
0x0A ---- 0x35
|
||||||
|
0x2A 0x31 0x31(or 0x32)
|
||||||
|
|
||||||
|
Note that mappings of ADB code 0x32 are diffrent between ANSI and ISO keyboard.
|
||||||
|
https://github.com/tmk/tmk_keyboard/issues/35
|
||||||
|
*/
|
||||||
58
converter/adb_usb/keymap_hasu.c
Normal file
58
converter/adb_usb/keymap_hasu.c
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
#include "keymap_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Default Layer: plain keymap
|
||||||
|
* ,---. ,---------------. ,---------------. ,---------------. ,-----------. ,---.
|
||||||
|
* |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| | |
|
||||||
|
* `---' `---------------' `---------------' `---------------' `-----------' `---'
|
||||||
|
* ,-----------------------------------------------------------. ,-----------. ,---------------.
|
||||||
|
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa| |Ins|Hom|PgU| |NmL| =| /| *|
|
||||||
|
* |-----------------------------------------------------------| |-----------| |---------------|
|
||||||
|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Fn0| |Del|End|PgD| | 7| 8| 9| -|
|
||||||
|
* |-----------------------------------------------------------| `-----------' |---------------|
|
||||||
|
* |CapsLo| A| S| D| F| G| H| J| K| L| ;| '|Return | | 4| 5| 6| +|
|
||||||
|
* |-----------------------------------------------------------| ,---. |---------------|
|
||||||
|
* |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| |
|
||||||
|
* |-----------------------------------------------------------| ,-----------. |-----------|Ent|
|
||||||
|
* |Ctrl |Gui |Alt | Space |Alt |Gui |Ctrl | |Lef|Dow|Rig| | 0| .| |
|
||||||
|
* `-----------------------------------------------------------' `-----------' `---------------'
|
||||||
|
*/
|
||||||
|
KEYMAP_EXT_ANSI(
|
||||||
|
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK, NO,
|
||||||
|
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,EQL, PSLS,PAST,
|
||||||
|
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,FN0, DEL, END, PGDN, P7, P8, P9, PMNS,
|
||||||
|
CAPS,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, RSFT, UP, P1, P2, P3,
|
||||||
|
LCTL,LGUI,LALT, SPC, RGUI,RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Default Layer: plain keymap
|
||||||
|
* ,---. ,---------------. ,---------------. ,---------------. ,-----------. ,---.
|
||||||
|
* |` | |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| | |
|
||||||
|
* `---' `---------------' `---------------' `---------------' `-----------' `---'
|
||||||
|
* ,-----------------------------------------------------------. ,-----------. ,---------------.
|
||||||
|
* |Esc|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Delete | |Ins|Hom|PgU| |NmL|Mb1|Mb2|Mb3|
|
||||||
|
* |-----------------------------------------------------------| |-----------| |---------------|
|
||||||
|
* |Tab | Q| W| E| R| T| Y| U|PrS|ScL|Pau|Up |Ins| Fn0| |Del|End|PgD| |MwD|McU|MwU|MwD|
|
||||||
|
* |-----------------------------------------------------------| `-----------' |---------------|
|
||||||
|
* |CapsLo|VoD|VoU|Mut| F| G| H| J|Hom|PgU|Lef|Rig|Return | |McL|McD|McR|MwU|
|
||||||
|
* |-----------------------------------------------------------| ,---. |---------------|
|
||||||
|
* |Shift | Z| X| C| V| B| N| M|End|PgD|Dow|Shift | |PgU| |MwL|McD|MwR| |
|
||||||
|
* |-----------------------------------------------------------| ,-----------. |-----------|Mb3|
|
||||||
|
* |Ctrl |Gui |Alt | Space |Alt |Gui |Ctrl | |Hom|PgD|End| | Mb1|Mb2| |
|
||||||
|
* `-----------------------------------------------------------' `-----------' `---------------'
|
||||||
|
*/
|
||||||
|
KEYMAP_EXT_ANSI(
|
||||||
|
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK, NO,
|
||||||
|
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, INS, HOME,PGUP, NLCK,BTN1,BTN2,BTN3,
|
||||||
|
TAB, Q, W, E, R, T, Y, U, PSCR,SLCK,PAUS,UP, INS, FN0, DEL, END, PGDN, WH_D,MS_U,WH_U,WH_D,
|
||||||
|
CAPS,VOLD,VOLU,MUTE,F, G, H, J, HOME,PGUP,LEFT,RGHT, ENT, MS_L,MS_D,MS_R,WH_U,
|
||||||
|
LSFT,Z, X, C, V, B, N, M, END, PGDN,DOWN, RSFT, PGUP, WH_L,MS_D,WH_R,
|
||||||
|
LCTL,LGUI,LALT, SPC, RGUI,RCTL, HOME,PGDN,END, BTN1, BTN2,BTN3
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
[0] = ACTION_LAYER_TAP_KEY(1, KC_BSLS),
|
||||||
|
};
|
||||||
16
converter/adb_usb/keymap_iso.c
Normal file
16
converter/adb_usb/keymap_iso.c
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
#include "keymap_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
KEYMAP_EXT_ISO(
|
||||||
|
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, PWR,
|
||||||
|
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PEQL,PSLS,PAST,
|
||||||
|
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,ENT, DEL, END, PGDN, P7, P8, P9, PMNS,
|
||||||
|
LCAP,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NUHS, P4, P5, P6, PPLS,
|
||||||
|
LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3,
|
||||||
|
LCTL,LALT,LGUI, SPC, RALT,RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
|
};
|
||||||
|
|
@ -10,13 +10,14 @@ TARGET_DIR = .
|
||||||
# keyboard dependent files
|
# keyboard dependent files
|
||||||
SRC = matrix.c \
|
SRC = matrix.c \
|
||||||
led.c \
|
led.c \
|
||||||
|
keymap_common.c \
|
||||||
m0110.c
|
m0110.c
|
||||||
|
|
||||||
# To use own keymap file run make like: make keymap=hasu
|
# To use own keymap file run make like: make keymap=hasu
|
||||||
ifdef keymap
|
ifdef KEYMAP
|
||||||
SRC += keymap_$(keymap).c
|
SRC += keymap_$(KEYMAP).c
|
||||||
else
|
else
|
||||||
SRC += keymap.c
|
SRC += keymap_plain.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
CONFIG_H = config.h
|
CONFIG_H = config.h
|
||||||
|
|
@ -71,14 +72,14 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
# Build Options
|
# Build Options
|
||||||
# *Comment out* to disable the options.
|
# *Comment out* to disable the options.
|
||||||
#
|
#
|
||||||
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||||
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
CONSOLE_ENABLE = yes # Console for debug(+400)
|
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
|
||||||
#NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
|
#NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
|
||||||
KEYMAP_SECTION_ENABLE = yes # fixed address keymap for keymap editor
|
#KEYMAP_SECTION_ENABLE = yes # fixed address keymap for keymap editor
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@ M0110/M0110A to USB keyboard converter
|
||||||
======================================
|
======================================
|
||||||
This firmware converts the protocol of Apple Macintosh keyboard **M0110**, **M0110A** and **M0120** into USB. Target of this project is USB AVR controller **ATmega32U4**. Using this converter you can revive these retro keyboards with modern computer.
|
This firmware converts the protocol of Apple Macintosh keyboard **M0110**, **M0110A** and **M0120** into USB. Target of this project is USB AVR controller **ATmega32U4**. Using this converter you can revive these retro keyboards with modern computer.
|
||||||
|
|
||||||
|
Read README of top directory too.
|
||||||
|
|
||||||
Pictures of **M0110 + M0120** and **M0110A**.
|
Pictures of **M0110 + M0120** and **M0110A**.
|
||||||
|
|
||||||

|

|
||||||
|
|
@ -17,6 +19,7 @@ Update
|
||||||
------
|
------
|
||||||
- 2013/08: Change port for signals `PF` to `PD`
|
- 2013/08: Change port for signals `PF` to `PD`
|
||||||
- 2013/09: Change port again, it uses inversely `PD0` for data and `PD1` for clock line now.
|
- 2013/09: Change port again, it uses inversely `PD0` for data and `PD1` for clock line now.
|
||||||
|
- 2014/06: Change keymaps
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -54,76 +57,22 @@ To compile firmware you need AVR GCC. You can edit *Makefile* and *config.h* to
|
||||||
|
|
||||||
$ 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 -f Makefile clean
|
$ make clean
|
||||||
$ make -f Makefile
|
$ make
|
||||||
|
|
||||||
and program your Teensy with [PJRC Teensy loader](http://www.pjrc.com/teensy/loader.html).
|
To select keymap use `KEYMAP` option.
|
||||||
|
|
||||||
|
$ make clean
|
||||||
|
$ make KEYMAP={plain|spacefn|hasu}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Keymap
|
Keymap
|
||||||
------
|
------
|
||||||
You can change keymaps by editing *keymap.c*.
|
To create your own keymap copy existent keymap file to `keymap_name.c` and edit it. You can build it like this.
|
||||||
|
|
||||||
### M0110 & M0120
|
$ make clean
|
||||||
#### *Default Layer*
|
$ make KEYMAP=name
|
||||||
,---------------------------------------------------------. ,---------------.
|
|
||||||
| `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backs| |Clr| -|Lft|Rgt|
|
|
||||||
|---------------------------------------------------------| |---------------|
|
|
||||||
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | 7| 8| 9| Up|
|
|
||||||
|---------------------------------------------------------| |---------------|
|
|
||||||
|Caps | A| S| D| F| G| H| J| K| L| ;| '|Enter | | 4| 5| 6| Dn|
|
|
||||||
|---------------------------------------------------------| |---------------|
|
|
||||||
|Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | | 1| 2| 3| |
|
|
||||||
`---------------------------------------------------------' |-----------|Ent|
|
|
||||||
|Ctl|Gui | Space |Alt |Ctl| | 0| .| |
|
|
||||||
`-----------------------------------------------' `---------------'
|
|
||||||
|
|
||||||
- `Space` and `Enter` also work as `Fn` layer switch key when holding down.
|
|
||||||
|
|
||||||
#### *Function Layer(WASD/HHKB)*
|
|
||||||
,---------------------------------------------------------. ,---------------.
|
|
||||||
|Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delet| |Nlk| -|Lft|Rgt|
|
|
||||||
|---------------------------------------------------------| |---------------|
|
|
||||||
|Caps |Hom| Up|PgU| | | | |Psc|Slk|Pau|Up |Ins| \| | 7| 8| 9| Up|
|
|
||||||
|---------------------------------------------------------| |---------------|
|
|
||||||
|Caps |Lef|Dow|Rig| | | | |Hom|PgU|Lef|Rig|Enter | | 4| 5| 6| Dn|
|
|
||||||
|---------------------------------------------------------| |---------------|
|
|
||||||
|Shift |End| |PgD| | | | |End|PgD|Dow|Shift | | 1| 2| 3| |
|
|
||||||
`---------------------------------------------------------' |-----------|Ent|
|
|
||||||
|Ctl|Gui | Space |Alt |Ctl| | 0| .| |
|
|
||||||
`-----------------------------------------------' `---------------'
|
|
||||||
|
|
||||||
|
|
||||||
### M0110A
|
|
||||||
#### *Default Layer*
|
|
||||||
,---------------------------------------------------------. ,---------------.
|
|
||||||
| `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backs| |Clr| =| /| *|
|
|
||||||
|---------------------------------------------------------| |---------------|
|
|
||||||
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | | 7| 8| 9| -|
|
|
||||||
|-----------------------------------------------------' | |---------------|
|
|
||||||
|Caps | A| S| D| F| G| H| J| K| L| ;| '|Enter | | 4| 5| 6| +|
|
|
||||||
|---------------------------------------------------------| |---------------|
|
|
||||||
|Shift | Z| X| C| V| B| N| M| ,| ,| /|Shft| Up| | 1| 2| 3| |
|
|
||||||
|---------------------------------------------------------| |-----------|Ent|
|
|
||||||
|Ctrl |Gui | Space | \|Lft|Rgt|Dwn| | 0| .| |
|
|
||||||
`---------------------------------------------------------' `---------------'
|
|
||||||
|
|
||||||
- `Space` and `Enter` also work as `Fn` layer switch key when holding down.
|
|
||||||
- `Backslash(\)` also works as `Alt` when holding down.
|
|
||||||
|
|
||||||
#### *Function Layer(WASD/HHKB)*
|
|
||||||
,---------------------------------------------------------. ,---------------.
|
|
||||||
|Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delet| |Nlk| =| /| *|
|
|
||||||
|---------------------------------------------------------| |---------------|
|
|
||||||
|Caps |Hom| Up|PgU| | | | |Psc|Slk|Pau|Up |Ins| | | 7| 8| 9| -|
|
|
||||||
|-----------------------------------------------------' | |---------------|
|
|
||||||
|Caps |Lef|Dow|Rig| | | | |Hom|PgU|Lef|Rig|Enter | | 4| 5| 6| +|
|
|
||||||
|---------------------------------------------------------| |---------------|
|
|
||||||
|Shift |End| |PgD| | | | |End|PgD|Dow|Shif|PgU| | 1| 2| 3| |
|
|
||||||
|---------------------------------------------------------| |-----------|Ent|
|
|
||||||
|Ctrl |Gui | Space | \|Hom|End|PgD| | 0| .| |
|
|
||||||
`---------------------------------------------------------' `---------------'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
37
converter/m0110_usb/keymap_common.c
Normal file
37
converter/m0110_usb/keymap_common.c
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
/*
|
||||||
|
Copyright 2011,2012,2014 Jun Wako <wakojun@gmail.com>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
#include "action.h"
|
||||||
|
#include "keycode.h"
|
||||||
|
#include "keymap.h"
|
||||||
|
#include "keymap_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
/* translates key to keycode */
|
||||||
|
uint8_t keymap_key_to_keycode(uint8_t layer, key_t key)
|
||||||
|
{
|
||||||
|
return pgm_read_byte(&keymaps[(layer)][(key.row)][(key.col)]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* translates Fn index to action */
|
||||||
|
action_t keymap_fn_to_action(uint8_t keycode)
|
||||||
|
{
|
||||||
|
action_t action;
|
||||||
|
action.code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]);
|
||||||
|
return action;
|
||||||
|
}
|
||||||
107
converter/m0110_usb/keymap_common.h
Normal file
107
converter/m0110_usb/keymap_common.h
Normal file
|
|
@ -0,0 +1,107 @@
|
||||||
|
/*
|
||||||
|
Copyright 2011,2012,2014 Jun Wako <wakojun@gmail.com>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
#include "keycode.h"
|
||||||
|
#include "keymap.h"
|
||||||
|
|
||||||
|
|
||||||
|
extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
|
||||||
|
extern const uint16_t fn_actions[];
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The keymap works with both M0110 and M0110A keyboards. As you can see, the M0110A is a superset
|
||||||
|
* of the M0110 keyboard, with only one exception: 'Enter' in M0110 does not exist
|
||||||
|
* on the M0110A, but since it generates a unique scan code which is not used for some other key in
|
||||||
|
* the M0110A, they are totally interchangeable. In fact, the M0110A is functionally (almost)
|
||||||
|
* identical to the combination of the M0110 along with the M0120 keypad. The only difference
|
||||||
|
* (which is causing some problems as you will read below) is that the M0110+M0120 don't have
|
||||||
|
* dedicated arrow keys, while the M0110A does. However, the M0120 did have arrow keys, which
|
||||||
|
* doubled as the [comma], [/], [*] and [+] keys, when used with the [Shift] key. The M0110A has
|
||||||
|
* substituted the [comma] key with the [=] key, however its scancode is the same.
|
||||||
|
*
|
||||||
|
* Physical layout:
|
||||||
|
* M0110A
|
||||||
|
* ,---------------------------------------------------------. ,---------------.
|
||||||
|
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Bcksp| |Clr| =| /| *|
|
||||||
|
* |---------------------------------------------------------| |---------------|
|
||||||
|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | | 7| 8| 9| -|
|
||||||
|
* |-----------------------------------------------------' | |---------------|
|
||||||
|
* |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return| | 4| 5| 6| +|
|
||||||
|
* |---------------------------------------------------------| |---------------|
|
||||||
|
* |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shft|Up | | 1| 2| 3| |
|
||||||
|
* |---------------------------------------------------------' |-----------|Ent|
|
||||||
|
* |Opt |Mac | Space | \|Lft|Rgt|Dn | | 0| .| |
|
||||||
|
* `---------------------------------------------------------' `---------------'
|
||||||
|
*
|
||||||
|
* M0110 M0120
|
||||||
|
* ,---------------------------------------------------------. ,---------------.
|
||||||
|
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backs| |Clr| -| +| *|
|
||||||
|
* |---------------------------------------------------------| |---------------|
|
||||||
|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | 7| 8| 9| /|
|
||||||
|
* |---------------------------------------------------------| |---------------|
|
||||||
|
* |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return| | 4| 5| 6| ,|
|
||||||
|
* |---------------------------------------------------------| |---------------|
|
||||||
|
* |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | | 1| 2| 3| |
|
||||||
|
* `---------------------------------------------------------' |-----------|Ent|
|
||||||
|
* |Opt|Mac | Space |Ent |Opt| | 0| .| |
|
||||||
|
* `-----------------------------------------------' `---------------'
|
||||||
|
* With Shift keys on M0120 work as curosor.(-:Left *:Right /:Up ,:Down)
|
||||||
|
*
|
||||||
|
* NOTE: \ is located differently.
|
||||||
|
* NOTE: Enter on M0110 is different from Enter on keypad(M0120 and M0110A).
|
||||||
|
* NOTE: Left Shift and right Shift are logically same key.
|
||||||
|
* NOTE: Left Option and right Option are logically same key.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Keymap definition Macro
|
||||||
|
* ,---------------------------------------------------------. ,---------------.
|
||||||
|
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backs| |Clr| =| /| *|
|
||||||
|
* |---------------------------------------------------------| |---------------|
|
||||||
|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | | 7| 8| 9| -|
|
||||||
|
* |-----------------------------------------------------' | |---------------|
|
||||||
|
* |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return| | 4| 5| 6| +|
|
||||||
|
* |---------------------------------------------------------| |---------------|
|
||||||
|
* |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shft|Up | | 1| 2| 3| |
|
||||||
|
* |---------------------------------------------------------| |-----------|Ent|
|
||||||
|
* |Opt |Mac | Space |Ent| \|Lft|Rgt|Dn | | 0| .| |
|
||||||
|
* `---------------------------------------------------------' `---------------'
|
||||||
|
* NOTE: Ent between Space and \ means Enter on M0110.
|
||||||
|
*/
|
||||||
|
#define KEYMAP( \
|
||||||
|
K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K47,K68,K6D,K62, \
|
||||||
|
K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E, K59,K5B,K5C,K4E, \
|
||||||
|
K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27, K24, K56,K57,K58,K66, \
|
||||||
|
K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C, K4D, K53,K54,K55,K4C, \
|
||||||
|
K3A,K37, K31, K34,K2A,K46,K42,K48, K52, K41 \
|
||||||
|
) { \
|
||||||
|
{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
|
||||||
|
{ KC_##K08, KC_##K09, KC_NO, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
|
||||||
|
{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
|
||||||
|
{ KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
|
||||||
|
{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
|
||||||
|
{ KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
|
||||||
|
{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_NO, KC_NO, KC_##K37 }, \
|
||||||
|
{ KC_##K38, KC_##K39, KC_##K3A, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
|
||||||
|
{ KC_NO, KC_##K41, KC_##K42, KC_NO, KC_NO, KC_NO, KC_##K46, KC_##K47 }, \
|
||||||
|
{ KC_##K48, KC_NO, KC_NO, KC_NO, KC_##K4C, KC_##K4D, KC_##K4E, KC_NO }, \
|
||||||
|
{ KC_NO, KC_NO, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
|
||||||
|
{ KC_##K58, KC_##K59, KC_NO, KC_##K5B, KC_##K5C, KC_NO, KC_NO, KC_NO }, \
|
||||||
|
{ KC_NO, KC_NO, KC_##K62, KC_NO, KC_NO, KC_NO, KC_##K66, KC_NO }, \
|
||||||
|
{ KC_##K68, KC_NO, KC_NO, KC_NO, KC_NO, KC_##K6D, KC_NO, KC_NO }, \
|
||||||
|
}
|
||||||
118
converter/m0110_usb/keymap_for_editor.c
Normal file
118
converter/m0110_usb/keymap_for_editor.c
Normal file
|
|
@ -0,0 +1,118 @@
|
||||||
|
/*
|
||||||
|
Copyright 2014 Jun Wako <wakojun@gmail.com>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "keycode.h"
|
||||||
|
#include "keymap_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef KEYMAP_SECTION_ENABLE
|
||||||
|
const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] __attribute__ ((section (".keymap.keymaps"))) = {
|
||||||
|
#else
|
||||||
|
const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
|
||||||
|
#endif
|
||||||
|
/* Default:
|
||||||
|
* ,---------------------------------------------------------. ,---------------.
|
||||||
|
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backs| |Clr| =| /| *|
|
||||||
|
* |---------------------------------------------------------| |---------------|
|
||||||
|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | | 7| 8| 9| -|
|
||||||
|
* |-----------------------------------------------------' | |---------------|
|
||||||
|
* |Caps | A| S| D| F| G| H| J| K| L| ;| '|Enter | | 4| 5| 6| +|
|
||||||
|
* |---------------------------------------------------------| |---------------|
|
||||||
|
* |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shft|Up | | 1| 2| 3| |
|
||||||
|
* |---------------------------------------------------------| |-----------|Ent|
|
||||||
|
* |Ctl |Gui | Space |Alt| \|Lft|Rgt|Dn | | 0| .| |
|
||||||
|
* `---------------------------------------------------------' `---------------'
|
||||||
|
*/
|
||||||
|
[0] = KEYMAP(
|
||||||
|
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, CLR, EQL, PSLS,PAST,
|
||||||
|
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, P7, P8, P9, PMNS,
|
||||||
|
LCAP,A, S, D, F, G, H, J, K, L, SCLN,QUOT, FN15, P4, P5, P6, PPLS,
|
||||||
|
LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, UP, P1, P2, P3, PENT,
|
||||||
|
LCTL,LGUI, FN16, LALT,FN31,LEFT,RGHT,DOWN, P0, PDOT
|
||||||
|
),
|
||||||
|
/* Cursor Layer(WASD, IJKL)
|
||||||
|
* ,---------------------------------------------------------. ,---------------.
|
||||||
|
* |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delet| |Nlk| =| /| *|
|
||||||
|
* |---------------------------------------------------------| |---------------|
|
||||||
|
* |Caps |Hom| Up|PgU| | | | |Psc|Slk|Pau|Up |Ins| | | 7| 8| 9| -|
|
||||||
|
* |-----------------------------------------------------' | |---------------|
|
||||||
|
* |Caps |Lef|Dow|Rig| | | | |Hom|PgU|Lef|Rig|Enter | | 4| 5| 6| +|
|
||||||
|
* |---------------------------------------------------------| |---------------|
|
||||||
|
* |Shift |End| |PgD| | | | |End|PgD|Dow|Shif|PgU| | 1| 2| 3| |
|
||||||
|
* |---------------------------------------------------------| |-----------|Ent|
|
||||||
|
* |Ctl |Gui | Space |Alt | \|Hom|End|PgD| | 0| .| |
|
||||||
|
* `---------------------------------------------------------' `---------------'
|
||||||
|
*/
|
||||||
|
[3] = KEYMAP(
|
||||||
|
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, NLCK,EQL, PSLS,PAST,
|
||||||
|
CAPS,HOME,UP, PGUP,NO, NO, NO, NO, PSCR,SLCK,PAUS,UP, INS, P7, P8, P9, PMNS,
|
||||||
|
LCAP,LEFT,DOWN,RGHT,NO, NO, NO, NO, HOME,PGUP,LEFT,RGHT, FN15, P4, P5, P6, PPLS,
|
||||||
|
LSFT,END, NO, PGDN,NO, NO, NO, NO, END, PGDN,DOWN, PGUP, P1, P2, P3, PENT,
|
||||||
|
LCTL,LGUI, FN16, LALT,FN31,HOME,END, PGDN, P0, PDOT
|
||||||
|
),
|
||||||
|
[4] = KEYMAP(
|
||||||
|
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, NLCK,EQL, PSLS,PAST,
|
||||||
|
CAPS,HOME,UP, PGUP,NO, NO, NO, NO, PSCR,SLCK,PAUS,UP, INS, P7, P8, P9, PMNS,
|
||||||
|
LCAP,LEFT,DOWN,RGHT,NO, NO, NO, NO, HOME,PGUP,LEFT,RGHT, FN15, P4, P5, P6, PPLS,
|
||||||
|
LSFT,END, NO, PGDN,NO, NO, NO, NO, END, PGDN,DOWN, PGUP, P1, P2, P3, PENT,
|
||||||
|
LCTL,LGUI, FN16, LALT,FN31,HOME,END, PGDN, P0, PDOT
|
||||||
|
),
|
||||||
|
[7] = {},
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Fn action definition
|
||||||
|
*/
|
||||||
|
#ifdef KEYMAP_SECTION_ENABLE
|
||||||
|
const uint16_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
|
||||||
|
#else
|
||||||
|
const uint16_t fn_actions[] PROGMEM = {
|
||||||
|
#endif
|
||||||
|
[0] = ACTION_LAYER_MOMENTARY(1),
|
||||||
|
[1] = ACTION_LAYER_MOMENTARY(2),
|
||||||
|
[2] = ACTION_LAYER_MOMENTARY(3),
|
||||||
|
[3] = ACTION_LAYER_MOMENTARY(4),
|
||||||
|
[4] = ACTION_LAYER_MOMENTARY(5),
|
||||||
|
[5] = ACTION_LAYER_MOMENTARY(6),
|
||||||
|
[6] = ACTION_LAYER_MOMENTARY(7),
|
||||||
|
[7] = ACTION_LAYER_TOGGLE(1),
|
||||||
|
[8] = ACTION_LAYER_TOGGLE(2),
|
||||||
|
[9] = ACTION_LAYER_TOGGLE(3),
|
||||||
|
[10] = ACTION_LAYER_TAP_TOGGLE(1),
|
||||||
|
[11] = ACTION_LAYER_TAP_TOGGLE(2),
|
||||||
|
[12] = ACTION_LAYER_TAP_TOGGLE(3),
|
||||||
|
[13] = ACTION_LAYER_TAP_KEY(1, KC_F),
|
||||||
|
[14] = ACTION_LAYER_TAP_KEY(2, KC_J),
|
||||||
|
[15] = ACTION_LAYER_TAP_KEY(3, KC_ENTER),
|
||||||
|
[16] = ACTION_LAYER_TAP_KEY(4, KC_SPACE),
|
||||||
|
[17] = ACTION_LAYER_TAP_KEY(5, KC_SCOLON),
|
||||||
|
[18] = ACTION_LAYER_TAP_KEY(6, KC_QUOTE),
|
||||||
|
[19] = ACTION_LAYER_TAP_KEY(7, KC_SLASH),
|
||||||
|
[20] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_SPACE),
|
||||||
|
[21] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_SPACE),
|
||||||
|
[22] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_QUOTE),
|
||||||
|
[23] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_ENTER),
|
||||||
|
[24] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_ESC),
|
||||||
|
[25] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_BSPACE),
|
||||||
|
[26] = ACTION_MODS_ONESHOT(MOD_LCTL),
|
||||||
|
[27] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_ESC),
|
||||||
|
[28] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_BSPACE),
|
||||||
|
[29] = ACTION_MODS_ONESHOT(MOD_LSFT),
|
||||||
|
[30] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_GRAVE),
|
||||||
|
[31] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_BSLASH),
|
||||||
|
};
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright 2011,2012 Jun Wako <wakojun@gmail.com>
|
Copyright 2014 Jun Wako <wakojun@gmail.com>
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -14,188 +14,74 @@ GNU General Public License for more details.
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
/* M0110A Support was contributed by skagon@github */
|
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdbool.h>
|
|
||||||
#include <avr/pgmspace.h>
|
|
||||||
#include "keycode.h"
|
#include "keycode.h"
|
||||||
#include "print.h"
|
#include "keymap_common.h"
|
||||||
#include "debug.h"
|
|
||||||
#include "util.h"
|
|
||||||
#include "keymap.h"
|
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Default:
|
||||||
|
* M0110
|
||||||
|
* ,---------------------------------------------------------.
|
||||||
|
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backs|
|
||||||
|
* |---------------------------------------------------------|
|
||||||
|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
|
||||||
|
* |---------------------------------------------------------|
|
||||||
|
* |Ctrl | A| S| D| F| G| H| J| K| L| Fn| '|Return|
|
||||||
|
* |---------------------------------------------------------|
|
||||||
|
* |Shift | Z| X| C| V| B| N| M| ,| ,| Fn|Shift |
|
||||||
|
* `---------------------------------------------------------'
|
||||||
|
* |Fn |alt | Fn |Gui |Fn |
|
||||||
|
* `-----------------------------------------------'
|
||||||
|
*/
|
||||||
|
[0] = KEYMAP(
|
||||||
|
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, NLCK,EQL, PSLS,PAST,
|
||||||
|
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, P7, P8, P9, PMNS,
|
||||||
|
LCTL,A, S, D, F, G, H, J, K, L, FN3, QUOT, ENT, P4, P5, P6, PPLS,
|
||||||
|
LSFT,Z, X, C, V, B, N, M, COMM,DOT, FN1, UP, P1, P2, P3, PENT,
|
||||||
|
FN0, LALT, FN2, LGUI,BSLS,LEFT,RGHT,DOWN, P0, PDOT
|
||||||
|
),
|
||||||
|
// IJKL cursor
|
||||||
|
[1] = KEYMAP(
|
||||||
|
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, NLCK,EQL, PSLS,PAST,
|
||||||
|
CAPS,NO, NO, NO, NO, NO, HOME,PGDN,UP, PGUP,END, NO, NO, P7, P8, P9, PMNS,
|
||||||
|
LCTL,VOLD,VOLU,MUTE,NO, NO, HOME,LEFT,DOWN,RGHT,END, NO, ENT, P4, P5, P6, PPLS,
|
||||||
|
LSFT,NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, NO, PGUP, P1, P2, P3, PENT,
|
||||||
|
TRNS,LALT, SPC, LGUI,BSLS,HOME,END, PGDN, P0, PDOT
|
||||||
|
),
|
||||||
|
// HJKL cursor
|
||||||
|
[2] = KEYMAP(
|
||||||
|
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, NLCK,EQL, PSLS,PAST,
|
||||||
|
CAPS,NO, NO, NO, NO, NO, HOME,PGDN,UP, PGUP,END, NO, NO, P7, P8, P9, PMNS,
|
||||||
|
LCTL,VOLD,VOLU,MUTE,NO, NO, LEFT,DOWN,UP, RGHT,NO, NO, ENT, P4, P5, P6, PPLS,
|
||||||
|
LSFT,NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, TRNS, PGUP, P1, P2, P3, PENT,
|
||||||
|
TRNS,LALT, SPC, LGUI,BSLS,HOME,END, PGDN, P0, PDOT
|
||||||
|
),
|
||||||
|
// Mousekey
|
||||||
|
[3] = KEYMAP(
|
||||||
|
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, NLCK,EQL, PSLS,PAST,
|
||||||
|
CAPS,Q, W, E, R, T, WH_L,WH_D,MS_U,WH_U,WH_R,WBAK,WFWD, P7, P8, P9, PMNS,
|
||||||
|
LCTL,VOLD,VOLU,MUTE,NO, NO, BTN2,MS_L,MS_D,MS_R,BTN1,NO, ENT, P4, P5, P6, PPLS,
|
||||||
|
LSFT,Z, X, C, V, B, BTN2,BTN1,BTN4,BTN5,NO, PGUP, P1, P2, P3, PENT,
|
||||||
|
NO, LALT, TRNS, LGUI,BSLS,HOME,END, PGDN, P0, PDOT
|
||||||
|
),
|
||||||
|
// Mousekey
|
||||||
|
[4] = KEYMAP(
|
||||||
|
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, NLCK,EQL, PSLS,PAST,
|
||||||
|
CAPS,Q, W, E, R, T, WH_L,WH_D,MS_U,WH_U,WH_R,WBAK,WFWD, P7, P8, P9, PMNS,
|
||||||
|
LCTL,VOLD,VOLU,MUTE,NO, NO, BTN2,MS_L,MS_D,MS_R,TRNS,NO, ENT, P4, P5, P6, PPLS,
|
||||||
|
LSFT,Z, X, C, V, B, BTN2,BTN1,BTN4,BTN5,NO, PGUP, P1, P2, P3, PENT,
|
||||||
|
NO, LALT, BTN1, LGUI,BSLS,HOME,END, PGDN, P0, PDOT
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The keymap works with both M0110 and M0110A keyboards. As you can see, the M0110A is a superset
|
* Fn action definition
|
||||||
* of the M0110 keyboard, with only one exception: 'Enter' in M0110 does not exist
|
|
||||||
* on the M0110A, but since it generates a unique scan code which is not used for some other key in
|
|
||||||
* the M0110A, they are totally interchangeable. In fact, the M0110A is functionally (almost)
|
|
||||||
* identical to the combination of the M0110 along with the M0120 keypad. The only difference
|
|
||||||
* (which is causing some problems as you will read below) is that the M0110+M0120 don't have
|
|
||||||
* dedicated arrow keys, while the M0110A does. However, the M0120 did have arrow keys, which
|
|
||||||
* doubled as the [comma], [/], [*] and [+] keys, when used with the [Shift] key. The M0110A has
|
|
||||||
* substituted the [comma] key with the [=] key, however its scancode is the same.
|
|
||||||
*
|
|
||||||
* Physical layout:
|
|
||||||
* M0110A
|
|
||||||
* ,---------------------------------------------------------. ,---------------.
|
|
||||||
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Bcksp| |Clr| =| /| *|
|
|
||||||
* |---------------------------------------------------------| |---------------|
|
|
||||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | | 7| 8| 9| -|
|
|
||||||
* |-----------------------------------------------------' | |---------------|
|
|
||||||
* |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return| | 4| 5| 6| +|
|
|
||||||
* |---------------------------------------------------------| |---------------|
|
|
||||||
* |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shft|Up | | 1| 2| 3| |
|
|
||||||
* |---------------------------------------------------------' |-----------|Ent|
|
|
||||||
* |Opt |Mac | Space | \|Lft|Rgt|Dn | | 0| .| |
|
|
||||||
* `---------------------------------------------------------' `---------------'
|
|
||||||
*
|
|
||||||
* M0110 M0120
|
|
||||||
* ,---------------------------------------------------------. ,---------------.
|
|
||||||
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backs| |Clr| -| +| *|
|
|
||||||
* |---------------------------------------------------------| |---------------|
|
|
||||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | 7| 8| 9| /|
|
|
||||||
* |---------------------------------------------------------| |---------------|
|
|
||||||
* |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return| | 4| 5| 6| ,|
|
|
||||||
* |---------------------------------------------------------| |---------------|
|
|
||||||
* |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | | 1| 2| 3| |
|
|
||||||
* `---------------------------------------------------------' |-----------|Ent|
|
|
||||||
* |Opt|Mac | Space |Ent |Opt| | 0| .| |
|
|
||||||
* `-----------------------------------------------' `---------------'
|
|
||||||
* With Shift keys on M0120 work as curosor.(-:Left *:Right /:Up ,:Down)
|
|
||||||
*
|
|
||||||
* NOTE: \ is located differently.
|
|
||||||
* NOTE: Enter on M0110 is different from Enter on keypad(M0120 and M0110A).
|
|
||||||
* NOTE: Left Shift and right Shift are logically same key.
|
|
||||||
* NOTE: Left Option and right Option are logically same key.
|
|
||||||
*/
|
*/
|
||||||
|
const uint16_t fn_actions[] PROGMEM = {
|
||||||
/* Keymap definition Macro
|
[0] = ACTION_LAYER_MOMENTARY(1),
|
||||||
* ,---------------------------------------------------------. ,---------------.
|
[1] = ACTION_LAYER_TAP_KEY(2, KC_SLASH),
|
||||||
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backs| |Clr| =| /| *|
|
[2] = ACTION_LAYER_TAP_KEY(3, KC_SPACE),
|
||||||
* |---------------------------------------------------------| |---------------|
|
[3] = ACTION_LAYER_TAP_KEY(4, KC_SCOLON),
|
||||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | | 7| 8| 9| -|
|
|
||||||
* |-----------------------------------------------------' | |---------------|
|
|
||||||
* |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return| | 4| 5| 6| +|
|
|
||||||
* |---------------------------------------------------------| |---------------|
|
|
||||||
* |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shft|Up | | 1| 2| 3| |
|
|
||||||
* |---------------------------------------------------------| |-----------|Ent|
|
|
||||||
* |Opt |Mac | Space |Ent| \|Lft|Rgt|Dn | | 0| .| |
|
|
||||||
* `---------------------------------------------------------' `---------------'
|
|
||||||
* NOTE: Ent between Space and \ means Enter on M0110.
|
|
||||||
*/
|
|
||||||
#define KEYMAP( \
|
|
||||||
K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K47,K68,K6D,K62, \
|
|
||||||
K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E, K59,K5B,K5C,K4E, \
|
|
||||||
K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27, K24, K56,K57,K58,K66, \
|
|
||||||
K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C, K4D, K53,K54,K55,K4C, \
|
|
||||||
K3A,K37, K31, K34,K2A,K46,K42,K48, K52, K41 \
|
|
||||||
) { \
|
|
||||||
{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
|
|
||||||
{ KC_##K08, KC_##K09, KC_NO, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
|
|
||||||
{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
|
|
||||||
{ KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
|
|
||||||
{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
|
|
||||||
{ KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
|
|
||||||
{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_NO, KC_NO, KC_##K37 }, \
|
|
||||||
{ KC_##K38, KC_##K39, KC_##K3A, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
|
|
||||||
{ KC_NO, KC_##K41, KC_##K42, KC_NO, KC_NO, KC_NO, KC_##K46, KC_##K47 }, \
|
|
||||||
{ KC_##K48, KC_NO, KC_NO, KC_NO, KC_##K4C, KC_##K4D, KC_##K4E, KC_NO }, \
|
|
||||||
{ KC_NO, KC_NO, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
|
|
||||||
{ KC_##K58, KC_##K59, KC_NO, KC_##K5B, KC_##K5C, KC_NO, KC_NO, KC_NO }, \
|
|
||||||
{ KC_NO, KC_NO, KC_##K62, KC_NO, KC_NO, KC_NO, KC_##K66, KC_NO }, \
|
|
||||||
{ KC_##K68, KC_NO, KC_NO, KC_NO, KC_NO, KC_##K6D, KC_NO, KC_NO }, \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define KEYCODE(layer, row, col) (pgm_read_byte(&keymaps[(layer)][(row)][(col)]))
|
|
||||||
|
|
||||||
|
|
||||||
// Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
|
|
||||||
static const uint8_t PROGMEM fn_layer[] = {
|
|
||||||
1, // Fn0
|
|
||||||
2, // Fn1
|
|
||||||
3, // Fn2
|
|
||||||
1, // Fn3
|
|
||||||
2, // Fn4
|
|
||||||
0, // Fn5
|
|
||||||
0, // Fn6
|
|
||||||
0 // Fn7
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Assign Fn key(0-7) to a keycode sent when release Fn key without use of the layer.
|
|
||||||
// See layer.c for details.
|
|
||||||
static const uint8_t PROGMEM fn_keycode[] = {
|
|
||||||
KC_ENTER, // Fn0
|
|
||||||
KC_SCOLON, // Fn1
|
|
||||||
KC_SLASH, // Fn2
|
|
||||||
KC_UP, // Fn3
|
|
||||||
KC_NO, // Fn4
|
|
||||||
KC_NO, // Fn5
|
|
||||||
KC_NO, // Fn6
|
|
||||||
KC_NO // Fn7
|
|
||||||
};
|
|
||||||
|
|
||||||
static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
/* Default:
|
|
||||||
* M0110 M0120
|
|
||||||
* ,---------------------------------------------------------. ,---------------.
|
|
||||||
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backs| |Gui| -| +| *|
|
|
||||||
* |---------------------------------------------------------| |---------------|
|
|
||||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | 7| 8| 9| /|
|
|
||||||
* |---------------------------------------------------------| |---------------|
|
|
||||||
* |Ctrl | A| S| D| F| G| H| J| K| L| Fn| '|Return| | 4| 5| 6| ,|
|
|
||||||
* |---------------------------------------------------------| |---------------|
|
|
||||||
* |Shift | Z| X| C| V| B| N| M| ,| ,| Fn|Shift | | 1| 2| 3| |
|
|
||||||
* `---------------------------------------------------------' |-----------|Ent|
|
|
||||||
* |Fn |alt | Space |Gui |Fn | | 0| .| |
|
|
||||||
* `-----------------------------------------------' `---------------'
|
|
||||||
*/
|
|
||||||
KEYMAP(
|
|
||||||
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, NLCK,EQL, PSLS,PAST,
|
|
||||||
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, P7, P8, P9, PMNS,
|
|
||||||
LCTL,A, S, D, F, G, H, J, K, L, FN1, QUOT, FN0, P4, P5, P6, PPLS,
|
|
||||||
LSFT,Z, X, C, V, B, N, M, COMM,DOT, FN2, FN3, P1, P2, P3, PENT,
|
|
||||||
FN4, LALT, SPC, LGUI,BSLS,LGUI,RCTL,RCTL, LGUI, PDOT
|
|
||||||
),
|
|
||||||
// HHKB & WASD
|
|
||||||
KEYMAP(
|
|
||||||
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, NLCK,EQL, PSLS,PAST,
|
|
||||||
CAPS,NO, NO, NO, NO, NO, NO, NO, PSCR,SLCK,PAUS,UP, NO, P7, P8, P9, PMNS,
|
|
||||||
LCTL,VOLD,VOLU,MUTE,NO, NO, NO, NO, HOME,PGUP,LEFT,RGHT, FN0, P4, P5, P6, PPLS,
|
|
||||||
LSFT,NO, NO, NO, NO, NO, NO, NO, END, PGDN,DOWN, FN3, P1, P2, P3, PENT,
|
|
||||||
LCTL,LALT, SPC, LGUI,INS, LGUI,RCTL,RCTL, P0, PDOT
|
|
||||||
),
|
|
||||||
// vi mousekeys
|
|
||||||
KEYMAP(
|
|
||||||
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, NLCK,EQL, PSLS,PAST,
|
|
||||||
CAPS,NO, NO, NO, NO, NO, WH_L,WH_D,WH_U,WH_R,PSCR,SLCK,PAUS, P7, P8, P9, PMNS,
|
|
||||||
LCTL,VOLD,VOLU,MUTE,NO, NO, MS_L,MS_D,MS_U,MS_R,FN1, NO, ENT, P4, P5, P6, PPLS,
|
|
||||||
LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,NO, NO, NO, NO, P1, P2, P3, PENT,
|
|
||||||
FN4, LALT, BTN1, LGUI,NO, LGUI,RCTL,RCTL, P0, PDOT
|
|
||||||
),
|
|
||||||
// vi cusorkeys
|
|
||||||
KEYMAP(
|
|
||||||
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, NLCK,EQL, PSLS,PAST,
|
|
||||||
CAPS,NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, PSCR,SLCK,PAUS, P7, P8, P9, PMNS,
|
|
||||||
LCTL,NO, NO, NO, NO, NO, LEFT,DOWN,UP, RGHT,NO, NO, ENT, P4, P5, P6, PPLS,
|
|
||||||
LSFT,NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, FN2, NO, P1, P2, P3, PENT,
|
|
||||||
LCTL,LALT, SPC, LGUI,INS, LGUI,RCTL,RCTL, P0, PDOT
|
|
||||||
),
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col)
|
|
||||||
{
|
|
||||||
return KEYCODE(layer, row, col);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t keymap_fn_layer(uint8_t index)
|
|
||||||
{
|
|
||||||
return pgm_read_byte(&fn_layer[index]);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t keymap_fn_keycode(uint8_t index)
|
|
||||||
{
|
|
||||||
return pgm_read_byte(&fn_keycode[index]);
|
|
||||||
}
|
|
||||||
|
|
|
||||||
64
converter/m0110_usb/keymap_plain.c
Normal file
64
converter/m0110_usb/keymap_plain.c
Normal file
|
|
@ -0,0 +1,64 @@
|
||||||
|
/*
|
||||||
|
Copyright 2014 Jun Wako <wakojun@gmail.com>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "keycode.h"
|
||||||
|
#include "keymap_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Default:
|
||||||
|
* M0110 M0120
|
||||||
|
* ,---------------------------------------------------------. ,---------------.
|
||||||
|
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backs| |Nlk| -| +| *|
|
||||||
|
* |---------------------------------------------------------| |---------------|
|
||||||
|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | 7| 8| 9| /|
|
||||||
|
* |---------------------------------------------------------| |---------------|
|
||||||
|
* |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return| | 4| 5| 6| ,|
|
||||||
|
* |---------------------------------------------------------| |---------------|
|
||||||
|
* |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | | 1| 2| 3| |
|
||||||
|
* `---------------------------------------------------------' |-----------|Ent|
|
||||||
|
* |Opt|Mac | Space |Mac |Opt| | 0| .| |
|
||||||
|
* `-----------------------------------------------' `---------------'
|
||||||
|
* M0110A
|
||||||
|
* ,---------------------------------------------------------. ,---------------.
|
||||||
|
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Bcksp| |Nlk| =| /| *|
|
||||||
|
* |---------------------------------------------------------| |---------------|
|
||||||
|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | | 7| 8| 9| -|
|
||||||
|
* |-----------------------------------------------------' | |---------------|
|
||||||
|
* |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return| | 4| 5| 6| +|
|
||||||
|
* |---------------------------------------------------------| |---------------|
|
||||||
|
* |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shft|Up | | 1| 2| 3| |
|
||||||
|
* |---------------------------------------------------------' |-----------|Ent|
|
||||||
|
* |Opt |Mac | Space | \|Lft|Rgt|Dn | | 0| .| |
|
||||||
|
* `---------------------------------------------------------' `---------------'
|
||||||
|
*/
|
||||||
|
[0] = KEYMAP(
|
||||||
|
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, NLCK,PEQL,PSLS,PAST,
|
||||||
|
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, P7, P8, P9, PMNS,
|
||||||
|
LCAP,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,
|
||||||
|
LALT,LGUI, SPC, RGUI,BSLS,LEFT,RGHT,DOWN, P0, PDOT
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Fn action definition
|
||||||
|
*/
|
||||||
|
const uint16_t fn_actions[] PROGMEM = {
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
71
converter/m0110_usb/keymap_spacefn.c
Normal file
71
converter/m0110_usb/keymap_spacefn.c
Normal file
|
|
@ -0,0 +1,71 @@
|
||||||
|
/*
|
||||||
|
Copyright 2014 Jun Wako <wakojun@gmail.com>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "keycode.h"
|
||||||
|
#include "keymap_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Default:
|
||||||
|
* M0110 M0120
|
||||||
|
* ,---------------------------------------------------------. ,---------------.
|
||||||
|
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backs| |Nlk| -| +| *|
|
||||||
|
* |---------------------------------------------------------| |---------------|
|
||||||
|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| | 7| 8| 9| /|
|
||||||
|
* |---------------------------------------------------------| |---------------|
|
||||||
|
* |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return| | 4| 5| 6| ,|
|
||||||
|
* |---------------------------------------------------------| |---------------|
|
||||||
|
* |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | | 1| 2| 3| |
|
||||||
|
* `---------------------------------------------------------' |-----------|Ent|
|
||||||
|
* |Opt|Mac | Space |Mac |Opt| | 0| .| |
|
||||||
|
* `-----------------------------------------------' `---------------'
|
||||||
|
* M0110A
|
||||||
|
* ,---------------------------------------------------------. ,---------------.
|
||||||
|
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Bcksp| |Nlk| =| /| *|
|
||||||
|
* |---------------------------------------------------------| |---------------|
|
||||||
|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| | | 7| 8| 9| -|
|
||||||
|
* |-----------------------------------------------------' | |---------------|
|
||||||
|
* |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return| | 4| 5| 6| +|
|
||||||
|
* |---------------------------------------------------------| |---------------|
|
||||||
|
* |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shft|Up | | 1| 2| 3| |
|
||||||
|
* |---------------------------------------------------------' |-----------|Ent|
|
||||||
|
* |Opt |Mac | Space | \|Lft|Rgt|Dn | | 0| .| |
|
||||||
|
* `---------------------------------------------------------' `---------------'
|
||||||
|
*/
|
||||||
|
[0] = KEYMAP(
|
||||||
|
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, NLCK,PEQL,PSLS,PAST,
|
||||||
|
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, P7, P8, P9, PMNS,
|
||||||
|
LCTL,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,
|
||||||
|
LALT,LGUI, FN0, RGUI,BSLS,LEFT,RGHT,DOWN, P0, PDOT
|
||||||
|
),
|
||||||
|
[1] = KEYMAP(
|
||||||
|
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, NLCK,EQL, PSLS,PAST,
|
||||||
|
TRNS,TRNS,TRNS,ESC, TRNS,TRNS,TRNS,HOME,UP, END, PSCR,SLCK,PAUS, P7, P8, P9, PMNS,
|
||||||
|
LCTL,TRNS,TRNS,TRNS,TRNS,TRNS,PGUP,LEFT,DOWN,RGHT,TRNS,TRNS, TRNS, P4, P5, P6, PPLS,
|
||||||
|
TRNS,TRNS,TRNS,TRNS,TRNS,SPC, PGDN,GRV, FN1, TRNS,APP, PGUP, P1, P2, P3, PENT,
|
||||||
|
TRNS,TRNS, TRNS, TRNS,INS, HOME,END, PGDN, P0, PDOT
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Fn action definition
|
||||||
|
*/
|
||||||
|
const uint16_t fn_actions[] PROGMEM = {
|
||||||
|
[0] = ACTION_LAYER_TAP_KEY(1, KC_SPACE),
|
||||||
|
[1] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV), // tilde
|
||||||
|
};
|
||||||
|
|
@ -20,7 +20,7 @@ Wiring: You can change this with editing config.h.
|
||||||
|
|
||||||
Pin mini DIN MCU
|
Pin mini DIN MCU
|
||||||
----------------------------------
|
----------------------------------
|
||||||
1 ~RST PD1
|
1 ~RST(TXD) PD3
|
||||||
2 GND GND
|
2 GND GND
|
||||||
3 ~RDY PD4
|
3 ~RDY PD4
|
||||||
4 RXD PD2
|
4 RXD PD2
|
||||||
|
|
@ -37,9 +37,6 @@ Protocol
|
||||||
Signal: Asynchronous, Positive logic, 19200baud, Least bit first
|
Signal: Asynchronous, Positive logic, 19200baud, Least bit first
|
||||||
Frame format: 1-Start bit(Lo), 8-Data bits, Odd-Parity, 1-Stop bit
|
Frame format: 1-Start bit(Lo), 8-Data bits, Odd-Parity, 1-Stop bit
|
||||||
|
|
||||||
This converter uses software method for testing purpose. AVR UART engine will work better.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Build Firmware
|
Build Firmware
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,6 @@
|
||||||
|
#
|
||||||
|
# Makefile for Teensy
|
||||||
|
#
|
||||||
# Target file name (without extension).
|
# Target file name (without extension).
|
||||||
TARGET = ps2_usb_lufa
|
TARGET = ps2_usb_lufa
|
||||||
|
|
||||||
|
|
@ -59,7 +62,7 @@ ARCH = AVR8
|
||||||
F_USB = $(F_CPU)
|
F_USB = $(F_CPU)
|
||||||
|
|
||||||
# Interrupt driven control endpoint task(+60)
|
# Interrupt driven control endpoint task(+60)
|
||||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
#OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
# Boot Section Size in *bytes*
|
# Boot Section Size in *bytes*
|
||||||
|
|
@ -68,7 +71,7 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
# Atmel DFU loader 4096
|
# Atmel DFU loader 4096
|
||||||
# LUFA bootloader 4096
|
# LUFA bootloader 4096
|
||||||
# USBaspLoader 2048
|
# USBaspLoader 2048
|
||||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
OPT_DEFS += -DBOOTLOADER_SIZE=512
|
||||||
|
|
||||||
|
|
||||||
# Build Options
|
# Build Options
|
||||||
|
|
|
||||||
|
|
@ -1,75 +0,0 @@
|
||||||
# Target file name (without extension).
|
|
||||||
TARGET = ps2_usb_jis
|
|
||||||
|
|
||||||
# Directory common source filess exist
|
|
||||||
TOP_DIR = ../..
|
|
||||||
|
|
||||||
# Directory keyboard dependent files exist
|
|
||||||
TARGET_DIR = .
|
|
||||||
|
|
||||||
|
|
||||||
# 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
|
|
||||||
|
|
||||||
|
|
||||||
# Build Options
|
|
||||||
# *Comment out* to disable the options.
|
|
||||||
#
|
|
||||||
MOUSEKEY_ENABLE = yes # Mouse keys
|
|
||||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
|
||||||
NKRO_ENABLE = yes # USB Nkey Rollover
|
|
||||||
|
|
||||||
#PS2_USE_USART = yes # uses hardware USART engine for PS/2 signal receive(recomened)
|
|
||||||
#PS2_USE_INT = yes # uses external interrupt for falling edge of PS/2 clock pin
|
|
||||||
PS2_USE_BUSYWAIT = yes # uses primitive reference code
|
|
||||||
|
|
||||||
|
|
||||||
# keyboard dependent files
|
|
||||||
SRC = keymap_jis.c \
|
|
||||||
matrix.c \
|
|
||||||
led.c
|
|
||||||
|
|
||||||
|
|
||||||
ifdef PS2_USE_USART
|
|
||||||
SRC += protocol/ps2_usart.c
|
|
||||||
OPT_DEFS += -DPS2_USE_USART
|
|
||||||
endif
|
|
||||||
ifdef PS2_USE_INT
|
|
||||||
SRC += protocol/ps2.c
|
|
||||||
OPT_DEFS += -DPS2_USE_INT
|
|
||||||
endif
|
|
||||||
ifdef PS2_USE_BUSYWAIT
|
|
||||||
SRC += protocol/ps2.c
|
|
||||||
OPT_DEFS += -DPS2_USE_BUSYWAIT
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
#CONFIG_H = config_pjrc_usart.h
|
|
||||||
CONFIG_H = config.h
|
|
||||||
|
|
||||||
|
|
||||||
#---------------- 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/pjrc.mk
|
|
||||||
include $(TOP_DIR)/protocol.mk
|
|
||||||
include $(TOP_DIR)/common.mk
|
|
||||||
include $(TOP_DIR)/rules.mk
|
|
||||||
98
converter/ps2_usb/Makefile.tmk_rev1
Normal file
98
converter/ps2_usb/Makefile.tmk_rev1
Normal file
|
|
@ -0,0 +1,98 @@
|
||||||
|
#
|
||||||
|
# Makefile for TMK keyboard converter rev2
|
||||||
|
# https://github.com/tmk/keyboard_converter#pcb-rev1
|
||||||
|
#
|
||||||
|
# Target file name (without extension).
|
||||||
|
TARGET = ps2_usb_tmk_rev1
|
||||||
|
|
||||||
|
# Directory common source filess exist
|
||||||
|
TOP_DIR = ../..
|
||||||
|
|
||||||
|
# Directory keyboard dependent files exist
|
||||||
|
TARGET_DIR = .
|
||||||
|
|
||||||
|
# project specific files
|
||||||
|
SRC = keymap_common.c \
|
||||||
|
matrix.c \
|
||||||
|
led.c
|
||||||
|
|
||||||
|
ifdef KEYMAP
|
||||||
|
SRC := keymap_$(KEYMAP).c $(SRC)
|
||||||
|
else
|
||||||
|
SRC := keymap_plain.c $(SRC)
|
||||||
|
endif
|
||||||
|
|
||||||
|
CONFIG_H = config_tmk_rev1.h
|
||||||
|
|
||||||
|
|
||||||
|
# MCU name
|
||||||
|
MCU = atmega32u4
|
||||||
|
|
||||||
|
# Processor frequency.
|
||||||
|
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||||
|
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||||
|
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||||
|
# automatically to create a 32-bit value in your source code.
|
||||||
|
#
|
||||||
|
# This will be an integer division of F_USB below, as it is sourced by
|
||||||
|
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||||
|
# does not *change* the processor frequency - it should merely be updated to
|
||||||
|
# reflect the processor speed set externally so that the code can use accurate
|
||||||
|
# software delays.
|
||||||
|
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)
|
||||||
|
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
|
#NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
|
||||||
|
|
||||||
|
|
||||||
|
# PS/2 Options
|
||||||
|
#
|
||||||
|
PS2_USE_USART = yes # uses hardware USART engine for PS/2 signal receive(recomened)
|
||||||
|
#PS2_USE_BUSYWAIT = yes # uses primitive reference code
|
||||||
|
|
||||||
|
|
||||||
|
# Search Path
|
||||||
|
VPATH += $(TARGET_DIR)
|
||||||
|
VPATH += $(TOP_DIR)
|
||||||
|
|
||||||
|
include $(TOP_DIR)/protocol.mk
|
||||||
|
include $(TOP_DIR)/protocol/lufa.mk
|
||||||
|
include $(TOP_DIR)/common.mk
|
||||||
|
include $(TOP_DIR)/rules.mk
|
||||||
98
converter/ps2_usb/Makefile.tmk_rev2
Normal file
98
converter/ps2_usb/Makefile.tmk_rev2
Normal file
|
|
@ -0,0 +1,98 @@
|
||||||
|
#
|
||||||
|
# Makefile for TMK keyboard converter rev2
|
||||||
|
# https://github.com/tmk/keyboard_converter#pcb-rev2
|
||||||
|
#
|
||||||
|
# Target file name (without extension).
|
||||||
|
TARGET = ps2_usb_tmk_rev2
|
||||||
|
|
||||||
|
# Directory common source filess exist
|
||||||
|
TOP_DIR = ../..
|
||||||
|
|
||||||
|
# Directory keyboard dependent files exist
|
||||||
|
TARGET_DIR = .
|
||||||
|
|
||||||
|
# project specific files
|
||||||
|
SRC = keymap_common.c \
|
||||||
|
matrix.c \
|
||||||
|
led.c
|
||||||
|
|
||||||
|
ifdef KEYMAP
|
||||||
|
SRC := keymap_$(KEYMAP).c $(SRC)
|
||||||
|
else
|
||||||
|
SRC := keymap_plain.c $(SRC)
|
||||||
|
endif
|
||||||
|
|
||||||
|
CONFIG_H = config_tmk_rev2.h
|
||||||
|
|
||||||
|
|
||||||
|
# MCU name
|
||||||
|
MCU = atmega32u2
|
||||||
|
|
||||||
|
# Processor frequency.
|
||||||
|
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||||
|
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||||
|
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||||
|
# automatically to create a 32-bit value in your source code.
|
||||||
|
#
|
||||||
|
# This will be an integer division of F_USB below, as it is sourced by
|
||||||
|
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||||
|
# does not *change* the processor frequency - it should merely be updated to
|
||||||
|
# reflect the processor speed set externally so that the code can use accurate
|
||||||
|
# software delays.
|
||||||
|
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)
|
||||||
|
|
||||||
|
|
||||||
|
# Boot Section Size in *bytes*
|
||||||
|
# Teensy halfKay 512
|
||||||
|
# Teensy++ halfKay 1024
|
||||||
|
# Atmel DFU loader 4096
|
||||||
|
# LUFA bootloader 4096
|
||||||
|
# USBaspLoader 2048
|
||||||
|
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||||
|
|
||||||
|
|
||||||
|
# Build Options
|
||||||
|
# comment out to disable the options.
|
||||||
|
#
|
||||||
|
#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||||
|
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
|
#NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
|
||||||
|
|
||||||
|
|
||||||
|
# PS/2 Options
|
||||||
|
#
|
||||||
|
PS2_USE_INT = yes # uses external interrupt for falling edge of PS/2 clock pin
|
||||||
|
#PS2_USE_BUSYWAIT = yes # uses primitive reference code
|
||||||
|
|
||||||
|
|
||||||
|
# Search Path
|
||||||
|
VPATH += $(TARGET_DIR)
|
||||||
|
VPATH += $(TOP_DIR)
|
||||||
|
|
||||||
|
include $(TOP_DIR)/protocol.mk
|
||||||
|
include $(TOP_DIR)/protocol/lufa.mk
|
||||||
|
include $(TOP_DIR)/common.mk
|
||||||
|
include $(TOP_DIR)/rules.mk
|
||||||
|
|
@ -1,11 +1,50 @@
|
||||||
PS/2 to USB keyboard converter
|
PS/2 to USB keyboard converter
|
||||||
==============================
|
==============================
|
||||||
This firmware converts PS/2 keyboard protocol to USB and supports only Scan Code Set 2.
|
This firmware converts PS/2 keyboard protocol to USB.(It supports Scan Code Set 2.)
|
||||||
|
|
||||||
|
|
||||||
|
Connect Wires
|
||||||
|
-------------
|
||||||
|
In case of Teensy2.0(ATMega32U4):
|
||||||
|
|
||||||
|
1. Connect **Vcc** and **GND**.
|
||||||
|
2. Connect **Clock** and **Data** line.
|
||||||
|
- **Interrupt**: **Clock** is on `PD1` and **Data** on `PD0`.(Recommended. Soarer's converter compatible)
|
||||||
|
- **Busywait**: **Clock** is on `PD1` and **Data** on `PD0`.
|
||||||
|
- **USART**: **Clock** is on `PD5` and **Data** on `PD2`.
|
||||||
|
3. Optionally you need pull-up register. 1K-10K Ohm is OK.
|
||||||
|
|
||||||
|
To change pin configuration edit config.h.
|
||||||
|
|
||||||
|
|
||||||
|
Build Firmware
|
||||||
|
--------------
|
||||||
|
For **PJRC Teensy** just run `make`:
|
||||||
|
|
||||||
|
$ make clean
|
||||||
|
$ make
|
||||||
|
|
||||||
|
To select keymap:
|
||||||
|
|
||||||
|
$ make clean
|
||||||
|
$ make KEYMAP=[plain|jis|spacefn|...]
|
||||||
|
|
||||||
|
After that you will find HEX file `ps2_usb_lufa.hex` in current directory.
|
||||||
|
|
||||||
|
|
||||||
|
- For **TMK converter Rev.1** use `make -f Makefile.tmk_rev1` instead of `make` and HEX file is `ps2_usb_tmk_rev1.hex`.
|
||||||
|
|
||||||
|
- For **TMK converter Rev.2** use `make -f Makefile.tmk_rev2` instead of `make` and HEX file is `ps2_usb_tmk_rev2.hex`.
|
||||||
|
|
||||||
|
|
||||||
|
Keymap
|
||||||
|
------
|
||||||
|
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `keymap_<name>.c` and see keymap document(you can find in README.md of top directory) and existent keymap files.
|
||||||
|
|
||||||
|
|
||||||
PS/2 signal handling implementations
|
PS/2 signal handling implementations
|
||||||
------------------------------------
|
------------------------------------
|
||||||
Following three methods are used to implement PS/2 signal handling.
|
Following three methods can be used to implement PS/2 signal handling.
|
||||||
|
|
||||||
### Simple and stupid busy-wait(ps2_busywait.c)
|
### Simple and stupid busy-wait(ps2_busywait.c)
|
||||||
This is expected to implemented with portable C code for reference.
|
This is expected to implemented with portable C code for reference.
|
||||||
|
|
@ -17,36 +56,6 @@ Following three methods are used to implement PS/2 signal handling.
|
||||||
To select method edit Makefile.
|
To select method edit Makefile.
|
||||||
|
|
||||||
|
|
||||||
Connect Wires
|
|
||||||
-------------
|
|
||||||
In case of Teensy2.0(ATMega32U4):
|
|
||||||
|
|
||||||
1. Connect Vcc and GND.
|
|
||||||
2. Connect Clock and Data line.
|
|
||||||
- Busywait: Clock is on PD5 and Data on PD2.
|
|
||||||
- Interrupt: Clock is on PD1 and Data on PD2.
|
|
||||||
- USART: Clock is on PD5 and Data on PD2.
|
|
||||||
3. Optionally you need pull-up register. 1K-10K Ohm is OK.
|
|
||||||
|
|
||||||
To change pin configuration edit config.h.
|
|
||||||
|
|
||||||
|
|
||||||
Build Firmware
|
|
||||||
--------------
|
|
||||||
Just run `make`:
|
|
||||||
|
|
||||||
$ make
|
|
||||||
|
|
||||||
To select keymap:
|
|
||||||
|
|
||||||
$ make KEYMAP=[plain|jis|spacefn|...]
|
|
||||||
|
|
||||||
|
|
||||||
Keymap
|
|
||||||
------
|
|
||||||
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `keymap_<name>.c` and see keymap document(you can find in top README.md) and existent keymap files.
|
|
||||||
|
|
||||||
|
|
||||||
V-USB Support
|
V-USB Support
|
||||||
-------------
|
-------------
|
||||||
You can also use this converter on ATmega(168/328) with V-USB instead of Teensy.
|
You can also use this converter on ATmega(168/328) with V-USB instead of Teensy.
|
||||||
|
|
|
||||||
147
converter/ps2_usb/config_tmk_rev1.h
Normal file
147
converter/ps2_usb/config_tmk_rev1.h
Normal file
|
|
@ -0,0 +1,147 @@
|
||||||
|
/*
|
||||||
|
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CONFIG_H
|
||||||
|
#define CONFIG_H
|
||||||
|
|
||||||
|
#include <avr/interrupt.h>
|
||||||
|
|
||||||
|
#define VENDOR_ID 0xFEED
|
||||||
|
#define PRODUCT_ID 0x6512
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER t.m.k.
|
||||||
|
#define PRODUCT PS/2 keyboard converter
|
||||||
|
#define DESCRIPTION convert PS/2 keyboard to USB
|
||||||
|
|
||||||
|
|
||||||
|
/* matrix size */
|
||||||
|
#define MATRIX_ROWS 32 // keycode bit: 3-0
|
||||||
|
#define MATRIX_COLS 8 // keycode bit: 6-4
|
||||||
|
|
||||||
|
|
||||||
|
/* key combination for command */
|
||||||
|
#define IS_COMMAND() ( \
|
||||||
|
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) || \
|
||||||
|
keyboard_report->mods == (MOD_BIT(KC_LCTRL) | MOD_BIT(KC_RSHIFT)) \
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
//#define NO_SUSPEND_POWER_DOWN
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PS/2 Busywait
|
||||||
|
*/
|
||||||
|
#ifdef PS2_USE_BUSYWAIT
|
||||||
|
#define PS2_CLOCK_PORT PORTD
|
||||||
|
#define PS2_CLOCK_PIN PIND
|
||||||
|
#define PS2_CLOCK_DDR DDRD
|
||||||
|
#define PS2_CLOCK_BIT 5
|
||||||
|
#define PS2_DATA_PORT PORTD
|
||||||
|
#define PS2_DATA_PIN PIND
|
||||||
|
#define PS2_DATA_DDR DDRD
|
||||||
|
#define PS2_DATA_BIT 2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PS/2 USART
|
||||||
|
*/
|
||||||
|
#ifdef PS2_USE_USART
|
||||||
|
#if defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__)
|
||||||
|
/* XCK for clock line and RXD for data line */
|
||||||
|
#define PS2_CLOCK_PORT PORTD
|
||||||
|
#define PS2_CLOCK_PIN PIND
|
||||||
|
#define PS2_CLOCK_DDR DDRD
|
||||||
|
#define PS2_CLOCK_BIT 5
|
||||||
|
#define PS2_DATA_PORT PORTD
|
||||||
|
#define PS2_DATA_PIN PIND
|
||||||
|
#define PS2_DATA_DDR DDRD
|
||||||
|
#define PS2_DATA_BIT 2
|
||||||
|
/* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */
|
||||||
|
/* set DDR of CLOCK as input to be slave */
|
||||||
|
#define PS2_USART_INIT() do { \
|
||||||
|
PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT); \
|
||||||
|
PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT); \
|
||||||
|
UCSR1C = ((1 << UMSEL10) | \
|
||||||
|
(3 << UPM10) | \
|
||||||
|
(0 << USBS1) | \
|
||||||
|
(3 << UCSZ10) | \
|
||||||
|
(0 << UCPOL1)); \
|
||||||
|
UCSR1A = 0; \
|
||||||
|
UBRR1H = 0; \
|
||||||
|
UBRR1L = 0; \
|
||||||
|
} while (0)
|
||||||
|
#define PS2_USART_RX_INT_ON() do { \
|
||||||
|
UCSR1B = ((1 << RXCIE1) | \
|
||||||
|
(1 << RXEN1)); \
|
||||||
|
} while (0)
|
||||||
|
#define PS2_USART_RX_POLL_ON() do { \
|
||||||
|
UCSR1B = (1 << RXEN1); \
|
||||||
|
} while (0)
|
||||||
|
#define PS2_USART_OFF() do { \
|
||||||
|
UCSR1C = 0; \
|
||||||
|
UCSR1B &= ~((1 << RXEN1) | \
|
||||||
|
(1 << TXEN1)); \
|
||||||
|
} while (0)
|
||||||
|
#define PS2_USART_RX_READY (UCSR1A & (1<<RXC1))
|
||||||
|
#define PS2_USART_RX_DATA UDR1
|
||||||
|
#define PS2_USART_ERROR (UCSR1A & ((1<<FE1) | (1<<DOR1) | (1<<UPE1)))
|
||||||
|
#define PS2_USART_RX_VECT USART1_RX_vect
|
||||||
|
#elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega168P__) || defined(__AVR_ATmega328P__)
|
||||||
|
/* XCK for clock line and RXD for data line */
|
||||||
|
#define PS2_CLOCK_PORT PORTD
|
||||||
|
#define PS2_CLOCK_PIN PIND
|
||||||
|
#define PS2_CLOCK_DDR DDRD
|
||||||
|
#define PS2_CLOCK_BIT 4
|
||||||
|
#define PS2_DATA_PORT PORTD
|
||||||
|
#define PS2_DATA_PIN PIND
|
||||||
|
#define PS2_DATA_DDR DDRD
|
||||||
|
#define PS2_DATA_BIT 0
|
||||||
|
/* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */
|
||||||
|
/* set DDR of CLOCK as input to be slave */
|
||||||
|
#define PS2_USART_INIT() do { \
|
||||||
|
PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT); \
|
||||||
|
PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT); \
|
||||||
|
UCSR0C = ((1 << UMSEL00) | \
|
||||||
|
(3 << UPM00) | \
|
||||||
|
(0 << USBS0) | \
|
||||||
|
(3 << UCSZ00) | \
|
||||||
|
(0 << UCPOL0)); \
|
||||||
|
UCSR0A = 0; \
|
||||||
|
UBRR0H = 0; \
|
||||||
|
UBRR0L = 0; \
|
||||||
|
} while (0)
|
||||||
|
#define PS2_USART_RX_INT_ON() do { \
|
||||||
|
UCSR0B = ((1 << RXCIE0) | \
|
||||||
|
(1 << RXEN0)); \
|
||||||
|
} while (0)
|
||||||
|
#define PS2_USART_RX_POLL_ON() do { \
|
||||||
|
UCSR0B = (1 << RXEN0); \
|
||||||
|
} while (0)
|
||||||
|
#define PS2_USART_OFF() do { \
|
||||||
|
UCSR0C = 0; \
|
||||||
|
UCSR0B &= ~((1 << RXEN0) | \
|
||||||
|
(1 << TXEN0)); \
|
||||||
|
} while (0)
|
||||||
|
#define PS2_USART_RX_READY (UCSR0A & (1<<RXC0))
|
||||||
|
#define PS2_USART_RX_DATA UDR0
|
||||||
|
#define PS2_USART_ERROR (UCSR0A & ((1<<FE0) | (1<<DOR0) | (1<<UPE0)))
|
||||||
|
#define PS2_USART_RX_VECT USART_RX_vect
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
85
converter/ps2_usb/config_tmk_rev2.h
Normal file
85
converter/ps2_usb/config_tmk_rev2.h
Normal file
|
|
@ -0,0 +1,85 @@
|
||||||
|
/*
|
||||||
|
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CONFIG_H
|
||||||
|
#define CONFIG_H
|
||||||
|
|
||||||
|
#include <avr/interrupt.h>
|
||||||
|
|
||||||
|
#define VENDOR_ID 0xFEED
|
||||||
|
#define PRODUCT_ID 0x6512
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER t.m.k.
|
||||||
|
#define PRODUCT PS/2 keyboard converter
|
||||||
|
#define DESCRIPTION convert PS/2 keyboard to USB
|
||||||
|
|
||||||
|
|
||||||
|
/* matrix size */
|
||||||
|
#define MATRIX_ROWS 32 // keycode bit: 3-0
|
||||||
|
#define MATRIX_COLS 8 // keycode bit: 6-4
|
||||||
|
|
||||||
|
|
||||||
|
/* key combination for command */
|
||||||
|
#define IS_COMMAND() ( \
|
||||||
|
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
//#define NO_SUSPEND_POWER_DOWN
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PS/2 Busywait
|
||||||
|
*/
|
||||||
|
#ifdef PS2_USE_BUSYWAIT
|
||||||
|
#define PS2_CLOCK_PORT PORTD
|
||||||
|
#define PS2_CLOCK_PIN PIND
|
||||||
|
#define PS2_CLOCK_DDR DDRD
|
||||||
|
#define PS2_CLOCK_BIT 1
|
||||||
|
#define PS2_DATA_PORT PORTD
|
||||||
|
#define PS2_DATA_PIN PIND
|
||||||
|
#define PS2_DATA_DDR DDRD
|
||||||
|
#define PS2_DATA_BIT 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PS/2 Pin interrupt
|
||||||
|
*/
|
||||||
|
#ifdef PS2_USE_INT
|
||||||
|
/* uses INT1 for clock line(ATMega32U4) */
|
||||||
|
#define PS2_CLOCK_PORT PORTD
|
||||||
|
#define PS2_CLOCK_PIN PIND
|
||||||
|
#define PS2_CLOCK_DDR DDRD
|
||||||
|
#define PS2_CLOCK_BIT 1
|
||||||
|
#define PS2_DATA_PORT PORTD
|
||||||
|
#define PS2_DATA_PIN PIND
|
||||||
|
#define PS2_DATA_DDR DDRD
|
||||||
|
#define PS2_DATA_BIT 0
|
||||||
|
#define PS2_INT_INIT() do { \
|
||||||
|
EICRA |= ((1<<ISC11) | \
|
||||||
|
(0<<ISC10)); \
|
||||||
|
} while (0)
|
||||||
|
#define PS2_INT_ON() do { \
|
||||||
|
EIMSK |= (1<<INT1); \
|
||||||
|
} while (0)
|
||||||
|
#define PS2_INT_OFF() do { \
|
||||||
|
EIMSK &= ~(1<<INT1); \
|
||||||
|
} while (0)
|
||||||
|
#define PS2_INT_VECT INT1_vect
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -35,11 +35,11 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
* ,-----------------------------------------------------------.
|
* ,-----------------------------------------------------------.
|
||||||
* |` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete |
|
* |` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete |
|
||||||
* |-----------------------------------------------------------|
|
* |-----------------------------------------------------------|
|
||||||
* | | | | | | | |Hom|Up |End|Psc|Slk|Pau|Ins |
|
* | | | |Esc| | | |Hom|Up |End|Psc|Slk|Pau|Ins |
|
||||||
* |-----------------------------------------------------------|
|
* |-----------------------------------------------------------|
|
||||||
* | | | | | | |PgU|Lef|Dow|Rig| | | |
|
* | | | | | | |PgU|Lef|Dow|Rig| | | |
|
||||||
* |-----------------------------------------------------------|
|
* |-----------------------------------------------------------|
|
||||||
* | | | | | |Spc|PgD|` |~ | | | |
|
* | | | | | |Spc|PgD|` |~ | |Men| |
|
||||||
* |-----------------------------------------------------------|
|
* |-----------------------------------------------------------|
|
||||||
* | | | | | | | | |
|
* | | | | | | | | |
|
||||||
* `-----------------------------------------------------------'
|
* `-----------------------------------------------------------'
|
||||||
|
|
@ -49,7 +49,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
|
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, DEL, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
|
||||||
TRNS,TRNS,TRNS,ESC, TRNS,TRNS,TRNS,HOME,UP, END, PSCR,SLCK,PAUS,INS, DEL, END, PGDN, P7, P8, P9,
|
TRNS,TRNS,TRNS,ESC, TRNS,TRNS,TRNS,HOME,UP, END, PSCR,SLCK,PAUS,INS, DEL, END, PGDN, P7, P8, P9,
|
||||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PGUP,LEFT,DOWN,RGHT,TRNS,TRNS, TRNS, P4, P5, P6, PPLS,
|
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PGUP,LEFT,DOWN,RGHT,TRNS,TRNS, TRNS, P4, P5, P6, PPLS,
|
||||||
TRNS,TRNS,TRNS,TRNS,TRNS,SPC, PGDN,GRV, FN1, TRNS,TRNS, TRNS, UP, P1, P2, P3,
|
TRNS,TRNS,TRNS,TRNS,TRNS,SPC, PGDN,GRV, FN1, TRNS,APP, TRNS, UP, P1, P2, P3,
|
||||||
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS, LEFT,DOWN,RGHT, P0, PDOT,PENT
|
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS, LEFT,DOWN,RGHT, P0, PDOT,PENT
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -20,9 +20,10 @@ CONFIG_H = config.h
|
||||||
# MCU name, you MUST set this to match the board you are using
|
# 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
|
# type "make clean" after changing this, so all files will be rebuilt
|
||||||
#MCU = at90usb162 # Teensy 1.0
|
#MCU = at90usb162 # Teensy 1.0
|
||||||
MCU = atmega32u4 # Teensy 2.0
|
#MCU = atmega32u4 # Teensy 2.0
|
||||||
#MCU = at90usb646 # Teensy++ 1.0
|
#MCU = at90usb646 # Teensy++ 1.0
|
||||||
#MCU = at90usb1286 # Teensy++ 2.0
|
#MCU = at90usb1286 # Teensy++ 2.0
|
||||||
|
MCU = atmega32u2
|
||||||
|
|
||||||
|
|
||||||
# Processor frequency.
|
# Processor frequency.
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,8 @@ uint8_t matrix_cols(void)
|
||||||
|
|
||||||
void matrix_init(void)
|
void matrix_init(void)
|
||||||
{
|
{
|
||||||
|
DDRD |= (1<<6);
|
||||||
|
PORTD |= (1<<6);
|
||||||
debug_enable = true;
|
debug_enable = true;
|
||||||
|
|
||||||
serial_init();
|
serial_init();
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ SRC += keymap_common.c \
|
||||||
ifdef KEYMAP
|
ifdef KEYMAP
|
||||||
SRC := keymap_$(KEYMAP).c $(SRC)
|
SRC := keymap_$(KEYMAP).c $(SRC)
|
||||||
else
|
else
|
||||||
SRC := keymap_hasu.c $(SRC)
|
SRC := keymap_hhkb.c $(SRC)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
CONFIG_H = config.h
|
CONFIG_H = config.h
|
||||||
|
|
@ -102,7 +102,7 @@ ARCH = AVR8
|
||||||
F_USB = $(F_CPU)
|
F_USB = $(F_CPU)
|
||||||
|
|
||||||
# Interrupt driven control endpoint task
|
# Interrupt driven control endpoint task
|
||||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
#OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
# Boot Section Size in *bytes*
|
# Boot Section Size in *bytes*
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,7 @@ ARCH = AVR8
|
||||||
F_USB = $(F_CPU)
|
F_USB = $(F_CPU)
|
||||||
|
|
||||||
# Interrupt driven control endpoint task
|
# Interrupt driven control endpoint task
|
||||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
#OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
|
||||||
|
|
||||||
# Boot Section Size in *bytes*
|
# Boot Section Size in *bytes*
|
||||||
|
|
@ -122,8 +122,8 @@ MOUSEKEY_ENABLE = yes # Mouse keys
|
||||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||||
#CONSOLE_ENABLE = yes # Console for debug
|
#CONSOLE_ENABLE = yes # Console for debug
|
||||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||||
#NKRO_ENABLE = yes # USB Nkey Rollover
|
NKRO_ENABLE = yes # USB Nkey Rollover
|
||||||
#KEYMAP_SECTION_ENABLE = yes # fixed address keymap for keymap editor
|
KEYMAP_SECTION_ENABLE = yes # fixed address keymap for keymap editor
|
||||||
|
|
||||||
|
|
||||||
# Search Path
|
# Search Path
|
||||||
|
|
|
||||||
|
|
@ -15,20 +15,21 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
|
||||||
* |-----------------------------------------------------------|
|
* |-----------------------------------------------------------|
|
||||||
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Backs|
|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Backs|
|
||||||
* |-----------------------------------------------------------|
|
* |-----------------------------------------------------------|
|
||||||
* |Contro| A| S| D| F| G| H| J| K| L|Fn3| '|Fn4 |
|
* |Contro| A| S| D| F| G| H| J| K| L|Fn3| '|Fn6 |
|
||||||
* |-----------------------------------------------------------|
|
* |-----------------------------------------------------------|
|
||||||
* |Fn5 | Z| X| C| V| B| N| M| ,| .|Fn2|Shift |Fn1|
|
* |Fn7 | Z| X| C| V| B| N| M| ,| .|Fn2|Shift |Fn1|
|
||||||
* `-----------------------------------------------------------'
|
* `-----------------------------------------------------------'
|
||||||
* |Gui|Alt | Fn6 |Alt |Fn7|
|
* |Gui|Alt | Fn4 |Fn5 |Gui|
|
||||||
* `-------------------------------------------'
|
* `-------------------------------------------'
|
||||||
*/
|
*/
|
||||||
|
[0] = \
|
||||||
KEYMAP(ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS,GRV, \
|
KEYMAP(ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS,GRV, \
|
||||||
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \
|
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \
|
||||||
LCTL,A, S, D, F, G, H, J, K, L, FN3, QUOT,FN4, \
|
LCTL,A, S, D, F, G, H, J, K, L, FN3, QUOT,FN6, \
|
||||||
FN5, Z, X, C, V, B, N, M, COMM,DOT, FN2, RSFT,FN1, \
|
FN7, Z, X, C, V, B, N, M, COMM,DOT, FN2, RSFT,FN1, \
|
||||||
LGUI,LALT, FN6, RALT,RGUI),
|
LGUI,LALT, FN4, FN5, RGUI),
|
||||||
|
|
||||||
/* Layer 1: HHKB mode (HHKB Fn)
|
/* Layer 1: HHKB mode[HHKB Fn]
|
||||||
* ,-----------------------------------------------------------.
|
* ,-----------------------------------------------------------.
|
||||||
* |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
|
* |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
|
||||||
* |-----------------------------------------------------------|
|
* |-----------------------------------------------------------|
|
||||||
|
|
@ -41,13 +42,14 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
|
||||||
* |Gui|Alt | Space |Alt |Gui|
|
* |Gui|Alt | Space |Alt |Gui|
|
||||||
* `-------------------------------------------'
|
* `-------------------------------------------'
|
||||||
*/
|
*/
|
||||||
|
[1] = \
|
||||||
KEYMAP(GRV, 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, FN9, 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, \
|
||||||
LGUI,LALT, SPC, RALT,RGUI),
|
LGUI,LALT, SPC, RALT,RGUI),
|
||||||
|
|
||||||
/* Layer 2: Vi mode (Slash)
|
/* Layer 2: Vi mode[Slash]
|
||||||
* ,-----------------------------------------------------------.
|
* ,-----------------------------------------------------------.
|
||||||
* |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
|
* |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
|
||||||
* |-----------------------------------------------------------|
|
* |-----------------------------------------------------------|
|
||||||
|
|
@ -60,13 +62,57 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
|
||||||
* |Gui|Alt | Space |Alt |Gui|
|
* |Gui|Alt | Space |Alt |Gui|
|
||||||
* `-------------------------------------------'
|
* `-------------------------------------------'
|
||||||
*/
|
*/
|
||||||
|
[2] = \
|
||||||
KEYMAP(GRV, 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, \
|
||||||
LGUI,LALT, SPC, RALT,RGUI),
|
LGUI,LALT, SPC, RALT,RGUI),
|
||||||
|
|
||||||
/* Layer 3: Mouse mode (Semicolon)
|
/* Layer 3: Mouse mode(IJKL)[Semicolon]
|
||||||
|
* ,-----------------------------------------------------------.
|
||||||
|
* |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |Tab | | | | | |MwL|MwD|McU|MwU|MwR|Wbk|Wfr|Alt-T|
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |Contro| | | | | |Mb2|McL|McD|McR|Fn | |Return |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |Shift | | | | |Mb3|Mb2|Mb1|Mb4|Mb5| |Shift | |
|
||||||
|
* `-----------------------------------------------------------'
|
||||||
|
* |Gui |Alt | Mb1 |Fn |Fn |
|
||||||
|
* `--------------------------------------------'
|
||||||
|
* Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel8
|
||||||
|
*/
|
||||||
|
[3] = \
|
||||||
|
KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
|
||||||
|
FN8, NO, NO, NO, NO, NO, WH_L,WH_D,MS_U,WH_U,WH_R,WBAK,WFWD,FN8, \
|
||||||
|
LCTL,ACL0,ACL1,ACL2,ACL2,NO, NO, MS_L,MS_D,MS_R,TRNS,NO, ENT, \
|
||||||
|
LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,BTN4,BTN5,NO, RSFT,NO, \
|
||||||
|
LGUI,LALT, BTN1, TRNS,TRNS),
|
||||||
|
|
||||||
|
/* Layer 5: Mouse mode(IJKL)[Space]
|
||||||
|
* ,-----------------------------------------------------------.
|
||||||
|
* |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |Tab | | | | | |MwL|MwD|McU|MwU|MwR|Wbk|Wfr|Alt-T|
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |Contro| | | | | |Mb2|McL|McD|McR|Mb1| |Return |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |Shift | | | | |Mb3|Mb2|Mb1|Mb4|Mb5| |Shift | |
|
||||||
|
* `-----------------------------------------------------------'
|
||||||
|
* |Gui |Alt | Mb1 |Fn |Fn |
|
||||||
|
* `--------------------------------------------'
|
||||||
|
* Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel8
|
||||||
|
*/
|
||||||
|
[4] = \
|
||||||
|
KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
|
||||||
|
FN8, NO, NO, NO, NO, NO, WH_L,WH_D,MS_U,WH_U,WH_R,WBAK,WFWD,FN8, \
|
||||||
|
LCTL,VOLD,VOLU,MUTE,NO, NO, NO, MS_L,MS_D,MS_R,BTN1,NO, ENT, \
|
||||||
|
LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,BTN4,BTN5,NO, RSFT,NO, \
|
||||||
|
LGUI,LALT, TRNS, TRNS,TRNS),
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
/* Layer 3: Mouse mode(HJKL)[Semicolon]
|
||||||
* ,-----------------------------------------------------------.
|
* ,-----------------------------------------------------------.
|
||||||
* |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
|
* |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
|
||||||
* |-----------------------------------------------------------|
|
* |-----------------------------------------------------------|
|
||||||
|
|
@ -86,7 +132,28 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
|
||||||
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, \
|
||||||
LGUI,LALT, BTN1, RALT,TRNS),
|
LGUI,LALT, BTN1, RALT,TRNS),
|
||||||
|
|
||||||
/* Layer 4: Matias half-qwerty keyboard style (Space)
|
/* Layer4: Mouse mode(HJKL)[Space]
|
||||||
|
* ,-----------------------------------------------------------.
|
||||||
|
* |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |Tab | | | | | |MwL|MwD|MwU|MwR| |Wbk|Wfr|Alt-T|
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |Contro| | | | | |McL|McD|McU|McR|Fn0| |Return |
|
||||||
|
* |-----------------------------------------------------------|
|
||||||
|
* |Shift | | | | |Mb3|Mb2|Mb1|Mb4|Mb5| |Shift | |
|
||||||
|
* `-----------------------------------------------------------'
|
||||||
|
* |Gui |Alt | Fn0 |Alt |Fn0|
|
||||||
|
* `--------------------------------------------'
|
||||||
|
* Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
|
||||||
|
*/
|
||||||
|
KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
|
||||||
|
FN8, NO, NO, NO, NO, NO, WH_L,WH_D,WH_U,WH_R,NO, WBAK,WFWD,FN8, \
|
||||||
|
LCTL,NO, ACL0,ACL1,ACL2,NO, MS_L,MS_D,MS_U,MS_R,BTN1,NO, ENT, \
|
||||||
|
LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,BTN4,BTN5,NO, RSFT,NO, \
|
||||||
|
LGUI,LALT, TRNS, RALT,RGUI),
|
||||||
|
#endif
|
||||||
|
#if 0
|
||||||
|
/* Layer x: Matias half-qwerty keyboard style[Space]
|
||||||
* ,-----------------------------------------------------------.
|
* ,-----------------------------------------------------------.
|
||||||
* | -| 0| 9| 8| 7| 6| 5| 4| 3| 2| 1| | | |Esc|
|
* | -| 0| 9| 8| 7| 6| 5| 4| 3| 2| 1| | | |Esc|
|
||||||
* |-----------------------------------------------------------|
|
* |-----------------------------------------------------------|
|
||||||
|
|
@ -104,26 +171,7 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
|
||||||
LCTL,SCLN,L, K, J, H, G, F, D, S, A, RCTL,RCTL, \
|
LCTL,SCLN,L, K, J, H, G, F, D, S, A, RCTL,RCTL, \
|
||||||
LSFT,SLSH,DOT, COMM,M, N, B, V, C, X, Z, RSFT,NO, \
|
LSFT,SLSH,DOT, COMM,M, N, B, V, C, X, Z, RSFT,NO, \
|
||||||
LGUI,LALT, TRNS, RALT,RGUI),
|
LGUI,LALT, TRNS, RALT,RGUI),
|
||||||
|
#endif
|
||||||
/* Layer5: another Mouse mode (Space)
|
|
||||||
* ,-----------------------------------------------------------.
|
|
||||||
* |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* |Tab | | | | | |MwL|MwD|MwU|MwR| |Wbk|Wfr|Close|
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* |Contro| | | | | |McL|McD|McU|McR|Fn0| |Return |
|
|
||||||
* |-----------------------------------------------------------|
|
|
||||||
* |Shift | | | | |Mb3|Mb2|Mb1|Mb4|Mb5| |Shift | |
|
|
||||||
* `-----------------------------------------------------------'
|
|
||||||
* |Gui |Alt | Fn0 |Alt |Fn0|
|
|
||||||
* `--------------------------------------------'
|
|
||||||
* 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, \
|
|
||||||
TAB, NO, NO, NO, NO, NO, WH_L,WH_D,WH_U,WH_R,WSTP,WBAK,WFWD,FN8, \
|
|
||||||
LCTL,NO, ACL0,ACL1,ACL2,NO, MS_L,MS_D,MS_U,MS_R,NO, NO, ENT, \
|
|
||||||
LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,BTN4,BTN5,NO, RSFT,NO, \
|
|
||||||
LGUI,LALT, TRNS, RALT,RGUI),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -131,14 +179,12 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
|
||||||
/* id for user defined functions */
|
/* id for user defined functions */
|
||||||
enum function_id {
|
enum function_id {
|
||||||
LSHIFT_LPAREN,
|
LSHIFT_LPAREN,
|
||||||
RSHIFT_RPAREN,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum macro_id {
|
enum macro_id {
|
||||||
LSHIFT_PAREN,
|
|
||||||
RSHIFT_PAREN,
|
|
||||||
HELLO,
|
HELLO,
|
||||||
VOLUP,
|
VOLUP,
|
||||||
|
ALT_TAB,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -154,21 +200,17 @@ const uint16_t fn_actions[] PROGMEM = {
|
||||||
[1] = ACTION_LAYER_TAP_TOGGLE(1), // HHKB layer(toggle with 5 taps)
|
[1] = ACTION_LAYER_TAP_TOGGLE(1), // HHKB layer(toggle with 5 taps)
|
||||||
[2] = ACTION_LAYER_TAP_KEY(2, KC_SLASH), // Cursor layer with Slash*
|
[2] = ACTION_LAYER_TAP_KEY(2, KC_SLASH), // Cursor layer with Slash*
|
||||||
[3] = ACTION_LAYER_TAP_KEY(3, KC_SCLN), // Mousekey layer with Semicolon*
|
[3] = ACTION_LAYER_TAP_KEY(3, KC_SCLN), // Mousekey layer with Semicolon*
|
||||||
[4] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_ENT), // RControl with tap Enter*
|
[4] = ACTION_LAYER_TAP_KEY(4, KC_SPC), // Mousekey layer with Space
|
||||||
[5] = ACTION_MODS_ONESHOT(MOD_LSFT), // Oneshot Shift*
|
[5] = ACTION_LAYER_MOMENTARY(4), // Mousekey layer(IJKL)
|
||||||
[6] = ACTION_LAYER_TAP_KEY(5, KC_SPC), // Mousekey layer with Space
|
[6] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_ENT), // RControl with tap Enter
|
||||||
[7] = ACTION_LAYER_TOGGLE(3), // Mousekey layer(toggle)
|
[7] = ACTION_MODS_ONESHOT(MOD_LSFT), // Oneshot Shift
|
||||||
[8] = ACTION_MODS_KEY(MOD_LCTL, KC_W), // Close Tab
|
[8] = ACTION_MACRO(ALT_TAB), // Application switching
|
||||||
[9] = ACTION_MODS_KEY(MOD_LSFT, KC_4), // Shift stuck test
|
|
||||||
|
|
||||||
// [8] = ACTION_LMOD_TAP_KEY(KC_LCTL, KC_BSPC), // LControl with tap Backspace
|
// [x] = ACTION_LMOD_TAP_KEY(KC_LCTL, KC_BSPC), // LControl with tap Backspace
|
||||||
// [9] = ACTION_LMOD_TAP_KEY(KC_LCTL, KC_ESC), // LControl with tap Esc
|
// [x] = ACTION_LMOD_TAP_KEY(KC_LCTL, KC_ESC), // LControl with tap Esc
|
||||||
[11] = ACTION_FUNCTION_TAP(LSHIFT_LPAREN), // Function: LShift with tap '('
|
// [x] = ACTION_FUNCTION_TAP(LSHIFT_LPAREN), // Function: LShift with tap '('
|
||||||
[12] = ACTION_FUNCTION_TAP(RSHIFT_RPAREN), // Function: RShift with tap ')'
|
// [x] = ACTION_MACRO(HELLO), // Macro: say hello
|
||||||
// [13] = ACTION_MACRO_TAP(LSHIFT_PAREN), // Macro: LShift with tap '('
|
// [x] = ACTION_MACRO(VOLUP), // Macro: media key
|
||||||
// [14] = ACTION_MACRO_TAP(RSHIFT_PAREN), // Macro: RShift with tap ')'
|
|
||||||
// [15] = ACTION_MACRO(HELLO), // Macro: say hello
|
|
||||||
// [9] = ACTION_MACRO(VOLUP), // Macro: media key
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -177,34 +219,19 @@ const uint16_t fn_actions[] PROGMEM = {
|
||||||
*/
|
*/
|
||||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
{
|
{
|
||||||
keyevent_t event = record->event;
|
|
||||||
tap_t tap = record->tap;
|
|
||||||
|
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case LSHIFT_PAREN:
|
|
||||||
if (tap.count > 0 && !tap.interrupted) {
|
|
||||||
return (event.pressed ?
|
|
||||||
MACRO( D(LSHIFT), D(9), U(9), U(LSHIFT), END ) : MACRO_NONE);
|
|
||||||
} else {
|
|
||||||
return (event.pressed ?
|
|
||||||
MACRO( D(LSHIFT), END ) : MACRO( U(LSHIFT), END ) );
|
|
||||||
}
|
|
||||||
case RSHIFT_PAREN:
|
|
||||||
if (tap.count > 0 && !tap.interrupted) {
|
|
||||||
return (event.pressed ?
|
|
||||||
MACRO( D(RSHIFT), D(0), U(0), U(RSHIFT), END ) : MACRO_NONE);
|
|
||||||
} else {
|
|
||||||
return (event.pressed ?
|
|
||||||
MACRO( D(RSHIFT), END ) : MACRO( U(RSHIFT), END ) );
|
|
||||||
}
|
|
||||||
case HELLO:
|
case HELLO:
|
||||||
return (event.pressed ?
|
return (record->event.pressed ?
|
||||||
MACRO( I(0), T(H), T(E), T(L), T(L), W(255), T(O), END ) :
|
MACRO( I(0), T(H), T(E), T(L), T(L), W(255), T(O), END ) :
|
||||||
MACRO_NONE );
|
MACRO_NONE );
|
||||||
case VOLUP:
|
case VOLUP:
|
||||||
return (event.pressed ?
|
return (record->event.pressed ?
|
||||||
MACRO( D(VOLU), U(VOLU), END ) :
|
MACRO( D(VOLU), U(VOLU), END ) :
|
||||||
MACRO_NONE );
|
MACRO_NONE );
|
||||||
|
case ALT_TAB:
|
||||||
|
return (record->event.pressed ?
|
||||||
|
MACRO( D(LALT), D(TAB), END ) :
|
||||||
|
MACRO( U(TAB), END ));
|
||||||
}
|
}
|
||||||
return MACRO_NONE;
|
return MACRO_NONE;
|
||||||
}
|
}
|
||||||
|
|
@ -216,48 +243,36 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
*/
|
*/
|
||||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
|
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
{
|
{
|
||||||
keyevent_t event = record->event;
|
if (record->event.pressed) dprint("P"); else dprint("R");
|
||||||
tap_t tap = record->tap;
|
dprintf("%d", record->tap.count);
|
||||||
|
if (record->tap.interrupted) dprint("i");
|
||||||
|
dprint("\n");
|
||||||
|
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case LSHIFT_LPAREN:
|
case LSHIFT_LPAREN:
|
||||||
// LShft + tap '('
|
// Shift parentheses example: LShft + tap '('
|
||||||
// NOTE: cant use register_code to avoid conflicting with magic key bind
|
// http://stevelosh.com/blog/2012/10/a-modern-space-cadet/#shift-parentheses
|
||||||
if (event.pressed) {
|
// http://geekhack.org/index.php?topic=41989.msg1304899#msg1304899
|
||||||
if (tap.count == 0 || tap.interrupted) {
|
if (record->event.pressed) {
|
||||||
//add_mods(MOD_BIT(KC_LSHIFT));
|
if (record->tap.count > 0 && !record->tap.interrupted) {
|
||||||
layer_on(1);
|
if (record->tap.interrupted) {
|
||||||
|
dprint("tap interrupted\n");
|
||||||
|
register_mods(MOD_BIT(KC_LSHIFT));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
add_mods(MOD_BIT(KC_LSHIFT));
|
register_mods(MOD_BIT(KC_LSHIFT));
|
||||||
add_key(KC_9);
|
|
||||||
send_keyboard_report();
|
|
||||||
del_mods(MOD_BIT(KC_LSHIFT));
|
|
||||||
del_key(KC_9);
|
|
||||||
send_keyboard_report();
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (tap.count == 0 || tap.interrupted) {
|
if (record->tap.count > 0 && !(record->tap.interrupted)) {
|
||||||
//del_mods(MOD_BIT(KC_LSHIFT));
|
add_weak_mods(MOD_BIT(KC_LSHIFT));
|
||||||
layer_off(1);
|
send_keyboard_report();
|
||||||
}
|
register_code(KC_9);
|
||||||
}
|
unregister_code(KC_9);
|
||||||
break;
|
del_weak_mods(MOD_BIT(KC_LSHIFT));
|
||||||
case RSHIFT_RPAREN:
|
send_keyboard_report();
|
||||||
// RShift + tap ')'
|
record->tap.count = 0; // ad hoc: cancel tap
|
||||||
if (event.pressed) {
|
|
||||||
if (tap.count == 0 || tap.interrupted) {
|
|
||||||
add_mods(MOD_BIT(KC_RSHIFT));
|
|
||||||
} else {
|
} else {
|
||||||
add_mods(MOD_BIT(KC_RSHIFT));
|
unregister_mods(MOD_BIT(KC_LSHIFT));
|
||||||
add_key(KC_0);
|
|
||||||
send_keyboard_report();
|
|
||||||
del_mods(MOD_BIT(KC_RSHIFT));
|
|
||||||
del_key(KC_0);
|
|
||||||
send_keyboard_report();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (tap.count == 0 || tap.interrupted) {
|
|
||||||
del_mods(MOD_BIT(KC_RSHIFT));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -58,12 +58,53 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
* `-------------------------------------------'
|
* `-------------------------------------------'
|
||||||
*/
|
*/
|
||||||
KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,DEL, \
|
KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,DEL, \
|
||||||
TRNS,TRNS,TRNS,ESC, TRNS,TRNS,TRNS,HOME,UP, END, PSCR,SLCK,PAUS,INS, \
|
TRNS,TRNS,TRNS,ESC, TRNS,TRNS,TRNS,HOME,FN3, END, PSCR,SLCK,PAUS,INS, \
|
||||||
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PGUP,LEFT,DOWN,RGHT,TRNS,TRNS,TRNS, \
|
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PGUP,LEFT,DOWN,RGHT,TRNS,TRNS,TRNS, \
|
||||||
TRNS,TRNS,TRNS,TRNS,TRNS,SPC, PGDN,GRV, FN2, TRNS,TRNS,TRNS,NO, \
|
TRNS,TRNS,TRNS,TRNS,TRNS,SPC, PGDN,GRV, FN2, TRNS,TRNS,TRNS,NO, \
|
||||||
TRNS,TRNS, TRNS, TRNS,TRNS),
|
TRNS,TRNS, TRNS, TRNS,TRNS),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* user defined action function
|
||||||
|
*/
|
||||||
|
enum function_id {
|
||||||
|
CTRL_SPACE_I, // Ctrl + Up(SpaceFN) -> PgUp
|
||||||
|
};
|
||||||
|
|
||||||
|
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
|
||||||
|
{
|
||||||
|
# define MODS_CTRL_MASK (MOD_BIT(KC_LCTRL)|MOD_BIT(KC_RCTRL))
|
||||||
|
static uint8_t ctrl_space_i_prev_ctrl;
|
||||||
|
|
||||||
|
switch (id) {
|
||||||
|
// Ctrl + Up(SpaceFN) -> PgUp
|
||||||
|
case CTRL_SPACE_I:
|
||||||
|
ctrl_space_i_prev_ctrl = get_mods()&MODS_CTRL_MASK;
|
||||||
|
if (record->event.pressed) {
|
||||||
|
if (ctrl_space_i_prev_ctrl) {
|
||||||
|
del_mods(ctrl_space_i_prev_ctrl); // remove Ctrl
|
||||||
|
add_key(KC_PGUP);
|
||||||
|
send_keyboard_report(); // send PgUp without Ctrl
|
||||||
|
add_mods(ctrl_space_i_prev_ctrl); // return Ctrl but not sent
|
||||||
|
} else {
|
||||||
|
add_key(KC_UP);
|
||||||
|
send_keyboard_report();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (ctrl_space_i_prev_ctrl) {
|
||||||
|
del_key(KC_PGUP);
|
||||||
|
send_keyboard_report();
|
||||||
|
} else {
|
||||||
|
del_key(KC_UP);
|
||||||
|
send_keyboard_report();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Fn action definition
|
* Fn action definition
|
||||||
*/
|
*/
|
||||||
|
|
@ -71,5 +112,5 @@ const uint16_t PROGMEM fn_actions[] = {
|
||||||
[0] = ACTION_LAYER_MOMENTARY(1),
|
[0] = ACTION_LAYER_MOMENTARY(1),
|
||||||
[1] = ACTION_LAYER_TAP_KEY(2, KC_SPACE),
|
[1] = ACTION_LAYER_TAP_KEY(2, KC_SPACE),
|
||||||
[2] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV), // tilde
|
[2] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV), // tilde
|
||||||
|
[3] = ACTION_FUNCTION(CTRL_SPACE_I), // Ctrl + Up(SpaceFN) -> PgUp
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,12 @@
|
||||||
LUFA_DIR = protocol/lufa
|
LUFA_DIR = protocol/lufa
|
||||||
|
|
||||||
# Path to the LUFA library
|
# Path to the LUFA library
|
||||||
LUFA_PATH ?= protocol/lufa/LUFA-120730
|
ifeq (, $(wildcard $(TOP_DIR)/$(LUFA_DIR)/LUFA-git/LUFA/Version.h))
|
||||||
|
LUFA_PATH ?= $(LUFA_DIR)/LUFA-120730
|
||||||
|
else
|
||||||
|
LUFA_PATH ?= $(LUFA_DIR)/LUFA-git
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
# Create the LUFA source path variables by including the LUFA makefile
|
# Create the LUFA source path variables by including the LUFA makefile
|
||||||
ifneq (, $(wildcard $(TOP_DIR)/$(LUFA_PATH)/LUFA/Build/lufa_sources.mk))
|
ifneq (, $(wildcard $(TOP_DIR)/$(LUFA_PATH)/LUFA/Build/lufa_sources.mk))
|
||||||
|
|
@ -30,9 +35,12 @@ VPATH += $(TOP_DIR)/$(LUFA_PATH)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# LUFA library compile-time options and predefined tokens
|
# LUFA library compile-time options and predefined tokens
|
||||||
LUFA_OPTS = -D USB_DEVICE_ONLY
|
LUFA_OPTS = -DUSB_DEVICE_ONLY
|
||||||
LUFA_OPTS += -D USE_FLASH_DESCRIPTORS
|
LUFA_OPTS += -DUSE_FLASH_DESCRIPTORS
|
||||||
LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
|
LUFA_OPTS += -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
|
||||||
|
#LUFA_OPTS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||||
|
LUFA_OPTS += -DFIXED_CONTROL_ENDPOINT_SIZE=8
|
||||||
|
LUFA_OPTS += -DFIXED_NUM_CONFIGURATIONS=1
|
||||||
|
|
||||||
OPT_DEFS += -DF_USB=$(F_USB)UL
|
OPT_DEFS += -DF_USB=$(F_USB)UL
|
||||||
OPT_DEFS += -DARCH=ARCH_$(ARCH)
|
OPT_DEFS += -DARCH=ARCH_$(ARCH)
|
||||||
|
|
|
||||||
1
protocol/lufa/LUFA-git
Submodule
1
protocol/lufa/LUFA-git
Submodule
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit b6c18b2a7c544653efbe12a1d4e8ba65e7d83c35
|
||||||
|
|
@ -230,12 +230,12 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
|
||||||
{
|
{
|
||||||
.Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
|
.Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
|
||||||
|
|
||||||
.USBSpecification = VERSION_BCD(01.10),
|
.USBSpecification = VERSION_BCD(1,1,0),
|
||||||
.Class = USB_CSCP_NoDeviceClass,
|
.Class = USB_CSCP_NoDeviceClass,
|
||||||
.SubClass = USB_CSCP_NoDeviceSubclass,
|
.SubClass = USB_CSCP_NoDeviceSubclass,
|
||||||
.Protocol = USB_CSCP_NoDeviceProtocol,
|
.Protocol = USB_CSCP_NoDeviceProtocol,
|
||||||
|
|
||||||
.Endpoint0Size = 8,
|
.Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,
|
||||||
|
|
||||||
/* specified in config.h */
|
/* specified in config.h */
|
||||||
.VendorID = VENDOR_ID,
|
.VendorID = VENDOR_ID,
|
||||||
|
|
@ -246,7 +246,7 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
|
||||||
.ProductStrIndex = 0x02,
|
.ProductStrIndex = 0x02,
|
||||||
.SerialNumStrIndex = NO_DESCRIPTOR,
|
.SerialNumStrIndex = NO_DESCRIPTOR,
|
||||||
|
|
||||||
.NumberOfConfigurations = 1
|
.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
|
||||||
};
|
};
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
|
|
@ -292,7 +292,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
|
||||||
{
|
{
|
||||||
.Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
|
.Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
|
||||||
|
|
||||||
.HIDSpec = VERSION_BCD(01.11),
|
.HIDSpec = VERSION_BCD(1,1,1),
|
||||||
.CountryCode = 0x00,
|
.CountryCode = 0x00,
|
||||||
.TotalReportDescriptors = 1,
|
.TotalReportDescriptors = 1,
|
||||||
.HIDReportType = HID_DTYPE_Report,
|
.HIDReportType = HID_DTYPE_Report,
|
||||||
|
|
@ -333,7 +333,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
|
||||||
{
|
{
|
||||||
.Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
|
.Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
|
||||||
|
|
||||||
.HIDSpec = VERSION_BCD(01.11),
|
.HIDSpec = VERSION_BCD(1,1,1),
|
||||||
.CountryCode = 0x00,
|
.CountryCode = 0x00,
|
||||||
.TotalReportDescriptors = 1,
|
.TotalReportDescriptors = 1,
|
||||||
.HIDReportType = HID_DTYPE_Report,
|
.HIDReportType = HID_DTYPE_Report,
|
||||||
|
|
@ -375,7 +375,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
|
||||||
{
|
{
|
||||||
.Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
|
.Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
|
||||||
|
|
||||||
.HIDSpec = VERSION_BCD(01.11),
|
.HIDSpec = VERSION_BCD(1,1,1),
|
||||||
.CountryCode = 0x00,
|
.CountryCode = 0x00,
|
||||||
.TotalReportDescriptors = 1,
|
.TotalReportDescriptors = 1,
|
||||||
.HIDReportType = HID_DTYPE_Report,
|
.HIDReportType = HID_DTYPE_Report,
|
||||||
|
|
@ -417,7 +417,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
|
||||||
{
|
{
|
||||||
.Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
|
.Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
|
||||||
|
|
||||||
.HIDSpec = VERSION_BCD(01.11),
|
.HIDSpec = VERSION_BCD(1,1,1),
|
||||||
.CountryCode = 0x00,
|
.CountryCode = 0x00,
|
||||||
.TotalReportDescriptors = 1,
|
.TotalReportDescriptors = 1,
|
||||||
.HIDReportType = HID_DTYPE_Report,
|
.HIDReportType = HID_DTYPE_Report,
|
||||||
|
|
@ -469,7 +469,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
|
||||||
{
|
{
|
||||||
.Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
|
.Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
|
||||||
|
|
||||||
.HIDSpec = VERSION_BCD(01.11),
|
.HIDSpec = VERSION_BCD(1,1,1),
|
||||||
.CountryCode = 0x00,
|
.CountryCode = 0x00,
|
||||||
.TotalReportDescriptors = 1,
|
.TotalReportDescriptors = 1,
|
||||||
.HIDReportType = HID_DTYPE_Report,
|
.HIDReportType = HID_DTYPE_Report,
|
||||||
|
|
|
||||||
|
|
@ -137,13 +137,17 @@ typedef struct
|
||||||
|
|
||||||
#ifdef CONSOLE_ENABLE
|
#ifdef CONSOLE_ENABLE
|
||||||
# define CONSOLE_IN_EPNUM (EXTRAKEY_IN_EPNUM + 1)
|
# define CONSOLE_IN_EPNUM (EXTRAKEY_IN_EPNUM + 1)
|
||||||
# define CONSOLE_OUT_EPNUM (EXTRAKEY_IN_EPNUM + 2)
|
# define CONSOLE_OUT_EPNUM (EXTRAKEY_IN_EPNUM + 1)
|
||||||
|
//# define CONSOLE_OUT_EPNUM (EXTRAKEY_IN_EPNUM + 2)
|
||||||
#else
|
#else
|
||||||
# define CONSOLE_OUT_EPNUM EXTRAKEY_IN_EPNUM
|
# define CONSOLE_OUT_EPNUM EXTRAKEY_IN_EPNUM
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef NKRO_ENABLE
|
#ifdef NKRO_ENABLE
|
||||||
# define NKRO_IN_EPNUM (CONSOLE_OUT_EPNUM + 1)
|
# define NKRO_IN_EPNUM (CONSOLE_OUT_EPNUM + 1)
|
||||||
|
# if defined(__AVR_ATmega32U2__) && NKRO_IN_EPNUM > 4
|
||||||
|
# error "Endpoints are not available enough to support all functions. Remove some in Makefile.(MOUSEKEY, EXTRAKEY, CONSOLE, NKRO)"
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -159,4 +163,14 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
|
||||||
const void** const DescriptorAddress)
|
const void** const DescriptorAddress)
|
||||||
ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
|
ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
|
||||||
|
|
||||||
|
|
||||||
|
/* new API */
|
||||||
|
#if LUFA_VERSION_INTEGER < 0x140302
|
||||||
|
#undef VERSION_BCD
|
||||||
|
#define VERSION_BCD(Major, Minor, Revision) \
|
||||||
|
CPU_TO_LE16( ((Major & 0xFF) << 8) | \
|
||||||
|
((Minor & 0x0F) << 4) | \
|
||||||
|
(Revision & 0x0F) )
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -52,8 +52,8 @@
|
||||||
#include "descriptor.h"
|
#include "descriptor.h"
|
||||||
#include "lufa.h"
|
#include "lufa.h"
|
||||||
|
|
||||||
static uint8_t idle_duration = 0;
|
uint8_t keyboard_idle = 0;
|
||||||
static uint8_t protocol_report = 1;
|
uint8_t keyboard_protocol = 1;
|
||||||
static uint8_t keyboard_led_stats = 0;
|
static uint8_t keyboard_led_stats = 0;
|
||||||
|
|
||||||
static report_keyboard_t keyboard_report_sent;
|
static report_keyboard_t keyboard_report_sent;
|
||||||
|
|
@ -184,15 +184,6 @@ void EVENT_USB_Device_StartOfFrame(void)
|
||||||
/** Event handler for the USB_ConfigurationChanged event.
|
/** Event handler for the USB_ConfigurationChanged event.
|
||||||
* This is fired when the host sets the current configuration of the USB device after enumeration.
|
* This is fired when the host sets the current configuration of the USB device after enumeration.
|
||||||
*/
|
*/
|
||||||
#if LUFA_VERSION_INTEGER < 0x120730
|
|
||||||
/* old API 120219 */
|
|
||||||
#define ENDPOINT_CONFIG(epnum, eptype, epdir, epsize, epbank) Endpoint_ConfigureEndpoint(epnum, eptype, epdir, epsize, epbank)
|
|
||||||
#else
|
|
||||||
/* new API >= 120730 */
|
|
||||||
#define ENDPOINT_BANK_SINGLE 1
|
|
||||||
#define ENDPOINT_BANK_DOUBLE 2
|
|
||||||
#define ENDPOINT_CONFIG(epnum, eptype, epdir, epsize, epbank) Endpoint_ConfigureEndpoint((epdir) | (epnum) , eptype, epsize, epbank)
|
|
||||||
#endif
|
|
||||||
void EVENT_USB_Device_ConfigurationChanged(void)
|
void EVENT_USB_Device_ConfigurationChanged(void)
|
||||||
{
|
{
|
||||||
bool ConfigSuccess = true;
|
bool ConfigSuccess = true;
|
||||||
|
|
@ -217,9 +208,11 @@ void EVENT_USB_Device_ConfigurationChanged(void)
|
||||||
/* Setup Console HID Report Endpoints */
|
/* Setup Console HID Report Endpoints */
|
||||||
ConfigSuccess &= ENDPOINT_CONFIG(CONSOLE_IN_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN,
|
ConfigSuccess &= ENDPOINT_CONFIG(CONSOLE_IN_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN,
|
||||||
CONSOLE_EPSIZE, ENDPOINT_BANK_DOUBLE);
|
CONSOLE_EPSIZE, ENDPOINT_BANK_DOUBLE);
|
||||||
|
#if 0
|
||||||
ConfigSuccess &= ENDPOINT_CONFIG(CONSOLE_OUT_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_OUT,
|
ConfigSuccess &= ENDPOINT_CONFIG(CONSOLE_OUT_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_OUT,
|
||||||
CONSOLE_EPSIZE, ENDPOINT_BANK_SINGLE);
|
CONSOLE_EPSIZE, ENDPOINT_BANK_SINGLE);
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef NKRO_ENABLE
|
#ifdef NKRO_ENABLE
|
||||||
/* Setup NKRO HID Report Endpoints */
|
/* Setup NKRO HID Report Endpoints */
|
||||||
|
|
@ -279,6 +272,7 @@ void EVENT_USB_Device_ControlRequest(void)
|
||||||
// Interface
|
// Interface
|
||||||
switch (USB_ControlRequest.wIndex) {
|
switch (USB_ControlRequest.wIndex) {
|
||||||
case KEYBOARD_INTERFACE:
|
case KEYBOARD_INTERFACE:
|
||||||
|
case NKRO_INTERFACE:
|
||||||
Endpoint_ClearSETUP();
|
Endpoint_ClearSETUP();
|
||||||
|
|
||||||
while (!(Endpoint_IsOUTReceived())) {
|
while (!(Endpoint_IsOUTReceived())) {
|
||||||
|
|
@ -299,21 +293,29 @@ void EVENT_USB_Device_ControlRequest(void)
|
||||||
case HID_REQ_GetProtocol:
|
case HID_REQ_GetProtocol:
|
||||||
if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))
|
if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))
|
||||||
{
|
{
|
||||||
Endpoint_ClearSETUP();
|
if (USB_ControlRequest.wIndex == KEYBOARD_INTERFACE) {
|
||||||
while (!(Endpoint_IsINReady()));
|
Endpoint_ClearSETUP();
|
||||||
Endpoint_Write_8(protocol_report);
|
while (!(Endpoint_IsINReady()));
|
||||||
Endpoint_ClearIN();
|
Endpoint_Write_8(keyboard_protocol);
|
||||||
Endpoint_ClearStatusStage();
|
Endpoint_ClearIN();
|
||||||
|
Endpoint_ClearStatusStage();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case HID_REQ_SetProtocol:
|
case HID_REQ_SetProtocol:
|
||||||
if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
|
if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
|
||||||
{
|
{
|
||||||
Endpoint_ClearSETUP();
|
if (USB_ControlRequest.wIndex == KEYBOARD_INTERFACE) {
|
||||||
Endpoint_ClearStatusStage();
|
Endpoint_ClearSETUP();
|
||||||
|
Endpoint_ClearStatusStage();
|
||||||
|
|
||||||
protocol_report = ((USB_ControlRequest.wValue & 0xFF) != 0x00);
|
keyboard_protocol = ((USB_ControlRequest.wValue & 0xFF) != 0x00);
|
||||||
|
#ifdef NKRO_ENABLE
|
||||||
|
keyboard_nkro = !!keyboard_protocol;
|
||||||
|
#endif
|
||||||
|
clear_keyboard();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
@ -323,7 +325,7 @@ void EVENT_USB_Device_ControlRequest(void)
|
||||||
Endpoint_ClearSETUP();
|
Endpoint_ClearSETUP();
|
||||||
Endpoint_ClearStatusStage();
|
Endpoint_ClearStatusStage();
|
||||||
|
|
||||||
idle_duration = ((USB_ControlRequest.wValue & 0xFF00) >> 8);
|
keyboard_idle = ((USB_ControlRequest.wValue & 0xFF00) >> 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
@ -332,7 +334,7 @@ void EVENT_USB_Device_ControlRequest(void)
|
||||||
{
|
{
|
||||||
Endpoint_ClearSETUP();
|
Endpoint_ClearSETUP();
|
||||||
while (!(Endpoint_IsINReady()));
|
while (!(Endpoint_IsINReady()));
|
||||||
Endpoint_Write_8(idle_duration);
|
Endpoint_Write_8(keyboard_idle);
|
||||||
Endpoint_ClearIN();
|
Endpoint_ClearIN();
|
||||||
Endpoint_ClearStatusStage();
|
Endpoint_ClearStatusStage();
|
||||||
}
|
}
|
||||||
|
|
@ -359,31 +361,27 @@ static void send_keyboard(report_keyboard_t *report)
|
||||||
/* Select the Keyboard Report Endpoint */
|
/* Select the Keyboard Report Endpoint */
|
||||||
#ifdef NKRO_ENABLE
|
#ifdef NKRO_ENABLE
|
||||||
if (keyboard_nkro) {
|
if (keyboard_nkro) {
|
||||||
|
/* Report protocol - NKRO */
|
||||||
Endpoint_SelectEndpoint(NKRO_IN_EPNUM);
|
Endpoint_SelectEndpoint(NKRO_IN_EPNUM);
|
||||||
|
|
||||||
/* Check if write ready for a polling interval around 1ms */
|
/* Check if write ready for a polling interval around 1ms */
|
||||||
while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(4);
|
while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(4);
|
||||||
if (!Endpoint_IsReadWriteAllowed()) return;
|
if (!Endpoint_IsReadWriteAllowed()) return;
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
Endpoint_SelectEndpoint(KEYBOARD_IN_EPNUM);
|
|
||||||
|
|
||||||
/* Check if write ready for a polling interval around 10ms */
|
/* Write Keyboard Report Data */
|
||||||
while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
|
|
||||||
if (!Endpoint_IsReadWriteAllowed()) return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Write Keyboard Report Data */
|
|
||||||
#ifdef NKRO_ENABLE
|
|
||||||
if (keyboard_nkro) {
|
|
||||||
Endpoint_Write_Stream_LE(report, NKRO_EPSIZE, NULL);
|
Endpoint_Write_Stream_LE(report, NKRO_EPSIZE, NULL);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
/* boot mode */
|
/* Boot protocol */
|
||||||
|
Endpoint_SelectEndpoint(KEYBOARD_IN_EPNUM);
|
||||||
|
|
||||||
|
/* Check if write ready for a polling interval around 10ms */
|
||||||
|
while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
|
||||||
|
if (!Endpoint_IsReadWriteAllowed()) return;
|
||||||
|
|
||||||
|
/* Write Keyboard Report Data */
|
||||||
Endpoint_Write_Stream_LE(report, KEYBOARD_EPSIZE, NULL);
|
Endpoint_Write_Stream_LE(report, KEYBOARD_EPSIZE, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -66,4 +66,15 @@ typedef struct {
|
||||||
uint16_t usage;
|
uint16_t usage;
|
||||||
} __attribute__ ((packed)) report_extra_t;
|
} __attribute__ ((packed)) report_extra_t;
|
||||||
|
|
||||||
|
|
||||||
|
#if LUFA_VERSION_INTEGER < 0x120730
|
||||||
|
/* old API 120219 */
|
||||||
|
#define ENDPOINT_CONFIG(epnum, eptype, epdir, epsize, epbank) Endpoint_ConfigureEndpoint(epnum, eptype, epdir, epsize, epbank)
|
||||||
|
#else
|
||||||
|
/* new API >= 120730 */
|
||||||
|
#define ENDPOINT_BANK_SINGLE 1
|
||||||
|
#define ENDPOINT_BANK_DOUBLE 2
|
||||||
|
#define ENDPOINT_CONFIG(epnum, eptype, epdir, epsize, epbank) Endpoint_ConfigureEndpoint((epdir) | (epnum) , eptype, epsize, epbank)
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,7 @@
|
||||||
#include "sleep_led.h"
|
#include "sleep_led.h"
|
||||||
#endif
|
#endif
|
||||||
#include "suspend.h"
|
#include "suspend.h"
|
||||||
|
#include "action.h"
|
||||||
#include "action_util.h"
|
#include "action_util.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -628,6 +629,7 @@ uint8_t usb_configured(void)
|
||||||
void usb_remote_wakeup(void)
|
void usb_remote_wakeup(void)
|
||||||
{
|
{
|
||||||
UDCON |= (1<<RMWKUP);
|
UDCON |= (1<<RMWKUP);
|
||||||
|
while (UDCON & (1<<RMWKUP));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -692,20 +694,20 @@ ISR(USB_GEN_vect)
|
||||||
}
|
}
|
||||||
/* TODO: should keep IDLE rate on each keyboard interface */
|
/* TODO: should keep IDLE rate on each keyboard interface */
|
||||||
#ifdef NKRO_ENABLE
|
#ifdef NKRO_ENABLE
|
||||||
if (!keyboard_nkro && usb_keyboard_idle_config && (++div4 & 3) == 0) {
|
if (!keyboard_nkro && keyboard_idle && (++div4 & 3) == 0) {
|
||||||
#else
|
#else
|
||||||
if (usb_keyboard_idle_config && (++div4 & 3) == 0) {
|
if (keyboard_idle && (++div4 & 3) == 0) {
|
||||||
#endif
|
#endif
|
||||||
UENUM = KBD_ENDPOINT;
|
UENUM = KBD_ENDPOINT;
|
||||||
if (UEINTX & (1<<RWAL)) {
|
if (UEINTX & (1<<RWAL)) {
|
||||||
usb_keyboard_idle_count++;
|
usb_keyboard_idle_count++;
|
||||||
if (usb_keyboard_idle_count == usb_keyboard_idle_config) {
|
if (usb_keyboard_idle_count == keyboard_idle) {
|
||||||
usb_keyboard_idle_count = 0;
|
usb_keyboard_idle_count = 0;
|
||||||
/* TODO: fix keyboard_report inconsistency */
|
/* TODO: fix keyboard_report inconsistency */
|
||||||
/* To avoid Mac SET_IDLE behaviour.
|
/* To avoid Mac SET_IDLE behaviour.
|
||||||
UEDATX = keyboard_report_prev->mods;
|
UEDATX = keyboard_report_prev->mods;
|
||||||
UEDATX = 0;
|
UEDATX = 0;
|
||||||
uint8_t keys = usb_keyboard_protocol ? KBD_REPORT_KEYS : 6;
|
uint8_t keys = keyboard_protocol ? KBD_REPORT_KEYS : 6;
|
||||||
for (uint8_t i=0; i<keys; i++) {
|
for (uint8_t i=0; i<keys; i++) {
|
||||||
UEDATX = keyboard_report_prev->keys[i];
|
UEDATX = keyboard_report_prev->keys[i];
|
||||||
}
|
}
|
||||||
|
|
@ -901,13 +903,13 @@ ISR(USB_COM_vect)
|
||||||
}
|
}
|
||||||
if (bRequest == HID_GET_IDLE) {
|
if (bRequest == HID_GET_IDLE) {
|
||||||
usb_wait_in_ready();
|
usb_wait_in_ready();
|
||||||
UEDATX = usb_keyboard_idle_config;
|
UEDATX = keyboard_idle;
|
||||||
usb_send_in();
|
usb_send_in();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (bRequest == HID_GET_PROTOCOL) {
|
if (bRequest == HID_GET_PROTOCOL) {
|
||||||
usb_wait_in_ready();
|
usb_wait_in_ready();
|
||||||
UEDATX = usb_keyboard_protocol;
|
UEDATX = keyboard_protocol;
|
||||||
usb_send_in();
|
usb_send_in();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -921,14 +923,18 @@ ISR(USB_COM_vect)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (bRequest == HID_SET_IDLE) {
|
if (bRequest == HID_SET_IDLE) {
|
||||||
usb_keyboard_idle_config = (wValue >> 8);
|
keyboard_idle = (wValue >> 8);
|
||||||
usb_keyboard_idle_count = 0;
|
usb_keyboard_idle_count = 0;
|
||||||
//usb_wait_in_ready();
|
//usb_wait_in_ready();
|
||||||
usb_send_in();
|
usb_send_in();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (bRequest == HID_SET_PROTOCOL) {
|
if (bRequest == HID_SET_PROTOCOL) {
|
||||||
usb_keyboard_protocol = wValue;
|
keyboard_protocol = wValue;
|
||||||
|
#ifdef NKRO_ENABLE
|
||||||
|
keyboard_nkro = !!keyboard_protocol;
|
||||||
|
#endif
|
||||||
|
clear_keyboard();
|
||||||
//usb_wait_in_ready();
|
//usb_wait_in_ready();
|
||||||
usb_send_in();
|
usb_send_in();
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -34,12 +34,12 @@
|
||||||
// protocol setting from the host. We use exactly the same report
|
// protocol setting from the host. We use exactly the same report
|
||||||
// either way, so this variable only stores the setting since we
|
// either way, so this variable only stores the setting since we
|
||||||
// are required to be able to report which setting is in use.
|
// are required to be able to report which setting is in use.
|
||||||
uint8_t usb_keyboard_protocol=1;
|
uint8_t keyboard_protocol=1;
|
||||||
|
|
||||||
// the idle configuration, how often we send the report to the
|
// the idle configuration, how often we send the report to the
|
||||||
// host (ms * 4) even when it hasn't changed
|
// host (ms * 4) even when it hasn't changed
|
||||||
// Windows and Linux set 0 while OS X sets 6(24ms) by SET_IDLE request.
|
// Windows and Linux set 0 while OS X sets 6(24ms) by SET_IDLE request.
|
||||||
uint8_t usb_keyboard_idle_config=125;
|
uint8_t keyobard_idle=125;
|
||||||
|
|
||||||
// count until idle timeout
|
// count until idle timeout
|
||||||
uint8_t usb_keyboard_idle_count=0;
|
uint8_t usb_keyboard_idle_count=0;
|
||||||
|
|
@ -61,10 +61,7 @@ int8_t usb_keyboard_send_report(report_keyboard_t *report)
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (usb_keyboard_protocol)
|
result = send_report(report, KBD_ENDPOINT, 0, KBD_SIZE);
|
||||||
result = send_report(report, KBD_ENDPOINT, 0, KBD_SIZE);
|
|
||||||
else
|
|
||||||
result = send_report(report, KBD_ENDPOINT, 0, 6);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result) return result;
|
if (result) return result;
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,6 @@
|
||||||
#include "host.h"
|
#include "host.h"
|
||||||
|
|
||||||
|
|
||||||
extern uint8_t usb_keyboard_protocol;
|
|
||||||
extern uint8_t usb_keyboard_idle_config;
|
|
||||||
extern uint8_t usb_keyboard_idle_count;
|
extern uint8_t usb_keyboard_idle_count;
|
||||||
extern volatile uint8_t usb_keyboard_leds;
|
extern volatile uint8_t usb_keyboard_leds;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -82,9 +82,14 @@ void ps2_mouse_task(void)
|
||||||
mouse_report.x = ps2_host_recv_response();
|
mouse_report.x = ps2_host_recv_response();
|
||||||
mouse_report.y = ps2_host_recv_response();
|
mouse_report.y = ps2_host_recv_response();
|
||||||
} else {
|
} else {
|
||||||
if (!debug_mouse) print("ps2_mouse: fail to get mouse packet\n");
|
if (debug_mouse) print("ps2_mouse: fail to get mouse packet\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
xprintf("%ud ", timer_read());
|
||||||
|
print("ps2_mouse raw: [");
|
||||||
|
phex(mouse_report.buttons); print("|");
|
||||||
|
print_hex8((uint8_t)mouse_report.x); print(" ");
|
||||||
|
print_hex8((uint8_t)mouse_report.y); print("]\n");
|
||||||
|
|
||||||
/* if mouse moves or buttons state changes */
|
/* if mouse moves or buttons state changes */
|
||||||
if (mouse_report.x || mouse_report.y ||
|
if (mouse_report.x || mouse_report.y ||
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue