merging tmk
This commit is contained in:
		
						commit
						547da78335
					
				
							
								
								
									
										6
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							@ -1,6 +0,0 @@
 | 
				
			|||||||
[submodule "protocol/lufa/LUFA-git"]
 | 
					 | 
				
			||||||
	path = protocol/lufa/LUFA-git
 | 
					 | 
				
			||||||
	url = https://github.com/abcminiuser/lufa.git
 | 
					 | 
				
			||||||
[submodule "protocol/usb_hid/USB_Host_Shield_2.0"]
 | 
					 | 
				
			||||||
	path = protocol/usb_hid/USB_Host_Shield_2.0
 | 
					 | 
				
			||||||
	url = https://github.com/felis/USB_Host_Shield_2.0.git
 | 
					 | 
				
			||||||
							
								
								
									
										106
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										106
									
								
								README.md
									
									
									
									
									
								
							@ -2,6 +2,17 @@ Quantum MK Firmware
 | 
				
			|||||||
================================
 | 
					================================
 | 
				
			||||||
This is a keyboard firmware based on the [tmk_keyboard firmware](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR controller, and more specifically, the OLKB product line.
 | 
					This is a keyboard firmware based on the [tmk_keyboard firmware](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR controller, and more specifically, the OLKB product line.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Updates
 | 
				
			||||||
 | 
					-------
 | 
				
			||||||
 | 
					#### 2015/04/22
 | 
				
			||||||
 | 
					Core library was separated to other branch `core`. <https://github.com/tmk/tmk_keyboard/tree/core>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In `Makefile` you need to set `TMK_DIR` to indicate core library location now.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Features
 | 
					Features
 | 
				
			||||||
--------
 | 
					--------
 | 
				
			||||||
These features can be used in your keyboard.
 | 
					These features can be used in your keyboard.
 | 
				
			||||||
@ -23,6 +34,7 @@ These features can be used in your keyboard.
 | 
				
			|||||||
* Backlight           - Control backlight levels
 | 
					* Backlight           - Control backlight levels
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Projects
 | 
					Projects
 | 
				
			||||||
--------
 | 
					--------
 | 
				
			||||||
You can find some keyboard specific projects under `converter` and `keyboard` directory.
 | 
					You can find some keyboard specific projects under `converter` and `keyboard` directory.
 | 
				
			||||||
@ -107,7 +119,8 @@ You can find some keyboard specific projects under `converter` and `keyboard` di
 | 
				
			|||||||
License
 | 
					License
 | 
				
			||||||
-------
 | 
					-------
 | 
				
			||||||
**GPLv2** or later. Some protocol files are under **Modified BSD License**.
 | 
					**GPLv2** or later. Some protocol files are under **Modified BSD License**.
 | 
				
			||||||
LUFA, PJRC and V-USB stack have their own license respectively.
 | 
					
 | 
				
			||||||
 | 
					Third party libraries like LUFA, PJRC and V-USB have their own license respectively.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -127,7 +140,8 @@ Magic Commands
 | 
				
			|||||||
--------------
 | 
					--------------
 | 
				
			||||||
To see help press `Magic` + `H`.
 | 
					To see help press `Magic` + `H`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 `Magic` key bind may be `LShift` + `RShift` in many project, but `Power` key on ADB converter. `Magic` keybind can be vary on each project, check `config.h` in project directory.
 | 
					`Magic` key combination is `LShift` + `RShift` in many project, but `Power` key on ADB converter. 
 | 
				
			||||||
 | 
					`Magic` keybind can be vary on each project, check `config.h` in project directory.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Following commands can be also executed with `Magic` + key. In console mode `Magic` keybind is not needed.
 | 
					Following commands can be also executed with `Magic` + key. In console mode `Magic` keybind is not needed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -151,13 +165,14 @@ Following commands can be also executed with `Magic` + key. In console mode `Mag
 | 
				
			|||||||
    Caps:   Lock Keyboard(Child Proof)
 | 
					    Caps:   Lock Keyboard(Child Proof)
 | 
				
			||||||
    Paus:   jump to bootloader
 | 
					    Paus:   jump to bootloader
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**TBD**
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Boot Magic Configuration - Virtual DIP Switch
 | 
					
 | 
				
			||||||
 | 
					Boot Magic Configuration - Virtual DIP Switch
 | 
				
			||||||
 | 
					---------------------------------------------
 | 
				
			||||||
Boot Magic are executed during boot up time. Press Magic key below then plug in keyboard cable.
 | 
					Boot Magic are executed during boot up time. Press Magic key below then plug in keyboard cable.
 | 
				
			||||||
Note that you must use keys of **Layer 0** as Magic keys. These settings are stored in EEPROM so that retain your configure over power cycles.
 | 
					Note that you must use keys of **Layer 0** as Magic keys. These settings are stored in EEPROM so that retain your configure over power cycles.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
To avoid configuring accidentally additive salt key `KC_SPACE` also needs to be pressed along with the following configuration keys. The salt key is configurable in `config.h`. See [common/bootmagic.h](common/bootmagic.h).
 | 
					To avoid configuring accidentally additive salt key `KC_SPACE` also needs to be pressed along with the following configuration keys. The salt key is configurable in `config.h`. See [tmk_core/common/bootmagic.h](tmk_core/common/bootmagic.h).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### General
 | 
					#### General
 | 
				
			||||||
- Skip reading EEPROM to start with default configuration(`ESC`)
 | 
					- Skip reading EEPROM to start with default configuration(`ESC`)
 | 
				
			||||||
@ -192,55 +207,23 @@ To avoid configuring accidentally additive salt key `KC_SPACE` also needs to be
 | 
				
			|||||||
- Set Default Layer to 6(`6`)
 | 
					- Set Default Layer to 6(`6`)
 | 
				
			||||||
- Set Default Layer to 7(`7`)
 | 
					- Set Default Layer to 7(`7`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### Caution
 | 
					 | 
				
			||||||
Unintentional use of this feature will cause user confusion.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
TODO: Magic key combination to avoid unintentional press during plug in
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**TBD**
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Mechanical Locking support
 | 
					Mechanical Locking support
 | 
				
			||||||
--------------------------
 | 
					--------------------------
 | 
				
			||||||
This feature makes it possible for you to use mechanical switch for `CapsLock`, `NumLock` or `ScrollLock`. To enable this feature define these macros in `config.h` and use `KC_LCAP`, `KC_LNUM` or `KC_LSCR` in keymap for locking key instead of normal `KC_CAPS`, `KC_NLCK` or `KC_SLCK`. Resync option tries to keep lock switch state consistent with keyboard LED state.
 | 
					This feature makes it possible for you to use mechanical locking switch for `CapsLock`, `NumLock` 
 | 
				
			||||||
 | 
					or `ScrollLock`. To enable this feature define these macros in `config.h` and use `KC_LCAP`, `KC_LN
 | 
				
			||||||
 | 
					UM` or `KC_LSCR` in keymap for locking key instead of normal `KC_CAPS`, `KC_NLCK` or `KC_SLCK`. Res
 | 
				
			||||||
 | 
					ync option tries to keep switch state consistent with keyboard LED state.
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
    #define LOCKING_SUPPORT_ENABLE
 | 
					    #define LOCKING_SUPPORT_ENABLE
 | 
				
			||||||
    #define LOCKING_RESYNC_ENABLE
 | 
					    #define LOCKING_RESYNC_ENABLE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Start Your Own Project
 | 
					Start Your Own Project
 | 
				
			||||||
-----------------------
 | 
					-----------------------
 | 
				
			||||||
**TBD**
 | 
					**TBD**
 | 
				
			||||||
### Config.h Options
 | 
					 | 
				
			||||||
#### 1. USB vendor/product ID and device description
 | 
					 | 
				
			||||||
    #define VENDOR_ID       0xFEED
 | 
					 | 
				
			||||||
    #define PRODUCT_ID      0xBEEF
 | 
					 | 
				
			||||||
    #define MANUFACTURER    t.m.k.
 | 
					 | 
				
			||||||
    #define PRODUCT         Macway mod
 | 
					 | 
				
			||||||
    #define DESCRIPTION     t.m.k. keyboard firmware for Macway mod
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#### 2. Keyboard matrix configuration
 | 
					 | 
				
			||||||
    #define MATRIX_ROWS 8
 | 
					 | 
				
			||||||
    #define MATRIX_COLS 8
 | 
					 | 
				
			||||||
    #define MATRIX_HAS_GHOST
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Architecture
 | 
					 | 
				
			||||||
------------
 | 
					 | 
				
			||||||
    Architecture Diagram
 | 
					 | 
				
			||||||
                               +---------------+---------------+-------------+
 | 
					 | 
				
			||||||
                               |    Host       |   Keyboard    | Matrix, LED |
 | 
					 | 
				
			||||||
       ___________             |-----------+-+ +-------------+ | +-----------|
 | 
					 | 
				
			||||||
      /          /| Keys/Mouse | Protocol  |d| | Action      | | | Protocol  |
 | 
					 | 
				
			||||||
     /__________/ |<-----------|  LUFA     |r| |  Layer, Tap | | |  Matrix   |
 | 
					 | 
				
			||||||
     |.--------.| |   LED      |  V-USB    |i| |-------------| | |  PS/2,IBM |             __________________
 | 
					 | 
				
			||||||
     ||        || |----------->|  PJRC     |v| | Keymap      | | |  ADB,M0110|  Keys      / /_/_/_/_/_/_/_/ /|
 | 
					 | 
				
			||||||
     ||  Host  || |  Console   |  iWRAP(BT)|e| | Mousekey    | | |  SUN/NEWS |<----------/ /_/_/_/_/_/_/_/ / /
 | 
					 | 
				
			||||||
     ||________||/.<-----------|  UART     |r| | Report      | | |  X68K/PC98| Control  / /_/_/_/_/_/_/_/ / /
 | 
					 | 
				
			||||||
     `_========_'/|            |---------------------------------------------|-------->/___ /_______/ ___/ /
 | 
					 | 
				
			||||||
     |_o______o_|/             | Sendchar, Print, Debug, Command, ...        |         |_________________|/
 | 
					 | 
				
			||||||
                               +---------------------------------------------+              Keyboard
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -248,52 +231,17 @@ Debugging
 | 
				
			|||||||
--------
 | 
					--------
 | 
				
			||||||
Use PJRC's `hid_listen` to see debug messages. You can use the tool for debug even if firmware use LUFA stack.
 | 
					Use PJRC's `hid_listen` to see debug messages. You can use the tool for debug even if firmware use LUFA stack.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
You can use xprintf() to display debug info on `hid_listen`, see `common/xprintf.h`.
 | 
					You can use xprintf() to display debug info on `hid_listen`, see `tmk_core/common/xprintf.h`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Files and Directories
 | 
					Files and Directories
 | 
				
			||||||
-------------------
 | 
					-------------------
 | 
				
			||||||
### Top
 | 
					### Top
 | 
				
			||||||
* common/       - common codes
 | 
					* tmk_core/     - core library
 | 
				
			||||||
* protocol/     - keyboard protocol support
 | 
					 | 
				
			||||||
* keyboard/     - keyboard projects
 | 
					* keyboard/     - keyboard projects
 | 
				
			||||||
* converter/    - protocol converter projects
 | 
					* converter/    - protocol converter projects
 | 
				
			||||||
* doc/          - documents
 | 
					* doc/          - documents
 | 
				
			||||||
* common.mk     - Makefile for common
 | 
					 | 
				
			||||||
* protocol.mk    - Makefile for protocol
 | 
					 | 
				
			||||||
* rules.mk      - Makefile for build rules
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Common
 | 
					 | 
				
			||||||
* host.h
 | 
					 | 
				
			||||||
* host_driver.h
 | 
					 | 
				
			||||||
* keyboard.h
 | 
					 | 
				
			||||||
* command.h
 | 
					 | 
				
			||||||
* keymap.h
 | 
					 | 
				
			||||||
* action.h
 | 
					 | 
				
			||||||
* keycode.h
 | 
					 | 
				
			||||||
* matrix.h
 | 
					 | 
				
			||||||
* led.h
 | 
					 | 
				
			||||||
* mousekey.h
 | 
					 | 
				
			||||||
* report.h
 | 
					 | 
				
			||||||
* debug.h
 | 
					 | 
				
			||||||
* print.h
 | 
					 | 
				
			||||||
* bootloader.h
 | 
					 | 
				
			||||||
* sendchar.h
 | 
					 | 
				
			||||||
* timer.h
 | 
					 | 
				
			||||||
* util.h
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Keyboard Protocols
 | 
					 | 
				
			||||||
* lufa/     - LUFA USB stack
 | 
					 | 
				
			||||||
* pjrc/     - PJRC USB stack
 | 
					 | 
				
			||||||
* vusb/     - Objective Development V-USB
 | 
					 | 
				
			||||||
* iwrap/    - Bluetooth HID for Bluegiga iWRAP
 | 
					 | 
				
			||||||
* ps2.c     - PS/2 protocol
 | 
					 | 
				
			||||||
* adb.c     - Apple Desktop Bus protocol
 | 
					 | 
				
			||||||
* m0110.c   - Macintosh 128K/512K/Plus keyboard protocol
 | 
					 | 
				
			||||||
* news.c    - Sony NEWS keyboard protocol
 | 
					 | 
				
			||||||
* x68k.c    - Sharp X68000 keyboard protocol
 | 
					 | 
				
			||||||
* serial_soft.c - Asynchronous Serial protocol implemented by software
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -42,7 +42,7 @@
 | 
				
			|||||||
TARGET = adb_usb_lufa
 | 
					TARGET = adb_usb_lufa
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -122,6 +122,10 @@ 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
 | 
					#NKRO_ENABLE = yes	# USB Nkey Rollover
 | 
				
			||||||
 | 
					ADB_MOUSE_ENABLE = yes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# ADB Mice need acceleration for todays much bigger screens. 
 | 
				
			||||||
 | 
					OPT_DEFS += -DADB_MOUSE_MAXACC=8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Optimize size but this may cause error "relocation truncated to fit"
 | 
					# Optimize size but this may cause error "relocation truncated to fit"
 | 
				
			||||||
@ -129,9 +133,9 @@ COMMAND_ENABLE = yes    # Commands for debug and configuration
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/lufa.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/protocol.mk
 | 
					include $(TMK_DIR)/protocol.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@
 | 
				
			|||||||
TARGET = adb_usb_pjrc
 | 
					TARGET = adb_usb_pjrc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -57,13 +57,17 @@ CONSOLE_ENABLE = yes    # Console for debug
 | 
				
			|||||||
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(+500)
 | 
					#NKRO_ENABLE = yes	# USB Nkey Rollover(+500)
 | 
				
			||||||
 | 
					ADB_MOUSE_ENABLE = yes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# ADB Mice need acceleration for todays much bigger screens. 
 | 
				
			||||||
 | 
					OPT_DEFS += -DADB_MOUSE_MAXACC=8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/pjrc.mk
 | 
					include $(TMK_DIR)/protocol/pjrc.mk
 | 
				
			||||||
include $(TOP_DIR)/protocol.mk
 | 
					include $(TMK_DIR)/protocol.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -7,70 +7,69 @@ 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					README FIRST
 | 
				
			||||||
 | 
					------------
 | 
				
			||||||
 | 
					https://github.com/tmk/tmk_keyboard
 | 
				
			||||||
 | 
					https://github.com/tmk/tmk_keyboard/tree/master/converter/adb_usb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Also check these when you are in trouble.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					https://github.com/tmk/tmk_keyboard/wiki
 | 
				
			||||||
 | 
					https://github.com/tmk/tmk_keyboard/labels/NOTE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Wiring
 | 
					Wiring
 | 
				
			||||||
------
 | 
					------
 | 
				
			||||||
0. Connect ADB keyboard to Teensy by 3 lines(Vcc, GND, Data). By default Data line uses port PD0.
 | 
					Connect ADB pins to controller just 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.
 | 
					
 | 
				
			||||||
   The external pull-up resistor(1K-10K Ohm) on Data is strongly recommended.
 | 
					ADB female socket from the front:
 | 
				
			||||||
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
 | 
					      ,--_--.
 | 
				
			||||||
2. make
 | 
					     / o4 3o \      1: DATA
 | 
				
			||||||
3. program Teensy
 | 
					    | o2   1o |     2: Power SW
 | 
				
			||||||
 | 
					     -  ===  -      3: VCC
 | 
				
			||||||
 | 
					      `-___-'       4: GND
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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.(It is almost must!)
 | 
				
			||||||
 | 
					https://github.com/tmk/tmk_keyboard/wiki/FAQ#pull-up-resistor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Pull-up resister:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Keyboard       Conveter
 | 
				
			||||||
 | 
					                   ,------.
 | 
				
			||||||
 | 
					    5V------+------|VCC   |
 | 
				
			||||||
 | 
					            |      |      |
 | 
				
			||||||
 | 
					           [R]     |      |
 | 
				
			||||||
 | 
					            |      |      |
 | 
				
			||||||
 | 
					    Signal--+------|PD0   |
 | 
				
			||||||
 | 
					                   |      |
 | 
				
			||||||
 | 
					    GND------------|GND   |
 | 
				
			||||||
 | 
					                   `------'
 | 
				
			||||||
 | 
					    R: 1K Ohm resistor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Build
 | 
					Build
 | 
				
			||||||
-----
 | 
					-----
 | 
				
			||||||
Just make
 | 
					See doc/build.md. In short,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $ make clean
 | 
					    $ make clean
 | 
				
			||||||
    $ make
 | 
					    $ make
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If your keyboard is ISO layout
 | 
					You can select keymap(ansi is default) like this:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $ make KEYMAP=iso
 | 
					    $ make KEYMAP=[ansi|iso|hasu]
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Also you may want to remove locking pin from the push-lock switch to use capslock as a normal momentary switch.
 | 
					 | 
				
			||||||
http://www.youtube.com/watch?v=9wqnt2mGJ2Y
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Keymap
 | 
					Keymap
 | 
				
			||||||
------
 | 
					------
 | 
				
			||||||
You can change a keymap by editing code of keymap.c like following.
 | 
					You can change a keymap by editing code of keymap_[ansi|iso|hasu|yours].c.
 | 
				
			||||||
This is a keymap for AEK, however, also used for other keyboards.
 | 
					How to define the keymap is probably obvious. You can find key symbols in common/keycode.h. And see doc/keymap.md for more detail.
 | 
				
			||||||
How to define the keymap is probably obvious. You can find key symbols in keycode.h.
 | 
					 | 
				
			||||||
If you want to define some keymaps than just one, see hhkb/keymap.c and
 | 
					 | 
				
			||||||
macway/keymap.c as examples. Keymap(layer) switching may needs a bit of
 | 
					 | 
				
			||||||
effort at this time.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /* Default Layer: plain keymap
 | 
					 | 
				
			||||||
     * ,---.   ,---------------. ,---------------. ,---------------. ,-----------.             ,---.
 | 
					 | 
				
			||||||
     * |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|  [|  ]|    \| |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 |Alt |Gui |         Space             |Gui |Alt |Ctrl | |Lef|Dow|Rig| |      0|  .|   |
 | 
					 | 
				
			||||||
     * `-----------------------------------------------------------' `-----------' `---------------'
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    KEYMAP(
 | 
					 | 
				
			||||||
    ESC, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12,           PSCR,SLCK,BRK,                    PWR,
 | 
					 | 
				
			||||||
    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,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,                                              LEFT,DOWN,RGHT,    P0,       PDOT,PENT
 | 
					 | 
				
			||||||
    ),
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Magic command
 | 
					Magic command
 | 
				
			||||||
@ -78,6 +77,14 @@ Magic command
 | 
				
			|||||||
To get help press `h` holding Magic key. Magic key is `Power key`.
 | 
					To get help press `h` holding Magic key. Magic key is `Power key`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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.
 | 
				
			||||||
 | 
					https://github.com/tmk/tmk_keyboard/blob/master/README.md#mechanical-locking-support
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Also you may want to remove locking pin from the push-lock switch to use capslock as a normal momentary switch.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Notes
 | 
					Notes
 | 
				
			||||||
-----
 | 
					-----
 | 
				
			||||||
Not-extended ADB keyboards have no discrimination between right modifier and left one,
 | 
					Not-extended ADB keyboards have no discrimination between right modifier and left one,
 | 
				
			||||||
 | 
				
			|||||||
@ -3,7 +3,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
					const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
    KEYMAP_EXT_ANSI(
 | 
					    KEYMAP_EXT_ANSI(
 | 
				
			||||||
    ESC, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12,           PSCR,SLCK,PAUS,                   PWR,
 | 
					    ESC, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12,           PSCR,SLCK,PAUS,                   NO,
 | 
				
			||||||
    GRV, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, BSPC,     INS, HOME,PGUP,    NLCK,PEQL,PSLS,PAST,
 | 
					    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,
 | 
					    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,
 | 
					    LCAP,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,     ENT,                         P4,  P5,  P6,  PPLS,
 | 
				
			||||||
 | 
				
			|||||||
@ -22,7 +22,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			|||||||
    ESC, 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,           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,
 | 
					    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,
 | 
					    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,
 | 
					    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,
 | 
					    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
 | 
					    LCTL,LGUI,LALT,          SPC,                               RGUI,RCTL,     LEFT,DOWN,RGHT,    P0,       PDOT,PENT
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
@ -47,7 +47,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			|||||||
    GRV, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12,           PSCR,SLCK,BRK,                    NO, 
 | 
					    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,
 | 
					    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,
 | 
					    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,
 | 
					    LCAP,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,
 | 
					    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
 | 
					    LCTL,LGUI,LALT,          SPC,                               RGUI,RCTL,     HOME,PGDN,END,     BTN1,     BTN2,BTN3
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
 | 
				
			|||||||
@ -3,7 +3,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
					const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
    KEYMAP_EXT_ISO(
 | 
					    KEYMAP_EXT_ISO(
 | 
				
			||||||
    ESC, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12,           PSCR,SLCK,PAUS,                   PWR,
 | 
					    ESC, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12,           PSCR,SLCK,PAUS,                   NO,
 | 
				
			||||||
    GRV, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, BSPC,     INS, HOME,PGUP,    NLCK,PEQL,PSLS,PAST,
 | 
					    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,
 | 
					    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,
 | 
					    LCAP,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,NUHS,                             P4,  P5,  P6,  PPLS,
 | 
				
			||||||
 | 
				
			|||||||
@ -27,6 +27,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			|||||||
#include "debug.h"
 | 
					#include "debug.h"
 | 
				
			||||||
#include "adb.h"
 | 
					#include "adb.h"
 | 
				
			||||||
#include "matrix.h"
 | 
					#include "matrix.h"
 | 
				
			||||||
 | 
					#include "report.h"
 | 
				
			||||||
 | 
					#include "host.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if (MATRIX_COLS > 16)
 | 
					#if (MATRIX_COLS > 16)
 | 
				
			||||||
@ -38,6 +40,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static bool is_modified = false;
 | 
					static bool is_modified = false;
 | 
				
			||||||
 | 
					static report_mouse_t mouse_report = {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// matrix state buffer(1:on, 0:off)
 | 
					// matrix state buffer(1:on, 0:off)
 | 
				
			||||||
#if (MATRIX_COLS <= 8)
 | 
					#if (MATRIX_COLS <= 8)
 | 
				
			||||||
@ -86,6 +89,64 @@ void matrix_init(void)
 | 
				
			|||||||
    return;
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef ADB_MOUSE_ENABLE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef MAX
 | 
				
			||||||
 | 
					#undef MAX
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void adb_mouse_task(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    uint16_t codes;
 | 
				
			||||||
 | 
					    int16_t x, y;
 | 
				
			||||||
 | 
					    static int8_t mouseacc; 
 | 
				
			||||||
 | 
					    _delay_ms(12);  // delay for preventing overload of poor ADB keyboard controller
 | 
				
			||||||
 | 
					    codes = adb_host_mouse_recv();
 | 
				
			||||||
 | 
					    // If nothing received reset mouse acceleration, and quit. 
 | 
				
			||||||
 | 
					    if (!codes) {
 | 
				
			||||||
 | 
					        mouseacc = 1;
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    // Bit sixteen is button.
 | 
				
			||||||
 | 
					    if (~codes & (1 << 15))
 | 
				
			||||||
 | 
					        mouse_report.buttons |= MOUSE_BTN1;
 | 
				
			||||||
 | 
					    if (codes & (1 << 15))
 | 
				
			||||||
 | 
					        mouse_report.buttons &= ~MOUSE_BTN1;
 | 
				
			||||||
 | 
					    // lower seven bits are movement, as signed int_7. 
 | 
				
			||||||
 | 
					    // low byte is X-axis, high byte is Y. 
 | 
				
			||||||
 | 
					    y = (codes>>8 & 0x3F);
 | 
				
			||||||
 | 
					    x = (codes>>0 & 0x3F);
 | 
				
			||||||
 | 
					    // bit seven and fifteen is negative
 | 
				
			||||||
 | 
					    // usb does not use int_8, but int_7 (measuring distance) with sign-bit. 
 | 
				
			||||||
 | 
					    if (codes & (1 << 6))
 | 
				
			||||||
 | 
					          x = (x-0x40);
 | 
				
			||||||
 | 
					    if (codes & (1 << 14))
 | 
				
			||||||
 | 
					         y = (y-0x40);
 | 
				
			||||||
 | 
					    // Accelerate mouse. (They weren't meant to be used on screens larger than 320x200).
 | 
				
			||||||
 | 
					    x *= mouseacc;
 | 
				
			||||||
 | 
					    y *= mouseacc;
 | 
				
			||||||
 | 
					    // Cap our two bytes per axis to one byte. 
 | 
				
			||||||
 | 
					    // Easier with a MIN-function, but since -MAX(-a,-b) = MIN(a,b)...
 | 
				
			||||||
 | 
						 // I.E. MIN(MAX(x,-127),127) = -MAX(-MAX(x, -127), -127) = MIN(-MIN(-x,127),127)
 | 
				
			||||||
 | 
					    mouse_report.x = -MAX(-MAX(x, -127), -127);
 | 
				
			||||||
 | 
					    mouse_report.y = -MAX(-MAX(y, -127), -127);
 | 
				
			||||||
 | 
					    if (debug_mouse) {
 | 
				
			||||||
 | 
					            print("adb_host_mouse_recv: "); print_bin16(codes); print("\n");
 | 
				
			||||||
 | 
					            print("adb_mouse raw: [");
 | 
				
			||||||
 | 
					            phex(mouseacc); print(" ");
 | 
				
			||||||
 | 
					            phex(mouse_report.buttons); print("|");
 | 
				
			||||||
 | 
					            print_decs(mouse_report.x); print(" ");
 | 
				
			||||||
 | 
					            print_decs(mouse_report.y); print("]\n");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    // Send result by usb. 
 | 
				
			||||||
 | 
					    host_mouse_send(&mouse_report);
 | 
				
			||||||
 | 
					    // increase acceleration of mouse
 | 
				
			||||||
 | 
					    mouseacc += ( mouseacc < ADB_MOUSE_MAXACC ? 1 : 0 );
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint8_t matrix_scan(void)
 | 
					uint8_t matrix_scan(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    /* extra_key is volatile and more convoluted than necessary because gcc refused
 | 
					    /* extra_key is volatile and more convoluted than necessary because gcc refused
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@
 | 
				
			|||||||
TARGET = ascii_usb
 | 
					TARGET = ascii_usb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -73,10 +73,10 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/lufa.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/protocol.mk
 | 
					include $(TMK_DIR)/protocol.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@
 | 
				
			|||||||
TARGET = ibm4704_usb
 | 
					TARGET = ibm4704_usb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -85,9 +85,9 @@ COMMAND_ENABLE = yes    # Commands for debug and configuration
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol.mk
 | 
					include $(TMK_DIR)/protocol.mk
 | 
				
			||||||
include $(TOP_DIR)/protocol/lufa.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -5,13 +5,21 @@ This firmware converts IBM 4704 keyboard protocol to USB HID.
 | 
				
			|||||||
Keyboard initialization process takes a few seconds at start up. During that you will hear buzzer from the keyboard. **You need to plug USB cable after hooking up your keyboard to the converter.**
 | 
					Keyboard initialization process takes a few seconds at start up. During that you will hear buzzer from the keyboard. **You need to plug USB cable after hooking up your keyboard to the converter.**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Update
 | 
				
			||||||
 | 
					------
 | 
				
			||||||
 | 
					2015/09/07  Added keymap for Alps 102-key. Thanks, tai @ geekhack!
 | 
				
			||||||
 | 
					2015/05/05  Added keymaps for 107-key, 77-key and 50-key. Thanks, orihalcon @ geekhack!
 | 
				
			||||||
 | 
					2015/05/19  Fixed a protocol handling bug.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Supported Keyboard
 | 
					Supported Keyboard
 | 
				
			||||||
------------------
 | 
					------------------
 | 
				
			||||||
### IBM capacitive switch models:
 | 
					### IBM capacitive switch models:
 | 
				
			||||||
- 6019273 Model 100 50-key (grid layout)      http://kishy.dyndns.org/?p=977
 | 
					- 6019273 Model 100 50-key (grid layout)      http://kishy.ca/?p=894
 | 
				
			||||||
- 6019284 Model 200 62-key Alpha(60% layout)  http://kishy.dyndns.org/?p=894
 | 
					- 6019284 Model 200 62-key Alpha(60% layout)  http://kishy.ca/?p=894
 | 
				
			||||||
- 6019303 Model 300 77-key Expanded Alpha     http://kbtalking.cool3c.com/article/23272
 | 
					- 6019303 Model 300 77-key Expanded Alpha     http://deskthority.net/photos-f62/ibm-6019303-t8502.html
 | 
				
			||||||
- 6020218 Model 400 107-key Full key          http://kishy.dyndns.org/?p=980
 | 
					- 6020218 Model 400 107-key Full key          http://kishy.ca/?p=894
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Alps switch(vintage Green) models:
 | 
					### Alps switch(vintage Green) models:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -60,3 +68,5 @@ To select keymap:
 | 
				
			|||||||
Keymap
 | 
					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.
 | 
					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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Use `KEYMAP_ALPS102()` to define your keymap for Alps models.
 | 
				
			||||||
 | 
				
			|||||||
@ -41,9 +41,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/* Pin configuration */
 | 
				
			||||||
 * Busywait
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define IBM4704_CLOCK_PORT  PORTD
 | 
					#define IBM4704_CLOCK_PORT  PORTD
 | 
				
			||||||
#define IBM4704_CLOCK_PIN   PIND
 | 
					#define IBM4704_CLOCK_PIN   PIND
 | 
				
			||||||
#define IBM4704_CLOCK_DDR   DDRD
 | 
					#define IBM4704_CLOCK_DDR   DDRD
 | 
				
			||||||
@ -53,22 +51,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			|||||||
#define IBM4704_DATA_DDR    DDRD
 | 
					#define IBM4704_DATA_DDR    DDRD
 | 
				
			||||||
#define IBM4704_DATA_BIT    0
 | 
					#define IBM4704_DATA_BIT    0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/* Pin interrupt on rising edge of clock */
 | 
				
			||||||
 * Pin interrupt
 | 
					#define IBM4704_INT_INIT()  do { EICRA |= ((1<<ISC11)|(1<<ISC10)); } while (0)
 | 
				
			||||||
 */
 | 
					#define IBM4704_INT_ON()    do { EIFR |= (1<<INTF1); EIMSK |= (1<<INT1); } while (0)
 | 
				
			||||||
#ifdef IBM4704_USE_INT
 | 
					#define IBM4704_INT_OFF()   do { EIMSK &= ~(1<<INT1); } while (0)
 | 
				
			||||||
#define IBM4704_INT_INIT()  do {    \
 | 
					 | 
				
			||||||
    EICRA |= ((1<<ISC11) |      \
 | 
					 | 
				
			||||||
              (0<<ISC10));      \
 | 
					 | 
				
			||||||
} while (0)
 | 
					 | 
				
			||||||
#define IBM4704_INT_ON()  do {      \
 | 
					 | 
				
			||||||
    EIMSK |= (1<<INT1);         \
 | 
					 | 
				
			||||||
} while (0)
 | 
					 | 
				
			||||||
#define IBM4704_INT_OFF() do {      \
 | 
					 | 
				
			||||||
    EIMSK &= ~(1<<INT1);        \
 | 
					 | 
				
			||||||
} while (0)
 | 
					 | 
				
			||||||
#define IBM4704_INT_VECT    INT1_vect
 | 
					#define IBM4704_INT_VECT    INT1_vect
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
@ -1,10 +1,10 @@
 | 
				
			|||||||
IBM 4704 Keyboard
 | 
					IBM 4704 Keyboard
 | 
				
			||||||
=================
 | 
					=================
 | 
				
			||||||
IBM capacitive switch models:
 | 
					IBM capacitive switch models:
 | 
				
			||||||
    6019273 Model 100 50-key (grid layout)      http://kishy.dyndns.org/?p=977
 | 
					    6019273 Model 100 50-key (grid layout)      http://kishy.ca/?p=894
 | 
				
			||||||
    6019284 Model 200 62-key Alpha(60% layout)  http://kishy.dyndns.org/?p=894
 | 
					    6019284 Model 200 62-key Alpha(60% layout)  http://kishy.ca/?p=894
 | 
				
			||||||
    6019303 Model 300 77-key Expanded Alpha     http://kbtalking.cool3c.com/article/23272
 | 
					    6019303 Model 300 77-key Expanded Alpha     http://deskthority.net/photos-f62/ibm-6019303-t8502.html
 | 
				
			||||||
    6020218 Model 400 107-key Full key          http://kishy.dyndns.org/?p=980
 | 
					    6020218 Model 400 107-key Full key          http://kishy.ca/?p=894
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Alps switch(vintage Green) models:
 | 
					Alps switch(vintage Green) models:
 | 
				
			||||||
    5954339 Japanese 102-key    http://deskthority.net/post87127.html#p87127
 | 
					    5954339 Japanese 102-key    http://deskthority.net/post87127.html#p87127
 | 
				
			||||||
@ -33,7 +33,7 @@ so that it doesn't send any scancode until you send 'FF'(End of FC command mode)
 | 
				
			|||||||
    Model 100 50-key            A2h
 | 
					    Model 100 50-key            A2h
 | 
				
			||||||
    Model 200 62-key            A3h
 | 
					    Model 200 62-key            A3h
 | 
				
			||||||
    Model 300 77-key            A4h
 | 
					    Model 300 77-key            A4h
 | 
				
			||||||
    Model 400 107-key           ??
 | 
					    Model 400 107-key           A5h
 | 
				
			||||||
    Japanese/Chinese 102-key    A6h
 | 
					    Japanese/Chinese 102-key    A6h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -57,15 +57,15 @@ Keyboard to Host
 | 
				
			|||||||
----------------
 | 
					----------------
 | 
				
			||||||
Data bits are LSB first and Pairty is odd. Clock has around 60us high and 30us low part.
 | 
					Data bits are LSB first and Pairty is odd. Clock has around 60us high and 30us low part.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            ____      __   __   __   __   __   __   __   __   __   ________
 | 
					            ____       __   __   __   __   __   __   __   __   __   _______
 | 
				
			||||||
    Clock       \____/  \_/  \_/  \_/  \_/  \_/  \_/  \_/  \_/  \_/
 | 
					    Clock       \_____/  \_/  \_/  \_/  \_/  \_/  \_/  \_/  \_/  \_/
 | 
				
			||||||
                 ____ ____ ____ ____ ____ ____ ____ ____ ____ ____    
 | 
					                 ____ ____ ____ ____ ____ ____ ____ ____ ____ ____    
 | 
				
			||||||
    Data    ____/    X____X____X____X____X____X____X____X____X____X________
 | 
					    Data    ____/    X____X____X____X____X____X____X____X____X____X________
 | 
				
			||||||
                Start   0    1    2    3    4    5    6    7    P  Stop
 | 
					                Start   0    1    2    3    4    5    6    7    P  Stop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Start bit:  can be long as 300-350us.
 | 
					Start bit:  can be long as 300-350us.
 | 
				
			||||||
Inhibit:    Pull Data line down to inhibit keyboard to send.
 | 
					Inhibit:    Pull Data line down to inhibit keyboard to send.
 | 
				
			||||||
Timing:     Host reads bit while Clock is hi.
 | 
					Timing:     Host reads bit while Clock is hi.(rising edge)
 | 
				
			||||||
Stop bit:   Keyboard pulls down Data line to lo after 9th clock.
 | 
					Stop bit:   Keyboard pulls down Data line to lo after 9th clock.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -166,13 +166,14 @@ Data sent from host:
 | 
				
			|||||||
         |   `-----`--- scan code
 | 
					         |   `-----`--- scan code
 | 
				
			||||||
         `------------- enable bit(0: enable repeat, 1: enable break)
 | 
					         `------------- enable bit(0: enable repeat, 1: enable break)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    00-77   Enable repeat(78-7F: invalid scancode)
 | 
					    00-79   Enable repeat
 | 
				
			||||||
    80-F7   Enable break(F8-FF: invalid scancode)
 | 
					    80-F9   Enable break(FA-FF are used as other commands, see above.)
 | 
				
			||||||
    FE      Resend(011ah) no need to use
 | 
					    FE      Resend(011ah) no need to use
 | 
				
			||||||
    FF      End(0114h) exits FC command mode.
 | 
					    FF      End(0114h) exits FC command mode.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Response from keyboard:
 | 
					Response from keyboard:
 | 
				
			||||||
    FD      Out of bound - Invalid scancode
 | 
					    FD      Out of bound - Invalid scancode
 | 
				
			||||||
 | 
					    --      OK - No response means that command is accepted.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Examples:
 | 
					Examples:
 | 
				
			||||||
    To enable break code of all keys.
 | 
					    To enable break code of all keys.
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										17
									
								
								converter/ibm4704_usb/keymap_50key.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								converter/ibm4704_usb/keymap_50key.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					#include "keymap_common.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
 | 
					    KEYMAP_50(
 | 
				
			||||||
 | 
					    F1,  F2,  F3,   F4,  F5,  F6,   F7,  F8,  F9,  F10,  \
 | 
				
			||||||
 | 
					    1,   2,   3,    4,   5,   6,    7,   8,   9,   0,    \
 | 
				
			||||||
 | 
					    Q,   W,   E,    R,   T,   Y,    U,   I,   O,   P,    \
 | 
				
			||||||
 | 
					    A,   S,   D,    F,   G,   H,    J,   K,   L,   SCLN, \
 | 
				
			||||||
 | 
					    Z,   X,   C,    V,   B,   N,    M,   COMM,DOT, SLSH  \
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const uint16_t PROGMEM fn_actions[] = {
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										50
									
								
								converter/ibm4704_usb/keymap_alps102key.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								converter/ibm4704_usb/keymap_alps102key.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,50 @@
 | 
				
			|||||||
 | 
					#include "keymap_common.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
 | 
					    /* Layer 0:
 | 
				
			||||||
 | 
					     * ,---------------------------------------------------------------.  ,-----------. ,---------------.
 | 
				
			||||||
 | 
					     * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|BS |BS |F21|  |PSC|SLK|PAU| |F1 |F2 |F3 |F4 |
 | 
				
			||||||
 | 
					     * |---------------------------------------------------------------|  |-----------| |---------------|
 | 
				
			||||||
 | 
					     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \|F22|  |Ins|Hom|PgU| |F5 |F6 |F7 |F8 |
 | 
				
			||||||
 | 
					     * |---------------------------------------------------------------|  |-----------| |---------------|
 | 
				
			||||||
 | 
					     * |Ctrl  |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Ret|Ret |F23|  |Del|End|PgD| |F9 |F10|F11|F12|
 | 
				
			||||||
 | 
					     * |---------------------------------------------------------------|  |-----------| |---------------|
 | 
				
			||||||
 | 
					     * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|Shf|Shift |F24|  |   |Up |   | |F13|F14|F15|F16|
 | 
				
			||||||
 | 
					     * |---------------------------------------------------------------|  |-----------| |---------------|
 | 
				
			||||||
 | 
					     * |Fn0  |Gui|Alt  |         Space             |Alt* |Gui|Fn0      |  |Lef|Dow|Rig| |F17|F18|F19|F20|
 | 
				
			||||||
 | 
					     * `---------------------------------------------------------------'  `-----------' `---------------'
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    KEYMAP_ALPS102(
 | 
				
			||||||
 | 
					    ESC, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, BSPC,BSPC,F21,      PSCR,SLCK,PAUS,     F1,  F2,  F3,  F4,  \
 | 
				
			||||||
 | 
					    TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,BSLS,     F22,      INS, HOME,PGUP,     F5,  F6,  F7,  F8,  \
 | 
				
			||||||
 | 
					    LCTL,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,GRV, ENT,      F23,      DEL, END, PGDN,     F9,  F10, F11, F12, \
 | 
				
			||||||
 | 
					    LSFT,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,RSFT,RSFT,          F24,      NO,  UP,  NO,       F13, F14, F15, F16, \
 | 
				
			||||||
 | 
					    FN0, LGUI,LALT,          SPC,                     RALT,RGUI,               FN0,      LEFT,DOWN,RGHT,     F17, F18, F19, F20  \
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* Layer 1:
 | 
				
			||||||
 | 
					     * ,---------------------------------------------------------------.  ,-----------. ,---------------.
 | 
				
			||||||
 | 
					     * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|BS |BS |F21|  |VoD|VoU|Mut| |F1 |F2 |F3 |F4 |
 | 
				
			||||||
 | 
					     * |---------------------------------------------------------------|  |-----------| |---------------|
 | 
				
			||||||
 | 
					     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \|F22|  |Ins|Hom|PgU| |F5 |F6 |F7 |F8 |
 | 
				
			||||||
 | 
					     * |---------------------------------------------------------------|  |-----------| |---------------|
 | 
				
			||||||
 | 
					     * |Ctrl  |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Ret|Ret |F23|  |Del|End|PgD| |F9 |F10|F11|F12|
 | 
				
			||||||
 | 
					     * |---------------------------------------------------------------|  |-----------| |---------------|
 | 
				
			||||||
 | 
					     * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|Shf|Shift |F24|  |   |PgU|   | |F13|F14|F15|F16|
 | 
				
			||||||
 | 
					     * |---------------------------------------------------------------|  |-----------| |---------------|
 | 
				
			||||||
 | 
					     * |Fn0  |Gui|Alt  |         Space             |Alt* |Gui|Fn0      |  |Hom|PgD|End| |F17|F18|F19|F20|
 | 
				
			||||||
 | 
					     * `---------------------------------------------------------------'  `-----------' `---------------'
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    KEYMAP_ALPS102(
 | 
				
			||||||
 | 
					    TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,     VOLD,VOLU,MUTE,     TRNS,TRNS,TRNS,TRNS, \
 | 
				
			||||||
 | 
					    TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,     TRNS,     TRNS,TRNS,TRNS,     TRNS,TRNS,TRNS,TRNS, \
 | 
				
			||||||
 | 
					    TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,     TRNS,     TRNS,TRNS,TRNS,     TRNS,TRNS,TRNS,TRNS, \
 | 
				
			||||||
 | 
					    TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,          TRNS,     TRNS,PGUP,TRNS,     TRNS,TRNS,TRNS,TRNS, \
 | 
				
			||||||
 | 
					    TRNS,TRNS,TRNS,          TRNS,                    TRNS,TRNS,               TRNS,     HOME,PGDN,END,      TRNS,TRNS,TRNS,TRNS  \
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const uint16_t PROGMEM fn_actions[] = {
 | 
				
			||||||
 | 
					    [0] = ACTION_LAYER_MOMENTARY(1),
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
@ -34,15 +34,15 @@ extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
 | 
				
			|||||||
extern const uint16_t fn_actions[];
 | 
					extern const uint16_t fn_actions[];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Original keys */
 | 
					/* 107-key */
 | 
				
			||||||
#define KEYMAP( \
 | 
					#define KEYMAP( \
 | 
				
			||||||
    K00,K18,K19,K1A,K10,K11,K12,K08,K09,K0A,K0F,K1F,K0D,K0C,K0E, \
 | 
					    K46,K64,     K00,K18,K19,K1A,K10,K11,K12,K08,K09,K0A,K0F,K1F,K0D,K0C,K0E,   K6A,K6B,K6C,    K47,K48,K49,K4A, \
 | 
				
			||||||
    K04,K05,K06,K13,K14,K15,K16,K17,K01,K02,K03,K1B,K1C,K1D, \
 | 
					    K56,K66,     K04,K05,K06,K13,K14,K15,K16,K17,K01,K02,K03,K1B,K1C,K1D,       K6D,K6E,K6F,    K4B,K4C,K4D,K4E, \
 | 
				
			||||||
    K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K2A,K2B,K2C,K2D, \
 | 
					    K71,K77,     K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K2A,K2B,K2C,K2D,       K70,K65,K72,    K50,K51,K52,K53, \
 | 
				
			||||||
    K30,K3E,K32,K33,K34,K35,K36,K37,K38,K39,K3A,K3B,K3C,K3D, \
 | 
					    K44,K45,     K30,K3E,K32,K33,K34,K35,K36,K37,K38,K39,K3A,K3B,K3C,K3D,       K74,K75,K76,    K5E,K58,K59,K5A, \
 | 
				
			||||||
    K31,K41,K3F,        K40,                    K42,K2F \
 | 
					    K54,K55,     K31,K41,K3F,        K40,                        K42,K2F,       K78,K67,K79,    K5B,K5C,K5D,K57  \
 | 
				
			||||||
) { \
 | 
					) { \
 | 
				
			||||||
    { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_NO }, \
 | 
					    { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_NO    }, \
 | 
				
			||||||
    { KC_##K08, KC_##K09, KC_##K0A, KC_NO,    KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
 | 
					    { KC_##K08, KC_##K09, KC_##K0A, KC_NO,    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_##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_NO,    KC_##K1F }, \
 | 
					    { KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_NO,    KC_##K1F }, \
 | 
				
			||||||
@ -50,24 +50,97 @@ extern const uint16_t fn_actions[];
 | 
				
			|||||||
    { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_NO,    KC_##K2F }, \
 | 
					    { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_NO,    KC_##K2F }, \
 | 
				
			||||||
    { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
 | 
					    { 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_##K3F }, \
 | 
					    { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
 | 
				
			||||||
    { KC_##K40, KC_##K41, KC_##K42, KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO }, \
 | 
					    { KC_##K40, KC_##K41, KC_##K42, KC_NO,    KC_##K44, KC_##K45, KC_##K46, KC_##K47 }, \
 | 
				
			||||||
    { KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO }, \
 | 
					    { KC_##K48, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E, KC_NO    }, \
 | 
				
			||||||
    { KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO }, \
 | 
					    { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
 | 
				
			||||||
    { KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO }, \
 | 
					    { KC_##K58, KC_##K59, KC_##K5A, KC_##K5B, KC_##K5C, KC_##K5D, KC_##K5E, KC_NO    }, \
 | 
				
			||||||
    { KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO }, \
 | 
					    { KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
 | 
				
			||||||
    { KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO }, \
 | 
					    { KC_NO,    KC_NO,    KC_##K6A, KC_##K6B, KC_##K6C, KC_##K6D, KC_##K6E, KC_##K6F }, \
 | 
				
			||||||
    { KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO }, \
 | 
					    { KC_##K70, KC_##K71, KC_##K72, KC_NO,    KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
 | 
				
			||||||
    { KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO }, \
 | 
					    { KC_##K78, KC_##K79, KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO    }  \
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					/* 77-key */
 | 
				
			||||||
 | 
					#define KEYMAP_77( \
 | 
				
			||||||
 | 
					    K00,K18,K19,K1A,K10,K11,K12,K08,K09,K0A,K0F,K1F,K0D,K0C,K0E,   K6A,K6B,K6C, \
 | 
				
			||||||
 | 
					    K04,K05,K06,K13,K14,K15,K16,K17,K01,K02,K03,K1B,K1C,K1D,       K6D,K6E,K6F, \
 | 
				
			||||||
 | 
					    K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K2A,K2B,K2C,K2D,       K70,K65,K72, \
 | 
				
			||||||
 | 
					    K30,K3E,K32,K33,K34,K35,K36,K37,K38,K39,K3A,K3B,K3C,K3D,       K74,K75,K76, \
 | 
				
			||||||
 | 
					    K31,K41,K3F,        K40,                        K42,K2F,       K78,K67,K79  \
 | 
				
			||||||
 | 
					) KEYMAP( \
 | 
				
			||||||
 | 
					    F1,  F2,    K00,K18,K19,K1A,K10,K11,K12,K08,K09,K0A,K0F,K1F,K0D,K0C,K0E,    K6A,K6B,K6C,    NLCK,PSLS,PAST,PMNS, \
 | 
				
			||||||
 | 
					    F3,  F4,    K04,K05,K06,K13,K14,K15,K16,K17,K01,K02,K03,K1B,K1C,K1D,        K6D,K6E,K6F,    P7,  P8,  P9,  PPLS, \
 | 
				
			||||||
 | 
					    F5,  F6,    K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K2A,K2B,K2C,K2D,        K70,K65,K72,    P4,  P5,  P6,  PPLS, \
 | 
				
			||||||
 | 
					    F7,  F8,    K30,K3E,K32,K33,K34,K35,K36,K37,K38,K39,K3A,K3B,K3C,K3D,        K74,K75,K76,    P1,  P2,  P3,  PENT, \
 | 
				
			||||||
 | 
					    F9,  F10,   K31,K41,K3F,        K40,                        K42,K2F,        K78,K67,K79     P0,  P0,  PDOT,PENT  \
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/* 62-key */
 | 
				
			||||||
    { K48, K49, K4A, K4B, K4C, K4D, K4E, K4F }, \
 | 
					#define KEYMAP_62( \
 | 
				
			||||||
    { K50, K51, K52, K53, K54, K55, K56, K57 }, \
 | 
					    K00,K18,K19,K1A,K10,K11,K12,K08,K09,K0A,K0F,K1F,K0D,K0C,K0E, \
 | 
				
			||||||
    { K58, K59, K5A, K5B, K5C, K5D, K5E, K5F }, \
 | 
					    K04,K05,K06,K13,K14,K15,K16,K17,K01,K02,K03,K1B,K1C,K1D, \
 | 
				
			||||||
    { K60, K61, K62, K63, K64, K65, K66, K67 }, \
 | 
					    K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K2A,K2B,K2C,K2D, \
 | 
				
			||||||
    { K68, K69, K6A, K6B, K6C, K6D, K6E, K6F }, \
 | 
					    K30,K3E,K32,K33,K34,K35,K36,K37,K38,K39,K3A,K3B,K3C,K3D, \
 | 
				
			||||||
    { K70, K71, K72, K73, K74, K75, K76, K77 }, \
 | 
					    K31,K41,K3F,        K40,                        K42,K2F  \
 | 
				
			||||||
    { K78, K79, K7A, K7B, K7C, K7D, K7E, K7F }, \
 | 
					) KEYMAP( \
 | 
				
			||||||
*/
 | 
					    F1,  F2,    K00,K18,K19,K1A,K10,K11,K12,K08,K09,K0A,K0F,K1F,K0D,K0C,K0E,   INS, HOME,PGUP,     NLCK,PSLS,PAST,PMNS, \
 | 
				
			||||||
 | 
					    F3,  F4,    K04,K05,K06,K13,K14,K15,K16,K17,K01,K02,K03,K1B,K1C,K1D,       DEL, END, PGDN,     P7,  P8,  P9,  PPLS, \
 | 
				
			||||||
 | 
					    F5,  F6,    K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K2A,K2B,K2C,K2D,       PSCR,SLCK,PAUS,     P4,  P5,  P6,  PPLS, \
 | 
				
			||||||
 | 
					    F7,  F8,    K30,K3E,K32,K33,K34,K35,K36,K37,K38,K39,K3A,K3B,K3C,K3D,       F11, UP,  F12,      P1,  P2,  P3,  PENT, \
 | 
				
			||||||
 | 
					    F9,  F10,   K31,K41,K3F,        K40,                        K42,K2F,       LEFT,DOWN,RGHT,     P0,  P0,  PDOT,PENT  \
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* 50-key */
 | 
				
			||||||
 | 
					#define KEYMAP_50( \
 | 
				
			||||||
 | 
					    K00,K01,K02,    K03,K04,K05,    K20,K21,K22,K23, \
 | 
				
			||||||
 | 
					    K08,K09,K0A,    K0B,K0C,K0D,    K28,K29,K2A,K35, \
 | 
				
			||||||
 | 
					    K10,K11,K12,    K13,K14,K15,    K30,K31,K32,K36, \
 | 
				
			||||||
 | 
					    K18,K19,K1A,    K1B,K1C,K1D,    K38,K39,K3A,K37, \
 | 
				
			||||||
 | 
					    K16,K1E,K0E,    K0F,K1F,K17,    K33,K3B,K2B,K3F  \
 | 
				
			||||||
 | 
					) { \
 | 
				
			||||||
 | 
					    { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_NO,    KC_NO,   }, \
 | 
				
			||||||
 | 
					    { 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_NO,    KC_NO,    KC_NO,    KC_NO,   }, \
 | 
				
			||||||
 | 
					    { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_NO,    KC_NO,    KC_NO,    KC_NO,   }, \
 | 
				
			||||||
 | 
					    { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_NO,    KC_##K35, KC_##K36, KC_##K37 }, \
 | 
				
			||||||
 | 
					    { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_NO,    KC_NO,    KC_NO,    KC_##K3F }, \
 | 
				
			||||||
 | 
					    { KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,   }, \
 | 
				
			||||||
 | 
					    { KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,   }, \
 | 
				
			||||||
 | 
					    { KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,   }, \
 | 
				
			||||||
 | 
					    { KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,   }, \
 | 
				
			||||||
 | 
					    { KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,   }, \
 | 
				
			||||||
 | 
					    { KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,   }, \
 | 
				
			||||||
 | 
					    { KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,   }, \
 | 
				
			||||||
 | 
					    { KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,   }  \
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Alps 102-key */
 | 
				
			||||||
 | 
					#define KEYMAP_ALPS102( \
 | 
				
			||||||
 | 
					    K00, K0F, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E,   K44, K45, K46,   K43, K41, K42, K4A, \
 | 
				
			||||||
 | 
					    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D,      K1E,   K54, K55, K56,   K50, K51, K52, K5A, \
 | 
				
			||||||
 | 
					    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D,      K2E,   K64, K65, K66,   K60, K61, K62, K6B, \
 | 
				
			||||||
 | 
					    K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D,           K3E,   K74, K75, K76,   K70, K71, K72, K7B, \
 | 
				
			||||||
 | 
					    K31, K47, K3F,                 K40,               K4F, K48,                K2F,   K77, K67, K57,   K73, K63, K53, K4E  \
 | 
				
			||||||
 | 
					) { \
 | 
				
			||||||
 | 
					    { 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_NO,   }, \
 | 
				
			||||||
 | 
					    { 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_##K3F }, \
 | 
				
			||||||
 | 
					    { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47 }, \
 | 
				
			||||||
 | 
					    { KC_##K48, KC_NO,    KC_##K4A, KC_NO,    KC_NO,    KC_NO,    KC_##K4E, KC_##K4F }, \
 | 
				
			||||||
 | 
					    { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
 | 
				
			||||||
 | 
					    { KC_NO,    KC_NO,    KC_##K5A, KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,   }, \
 | 
				
			||||||
 | 
					    { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
 | 
				
			||||||
 | 
					    { KC_NO,    KC_NO,    KC_NO,    KC_##K6B, KC_NO,    KC_NO,    KC_NO,    KC_NO,   }, \
 | 
				
			||||||
 | 
					    { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
 | 
				
			||||||
 | 
					    { KC_NO,    KC_NO,    KC_NO,    KC_##K7B, KC_NO,    KC_NO,    KC_NO,    KC_NO,   }  \
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
@ -15,7 +15,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			|||||||
     * |Ctrl |Gui|Alt  |         Space             |Alt  |Gui|Ctrl |
 | 
					     * |Ctrl |Gui|Alt  |         Space             |Alt  |Gui|Ctrl |
 | 
				
			||||||
     * `-----------------------------------------------------------'
 | 
					     * `-----------------------------------------------------------'
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    KEYMAP(
 | 
					    KEYMAP_62(
 | 
				
			||||||
    ESC, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, BSLS,GRV, \
 | 
					    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,   FN1, QUOT,NO,  ENT, \
 | 
					    LCTL,A,   S,   D,   F,   G,   H,   J,   K,   L,   FN1, QUOT,NO,  ENT, \
 | 
				
			||||||
@ -23,7 +23,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			|||||||
    LCTL,LGUI,LALT,          FN3,                               RGUI,RCTL \
 | 
					    LCTL,LGUI,LALT,          FN3,                               RGUI,RCTL \
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    KEYMAP(
 | 
					    KEYMAP_62(
 | 
				
			||||||
    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, \
 | 
				
			||||||
    CAPS,NO,  NO,  NO,  NO,  NO,  NO,  NO,  PSCR,SLCK,PAUS, UP, NO,  BSPC, \
 | 
					    CAPS,NO,  NO,  NO,  NO,  NO,  NO,  NO,  PSCR,SLCK,PAUS, UP, NO,  BSPC, \
 | 
				
			||||||
    LCTL,VOLD,VOLU,MUTE,NO,  NO,  PAST,PSLS,HOME,PGUP,LEFT,RGHT,NO,  ENT, \
 | 
					    LCTL,VOLD,VOLU,MUTE,NO,  NO,  PAST,PSLS,HOME,PGUP,LEFT,RGHT,NO,  ENT, \
 | 
				
			||||||
@ -31,7 +31,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			|||||||
    LCTL,LGUI,LALT,          SPC,                               RGUI,RCTL \
 | 
					    LCTL,LGUI,LALT,          SPC,                               RGUI,RCTL \
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    KEYMAP(
 | 
					    KEYMAP_62(
 | 
				
			||||||
    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, \
 | 
				
			||||||
    TAB, NO,  NO,  NO,  NO,  NO,  WH_L,WH_D,WH_U,WH_R,WSTP,WBAK,WFWD,BSPC, \
 | 
					    TAB, NO,  NO,  NO,  NO,  NO,  WH_L,WH_D,WH_U,WH_R,WSTP,WBAK,WFWD,BSPC, \
 | 
				
			||||||
    LCTL,NO,  ACL0,ACL1,ACL2,NO,  MS_L,MS_D,MS_U,MS_R,TRNS,NO,  NO,  ENT, \
 | 
					    LCTL,NO,  ACL0,ACL1,ACL2,NO,  MS_L,MS_D,MS_U,MS_R,TRNS,NO,  NO,  ENT, \
 | 
				
			||||||
@ -39,7 +39,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			|||||||
    LCTL,LGUI,LALT,          BTN1,                              RGUI,RCTL \
 | 
					    LCTL,LGUI,LALT,          BTN1,                              RGUI,RCTL \
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    KEYMAP(
 | 
					    KEYMAP_62(
 | 
				
			||||||
    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, \
 | 
				
			||||||
    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,  NO,  ENT, \
 | 
					    LCTL,NO,  LEFT,DOWN,RGHT,NO,  LEFT,DOWN,UP,  RGHT,NO,  NO,  NO,  ENT, \
 | 
				
			||||||
@ -47,7 +47,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			|||||||
    LCTL,LGUI,LALT,          SPC,                               RGUI,RCTL \
 | 
					    LCTL,LGUI,LALT,          SPC,                               RGUI,RCTL \
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    KEYMAP(
 | 
					    KEYMAP_62(
 | 
				
			||||||
    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, \
 | 
				
			||||||
    TAB, NO,  NO,  NO,  NO,  NO,  WH_L,WH_D,MS_U,WH_U,WH_R,BTN4,BTN5,FN4, \
 | 
					    TAB, NO,  NO,  NO,  NO,  NO,  WH_L,WH_D,MS_U,WH_U,WH_R,BTN4,BTN5,FN4, \
 | 
				
			||||||
    LCTL,VOLD,VOLU,MUTE,NO,  NO,  BTN2,MS_L,MS_D,MS_R,BTN1,NO,  NO,  ENT, \
 | 
					    LCTL,VOLD,VOLU,MUTE,NO,  NO,  BTN2,MS_L,MS_D,MS_R,BTN1,NO,  NO,  ENT, \
 | 
				
			||||||
 | 
				
			|||||||
@ -8,28 +8,40 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			|||||||
     * |-----------------------------------------------------------|
 | 
					     * |-----------------------------------------------------------|
 | 
				
			||||||
     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \|
 | 
					     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \|
 | 
				
			||||||
     * |-----------------------------------------------------------|
 | 
					     * |-----------------------------------------------------------|
 | 
				
			||||||
     * |Ctrl  |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|  #|Ret |
 | 
					     * |Ctrl  |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Ret|Ret |
 | 
				
			||||||
     * |-----------------------------------------------------------|
 | 
					     * |-----------------------------------------------------------|
 | 
				
			||||||
     * |Shif|  \|  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|???|Shift |
 | 
					     * |Shif|Shf|  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|???|Shift |
 | 
				
			||||||
     * |-----------------------------------------------------------|
 | 
					     * |-----------------------------------------------------------|
 | 
				
			||||||
     * |Ctrl |Gui|Alt  |         Space             |Alt* |Gui|Ctrl |
 | 
					     * |Ctrl |Gui|Alt  |         Space             |Alt* |Gui|Fn   |
 | 
				
			||||||
     * `-----------------------------------------------------------'
 | 
					     * `-----------------------------------------------------------'
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    KEYMAP(
 | 
					    KEYMAP(
 | 
				
			||||||
    GRV, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, BSLS,BSPC, \
 | 
					    F1,  F2,    GRV, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, NO,  BSPC,     INS, HOME,PGUP,     NLCK,PSLS,PAST,PMNS, \
 | 
				
			||||||
    TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,BSLS, \
 | 
					    F3,  F4,    TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,BSLS,          DEL, END, PGDN,     P7,  P8,  P9,  PPLS, \
 | 
				
			||||||
    LCTL,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,NUHS,ENT, \
 | 
					    F5,  F6,    LCTL,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,ENT, ENT,           PSCR,SLCK,PAUS,     P4,  P5,  P6,  PPLS, \
 | 
				
			||||||
    LSFT,NUBS,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,NO,  FN0, \
 | 
					    F7,  F8,    LSFT,LSFT,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,NO,  RSFT,          F11, UP,  F12,      P1,  P2,  P3,  PENT, \
 | 
				
			||||||
    LCTL,LGUI,LALT,          SPC,                               RGUI,RCTL \
 | 
					    F9,  F10,   LCTL,LGUI,LALT,          SPC,                               RGUI,FN0,           LEFT,DOWN,RGHT,     P0,  P0,  PDOT,PENT  \
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* 1: HHKB */
 | 
					    /* 1: HHKB
 | 
				
			||||||
 | 
					     * ,-----------------------------------------------------------.
 | 
				
			||||||
 | 
					     * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|???|Del|
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------|
 | 
				
			||||||
 | 
					     * |Caps |   |   |   |   |   |   |   |Psc|Slk|Pau| Up|   |  Ins|
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------|
 | 
				
			||||||
 | 
					     * |Ctrl  |VoD|VoU|VoM|   |   |  *|  /|Hom|PgU|Lef|Rig|Ret|Ret |
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------|
 | 
				
			||||||
 | 
					     * |Shif|Shi|   |   |   |   |   |  +|  -|End|PgD|Dow|???|Shift |
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------|
 | 
				
			||||||
 | 
					     * |Ctrl |Gui|Alt  |         Space             |Alt* |Gui|Fn   |
 | 
				
			||||||
 | 
					     * `-----------------------------------------------------------'
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    KEYMAP(
 | 
					    KEYMAP(
 | 
				
			||||||
    ESC, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, INS, DEL, \
 | 
					    F1,  F2,    ESC, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, NO,  DEL,      INS, HOME,PGUP,     NLCK,PSLS,PAST,PMNS, \
 | 
				
			||||||
    CAPS,NO,  NO,  NO,  NO,  NO,  NO,  NO,  PSCR,SLCK,PAUS, UP, NO,  INS, \
 | 
					    F3,  F4,    CAPS,NO,  NO,  NO,  NO,  NO,  NO,  NO,  PSCR,SLCK,PAUS, UP, NO,  INS,           DEL, END, PGDN,     P7,  P8,  P9,  PPLS, \
 | 
				
			||||||
    LCTL,VOLD,VOLU,MUTE,NO,  NO,  PAST,PSLS,HOME,PGUP,LEFT,RGHT,NO,  ENT, \
 | 
					    F5,  F6,    TRNS,VOLD,VOLU,MUTE,NO,  NO,  PAST,PSLS,HOME,PGUP,LEFT,RGHT,ENT, ENT,           PSCR,SLCK,PAUS,     P4,  P5,  P6,  PPLS, \
 | 
				
			||||||
    LSFT,NO,  NO,  NO,  NO,  NO,  NO,  PPLS,PMNS,END, PGDN,DOWN,NO,  TRNS, \
 | 
					    F7,  F8,    TRNS,TRNS,NO,  NO,  NO,  NO,  NO,  PPLS,PMNS,END, PGDN,DOWN,NO,  TRNS,          F11, UP,  F12,      P1,  P2,  P3,  PENT, \
 | 
				
			||||||
    LCTL,LGUI,LALT,          SPC,                               RGUI,RCTL \
 | 
					    F9,  F10,   TRNS,TRNS,TRNS,          TRNS,                              TRNS,TRNS,          LEFT,DOWN,RGHT,     P0,  P0,  PDOT,PENT  \
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -67,43 +67,33 @@ uint8_t matrix_cols(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void enable_break(void)
 | 
					static void enable_break(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    uint8_t ret;
 | 
					 | 
				
			||||||
    print("Enable break: ");
 | 
					    print("Enable break: ");
 | 
				
			||||||
    // valid scancode: 00-77h
 | 
					    while (ibm4704_send(0xFC)) { _delay_ms(10); }
 | 
				
			||||||
    for (uint8_t code = 0; code < 0x78; code++) {
 | 
					    // valid scancode: 00-79h
 | 
				
			||||||
        while (ibm4704_send(0x80|code) != 0) {
 | 
					    for (uint8_t code = 0; code < 0x7F; code++) {
 | 
				
			||||||
            print("z");
 | 
					        while (ibm4704_send(0x80|code)) _delay_ms(10);
 | 
				
			||||||
            _delay_us(500);
 | 
					        _delay_ms(5);   // wait for response
 | 
				
			||||||
        }
 | 
					        // No response(FF) when ok, FD when out of bound
 | 
				
			||||||
        _delay_us(2000);
 | 
					        xprintf("s%02X:r%02X ", code, ibm4704_recv());
 | 
				
			||||||
        ret = ibm4704_recv();
 | 
					 | 
				
			||||||
        if (ret != 0xff) {
 | 
					 | 
				
			||||||
            xprintf("c%02X:r%02X ", code, ret);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        _delay_us(1000);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    _delay_us(1000);
 | 
					    while (ibm4704_send(0xFF)) { _delay_ms(10); } // End
 | 
				
			||||||
    while (ibm4704_send(0xFF) != 0) { _delay_us(500); } // End
 | 
					 | 
				
			||||||
    print("End\n");
 | 
					    print("End\n");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void matrix_setup(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ibm4704_init();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void matrix_init(void)
 | 
					void matrix_init(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    uint8_t ret;
 | 
					 | 
				
			||||||
    debug_enable = true;
 | 
					    debug_enable = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ibm4704_init();
 | 
					 | 
				
			||||||
    matrix_clear();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // read keyboard id
 | 
					 | 
				
			||||||
    while ((ret = ibm4704_recv()) == 0xFF) {
 | 
					 | 
				
			||||||
        ibm4704_send(0xFE);
 | 
					 | 
				
			||||||
        _delay_us(100);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    _delay_ms(2000);    // wait for starting up debug console 
 | 
					 | 
				
			||||||
    print("IBM 4704 converter\n");
 | 
					    print("IBM 4704 converter\n");
 | 
				
			||||||
    xprintf("Keyboard ID: %02X\n", ret);
 | 
					    matrix_clear();
 | 
				
			||||||
 | 
					    _delay_ms(2000);    // wait for keyboard starting up
 | 
				
			||||||
 | 
					    xprintf("Keyboard ID: %02X\n", ibm4704_recv());
 | 
				
			||||||
    enable_break();
 | 
					    enable_break();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -116,14 +106,16 @@ uint8_t matrix_scan(void)
 | 
				
			|||||||
    if (code==0xFF) {
 | 
					    if (code==0xFF) {
 | 
				
			||||||
        // Not receivd
 | 
					        // Not receivd
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
    } else if ((code&0x78)==0x78) {
 | 
					    } else if ((code&0x7F) >= 0x7A) {
 | 
				
			||||||
        // 0xFF-F8 and 0x7F-78 is not scancode
 | 
					        // 0xFF-FA and 0x7F-7A is not scancode
 | 
				
			||||||
        xprintf("Error: %0X\n", code);
 | 
					        xprintf("Error: %02X\n", code);
 | 
				
			||||||
        matrix_clear();
 | 
					        matrix_clear();
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
    } else if (code&0x80) {
 | 
					    } else if (code&0x80) {
 | 
				
			||||||
 | 
					        dprintf("%02X\n", code);
 | 
				
			||||||
        matrix_make(code);
 | 
					        matrix_make(code);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
 | 
					        dprintf("%02X\n", code);
 | 
				
			||||||
        matrix_break(code);
 | 
					        matrix_break(code);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return 1;
 | 
					    return 1;
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@
 | 
				
			|||||||
TARGET = m0110_lufa
 | 
					TARGET = m0110_lufa
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -87,10 +87,10 @@ PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/lufa.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/protocol.mk
 | 
					include $(TMK_DIR)/protocol.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@
 | 
				
			|||||||
TARGET = m0110_lufa
 | 
					TARGET = m0110_lufa
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -89,10 +89,10 @@ PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/lufa.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/protocol.mk
 | 
					include $(TMK_DIR)/protocol.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -1,8 +1,8 @@
 | 
				
			|||||||
# Target file name (without extension).
 | 
					# Target file name (without extension).
 | 
				
			||||||
TARGET = m0110_pjrc
 | 
					TARGET = m0110_lufa
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -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_default.c
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CONFIG_H = config.h
 | 
					CONFIG_H = config.h
 | 
				
			||||||
@ -24,10 +25,8 @@ 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 = atmega32u2       # TMK converter rev2
 | 
				
			||||||
MCU = atmega32u4       # Teensy 2.0
 | 
					MCU = atmega32u4       # TMK converter rev1
 | 
				
			||||||
#MCU = at90usb646       # Teensy++ 1.0
 | 
					 | 
				
			||||||
#MCU = at90usb1286      # Teensy++ 2.0
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Processor frequency.
 | 
					# Processor frequency.
 | 
				
			||||||
@ -38,6 +37,29 @@ MCU = atmega32u4       # Teensy 2.0
 | 
				
			|||||||
F_CPU = 16000000
 | 
					F_CPU = 16000000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# LUFA specific
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Target architecture (see library "Board Types" documentation).
 | 
				
			||||||
 | 
					ARCH = AVR8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Input clock frequency.
 | 
				
			||||||
 | 
					#     This will define a symbol, F_USB, in all source code files equal to the
 | 
				
			||||||
 | 
					#     input clock frequency (before any prescaling is performed) in Hz. This value may
 | 
				
			||||||
 | 
					#     differ from F_CPU if prescaling is used on the latter, and is required as the
 | 
				
			||||||
 | 
					#     raw input clock is fed directly to the PLL sections of the AVR for high speed
 | 
				
			||||||
 | 
					#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
 | 
				
			||||||
 | 
					#     at the end, this will be done automatically to create a 32-bit value in your
 | 
				
			||||||
 | 
					#     source code.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#     If no clock division is performed on the input clock inside the AVR (via the
 | 
				
			||||||
 | 
					#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
 | 
				
			||||||
 | 
					F_USB = $(F_CPU)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Interrupt driven control endpoint task
 | 
				
			||||||
 | 
					OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Boot Section Size in bytes
 | 
					# Boot Section Size in bytes
 | 
				
			||||||
#   Teensy halfKay   512
 | 
					#   Teensy halfKay   512
 | 
				
			||||||
#   Atmel DFU loader 4096
 | 
					#   Atmel DFU loader 4096
 | 
				
			||||||
@ -55,6 +77,7 @@ 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -64,10 +87,10 @@ PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/pjrc.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/protocol.mk
 | 
					include $(TMK_DIR)/protocol.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
							
								
								
									
										96
									
								
								converter/m0110_usb/Makefile.tmk_rev2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								converter/m0110_usb/Makefile.tmk_rev2
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,96 @@
 | 
				
			|||||||
 | 
					# Target file name (without extension).
 | 
				
			||||||
 | 
					TARGET = m0110_lufa
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Directory common source filess exist
 | 
				
			||||||
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
 | 
					TARGET_DIR = .
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# keyboard dependent files
 | 
				
			||||||
 | 
					SRC =	matrix.c \
 | 
				
			||||||
 | 
						led.c \
 | 
				
			||||||
 | 
						keymap_common.c \
 | 
				
			||||||
 | 
						m0110.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# To use own keymap file run make like: make keymap=hasu
 | 
				
			||||||
 | 
					ifdef KEYMAP
 | 
				
			||||||
 | 
					    SRC += keymap_$(KEYMAP).c
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					    SRC += keymap_default.c
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONFIG_H = config.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# MCU name, you MUST set this to match the board you are using
 | 
				
			||||||
 | 
					# type "make clean" after changing this, so all files will be rebuilt
 | 
				
			||||||
 | 
					MCU = atmega32u2       # TMK converter rev2
 | 
				
			||||||
 | 
					#MCU = atmega32u4       # TMK converter rev1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Processor frequency.
 | 
				
			||||||
 | 
					#   Normally the first thing your program should do is set the clock prescaler,
 | 
				
			||||||
 | 
					#   so your program will run at the correct speed.  You should also set this
 | 
				
			||||||
 | 
					#   variable to same clock speed.  The _delay_ms() macro uses this, and many
 | 
				
			||||||
 | 
					#   examples use this variable to calculate timings.  Do not add a "UL" here.
 | 
				
			||||||
 | 
					F_CPU = 16000000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# LUFA specific
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Target architecture (see library "Board Types" documentation).
 | 
				
			||||||
 | 
					ARCH = AVR8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Input clock frequency.
 | 
				
			||||||
 | 
					#     This will define a symbol, F_USB, in all source code files equal to the
 | 
				
			||||||
 | 
					#     input clock frequency (before any prescaling is performed) in Hz. This value may
 | 
				
			||||||
 | 
					#     differ from F_CPU if prescaling is used on the latter, and is required as the
 | 
				
			||||||
 | 
					#     raw input clock is fed directly to the PLL sections of the AVR for high speed
 | 
				
			||||||
 | 
					#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
 | 
				
			||||||
 | 
					#     at the end, this will be done automatically to create a 32-bit value in your
 | 
				
			||||||
 | 
					#     source code.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#     If no clock division is performed on the input clock inside the AVR (via the
 | 
				
			||||||
 | 
					#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
 | 
				
			||||||
 | 
					F_USB = $(F_CPU)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Interrupt driven control endpoint task
 | 
				
			||||||
 | 
					OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Boot Section Size in bytes
 | 
				
			||||||
 | 
					#   Teensy halfKay   512
 | 
				
			||||||
 | 
					#   Atmel DFU loader 4096
 | 
				
			||||||
 | 
					#   LUFA bootloader  4096
 | 
				
			||||||
 | 
					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
 | 
				
			||||||
 | 
					#SLEEP_LED_ENABLE = yes  # Breathing sleep LED during USB suspend
 | 
				
			||||||
 | 
					#NKRO_ENABLE = yes	# USB Nkey Rollover - not yet supported in LUFA
 | 
				
			||||||
 | 
					#KEYMAP_SECTION_ENABLE = yes	# fixed address keymap for keymap editor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#---------------- Programming Options --------------------------
 | 
				
			||||||
 | 
					PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Search Path
 | 
				
			||||||
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
 | 
					include $(TMK_DIR)/protocol.mk
 | 
				
			||||||
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
@ -59,19 +59,16 @@ 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 -f Makefile.rev2 clean
 | 
				
			||||||
    $ make -f Makefile [KEYMAP={default|plain|intl|spacefn|hasu}]
 | 
					    $ make -f Makefile.rev2 [KEYMAP={default|intl|spacefn|hasu}]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Use `Makefile.teensy` instead for Teensy.
 | 
					Use `Maefile.tmk_rev1` for TMK converter Rev.1, `Makefile.teensy` for Teensy instead.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Keymap
 | 
					Keymap
 | 
				
			||||||
------
 | 
					------
 | 
				
			||||||
To create your own keymap copy existent keymap file to `keymap_name.c` and edit it. You can build it like this.
 | 
					To create your own keymap copy existent keymap file to `keymap_name.c` and edit it.
 | 
				
			||||||
 | 
					 | 
				
			||||||
    $ make -f Makefile clean
 | 
					 | 
				
			||||||
    $ make -f Makefile KEYMAP=name
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
Copyright 2011,2012,2014 Jun Wako <wakojun@gmail.com>
 | 
					Copyright 2011,2012,2014,2015 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
 | 
				
			||||||
@ -24,52 +24,11 @@ extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
 | 
				
			|||||||
extern const uint16_t fn_actions[];
 | 
					extern const uint16_t fn_actions[];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* 
 | 
					/* Common layout for M0110 and M0110A
 | 
				
			||||||
 * The keymap works with both M0110 and M0110A keyboards. As you can see, the M0110A is a superset
 | 
					 * This keymap works with both keyboards. As you can see, the M0110A is 
 | 
				
			||||||
 * of the M0110 keyboard, with only one exception: 'Enter' in M0110 does not exist
 | 
					 * a superset of M0110 keyboard, only one exception is 'Enter'(34) of M0110
 | 
				
			||||||
 * on the M0110A, but since it generates a unique scan code which is not used for some other key in
 | 
					 * does not exist on the M0110A.
 | 
				
			||||||
 * 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|  =|  /|  *|
 | 
					 * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backs| |Clr|  =|  /|  *|
 | 
				
			||||||
 * |---------------------------------------------------------| |---------------|
 | 
					 * |---------------------------------------------------------| |---------------|
 | 
				
			||||||
@ -81,7 +40,33 @@ extern const uint16_t fn_actions[];
 | 
				
			|||||||
 * |---------------------------------------------------------| |-----------|Ent|
 | 
					 * |---------------------------------------------------------| |-----------|Ent|
 | 
				
			||||||
 * |Opt  |Mac    |         Space         |Ent|  \|Lft|Rgt|Dn | |      0|  .|   |
 | 
					 * |Opt  |Mac    |         Space         |Ent|  \|Lft|Rgt|Dn | |      0|  .|   |
 | 
				
			||||||
 * `---------------------------------------------------------' `---------------'
 | 
					 * `---------------------------------------------------------' `---------------'
 | 
				
			||||||
 * NOTE: Ent between Space and \ means Enter on M0110.
 | 
					 *
 | 
				
			||||||
 | 
					 * M0110A scan codes
 | 
				
			||||||
 | 
					 * ,---------------------------------------------------------. ,---------------.
 | 
				
			||||||
 | 
					 * | 32| 12| 13| 14| 15| 17| 16| 1A| 1C| 19| 1D| 1B| 18|   33| | 47| 68| 6D| 62|
 | 
				
			||||||
 | 
					 * |---------------------------------------------------------| |---------------|
 | 
				
			||||||
 | 
					 * |   30| 0C| 0D| 0E| 0F| 10| 11| 20| 22| 1F| 23| 21| 1E|   | | 59| 5B| 5C| 4E|
 | 
				
			||||||
 | 
					 * |-----------------------------------------------------'   | |---------------|
 | 
				
			||||||
 | 
					 * |    39| 00| 01| 02| 03| 05| 04| 26| 28| 25| 29| 27|    24| | 56| 57| 58| 66|
 | 
				
			||||||
 | 
					 * |---------------------------------------------------------| |---------------|
 | 
				
			||||||
 | 
					 * |      38| 06| 07| 08| 09| 0B| 2D| 2E| 2B| 2F| 2C|  38| 4D| | 53| 54| 55|   |
 | 
				
			||||||
 | 
					 * `---------------------------------------------------------' |-----------| 4C|
 | 
				
			||||||
 | 
					 * |   3A|     37|             31            | 2A| 46| 42| 48| |     52| 41|   |
 | 
				
			||||||
 | 
					 * `---------------------------------------------------------' `---------------'
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * M0110 + M0120 scan codes
 | 
				
			||||||
 | 
					 * ,---------------------------------------------------------. ,---------------.
 | 
				
			||||||
 | 
					 * | 32| 12| 13| 14| 15| 17| 16| 1A| 1C| 19| 1D| 1B| 18|   33| | 47| 68| 6D| 62|
 | 
				
			||||||
 | 
					 * |---------------------------------------------------------| |---------------|
 | 
				
			||||||
 | 
					 * |   30| 0C| 0D| 0E| 0F| 10| 11| 20| 22| 1F| 23| 21| 1E| 2A| | 59| 5B| 5C| 4E|
 | 
				
			||||||
 | 
					 * |---------------------------------------------------------| |---------------|
 | 
				
			||||||
 | 
					 * |    39| 00| 01| 02| 03| 05| 04| 26| 28| 25| 29| 27|    24| | 56| 57| 58| 66|
 | 
				
			||||||
 | 
					 * |---------------------------------------------------------| |---------------|
 | 
				
			||||||
 | 
					 * |      38| 06| 07| 08| 09| 0B| 2D| 2E| 2B| 2F| 2C|      38| | 53| 54| 55|   |
 | 
				
			||||||
 | 
					 * `---------------------------------------------------------' |-----------| 4C|
 | 
				
			||||||
 | 
					 *      | 3A|  37|             31              |   34| 3A|     |     52| 41|   |
 | 
				
			||||||
 | 
					 *      `------------------------------------------------'     `---------------'
 | 
				
			||||||
 | 
					 * Two right and left keys of 38 and 3A are identical, you cannot discriminate those two.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define KEYMAP( \
 | 
					#define KEYMAP( \
 | 
				
			||||||
    K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33,  K47,K68,K6D,K62, \
 | 
					    K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33,  K47,K68,K6D,K62, \
 | 
				
			||||||
@ -106,25 +91,30 @@ extern const uint16_t fn_actions[];
 | 
				
			|||||||
    { KC_##K68, KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_##K6D, KC_NO,    KC_NO    }, \
 | 
					    { KC_##K68, KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_##K6D, KC_NO,    KC_NO    }, \
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* International keyboard
 | 
					/* International keyboard layout for M0110 + M0120
 | 
				
			||||||
 *  ,---------------------------------------------------------.
 | 
					 * https://en.wikipedia.org/wiki/File:Apple_Macintosh_Plus_Keyboard.jpg
 | 
				
			||||||
 *  | 32| 12| 13| 14| 15| 17| 16| 1A| 1C| 19| 1D| 1B| 18|   33|
 | 
					 * Probably International keyboard layout of M0110A doesn't exist.
 | 
				
			||||||
 *  |---------------------------------------------------------|
 | 
					 *
 | 
				
			||||||
 *  |   30| 0C| 0D| 0E| 0F| 10| 11| 20| 22| 1F| 23| 21| 1E| 2A|
 | 
					 * M0110 + M0120 scan codes
 | 
				
			||||||
 *  |------------------------------------------------------,  |
 | 
					 * ,---------------------------------------------------------. ,---------------.
 | 
				
			||||||
 *  |    39| 00| 01| 02| 03| 05| 04| 26| 28| 25| 29| 27| 24|  |
 | 
					 * | 32| 12| 13| 14| 15| 17| 16| 1A| 1C| 19| 1D| 1B| 18|   33| | 47| 68| 6D| 62|
 | 
				
			||||||
 *  |---------------------------------------------------------|
 | 
					 * |---------------------------------------------------------| |---------------|
 | 
				
			||||||
 *  |  38| 06| 07| 08| 09| 0B| 2D| 2E| 2B| 2F| 2C| 0A|      38|
 | 
					 * |   30| 0C| 0D| 0E| 0F| 10| 11| 20| 22| 1F| 23| 21| 1E| 2A| | 59| 5B| 5C| 4E|
 | 
				
			||||||
 *  `---------------------------------------------------------'
 | 
					 * |------------------------------------------------------,  | |---------------|
 | 
				
			||||||
 *       | 3A|  37|             34              |   31| 3A|
 | 
					 * |    39| 00| 01| 02| 03| 05| 04| 26| 28| 25| 29| 27| 24|  | | 56| 57| 58| 66|
 | 
				
			||||||
 *       `------------------------------------------------'
 | 
					 * |---------------------------------------------------------| |---------------|
 | 
				
			||||||
 | 
					 * |  38| 06| 07| 08| 09| 0B| 2D| 2E| 2B| 2F| 2C| 0A|      38| | 53| 54| 55|   |
 | 
				
			||||||
 | 
					 * `---------------------------------------------------------' |-----------| 4C|
 | 
				
			||||||
 | 
					 *      | 3A|  37|             34              |   31| 3A|     |     52| 41|   |
 | 
				
			||||||
 | 
					 *      `------------------------------------------------'     `---------------'
 | 
				
			||||||
 | 
					 * Two right and left keys of 38 and 3A are identical, you cannot discriminate those two.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define KEYMAP_INTL( \
 | 
					#define KEYMAP_INTL( \
 | 
				
			||||||
    K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33,  K47,K68,K6D,K62, \
 | 
					    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,K2A,  K59,K5B,K5C,K4E, \
 | 
					    K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E,K2A,  K59,K5B,K5C,K4E, \
 | 
				
			||||||
    K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27,K24,      K56,K57,K58,K66, \
 | 
					    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,K0A,    K4D,  K53,K54,K55,K4C, \
 | 
					    K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C,K0A,          K53,K54,K55,K4C, \
 | 
				
			||||||
    K3A,K37,            K34,            K31,    K46,K42,K48,  K52,    K41      \
 | 
					        K3A,K37,            K34,                K31,          K52,    K41      \
 | 
				
			||||||
) { \
 | 
					) { \
 | 
				
			||||||
    { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
 | 
					    { 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_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
 | 
				
			||||||
@ -134,8 +124,8 @@ extern const uint16_t fn_actions[];
 | 
				
			|||||||
    { KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
 | 
					    { 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_##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_##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_NO,    KC_##K41, KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_##K47 }, \
 | 
				
			||||||
    { KC_##K48, KC_NO,    KC_NO,    KC_NO,    KC_##K4C, KC_##K4D, KC_##K4E, KC_NO    }, \
 | 
					    { KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_##K4C, KC_NO,    KC_##K4E, KC_NO    }, \
 | 
				
			||||||
    { KC_NO,    KC_NO,    KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
 | 
					    { 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_##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_NO,    KC_NO,    KC_##K62, KC_NO,    KC_NO,    KC_NO,    KC_##K66, KC_NO    }, \
 | 
				
			||||||
 | 
				
			|||||||
@ -20,15 +20,19 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#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 = {
 | 
					const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    /* Default:
 | 
					    /* Default:
 | 
				
			||||||
     * M0110                                                       M0120
 | 
					     * M0110                                                       M0120
 | 
				
			||||||
     * ,---------------------------------------------------------. ,---------------.
 | 
					     * ,---------------------------------------------------------. ,---------------.
 | 
				
			||||||
     * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backs| |Nlk|  -|  +|  *|
 | 
					     * |  `|  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|  /|
 | 
					     * |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|  ,|
 | 
					     * |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|   |
 | 
					     * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|Shift   | |  1|  2|  3|   |
 | 
				
			||||||
     * `---------------------------------------------------------' |-----------|Ent|
 | 
					     * `---------------------------------------------------------' |-----------|Ent|
 | 
				
			||||||
@ -52,27 +56,40 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
 | 
				
			|||||||
    TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,         P7,  P8,  P9,  PMNS,
 | 
					    TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,         P7,  P8,  P9,  PMNS,
 | 
				
			||||||
    LCTL,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,     ENT,     P4,  P5,  P6,  PPLS,
 | 
					    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,
 | 
					    LSFT,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,          UP,      P1,  P2,  P3,  PENT,
 | 
				
			||||||
    LALT,LGUI,               SPC,                FN0, BSLS,LEFT,RGHT,DOWN,    P0,       PDOT
 | 
					    LALT,LGUI,               SPC,                FN0, FN13,LEFT,RGHT,DOWN,    P0,       PDOT
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    /* Cursor Layer
 | 
					    /* Cursor Layer:
 | 
				
			||||||
 | 
					     * M0110                                                       M0120
 | 
				
			||||||
     * ,---------------------------------------------------------. ,---------------.
 | 
					     * ,---------------------------------------------------------. ,---------------.
 | 
				
			||||||
     * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delet| |Nlk|  -|  +|  *|
 | 
					     * |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 |Hom| Up|PgU|   |   |   |   |Psc|Slk|Pau|Up |INS|   | |  7|  8|  9|  -|
 | 
				
			||||||
     * |---------------------------------------------------------| |---------------|
 | 
					     * |---------------------------------------------------------| |---------------|
 | 
				
			||||||
     * |Ctrl  |Lef|Dow|Rig|   |   |   |   |Hom|PgU|Lef|Rig|Return| |  4|  5|  6|  ,|
 | 
					     * |Ctrl  |Lef|Dow|Rig|   |   |   |   |Hom|PgU|Lef|Rig|Return| |  4|  5|  6|  +|
 | 
				
			||||||
     * |---------------------------------------------------------| |---------------|
 | 
					     * |---------------------------------------------------------| |---------------|
 | 
				
			||||||
     * |Shift   |End|   |PgD|   |   |   |   |End|PgD|Dow|Shift   | |  1|  2|  3|   |
 | 
					     * |Shift   |End|   |PgD|   |   |   |   |End|PgD|Dow|Shift   | |  1|  2|  3|   |
 | 
				
			||||||
     * `---------------------------------------------------------' |-----------|Ent|
 | 
					     * `---------------------------------------------------------' |-----------|Ent|
 | 
				
			||||||
     *      |Opt|Mac |         Space               |Fn  |Opt|      |      0|  .|   |
 | 
					     *      |Opt|Mac |         Space               |Fn  |Opt|      |      0|  .|   |
 | 
				
			||||||
     *      `-----------------------------------------------'      `---------------'
 | 
					     *      `-----------------------------------------------'      `---------------'
 | 
				
			||||||
 | 
					     * M0110A
 | 
				
			||||||
 | 
					     * ,---------------------------------------------------------. ,---------------.
 | 
				
			||||||
 | 
					     * |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|  -|
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------'   | |---------------|
 | 
				
			||||||
 | 
					     * |Ctrl  |Lef|Dow|Rig|   |   |   |   |Hom|PgU|Lef|Rig|Return| |  4|  5|  6|  +|
 | 
				
			||||||
 | 
					     * |---------------------------------------------------------| |---------------|
 | 
				
			||||||
 | 
					     * |Shift   |End|   |PgD|   |   |   |   |End|PgD|Dow|Shft|PgU| |  1|  2|  3|   |
 | 
				
			||||||
 | 
					     * |---------------------------------------------------------| |-----------|Ent|
 | 
				
			||||||
 | 
					     * |Opt  |Mac    |         Space             |  \|Hom|End|PgD| |      0|  .|   |
 | 
				
			||||||
 | 
					     * `---------------------------------------------------------' `---------------'
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    [1] = KEYMAP(
 | 
					    [1] = KEYMAP(
 | 
				
			||||||
    ESC, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, DEL,     NLCK,EQL, PSLS,PAST,
 | 
					    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,  NO,           P7,  P8,  P9,  PMNS,
 | 
					    CAPS,HOME,UP,  PGUP,NO,  NO,  NO,  NO,  PSCR,SLCK,PAUS,UP,  INS,          P7,  P8,  P9,  PMNS,
 | 
				
			||||||
    LCTL,LEFT,DOWN,RGHT,NO,  NO,  NO,  NO,  HOME,PGUP,LEFT,RGHT,     ENT,     P4,  P5,  P6,  PPLS,
 | 
					    LCTL,LEFT,DOWN,RGHT,NO,  NO,  NO,  NO,  HOME,PGUP,LEFT,RGHT,     ENT,     P4,  P5,  P6,  PPLS,
 | 
				
			||||||
    LSFT,END, NO,  PGDN,NO,  NO,  NO,  NO,  END, PGDN,DOWN,          PGUP,    P1,  P2,  P3,  PENT,
 | 
					    LSFT,END, NO,  PGDN,NO,  NO,  NO,  NO,  END, PGDN,DOWN,          PGUP,    P1,  P2,  P3,  PENT,
 | 
				
			||||||
    LALT,LGUI,               SPC,                FN0, INS, HOME,END, PGDN,    P0,       PDOT
 | 
					    LALT,LGUI,               SPC,                FN0, FN13,HOME,END, PGDN,    P0,       PDOT
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -80,6 +97,41 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * Fn action definition
 | 
					 * Fn action definition
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					#ifdef KEYMAP_SECTION_ENABLE
 | 
				
			||||||
 | 
					const uint16_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
const uint16_t fn_actions[] PROGMEM = {
 | 
					const uint16_t fn_actions[] PROGMEM = {
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    [0]  = ACTION_LAYER_MOMENTARY(1),
 | 
					    [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_BSLASH),
 | 
				
			||||||
 | 
					    [14] = ACTION_LAYER_TAP_KEY(2, KC_TAB),
 | 
				
			||||||
 | 
					    [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,118 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
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),
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@ -30,29 +30,17 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
 | 
				
			|||||||
     * |------------------------------------------------------,  | |---------------|
 | 
					     * |------------------------------------------------------,  | |---------------|
 | 
				
			||||||
     * |Ctrl  |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|  \|  | |  4|  5|  6|  ,|
 | 
					     * |Ctrl  |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|  \|  | |  4|  5|  6|  ,|
 | 
				
			||||||
     * |---------------------------------------------------------| |---------------|
 | 
					     * |---------------------------------------------------------| |---------------|
 | 
				
			||||||
     * |Shif|  <|  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|Shift   | |  1|  2|  3|   |
 | 
					     * |Shif|  <|  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|        | |  1|  2|  3|   |
 | 
				
			||||||
     * `---------------------------------------------------------' |-----------|Ent|
 | 
					     * `---------------------------------------------------------' |-----------|Ent|
 | 
				
			||||||
     *      |Opt|Mac |         Space               |Fn  |Opt|      |      0|  .|   |
 | 
					     *      |Opt|Mac |         Space               |Fn  |   |      |      0|  .|   |
 | 
				
			||||||
     *      `-----------------------------------------------'      `---------------'
 | 
					     *      `-----------------------------------------------'      `---------------'
 | 
				
			||||||
     * M0110A(not existent?)
 | 
					 | 
				
			||||||
     * ,---------------------------------------------------------. ,---------------.
 | 
					 | 
				
			||||||
     * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backs| |Nlk|  =|  /|  *|
 | 
					 | 
				
			||||||
     * |---------------------------------------------------------| |---------------|
 | 
					 | 
				
			||||||
     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|Ret| |  7|  8|  9|  -|
 | 
					 | 
				
			||||||
     * |------------------------------------------------------,  | |---------------|
 | 
					 | 
				
			||||||
     * |Ctrl  |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|  \|  | |  4|  5|  6|  +|
 | 
					 | 
				
			||||||
     * |---------------------------------------------------------| |---------------|
 | 
					 | 
				
			||||||
     * |Shif|  <|  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|Shft|Up | |  1|  2|  3|   |
 | 
					 | 
				
			||||||
     * |---------------------------------------------------------| |-----------|Ent|
 | 
					 | 
				
			||||||
     * |Opt  |Mac    |         Space             |  \|Lft|Rgt|Dn | |      0|  .|   |
 | 
					 | 
				
			||||||
     * `---------------------------------------------------------' `---------------'
 | 
					 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    [0] = KEYMAP_INTL(
 | 
					    [0] = KEYMAP_INTL(
 | 
				
			||||||
    GRV, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, BSPC,    NLCK,EQL, PSLS,PAST,
 | 
					    GRV, 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,ENT,     P7,  P8,  P9,  PMNS,
 | 
					    TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,ENT,     P7,  P8,  P9,  PMNS,
 | 
				
			||||||
    LCTL,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,BSLS,         P4,  P5,  P6,  PPLS,
 | 
					    LCTL,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,BSLS,         P4,  P5,  P6,  PPLS,
 | 
				
			||||||
    LSFT,NUBS,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,     UP,      P1,  P2,  P3,  PENT,
 | 
					    LSFT,NUBS,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,              P1,  P2,  P3,  PENT,
 | 
				
			||||||
    LALT,LGUI,               SPC,                FN0,      LEFT,RGHT,DOWN,    P0,       PDOT
 | 
					         LALT,LGUI,               SPC,                     FN0,               P0,       PDOT
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
    /* Cursor Layer
 | 
					    /* Cursor Layer
 | 
				
			||||||
     * ,---------------------------------------------------------. ,---------------.
 | 
					     * ,---------------------------------------------------------. ,---------------.
 | 
				
			||||||
@ -62,17 +50,17 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
 | 
				
			|||||||
     * |------------------------------------------------------,  | |---------------|
 | 
					     * |------------------------------------------------------,  | |---------------|
 | 
				
			||||||
     * |Ctrl  |Lef|Dow|Rig|   |   |   |   |Hom|PgU|Lef|Rig|Ins|  | |  4|  5|  6|  ,|
 | 
					     * |Ctrl  |Lef|Dow|Rig|   |   |   |   |Hom|PgU|Lef|Rig|Ins|  | |  4|  5|  6|  ,|
 | 
				
			||||||
     * |---------------------------------------------------------| |---------------|
 | 
					     * |---------------------------------------------------------| |---------------|
 | 
				
			||||||
     * |Shif|  <|End|   |PgD|   |   |   |   |End|PgD|Dow|Shift   | |  1|  2|  3|   |
 | 
					     * |Shif|  <|End|   |PgD|   |   |   |   |End|PgD|Dow|        | |  1|  2|  3|   |
 | 
				
			||||||
     * `---------------------------------------------------------' |-----------|Ent|
 | 
					     * `---------------------------------------------------------' |-----------|Ent|
 | 
				
			||||||
     *      |Opt|Mac |         Space               |Fn  |Opt|      |      0|  .|   |
 | 
					     *      |Opt|Mac |         Space               |Fn  |   |      |      0|  .|   |
 | 
				
			||||||
     *      `-----------------------------------------------'      `---------------'
 | 
					     *      `-----------------------------------------------'      `---------------'
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    [1] = KEYMAP_INTL(
 | 
					    [1] = KEYMAP_INTL(
 | 
				
			||||||
    ESC, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, DEL,     NLCK,EQL, PSLS,PAST,
 | 
					    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,  NO,  ENT,     P7,  P8,  P9,  PMNS,
 | 
					    CAPS,HOME,UP,  PGUP,NO,  NO,  NO,  NO,  PSCR,SLCK,PAUS,UP,  NO,  ENT,     P7,  P8,  P9,  PMNS,
 | 
				
			||||||
    LCTL,LEFT,DOWN,RGHT,NO,  NO,  NO,  NO,  HOME,PGUP,LEFT,RGHT,INS,          P4,  P5,  P6,  PPLS,
 | 
					    LCTL,LEFT,DOWN,RGHT,NO,  NO,  NO,  NO,  HOME,PGUP,LEFT,RGHT,INS,          P4,  P5,  P6,  PPLS,
 | 
				
			||||||
    LSFT,NO,  END, NO,  PGDN,NO,  NO,  NO,  NO,  END, PGDN,DOWN,     PGUP,    P1,  P2,  P3,  PENT,
 | 
					    LSFT,NO,  END, NO,  PGDN,NO,  NO,  NO,  NO,  END, PGDN,DOWN,              P1,  P2,  P3,  PENT,
 | 
				
			||||||
    LALT,LGUI,               SPC,                FN0,      HOME,END, PGDN,    P0,       PDOT
 | 
					         LALT,LGUI,               SPC,                     FN0,               P0,       PDOT
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,64 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
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|  /|
 | 
					 | 
				
			||||||
     * |---------------------------------------------------------| |---------------|
 | 
					 | 
				
			||||||
     * |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               |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 = {
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@ -7,7 +7,7 @@
 | 
				
			|||||||
TARGET = news_usb_pjrc
 | 
					TARGET = news_usb_pjrc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -65,10 +65,10 @@ PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/pjrc.mk
 | 
					include $(TMK_DIR)/protocol/pjrc.mk
 | 
				
			||||||
include $(TOP_DIR)/protocol.mk
 | 
					include $(TMK_DIR)/protocol.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@
 | 
				
			|||||||
TARGET = next_usb
 | 
					TARGET = next_usb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -17,10 +17,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       # TMK converter
 | 
					MCU = atmega32u2       # TMK converter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Processor frequency.
 | 
					# Processor frequency.
 | 
				
			||||||
@ -78,10 +78,10 @@ SRC += next_kbd.c
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol.mk
 | 
					include $(TMK_DIR)/protocol.mk
 | 
				
			||||||
include $(TOP_DIR)/protocol/lufa.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@
 | 
				
			|||||||
TARGET = next_usb
 | 
					TARGET = next_usb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -54,10 +54,10 @@ SRC += next_kbd.c
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol.mk
 | 
					include $(TMK_DIR)/protocol.mk
 | 
				
			||||||
include $(TOP_DIR)/protocol/pjrc.mk
 | 
					include $(TMK_DIR)/protocol/pjrc.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -45,7 +45,7 @@ POSSIBILITY OF SUCH DAMAGE.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define VENDOR_ID       0xBCBC
 | 
					#define VENDOR_ID       0xFEED
 | 
				
			||||||
#define PRODUCT_ID      0xBCBC
 | 
					#define PRODUCT_ID      0xBCBC
 | 
				
			||||||
#define DEVICE_VER      0x0500
 | 
					#define DEVICE_VER      0x0500
 | 
				
			||||||
#define MANUFACTURER    t.m.k.
 | 
					#define MANUFACTURER    t.m.k.
 | 
				
			||||||
@ -56,14 +56,15 @@ POSSIBILITY OF SUCH DAMAGE.
 | 
				
			|||||||
#define MATRIX_ROWS 12  // keycode bit: 3-0
 | 
					#define MATRIX_ROWS 12  // keycode bit: 3-0
 | 
				
			||||||
#define MATRIX_COLS  8  // keycode bit: 6-4
 | 
					#define MATRIX_COLS  8  // keycode bit: 6-4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//#define DEBUG_ON_INIT 1
 | 
					#define DEBUG_ON_INIT 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//#define TEENSY_CONFIG 1
 | 
					//#define TEENSY_CONFIG 1
 | 
				
			||||||
#define PRO_MICRO_CONFIG 1
 | 
					//#define PRO_MICRO_CONFIG 1
 | 
				
			||||||
//#define TMK_CONFIG 1
 | 
					#define TMK_CONFIG 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// comment out if you don't want the keyboard's LEDs to flash upon initialization
 | 
					// comment out if you don't want the keyboard's LEDs to flash upon initialization or pressing shift
 | 
				
			||||||
#define NEXT_KBD_INIT_FLASH_LEDS
 | 
					//#define NEXT_KBD_INIT_FLASH_LEDS
 | 
				
			||||||
 | 
					//#define NEXT_KBD_SHIFT_FLASH_LEDS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//============= Start of Arduino Pro Micro Configuration ==============
 | 
					//============= Start of Arduino Pro Micro Configuration ==============
 | 
				
			||||||
#ifdef PRO_MICRO_CONFIG
 | 
					#ifdef PRO_MICRO_CONFIG
 | 
				
			||||||
@ -183,6 +184,7 @@ POSSIBILITY OF SUCH DAMAGE.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* key combination for command */
 | 
					/* key combination for command */
 | 
				
			||||||
#define IS_COMMAND() ( \
 | 
					#define IS_COMMAND() ( \
 | 
				
			||||||
    (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))|| \
 | 
					    (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))) || \
 | 
				
			||||||
    (keyboard_report->mods == (MOD_BIT(KC_RALT) | MOD_BIT(KC_RCTL)))  \
 | 
					    (keyboard_report->mods == (MOD_BIT(KC_RALT) | MOD_BIT(KC_RALT))) || \
 | 
				
			||||||
 | 
					    (keyboard_report->mods == (MOD_BIT(KC_RGUI) | MOD_BIT(KC_RGUI)))  \
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
				
			|||||||
@ -159,7 +159,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			|||||||
    TRNS,PAUS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,FN3, BSLS,TRNS,  VOLD,     PGDN,  BTN1,MS_U,BTN2,WH_U,
 | 
					    TRNS,PAUS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,FN3, BSLS,TRNS,  VOLD,     PGDN,  BTN1,MS_U,BTN2,WH_U,
 | 
				
			||||||
    TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,     TRNS,                   MS_L,MS_D,MS_R,WH_D,
 | 
					    TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,     TRNS,                   MS_L,MS_D,MS_R,WH_D,
 | 
				
			||||||
    TRNS,     FN4, FN5, FN6, FN7, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,     TRNS,       TRNS,       TRNS,TRNS,TRNS,  
 | 
					    TRNS,     FN4, FN5, FN6, FN7, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,     TRNS,       TRNS,       TRNS,TRNS,TRNS,  
 | 
				
			||||||
    TRNS,RALT,                    TRNS,                         RGUI,TRNS,  TRNS,TRNS,TRNS,  TRNS,     TRNS,TRNS
 | 
					    TRNS,TRNS,                    TRNS,                         TRNS,TRNS,  TRNS,TRNS,TRNS,  TRNS,     TRNS,TRNS
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -47,9 +47,14 @@ POSSIBILITY OF SUCH DAMAGE.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "stdint.h"
 | 
					#include "stdint.h"
 | 
				
			||||||
#include "led.h"
 | 
					#include "led.h"
 | 
				
			||||||
 | 
					#include "next_kbd.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void led_set(uint8_t usb_led)
 | 
					void led_set(uint8_t usb_led)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    if (usb_led &  (1<<USB_LED_CAPS_LOCK)) {
 | 
				
			||||||
 | 
					        next_kbd_set_leds(true, true);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        next_kbd_set_leds(false, false);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -160,7 +160,7 @@ void matrix_init(void)
 | 
				
			|||||||
/* scan all key states on matrix */
 | 
					/* scan all key states on matrix */
 | 
				
			||||||
uint8_t matrix_scan(void)
 | 
					uint8_t matrix_scan(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    _delay_ms(20);
 | 
					    _delay_ms(5);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    //next_kbd_set_leds(false, false);
 | 
					    //next_kbd_set_leds(false, false);
 | 
				
			||||||
    NEXT_KBD_LED1_OFF;
 | 
					    NEXT_KBD_LED1_OFF;
 | 
				
			||||||
@ -194,10 +194,12 @@ uint8_t matrix_scan(void)
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
    NEXT_KBD_LED1_ON;
 | 
					    NEXT_KBD_LED1_ON;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					#ifdef NEXT_KBD_SHIFT_FLASH_LEDS
 | 
				
			||||||
    next_kbd_set_leds(
 | 
					    next_kbd_set_leds(
 | 
				
			||||||
        NEXT_KBD_PRESSED_SHIFT_LEFT(resp) ? true : false, 
 | 
					        NEXT_KBD_PRESSED_SHIFT_LEFT(resp) ? true : false, 
 | 
				
			||||||
        NEXT_KBD_PRESSED_SHIFT_RGHT(resp) ? true : false
 | 
					        NEXT_KBD_PRESSED_SHIFT_RGHT(resp) ? true : false
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    dprintf("[ r=%04lX keycode=%02X pressed=%X CTRL=%X SHIFT_LEFT=%X SHIFT_RGHT=%X CMD_LEFT=%X CMD_RGHT=%X ALT_LEFT=%X ALT_RGHT=%X ]\n", \
 | 
					    dprintf("[ r=%04lX keycode=%02X pressed=%X CTRL=%X SHIFT_LEFT=%X SHIFT_RGHT=%X CMD_LEFT=%X CMD_RGHT=%X ALT_LEFT=%X ALT_RGHT=%X ]\n", \
 | 
				
			||||||
        resp, \
 | 
					        resp, \
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@
 | 
				
			|||||||
TARGET = pc98_usb
 | 
					TARGET = pc98_usb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -74,10 +74,10 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/lufa.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/protocol.mk
 | 
					include $(TMK_DIR)/protocol.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -5,7 +5,7 @@
 | 
				
			|||||||
TARGET = ps2_usb_lufa
 | 
					TARGET = ps2_usb_lufa
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -87,8 +87,8 @@ NKRO_ENABLE = yes	# USB Nkey Rollover - not yet supported in LUFA
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# PS/2 Options
 | 
					# PS/2 Options
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
PS2_USE_USART = yes	# uses hardware USART engine for PS/2 signal receive(recomened)
 | 
					#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_INT = yes	# uses external interrupt for falling edge of PS/2 clock pin
 | 
				
			||||||
#PS2_USE_BUSYWAIT = yes	# uses primitive reference code
 | 
					#PS2_USE_BUSYWAIT = yes	# uses primitive reference code
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -97,9 +97,9 @@ PS2_USE_USART = yes	# uses hardware USART engine for PS/2 signal receive(recomen
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol.mk
 | 
					include $(TMK_DIR)/protocol.mk
 | 
				
			||||||
include $(TOP_DIR)/protocol/lufa.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,7 @@
 | 
				
			|||||||
PROJECT = ps2_usb
 | 
					PROJECT = ps2_usb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TMK_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
MBED_DIR = $(TMK_DIR)/mbed-sdk
 | 
					MBED_DIR = $(TMK_DIR)/tool/mbed/mbed-sdk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#VPATH += $(MBED_DIR):$(TMK_DIR)
 | 
					#VPATH += $(MBED_DIR):$(TMK_DIR)
 | 
				
			||||||
vpath %.s .:$(MBED_DIR):$(TMK_DIR)
 | 
					vpath %.s .:$(MBED_DIR):$(TMK_DIR)
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@
 | 
				
			|||||||
TARGET = ps2_usb_pjrc
 | 
					TARGET = ps2_usb_pjrc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -66,10 +66,10 @@ PS2_USE_BUSYWAIT = yes	# uses primitive reference code
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol.mk
 | 
					include $(TMK_DIR)/protocol.mk
 | 
				
			||||||
include $(TOP_DIR)/protocol/pjrc.mk
 | 
					include $(TMK_DIR)/protocol/pjrc.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,7 @@
 | 
				
			|||||||
TARGET = ps2_usb_tmk_rev1
 | 
					TARGET = ps2_usb_tmk_rev1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -90,9 +90,9 @@ PS2_USE_USART = yes	# uses hardware USART engine for PS/2 signal receive(recomen
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol.mk
 | 
					include $(TMK_DIR)/protocol.mk
 | 
				
			||||||
include $(TOP_DIR)/protocol/lufa.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,7 @@
 | 
				
			|||||||
TARGET = ps2_usb_tmk_rev2
 | 
					TARGET = ps2_usb_tmk_rev2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -90,9 +90,9 @@ PS2_USE_INT = yes	# uses external interrupt for falling edge of PS/2 clock pin
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol.mk
 | 
					include $(TMK_DIR)/protocol.mk
 | 
				
			||||||
include $(TOP_DIR)/protocol/lufa.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@
 | 
				
			|||||||
TARGET = ps2_usb_vusb
 | 
					TARGET = ps2_usb_vusb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -18,13 +18,13 @@ else
 | 
				
			|||||||
    SRC := keymap_plain.c $(SRC)
 | 
					    SRC := keymap_plain.c $(SRC)
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Use USART for PS/2. With V-USB INT and BUSYWAIT code is not useful.
 | 
					 | 
				
			||||||
SRC += protocol/ps2_usart.c
 | 
					 | 
				
			||||||
OPT_DEFS += -DPS2_USE_USART
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
CONFIG_H = config.h
 | 
					CONFIG_H = config.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Use USART for PS/2. With V-USB INT and BUSYWAIT code is not useful.
 | 
				
			||||||
 | 
					PS2_USE_USART = yes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# V-USB debug level: To use ps2_usart.c level must be 0
 | 
					# V-USB debug level: To use ps2_usart.c level must be 0
 | 
				
			||||||
# ps2_usart.c requires USART to receive PS/2 signal.
 | 
					# ps2_usart.c requires USART to receive PS/2 signal.
 | 
				
			||||||
OPT_DEFS += -DDEBUG_LEVEL=0
 | 
					OPT_DEFS += -DDEBUG_LEVEL=0
 | 
				
			||||||
@ -98,10 +98,10 @@ OPT_DEFS += -DBOOTLOADER_SIZE=2048
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol.mk
 | 
					include $(TMK_DIR)/protocol.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/protocol/vusb.mk
 | 
					include $(TMK_DIR)/protocol/vusb.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -14,7 +14,7 @@ In case of Teensy2.0(ATMega32U4):
 | 
				
			|||||||
    - **USART**:       **Clock** is on `PD5` and **Data** on `PD2`.
 | 
					    - **USART**:       **Clock** is on `PD5` and **Data** on `PD2`.
 | 
				
			||||||
3. Optionally you need pull-up resistor. 1K-10K Ohm is OK.
 | 
					3. Optionally you need pull-up resistor. 1K-10K Ohm is OK.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
To change pin configuration edit config.h.
 | 
					To change pin configuration edit **config.h** and **Makefile**.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Build Firmware
 | 
					Build Firmware
 | 
				
			||||||
 | 
				
			|||||||
@ -50,11 +50,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			|||||||
#define PS2_CLOCK_PORT  PORTD
 | 
					#define PS2_CLOCK_PORT  PORTD
 | 
				
			||||||
#define PS2_CLOCK_PIN   PIND
 | 
					#define PS2_CLOCK_PIN   PIND
 | 
				
			||||||
#define PS2_CLOCK_DDR   DDRD
 | 
					#define PS2_CLOCK_DDR   DDRD
 | 
				
			||||||
#define PS2_CLOCK_BIT   5
 | 
					#define PS2_CLOCK_BIT   1
 | 
				
			||||||
#define PS2_DATA_PORT   PORTD
 | 
					#define PS2_DATA_PORT   PORTD
 | 
				
			||||||
#define PS2_DATA_PIN    PIND
 | 
					#define PS2_DATA_PIN    PIND
 | 
				
			||||||
#define PS2_DATA_DDR    DDRD
 | 
					#define PS2_DATA_DDR    DDRD
 | 
				
			||||||
#define PS2_DATA_BIT    2
 | 
					#define PS2_DATA_BIT    0
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
@ -69,7 +69,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			|||||||
#define PS2_DATA_PORT   PORTD
 | 
					#define PS2_DATA_PORT   PORTD
 | 
				
			||||||
#define PS2_DATA_PIN    PIND
 | 
					#define PS2_DATA_PIN    PIND
 | 
				
			||||||
#define PS2_DATA_DDR    DDRD
 | 
					#define PS2_DATA_DDR    DDRD
 | 
				
			||||||
#define PS2_DATA_BIT    2
 | 
					#define PS2_DATA_BIT    0
 | 
				
			||||||
#define PS2_INT_INIT()  do {    \
 | 
					#define PS2_INT_INIT()  do {    \
 | 
				
			||||||
    EICRA |= ((1<<ISC11) |      \
 | 
					    EICRA |= ((1<<ISC11) |      \
 | 
				
			||||||
              (0<<ISC10));      \
 | 
					              (0<<ISC10));      \
 | 
				
			||||||
 | 
				
			|||||||
@ -5,7 +5,7 @@
 | 
				
			|||||||
TARGET = serialmouse_usb
 | 
					TARGET = serialmouse_usb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -98,9 +98,9 @@ SERIAL_MOUSE_USE_SOFT = yes		# use software serial implementation
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol.mk
 | 
					include $(TMK_DIR)/protocol.mk
 | 
				
			||||||
include $(TOP_DIR)/protocol/lufa.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@
 | 
				
			|||||||
TARGET = sun_usb
 | 
					TARGET = sun_usb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -76,10 +76,10 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/lufa.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/protocol.mk
 | 
					include $(TMK_DIR)/protocol.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -1,11 +1,18 @@
 | 
				
			|||||||
Sun to USB keyboard protocol converter
 | 
					Sun to USB keyboard protocol converter
 | 
				
			||||||
======================================
 | 
					======================================
 | 
				
			||||||
Target MCU is ATMega32u4 but other USB capable AVR will also work.
 | 
					Target MCU is ATMega32u4 but other USB capable AVR will also work.
 | 
				
			||||||
Supported keyboards: Sun Type 5 Keyboard, CTCSP SHORT TYPE KEYBOARD(CKUB)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
CTCSP SHORT TYPE KEYBOARD: http://imgur.com/a/QIv6p
 | 
					This converter will work with Sun Type 2-5 Keyboards.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Tested on:
 | 
				
			||||||
 | 
					Sun Type 3 Keyboard: http://blog.daveastels.com.s3-website-us-west-2.amazonaws.com/2014/12/27/type-3-keyboard.html
 | 
				
			||||||
 | 
					CTCSP SHORT TYPE KEYBOARD(Type 5): http://imgur.com/a/QIv6p
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Keymap of Type 3(keymap_sun3.c) were impoted from dastels's repository.
 | 
				
			||||||
 | 
					https://github.com/dastels/tmk_keyboard/tree/master/converter/sun3_usb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Connector
 | 
					Connector
 | 
				
			||||||
 | 
				
			|||||||
@ -56,12 +56,18 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			|||||||
#define SERIAL_SOFT_RXD_BIT         2
 | 
					#define SERIAL_SOFT_RXD_BIT         2
 | 
				
			||||||
#define SERIAL_SOFT_RXD_VECT        INT2_vect
 | 
					#define SERIAL_SOFT_RXD_VECT        INT2_vect
 | 
				
			||||||
/* RXD Interupt */
 | 
					/* RXD Interupt */
 | 
				
			||||||
 | 
					#ifdef SERIAL_SOFT_LOGIC_NEGATIVE
 | 
				
			||||||
 | 
					/* enable interrupt: INT2(rising edge) */
 | 
				
			||||||
 | 
					#define INTR_TRIG_EDGE   ((1<<ISC21)|(1<<ISC20))
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					/* enable interrupt: INT2(falling edge) */
 | 
				
			||||||
 | 
					#define INTR_TRIG_EDGE   ((1<<ISC21)|(0<<ISC20))
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
#define SERIAL_SOFT_RXD_INIT()      do { \
 | 
					#define SERIAL_SOFT_RXD_INIT()      do { \
 | 
				
			||||||
    /* pin configuration: input with pull-up */ \
 | 
					    /* pin configuration: input with pull-up */ \
 | 
				
			||||||
    SERIAL_SOFT_RXD_DDR &= ~(1<<SERIAL_SOFT_RXD_BIT); \
 | 
					    SERIAL_SOFT_RXD_DDR &= ~(1<<SERIAL_SOFT_RXD_BIT); \
 | 
				
			||||||
    SERIAL_SOFT_RXD_PORT |= (1<<SERIAL_SOFT_RXD_BIT); \
 | 
					    SERIAL_SOFT_RXD_PORT |= (1<<SERIAL_SOFT_RXD_BIT); \
 | 
				
			||||||
    /* enable interrupt: INT2(rising edge) */ \
 | 
					    EICRA |= INTR_TRIG_EDGE; \
 | 
				
			||||||
    EICRA |= ((1<<ISC21)|(1<<ISC20)); \
 | 
					 | 
				
			||||||
    EIMSK |= (1<<INT2); \
 | 
					    EIMSK |= (1<<INT2); \
 | 
				
			||||||
    sei(); \
 | 
					    sei(); \
 | 
				
			||||||
} while (0)
 | 
					} while (0)
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										173
									
								
								converter/sun_usb/keymap_sun3.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										173
									
								
								converter/sun_usb/keymap_sun3.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,173 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					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/>.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <stdint.h>
 | 
				
			||||||
 | 
					#include <stdbool.h>
 | 
				
			||||||
 | 
					#include <avr/pgmspace.h>
 | 
				
			||||||
 | 
					#include "keycode.h"
 | 
				
			||||||
 | 
					#include "util.h"
 | 
				
			||||||
 | 
					#include "keymap.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Sun type 3 keyboard 
 | 
				
			||||||
 | 
					,-------.  ,-----------------------------------------------------------.  ,-----------.
 | 
				
			||||||
 | 
					| 01| 03|  | 05| 06|     08|     0A|     0C|     0E|     10| 11| 12| 2B|  | 15| 16| 17|
 | 
				
			||||||
 | 
					|-------|  |-----------------------------------------------------------|  |-----------|
 | 
				
			||||||
 | 
					| 19| 1A|  | 1D| 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 58| 2A|  | 2D| 2E| 2F|
 | 
				
			||||||
 | 
					|-------|  |-----------------------------------------------------------|  |-----------|
 | 
				
			||||||
 | 
					| 31| 33|  |  35 | 36| 37| 38| 39| 3A| 3B| 3C| 3D| 3E| 3F| 40| 41| 42  |  | 44| 45| 46|
 | 
				
			||||||
 | 
					|-------|  |-----------------------------------------------------------|  |-----------|
 | 
				
			||||||
 | 
					| 48| 49|  |  4C  | 4D| 4E| 4F| 50| 51| 52| 53| 54| 55| 56| 57|   59   |  | 5B| 5C| 5D|
 | 
				
			||||||
 | 
					|-------|  |-----------------------------------------------------------|  |-----------|
 | 
				
			||||||
 | 
					| 5F| 61|  |   63   | 64| 65| 66| 67| 68| 69| 6A| 6B| 6C| 6D|    6E| 6F|  | 70| 71| 72|
 | 
				
			||||||
 | 
					`-------'  |-----------------------------------------------------------|  `-----------'
 | 
				
			||||||
 | 
					           | 77 | 78  |               79                  | 7A  |   13 |  
 | 
				
			||||||
 | 
					           `-----------------------------------------------------------'  
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define KEYMAP( \
 | 
				
			||||||
 | 
					    K01,K03,  K05,K06,    K08,    K0A,    K0C,    K0E,    K10,K11,K12,K2B,  K15,K16,K17, \
 | 
				
			||||||
 | 
					    K19,K1A,  K1D,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K58,K2A,  K2D,K2E,K2F, \
 | 
				
			||||||
 | 
					    K31,K33,  K35, K36,K37,K38,K39,K3A,K3B,K3C,K3D,K3E,K3F,K40,K41,   K42,  K44,K45,K46, \
 | 
				
			||||||
 | 
					    K48,K49,  K4C,  K4D,K4E,K4F,K50,K51,K52,K53,K54,K55,K56,K57,      K59,  K5B,K5C,K5D, \
 | 
				
			||||||
 | 
					    K5F,K61,  K63,   K64,K65,K66,K67,K68,K69,K6A,K6B,K6C,K6D,     K6E,K6F,  K70,K71,K72, \
 | 
				
			||||||
 | 
					              K77,K78,                    K79,                    K7A,K13                \
 | 
				
			||||||
 | 
					) { \
 | 
				
			||||||
 | 
					    { KC_NO,    KC_##K01, KC_NO,    KC_##K03, KC_NO,    KC_##K05, KC_##K06, KC_NO    }, \
 | 
				
			||||||
 | 
					    { KC_##K08, KC_NO,    KC_##K0A, KC_NO,    KC_##K0C, KC_NO,    KC_##K0E, KC_NO    }, \
 | 
				
			||||||
 | 
					    { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_NO,    KC_##K15, KC_##K16, KC_##K17 }, \
 | 
				
			||||||
 | 
					    { KC_NO,    KC_##K19, KC_##K1A, KC_NO,    KC_NO,    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_NO,    KC_##K2D, KC_##K2E, KC_##K2F }, \
 | 
				
			||||||
 | 
					    { KC_NO,    KC_##K31, KC_NO,    KC_##K33, KC_NO,    KC_##K35, KC_##K36, KC_##K37 }, \
 | 
				
			||||||
 | 
					    { KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
 | 
				
			||||||
 | 
					    { KC_##K40, KC_##K41, KC_##K42, KC_NO,    KC_##K44, KC_##K45, KC_##K46, KC_NO    }, \
 | 
				
			||||||
 | 
					    { KC_##K48, KC_##K49, KC_NO,    KC_NO,    KC_##K4C, KC_##K4D, 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_NO,    KC_##K5B, KC_##K5C, KC_##K5D, KC_NO,    KC_##K5F }, \
 | 
				
			||||||
 | 
					    { KC_NO,    KC_##K61, KC_NO,    KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
 | 
				
			||||||
 | 
					    { KC_##K68, KC_##K69, KC_##K6A, KC_##K6B, KC_##K6C, KC_##K6D, KC_##K6E, KC_##K6F }, \
 | 
				
			||||||
 | 
					    { KC_##K70, KC_##K71, KC_##K72, KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_##K77 }, \
 | 
				
			||||||
 | 
					    { KC_##K78, KC_##K79, KC_##K7A, KC_NO,    KC_NO,    KC_NO,    KC_NO,    KC_NO    }  \
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
 | 
				
			||||||
 | 
					static const uint8_t PROGMEM fn_layer[] = {
 | 
				
			||||||
 | 
					    2,              // Fn0
 | 
				
			||||||
 | 
					    3,              // Fn1
 | 
				
			||||||
 | 
					    4,              // 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_SCLN,        // Fn1
 | 
				
			||||||
 | 
					    KC_SLSH,        // 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(
 | 
				
			||||||
 | 
					    F10, F11,   F1, F2,     F3,     F4,     F5,     F6,      F7,  F8, F9,  BSPC,   VOLD, MUTE,   VOLU,
 | 
				
			||||||
 | 
					    F12, F13,   ESC, 1,  2,  3,  4,  5,  6,  7,  8,  9,  0,MINS, EQL, BSLS, GRV,   MPRV, MPLY,   MNXT,
 | 
				
			||||||
 | 
					    F14, F15,   TAB, Q,  W,  E,  R,  T,  Y,  U,  I,  O,  P,   LBRC,RBRC,    DEL,   HOME, UP,     PGUP,
 | 
				
			||||||
 | 
					    F16, F17,   LCTL, A,  S,  D,  F,  G,  H,  J,  K,  L,  SCLN,QUOT,        ENT,   LEFT, INSERT, RIGHT, 
 | 
				
			||||||
 | 
					    F18, F19,   LSFT,  Z,  X,  C,  V,  B,  N,  M,  COMM,DOT,SLSH,     RSFT,RCTL,   END,  DOWN,   PGDOWN,
 | 
				
			||||||
 | 
					                LGUI, LALT,                 SPC,                      RALT,RGUI
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					    // 0: default
 | 
				
			||||||
 | 
					    SHORT_TYPE(
 | 
				
			||||||
 | 
					        STOP, F1,F2,F3,F4, F5, F6,   CUT,PASTE,COPY,PWR,    INS, HOME,PGUP,
 | 
				
			||||||
 | 
					              F7,F8,F9,F10,F11,F12,                         DEL, END, PGDN,
 | 
				
			||||||
 | 
					        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,
 | 
				
			||||||
 | 
					        LCTL,  A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,        ENT,
 | 
				
			||||||
 | 
					        LSFT,   Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,  RALT,UP,  RSFT,
 | 
				
			||||||
 | 
					        CAPS,LALT,LGUI,            SPC,              RGUI,APP, NLCK,LEFT,DOWN,RGHT
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					    // 1: with layer keys
 | 
				
			||||||
 | 
					    SHORT_TYPE(
 | 
				
			||||||
 | 
					        ESC,  F1,F2,F3,F4, F5, F6,   CUT,PASTE,COPY,PWR,    INS, HOME,PGUP,
 | 
				
			||||||
 | 
					              F7,F8,F9,F10,F11,F12,                         DEL, END, PGDN,
 | 
				
			||||||
 | 
					        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,
 | 
				
			||||||
 | 
					        LCTL,  A,   S,   D,   F,   G,   H,   J,   K,   L,   FN1, QUOT,        ENT,
 | 
				
			||||||
 | 
					        LSFT,   Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, FN2,   RSFT,UP,  FN0,
 | 
				
			||||||
 | 
					        CAPS,LALT,LGUI,            SPC,              RGUI,RALT,FN0, LEFT,DOWN,RGHT
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					    // 2: HHKB
 | 
				
			||||||
 | 
					    SHORT_TYPE(
 | 
				
			||||||
 | 
					        ESC,  F1,F2,F3,F4, F5, F6,   CUT,PASTE,COPY,PWR,    INS, HOME,PGUP,
 | 
				
			||||||
 | 
					              F7,F8,F9,F10,F11,F12,                         DEL, END, PGDN,
 | 
				
			||||||
 | 
					        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,
 | 
				
			||||||
 | 
					        LCTL,  VOLD,VOLU,MUTE,NO,  NO,  NO,  NO,  HOME,PGUP,LEFT,RGHT,        ENT,
 | 
				
			||||||
 | 
					        LSFT,   Z,   X,   C,   V,   B,   NO,  NO,  END, PGDN,DOWN,  RSFT,PGUP,FN0,
 | 
				
			||||||
 | 
					        CAPS,LALT,LGUI,            SPC,              RGUI,RALT,FN0, HOME,PGDN,END
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					    // 3: Mousekey
 | 
				
			||||||
 | 
					    SHORT_TYPE(
 | 
				
			||||||
 | 
					        ESC,  F1,F2,F3,F4, F5, F6,   CUT,PASTE,COPY,PWR,    INS, HOME,PGUP,
 | 
				
			||||||
 | 
					              F7,F8,F9,F10,F11,F12,                         DEL, END, PGDN,
 | 
				
			||||||
 | 
					        GRV, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, INS, DEL,
 | 
				
			||||||
 | 
					        CAPS, NO,  NO,  NO,  NO,  NO,  WH_L,WH_D,WH_U,WH_R,NO,  NO,  NO,      BSPC,
 | 
				
			||||||
 | 
					        LCTL,  NO,  ACL0,ACL1,ACL2,NO,  MS_L,MS_D,MS_U,MS_R,FN1, NO,          ENT,
 | 
				
			||||||
 | 
					        LSFT,   NO,  NO,  NO,  NO,  BTN3,BTN2,BTN1,NO,  NO,  NO,    RSFT,UP,  NO,
 | 
				
			||||||
 | 
					        CAPS,LALT,LGUI,            BTN1,             RGUI,RALT,NO,  LEFT,DOWN,RGHT
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					    // 4: Cursor
 | 
				
			||||||
 | 
					    SHORT_TYPE(
 | 
				
			||||||
 | 
					        ESC,  F1,F2,F3,F4, F5, F6,   CUT,PASTE,COPY,PWR,    INS, HOME,PGUP,
 | 
				
			||||||
 | 
					              F7,F8,F9,F10,F11,F12,                         DEL, END, PGDN,
 | 
				
			||||||
 | 
					        GRV, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, INS, DEL,
 | 
				
			||||||
 | 
					        CAPS, NO,  NO,  NO,  NO,  NO,  HOME,PGDN,PGUP,END, NO,  NO,  NO,      BSPC,
 | 
				
			||||||
 | 
					        LCTL,  NO,  NO,  NO,  NO,  NO,  LEFT,DOWN,UP,  RGHT,NO,  NO,          ENT,
 | 
				
			||||||
 | 
					        LSFT,   NO,  NO,  NO,  NO,  NO,  HOME,PGDN,PGUP,END, FN2,   RSFT,UP,  NO,
 | 
				
			||||||
 | 
					        CAPS,LALT,LGUI,            BTN1,             RGUI,RALT,NO,  LEFT,DOWN,RGHT
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint8_t keymap_get_keycode(uint8_t layer, uint8_t row, uint8_t col)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return pgm_read_byte(&keymaps[(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]);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -18,6 +18,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			|||||||
#include "stdint.h"
 | 
					#include "stdint.h"
 | 
				
			||||||
#include "serial.h"
 | 
					#include "serial.h"
 | 
				
			||||||
#include "led.h"
 | 
					#include "led.h"
 | 
				
			||||||
 | 
					#include "debug.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void led_set(uint8_t usb_led)
 | 
					void led_set(uint8_t usb_led)
 | 
				
			||||||
@ -27,6 +28,7 @@ void led_set(uint8_t usb_led)
 | 
				
			|||||||
    if (usb_led & (1<<USB_LED_COMPOSE))     sun_led |= (1<<1);
 | 
					    if (usb_led & (1<<USB_LED_COMPOSE))     sun_led |= (1<<1);
 | 
				
			||||||
    if (usb_led & (1<<USB_LED_SCROLL_LOCK)) sun_led |= (1<<2);
 | 
					    if (usb_led & (1<<USB_LED_SCROLL_LOCK)) sun_led |= (1<<2);
 | 
				
			||||||
    if (usb_led & (1<<USB_LED_CAPS_LOCK))   sun_led |= (1<<3);
 | 
					    if (usb_led & (1<<USB_LED_CAPS_LOCK))   sun_led |= (1<<3);
 | 
				
			||||||
 | 
					    xprintf("LED: %02X\n", usb_led);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    serial_send(0x0E);
 | 
					    serial_send(0x0E);
 | 
				
			||||||
    serial_send(sun_led);
 | 
					    serial_send(sun_led);
 | 
				
			||||||
 | 
				
			|||||||
@ -72,6 +72,21 @@ void matrix_init(void)
 | 
				
			|||||||
    // initialize matrix state: all keys off
 | 
					    // initialize matrix state: all keys off
 | 
				
			||||||
    for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
 | 
					    for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // wait for keyboard coming up
 | 
				
			||||||
 | 
					    // otherwise LED status update fails
 | 
				
			||||||
 | 
					    print("Reseting ");
 | 
				
			||||||
 | 
					    while (1) {
 | 
				
			||||||
 | 
					        print(".");
 | 
				
			||||||
 | 
					        while (serial_recv());
 | 
				
			||||||
 | 
					        serial_send(0x01);
 | 
				
			||||||
 | 
					        _delay_ms(500);
 | 
				
			||||||
 | 
					        if (serial_recv() == 0xFF) {
 | 
				
			||||||
 | 
					            _delay_ms(500);
 | 
				
			||||||
 | 
					            if (serial_recv() == 0x04)
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    print(" Done\n");
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -86,17 +101,26 @@ uint8_t matrix_scan(void)
 | 
				
			|||||||
    debug_hex(code); debug(" ");
 | 
					    debug_hex(code); debug(" ");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch (code) {
 | 
					    switch (code) {
 | 
				
			||||||
        case 0xFF:  // reset success
 | 
					        case 0xFF:  // reset success: FF 04
 | 
				
			||||||
        case 0xFE:  // layout
 | 
					            print("reset: ");
 | 
				
			||||||
        case 0x7E:  // reset fail
 | 
					 | 
				
			||||||
            if (code == 0xFF) print("reset: 0xFF ");
 | 
					 | 
				
			||||||
            if (code == 0x7E) print("reset fail: 0x7E ");
 | 
					 | 
				
			||||||
            if (code == 0xFE) print("layout: 0xFE ");
 | 
					 | 
				
			||||||
            // response byte
 | 
					 | 
				
			||||||
            _delay_ms(500);
 | 
					            _delay_ms(500);
 | 
				
			||||||
            if (code = serial_recv()) print_hex8(code);
 | 
					            code = serial_recv();
 | 
				
			||||||
            print("\n");
 | 
					            xprintf("%02X\n", code);
 | 
				
			||||||
            // FALL THROUGH
 | 
					            if (code == 0x04) {
 | 
				
			||||||
 | 
					                // LED status
 | 
				
			||||||
 | 
					                led_set(host_keyboard_leds());
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return 0;
 | 
				
			||||||
 | 
					        case 0xFE:  // layout: FE <layout>
 | 
				
			||||||
 | 
					            print("layout: ");
 | 
				
			||||||
 | 
					            _delay_ms(500);
 | 
				
			||||||
 | 
					            xprintf("%02X\n", serial_recv());
 | 
				
			||||||
 | 
					            return 0;
 | 
				
			||||||
 | 
					        case 0x7E:  // reset fail: 7E 01
 | 
				
			||||||
 | 
					            print("reset fail: ");
 | 
				
			||||||
 | 
					            _delay_ms(500);
 | 
				
			||||||
 | 
					            xprintf("%02X\n", serial_recv());
 | 
				
			||||||
 | 
					            return 0;
 | 
				
			||||||
        case 0x7F:
 | 
					        case 0x7F:
 | 
				
			||||||
            // all keys up
 | 
					            // all keys up
 | 
				
			||||||
            for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
 | 
					            for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@
 | 
				
			|||||||
TARGET = terminal_bluefruit
 | 
					TARGET = terminal_bluefruit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -89,11 +89,11 @@ PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol.mk
 | 
					include $(TMK_DIR)/protocol.mk
 | 
				
			||||||
include $(TOP_DIR)/protocol/bluefruit.mk
 | 
					include $(TMK_DIR)/protocol/bluefruit.mk
 | 
				
			||||||
include $(TOP_DIR)/protocol.mk
 | 
					include $(TMK_DIR)/protocol.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@
 | 
				
			|||||||
TARGET = terminal_lufa
 | 
					TARGET = terminal_lufa
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -89,10 +89,10 @@ PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/lufa.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/protocol.mk
 | 
					include $(TMK_DIR)/protocol.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -70,6 +70,36 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			|||||||
    { KC_NO,    KC_NO,    KC_NO,    KC_##K83, KC_##K84, KC_NO,    KC_NO,    KC_NO,   }, \
 | 
					    { KC_NO,    KC_NO,    KC_NO,    KC_##K83, KC_##K84, KC_NO,    KC_NO,    KC_NO,   }, \
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * IBM Terminal keyboard 1399625, 101-key
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define KEYMAP_101( \
 | 
				
			||||||
 | 
					    K08,    K07,K0F,K17,K1F,K27,K2F,K37,K3F,K47,K4F,K56,K5E,  K57,K5F,K62,                   \
 | 
				
			||||||
 | 
					                                                                                             \
 | 
				
			||||||
 | 
					    K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K66,  K67,K6E,K6F,  K76,K77,K7E,K84, \
 | 
				
			||||||
 | 
					    K0D,K15,K1D,K24,K2D,K2C,K35,K3C,K43,K44,K4D,K54,K5B,K5C,  K64,K65,K6D,  K6C,K75,K7D,     \
 | 
				
			||||||
 | 
					    K14,K1C,K1B,K23,K2B,K34,K33,K3B,K42,K4B,K4C,K52,    K5A,                K6B,K73,K74,K7C, \
 | 
				
			||||||
 | 
					    K12,    K1A,K22,K21,K2A,K32,K31,K3A,K41,K49,K4A,    K59,      K63,      K69,K72,K7A,     \
 | 
				
			||||||
 | 
					    K11,    K19,            K29,                K39,    K58,  K61,K60,K6A,  K70,    K71,K79  \
 | 
				
			||||||
 | 
					) { \
 | 
				
			||||||
 | 
					    { KC_NO,    KC_NO   , KC_NO,    KC_NO   , KC_NO   , KC_NO   , KC_NO   , KC_##K07 }, \
 | 
				
			||||||
 | 
					    { KC_##K08, KC_NO   , KC_NO   , KC_NO   , KC_NO   , KC_##K0D, KC_##K0E, KC_##K0F }, \
 | 
				
			||||||
 | 
					    { KC_NO   , KC_##K11, KC_##K12, KC_NO   , KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
 | 
				
			||||||
 | 
					    { KC_NO   , KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F }, \
 | 
				
			||||||
 | 
					    { KC_NO   , KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
 | 
				
			||||||
 | 
					    { KC_NO   , KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
 | 
				
			||||||
 | 
					    { KC_NO   , KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
 | 
				
			||||||
 | 
					    { KC_NO   , KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
 | 
				
			||||||
 | 
					    { KC_NO   , KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47 }, \
 | 
				
			||||||
 | 
					    { KC_NO   , KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E, KC_##K4F }, \
 | 
				
			||||||
 | 
					    { KC_NO   , KC_NO   , KC_##K52, KC_NO   , KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
 | 
				
			||||||
 | 
					    { KC_##K58, KC_##K59, KC_##K5A, KC_##K5B, KC_##K5C, KC_NO   , KC_##K5E, KC_##K5F }, \
 | 
				
			||||||
 | 
					    { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
 | 
				
			||||||
 | 
					    { KC_NO   , KC_##K69, KC_##K6A, KC_##K6B, KC_##K6C, KC_##K6D, KC_##K6E, KC_##K6F }, \
 | 
				
			||||||
 | 
					    { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
 | 
				
			||||||
 | 
					    { KC_NO   , KC_##K79, KC_##K7A, KC_NO   , KC_##K7C, KC_##K7D, KC_##K7E, KC_NO    }, \
 | 
				
			||||||
 | 
					    { KC_NO,    KC_NO,    KC_NO,    KC_NO   , KC_##K84, KC_NO,    KC_NO,    KC_NO,   }, \
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
 | 
					// Assign Fn key(0-7) to a layer to which switch with the Fn key pressed.
 | 
				
			||||||
static const uint8_t PROGMEM fn_layer[] = {
 | 
					static const uint8_t PROGMEM fn_layer[] = {
 | 
				
			||||||
@ -137,6 +167,36 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			|||||||
    APP, INT6,  LSFT,LSFT,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,     NO,  RSFT,  LEFT,INT2,RGHT,  P1,  P2,  P3,  PENT,
 | 
					    APP, INT6,  LSFT,LSFT,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,     NO,  RSFT,  LEFT,INT2,RGHT,  P1,  P2,  P3,  PENT,
 | 
				
			||||||
    RGUI,LGUI,  LCTL,     LALT,               SPC,                          LGUI,     GRV,        DOWN,       NO,  P0,  PDOT,NO
 | 
					    RGUI,LGUI,  LCTL,     LALT,               SPC,                          LGUI,     GRV,        DOWN,       NO,  P0,  PDOT,NO
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* 101-key keymaps
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					    /* 0: default
 | 
				
			||||||
 | 
					     * ,---.   ,---------------. ,---------------. ,---------------. ,-----------.
 | 
				
			||||||
 | 
					     * |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|  [|  ]|    \| |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|    |Alt |          Space              |Alt |    |Ctrl| |Lef|Dow|Rig| |      0|  .|   |
 | 
				
			||||||
 | 
					     * `----'    `---------------------------------------'    `----' `-----------' `---------------'
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					    KEYMAP_101(
 | 
				
			||||||
 | 
					     ESC,       F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9, F10, F11, F12,     PSCR,SLCK, BRK,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     GRV,   1,   2,   3,   4,   5,   6,   7,   8,   9,   0,MINS, EQL,BSPC,      INS,HOME,PGUP,     NLCK,PSLS,PAST,PMNS,
 | 
				
			||||||
 | 
					     TAB,   Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,LBRC,RBRC,BSLS,      DEL, END,PGDN,       P7,  P8,  P9,
 | 
				
			||||||
 | 
					    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,     LALT,                SPC,                    RALT,     RCTL,     LEFT,DOWN,RGHT,       P0,     PDOT,PENT
 | 
				
			||||||
 | 
					    ),
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -27,7 +27,7 @@
 | 
				
			|||||||
# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
 | 
					# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
 | 
				
			||||||
#                (must have Atmel FLIP installed).
 | 
					#                (must have Atmel FLIP installed).
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# make debug = Start either simulavr or avarice as specified for debugging, 
 | 
					# make debug = Start either simulavr or avarice as specified for debugging,
 | 
				
			||||||
#              with avr-gdb or avr-insight as the front end for debugging.
 | 
					#              with avr-gdb or avr-insight as the front end for debugging.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# make filename.s = Just compile filename.c into the assembler code only.
 | 
					# make filename.s = Just compile filename.c into the assembler code only.
 | 
				
			||||||
@ -41,7 +41,7 @@
 | 
				
			|||||||
# Target file name (without extension).
 | 
					# Target file name (without extension).
 | 
				
			||||||
TARGET = usb_usb
 | 
					TARGET = usb_usb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -93,6 +93,7 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
 | 
				
			|||||||
MOUSEKEY_ENABLE = yes	# Mouse keys
 | 
					MOUSEKEY_ENABLE = yes	# Mouse keys
 | 
				
			||||||
EXTRAKEY_ENABLE = yes	# Media control and System control
 | 
					EXTRAKEY_ENABLE = yes	# Media control and System control
 | 
				
			||||||
CONSOLE_ENABLE = yes	# Console for debug
 | 
					CONSOLE_ENABLE = yes	# Console for debug
 | 
				
			||||||
 | 
					#COMMAND_ENABLE = yes    # Commands for debug and configuration
 | 
				
			||||||
#NKRO_ENABLE = yes	# USB Nkey Rollover
 | 
					#NKRO_ENABLE = yes	# USB Nkey Rollover
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Boot Section Size in bytes
 | 
					# Boot Section Size in bytes
 | 
				
			||||||
@ -101,12 +102,15 @@ CONSOLE_ENABLE = yes	# Console for debug
 | 
				
			|||||||
#   LUFA bootloader  4096
 | 
					#   LUFA bootloader  4096
 | 
				
			||||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
 | 
					OPT_DEFS += -DBOOTLOADER_SIZE=4096
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#LDFLAGS += -Wl,--relax
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#OPT_DEFS += -DNO_ACTION_TAPPING
 | 
				
			||||||
 | 
					#OPT_DEFS += -DNO_ACTION_LAYER
 | 
				
			||||||
 | 
					#OPT_DEFS += -DNO_ACTION_MACRO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SRC =  \
 | 
					SRC =  \
 | 
				
			||||||
       keymap_common.c \
 | 
					       keymap_common.c \
 | 
				
			||||||
       matrix.c \
 | 
					       matrix.c \
 | 
				
			||||||
       led.c \
 | 
					 | 
				
			||||||
       main.cpp
 | 
					       main.cpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifdef KEYMAP
 | 
					ifdef KEYMAP
 | 
				
			||||||
@ -121,7 +125,7 @@ CONFIG_H = config.h
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -130,7 +134,7 @@ PROGRAM_CMD = avrdude -p$(MCU) -cavr109 -b57600 -Uflash:w:$(TARGET).hex -P$(DEV)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/usb_hid.mk
 | 
					include $(TMK_DIR)/protocol/usb_hid.mk
 | 
				
			||||||
include $(TOP_DIR)/protocol/lufa.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -19,7 +19,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
					const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
    /* 0: default
 | 
					    /* 0: plain Qwerty without layer switching
 | 
				
			||||||
     * ,---.   ,---------------. ,---------------. ,---------------. ,-----------.     ,-----------.
 | 
					     * ,---.   ,---------------. ,---------------. ,---------------. ,-----------.     ,-----------.
 | 
				
			||||||
     * |Esc|   |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|     |Pwr|Slp|Wak|
 | 
					     * |Esc|   |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|     |Pwr|Slp|Wak|
 | 
				
			||||||
     * `---'   `---------------' `---------------' `---------------' `-----------'     `-----------'
 | 
					     * `---'   `---------------' `---------------' `---------------' `-----------'     `-----------'
 | 
				
			||||||
@ -37,28 +37,6 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    KEYMAP(
 | 
					    KEYMAP(
 | 
				
			||||||
    ESC, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12,           PSCR,SLCK,PAUS,
 | 
					    ESC, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12,           PSCR,SLCK,PAUS,
 | 
				
			||||||
    ESC, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, BSPC,     INS, HOME,PGUP,    NLCK,PSLS,PAST,PMNS,
 | 
					 | 
				
			||||||
    TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,BSLS,     DEL, END, PGDN,    P7,  P8,  P9,
 | 
					 | 
				
			||||||
    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,                     RALT,RGUI,APP, GRV,      LEFT,DOWN,RGHT,    P0,       PDOT,PENT
 | 
					 | 
				
			||||||
    ),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /* 1: plain Qwerty without layer switching
 | 
					 | 
				
			||||||
     * ,-----------------------------------------------------------.
 | 
					 | 
				
			||||||
     * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backspa|
 | 
					 | 
				
			||||||
     * |-----------------------------------------------------------|
 | 
					 | 
				
			||||||
     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|    \|
 | 
					 | 
				
			||||||
     * |-----------------------------------------------------------|
 | 
					 | 
				
			||||||
     * |CapsLo|  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return  |
 | 
					 | 
				
			||||||
     * |-----------------------------------------------------------|
 | 
					 | 
				
			||||||
     * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  ,|  /|Shift     |
 | 
					 | 
				
			||||||
     * |-----------------------------------------------------------|
 | 
					 | 
				
			||||||
     * |Ctrl |Gui |Alt |         Space         |Alt |Gui |Menu|Ctrl|
 | 
					 | 
				
			||||||
     * `-----------------------------------------------------------'
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    KEYMAP(
 | 
					 | 
				
			||||||
    ESC, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12,           PSCR,SLCK,PAUS,
 | 
					 | 
				
			||||||
    GRV, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, BSPC,     INS, HOME,PGUP,    NLCK,PSLS,PAST,PMNS,
 | 
					    GRV, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, BSPC,     INS, HOME,PGUP,    NLCK,PSLS,PAST,PMNS,
 | 
				
			||||||
    TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,BSLS,     DEL, END, PGDN,    P7,  P8,  P9,
 | 
					    TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,BSLS,     DEL, END, PGDN,    P7,  P8,  P9,
 | 
				
			||||||
    CAPS,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,     ENT,                         P4,  P5,  P6,  PPLS,
 | 
					    CAPS,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,     ENT,                         P4,  P5,  P6,  PPLS,
 | 
				
			||||||
@ -66,7 +44,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			|||||||
    LCTL,LGUI,LALT,          SPC,                     RALT,RGUI,APP, RCTL,     LEFT,DOWN,RGHT,    P0,       PDOT,PENT
 | 
					    LCTL,LGUI,LALT,          SPC,                     RALT,RGUI,APP, RCTL,     LEFT,DOWN,RGHT,    P0,       PDOT,PENT
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* 2: Colemak http://colemak.com
 | 
					    /* 1: Colemak http://colemak.com
 | 
				
			||||||
     * ,-----------------------------------------------------------.
 | 
					     * ,-----------------------------------------------------------.
 | 
				
			||||||
     * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backspa|
 | 
					     * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backspa|
 | 
				
			||||||
     * |-----------------------------------------------------------|
 | 
					     * |-----------------------------------------------------------|
 | 
				
			||||||
@ -88,7 +66,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			|||||||
    LCTL,LGUI,LALT,          SPC,                     RALT,RGUI,APP, RCTL,     LEFT,DOWN,RGHT,    P0,       PDOT,PENT
 | 
					    LCTL,LGUI,LALT,          SPC,                     RALT,RGUI,APP, RCTL,     LEFT,DOWN,RGHT,    P0,       PDOT,PENT
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* 3: Dvorak http://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard
 | 
					    /* 2: Dvorak http://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard
 | 
				
			||||||
     * ,-----------------------------------------------------------.
 | 
					     * ,-----------------------------------------------------------.
 | 
				
			||||||
     * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  [|  ]|Backspa|
 | 
					     * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  [|  ]|Backspa|
 | 
				
			||||||
     * |-----------------------------------------------------------|
 | 
					     * |-----------------------------------------------------------|
 | 
				
			||||||
@ -110,7 +88,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			|||||||
    LCTL,LGUI,LALT,          SPC,                     RALT,RGUI,APP, RCTL,     LEFT,DOWN,RGHT,    P0,       PDOT,PENT
 | 
					    LCTL,LGUI,LALT,          SPC,                     RALT,RGUI,APP, RCTL,     LEFT,DOWN,RGHT,    P0,       PDOT,PENT
 | 
				
			||||||
    ),
 | 
					    ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* 4: Workman http://viralintrospection.wordpress.com/2010/09/06/a-different-philosophy-in-designing-keyboard-layouts/
 | 
					    /* 3: Workman http://viralintrospection.wordpress.com/2010/09/06/a-different-philosophy-in-designing-keyboard-layouts/
 | 
				
			||||||
     * ,-----------------------------------------------------------.
 | 
					     * ,-----------------------------------------------------------.
 | 
				
			||||||
     * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backspa|
 | 
					     * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backspa|
 | 
				
			||||||
     * |-----------------------------------------------------------|
 | 
					     * |-----------------------------------------------------------|
 | 
				
			||||||
 | 
				
			|||||||
@ -5,10 +5,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// USB HID host
 | 
					// USB HID host
 | 
				
			||||||
#include "Usb.h"
 | 
					#include "Usb.h"
 | 
				
			||||||
 | 
					#include "usbhub.h"
 | 
				
			||||||
#include "hid.h"
 | 
					#include "hid.h"
 | 
				
			||||||
#include "hidboot.h"
 | 
					#include "hidboot.h"
 | 
				
			||||||
#include "parser.h"
 | 
					#include "parser.h"
 | 
				
			||||||
#include "usbhub.h"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// LUFA
 | 
					// LUFA
 | 
				
			||||||
#include "lufa.h"
 | 
					#include "lufa.h"
 | 
				
			||||||
@ -17,22 +17,31 @@
 | 
				
			|||||||
#include "sendchar.h"
 | 
					#include "sendchar.h"
 | 
				
			||||||
#include "debug.h"
 | 
					#include "debug.h"
 | 
				
			||||||
#include "keyboard.h"
 | 
					#include "keyboard.h"
 | 
				
			||||||
 | 
					#include "led.h"
 | 
				
			||||||
#include "leonardo_led.h"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static USB     usb_host;
 | 
					/* LED ping configuration */
 | 
				
			||||||
static HIDBoot<HID_PROTOCOL_KEYBOARD>    kbd(&usb_host);
 | 
					#define TMK_LED
 | 
				
			||||||
static KBDReportParser kbd_parser;
 | 
					//#define LEONARDO_LED
 | 
				
			||||||
static USBHub hub1(&usb_host);  // one hub is enough for HHKB pro2
 | 
					#if defined(TMK_LED)
 | 
				
			||||||
/* may be needed  for other device with more hub
 | 
					// For TMK converter and Teensy
 | 
				
			||||||
static USBHub hub2(&usb_host);
 | 
					#define LED_TX_INIT    (DDRD  |=  (1<<6))
 | 
				
			||||||
static USBHub hub3(&usb_host);
 | 
					#define LED_TX_ON      (PORTD |=  (1<<6))
 | 
				
			||||||
static USBHub hub4(&usb_host);
 | 
					#define LED_TX_OFF     (PORTD &= ~(1<<6))
 | 
				
			||||||
static USBHub hub5(&usb_host);
 | 
					#define LED_TX_TOGGLE  (PORTD ^=  (1<<6))
 | 
				
			||||||
static USBHub hub6(&usb_host);
 | 
					#elif defined(LEONARDO_LED)
 | 
				
			||||||
static USBHub hub7(&usb_host);
 | 
					// For Leonardo(TX LED)
 | 
				
			||||||
*/
 | 
					#define LED_TX_INIT    (DDRD  |=  (1<<5))
 | 
				
			||||||
 | 
					#define LED_TX_ON      (PORTD &= ~(1<<5))
 | 
				
			||||||
 | 
					#define LED_TX_OFF     (PORTD |=  (1<<5))
 | 
				
			||||||
 | 
					#define LED_TX_TOGGLE  (PORTD ^=  (1<<5))
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#define LED_TX_INIT
 | 
				
			||||||
 | 
					#define LED_TX_ON
 | 
				
			||||||
 | 
					#define LED_TX_OFF
 | 
				
			||||||
 | 
					#define LED_TX_TOGGLE
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void LUFA_setup(void)
 | 
					static void LUFA_setup(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -53,18 +62,24 @@ static void LUFA_setup(void)
 | 
				
			|||||||
    print_set_sendchar(sendchar);
 | 
					    print_set_sendchar(sendchar);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void HID_setup()
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * USB Host Shield HID keyboard
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					USB usb_host;
 | 
				
			||||||
 | 
					USBHub hub1(&usb_host);
 | 
				
			||||||
 | 
					HIDBoot<HID_PROTOCOL_KEYBOARD>    kbd(&usb_host);
 | 
				
			||||||
 | 
					KBDReportParser kbd_parser;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void led_set(uint8_t usb_led)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (usb_host.Init() == -1) {
 | 
					    kbd.SetReport(0, 0, 2, 0, 1, &usb_led);
 | 
				
			||||||
        debug("HID init: failed\n");
 | 
					 | 
				
			||||||
        LED_TX_OFF;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
    _delay_ms(200);
 | 
					 | 
				
			||||||
      
 | 
					 | 
				
			||||||
    kbd.SetReportParser(0, (HIDReportParser*)&kbd_parser);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main(void)
 | 
					int main(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    // LED for debug
 | 
					    // LED for debug
 | 
				
			||||||
@ -72,35 +87,32 @@ int main(void)
 | 
				
			|||||||
    LED_TX_ON;
 | 
					    LED_TX_ON;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    debug_enable = true;
 | 
					    debug_enable = true;
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
    debug_matrix = true;
 | 
					 | 
				
			||||||
    debug_keyboard = true;
 | 
					    debug_keyboard = true;
 | 
				
			||||||
    debug_mouse = true;
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    host_set_driver(&lufa_driver);
 | 
					    host_set_driver(&lufa_driver);
 | 
				
			||||||
    keyboard_init();
 | 
					    keyboard_init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    LUFA_setup();
 | 
					    LUFA_setup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // USB Host Shield setup
 | 
				
			||||||
 | 
					    usb_host.Init();
 | 
				
			||||||
 | 
					    kbd.SetReportParser(0, (HIDReportParser*)&kbd_parser);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* NOTE: Don't insert time consuming job here.
 | 
				
			||||||
 | 
					     * It'll cause unclear initialization failure when DFU reset(worm start).
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    sei();
 | 
					    sei();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint8_t ret;
 | 
					 | 
				
			||||||
    // wait for startup of sendchar routine
 | 
					    // wait for startup of sendchar routine
 | 
				
			||||||
    while (USB_DeviceState != DEVICE_STATE_Configured) ;
 | 
					    while (USB_DeviceState != DEVICE_STATE_Configured) ;
 | 
				
			||||||
    if (debug_enable) {
 | 
					    if (debug_enable) {
 | 
				
			||||||
        _delay_ms(1000);
 | 
					        _delay_ms(1000);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    debug("init: start\n");
 | 
					 | 
				
			||||||
    HID_setup();
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    debug("init: done\n");
 | 
					    debug("init: done\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint16_t timer;
 | 
					uint16_t timer;
 | 
				
			||||||
// to see loop pulse with oscillo scope
 | 
					 | 
				
			||||||
DDRF = (1<<7);
 | 
					 | 
				
			||||||
    for (;;) {
 | 
					    for (;;) {
 | 
				
			||||||
PORTF ^= (1<<7);
 | 
					 | 
				
			||||||
        keyboard_task();
 | 
					        keyboard_task();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
timer = timer_read();
 | 
					timer = timer_read();
 | 
				
			||||||
@ -115,6 +127,6 @@ if (timer > 100) {
 | 
				
			|||||||
        USB_USBTask();
 | 
					        USB_USBTask();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
        
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,7 @@
 | 
				
			|||||||
TARGET = x68k_usb_pjrc
 | 
					TARGET = x68k_usb_pjrc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -92,10 +92,10 @@ PROGRAM_CMD = dfu-programmer atmega32u4 flash $(TARGET).hex
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/pjrc.mk
 | 
					include $(TMK_DIR)/protocol/pjrc.mk
 | 
				
			||||||
include $(TOP_DIR)/protocol.mk
 | 
					include $(TMK_DIR)/protocol.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -42,7 +42,7 @@
 | 
				
			|||||||
TARGET = IIgs_Standard
 | 
					TARGET = IIgs_Standard
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -88,8 +88,8 @@ PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/pjrc.mk
 | 
					include $(TMK_DIR)/protocol/pjrc.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										134
									
								
								keyboard/alps64/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										134
									
								
								keyboard/alps64/Makefile
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,134 @@
 | 
				
			|||||||
 | 
					#----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# On command line:
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make all = Make software.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make clean = Clean out built project files.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make coff = Convert ELF to AVR COFF.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make extcoff = Convert ELF to AVR Extended COFF.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make program = Download the hex file to the device.
 | 
				
			||||||
 | 
					#                Please customize your programmer settings(PROGRAM_CMD)
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make teensy = Download the hex file to the device, using teensy_loader_cli.
 | 
				
			||||||
 | 
					#               (must have teensy_loader_cli installed).
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make dfu = Download the hex file to the device, using dfu-programmer (must
 | 
				
			||||||
 | 
					#            have dfu-programmer installed).
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make flip = Download the hex file to the device, using Atmel FLIP (must
 | 
				
			||||||
 | 
					#             have Atmel FLIP installed).
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make dfu-ee = Download the eeprom file to the device, using dfu-programmer
 | 
				
			||||||
 | 
					#               (must have dfu-programmer installed).
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make flip-ee = Download the eeprom file to the device, using Atmel FLIP
 | 
				
			||||||
 | 
					#                (must have Atmel FLIP installed).
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make debug = Start either simulavr or avarice as specified for debugging, 
 | 
				
			||||||
 | 
					#              with avr-gdb or avr-insight as the front end for debugging.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make filename.s = Just compile filename.c into the assembler code only.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# make filename.i = Create a preprocessed source file for use in submitting
 | 
				
			||||||
 | 
					#                   bug reports to the GCC project.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# To rebuild project do "make clean" then "make all".
 | 
				
			||||||
 | 
					#----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Target file name (without extension).
 | 
				
			||||||
 | 
					TARGET = alps64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Directory common source filess exist
 | 
				
			||||||
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 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.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)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Interrupt driven control endpoint task(+60)
 | 
				
			||||||
 | 
					OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 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
 | 
				
			||||||
 | 
					#SLEEP_LED_ENABLE = yes  # Breathing sleep LED during USB suspend
 | 
				
			||||||
 | 
					#NKRO_ENABLE = yes	# USB Nkey Rollover - not yet supported in LUFA
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Optimize size but this may cause error "relocation truncated to fit"
 | 
				
			||||||
 | 
					#EXTRALDFLAGS = -Wl,--relax
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Search Path
 | 
				
			||||||
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
							
								
								
									
										70
									
								
								keyboard/alps64/config.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								keyboard/alps64/config.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,70 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2015 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* USB Device descriptor parameter */
 | 
				
			||||||
 | 
					#define VENDOR_ID       0xFEED
 | 
				
			||||||
 | 
					#define PRODUCT_ID      0x6464
 | 
				
			||||||
 | 
					#define DEVICE_VER      0x0001
 | 
				
			||||||
 | 
					#define MANUFACTURER    TMK
 | 
				
			||||||
 | 
					#define PRODUCT         Alps64
 | 
				
			||||||
 | 
					#define DESCRIPTION     TMK keyboard firmware for Alps64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* key matrix size */
 | 
				
			||||||
 | 
					#define MATRIX_ROWS 8
 | 
				
			||||||
 | 
					#define MATRIX_COLS 8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* define if matrix has ghost */
 | 
				
			||||||
 | 
					//#define MATRIX_HAS_GHOST
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Set 0 if debouncing isn't needed */
 | 
				
			||||||
 | 
					#define DEBOUNCE    5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
 | 
				
			||||||
 | 
					#define LOCKING_SUPPORT_ENABLE
 | 
				
			||||||
 | 
					/* Locking resynchronize hack */
 | 
				
			||||||
 | 
					#define LOCKING_RESYNC_ENABLE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* key combination for command */
 | 
				
			||||||
 | 
					#define IS_COMMAND() ( \
 | 
				
			||||||
 | 
					    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Feature disable options
 | 
				
			||||||
 | 
					 *  These options are also useful to firmware size reduction.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* disable debug print */
 | 
				
			||||||
 | 
					//#define NO_DEBUG
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* disable print */
 | 
				
			||||||
 | 
					//#define NO_PRINT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* disable action features */
 | 
				
			||||||
 | 
					//#define NO_ACTION_LAYER
 | 
				
			||||||
 | 
					//#define NO_ACTION_TAPPING
 | 
				
			||||||
 | 
					//#define NO_ACTION_ONESHOT
 | 
				
			||||||
 | 
					//#define NO_ACTION_MACRO
 | 
				
			||||||
 | 
					//#define NO_ACTION_FUNCTION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
							
								
								
									
										30
									
								
								keyboard/alps64/keymap_common.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								keyboard/alps64/keymap_common.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 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, keypos_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)]) };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										70
									
								
								keyboard/alps64/keymap_common.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								keyboard/alps64/keymap_common.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,70 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 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/>.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					#ifndef KEYMAP_COMMON_H
 | 
				
			||||||
 | 
					#define KEYMAP_COMMON_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <stdint.h>
 | 
				
			||||||
 | 
					#include <stdbool.h>
 | 
				
			||||||
 | 
					#include <avr/pgmspace.h>
 | 
				
			||||||
 | 
					#include "keycode.h"
 | 
				
			||||||
 | 
					#include "action.h"
 | 
				
			||||||
 | 
					#include "action_macro.h"
 | 
				
			||||||
 | 
					#include "report.h"
 | 
				
			||||||
 | 
					#include "host.h"
 | 
				
			||||||
 | 
					#include "print.h"
 | 
				
			||||||
 | 
					#include "debug.h"
 | 
				
			||||||
 | 
					#include "keymap.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
 | 
				
			||||||
 | 
					extern const uint16_t fn_actions[];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Alps64 keymap definition macro */
 | 
				
			||||||
 | 
					#define KEYMAP( \
 | 
				
			||||||
 | 
					    K36, K37, K46, K47, K56, K57, K66, K67, K76, K77, K06, K07, K17, K26, K27, \
 | 
				
			||||||
 | 
					    K34, K35, K44, K45, K54, K55, K64, K65, K75, K05, K15, K16, K25, K24, \
 | 
				
			||||||
 | 
					    K32, K33, K43, K52, K53, K63, K73, K74, K03, K04, K13, K14, K23, \
 | 
				
			||||||
 | 
					    K31, K41, K42, K51, K61, K62, K71, K72, K01, K02, K11, K12, K21, K22, \
 | 
				
			||||||
 | 
					    K30, K40, K50,           K60,                     K70, K00, K10, K20  \
 | 
				
			||||||
 | 
					) { \
 | 
				
			||||||
 | 
					    { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
 | 
				
			||||||
 | 
					    { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
 | 
				
			||||||
 | 
					    { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
 | 
				
			||||||
 | 
					    { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
 | 
				
			||||||
 | 
					    { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47 }, \
 | 
				
			||||||
 | 
					    { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
 | 
				
			||||||
 | 
					    { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
 | 
				
			||||||
 | 
					    { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77 } \
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* AEK US */
 | 
				
			||||||
 | 
					#define KEYMAP_AEK( \
 | 
				
			||||||
 | 
					    K36, K37, K46, K47, K56, K57, K66, K67, K76, K77, K06, K07, K17, K27, \
 | 
				
			||||||
 | 
					    K34, K35, K44, K45, K54, K55, K64, K65, K75, K05, K15, K16, K25, K24, \
 | 
				
			||||||
 | 
					    K32, K33, K43, K52, K53, K63, K73, K74, K03, K04, K13, K14, K23, \
 | 
				
			||||||
 | 
					    K31, K42, K51, K61, K62, K71, K72, K01, K02, K11, K12, K21, \
 | 
				
			||||||
 | 
					    K30, K40, K50,           K60,                          K00, K10, K20  \
 | 
				
			||||||
 | 
					) KEYMAP( \
 | 
				
			||||||
 | 
					    K36, K37, K46, K47, K56, K57, K66, K67, K76, K77, K06, K07, K17, NUHS,K27, \
 | 
				
			||||||
 | 
					    K34, K35, K44, K45, K54, K55, K64, K65, K75, K05, K15, K16, K25, K24, \
 | 
				
			||||||
 | 
					    K32, K33, K43, K52, K53, K63, K73, K74, K03, K04, K13, K14, K23, \
 | 
				
			||||||
 | 
					    K31, NUBS,K42, K51, K61, K62, K71, K72, K01, K02, K11, K12, K21, ESC, \
 | 
				
			||||||
 | 
					    K30, K40, K50,           K60,                     APP, K00, K10, K20  \
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
							
								
								
									
										151
									
								
								keyboard/alps64/keymap_hasu.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										151
									
								
								keyboard/alps64/keymap_hasu.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,151 @@
 | 
				
			|||||||
 | 
					#include "keymap_common.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Hasu
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
 | 
					    /* Default Layer
 | 
				
			||||||
 | 
					     * ,-----------------------------------------------------------.
 | 
				
			||||||
 | 
					     * |Esc|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|   \   |
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------|
 | 
				
			||||||
 | 
					     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|Bspc |
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------|
 | 
				
			||||||
 | 
					     * |Ctrl  |  A|  S|  D|  F|  G|  H|  J|  K|  L|Fn3|  '|FN1     |
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------|
 | 
				
			||||||
 | 
					     * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|Fn2|Shift     |
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------|
 | 
				
			||||||
 | 
					     * |Ctrl |Gui |Alt  |       Space            |Alt   |Fn5 |Ctrl |
 | 
				
			||||||
 | 
					     * `-----------------------------------------------------------'
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    [0] = KEYMAP_AEK( \
 | 
				
			||||||
 | 
					        ESC, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, BSLS, \
 | 
				
			||||||
 | 
					        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,FN1, \
 | 
				
			||||||
 | 
					        LSFT,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, FN2, RSFT, \
 | 
				
			||||||
 | 
					        LCTL,LGUI,LALT,          FN4,                          RALT,FN5, FN0),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* HHKB mode[HHKB Fn]
 | 
				
			||||||
 | 
					     * ,-----------------------------------------------------------.
 | 
				
			||||||
 | 
					     * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|   `   |
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------|
 | 
				
			||||||
 | 
					     * |Caps |   |   |   |   |   |   |   |Psc|Slk|Pus|Up |   |Del  |
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------|
 | 
				
			||||||
 | 
					     * |Contro|VoD|VoU|Mut|   |   |  *|  /|Hom|PgU|Lef|Rig|Enter   |
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------|
 | 
				
			||||||
 | 
					     * |Shift   |   |   |   |   |   |  +|  -|End|PgD|Dow|Shift     |
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------|
 | 
				
			||||||
 | 
					     * |Ctrl |Gui |Alt  |       Space            |Alt   |Fn5 |Ctrl |
 | 
				
			||||||
 | 
					     * `-----------------------------------------------------------'
 | 
				
			||||||
 | 
					     */ 
 | 
				
			||||||
 | 
					    [1] = KEYMAP_AEK( \
 | 
				
			||||||
 | 
					        GRV, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, GRV, \
 | 
				
			||||||
 | 
					        CAPS,NO,  NO,  NO,  NO,  NO,  NO,  NO,  PSCR,SLCK,PAUS,UP,  NO,  DEL, \
 | 
				
			||||||
 | 
					        LCTL,VOLD,VOLU,MUTE,NO,  NO,  PAST,PSLS,HOME,PGUP,LEFT,RGHT,TRNS, \
 | 
				
			||||||
 | 
					        LSFT,NO,  NO,  NO,  NO,  NO,  PPLS,PMNS,END, PGDN,DOWN,RSFT, \
 | 
				
			||||||
 | 
					        LCTL,LGUI,LALT,          TRNS,                         RALT,RGUI,TRNS),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* Vi mode[Slash]
 | 
				
			||||||
 | 
					     * ,-----------------------------------------------------------.
 | 
				
			||||||
 | 
					     * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Del    |
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------|
 | 
				
			||||||
 | 
					     * |Tab  |Hom|PgD|Up |PgU|End|Hom|PgD|PgUlEnd|   |   |   |Backs|
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------|
 | 
				
			||||||
 | 
					     * |Contro|   |Lef|Dow|Rig|   |Lef|Dow|Up |Rig|   |   |Return  |
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------|
 | 
				
			||||||
 | 
					     * |Shift   |   |   |   |   |   |Hom|PgD|PgUlEnd|Fn0|Shift     |
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------|
 | 
				
			||||||
 | 
					     * |Ctrl |Gui |Alt  |       Space            |Alt   |Fn5 |Ctrl |
 | 
				
			||||||
 | 
					     * `-----------------------------------------------------------'
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    [2] = KEYMAP_AEK( \
 | 
				
			||||||
 | 
					        GRV, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, GRV, \
 | 
				
			||||||
 | 
					        TAB, HOME,PGDN,UP,  PGUP,END, HOME,PGDN,PGUP,END, NO,  NO,  NO,  DEL, \
 | 
				
			||||||
 | 
					        LCTL,NO,  LEFT,DOWN,RGHT,NO,  LEFT,DOWN,UP,  RGHT,NO,  NO,  ENT, \
 | 
				
			||||||
 | 
					        LSFT,NO,  NO,  NO,  NO,  NO,  HOME,PGDN,PGUP,END, FN2, RSFT, \
 | 
				
			||||||
 | 
					        LCTL,LGUI,LALT,          SPC,                          RALT,RGUI,RCTL),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* 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 |   |
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------|
 | 
				
			||||||
 | 
					     * |Ctrl |Gui |Alt  |       Space            |Alt   |Fn5 |Ctrl |
 | 
				
			||||||
 | 
					     * `-----------------------------------------------------------'
 | 
				
			||||||
 | 
					     * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    [3] = KEYMAP_AEK( \
 | 
				
			||||||
 | 
					        GRV, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, GRV, \
 | 
				
			||||||
 | 
					        FN8, NO,  NO,  NO,  NO,  NO,  NO,  WH_D,MS_U,WH_U,RGHT,FN9, FN10,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,FN9, FN10,NO,  RSFT, \
 | 
				
			||||||
 | 
					        LCTL,LGUI,LALT,          BTN1,                         TRNS,TRNS,TRNS),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* Layer 4: 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 |   |
 | 
				
			||||||
 | 
					     * |-----------------------------------------------------------|
 | 
				
			||||||
 | 
					     * |Ctrl |Gui |Alt  |       Space            |Alt   |Fn5 |Ctrl |
 | 
				
			||||||
 | 
					     * `-----------------------------------------------------------'
 | 
				
			||||||
 | 
					     * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    [4] = KEYMAP_AEK( \
 | 
				
			||||||
 | 
					        GRV, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, GRV, \
 | 
				
			||||||
 | 
					        FN8, NO,  NO,  NO,  NO,  NO,  NO,  WH_D,MS_U,WH_U,RGHT,FN9, FN10,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,FN9, FN10,NO,  RSFT, \
 | 
				
			||||||
 | 
					        LCTL,LGUI,LALT,          TRNS,                         TRNS,TRNS,TRNS),
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* id for user defined function/macro */
 | 
				
			||||||
 | 
					enum function_id {
 | 
				
			||||||
 | 
					    NONE,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum macro_id {
 | 
				
			||||||
 | 
					    ALT_TAB,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Fn action definition
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					const uint16_t PROGMEM fn_actions[] = {
 | 
				
			||||||
 | 
					    [0] = ACTION_LAYER_MOMENTARY(1),                  // HHKB layer
 | 
				
			||||||
 | 
					    [1] = ACTION_LAYER_TAP_KEY(1, KC_ENTER),          // HHKB layer
 | 
				
			||||||
 | 
					    [2] = ACTION_LAYER_TAP_KEY(2, KC_SLASH),          // Cursor layer with Slash*
 | 
				
			||||||
 | 
					    [3] = ACTION_LAYER_TAP_KEY(3, KC_SCLN),           // Mousekey layer with Semicolon*
 | 
				
			||||||
 | 
					    [4] = ACTION_LAYER_TAP_KEY(4, KC_SPC),            // Mousekey layer with Space
 | 
				
			||||||
 | 
					    [5] = ACTION_LAYER_MOMENTARY(3),                  // Mousekey layer(IJKL)
 | 
				
			||||||
 | 
					    [6] = ACTION_LAYER_TAP_KEY(MOD_RCTL, KC_ENT),      // RControl with tap Enter
 | 
				
			||||||
 | 
					    [7] = ACTION_MODS_ONESHOT(MOD_LSFT),              // Oneshot Shift
 | 
				
			||||||
 | 
					    [8] = ACTION_MACRO(ALT_TAB),                      // Application switching
 | 
				
			||||||
 | 
					    [9] = ACTION_MODS_KEY(MOD_LALT, KC_LEFT),
 | 
				
			||||||
 | 
					   [10] = ACTION_MODS_KEY(MOD_LALT, KC_RIGHT),
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Macro definition
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    switch (id) {
 | 
				
			||||||
 | 
					        case ALT_TAB:
 | 
				
			||||||
 | 
					            return (record->event.pressed ?
 | 
				
			||||||
 | 
					                    MACRO( D(LALT), D(TAB), END ) :
 | 
				
			||||||
 | 
					                    MACRO( U(TAB), END ));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return MACRO_NONE;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										12
									
								
								keyboard/alps64/keymap_plain.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								keyboard/alps64/keymap_plain.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					#include "keymap_common.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
				
			||||||
 | 
					    /* 0: qwerty */
 | 
				
			||||||
 | 
					    KEYMAP( \
 | 
				
			||||||
 | 
					        GRV, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, NUHS, BSPC, \
 | 
				
			||||||
 | 
					        TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,BSLS, \
 | 
				
			||||||
 | 
					        CAPS,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,ENT,  \
 | 
				
			||||||
 | 
					        LSFT,NUBS,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,RSFT,ESC, \
 | 
				
			||||||
 | 
					        LCTL,LGUI,LALT,          SPC,                     APP, RALT,RGUI,RCTL),
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					const uint16_t PROGMEM fn_actions[] = {};
 | 
				
			||||||
@ -15,10 +15,20 @@ 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/>.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <avr/io.h>
 | 
				
			||||||
#include "stdint.h"
 | 
					#include "stdint.h"
 | 
				
			||||||
#include "led.h"
 | 
					#include "led.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void led_set(uint8_t usb_led)
 | 
					void led_set(uint8_t usb_led)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
 | 
				
			||||||
 | 
					        // output high
 | 
				
			||||||
 | 
					        DDRC |= (1<<5);
 | 
				
			||||||
 | 
					        PORTC |= (1<<5);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        // Hi-Z
 | 
				
			||||||
 | 
					        DDRC &= ~(1<<5);
 | 
				
			||||||
 | 
					        PORTC &= ~(1<<5);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
							
								
								
									
										200
									
								
								keyboard/alps64/matrix.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										200
									
								
								keyboard/alps64/matrix.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,200 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					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/>.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * scan matrix
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#include <stdint.h>
 | 
				
			||||||
 | 
					#include <stdbool.h>
 | 
				
			||||||
 | 
					#include <avr/io.h>
 | 
				
			||||||
 | 
					#include <util/delay.h>
 | 
				
			||||||
 | 
					#include "print.h"
 | 
				
			||||||
 | 
					#include "debug.h"
 | 
				
			||||||
 | 
					#include "util.h"
 | 
				
			||||||
 | 
					#include "matrix.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef DEBOUNCE
 | 
				
			||||||
 | 
					#   define DEBOUNCE	5
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					static uint8_t debouncing = DEBOUNCE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* matrix state(1:on, 0:off) */
 | 
				
			||||||
 | 
					static matrix_row_t matrix[MATRIX_ROWS];
 | 
				
			||||||
 | 
					static matrix_row_t matrix_debouncing[MATRIX_ROWS];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static matrix_row_t read_cols(void);
 | 
				
			||||||
 | 
					static void init_cols(void);
 | 
				
			||||||
 | 
					static void unselect_rows(void);
 | 
				
			||||||
 | 
					static void select_row(uint8_t row);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inline
 | 
				
			||||||
 | 
					uint8_t matrix_rows(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return MATRIX_ROWS;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inline
 | 
				
			||||||
 | 
					uint8_t matrix_cols(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return MATRIX_COLS;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define LED_ON()    do { DDRC |= (1<<5); PORTC |= (1<<5); } while (0)
 | 
				
			||||||
 | 
					#define LED_OFF()   do { DDRC &= ~(1<<5); PORTC &= ~(1<<5); } while (0)
 | 
				
			||||||
 | 
					#define LED_TGL()   do { DDRC |= (1<<5); PINC |= (1<<5); } while (0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void matrix_init(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // initialize row and col
 | 
				
			||||||
 | 
					    unselect_rows();
 | 
				
			||||||
 | 
					    init_cols();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // initialize matrix state: all keys off
 | 
				
			||||||
 | 
					    for (uint8_t i=0; i < MATRIX_ROWS; i++) {
 | 
				
			||||||
 | 
					        matrix[i] = 0;
 | 
				
			||||||
 | 
					        matrix_debouncing[i] = 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //debug
 | 
				
			||||||
 | 
					    debug_matrix = true;
 | 
				
			||||||
 | 
					    LED_ON();
 | 
				
			||||||
 | 
					    _delay_ms(500);
 | 
				
			||||||
 | 
					    LED_OFF();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uint8_t matrix_scan(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
 | 
				
			||||||
 | 
					        select_row(i);
 | 
				
			||||||
 | 
					        _delay_us(30);  // without this wait read unstable value.
 | 
				
			||||||
 | 
					        matrix_row_t cols = read_cols();
 | 
				
			||||||
 | 
					        if (matrix_debouncing[i] != cols) {
 | 
				
			||||||
 | 
					            matrix_debouncing[i] = cols;
 | 
				
			||||||
 | 
					            if (debouncing) {
 | 
				
			||||||
 | 
					                debug("bounce!: "); debug_hex(debouncing); debug("\n");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            debouncing = DEBOUNCE;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        unselect_rows();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (debouncing) {
 | 
				
			||||||
 | 
					        if (--debouncing) {
 | 
				
			||||||
 | 
					            _delay_ms(1);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
 | 
				
			||||||
 | 
					                matrix[i] = matrix_debouncing[i];
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inline
 | 
				
			||||||
 | 
					bool matrix_is_on(uint8_t row, uint8_t col)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return (matrix[row] & ((matrix_row_t)1<<col));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inline
 | 
				
			||||||
 | 
					matrix_row_t matrix_get_row(uint8_t row)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return matrix[row];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void matrix_print(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    print("\nr/c 0123456789ABCDEF\n");
 | 
				
			||||||
 | 
					    for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
 | 
				
			||||||
 | 
					        phex(row); print(": ");
 | 
				
			||||||
 | 
					        pbin_reverse16(matrix_get_row(row));
 | 
				
			||||||
 | 
					        print("\n");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Column pin configuration
 | 
				
			||||||
 | 
					 * col: 0   1   2   3   4   5   6   7
 | 
				
			||||||
 | 
					 * pin: B0  B1  B2  B3  B4  B5  B6  B7
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					static void  init_cols(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // Input with pull-up(DDR:0, PORT:1)
 | 
				
			||||||
 | 
					    DDRB  &= ~0b11111111;
 | 
				
			||||||
 | 
					    PORTB |=  0b11111111;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Returns status of switches(1:on, 0:off) */
 | 
				
			||||||
 | 
					static matrix_row_t read_cols(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // Invert because PIN indicates 'switch on' with low(0) and 'off' with high(1)
 | 
				
			||||||
 | 
					    return ~PINB;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Row pin configuration
 | 
				
			||||||
 | 
					 * row: 0   1   2   3   4   5   6   7
 | 
				
			||||||
 | 
					 * pin: D0  D1  D2  D3  D4  D5  D6  C2
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					static void unselect_rows(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // Hi-Z(DDR:0, PORT:0) to unselect
 | 
				
			||||||
 | 
					    DDRD  &= ~0b01111111;
 | 
				
			||||||
 | 
					    PORTD &= ~0b01111111;
 | 
				
			||||||
 | 
					    DDRC  &= ~0b00000100;
 | 
				
			||||||
 | 
					    PORTC &= ~0b00000100;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void select_row(uint8_t row)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // Output low(DDR:1, PORT:0) to select
 | 
				
			||||||
 | 
					    switch (row) {
 | 
				
			||||||
 | 
					        case 0:
 | 
				
			||||||
 | 
					            DDRD  |= (1<<0);
 | 
				
			||||||
 | 
					            PORTD &= ~(1<<0);
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case 1:
 | 
				
			||||||
 | 
					            DDRD  |= (1<<1);
 | 
				
			||||||
 | 
					            PORTD &= ~(1<<1);
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case 2:
 | 
				
			||||||
 | 
					            DDRD  |= (1<<2);
 | 
				
			||||||
 | 
					            PORTD &= ~(1<<2);
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case 3:
 | 
				
			||||||
 | 
					            DDRD  |= (1<<3);
 | 
				
			||||||
 | 
					            PORTD &= ~(1<<3);
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case 4:
 | 
				
			||||||
 | 
					            DDRD  |= (1<<4);
 | 
				
			||||||
 | 
					            PORTD &= ~(1<<4);
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case 5:
 | 
				
			||||||
 | 
					            DDRD  |= (1<<5);
 | 
				
			||||||
 | 
					            PORTD &= ~(1<<5);
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case 6:
 | 
				
			||||||
 | 
					            DDRD  |= (1<<6);
 | 
				
			||||||
 | 
					            PORTD &= ~(1<<6);
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case 7:
 | 
				
			||||||
 | 
					            DDRC  |= (1<<2);
 | 
				
			||||||
 | 
					            PORTC &= ~(1<<2);
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -42,7 +42,7 @@
 | 
				
			|||||||
TARGET = gh60_lufa
 | 
					TARGET = gh60_lufa
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -128,8 +128,8 @@ NKRO_ENABLE = yes	# USB Nkey Rollover - not yet supported in LUFA
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/lufa.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -42,7 +42,7 @@
 | 
				
			|||||||
TARGET = gh60_pjrc
 | 
					TARGET = gh60_pjrc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -97,11 +97,11 @@ NKRO_ENABLE = yes	# USB Nkey Rollover(+500)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/pjrc.mk
 | 
					include $(TMK_DIR)/protocol/pjrc.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
plain: OPT_DEFS += -DKEYMAP_PLAIN
 | 
					plain: OPT_DEFS += -DKEYMAP_PLAIN
 | 
				
			||||||
plain: all
 | 
					plain: all
 | 
				
			||||||
 | 
				
			|||||||
@ -42,7 +42,7 @@
 | 
				
			|||||||
TARGET = ghostsquid_lufa
 | 
					TARGET = ghostsquid_lufa
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -110,8 +110,8 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/lufa.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -42,7 +42,7 @@
 | 
				
			|||||||
TARGET = hbkb_lufa
 | 
					TARGET = hbkb_lufa
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -113,8 +113,8 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/lufa.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -42,7 +42,7 @@
 | 
				
			|||||||
TARGET = hhkb_lufa
 | 
					TARGET = hhkb_lufa
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -120,6 +120,10 @@ 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
 | 
				
			||||||
#HHKB_JP = yes			# HHKB JP support
 | 
					#HHKB_JP = yes			# HHKB JP support
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#OPT_DEFS += -DNO_ACTION_TAPPING
 | 
				
			||||||
 | 
					#OPT_DEFS += -DNO_ACTION_LAYER
 | 
				
			||||||
 | 
					#OPT_DEFS += -DNO_ACTION_MACRO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Keymap file
 | 
					# Keymap file
 | 
				
			||||||
@ -142,11 +146,11 @@ endif
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/lufa.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
debug-on: EXTRAFLAGS += -DDEBUG -DDEBUG_ACTION
 | 
					debug-on: EXTRAFLAGS += -DDEBUG -DDEBUG_ACTION
 | 
				
			||||||
debug-on: all
 | 
					debug-on: all
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,7 @@
 | 
				
			|||||||
TARGET = hhkb_pjrc
 | 
					TARGET = hhkb_pjrc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -61,8 +61,8 @@ PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/pjrc.mk
 | 
					include $(TMK_DIR)/protocol/pjrc.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -42,7 +42,7 @@
 | 
				
			|||||||
TARGET = hhkb_rn42
 | 
					TARGET = hhkb_rn42
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -139,13 +139,13 @@ endif
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include rn42.mk
 | 
					include rn42.mk
 | 
				
			||||||
include $(TOP_DIR)/protocol.mk
 | 
					include $(TMK_DIR)/protocol.mk
 | 
				
			||||||
include $(TOP_DIR)/protocol/lufa.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
debug-on: EXTRAFLAGS += -DDEBUG -DDEBUG_ACTION
 | 
					debug-on: EXTRAFLAGS += -DDEBUG -DDEBUG_ACTION
 | 
				
			||||||
debug-on: all
 | 
					debug-on: all
 | 
				
			||||||
 | 
				
			|||||||
@ -31,27 +31,28 @@ Two PCBs are connected by 15 lines(13 in case of Pro2).
 | 
				
			|||||||
Vcc and GND use 3(2) lines each, other lines are for keyboard signaling.
 | 
					Vcc and GND use 3(2) lines each, other lines are for keyboard signaling.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    HHKB connector lines:
 | 
					    HHKB connector lines:
 | 
				
			||||||
    JP   Pro2   Pro     Function    Description                               Teensy++ pins
 | 
					    JP   Pro2   Pro     Function    Description                               TMK pin usage
 | 
				
			||||||
    --------------------------------------------------------------------------------------------
 | 
					    --------------------------------------------------------------------------------------------
 | 
				
			||||||
                 1      Vcc(5V)                                               5V
 | 
					                 1      Vcc(5V)                                               5V
 | 
				
			||||||
     1    1      2      Vcc(5V)                                               5V
 | 
					     1    1      2      Vcc(5V)                                               5V
 | 
				
			||||||
     2    2      3      Vcc(5V)                                               5V
 | 
					     2    2      3      Vcc(5V)                                               5V
 | 
				
			||||||
     3    3      4      TP1684      KEY: Low(0) when key pressed              PE6 input(with pullup)
 | 
					     3    3      4      TP1684      ~KEY: Low(0) when key is pressed          PD7 input(with pullup)
 | 
				
			||||||
     4    4      5      TP1684      KEY_PREV: make threshold                  PE7 output
 | 
					     4    4      5      TP1684      HYS: High(1) when key is pressed          PB7 output
 | 
				
			||||||
     5    5      6      HC4051      A(bit0)\                                  PB0 output
 | 
					     5    5      6      HC4051      A(bit0)\                                  PB0 output
 | 
				
			||||||
     6    6      7      HC4051      B(bit1) > select row 0-7                  PB1 output
 | 
					     6    6      7      HC4051      B(bit1) > select row 0-7                  PB1 output
 | 
				
			||||||
     7    7      8      HC4051      C(bit2)/                                  PB2 output
 | 
					     7    7      8      HC4051      C(bit2)/                                  PB2 output
 | 
				
			||||||
     8    8      9      LS145       A(bit0)\                                  PB3 output
 | 
					     8    8      9      LS145       A(bit0)\                                  PB3 output
 | 
				
			||||||
     9    9     10      LS145       B(bit1) > select column 0-7               PB4 output
 | 
					     9    9     10      LS145       B(bit1) > select column 0-7               PB4 output
 | 
				
			||||||
    10   10     11      LS145       C(bit2)/                                  PB5 output
 | 
					    10   10     11      LS145       C(bit2)/                                  PB5 output
 | 
				
			||||||
    11   11     12      LS145       D(enable) Low(0) enables selected column  PB6 output
 | 
					    11   11     12      LS145       ~D(enable) Low(0) enables selected column PB6 output
 | 
				
			||||||
    12   12     13      GND                                                   GND
 | 
					    12   12     13      GND                                                   GND
 | 
				
			||||||
    13   13     14      GND                                                   GND
 | 
					    13   13     14      GND                                                   GND
 | 
				
			||||||
                15      GND
 | 
					                15      GND
 | 
				
			||||||
    14                  HC4051(Z2)  ~Enable of Z2   row0-7
 | 
					    14                  HC4051(Z2)  ~Enable of Z2   row0-7                    PC6
 | 
				
			||||||
    15                  HC4051(Z3)  ~Enable of Z3   row8-15
 | 
					    15                  HC4051(Z3)  ~Enable of Z3   row8-15                   PC7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    NOTE: guessing pin5(KEY_PREV) may work for hysteresis of capacitive sensing.
 | 
					    NOTE: Probably HYS changes threshold for upstroke and makes hysteresis in the result.
 | 
				
			||||||
 | 
					    NOTE: HYS should be given High(1) when previous KEY state is Low(0).
 | 
				
			||||||
    NOTE: 1KOhm didn't work as pullup resistor on KEY. AVR internal pullup or 10KOhm resistor was OK.
 | 
					    NOTE: 1KOhm didn't work as pullup resistor on KEY. AVR internal pullup or 10KOhm resistor was OK.
 | 
				
			||||||
    NOTE: JP has two HC4051(Z2,Z3) and line 5, 6 and 7 are connected to both of them.
 | 
					    NOTE: JP has two HC4051(Z2,Z3) and line 5, 6 and 7 are connected to both of them.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -112,7 +113,7 @@ Matrix diagram:
 | 
				
			|||||||
    |         <-+    |        <6-------|-|-|-|-|-|-|-|--|R|-+
 | 
					    |         <-+    |        <6-------|-|-|-|-|-|-|-|--|R|-+
 | 
				
			||||||
    |   1   4 | |    |        <7-------|-|-|-|-|-|-|-|--|R|-+
 | 
					    |   1   4 | |    |        <7-------|-|-|-|-|-|-|-|--|R|-+
 | 
				
			||||||
    +---V---^-+ |    +-^-^-^--+        0 1 2 3 4 5 6 7  33K*8
 | 
					    +---V---^-+ |    +-^-^-^--+        0 1 2 3 4 5 6 7  33K*8
 | 
				
			||||||
       KEY PREV |      A B C         +-----------------+
 | 
					       KEY HYS  |      A B C         +-----------------+
 | 
				
			||||||
        |   | +-^----+ | | |         |      LS145      |
 | 
					        |   | +-^----+ | | |         |      LS145      |
 | 
				
			||||||
    Vcc |   | |BU9831| | | |         +-^--^--^--^------+
 | 
					    Vcc |   | |BU9831| | | |         +-^--^--^--^------+
 | 
				
			||||||
    --- |   | +------+ | | |           A  B  C  D   +-------+
 | 
					    --- |   | +------+ | | |           A  B  C  D   +-------+
 | 
				
			||||||
@ -138,7 +139,7 @@ Matrix diagram:
 | 
				
			|||||||
    |         | +---->        <6-----------|-|-|-|-|----|R|-+
 | 
					    |         | +---->        <6-----------|-|-|-|-|----|R|-+
 | 
				
			||||||
    |         | | |  | A B C  <7-----------|-|-|-|-|----|R|-+
 | 
					    |         | | |  | A B C  <7-----------|-|-|-|-|----|R|-+
 | 
				
			||||||
    +---V---^-+ | |  +-^-^-^--+            | | | | |        |
 | 
					    +---V---^-+ | |  +-^-^-^--+            | | | | |        |
 | 
				
			||||||
       KEY PREV | |    | | |               | | | | |        |
 | 
					       KEY HYS  | |    | | |               | | | | |        |
 | 
				
			||||||
        |   |   | |  +--------+            | | | | |        |
 | 
					        |   |   | |  +--------+            | | | | |        |
 | 
				
			||||||
        |   |   | |  | HC4051 <8-----------|-|-|-|-|----|R|-+
 | 
					        |   |   | |  | HC4051 <8-----------|-|-|-|-|----|R|-+
 | 
				
			||||||
        |   |   | |  |    Z3  <9-----------|-|-|-|-|----|R|-+
 | 
					        |   |   | |  |    Z3  <9-----------|-|-|-|-|----|R|-+
 | 
				
			||||||
@ -192,7 +193,7 @@ Signals charts
 | 
				
			|||||||
            0123456701234567    selected column
 | 
					            0123456701234567    selected column
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    3) Wait 5us after column select, then set prev, strobe colD to spit out key status and read it.
 | 
					    3) Wait 5us after column select, then set prev, strobe colD to spit out key status and read it.
 | 
				
			||||||
    prev    _~~~~_____          20us if previous key state is low
 | 
					    hys     _~~~~_____          20us if previous key state is low
 | 
				
			||||||
    colD    ~~~__~~~~~          10us strobe
 | 
					    colD    ~~~__~~~~~          10us strobe
 | 
				
			||||||
    key     ~~~____~~~          22us indicates current state of the key
 | 
					    key     ~~~____~~~          22us indicates current state of the key
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										69
									
								
								keyboard/hhkb/doc/HHKB_keycodes.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								keyboard/hhkb/doc/HHKB_keycodes.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,69 @@
 | 
				
			|||||||
 | 
					HHKB keycodes
 | 
				
			||||||
 | 
					=============
 | 
				
			||||||
 | 
					2015/10/03
 | 
				
			||||||
 | 
					Looked into unclear keycodes(usages) of Fn-chording-key on HHKB.
 | 
				
			||||||
 | 
					Followings are usages of Keyboard/Keypad Page(0x07) that HHKB spits out when Fn key is down.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## HHK mode(Off-Off)
 | 
				
			||||||
 | 
					    Key         Usage
 | 
				
			||||||
 | 
					    ------------------------
 | 
				
			||||||
 | 
					    ⌘ / ◇       0x78    Stop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Lite Ext. mode(On-Off)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Mac mode(Off-On)
 | 
				
			||||||
 | 
					    Key         Usage
 | 
				
			||||||
 | 
					    ------------------------
 | 
				
			||||||
 | 
					    Esc         0x66    Power
 | 
				
			||||||
 | 
					    A           0x81    Volume Down
 | 
				
			||||||
 | 
					    S           0x80    Volume Up
 | 
				
			||||||
 | 
					    D           0x7F    Mute
 | 
				
			||||||
 | 
					    F           0x6F    F20
 | 
				
			||||||
 | 
					    Delete      0x53    Num Lock and Clear
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Secret mode(On-On)
 | 
				
			||||||
 | 
					    Key         Usage
 | 
				
			||||||
 | 
					    ------------------------
 | 
				
			||||||
 | 
					    Esc         0x66    Power
 | 
				
			||||||
 | 
					    Q           0x78    Stop
 | 
				
			||||||
 | 
					    W           0x7E    Find
 | 
				
			||||||
 | 
					    E           0x74    Execute
 | 
				
			||||||
 | 
					    R           0x77    Select
 | 
				
			||||||
 | 
					    T           0x76    Menu
 | 
				
			||||||
 | 
					    Y           0x75    Help
 | 
				
			||||||
 | 
					    Z           0x7A    Undo
 | 
				
			||||||
 | 
					    X           0x7B    Cut
 | 
				
			||||||
 | 
					    C           0x7C    Copy
 | 
				
			||||||
 | 
					    V           0x7D    Paste
 | 
				
			||||||
 | 
					    B           0x79    Again
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Matrix Key-Mode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                Mode
 | 
				
			||||||
 | 
					                -------------------------------
 | 
				
			||||||
 | 
					    Key         HHK     Lite    Mac     Secret  Desc
 | 
				
			||||||
 | 
					    ---------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    ⌘ / ◇       0x78    -       -       -       Stop
 | 
				
			||||||
 | 
					    Esc         -       -       0x66    0x66    Power
 | 
				
			||||||
 | 
					    A           -       -       0x81    -       Volume Down
 | 
				
			||||||
 | 
					    S           -       -       0x80    -       Volume Up
 | 
				
			||||||
 | 
					    D           -       -       0x7F    -       Mute
 | 
				
			||||||
 | 
					    F           -       -       0x6F    -       F20
 | 
				
			||||||
 | 
					    Delete      0x2A    0x2A    0x53    0x2A    Num Lock and Clear(0x53)/Backspace(0x2A)
 | 
				
			||||||
 | 
					    Q           -       -       -       0x78    Stop
 | 
				
			||||||
 | 
					    W           -       -       -       0x7E    Find
 | 
				
			||||||
 | 
					    E           -       -       -       0x74    Execute
 | 
				
			||||||
 | 
					    R           -       -       -       0x77    Select
 | 
				
			||||||
 | 
					    T           -       -       -       0x76    Menu
 | 
				
			||||||
 | 
					    Y           -       -       -       0x75    Help
 | 
				
			||||||
 | 
					    Z           -       -       -       0x7A    Undo
 | 
				
			||||||
 | 
					    X           -       -       -       0x7B    Cut
 | 
				
			||||||
 | 
					    C           -       -       -       0x7C    Copy
 | 
				
			||||||
 | 
					    V           -       -       -       0x7D    Paste
 | 
				
			||||||
 | 
					    B           -       -       -       0x79    Again
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
@ -85,7 +85,7 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    [3] = \
 | 
					    [3] = \
 | 
				
			||||||
    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, \
 | 
				
			||||||
           FN8, NO,  NO,  NO,  NO,  NO,  NO,  WH_D,MS_U,WH_U,RGHT,FN9, FN10,FN8, \
 | 
					           FN8, NO,  NO,  NO,  NO,  NO,  WH_L,WH_D,MS_U,WH_U,WH_R,FN9, FN10,FN8, \
 | 
				
			||||||
           LCTL,ACL0,ACL1,ACL2,ACL2,NO,  NO,  MS_L,MS_D,MS_R,FN3, NO,  ENT, \
 | 
					           LCTL,ACL0,ACL1,ACL2,ACL2,NO,  NO,  MS_L,MS_D,MS_R,FN3, NO,  ENT, \
 | 
				
			||||||
           LSFT,NO,  NO,  NO,  NO,  BTN3,BTN2,BTN1,FN9, FN10,NO,  RSFT,TRNS, \
 | 
					           LSFT,NO,  NO,  NO,  NO,  BTN3,BTN2,BTN1,FN9, FN10,NO,  RSFT,TRNS, \
 | 
				
			||||||
                LGUI,LALT,          BTN1,               TRNS,TRNS),
 | 
					                LGUI,LALT,          BTN1,               TRNS,TRNS),
 | 
				
			||||||
@ -106,7 +106,7 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    [4] = \
 | 
					    [4] = \
 | 
				
			||||||
    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, \
 | 
				
			||||||
           FN8, NO,  NO,  NO,  NO,  NO,  NO,  WH_D,MS_U,WH_U,RGHT,FN9, FN10,FN8, \
 | 
					           FN8, NO,  NO,  NO,  NO,  NO,  WH_L,WH_D,MS_U,WH_U,WH_R,BTN4,BTN5,FN8, \
 | 
				
			||||||
           LCTL,VOLD,VOLU,MUTE,NO,  NO,  NO,  MS_L,MS_D,MS_R,BTN1,NO,  ENT, \
 | 
					           LCTL,VOLD,VOLU,MUTE,NO,  NO,  NO,  MS_L,MS_D,MS_R,BTN1,NO,  ENT, \
 | 
				
			||||||
           LSFT,NO,  NO,  NO,  NO,  BTN3,BTN2,BTN1,FN9, FN10,NO,  RSFT,TRNS, \
 | 
					           LSFT,NO,  NO,  NO,  NO,  BTN3,BTN2,BTN1,FN9, FN10,NO,  RSFT,TRNS, \
 | 
				
			||||||
                LGUI,LALT,          TRNS,               TRNS,TRNS),
 | 
					                LGUI,LALT,          TRNS,               TRNS,TRNS),
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
/* 
 | 
					/*
 | 
				
			||||||
 * HHKB Layout
 | 
					 * HHKB Layout
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#include "keymap_common.h"
 | 
					#include "keymap_common.h"
 | 
				
			||||||
@ -40,7 +40,7 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
 | 
				
			|||||||
     * `-----------------------------------------------------------'
 | 
					     * `-----------------------------------------------------------'
 | 
				
			||||||
     *       |   |     |                       |     |   |
 | 
					     *       |   |     |                       |     |   |
 | 
				
			||||||
     *       `-------------------------------------------'
 | 
					     *       `-------------------------------------------'
 | 
				
			||||||
     */ 
 | 
					     */
 | 
				
			||||||
    KEYMAP(PWR, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, INS, DEL,   \
 | 
					    KEYMAP(PWR, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, INS, DEL,   \
 | 
				
			||||||
           CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS, UP, TRNS, BSPC,      \
 | 
					           CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS, UP, TRNS, BSPC,      \
 | 
				
			||||||
           TRNS,VOLD,VOLU,MUTE,TRNS,TRNS,PAST,PSLS,HOME,PGUP,LEFT,RGHT,PENT,            \
 | 
					           TRNS,VOLD,VOLU,MUTE,TRNS,TRNS,PAST,PSLS,HOME,PGUP,LEFT,RGHT,PENT,            \
 | 
				
			||||||
@ -55,8 +55,41 @@ const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
#ifdef KEYMAP_SECTION_ENABLE
 | 
					#ifdef KEYMAP_SECTION_ENABLE
 | 
				
			||||||
const uint16_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
 | 
					const uint16_t fn_actions[] __attribute__ ((section (".keymap.fn_actions"))) = {
 | 
				
			||||||
 | 
					    [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_A),
 | 
				
			||||||
 | 
					    [14] = ACTION_LAYER_TAP_KEY(2, KC_F),
 | 
				
			||||||
 | 
					    [15] = ACTION_LAYER_TAP_KEY(3, KC_J),
 | 
				
			||||||
 | 
					    [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_ESC),
 | 
				
			||||||
 | 
					    [31] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_BSPACE),
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
const uint16_t fn_actions[] PROGMEM = {
 | 
					const uint16_t fn_actions[] PROGMEM = {
 | 
				
			||||||
#endif
 | 
					    [0]  = ACTION_LAYER_MOMENTARY(1),
 | 
				
			||||||
    [0] = ACTION_LAYER_MOMENTARY(1),
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
@ -132,7 +132,13 @@ uint8_t matrix_scan(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            // NOTE: KEY_STATE keep its state in 20us after KEY_ENABLE.
 | 
					            // NOTE: KEY_STATE keep its state in 20us after KEY_ENABLE.
 | 
				
			||||||
            // This takes 25us or more to make sure KEY_STATE returns to idle state.
 | 
					            // This takes 25us or more to make sure KEY_STATE returns to idle state.
 | 
				
			||||||
 | 
					#ifdef HHKB_JP
 | 
				
			||||||
 | 
					            // Looks like JP needs faster scan due to its twice larger matrix
 | 
				
			||||||
 | 
					            // or it can drop keys in fast key typing
 | 
				
			||||||
 | 
					            _delay_us(30);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
            _delay_us(75);
 | 
					            _delay_us(75);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (matrix[row] ^ matrix_prev[row]) matrix_last_modified = timer_read32();
 | 
					        if (matrix[row] ^ matrix_prev[row]) matrix_last_modified = timer_read32();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,7 @@
 | 
				
			|||||||
TARGET = hhkb_iwrap
 | 
					TARGET = hhkb_iwrap
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -94,10 +94,10 @@ PROGRAM_CMD = $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/iwrap.mk
 | 
					include $(TMK_DIR)/protocol/iwrap.mk
 | 
				
			||||||
# TODO: to be selectable: V-USB, LUFA or PJRC
 | 
					# TODO: to be selectable: V-USB, LUFA or PJRC
 | 
				
			||||||
#include $(TOP_DIR)/protocol/vusb.mk
 | 
					#include $(TMK_DIR)/protocol/vusb.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -7,7 +7,7 @@
 | 
				
			|||||||
TARGET = hhkb_vusb
 | 
					TARGET = hhkb_vusb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -87,11 +87,11 @@ PROGRAM_CMD = $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/vusb.mk
 | 
					include $(TMK_DIR)/protocol/vusb.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
debug-on: EXTRAFLAGS += -DDEBUG
 | 
					debug-on: EXTRAFLAGS += -DDEBUG
 | 
				
			||||||
debug-on: all
 | 
					debug-on: all
 | 
				
			||||||
 | 
				
			|||||||
@ -42,7 +42,7 @@
 | 
				
			|||||||
TARGET = hid_liber_lufa
 | 
					TARGET = hid_liber_lufa
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -119,11 +119,11 @@ COMMAND_ENABLE = yes        # Commands for debug and configuration
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/lufa.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ansi: OPT_DEFS += -DLAYOUT_ANSI
 | 
					ansi: OPT_DEFS += -DLAYOUT_ANSI
 | 
				
			||||||
ansi: all
 | 
					ansi: all
 | 
				
			||||||
 | 
				
			|||||||
@ -42,7 +42,7 @@
 | 
				
			|||||||
TARGET = hid_liber_pjrc
 | 
					TARGET = hid_liber_pjrc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -92,11 +92,11 @@ NKRO_ENABLE = yes           # USB Nkey Rollover - not yet supported in LUFA
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/pjrc.mk
 | 
					include $(TMK_DIR)/protocol/pjrc.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ansi: OPT_DEFS += -DLAYOUT_ANSI
 | 
					ansi: OPT_DEFS += -DLAYOUT_ANSI
 | 
				
			||||||
ansi: all
 | 
					ansi: all
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,7 @@
 | 
				
			|||||||
PROJECT = infinity
 | 
					PROJECT = infinity
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TMK_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
MBED_DIR = $(TMK_DIR)/mbed-sdk
 | 
					MBED_DIR = $(TMK_DIR)/tool/mbed/mbed-sdk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#VPATH += $(MBED_DIR):$(TMK_DIR)
 | 
					#VPATH += $(MBED_DIR):$(TMK_DIR)
 | 
				
			||||||
vpath %.s .:$(MBED_DIR):$(TMK_DIR)
 | 
					vpath %.s .:$(MBED_DIR):$(TMK_DIR)
 | 
				
			||||||
 | 
				
			|||||||
@ -19,29 +19,31 @@ OBJECTS += \
 | 
				
			|||||||
	$(OBJDIR)/mbed-infinity/cmsis_nvic.o \
 | 
						$(OBJDIR)/mbed-infinity/cmsis_nvic.o \
 | 
				
			||||||
	$(OBJDIR)/mbed-infinity/system_MK20D5.o \
 | 
						$(OBJDIR)/mbed-infinity/system_MK20D5.o \
 | 
				
			||||||
	$(OBJDIR)/mbed-infinity/USBHAL_KL25Z.o \
 | 
						$(OBJDIR)/mbed-infinity/USBHAL_KL25Z.o \
 | 
				
			||||||
	$(OBJDIR)/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_GCC_ARM/startup_MK20D5.o \
 | 
						$(OBJDIR)/mbed-infinity/startup_MK20D5.o \
 | 
				
			||||||
	$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/analogin_api.o \
 | 
						$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/analogin_api.o \
 | 
				
			||||||
	$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/gpio_api.o \
 | 
						$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/gpio_api.o \
 | 
				
			||||||
	$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/gpio_irq_api.o \
 | 
						$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/gpio_irq_api.o \
 | 
				
			||||||
	$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/i2c_api.o \
 | 
						$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/i2c_api.o \
 | 
				
			||||||
	$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/pinmap.o \
 | 
						$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/pinmap.o \
 | 
				
			||||||
	$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/port_api.o \
 | 
						$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/port_api.o \
 | 
				
			||||||
	$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/pwmout_api.o \
 | 
						$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/pwmout_api.o \
 | 
				
			||||||
	$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/rtc_api.o \
 | 
						$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/rtc_api.o \
 | 
				
			||||||
	$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/serial_api.o \
 | 
						$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/serial_api.o \
 | 
				
			||||||
	$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/sleep.o \
 | 
						$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/sleep.o \
 | 
				
			||||||
	$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/spi_api.o \
 | 
						$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/spi_api.o \
 | 
				
			||||||
	$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M/us_ticker.o
 | 
						$(OBJDIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/us_ticker.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
INCLUDE_PATHS += \
 | 
					INCLUDE_PATHS += \
 | 
				
			||||||
	-Imbed \
 | 
						-Imbed \
 | 
				
			||||||
	-I$(MBED_DIR)/libraries/mbed/targets \
 | 
						-I$(MBED_DIR)/libraries/mbed/targets \
 | 
				
			||||||
	-I$(MBED_DIR)/libraries/mbed/targets/cmsis \
 | 
						-I$(MBED_DIR)/libraries/mbed/targets/cmsis \
 | 
				
			||||||
	-I$(MBED_DIR)/libraries/mbed/targets/cmsis/TARGET_Freescale \
 | 
						-I$(MBED_DIR)/libraries/mbed/targets/cmsis/TARGET_Freescale \
 | 
				
			||||||
	-I$(MBED_DIR)/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M \
 | 
						-I$(MBED_DIR)/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20XX \
 | 
				
			||||||
	-I$(MBED_DIR)/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_GCC_ARM \
 | 
						-I$(MBED_DIR)/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20XX/TARGET_K20D50M \
 | 
				
			||||||
 | 
						-I$(MBED_DIR)/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20XX/TARGET_K20D50M/TOOLCHAIN_GCC_ARM \
 | 
				
			||||||
	-I$(MBED_DIR)/libraries/mbed/targets/hal \
 | 
						-I$(MBED_DIR)/libraries/mbed/targets/hal \
 | 
				
			||||||
	-I$(MBED_DIR)/libraries/mbed/targets/hal/TARGET_Freescale \
 | 
						-I$(MBED_DIR)/libraries/mbed/targets/hal/TARGET_Freescale \
 | 
				
			||||||
	-I$(MBED_DIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20D50M
 | 
						-I$(MBED_DIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX \
 | 
				
			||||||
 | 
						-I$(MBED_DIR)/libraries/mbed/targets/hal/TARGET_Freescale/TARGET_K20XX/TARGET_K20D50M
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LINKER_SCRIPT = mbed-infinity/infinity.ld
 | 
					LINKER_SCRIPT = mbed-infinity/infinity.ld
 | 
				
			||||||
 | 
				
			|||||||
@ -37,3 +37,47 @@ Clock enable:
 | 
				
			|||||||
    SIM_SCGC4[USBOTG] = 1
 | 
					    SIM_SCGC4[USBOTG] = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Infinity bootloader change
 | 
				
			||||||
 | 
					==========================
 | 
				
			||||||
 | 
					After @2c7542e(2015/01) Infinity bootloader doesn't disable watchdog timer and keyboard firmware has to do it itself.  mbed disables watchdog in startup sequence but unfortunately timer is timed out bofore that.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					We have to do that in earlier phase of mbed startup sequence.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mbed starup sequence files:
 | 
				
			||||||
 | 
					mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_GCC_ARM/startup_M20D5.s
 | 
				
			||||||
 | 
					mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/system_MK20D5.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Infinity booloader change commit:
 | 
				
			||||||
 | 
					https://github.com/kiibohd/controller/commit/2c7542e2e7f0b8a99edf563dc53164fe1a439483
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					discussion:
 | 
				
			||||||
 | 
					https://geekhack.org/index.php?topic=41989.msg1686616#msg1686616
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WORKAROUND
 | 
				
			||||||
 | 
					----------
 | 
				
			||||||
 | 
					Call SystemInit early in Reset_Handler.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$ diff -u ../../mbed-sdk/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_GCC_ARM/startup_MK20D5.s mbed-infinity
 | 
				
			||||||
 | 
					--- ../../mbed-sdk/libraries/mbed/targets/cmsis/TARGET_Freescale/TARGET_K20D50M/TOOLCHAIN_GCC_ARM/startup_MK20D5.s      2015-03-22 10:33:22.779866000 +0900
 | 
				
			||||||
 | 
					+++ mbed-infinity/startup_MK20D5.s      2015-03-22 10:32:56.483866000 +0900
 | 
				
			||||||
 | 
					@@ -147,6 +147,8 @@
 | 
				
			||||||
 | 
					  *      __etext: End of code section, i.e., begin of data sections to copy from.
 | 
				
			||||||
 | 
					  *      __data_start__/__data_end__: RAM address range that data should be
 | 
				
			||||||
 | 
					  *      copied to. Both must be aligned to 4 bytes boundary.  */
 | 
				
			||||||
 | 
					+    ldr    r0, =SystemInit
 | 
				
			||||||
 | 
					+    blx    r0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     ldr    r1, =__etext
 | 
				
			||||||
 | 
					     ldr    r2, =__data_start__
 | 
				
			||||||
 | 
					@@ -161,8 +163,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 .Lflash_to_ram_loop_end:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-    ldr    r0, =SystemInit
 | 
				
			||||||
 | 
					-    blx    r0
 | 
				
			||||||
 | 
					     ldr    r0, =_start
 | 
				
			||||||
 | 
					     bx    r0
 | 
				
			||||||
 | 
					     .pool
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										259
									
								
								keyboard/infinity/mbed-infinity/startup_MK20D5.s
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										259
									
								
								keyboard/infinity/mbed-infinity/startup_MK20D5.s
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,259 @@
 | 
				
			|||||||
 | 
					/* File: startup_MK20D5.s
 | 
				
			||||||
 | 
					 * Purpose: startup file for Cortex-M4 devices. Should use with
 | 
				
			||||||
 | 
					 *   GCC for ARM Embedded Processors
 | 
				
			||||||
 | 
					 * Version: V1.3
 | 
				
			||||||
 | 
					 * Date: 08 Feb 2012
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (c) 2012, ARM Limited
 | 
				
			||||||
 | 
					 * All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					 * modification, are permitted provided that the following conditions are met:
 | 
				
			||||||
 | 
					    * Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					      notice, this list of conditions and the following disclaimer.
 | 
				
			||||||
 | 
					    * Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					      notice, this list of conditions and the following disclaimer in the
 | 
				
			||||||
 | 
					      documentation and/or other materials provided with the distribution.
 | 
				
			||||||
 | 
					    * Neither the name of the ARM Limited nor the
 | 
				
			||||||
 | 
					      names of its contributors may be used to endorse or promote products
 | 
				
			||||||
 | 
					      derived from this software without specific prior written permission.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 | 
				
			||||||
 | 
					 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | 
				
			||||||
 | 
					 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
				
			||||||
 | 
					 * DISCLAIMED. IN NO EVENT SHALL ARM LIMITED BE LIABLE FOR ANY
 | 
				
			||||||
 | 
					 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | 
				
			||||||
 | 
					 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
				
			||||||
 | 
					 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 | 
				
			||||||
 | 
					 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
				
			||||||
 | 
					 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
				
			||||||
 | 
					 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					    .syntax unified
 | 
				
			||||||
 | 
					    .arch armv7-m
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .section .stack
 | 
				
			||||||
 | 
					    .align 3
 | 
				
			||||||
 | 
					#ifdef __STACK_SIZE
 | 
				
			||||||
 | 
					    .equ    Stack_Size, __STACK_SIZE
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    .equ    Stack_Size, 0x400
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    .globl    __StackTop
 | 
				
			||||||
 | 
					    .globl    __StackLimit
 | 
				
			||||||
 | 
					__StackLimit:
 | 
				
			||||||
 | 
					    .space    Stack_Size
 | 
				
			||||||
 | 
					    .size __StackLimit, . - __StackLimit
 | 
				
			||||||
 | 
					__StackTop:
 | 
				
			||||||
 | 
					    .size __StackTop, . - __StackTop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .section .heap
 | 
				
			||||||
 | 
					    .align 3
 | 
				
			||||||
 | 
					#ifdef __HEAP_SIZE
 | 
				
			||||||
 | 
					    .equ    Heap_Size, __HEAP_SIZE
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    .equ    Heap_Size, 0xC00
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    .globl    __HeapBase
 | 
				
			||||||
 | 
					    .globl    __HeapLimit
 | 
				
			||||||
 | 
					__HeapBase:
 | 
				
			||||||
 | 
					    .if    Heap_Size
 | 
				
			||||||
 | 
					    .space    Heap_Size
 | 
				
			||||||
 | 
					    .endif
 | 
				
			||||||
 | 
					    .size __HeapBase, . - __HeapBase
 | 
				
			||||||
 | 
					__HeapLimit:
 | 
				
			||||||
 | 
					    .size __HeapLimit, . - __HeapLimit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .section .isr_vector
 | 
				
			||||||
 | 
					    .align 2
 | 
				
			||||||
 | 
					    .globl __isr_vector
 | 
				
			||||||
 | 
					__isr_vector:
 | 
				
			||||||
 | 
					    .long    __StackTop            /* Top of Stack */
 | 
				
			||||||
 | 
					    .long    Reset_Handler         /* Reset Handler */
 | 
				
			||||||
 | 
					    .long    NMI_Handler           /* NMI Handler */
 | 
				
			||||||
 | 
					    .long    HardFault_Handler     /* Hard Fault Handler */
 | 
				
			||||||
 | 
					    .long    MemManage_Handler     /* MPU Fault Handler */
 | 
				
			||||||
 | 
					    .long    BusFault_Handler      /* Bus Fault Handler */
 | 
				
			||||||
 | 
					    .long    UsageFault_Handler    /* Usage Fault Handler */
 | 
				
			||||||
 | 
					    .long    0                     /* Reserved */
 | 
				
			||||||
 | 
					    .long    0                     /* Reserved */
 | 
				
			||||||
 | 
					    .long    0                     /* Reserved */
 | 
				
			||||||
 | 
					    .long    0                     /* Reserved */
 | 
				
			||||||
 | 
					    .long    SVC_Handler           /* SVCall Handler */
 | 
				
			||||||
 | 
					    .long    DebugMon_Handler      /* Debug Monitor Handler */
 | 
				
			||||||
 | 
					    .long    0                     /* Reserved */
 | 
				
			||||||
 | 
					    .long    PendSV_Handler        /* PendSV Handler */
 | 
				
			||||||
 | 
					    .long    SysTick_Handler       /* SysTick Handler */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* External interrupts */
 | 
				
			||||||
 | 
					    .long    DMA0_IRQHandler        /*  0:  Watchdog Timer            */
 | 
				
			||||||
 | 
					    .long    DMA1_IRQHandler        /*  1:  Real Time Clock           */
 | 
				
			||||||
 | 
					    .long    DMA2_IRQHandler       /*  2:  Timer0 / Timer1           */
 | 
				
			||||||
 | 
					    .long    DMA3_IRQHandler       /*  3:  Timer2 / Timer3           */
 | 
				
			||||||
 | 
					    .long    DMA_Error_IRQHandler       /*  4:  MCIa                      */
 | 
				
			||||||
 | 
					    .long    0       /*  5:  MCIb                      */
 | 
				
			||||||
 | 
					    .long    FTFL_IRQHandler      /*  6:  UART0 - DUT FPGA          */
 | 
				
			||||||
 | 
					    .long    Read_Collision_IRQHandler      /*  7:  UART1 - DUT FPGA          */
 | 
				
			||||||
 | 
					    .long    LVD_LVW_IRQHandler      /*  8:  UART2 - DUT FPGA          */
 | 
				
			||||||
 | 
					    .long    LLW_IRQHandler      /*  9:  UART4 - not connected     */
 | 
				
			||||||
 | 
					    .long    Watchdog_IRQHandler       /* 10: AACI / AC97                */
 | 
				
			||||||
 | 
					    .long    I2C0_IRQHandler       /* 11: CLCD Combined Interrupt    */
 | 
				
			||||||
 | 
					    .long    SPI0_IRQHandler       /* 12: Ethernet                   */
 | 
				
			||||||
 | 
					    .long    I2S0_Tx_IRQHandler      /* 13: USB Device                 */
 | 
				
			||||||
 | 
					    .long    I2S0_Rx_IRQHandler      /* 14: USB Host Controller        */
 | 
				
			||||||
 | 
					    .long    UART0_LON_IRQHandler      /* 15: Character LCD              */
 | 
				
			||||||
 | 
					    .long    UART0_RX_TX_IRQHandler    /* 16: Flexray                    */
 | 
				
			||||||
 | 
					    .long    UART0_ERR_IRQHandler        /* 17: CAN                        */
 | 
				
			||||||
 | 
					    .long    UART1_RX_TX_IRQHandler        /* 18: LIN                        */
 | 
				
			||||||
 | 
					    .long    UART1_ERR_IRQHandler        /* 19: I2C ADC/DAC                */
 | 
				
			||||||
 | 
					    .long    UART2_RX_TX_IRQHandler                     /* 20: Reserved                   */
 | 
				
			||||||
 | 
					    .long    UART2_ERR_IRQHandler                     /* 21: Reserved                   */
 | 
				
			||||||
 | 
					    .long    ADC0_IRQHandler                     /* 22: Reserved                   */
 | 
				
			||||||
 | 
					    .long    CMP0_IRQHandler                     /* 23: Reserved                   */
 | 
				
			||||||
 | 
					    .long    CMP1_IRQHandler                     /* 24: Reserved                   */
 | 
				
			||||||
 | 
					    .long    FTM0_IRQHandler                     /* 25: Reserved                   */
 | 
				
			||||||
 | 
					    .long    FTM1_IRQHandler                     /* 26: Reserved                   */
 | 
				
			||||||
 | 
					    .long    CMT_IRQHandler                     /* 27: Reserved                   */
 | 
				
			||||||
 | 
					    .long    RTC_IRQHandler   /* 28: Reserved - CPU FPGA CLCD   */
 | 
				
			||||||
 | 
					    .long    RTC_Seconds_IRQHandler                     /* 29: Reserved - CPU FPGA        */
 | 
				
			||||||
 | 
					    .long    PIT0_IRQHandler      /* 30: UART3    - CPU FPGA        */
 | 
				
			||||||
 | 
					    .long    PIT1_IRQHandler        /* 31: SPI Touchscreen - CPU FPGA */
 | 
				
			||||||
 | 
					    .long    PIT2_IRQHandler
 | 
				
			||||||
 | 
					    .long    PIT3_IRQHandler
 | 
				
			||||||
 | 
					    .long    PDB0_IRQHandler
 | 
				
			||||||
 | 
					    .long    USB0_IRQHandler
 | 
				
			||||||
 | 
					    .long    USBDCD_IRQHandler
 | 
				
			||||||
 | 
					    .long    TSI0_IRQHandler
 | 
				
			||||||
 | 
					    .long    MCG_IRQHandler
 | 
				
			||||||
 | 
					    .long    LPTimer_IRQHandler
 | 
				
			||||||
 | 
					    .long    PORTA_IRQHandler
 | 
				
			||||||
 | 
					    .long    PORTB_IRQHandler
 | 
				
			||||||
 | 
					    .long    PORTC_IRQHandler
 | 
				
			||||||
 | 
					    .long    PORTD_IRQHandler
 | 
				
			||||||
 | 
					    .long    PORTE_IRQHandler
 | 
				
			||||||
 | 
					    .long    SWI_IRQHandler
 | 
				
			||||||
 | 
					    .size    __isr_vector, . - __isr_vector
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .section .text.Reset_Handler
 | 
				
			||||||
 | 
					    .thumb
 | 
				
			||||||
 | 
					    .thumb_func
 | 
				
			||||||
 | 
					    .align 2
 | 
				
			||||||
 | 
					    .globl    Reset_Handler
 | 
				
			||||||
 | 
					    .type    Reset_Handler, %function
 | 
				
			||||||
 | 
					Reset_Handler:
 | 
				
			||||||
 | 
					/*     Loop to copy data from read only memory to RAM. The ranges
 | 
				
			||||||
 | 
					 *      of copy from/to are specified by following symbols evaluated in
 | 
				
			||||||
 | 
					 *      linker script.
 | 
				
			||||||
 | 
					 *      __etext: End of code section, i.e., begin of data sections to copy from.
 | 
				
			||||||
 | 
					 *      __data_start__/__data_end__: RAM address range that data should be
 | 
				
			||||||
 | 
					 *      copied to. Both must be aligned to 4 bytes boundary.  */
 | 
				
			||||||
 | 
					    ldr    r0, =SystemInit
 | 
				
			||||||
 | 
					    blx    r0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ldr    r1, =__etext
 | 
				
			||||||
 | 
					    ldr    r2, =__data_start__
 | 
				
			||||||
 | 
					    ldr    r3, =__data_end__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.Lflash_to_ram_loop:
 | 
				
			||||||
 | 
					    cmp     r2, r3
 | 
				
			||||||
 | 
					    ittt    lt
 | 
				
			||||||
 | 
					    ldrlt   r0, [r1], #4
 | 
				
			||||||
 | 
					    strlt   r0, [r2], #4
 | 
				
			||||||
 | 
					    blt    .Lflash_to_ram_loop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.Lflash_to_ram_loop_end:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ldr    r0, =_start
 | 
				
			||||||
 | 
					    bx    r0
 | 
				
			||||||
 | 
					    .pool
 | 
				
			||||||
 | 
					    .size Reset_Handler, . - Reset_Handler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .text
 | 
				
			||||||
 | 
					/*    Macro to define default handlers. Default handler
 | 
				
			||||||
 | 
					 *    will be weak symbol and just dead loops. They can be
 | 
				
			||||||
 | 
					 *    overwritten by other handlers */
 | 
				
			||||||
 | 
					    .macro    def_default_handler    handler_name
 | 
				
			||||||
 | 
					    .align 1
 | 
				
			||||||
 | 
					    .thumb_func
 | 
				
			||||||
 | 
					    .weak    \handler_name
 | 
				
			||||||
 | 
					    .type    \handler_name, %function
 | 
				
			||||||
 | 
					\handler_name :
 | 
				
			||||||
 | 
					    b    .
 | 
				
			||||||
 | 
					    .size    \handler_name, . - \handler_name
 | 
				
			||||||
 | 
					    .endm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def_default_handler    NMI_Handler
 | 
				
			||||||
 | 
					    def_default_handler    HardFault_Handler
 | 
				
			||||||
 | 
					    def_default_handler    MemManage_Handler
 | 
				
			||||||
 | 
					    def_default_handler    BusFault_Handler
 | 
				
			||||||
 | 
					    def_default_handler    UsageFault_Handler
 | 
				
			||||||
 | 
					    def_default_handler    SVC_Handler
 | 
				
			||||||
 | 
					    def_default_handler    DebugMon_Handler
 | 
				
			||||||
 | 
					    def_default_handler    PendSV_Handler
 | 
				
			||||||
 | 
					    def_default_handler    SysTick_Handler
 | 
				
			||||||
 | 
					    def_default_handler    Default_Handler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .macro    def_irq_default_handler    handler_name
 | 
				
			||||||
 | 
					    .weak     \handler_name
 | 
				
			||||||
 | 
					    .set      \handler_name, Default_Handler
 | 
				
			||||||
 | 
					    .endm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def_irq_default_handler    DMA0_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    DMA1_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    DMA2_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    DMA3_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    DMA_Error_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    FTFL_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    Read_Collision_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    LVD_LVW_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    LLW_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    Watchdog_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    I2C0_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    SPI0_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    I2S0_Tx_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    I2S0_Rx_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    UART0_LON_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    UART0_RX_TX_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    UART0_ERR_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    UART1_RX_TX_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    UART1_ERR_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    UART2_RX_TX_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    UART2_ERR_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    ADC0_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    CMP0_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    CMP1_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    FTM0_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    FTM1_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    CMT_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    RTC_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    RTC_Seconds_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    PIT0_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    PIT1_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    PIT2_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    PIT3_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    PDB0_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    USB0_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    USBDCD_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    TSI0_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    MCG_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    LPTimer_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    PORTA_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    PORTB_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    PORTC_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    PORTD_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    PORTE_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    SWI_IRQHandler
 | 
				
			||||||
 | 
					    def_irq_default_handler    DEF_IRQHandler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Flash protection region, placed at 0x400 */
 | 
				
			||||||
 | 
					    .text
 | 
				
			||||||
 | 
					    .thumb
 | 
				
			||||||
 | 
					    .align 2
 | 
				
			||||||
 | 
					    .section .kinetis_flash_config_field,"a",%progbits
 | 
				
			||||||
 | 
					kinetis_flash_config:
 | 
				
			||||||
 | 
					    .long 0xffffffff
 | 
				
			||||||
 | 
					    .long 0xffffffff
 | 
				
			||||||
 | 
					    .long 0xffffffff
 | 
				
			||||||
 | 
					    .long 0xfffffffe
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .end
 | 
				
			||||||
@ -2,7 +2,7 @@ OpenOCD config files for Kinetis
 | 
				
			|||||||
================================
 | 
					================================
 | 
				
			||||||
http://nemuisan.blog.bai.ne.jp/?eid=192848#OPENOCD
 | 
					http://nemuisan.blog.bai.ne.jp/?eid=192848#OPENOCD
 | 
				
			||||||
 | 
					
 | 
				
			||||||
These are needed for SWD debug and programing bootloader. To flash keyboard firmware use 'dfu-util'.
 | 
					These are needed for debug and programing bootloader with SWD. To flash keyboard firmware use 'dfu-util'.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Flash security of Freescale kinetis
 | 
					Flash security of Freescale kinetis
 | 
				
			||||||
-----------------------------------
 | 
					-----------------------------------
 | 
				
			||||||
@ -21,5 +21,83 @@ Flash bootloader:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Infinity SWD pinout
 | 
					Infinity SWD pinout
 | 
				
			||||||
-------------------
 | 
					-------------------
 | 
				
			||||||
SWD pins are placed next to reset button; SWD_CLK, SWD_DIO, GND, VCC from top.
 | 
					SWD pins are placed next to reset button; SWD_CLK, SWD_DIO, GND, 5V from top.
 | 
				
			||||||
Note that RESET is also needed to get full control with OpenOCD.
 | 
					Note that RESET is also needed to get full control with OpenOCD.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					             --------
 | 
				
			||||||
 | 
					            | ___  o |CLK
 | 
				
			||||||
 | 
					            ||RST| o |DIO
 | 
				
			||||||
 | 
					            ||BTN| o |GND
 | 
				
			||||||
 | 
					            | ---  o |5V
 | 
				
			||||||
 | 
					             --------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Kinetis sercure state
 | 
				
			||||||
 | 
					----------------------
 | 
				
			||||||
 | 
					openocd 0.9.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Warn : *********** ATTENTION! ATTENTION! ATTENTION! ATTENTION! **********
 | 
				
			||||||
 | 
					Warn : ****                                                          ****
 | 
				
			||||||
 | 
					Warn : **** Your Kinetis MCU is in secured state, which means that,  ****
 | 
				
			||||||
 | 
					Warn : **** with exception for very basic communication, JTAG/SWD    ****
 | 
				
			||||||
 | 
					Warn : **** interface will NOT work. In order to restore its         ****
 | 
				
			||||||
 | 
					Warn : **** functionality please issue 'kinetis mdm mass_erase'      ****
 | 
				
			||||||
 | 
					Warn : **** command, power cycle the MCU and restart OpenOCD.        ****
 | 
				
			||||||
 | 
					Warn : ****                                                          ****
 | 
				
			||||||
 | 
					Warn : *********** ATTENTION! ATTENTION! ATTENTION! ATTENTION! **********
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Info : MDM: Chip is unsecured. Continuing.
 | 
				
			||||||
 | 
					target state: halted
 | 
				
			||||||
 | 
					target halted due to debug-request, current mode: Thread
 | 
				
			||||||
 | 
					xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc
 | 
				
			||||||
 | 
					auto erase enabled
 | 
				
			||||||
 | 
					Info : Probing flash info for bank 0
 | 
				
			||||||
 | 
					Warn : flash configuration field erased, please reset the device
 | 
				
			||||||
 | 
					wrote 4096 bytes from file kiibohd_bootloader.bin in 2.442562s (1.638 KiB/s)
 | 
				
			||||||
 | 
					Info : MDM: Chip is unsecured. Continuing.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Open On-Chip Debugger 0.9.0-dev-00346-g3e1dfdc-dirty (2015-03-21-20:41)
 | 
				
			||||||
 | 
					Licensed under GNU GPL v2
 | 
				
			||||||
 | 
					For bug reports, read
 | 
				
			||||||
 | 
					        http://openocd.sourceforge.net/doc/doxygen/bugs.html
 | 
				
			||||||
 | 
					Info : only one transport option; autoselect 'cmsis-dap'
 | 
				
			||||||
 | 
					Kinetis MUST need Hardware SRST Control to Recover Secure-State!
 | 
				
			||||||
 | 
					adapter_nsrst_delay: 200
 | 
				
			||||||
 | 
					srst_only separate srst_gates_jtag srst_open_drain connect_deassert_srst
 | 
				
			||||||
 | 
					Info : add flash_bank kinetis k20.pflash
 | 
				
			||||||
 | 
					cortex_m reset_config sysresetreq
 | 
				
			||||||
 | 
					adapter speed: 1000 kHz
 | 
				
			||||||
 | 
					srst_only separate srst_nogate srst_open_drain connect_assert_srst
 | 
				
			||||||
 | 
					Info : CMSIS-DAP: SWD  Supported
 | 
				
			||||||
 | 
					Info : CMSIS-DAP: Interface Initialised (SWD)
 | 
				
			||||||
 | 
					Info : CMSIS-DAP: FW Version = 1.0
 | 
				
			||||||
 | 
					Info : SWCLK/TCK = 0 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1
 | 
				
			||||||
 | 
					Info : Connecting under reset
 | 
				
			||||||
 | 
					Info : DAP_SWJ Sequence (reset: 50+ '1' followed by 0)
 | 
				
			||||||
 | 
					Info : CMSIS-DAP: Interface ready
 | 
				
			||||||
 | 
					Info : clock speed 1000 kHz
 | 
				
			||||||
 | 
					Info : IDCODE 0x2ba01477
 | 
				
			||||||
 | 
					Warn : Adapter returned success despite SSTICKYERR being set.
 | 
				
			||||||
 | 
					Warn : Adapter returned success despite SSTICKYERR being set.
 | 
				
			||||||
 | 
					Warn : Adapter returned success despite SSTICKYERR being set.
 | 
				
			||||||
 | 
					Warn : Adapter returned success despite SSTICKYERR being set.
 | 
				
			||||||
 | 
					Info : k20.cpu: hardware has 6 breakpoints, 4 watchpoints
 | 
				
			||||||
 | 
					Info : MDM: Chip is unsecured. Continuing.
 | 
				
			||||||
 | 
					Info : MDM: Chip is unsecured. Continuing.
 | 
				
			||||||
 | 
					target state: halted
 | 
				
			||||||
 | 
					target halted due to debug-request, current mode: Thread
 | 
				
			||||||
 | 
					xPSR: 0x01000000 pc: 0xfffffffe msp: 0xfffffffc
 | 
				
			||||||
 | 
					auto erase enabled
 | 
				
			||||||
 | 
					Info : Probing flash info for bank 0
 | 
				
			||||||
 | 
					Warn : flash configuration field erased, please reset the device
 | 
				
			||||||
 | 
					wrote 4096 bytes from file kiibohd_bootloader.bin in 2.446902s (1.635 KiB/s)
 | 
				
			||||||
 | 
					Info : MDM: Chip is unsecured. Continuing.
 | 
				
			||||||
 | 
					Info : Halt timed out, wake up GDB.
 | 
				
			||||||
 | 
					Error: timed out while waiting for target halted
 | 
				
			||||||
 | 
					Runtime Error: tool/k20dx32_flash.cfg:81:
 | 
				
			||||||
 | 
					in procedure 'mt_flash'
 | 
				
			||||||
 | 
					in procedure 'halt' called at file "tool/k20dx32_flash.cfg", line 81
 | 
				
			||||||
 | 
				
			|||||||
@ -2,6 +2,22 @@
 | 
				
			|||||||
# Nemuisan's Special for MK20DN32VFT5,MK20DX32VFT5,MK10DN32VFT5,MK10DX32VFT5
 | 
					# Nemuisan's Special for MK20DN32VFT5,MK20DX32VFT5,MK10DN32VFT5,MK10DX32VFT5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 0.8.0 has no these procs
 | 
				
			||||||
 | 
					proc using_jtag {} {
 | 
				
			||||||
 | 
					        set _TRANSPORT [ transport select ]
 | 
				
			||||||
 | 
					        expr { [ string first "jtag" $_TRANSPORT ] != -1 }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					proc using_swd {} {
 | 
				
			||||||
 | 
					        set _TRANSPORT [ transport select ]
 | 
				
			||||||
 | 
					        expr { [ string first "swd" $_TRANSPORT ] != -1 }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					proc using_hla {} {
 | 
				
			||||||
 | 
					        set _TRANSPORT [ transport select ]
 | 
				
			||||||
 | 
					        expr { [ string first "hla" $_TRANSPORT ] != -1 }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
source [find target/swj-dp.tcl]
 | 
					source [find target/swj-dp.tcl]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if { [info exists CHIPNAME] } {
 | 
					if { [info exists CHIPNAME] } {
 | 
				
			||||||
@ -109,7 +125,6 @@ proc eraser {} {
 | 
				
			|||||||
	shutdown
 | 
						shutdown
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
#debug_level 3
 | 
					#debug_level 3
 | 
				
			||||||
# HLA doesn't have cortex_m commands 
 | 
					# HLA doesn't have cortex_m commands 
 | 
				
			||||||
if {![using_hla]} {
 | 
					if {![using_hla]} {
 | 
				
			||||||
 | 
				
			|||||||
@ -42,7 +42,7 @@
 | 
				
			|||||||
TARGET = kittenpaw_lufa
 | 
					TARGET = kittenpaw_lufa
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -110,8 +110,8 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/lufa.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -42,7 +42,7 @@
 | 
				
			|||||||
TARGET = kmac_lufa
 | 
					TARGET = kmac_lufa
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -117,11 +117,11 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/lufa.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
winkey: OPT_DEFS += -DLAYOUT_WINKEY
 | 
					winkey: OPT_DEFS += -DLAYOUT_WINKEY
 | 
				
			||||||
winkey: all
 | 
					winkey: all
 | 
				
			||||||
 | 
				
			|||||||
@ -42,7 +42,7 @@
 | 
				
			|||||||
TARGET = kmac_pjrc
 | 
					TARGET = kmac_pjrc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -88,11 +88,11 @@ BACKLIGHT_ENABLE = yes  # Enable keyboard backlight functionality
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/pjrc.mk
 | 
					include $(TMK_DIR)/protocol/pjrc.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
winkey: OPT_DEFS += -DLAYOUT_WINKEY
 | 
					winkey: OPT_DEFS += -DLAYOUT_WINKEY
 | 
				
			||||||
winkey: all
 | 
					winkey: all
 | 
				
			||||||
 | 
				
			|||||||
@ -42,7 +42,7 @@
 | 
				
			|||||||
TARGET = lightpad_lufa
 | 
					TARGET = lightpad_lufa
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -110,8 +110,8 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/lufa.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -42,7 +42,7 @@
 | 
				
			|||||||
TARGET = lightsaber_lufa
 | 
					TARGET = lightsaber_lufa
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -116,11 +116,11 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/lufa.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
winkey: OPT_DEFS += -DLAYOUT_WINKEY
 | 
					winkey: OPT_DEFS += -DLAYOUT_WINKEY
 | 
				
			||||||
winkey: all
 | 
					winkey: all
 | 
				
			||||||
 | 
				
			|||||||
@ -42,7 +42,7 @@
 | 
				
			|||||||
TARGET = lightsaber_pjrc
 | 
					TARGET = lightsaber_pjrc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -84,11 +84,11 @@ BACKLIGHT_ENABLE = yes  # Enable keyboard backlight functionality
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/pjrc.mk
 | 
					include $(TMK_DIR)/protocol/pjrc.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
winkey: OPT_DEFS += -DLAYOUT_WINKEY
 | 
					winkey: OPT_DEFS += -DLAYOUT_WINKEY
 | 
				
			||||||
winkey: all
 | 
					winkey: all
 | 
				
			||||||
 | 
				
			|||||||
@ -42,7 +42,7 @@
 | 
				
			|||||||
TARGET = macway_lufa
 | 
					TARGET = macway_lufa
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -114,8 +114,8 @@ COMMAND_ENABLE = yes    # Commands for debug and configuration
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/lufa.mk
 | 
					include $(TMK_DIR)/protocol/lufa.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -42,7 +42,7 @@
 | 
				
			|||||||
TARGET = macway_pjrc
 | 
					TARGET = macway_pjrc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory common source filess exist
 | 
					# Directory common source filess exist
 | 
				
			||||||
TOP_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Directory keyboard dependent files exist
 | 
					# Directory keyboard dependent files exist
 | 
				
			||||||
TARGET_DIR = .
 | 
					TARGET_DIR = .
 | 
				
			||||||
@ -90,8 +90,8 @@ PROGRAM_CMD = teensy_loader_cli -mmcu=$(MCU) -w -v $(TARGET).hex
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Search Path
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TMK_DIR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include $(TOP_DIR)/protocol/pjrc.mk
 | 
					include $(TMK_DIR)/protocol/pjrc.mk
 | 
				
			||||||
include $(TOP_DIR)/common.mk
 | 
					include $(TMK_DIR)/common.mk
 | 
				
			||||||
include $(TOP_DIR)/rules.mk
 | 
					include $(TMK_DIR)/rules.mk
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
PROJECT = mbed_onekey
 | 
					PROJECT = mbed_onekey
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TMK_DIR = ../..
 | 
					TMK_DIR = ../../tmk_core
 | 
				
			||||||
MBED_DIR = $(TMK_DIR)/mbed-sdk
 | 
					MBED_DIR = $(TMK_DIR)/mbed-sdk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#VPATH += $(MBED_DIR):$(TMK_DIR)
 | 
					#VPATH += $(MBED_DIR):$(TMK_DIR)
 | 
				
			||||||
 | 
				
			|||||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user