Merge remote-tracking branch 'upstream/master'

# Conflicts:
#	keyboards/planck/keymaps/dbroqua/keymap.c
pull/659/head
dbroqua 8 years ago
commit e65252d591

93
.gitattributes vendored

@ -0,0 +1,93 @@
# auto for anything unspecified
* text=auto
# sources
*.c text
*.cc text
*.cxx text
*.cpp text
*.c++ text
*.hpp text
*.h text
*.h++ text
*.hh text
*.bat text
*.coffee text
*.css text
*.htm text
*.html text
*.inc text
*.ini text
*.js text
*.jsx text
*.json text
*.less text
*.php text
*.pl text
*.py text
*.rb text
*.sass text
*.scm text
*.scss text
*.sh text
*.sql text
*.styl text
*.ts text
*.xml text
*.xhtml text
# make files (need to always use lf for compatibility with Windows 10 bash)
Makefile eol=lf
*.mk eol=lf
# make files (need to always use lf for compatibility with Windows 10 bash)
*.sh eol=lf
# documentation
*.markdown text
*.md text
*.mdwn text
*.mdown text
*.mkd text
*.mkdn text
*.mdtxt text
*.mdtext text
*.txt text
AUTHORS text
CHANGELOG text
CHANGES text
CONTRIBUTING text
COPYING text
INSTALL text
license text
LICENSE text
NEWS text
readme text
*README* text
TODO text
GRAPHICS
*.ai binary
*.bmp binary
*.eps binary
*.gif binary
*.ico binary
*.jng binary
*.jp2 binary
*.jpg binary
*.jpeg binary
*.jpx binary
*.jxr binary
*.pdf binary
*.png binary
*.psb binary
*.psd binary
*.svg text
*.svgz binary
*.tif binary
*.tiff binary
*.wbmp binary
*.webp binary
# hex files
*.hex binary

@ -455,6 +455,35 @@ Turn the backlight on and off without changing level.
### 2.6 Swap-Hands Action
The swap-hands action allows support for one-handed keyboards without requiring a separate layer. Set `ONEHAND_ENABLE` in the Makefile and define a `hand_swap_config` entry in your keymap. Now whenever the `ACTION_SWAP_HANDS` command key is pressed the keyboard is mirrored. For instance, to type "Hello, World" on QWERTY you would type `^Ge^s^s^w^c W^wr^sd`
### 2.6.1 Configuration
The configuration table is a simple 2-dimensional array to map from column/row to new column/row. Example `hand_swap_config` for Planck:
```
const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
{{11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}},
{{11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}},
{{11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}},
{{11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
};
```
Note that the array indices are reversed same as the matrix and the values are of type `keypos_t` which is `{col, row}` and all values are zero-based. In the example above, `hand_swap_config[2][4]` (third row, fifth column) would return {7, 2} (third row, eighth column).
### 2.6.2 Advanced Swap Commands
- **`ACTION_SWAP_HANDS()`** Swaps hands when pressed, returns to normal when released (momentary).
- **`ACTION_SWAP_HANDS_TOGGLE()`** Toggles swap on and off with every keypress.
- **`ACTION_SWAP_HANDS_TAP_TOGGLE()`** Toggles with a tap; momentary when held.
- **`ACTION_SWAP_HANDS_TAP_KEY(key)`** Sends `key` with a tap; momentary swap when held.
- **`ACTION_SWAP_HANDS_ON_OFF()`** Alias for `ACTION_SWAP_HANDS()`
- **`ACTION_SWAP_HANDS_OFF_ON()`** Momentarily turns off swap.
- **`ACTION_SWAP_HANDS_ON()`** Turns on swapping and leaves it on.
- **`ACTION_SWAP_HANDS_OFF()`** Turn off swapping and leaves it off. Good for returning to a known state.
## 3. Layer switching Example ## 3. Layer switching Example
There are some ways to switch layer with 'Layer' actions. There are some ways to switch layer with 'Layer' actions.

@ -0,0 +1,70 @@
# MCU name
#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
# This will define a symbol, F_CPU, in all source code files equal to the
# processor frequency in Hz. You can then use this symbol in your source code to
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
# automatically to create a 32-bit value in your source code.
#
# This will be an integer division of F_USB below, as it is sourced by
# F_USB after it has run through any CPU prescalers. Note that this value
# does not *change* the processor frequency - it should merely be updated to
# reflect the processor speed set externally so that the code can use accurate
# software delays.
F_CPU = 16000000
#
# LUFA specific
#
# Target architecture (see library "Board Types" documentation).
ARCH = AVR8
# Input clock frequency.
# This will define a symbol, F_USB, in all source code files equal to the
# input clock frequency (before any prescaling is performed) in Hz. This value may
# differ from F_CPU if prescaling is used on the latter, and is required as the
# raw input clock is fed directly to the PLL sections of the AVR for high speed
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
# at the end, this will be done automatically to create a 32-bit value in your
# source code.
#
# If no clock division is performed on the input clock inside the AVR (via the
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
F_USB = $(F_CPU)
# 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 ?= no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
CONSOLE_ENABLE ?= yes # Console for debug(+400)
COMMAND_ENABLE ?= yes # Commands for debug and configuration
NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality (+4870)
BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150)
MIDI_ENABLE ?= no # MIDI controls
AUDIO_ENABLE ?= no
UNICODE_ENABLE ?= no # Unicode
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
ifndef QUANTUM_DIR
include ../../Makefile
endif

@ -0,0 +1,30 @@
#include "amj60.h"
#include "led.h"
void matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
matrix_init_user();
led_init_ports();
};
void matrix_scan_kb(void) {
// put your looping keyboard code here
// runs every cycle (a lot)
matrix_scan_user();
};
void led_init_ports(void) {
// * Set our LED pins as output
DDRB |= (1<<2);
}
void led_set_kb(uint8_t usb_led) {
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
// Turn capslock on
PORTB &= ~(1<<2);
} else {
// Turn capslock off
PORTB |= (1<<2);
}
}

@ -0,0 +1,153 @@
#ifndef AMJ60_H
#define AMJ60_H
#include "quantum.h"
// readability
#define XXX KC_NO
/* AMJ60 layout to the best of my knowledge matrix layout
* ,-----------------------------------------------------------.
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d| 49|
* |-----------------------------------------------------------|
* | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d |
* |-----------------------------------------------------------|
* | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d |
* |-----------------------------------------------------------|
* | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3c | 3d |
* |-----------------------------------------------------------|
* | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d |
* `-----------------------------------------------------------'
*/
#define KEYMAP( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49,\
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, \
k40, k41, k42, k45, k4a, k4b, k4c, k4d \
) \
{ \
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
{k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d} \
}
/*
* ANSI
* ,-----------------------------------------------------------.
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d |
* |-----------------------------------------------------------|
* | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d |
* |-----------------------------------------------------------|
* | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d |
* |-----------------------------------------------------------|
* | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d |
* |-----------------------------------------------------------|
* | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d |
* `-----------------------------------------------------------'
*/
#define KEYMAP_ANSI( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, \
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \
k40, k41, k42, k45, k4a, k4b, k4c, k4d \
) \
{ \
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \
{k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, XXX, k3d}, \
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \
}
/* AMJ60 HHKB matrix layout
* ,------------------------------------------------------------.
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d| 49 |
* |------------------------------------------------------------|
* | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d |
* |------------------------------------------------------------|
* | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d |
* |------------------------------------------------------------|
* | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d | 3c |
* |------------------------------------------------------------|
* | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d |
* `------------------------------------------------------------'
*/
#define KEYMAP_HHKB( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, \
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
k40, k41, k42, k45, k4a, k4b, k4c, k4d \
) \
{ \
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \
{k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d} \
}
/* ISO
* ,-----------------------------------------------------------.
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d |
* |-----------------------------------------------------------|
* | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d |
* |-----------------------------------------------------------|
* | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2c|2d |
* |-----------------------------------------------------------|
* | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d |
* |-----------------------------------------------------------|
* | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d |
* `-----------------------------------------------------------'
*/
#define KEYMAP_ISO( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \
k40, k41, k42, k45, k4a, k4b, k4c, k4d \
) \
{ \
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
{k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, XXX}, \
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \
}
/* ISO w/ split right shift key matrix layout
* ,-----------------------------------------------------------.
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d |
* |-----------------------------------------------------------|
* | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d |
* |-----------------------------------------------------------|
* | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2c|2d |
* |-----------------------------------------------------------|
* | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d | 3c |
* |-----------------------------------------------------------|
* | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d |
* `-----------------------------------------------------------'
*/
#define KEYMAP_ISO_SPLITRSHIFT( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
k40, k41, k42, k45, k4a, k4b, k4c, k4d \
) \
{ \
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
{k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \
}
void matrix_init_user(void);
void matrix_scan_user(void);
#endif

@ -0,0 +1,94 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef CONFIG_H
#define CONFIG_H
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x6066
#define DEVICE_VER 0x0001
#define MANUFACTURER Han Chen
#define PRODUCT AMJ60
#define DESCRIPTION qmk port of AMJ60 PCB
/* key matrix size */
#define MATRIX_ROWS 5
#define MATRIX_COLS 14
// ROWS: Top to bottom, COLS: Left to right
#define MATRIX_ROW_PINS { F7, F6, F5, F4, D5}
#define MATRIX_COL_PINS { F1, F0, E6, C7, C6, B0, D4, B1, B7, B5, B4, D7, D6, B3}
#define UNUSED_PINS
#define BACKLIGHT_PIN B6
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* define if matrix has ghost */
//#define MATRIX_HAS_GHOST
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 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)) \
)
/* Backlight configuration
*/
#define BACKLIGHT_LEVELS 4
/* Underlight configuration
*/
#define RGB_DI_PIN E2
#define RGBLIGHT_TIMER
#define RGBLED_NUM 8 // Number of LEDs
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
/*
* 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

@ -0,0 +1,23 @@
# Build Options
# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

@ -0,0 +1,42 @@
#!/bin/bash
# adjust for cpu
# -j 16 gave best result on a hyperthreaded quad core core i7
LIMIT=10
THREADS="-j 16"
KMAP=iso_split_rshift
echo "We need sudo later"
sudo ls 2>&1 /dev/null
function wait_bootloader {
echo "Waiting for Bootloader..."
local STARTTIME=$(date +"%s")
local REMIND=0
local EXEC=dfu-programmer
local TARGET=atmega32u4
while true
do
sudo $EXEC $TARGET get > /dev/null 2>&1
[ $? -eq 0 ] && break
ENDTIME=$(date +"%s")
DURATION=$(($ENDTIME-$STARTTIME))
if [ $REMIND -eq 0 -a $DURATION -gt $LIMIT ]
then
echo "Did you forget to press the reset button?"
REMIND=1
fi
sleep 1
done
}
make clean
make KEYMAP=${KMAP} ${THREADS}
if [[ $? -eq 0 ]]
then
echo "please trigger flashing!"
wait_bootloader
sudo make KEYMAP=${KMAP} dfu ${THREADS}
else
echo "make failed"
exit 77
fi

@ -0,0 +1,147 @@
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
// this is the style you want to emulate.
#include "amj60.h"
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
#define _DEF 0
#define _SPC 1
#define _TAB 2
#define _SFX 3
// dual-role shortcuts
#define TABDUAL LT(_TAB, KC_TAB)
#define CAPSDUAL CTL_T(KC_ESC)
#define SPACEDUAL LT(_SPC, KC_SPACE)
#define ENTERDUAL CTL_T(KC_ENT)
// arrow cluster duality bottom right corner
#define ARRLEFT ALT_T(KC_LEFT)
#define ARRDOWN GUI_T(KC_DOWN)
#define ARRUP SFT_T(KC_UP)
#define ARRRIGHT CTL_T(KC_RIGHT)
// german brackets
#define GER_CUR_L RALT(KC_7) // [
#define GER_CUR_R RALT(KC_0) // ]
#define GER_PAR_L LSFT(KC_8) // (
#define GER_PAR_R LSFT(KC_9) // )
#define GER_ANG_L KC_NUBS // <
#define GER_ANG_R LSFT(KC_NUBS) // >
#define GER_BRC_L RALT(KC_8) // [
#define GER_BRC_R RALT(KC_9) // ]
// increase readability
#define _______ KC_TRNS
#define XXXXXXX KC_NO
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _DEF: Default Layer
* ,-----------------------------------------------------------.
* |Grv| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
* |-----------------------------------------------------------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | Tab is Fn1
* |-----------------------------------------------------------|
* |Ctrl | A| S| D| F| G| H| J| K| L| ;| '| Return |
* |-----------------------------------------------------------|
* |Sft | < | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn2| RShift is UP
* |-----------------------------------------------------------|
* |Ctrl|Win |Alt | Space/Fn0 |Alt |Win |Menu|RCtl| Gui Menu, RCtrl is
* `-----------------------------------------------------------' LEFT DWN RIGHT
*/
[_DEF] = KEYMAP_ISO_SPLITRSHIFT(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
TABDUAL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
CAPSDUAL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, ENTERDUAL, \
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, ARRUP, TG(_SFX), \
KC_LCTL, KC_LGUI, KC_LALT, SPACEDUAL, KC_RALT, ARRLEFT, ARRDOWN, ARRRIGHT),
/* Keymap 1: F-and-vim Layer, modified with Space (by holding space)
* ,-----------------------------------------------------------.
* |PrSc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete|
* |-----------------------------------------------------------|
* | |Paus| Up| [ | ] | | | | ( | ) | | | | |
* |-----------------------------------------------------------|
* | |Lft|Dwn|Rgt| | |Left|Down|Right|Up| | | PLAY |
* |-----------------------------------------------------------|
* | | | | | < | > | |M0 | | | | | Vol+ | |
* |-----------------------------------------------------------|
* | | | | |Alt |Prev|Vol-|Next|
* `-----------------------------------------------------------'
*/
[_SPC] = KEYMAP_ISO_SPLITRSHIFT(
KC_PSCR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
_______, KC_PAUS, KC_UP, GER_BRC_L, GER_BRC_R, _______, _______, GER_PAR_L, GER_PAR_R, _______, _______, _______, _______, _______, \
_______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, KC_MPLY, \
_______, _______, _______, _______, GER_ANG_L, GER_ANG_R, KC_SPACE, M(0), _______, _______, _______, _______, KC_VOLU, _______, \
_______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT),
/* Keymap 2: Tab Layer w/ vim pageup, modified with Tab (by holding tab)
* ,-----------------------------------------------------------.
* |WAKE| | | | | | | | | | | | |Insert| TAB+GRC = WAKE
* |-----------------------------------------------------------|
* | | | | | | | | | { | } | | | | |
* |-----------------------------------------------------------|
* | | | | | | |Pos1|PgDn|PgUp|End| | |Retrn |
* |-----------------------------------------------------------|
* | | | | | | | |AF2| | | | | PgUp | |
* |-----------------------------------------------------------|
* | | | | |Alt |Pos1|PgDn|End |
* `-----------------------------------------------------------'
*/
[_TAB] = KEYMAP_ISO_SPLITRSHIFT(
KC_WAKE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, \
_______, _______, _______, _______, _______, _______, _______, GER_CUR_L, GER_CUR_R, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______, KC_ENT, \
_______, _______, _______, _______, _______, _______, _______, M(1), _______, _______, _______, _______, KC_PGUP, _______, \
_______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END),
/* Keymap 3: Split right shift Numpad toggle Layer (by tapping the split rshift key)
* ,-----------------------------------------------------------.
* |RSET| | | | | | | 7| 8| 9| | | |Backsp |
* |-----------------------------------------------------------|
* | | | | | | | | 4 | 5 | 6 | | | | \ |
* |-----------------------------------------------------------|
* | | L | L | | | | | 1 | 2 | 3 | | | Return |
* |-----------------------------------------------------------|
* | | | L | L | L | L | L | L | | 0 | | /| Up | | All "L"s represent
* |-----------------------------------------------------------| LED controlling
* |Ctrl|Win |Alt | |Alt |Left|Down|Right|
* `-----------------------------------------------------------'
*/
[_SFX] = KEYMAP_ISO_SPLITRSHIFT(
RESET, _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, _______, _______, KC_BSPC, \
_______, _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, KC_BSLS, \
_______, F(2), F(3), _______, _______, _______, _______, KC_1, KC_2, KC_3, _______, _______, XXXXXXX, KC_ENT, \
_______, F(4), F(5), F(6), F(7), F(8), F(9), _______, _______, KC_0, _______, KC_SLSH, KC_UP, _______, \
_______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT),
};
enum function_id {
LAUNCH,
RGBLED_TOGGLE,
};
const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_FUNCTION(LAUNCH),
[10] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_ENT),
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
return (record->event.pressed ?
MACRO( D(RALT), T(SPC), U(RALT), END )
:MACRO( END ));
break;
case 1:
return (record->event.pressed ?
MACRO( D(LALT), T(F2), U(LALT), END )
:MACRO( END ));
break;
}
return MACRO_NONE;
};

@ -0,0 +1,30 @@
toneman77's custom spacefn Layout
=====================
##Quantum MK Firmware
For the full Quantum feature list, see the parent readme.md.
# Features
* heavily modified ISO (!) layout with split right shift key
* spaceFn
* Dual-Role keys:
*
| Original key | when tapped | when held |
| ---------------- | ------------- | ------------- |
| Space | Space | layer change |
| Caps lock | Escape | Control |
| Tab | Tab | layer change |
| Enter | Enter | Control |
* vim-style arrow keys on hjkl (spacefn layer)
* corresponding Home/PgDn/PgUp/End on hjkl (tab layer)
* bonus arrow keys in the bottom right corner on Alt/Win/Menu/rCtrl/Shift
* more bonus arrow keys on wasd (spacefn layer)
* media keys prev/next/play/vol+/vol- (spacefn layer)
* firmware bootloader button
* additional brackets that only work in german layout due to horrible placement
in the default qwertz layout
### Additional Credits
* visualization of the layers [here](http://www.keyboard-layout-editor.com/#/gists/aba4e4396459ede85bc66a22cee88e48) (without the LED keys)

@ -0,0 +1,4 @@
#!/bin/bash
git checkout amj60 # gets you on branch amj60
git fetch origin # gets you up to date with origin
git merge origin/master

@ -0,0 +1,57 @@
AMJ60 keyboard firmware
======================
DIY/Assembled compact 60% keyboard.
## Quantum MK Firmware
For the full Quantum feature list, see [the parent readme.md](/readme.md).
## Building
Download or clone the whole firmware and navigate to the keyboards/amj60
folder. Once your dev env is setup, you'll be able to type `make` to generate
your .hex - you can then use `make dfu` to program your PCB once you hit the
reset button.
Depending on which keymap you would like to use, you will have to compile
slightly differently.
### Default
To build with the default keymap, simply run `make`.
### Other Keymaps
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 `<name>.c` in the keymaps folder, and see keymap document (you can find
in top readme.md) and existent keymap files.
To build the firmware binary hex file with a keymap just do `make` with
`KEYMAP` option like:
``
$ make KEYMAP=[default|jack|<name>]
``
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps`
folder.
## Variations
KEYMAP macros for the following layouts are available:
* default, for all the available, possible keys
* ANSI, for 60% ANSI keyboard
* ISO
* ISO w/ split right shift key
* HHKB
Remark: all but "ISO w/ split right shift key" are untested and were done to the best of my knowledge.
### Original tmk firmware
The original firmware that was used to port to qmk can be found [here](https://github.com/AMJKeyboard/AMJ60).
## Further information
Since information and documentation for this board are sparse, (at least for non-chinese speaking ppl) here is everything that could be found
* [geekhack discussion](https://geekhack.org/index.php?topic=53070.0)
* [chinese discussion](https://www.v2ex.com/t/161887)
* Board has [dedicated pinouts](https://i.imgur.com/D0sWhyh.jpg?1) for a bluetooth module
* has pins for external power [picture](https://i.imgur.com/00VrtIp.jpg?1).
* most information comes from [reddit](https://www.reddit.com/r/MechanicalKeyboards/comments/32oonr/gh60_pcb_for_your_custom_keyboard/)

@ -130,3 +130,27 @@ void ergodox_right_led_3_off(void){
void ergodox_right_led_off(uint8_t led){ void ergodox_right_led_off(uint8_t led){
} }
#ifdef ONEHAND_ENABLE
__attribute__ ((weak))
const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
{{0, 9}, {1, 9}, {2, 9}, {3, 9}, {4, 9}},
{{0, 10}, {1, 10}, {2, 10}, {3, 10}, {4, 10}},
{{0, 11}, {1, 11}, {2, 11}, {3, 11}, {4, 11}},
{{0, 12}, {1, 12}, {2, 12}, {3, 12}, {4, 12}},
{{0, 13}, {1, 13}, {2, 13}, {3, 13}, {4, 13}},
{{0, 14}, {1, 14}, {2, 14}, {3, 14}, {4, 14}},
{{0, 15}, {1, 15}, {2, 15}, {3, 15}, {4, 15}},
{{0, 16}, {1, 16}, {2, 16}, {3, 16}, {4, 16}},
{{0, 17}, {1, 17}, {2, 17}, {3, 17}, {4, 17}},
{{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}},
{{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}},
{{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}},
{{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}},
{{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}},
{{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}},
{{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}},
{{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}},
{{0, 8}, {1, 8}, {2, 8}, {3, 8}, {4, 8}},
};
#endif

@ -0,0 +1,10 @@
These are notes on how to build and deploy the firmware to Ez, but they are
from before the qmk restructuring.
cd qmk_firmware/keyboard/ergodox_ez
make KEYMAP=jafo
cp ergodox_ez.hex keymaps/jafo/
/tmp/teensy.64bit
Open hex keymap file
Program
Upload

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

@ -0,0 +1,183 @@
#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
#include "version.h"
#define BASE 0 // default layer
#define SYMB 1 // symbols
#define MDIA 2 // media keys
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | Grv | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | = | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | Esc/Cmd| A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd |
* |--------+------+------+------+------+------| L2 | | L2 |------+------+------+------+------+--------|
* | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* |Grv/L1| '" | Del | Left | Right| | Up | Down | [ | ] | ~L1 |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* |Ctrl/Esc| Alt| | Alt |Ctrl/Esc|
* ,------|------|------| |------+--------+------.
* | | | Home | | PgUp | | |
* | Space|Backsp|------| |------| Tab |Enter |
* | |ace | End | | PgDn | | |
* `--------------------' `----------------------'
*/
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_*
[BASE] = KEYMAP( // layer 0 : default
// left hand
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
KC_EQL, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
GUI_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, TG(MDIA),
LT(SYMB,KC_GRV),KC_QUOT, KC_DELT, KC_LEFT,KC_RGHT,
CTL_T(KC_ESC), KC_LALT,
KC_HOME,
KC_SPC,KC_BSPC,KC_END,
// right hand
KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
TG(MDIA), KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
KC_LALT, CTL_T(KC_ESC),
KC_PGUP,
KC_PGDN,KC_TAB, KC_ENT
),
/* Keymap 1: Symbol Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | . | 0 | = | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// SYMBOLS
[SYMB] = KEYMAP(
// left hand
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,
KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,
// right hand
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
/* Keymap 2: Media and mouse keys
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | MsUp | | | | | | | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | |MsLeft|MsDown|MsRght| |------| |------| LEFT | DOWN | UP | RIGHT| | Play |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | | | | | | | Prev | Next | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | Lclk | Mclk | Rclk | |VolUp |VolDn | Mute | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | |Brwser|
* | | |------| |------| |Back |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// MEDIA AND MOUSE
[MDIA] = KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN3, KC_BTN2,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
// right hand
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_MPLY,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_WBAK
),
};
const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
}
break;
}
return MACRO_NONE;
};
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
ergodox_board_led_off();
ergodox_right_led_1_off();
ergodox_right_led_2_off();
ergodox_right_led_3_off();
switch (layer) {
// TODO: Make this relevant to the ErgoDox EZ.
case 1:
ergodox_right_led_1_on();
break;
case 2:
ergodox_right_led_2_on();
break;
default:
// none
break;
}
};

@ -0,0 +1,20 @@
# ErgoDox EZ "jafo" Configuration
This is a layout based on the ErgoDox Ez default layout, but with some
customizations I made for my use-case. I use Linux, vi and the i3 window
manager, so I made these changes:
- Arrow keys laid out in vi positions in media layer.
- Esc (tap) and Win (held) to the left of A. i3 uses Win key for navigation
and having that be symmetric on the left and right makes it easier.
- Grave accent below equals, I was having a hard time using ~
- Layer 2 switch below the L1 switch, so I can go into a mode where I get
arrow keys under my vi motion fingers.
- Making the Ctrl (held) and Esc (tap) on my thumbs symmetric. Not sure I
need that with the Esc left of A and Ctrl on the Z and / keys when held...
![Jafo](jafo_highres.png)

@ -3,21 +3,18 @@
#include "debug.h" #include "debug.h"
#include "action_layer.h" #include "action_layer.h"
#include "action_util.h" #include "action_util.h"
#include "mousekey.h"
#define BASE 0 // default layer #define BASE 0 // default layer
#define SYMB 1 // symbols layer #define SYMB 1 // symbols layer
#define MDIA 2 // media layer #define MDIA 2 // media layer
#define SPEC 3 // special layer #define SPEC 3 // special layer
#define LCaps 10 // left caps-shift key #define LSymb 10 // left symbol-shift key
#define LSymb 11 // left symbol-shift key #define LMdia 11 // left media-shift key
#define LMdia 12 // left media-shift key #define LSpec 12 // left special-shift key
#define LSpec 13 // left special-shift key #define RSymb 13 // right symbol-shift key
#define RCaps 14 // right caps-shift key #define RMdia 14 // right media-shift key
#define RSymb 15 // right symbol-shift key #define RSpec 15 // right special-shift key
#define RMdia 16 // right media-shift key
#define RSpec 17 // right special-shift key
#define MUL 20 // mouse up left #define MUL 20 // mouse up left
#define MUR 21 // mouse up right #define MUR 21 // mouse up right
@ -25,123 +22,124 @@
#define MDR 23 // mouse down right #define MDR 23 // mouse down right
/* /*
* The Ordinary Layout for the Ergodox EZ keyboard, v4 * The Ordinary Layout for the Ergodox EZ keyboard, v4.20
* *
* Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com * Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com
* *
* No rights reserved. This software is in the public domain. * No rights reserved. This software is in the public domain.
* Credit me if you are friendly but if you're a jerk don't bother. * Credit me if you are friendly but if you're a jerk don't bother.
* * If you use or modify this layout I would love to hear from you.
*
* Details: readme.md * Details: readme.md
* https://github.com/nrrkeene/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/ordinary * https://github.com/nrrkeene/qmk_firmware/tree/master/keyboards/ergodox/keymaps/ordinary
*/ */
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/******* Base Layer ******************************************************************************************************** /******* Base Layer ****************************************************************************************************
* *
* ,------------------------------------------------------. ,------------------------------------------------------. * ,------------------------------------------------------. ,------------------------------------------------------.
* | Special `~ | 1 | 2 | 3 | 4 | 5 | ESC | | - | 6 | 7 | 8 | 9 | 0 | =+ Special | * | Special `~ | 1 | 2 | 3 | 4 | 5 | ESC | | - | 6 | 7 | 8 | 9 | 0 | =+ Special |
* |------------+------+------+------+------+-------------| |------+------+------+------+------+------+------------| * |------------+------+------+------+------+-------------| |------+------+------+------+------+------+------------|
* | Media Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \| Media | * | Media Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \| Media |
* |------------+------+------+------+------+------| | | |------+------+------+------+------+------------| * |------------+------+------+------+------+------| | | |------+------+------+------+------+------------|
* | Symbol | A | S | D | F | G |------| |------| H | J | K | L | ; | '" Symbol | * | Symbol | A | S | D | F | G |------| |------| H | J | K | L | ; | '" Symbol |
* |------------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+------------| * |------------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+------------|
* | Capitals | Z | X | C | V | B | -Tab | | | N | M | , | . | / | Capitals | * | Capitals | Z | X | C | V | B | -Tab | | | N | M | , | . | / | Capitals |
* `------------+------+------+------+------+-------------' `-------------+------+------+------+------+------------' * `------------+------+------+------+------+-------------' `-------------+------+------+------+------+------------'
* | LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh | RCtrl | * | LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh | RCtrl |
* `-----------------------------------' `-----------------------------------' * `-----------------------------------' `-----------------------------------'
* ,-------------. ,-------------. * ,-------------. ,-------------.
* | Home | End | | Left | Right| * | Home | End | | Left | Right|
* ,------|------|------| |------+------+------. * ,------|------|------| |------+------+------.
* | | | PgUp | | Up | | | * | | | PgUp | | Up | | |
* |Backsp| Del |------| |------| Enter| Space| * |Backsp| Del |------| |------| Enter| Space|
* | | | PgDn | | Down | | | * | | | PgDn | | Down | | |
* `--------------------' `--------------------' * `--------------------' `--------------------'
*/ */
[BASE] = KEYMAP( [BASE] = KEYMAP(
// left hand // left hand
F(LSpec),KC_1,KC_2,KC_3 ,KC_4 ,KC_5 ,KC_ESC F(LSpec) ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_ESC
,F(LMdia) ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC ,F(LMdia) ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC
,M(LSymb) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,M(LSymb) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G
,M(LCaps) ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB) ,KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB)
,KC_LCTL ,KC_MEH ,KC_HYPR,KC_LALT,KC_LGUI ,KC_LCTL ,KC_MEH ,KC_HYPR,KC_LALT,KC_LGUI
,KC_HOME,KC_END ,KC_HOME,KC_END
,KC_PGUP ,KC_PGUP
,KC_BSPC,KC_DEL ,KC_PGDN ,KC_BSPC,KC_DEL ,KC_PGDN
// right hand // right hand
,KC_MINS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,F(RSpec) ,KC_MINS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,F(RSpec)
,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,F(RMdia) ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,F(RMdia)
,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,F(RSymb) ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,F(RSymb)
,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,M(RCaps) ,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,KC_RSFT
,KC_RGUI,KC_RALT,KC_HYPR ,KC_MEH ,KC_RCTL ,KC_RGUI,KC_RALT,KC_HYPR ,KC_MEH ,KC_RCTL
,KC_LEFT ,KC_RGHT ,KC_LEFT ,KC_RGHT
,KC_UP ,KC_UP
,KC_DOWN ,KC_ENT ,KC_SPC ,KC_DOWN ,KC_ENT ,KC_SPC
), ),
/******* Symbols Layer ***************************************************************************************************** /******* Symbols Layer *************************************************************************************************
* *
* ,-----------------------------------------------------. ,-----------------------------------------------------. * ,-----------------------------------------------------. ,-----------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | Esc | | - | F6 | F7 | F8 | F9 | F10 | | * | | F1 | F2 | F3 | F4 | F5 | Esc | | - | F6 | F7 | F8 | F9 | F10 | |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
* | | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | | * | | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | | * | | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | |
* |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------| * |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------|
* | | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | | * | | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | |
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
* | LCtrl | Meh |Hyper | LAlt | LGui | |RGui/0|RAlt/.|Hypr/=|Meh/+ |RCtrl/Ent| * | LCtrl | Meh |Hyper | LAlt | LGui | | 0 | . | = | + | Ent |
* `-----------------------------------' `-------------------------------------' * `-----------------------------------' `-----------------------------------'
* ,-------------. ,-------------. * ,-------------. ,-------------.
* | Left | Right| | Home | End | * | Left | Right| | Home | End |
* ,------|------|------| |------+------+------. * ,------|------|------| |------+------+------.
* | | | Up | | PgUp | | | * | | | Up | | PgUp | | |
* |Space |Enter |------| |------|BackSp| Del | * |Space |Enter |------| |------|BackSp| Del |
* | | | Down | | PgDn | | | * | | | Down | | PgDn | | |
* `--------------------' `--------------------' * `--------------------' `--------------------'
*/ */
[SYMB] = KEYMAP( [SYMB] = KEYMAP(
// left hand // left hand
KC_TRNS ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_ESC KC_TRNS ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_ESC
,KC_TRNS ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM) ,KC_TRNS ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM)
,KC_TRNS ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV ,KC_TRNS ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV
,KC_TRNS ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_TAB ,KC_TRNS ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_TAB
,KC_LCTL ,KC_MEH ,KC_HYPR,KC_LALT ,KC_LGUI ,KC_LCTL ,KC_MEH ,KC_HYPR ,KC_LALT ,KC_LGUI
,KC_LEFT ,KC_RGHT ,KC_LEFT ,KC_RGHT
,KC_UP ,KC_UP
,KC_SPC ,KC_ENT ,KC_DOWN ,KC_SPC ,KC_ENT ,KC_DOWN
// right hand // right hand
,KC_MINS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_TRNS ,KC_MINS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_TRNS
,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,KC_TRNS ,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,KC_TRNS
,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,KC_TRNS ,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,KC_TRNS
,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_TRNS ,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_TRNS
,GUI_T(KC_0),ALT_T(KC_DOT),ALL_T(KC_EQL),MEH_T(KC_PLUS),CTL_T(KC_ENT) ,KC_0 ,KC_DOT ,KC_EQL,KC_PLUS ,KC_ENT
,KC_HOME ,KC_END ,KC_HOME ,KC_END
,KC_PGUP ,KC_PGUP
,KC_PGDN ,KC_BSPC ,KC_DEL ,KC_PGDN ,KC_BSPC ,KC_DEL
), ),
/******* Media Layer ******************************************************************************************************* /******* Media Layer *******************************************************************************************************
* *
* ,---------------------------------------------------------------. ,---------------------------------------------------------------. * ,---------------------------------------------------------------. ,---------------------------------------------------------------.
* | | F11 | F12 | F13 | F14 | F15 | Esc | | | F16 | F17 | F18 | F19 | F20 | | * | | F11 | F12 | F13 | F14 | F15 | Esc | | | F16 | F17 | F18 | F19 | F20 | |
* |------+---------+---------+---------+---------+----------------| |------+---------+---------+---------+---------+---------+------| * |------+---------+---------+---------+---------+----------------| |------+---------+---------+---------+---------+---------+------|
* | |Shut Down|MouseUpLf|Mouse Up |MouseUpRg|Volume Up|Scroll| |Scroll|PrintScrn| Home | Up | PgUp | Mail | | * | |Shut Down|MouseUpLf|Mouse Up |MouseUpRg|Volume Up|Scroll| |Scroll|PrintScrn| Home | Up | PgUp | Mail | |
* |------+---------+---------+---------+---------+---------| Up | | Up |---------+---------+---------+---------+---------+------| * |------+---------+---------+---------+---------+---------| Up | | Up |---------+---------+---------+---------+---------+------|
* | | Sleep |MouseLeft|MouseDown|MouseRght|Volume Dn|------| |------| Num Lock| Left | Down | Right | MyComp | | * | | Sleep |MouseLeft|MouseDown|MouseRght|Volume Dn|------| |------| Num Lock| Left | Down | Right | MyComp | |
* |------+---------+---------+---------+---------+---------|Scroll| |Scroll|---------+---------+---------+---------+---------+------| * |------+---------+---------+---------+---------+---------|Scroll| |Scroll|---------+---------+---------+---------+---------+------|
* | | |MouseDnLf|MouseDown|MouseDnRg| Mute | Down | | Down | | End | Down | PgDn | | | * | | |MouseDnLf|MouseDown|MouseDnRg| Mute | Down | | Down | | End | Down | PgDn | | |
* `------+---------+---------+---------+---------+----------------' `----------------+---------+---------+---------+---------+------' * `------+---------+---------+---------+---------+----------------' `----------------+---------+---------+---------+---------+------'
* |LCtrl| Meh | MClick | LClick | R Click| |Cmd/Insrt|Optn/Del | Hyper | Meh |RCtrl| * |LCtrl| Meh | MClick | LClick | R Click| |Cmd/Insrt|Optn/Del | Hyper | Meh |RCtrl|
* `---------------------------------------------' `---------------------------------------------' * `---------------------------------------------' `---------------------------------------------'
* ,-------------. ,-------------. * ,-------------. ,-------------.
* | Stop |Refrsh| | Prev | Next | * | Stop |Refrsh| | Prev | Next |
* ,------|------|------| |------+------+------. * ,------|------|------| |------+------+------.
* |Brwser|Brwser|Search| |VolUp | | | * |Brwser|Brwser|Search| |VolUp | | |
* |Back | Fwd |------| |------| Stop | Play-| * |Back | Fwd |------| |------| Stop | Play-|
* | | | Home | |VolDn | | Pause| * | | | Home | |VolDn | | Pause|
* `--------------------' `--------------------' * `--------------------' `--------------------'
*/ */
[MDIA] = KEYMAP( [MDIA] = KEYMAP(
// left hand // left hand
@ -166,67 +164,63 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/******* Special Layer ***************************************************************************************************** /******* Special Layer *****************************************************************************************************
* *
* ,-----------------------------------------------------. ,-----------------------------------------------------. * ,-------------------------------------------------------. ,-------------------------------------------------------.
* | | Esc | | | | | | | | | | | | Bspc | | * | | Esc | | | | | | | | | | | - | Bspc | |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| * |-------------+------+------+------+------+-------------| |------+------+------+------+------+------+-------------|
* | | | | | | | | | | | | | | | | * | Media Lock | | | | | | | | | | | | [ | ] | Media Lock |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| * |-------------+------+------+------+------+------| | | |------+------+------+------+------+-------------|
* | | | | | | |------| |------| | | | | | | * | Symbol Lock | | | | | |------| |------| | | | | | Symbol Lock |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| * |-------------+------+------+------+------+------| | | |------+------+------+------+------+-------------|
* | | | | | | | | | | | | | | | RShift | * | Caps Lock | | | | | | | | | | | | | | Caps Lock |
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' * `-------------+------+------+------+------+-------------' `-------------+------+------+------+------+-------------'
* | | | | | | | | | | | | * | | | | | | | | | | | |
* `----------------------------------' `----------------------------------' * `------------------------------------' `------------------------------------'
* ,-------------. ,-------------. * ,-------------. ,-------------.
* | | | | | | * | | | | | |
* ,------|------|------| |------+------+------. * ,------|------|------| |------+------+------.
* | | | | | | | | * | | | | | | | |
* | | |------| |------| | | * | | |------| |------| | |
* | | | | | | | | * | | | | | | | |
* `--------------------' `--------------------' * `--------------------' `--------------------'
*/ */
[SPEC] = KEYMAP( [SPEC] = KEYMAP(
// left hand // left hand
KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_CAPS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_TRNS ,KC_TRNS
,KC_TRNS,KC_TRNS ,KC_TRNS ,KC_TRNS,KC_TRNS ,KC_TRNS
// right hand // right hand
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_BSPC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_MINS ,KC_BSPC ,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_LBRC ,KC_RBRC ,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_RSFT ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_CAPS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_TRNS ,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS
) )
}; };
const uint16_t PROGMEM fn_actions[] = { const uint16_t PROGMEM fn_actions[] = {
// the faux shift keys are implemented as macro taps // the faux shift keys are implemented as macro taps
[LCaps] = ACTION_MACRO_TAP(LCaps) [LSymb] = ACTION_MACRO_TAP(LSymb)
,[LSymb] = ACTION_MACRO_TAP(LSymb)
,[LMdia] = ACTION_MACRO_TAP(LMdia) ,[LMdia] = ACTION_MACRO_TAP(LMdia)
,[LSpec] = ACTION_MACRO_TAP(LSpec) ,[LSpec] = ACTION_MACRO_TAP(LSpec)
,[RCaps] = ACTION_MACRO_TAP(RCaps)
,[RSymb] = ACTION_MACRO_TAP(RSymb) ,[RSymb] = ACTION_MACRO_TAP(RSymb)
,[RMdia] = ACTION_MACRO_TAP(RMdia) ,[RMdia] = ACTION_MACRO_TAP(RMdia)
,[RSpec] = ACTION_MACRO_TAP(RSpec) ,[RSpec] = ACTION_MACRO_TAP(RSpec)
}; };
uint16_t caps_shift = 0;
uint16_t symb_shift = 0; uint16_t symb_shift = 0;
uint16_t mdia_shift = 0; uint16_t mdia_shift = 0;
uint16_t spec_shift = 0;
bool symb_lock = false;
bool mdia_lock = false; bool mdia_lock = false;
bool symb_lock = false;
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{ {
@ -237,50 +231,28 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
// only because sometimes rapid pressing led to irregular events; this way the states // only because sometimes rapid pressing led to irregular events; this way the states
// are self healing during use. // are self healing during use.
case LCaps: // both caps-shift keys trigger Left Shift case LSymb: //
case RCaps: // so they don't interfere with the magic combo if (record->event.pressed) { // when the LSymb button is pressed
if (record->event.pressed && !record->tap.count) { if(++symb_shift > 2) mdia_shift = 2; // increment the symb shift count, max two
if(++caps_shift > 2) caps_shift = 2; if(spec_shift) symb_lock = !symb_lock; // if the Special layer is on, toggle the shift lock
if(caps_shift == 2) { layer_on(SYMB); // in any case, turn on the Symbols layer
register_code(KC_CAPS); } else { // when the LSymb button is released
unregister_code(KC_CAPS); if(--symb_shift < 0) symb_shift = 0; // decrement the shift count, minimum zero
} else if(caps_shift == 1) { if((!symb_shift) && (!symb_lock)) layer_off(SYMB); // if both shifts are released and the lock is off, turn off the Symbols layer
register_code(KC_LSFT);
}
} else {
if(--caps_shift < 0) caps_shift = 0;
if(caps_shift == 0) unregister_code(KC_LSFT);
}
break;
case LSymb:
if (record->event.pressed) {
if(++symb_shift > 2) symb_shift = 2;
if(symb_shift == 2) {
symb_lock = !symb_lock;
} else if(symb_shift == 1) {
layer_on(SYMB);
}
} else {
if(--symb_shift < 0) symb_shift = 0;
if((symb_shift == 0) && (!symb_lock)) layer_off(SYMB);
} }
break; break;
case LMdia: case LMdia:
if (record->event.pressed) { if (record->event.pressed) {
if (record->tap.count && (!mdia_shift) && (!mdia_lock)) { if (record->tap.count && (!mdia_shift) && (!mdia_lock) && (!spec_shift)) {
register_code(KC_TAB); register_code(KC_TAB);
} else { } else {
if(spec_shift) mdia_lock = !mdia_lock;
if(++mdia_shift > 2) mdia_shift = 2; if(++mdia_shift > 2) mdia_shift = 2;
if(mdia_shift == 2) { layer_on(MDIA);
mdia_lock = !mdia_lock;
} else if(mdia_shift == 1) {
layer_on(MDIA);
}
} }
} else { } else {
if(record->tap.count && (!mdia_shift) && (!mdia_lock)) { if(record->tap.count && (!mdia_shift) && (!mdia_lock) && (!spec_shift)) {
unregister_code(KC_TAB); unregister_code(KC_TAB);
} else { } else {
if(--mdia_shift < 0) mdia_shift = 0; if(--mdia_shift < 0) mdia_shift = 0;
@ -290,35 +262,36 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
break; break;
case LSpec: case LSpec:
if (record->event.pressed) { if (record->event.pressed) { // when the LSpec button is pressed
if (record->tap.count && !record->tap.interrupted) { if(symb_shift) symb_lock == !symb_lock; // if another layer button is engaged, then
register_code(KC_GRV); else if(mdia_shift) mdia_lock = !mdia_lock; // lock that layer, be it caps or symb or mdia
else if (record->tap.count && !record->tap.interrupted && (!spec_shift)) {
register_code(KC_GRV); // otherwise, if it's an uninterrupted tap, emit a char
} else { } else {
layer_on(SPEC); if(++spec_shift > 2) spec_shift = 2;
layer_on(SPEC); // otherwise, turn on the Special layer
} }
} else { } else {
if(record->tap.count && !record->tap.interrupted) { if(record->tap.count && !record->tap.interrupted && (!spec_shift)) {
unregister_code(KC_GRV); unregister_code(KC_GRV);
} else { } else {
layer_off(SPEC); if(--spec_shift < 0) spec_shift = 0;
if(!spec_shift) layer_off(SPEC);
} }
} }
break; break;
case RSymb: case RSymb:
if (record->event.pressed) { if (record->event.pressed) {
if (record->tap.count && (!symb_shift) && (!symb_lock)) { if (record->tap.count && (!symb_shift) && (!symb_lock) && (!spec_shift)) {
register_code(KC_QUOT); register_code(KC_QUOT);
} else { } else {
if(++symb_shift > 2) symb_shift = 2; if(++symb_shift > 2) symb_shift = 2;
if(symb_shift == 2) { if(spec_shift) symb_lock = !symb_lock;
symb_lock = !symb_lock; layer_on(SYMB);
} else if(symb_shift == 1) {
layer_on(SYMB);
}
} }
} else { } else {
if(record->tap.count && symb_shift == 0) { if(record->tap.count && (!symb_shift) && (!symb_lock) && (!spec_shift)) {
unregister_code(KC_QUOT); unregister_code(KC_QUOT);
} else { } else {
if(--symb_shift < 0) symb_shift = 0; if(--symb_shift < 0) symb_shift = 0;
@ -329,18 +302,15 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
case RMdia: case RMdia:
if (record->event.pressed) { if (record->event.pressed) {
if (record->tap.count && (!mdia_shift) && (!mdia_lock)) { if (record->tap.count && (!mdia_shift) && (!mdia_lock) && (!spec_shift)) {
register_code(KC_BSLS); register_code(KC_BSLS);
} else { } else {
if(++mdia_shift > 2) mdia_shift = 2; if(++mdia_shift > 2) mdia_shift = 2;
if(mdia_shift == 2) { if(spec_shift) mdia_lock = !mdia_lock;
mdia_lock = !mdia_lock; layer_on(MDIA);
} else if(mdia_shift == 1) {
layer_on(MDIA);
}
} }
} else { } else {
if(record->tap.count && (!mdia_shift) && (!mdia_lock)) { if(record->tap.count && (!mdia_shift) && (!mdia_lock) && (!spec_shift)) {
unregister_code(KC_BSLS); unregister_code(KC_BSLS);
} else { } else {
if(--mdia_shift < 0) mdia_shift = 0; if(--mdia_shift < 0) mdia_shift = 0;
@ -351,16 +321,20 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
case RSpec: case RSpec:
if (record->event.pressed) { if (record->event.pressed) {
if (record->tap.count && !record->tap.interrupted) { if(symb_shift) symb_lock = !symb_lock;
else if(mdia_shift) mdia_lock = !mdia_lock;
else if (record->tap.count && !record->tap.interrupted && (!spec_shift)) {
register_code(KC_EQL); register_code(KC_EQL);
} else { } else {
if(++spec_shift > 2) spec_shift = 2;
layer_on(SPEC); layer_on(SPEC);
} }
} else { } else {
if(record->tap.count && !record->tap.interrupted) { if(record->tap.count && !record->tap.interrupted && (!spec_shift)) {
unregister_code(KC_EQL); unregister_code(KC_EQL);
} else { } else {
layer_off(SPEC); if(--spec_shift < 0) spec_shift = 0;
if(!spec_shift) layer_off(SPEC);
} }
} }
break; break;
@ -419,7 +393,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
// none // none
break; break;
} }
return MACRO_NONE; return MACRO_NONE;
}; };
@ -431,7 +405,9 @@ void matrix_init_user(void) {
// Runs constantly in the background, in a loop. // Runs constantly in the background, in a loop.
void matrix_scan_user(void) { void matrix_scan_user(void) {
// shift or caps lock turns on red light // shift or caps lock turns on red light
if(caps_shift || (keyboard_report->mods & MOD_BIT(KC_RSFT)) || (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK))) { if((keyboard_report->mods & MOD_BIT(KC_LSFT))
|| (keyboard_report->mods & MOD_BIT(KC_RSFT))
|| (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK))) {
ergodox_right_led_1_on(); ergodox_right_led_1_on();
} else { } else {
ergodox_right_led_1_off(); ergodox_right_led_1_off();
@ -451,4 +427,3 @@ void matrix_scan_user(void) {
ergodox_right_led_3_off(); ergodox_right_led_3_off();
} }
}; };

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 96 KiB

@ -1,24 +1,24 @@
[{x:3.5},"#\n3",{x:10.5},"*\n8"], [{x:3.5},"#\n3",{x:10.5},"*\n8"],
[{y:-0.875,x:2.5},"@\n2",{x:1},"$\n4",{x:8.5},"&\n7",{x:1},"(\n9"], [{y:-0.875,x:2.5},"@\n2",{x:1},"$\n4",{x:8.5},"&\n7",{x:1},"(\n9"],
[{y:-0.875,x:5.5},"%\n5",{c:"#ff4444"},"Esc",{x:4.5,c:"#cccccc"},"_\n\n\n\n\n\n-","^\n6"], [{y:-0.875,x:5.5},"%\n5",{c:"#ff4444"},"Esc",{x:4.5,c:"#cccccc"},"_\n\n\n\n\n\n-","^\n6"],
[{y:-0.875,c:"#2277ff",w:1.5},"Special\n\n~\n\n\n\nShift\n`",{c:"#cccccc"},"!\n1",{x:14.5},")\n0",{c:"#2277ff",w:1.5},"+\n\nSpecial\n\n\n\n=\nShift"], [{y:-0.875,c:"#c6c600",w:1.5},"Special\n\n~\n\n\n\nShift\n`",{c:"#cccccc"},"!\n1",{x:14.5},")\n0",{c:"#c6c600",w:1.5},"+\n\nSpecial\n\n\n\n=\nShift"],
[{y:-0.375,x:3.5,c:"#cccccc"},"E",{x:10.5},"I"], [{y:-0.375,x:3.5,c:"#cccccc"},"E",{x:10.5},"I"],
[{y:-0.875,x:2.5},"W",{x:1},"R",{x:8.5},"U",{x:1},"O"], [{y:-0.875,x:2.5},"W",{x:1},"R",{x:8.5},"U",{x:1},"O"],
[{y:-0.875,x:5.5},"T",{h:1.5},"{\n\n\n\n\n\n[",{x:4.5,h:1.5},"}\n\n\n\n\n\n]","Y"], [{y:-0.875,x:5.5},"T",{h:1.5},"{\n\n\n\n\n\n[",{x:4.5,h:1.5},"}\n\n\n\n\n\n]","Y"],
[{y:-0.875,c:"#2277ff",w:1.5},"Media\n\nTab\n\n\n\nShift",{c:"#cccccc"},"Q",{x:14.5},"P",{c:"#2277ff",w:1.5},"|\n\\\nMedia\n\n\n\n\nShift"], [{y:-0.875,c:"#c6c600",t:"#002299",w:1.5},"Media\n\nTab\n\n\n\nShift",{c:"#cccccc",t:"#000000"},"Q",{x:14.5},"P",{c:"#c6c600",t:"#002299",w:1.5},"|\n\\\nMedia\n\n\n\n\nShift"],
[{y:-0.375,x:3.5,c:"#cccccc"},"D",{x:10.5},"K"], [{y:-0.375,x:3.5,c:"#cccccc",t:"#000000"},"D",{x:10.5},"K"],
[{y:-0.875,x:2.5},"S",{x:1},"F",{x:8.5},"J",{x:1},"L"], [{y:-0.875,x:2.5},"S",{x:1},"F",{x:8.5},"J",{x:1},"L"],
[{y:-0.875,x:5.5},"G",{x:6.5},"H"], [{y:-0.875,x:5.5},"G",{x:6.5},"H"],
[{y:-0.875,c:"#2277ff",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#cccccc"},"A",{x:14.5},":\n;",{c:"#2277ff",w:1.5},"\"\n'\nSymbols\n\n\n\n\nShift"], [{y:-0.875,c:"#c6c600",t:"#007d00",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#cccccc",t:"#000000"},"A",{x:14.5},":\n;",{c:"#c6c600",t:"#007d00",w:1.5},"\"\n'\nSymbols\n\n\n\n\nShift"],
[{y:-0.625,x:6.5,c:"#54d6de",fa:[0,0,0,1],h:1.5},"< Tab\n\n\nShift Tab",{x:4.5,h:1.5},"Tab >\n\n\nTab"], [{y:-0.625,x:6.5,c:"#ff8500",t:"#000000",fa:[0,0,0,1],h:1.5},"< Tab\n\n\nShift Tab",{x:4.5,h:1.5},"Tab >\n\n\nTab"],
[{y:-0.75,x:3.5,c:"#cccccc"},"C",{x:10.5},"<\n,"], [{y:-0.75,x:3.5,c:"#cccccc"},"C",{x:10.5},"<\n,"],
[{y:-0.875,x:2.5},"X",{x:1},"V",{x:8.5},"M",{x:1},">\n."], [{y:-0.875,x:2.5},"X",{x:1},"V",{x:8.5},"M",{x:1},">\n."],
[{y:-0.875,x:5.5},"B",{x:6.5},"N"], [{y:-0.875,x:5.5},"B",{x:6.5},"N"],
[{y:-0.875,c:"#2277ff",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#cccccc"},"Z",{x:14.5},"?\n/",{c:"#2277ff",w:1.5},"\n\nCapitals\n\n\n\n\nShift"], [{y:-0.875,c:"#c6c600",t:"#9e0000",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#cccccc",t:"#000000"},"Z",{x:14.5},"?\n/",{c:"#c6c600",t:"#9e0000",w:1.5},"\n\nCapitals\n\n\n\n\nShift"],
[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5},"Option\n\n\nRAlt"], [{y:-0.375,x:3.5,c:"#dddd77",t:"#000000"},"Option\n\n\nLAlt",{x:10.5},"Option\n\n\nRAlt"],
[{y:-0.875,x:2.5},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5},"Cmd\n\n\nSuper",{x:1},"Hyper"], [{y:-0.875,x:2.5},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5},"Cmd\n\n\nSuper",{x:1},"Hyper"],
[{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Ctrl\n\n\nRCtrl"], [{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Ctrl\n\n\nRCtrl"],
[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#54d6de"},"Home","End"], [{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#ff8500"},"Home","End"],
[{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete","Page\n\n\n\n\n\nUp"], [{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete","Page\n\n\n\n\n\nUp"],
[{x:2},"Page\n\n\n\n\n\nDown"], [{x:2},"Page\n\n\n\n\n\nDown"],
[{r:-30,rx:13,y:-1,x:-3},"Left","Right"], [{r:-30,rx:13,y:-1,x:-3},"Left","Right"],

Binary file not shown.

Before

Width:  |  Height:  |  Size: 121 KiB

After

Width:  |  Height:  |  Size: 120 KiB

@ -1,27 +1,27 @@
[{x:3.5,c:"#99de2a"},"F13",{x:10.5},"F18"], [{x:3.5,c:"#99de2a"},"F13",{x:10.5},"F18"],
[{y:-0.875,x:2.5},"F12",{x:1},"F14",{x:8.5},"F17",{x:1},"F19"], [{y:-0.875,x:2.5},"F12",{x:1},"F14",{x:8.5},"F17",{x:1},"F19"],
[{y:-0.875,x:5.5},"F15",{c:"#ff4444"},"Esc",{x:4.5,c:"#737373",a:7},"",{c:"#99de2a",a:4},"F16"], [{y:-0.875,x:5.5},"F15",{c:"#ff4444"},"Esc",{x:4.5,c:"#737373",a:7},"",{c:"#99de2a",a:4},"F16"],
[{y:-0.875,c:"#2277ff",w:1.5},"Special\n\n\n\n\n\nShift",{c:"#99de2a"},"F11",{x:14.5},"F20",{c:"#2277ff",w:1.5},"\n\nSpecial\n\n\n\n\nShift"], [{y:-0.875,c:"#c6c600",w:1.5},"Shift\n\n\n\n\n\nLock",{c:"#99de2a"},"F11",{x:14.5},"F20",{c:"#c6c600",w:1.5},"\n\nShift\n\n\n\n\nLock"],
[{y:-0.375,x:3.5,c:"#ff8500"},"Mouse\n\n\n\n\n\nUp",{x:10.5},"Cursor\n\n\n\n\n\nUp"], [{y:-0.375,x:3.5,c:"#0066cc"},"Mouse\n\n\n\n\n\nUp",{x:10.5},"Cursor\n\n\n\n\n\nUp"],
[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nUpLeft",{x:1},"Mouse\n\n\n\n\n\nUpRgt",{x:8.5,c:"#ffb063"},"Home",{x:1},"Page\n\n\n\n\n\nUp"], [{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nUpLeft",{x:1},"Mouse\n\n\n\n\n\nUpRgt",{x:8.5,c:"#1e8fff"},"Home",{x:1},"Page\n\n\n\n\n\nUp"],
[{y:-0.875,x:5.5,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#ffb063",h:1.5},"Scroll\n\n\n\n\n\nUp",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nUp",{c:"#e6e067"},"Print\n\n\n\n\n\nScreen"], [{y:-0.875,x:5.5,c:"#9977ee"},"Vol\n\n\n\n\n\nUp",{c:"#1e8fff",h:1.5},"Scroll\n\n\n\n\n\nUp",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nUp",{c:"#9977ee"},"Print\n\n\n\n\n\nScreen"],
[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#e6e067",t:"#000000"},"Shut\n\n\n\n\n\nDown",{x:14.5},"Mail",{c:"#000000",t:"#ff0000",w:1.5},"\n\nMedia\n\n\n\n\nShift"], [{y:-0.875,c:"#000000",t:"#3f68ff",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#9977ee",t:"#000000"},"Shut\n\n\n\n\n\nDown",{x:14.5},"Mail",{c:"#000000",t:"#3f68ff",w:1.5},"\n\nMedia\n\n\n\n\nShift"],
[{y:-0.375,x:3.5,c:"#ff8500",t:"#000000"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"], [{y:-0.375,x:3.5,c:"#0066cc",t:"#000000"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"],
[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nLeft",{x:1},"Mouse\n\n\n\n\n\nRight",{x:8.5},"Cursor\n\n\n\n\n\nLeft",{x:1},"Cursor\n\n\n\n\n\nRight"], [{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nLeft",{x:1},"Mouse\n\n\n\n\n\nRight",{x:8.5},"Cursor\n\n\n\n\n\nLeft",{x:1},"Cursor\n\n\n\n\n\nRight"],
[{y:-0.875,x:5.5,c:"#e6e067"},"Vol\n\n\n\n\n\nDown",{x:6.5},"Num\n\n\n\n\n\nLock"], [{y:-0.875,x:5.5,c:"#9977ee"},"Vol\n\n\n\n\n\nDown",{x:6.5},"Num\n\n\n\n\n\nLock"],
[{y:-0.875,c:"#2277ff",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#e6e067"},"Sleep",{x:14.5},"My\n\n\n\n\n\nComp",{c:"#2277ff",w:1.5},"\n\nSymbols\n\n\n\n\nShift"], [{y:-0.875,c:"#c6c600",t:"#007d00",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#9977ee",t:"#000000"},"Sleep",{x:14.5},"My\n\n\n\n\n\nComp",{c:"#c6c600",t:"#007d00",w:1.5},"\n\nSymbols\n\n\n\n\nShift"],
[{y:-0.625,x:6.5,c:"#ffb063",h:1.5},"Scroll\n\n\n\n\n\nDown",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nDown"], [{y:-0.625,x:6.5,c:"#1e8fff",t:"#000000",h:1.5},"Scroll\n\n\n\n\n\nDown",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nDown"],
[{y:-0.75,x:3.5,c:"#ff8500"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"], [{y:-0.75,x:3.5,c:"#0066cc"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"],
[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nDnLeft",{x:1},"Mouse\n\n\n\n\n\nDnRgt",{x:8.5,c:"#ffb063"},"End",{x:1},"Page\n\n\n\n\n\nDown"], [{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nDnLeft",{x:1},"Mouse\n\n\n\n\n\nDnRgt",{x:8.5,c:"#1e8fff"},"End",{x:1},"Page\n\n\n\n\n\nDown"],
[{y:-0.875,x:5.5,c:"#e6e067"},"Mute",{x:6.5,c:"#737373",a:7},""], [{y:-0.875,x:5.5,c:"#9977ee"},"Mute",{x:6.5,c:"#737373",a:7},""],
[{y:-0.875,c:"#2277ff",a:4,w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#737373",a:7},"",{x:14.5},"",{c:"#2277ff",a:4,w:1.5},"\n\nCapitals\n\n\n\n\nShift"], [{y:-0.875,c:"#c6c600",t:"#9e0000",a:4,w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#737373",t:"#000000",a:7},"",{x:14.5},"",{c:"#c6c600",t:"#9e0000",a:4,w:1.5},"\n\nCapitals\n\n\n\n\nShift"],
[{y:-0.375,x:3.5,c:"#ff8500"},"Middle\n\n\n\n\n\nClick",{x:10.5,c:"#ffb063",fa:[0,0,0,1]},"Delete\n\n\nOption"], [{y:-0.375,x:3.5,c:"#0066cc",t:"#000000"},"Middle\n\n\n\n\n\nClick",{x:10.5,c:"#1e8fff",fa:[0,0,0,1]},"Delete\n\n\nOption"],
[{y:-0.875,x:2.5,c:"#ff8500"},"Left\n\n\n\n\n\nClick",{x:1},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#ffb063"},"Insert\n\n\nCmd",{x:1,c:"#77aaff"},"Hyper"], [{y:-0.875,x:2.5,c:"#0066cc"},"Left\n\n\n\n\n\nClick",{x:1},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#1e8fff"},"Insert\n\n\nCmd",{x:1,c:"#dddd77"},"Hyper"],
[{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Crtl\n\n\nRCtrl"], [{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Crtl\n\n\nRCtrl"],
[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#ccbb00"},"Stop\n\n\nBrowser","Reload\n\n\nBrowser"], [{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#6633ee"},"Stop\n\n\nBrowser","Reload\n\n\nBrowser"],
[{h:2},"< Web\n\n\nBrowser",{h:2},"Web >\n\n\nBrowser","Search\n\n\nBrowser"], [{h:2},"< Web\n\n\nBrowser",{h:2},"Web >\n\n\nBrowser","Search\n\n\nBrowser"],
[{x:2},"Home\n\n\nBrowser"], [{x:2},"Home\n\n\nBrowser"],
[{r:-30,rx:13,y:-1,x:-3},"Prev\n\n\nAudio\n\n\nTrack","Next\n\n\nAudio\n\n\nTrack"], [{r:-30,rx:13,y:-1,x:-3},"Prev\n\n\nAudio\n\n\nTrack","Next\n\n\nAudio\n\n\nTrack"],
[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#ccbb00",h:2},"Stop\n\n\nAudio",{h:2},"Play\n\n\nAudio\n\n\nPause"], [{x:-3,c:"#9977ee"},"Vol\n\n\n\n\n\nUp",{c:"#6633ee",h:2},"Stop\n\n\nAudio",{h:2},"Play\n\n\nAudio\n\n\nPause"],
[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nDown"] [{x:-3,c:"#9977ee"},"Vol\n\n\n\n\n\nDown"]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 67 KiB

@ -1,21 +1,21 @@
[{x:3.5,a:7},"",{x:10.5},""], [{x:3.5,a:7},"",{x:10.5},""],
[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], [{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1,a:4},"_\n\n\n\n\n\n-"],
[{y:-0.875,x:5.5},"",{c:"#ff4444",a:4},"Esc",{x:4.5,c:"#cccccc",a:7},"",""], [{y:-0.875,x:5.5,a:7},"",{c:"#ff4444",a:4},"Esc",{x:4.5,c:"#cccccc",a:7},"",""],
[{y:-0.875,c:"#000000",t:"#ff0000",a:4,w:1.5},"Special\n\n\n\n\n\nShift",{c:"#ff4444",t:"#000000"},"Esc",{x:14.5,c:"#54d6de"},"Back\n\n\n\n\n\nspace",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSpecial\n\n\n\n\nShift"], [{y:-0.875,c:"#000000",t:"#ff0000",a:4,w:1.5},"Special\n\n\n\n\n\nShift",{c:"#ff4444",t:"#000000"},"Esc",{x:14.5,c:"#ff8500"},"Back\n\n\n\n\n\nspace",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSpecial\n\n\n\n\nShift"],
[{y:-0.375,x:3.5,c:"#cccccc",t:"#000000",a:7},"",{x:10.5},""],
[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1,a:4},"{\n["],
[{y:-0.875,x:5.5,a:7},"",{h:1.5},"",{x:4.5,h:1.5},"",""],
[{y:-0.875,c:"#c6c600",t:"#002299",a:4,w:1.5},"Media\n\n\n\n\n\nLock",{c:"#cccccc",t:"#000000",a:7},"",{x:14.5,a:4},"\n\n}\n]",{c:"#c6c600",t:"#002299",w:1.5},"Media\n\n\n\n\n\nLock"],
[{y:-0.375,x:3.5,c:"#cccccc",t:"#000000",a:7},"",{x:10.5},""], [{y:-0.375,x:3.5,c:"#cccccc",t:"#000000",a:7},"",{x:10.5},""],
[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""],
[{y:-0.875,x:5.5},"",{h:1.5},"",{x:4.5,h:1.5},"",""],
[{y:-0.875,w:1.5},"","",{x:14.5},"",{w:1.5},""],
[{y:-0.375,x:3.5},"",{x:10.5},""],
[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], [{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""],
[{y:-0.875,x:5.5},"",{x:6.5},""], [{y:-0.875,x:5.5},"",{x:6.5},""],
[{y:-0.875,w:1.5},"","",{x:14.5},"",{w:1.5},""], [{y:-0.875,c:"#c6c600",t:"#007d00",a:4,w:1.5},"Symbols\n\n\n\n\n\nLock",{c:"#cccccc",t:"#000000",a:7},"",{x:14.5},"",{c:"#c6c600",t:"#007d00",a:4,w:1.5},"Symbols\n\n\n\n\n\nLock"],
[{y:-0.625,x:6.5,h:1.5},"",{x:4.5,h:1.5},""], [{y:-0.625,x:6.5,c:"#cccccc",t:"#000000",a:7,h:1.5},"",{x:4.5,h:1.5},""],
[{y:-0.75,x:3.5},"",{x:10.5},""], [{y:-0.75,x:3.5},"",{x:10.5},""],
[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], [{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""],
[{y:-0.875,x:5.5},"",{x:6.5},""], [{y:-0.875,x:5.5},"",{x:6.5},""],
[{y:-0.875,w:1.5},"","",{x:14.5},"",{c:"#2277ff",w:1.5},"RShift"], [{y:-0.875,c:"#c6c600",t:"#9e0000",a:4,w:1.5},"Capitals\n\n\n\n\n\nLock",{c:"#cccccc",t:"#000000",a:7},"",{x:14.5},"",{c:"#c6c600",t:"#9e0000",a:4,w:1.5},"Capitals\n\n\n\n\n\nLock"],
[{y:-0.375,x:3.5,c:"#cccccc"},"",{x:10.5},""], [{y:-0.375,x:3.5,c:"#cccccc",t:"#000000",a:7},"",{x:10.5},""],
[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""], [{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""],
[{y:-0.75,x:0.5},"","",{x:14.5},"",""], [{y:-0.75,x:0.5},"","",{x:14.5},"",""],
[{r:30,rx:6.5,ry:4.25,y:-1,x:1},"",""], [{r:30,rx:6.5,ry:4.25,y:-1,x:1},"",""],

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 99 KiB

@ -1,24 +1,24 @@
[{x:3.5,c:"#99de2a"},"F3",{x:10.5},"F8"], [{x:3.5,c:"#99de2a"},"F3",{x:10.5},"F8"],
[{y:-0.875,x:2.5},"F2",{x:1},"F4",{x:8.5},"F7",{x:1},"F9"], [{y:-0.875,x:2.5},"F2",{x:1},"F4",{x:8.5},"F7",{x:1},"F9"],
[{y:-0.875,x:5.5},"F5",{c:"#ff4444"},"Esc",{x:4.5,c:"#bbddbb"},"_\n\n\n\n\n\n-",{c:"#99de2a"},"F6"], [{y:-0.875,x:5.5},"F5",{c:"#ff4444"},"Esc",{x:4.5,c:"#bbddbb"},"_\n\n\n\n\n\n-",{c:"#99de2a"},"F6"],
[{y:-0.875,c:"#2277ff",w:1.5},"Special\n\n\n\n\n\nShift",{c:"#99de2a"},"F1",{x:14.5},"F10",{c:"#2277ff",w:1.5},"\n\nSpecial\n\n\n\n\nShift"], [{y:-0.875,c:"#c6c600",w:1.5},"Shift\n\n\n\n\n\nLock",{c:"#99de2a"},"F1",{x:14.5},"F10",{c:"#c6c600",w:1.5},"\n\nShift\n\n\n\n\nLock"],
[{y:-0.375,x:3.5,c:"#bbddbb"},"{",{x:10.5,c:"#89b087"},"8"], [{y:-0.375,x:3.5,c:"#bbddbb"},"{",{x:10.5,c:"#89b087"},"8"],
[{y:-0.875,x:2.5,c:"#bbddbb"},"@",{x:1},"}",{x:8.5,c:"#89b087"},"7",{x:1},"9"], [{y:-0.875,x:2.5,c:"#bbddbb"},"@",{x:1},"}",{x:8.5,c:"#89b087"},"7",{x:1},"9"],
[{y:-0.875,x:5.5,c:"#bbddbb"},"&",{h:1.5},"<",{x:4.5,h:1.5},">","|"], [{y:-0.875,x:5.5,c:"#bbddbb"},"&",{h:1.5},"<",{x:4.5,h:1.5},">","|"],
[{y:-0.875,c:"#2277ff",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#bbddbb"},"!",{x:14.5,c:"#89b087"},"/",{c:"#2277ff",w:1.5},"\n\nMedia\n\n\n\n\nShift"], [{y:-0.875,c:"#c6c600",t:"#002299",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"!",{x:14.5,c:"#89b087"},"/",{c:"#c6c600",t:"#002299",w:1.5},"\n\nMedia\n\n\n\n\nShift"],
[{y:-0.375,x:3.5,c:"#bbddbb"},"(",{x:10.5,c:"#89b087"},"5"], [{y:-0.375,x:3.5,c:"#bbddbb",t:"#000000"},"(",{x:10.5,c:"#89b087"},"5"],
[{y:-0.875,x:2.5,c:"#bbddbb"},"$",{x:1},")",{x:8.5,c:"#89b087"},"4",{x:1},"6"], [{y:-0.875,x:2.5,c:"#bbddbb"},"$",{x:1},")",{x:8.5,c:"#89b087"},"4",{x:1},"6"],
[{y:-0.875,x:5.5,c:"#bbddbb"},"`",{x:6.5},"/"], [{y:-0.875,x:5.5,c:"#bbddbb"},"`",{x:6.5},"/"],
[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"#",{x:14.5,c:"#89b087"},"*",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSymbols\n\n\n\n\nShift"], [{y:-0.875,c:"#000000",t:"#007d00",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"#",{x:14.5,c:"#89b087"},"*",{c:"#000000",t:"#007d00",w:1.5},"\n\nSymbols\n\n\n\n\nShift"],
[{y:-0.625,x:6.5,c:"#54d6de",t:"#000000",fa:[0,0,0,1],h:1.5},"Tab >\n\n\nTab",{x:4.5,h:1.5},"< Tab\n\n\nShift Tab"], [{y:-0.625,x:6.5,c:"#ff8500",t:"#000000",fa:[0,0,0,1],h:1.5},"Tab >\n\n\nTab",{x:4.5,h:1.5},"< Tab\n\n\nShift Tab"],
[{y:-0.75,x:3.5,c:"#bbddbb"},"[",{x:10.5,c:"#89b087"},"2"], [{y:-0.75,x:3.5,c:"#bbddbb"},"[",{x:10.5,c:"#89b087"},"2"],
[{y:-0.875,x:2.5,c:"#bbddbb"},"^",{x:1},"]",{x:8.5,c:"#89b087"},"1",{x:1},"3"], [{y:-0.875,x:2.5,c:"#bbddbb"},"^",{x:1},"]",{x:8.5,c:"#89b087"},"1",{x:1},"3"],
[{y:-0.875,x:5.5,c:"#bbddbb"},"~",{x:6.5},"\\"], [{y:-0.875,x:5.5,c:"#bbddbb"},"~",{x:6.5},"\\"],
[{y:-0.875,c:"#2277ff",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#bbddbb"},"%",{x:14.5,c:"#89b087"},"-",{c:"#2277ff",w:1.5},"\n\nCapitals\n\n\n\n\nShift"], [{y:-0.875,c:"#c6c600",t:"#9e0000",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"%",{x:14.5,c:"#89b087"},"-",{c:"#c6c600",t:"#9e0000",w:1.5},"\n\nCapitals\n\n\n\n\nShift"],
[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5,c:"#89b087"},".\n\n\nOption"], [{y:-0.375,x:3.5,c:"#dddd77",t:"#000000"},"Option\n\n\nLAlt",{x:10.5,c:"#89b087"},"."],
[{y:-0.875,x:2.5,c:"#77aaff"},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5,c:"#89b087"},"0\n\n\nCmd",{x:1},"=\n\n\nHyper"], [{y:-0.875,x:2.5,c:"#dddd77"},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5,c:"#89b087"},"0",{x:1},"="],
[{y:-0.75,x:0.5,c:"#77aaff"},"Ctrl\n\n\nLCtrl","Meh",{x:14.5,c:"#89b087"},"+\n\n\nMeh","Enter\n\n\nCtrl"], [{y:-0.75,x:0.5,c:"#dddd77"},"Ctrl\n\n\nLCtrl","Meh",{x:14.5,c:"#89b087"},"+","Enter"],
[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#54d6de"},"Left","Right"], [{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#ff8500"},"Left","Right"],
[{h:2},"Space",{h:2},"Enter","Up"], [{h:2},"Space",{h:2},"Enter","Up"],
[{x:2},"Down"], [{x:2},"Down"],
[{r:-30,rx:13,y:-1,x:-3},"Home","End"], [{r:-30,rx:13,y:-1,x:-3},"Home","End"],

@ -10,66 +10,51 @@ no rights reserved, use for any purposes, credit me if you are a nice person
## The Base Layout ## ## The Base Layout ##
* The light blue keys are modifiers: traditional Control, Option, and Command keys, plus Hyper and Meh * *White Keys* are all the normal characters and symbols in all the normal locations (except for the brackets).
* The dark blue keys are Shift keys: Capitals Shift (traditional shift), Symbol Shift, and Media Shift; plus a Shift Lock key * *Modifier Keys* are light yellow and in the traditional location: Control, Option, Command, plus Hyper and Meh.
* Several dark blue keys double for entry of characters which would typically be in those locations * *Shift Keys* are dark yellow, found on the outsides of the keyboard. Capitals Shift (traditional shift) is found in the usual place and above that is found Symbol Shift, Media Shift, and Special Shift (Shift Lock).
* The turquoise keys are text navigation and manipulation * Several of the shift keys double for entry of characters which would typically be in those locations.
* The red keys is Escape and it is always found in that location no matter what * *Thumb Keys* shown in orange are for text navigation and manipulation.
* *Escape* is red and it is always found in that location no matter what.
![Ordinary base layout](ordinary-base.png) ![Ordinary base layout](ordinary-base.png)
This layout puts the modifier keys along the bottom of the keyboard where they are on most keyboards. They are in the regular order, with the addition of Hyper and Meh keys. The modifier keys are all in the same place on all layers, although some layers also assign symbols on those buttons. On the outside edges are the Shift keys. The traditional shift key is called Capitals Shift and it is in the normal location. Above that are Symbols Shift and Media Shift. Each Shift key momentarily switches the layout to that layer, and if you use the Shift Lock button you can lock the layout to that layer. The four big orange keys are arranged differently than in the default Ergodox EZ layout. The Ordinary Layout here copies the design of the old Fingerworks TouchStream keyboard, but also reflects the natural presumptions of the author -- me! I type the space character with my right hand, and to me it makes sense for the two delete keys to be next to one another.
Touch typists will also find tilde, tab, equals/plus, slash/pipe, and quote/double-quote sharing space on those Shift keys where they would probably be on a common keyboard. Other than the turquoise keys the only buttons which move to new locations are the Brackets and Dash and Escape. Most touch typists dont touch-type brackets or dash anyway so only Escape really requires retraining of muscle memory, and see below for the Special Escape Sequence.
The four big turquoise keys are arranged differently than in the default Ergodox EZ layout. The Ordinary Layout here copies the design of the old Fingerworks TouchStream keyboard, but also reflects the natural presumptions of the author -- me! I type the space character with my right hand, and to me it makes sense for the two delete keys to be next to one another.
The Forward Tab and Backward Tab keys are in their locations mostly because I ended up with two extra buttons and needed something to do with them. My muscle memory from using the Truly Ergonomic Keyboard makes me look for the Tab key with my right index finger, so it is handy to have this redundant Tab, and the idea with the Backward Tab key is that it becomes easy to navigate text fields in forms, or to indent/unindent code. The Forward Tab and Backward Tab keys are in their locations mostly because I ended up with two extra buttons and needed something to do with them. My muscle memory from using the Truly Ergonomic Keyboard makes me look for the Tab key with my right index finger, so it is handy to have this redundant Tab, and the idea with the Backward Tab key is that it becomes easy to navigate text fields in forms, or to indent/unindent code.
## The Symbols Layer ## ## The Symbols Layer ##
* The light green keys are the eponymous symbols * *Symbols* shown in light green. All kinds of brackets are available on this layer. Ampersand and Pipe justapose each other. Pipe, slash, and backslash are arranged in a column.
* The bright green keys are F-Keys * *F-Keys* are bright green and overlay the row of numerals.
* The dark green keys constitute a number pad * *Number pad* in dark green under the right hand includes all four arithmetic operations in the same order found on most number pads and features an Enter key. The keycodes emitted here are normal numeric keycodes, not the number-pad specific keycodes emitted by most number pads so that NumLock is not needed.
* The turquoise keys are the *reverse* of the turquoise keys on the base layer * *Thumb keys* on this layer are the *reverse* of the orange keys on the base layer, with the keys either mirrored or shifted. This is powerful! Often I find myself using the mouse with my right hand, and the left hand needs to press Enter. Instead of reaching the left hand over to the right side of the keyboard, now I simply tap Symbols to reverse the turquoise keys, and Enter is right where it should be.
![Ordinary symbol layout](ordinary-symbol.png) ![Ordinary symbol layout](ordinary-symbol.png)
The Ergodox EZ ships with the "Coder Layer" which I like to call the Symbols layer. There are some significant improvements in The Ordinary Layout over the default layout. The Symbols Layer is based on the Coder Layer from the default Ergodox EZ layout. I slightly rearranged the symbols, added some symbols, expanded the number pad, and straightened out the F-Keys. It's very handy to have the symbols directly underneath the normal typing keys.
The symbol keys are mostly the same as on the default layout, which did a good job in this regard, but with a few enhancements:
* Angle brackets on this layer mean that curly, square, and angle brackets are all available on different layers of the same two buttons. Also, they mean that all kinds of brackets, including parentheses, are available on both the Base and Symbols layers.
* The slash, backslash, and pipe characters are grouped together as a memory aid.
* The & and | symbols are juxtaposed as a memory aid
The number pad area here, in green, includes all four arithmetic operations in the same order found on most number pads and features an Enter key. The keycodes emitted here are normal numeric keycodes, not the number-pad specific keycodes emitted by most number pads, because this layout does not use a Num Lock key to switch the buttons between numeric keycodes and navigational keycodes. See the explanation in The Media Layout section about navigation using these same buttons.
Finally, consider the turquoise text-nav keys. Here in the Symbols layer, these are *reversed* from the base layer, with the keys either mirrored or shifted. This is powerful! Often I find myself using the mouse with my right hand, and the left hand needs to press Enter. Instead of reaching the left hand over to the right side of the keyboard, now I simply tap Symbols to reverse the turquoise keys, and Enter is right where it should be.
## The Media Layer ## ## The Media Layer ##
* The dark orange keys on the left move the mouse cursor * *Mouse Cursor Keys* are under the left hand, shown in dark blue. Diagonal keys won't automatically repeat unless combined with other keys. Buttons to left- middle- and right-click the mouse are also featured.
* The dark orange keys on the right move the text cursor * *Text Cursor Keys* are under the right hand, shown in dark blue. They overlay the numberpad from the Symbols Layer, such that in the Media Layer the same keys can be used as if they were a number pad in navigational mode (Num Lock off). For instance, in traditional number pads the '3' key became 'Page Down', and so it is here. This means a user can do text navigation without moving either hand.
* The light orange keys are for scrolling and paging * *Scrolling and Paging* keys are shown in light blue and have some useful redundancy across the layout.
* The bright green keys are more F-keys * Higher-order *F-Keys* are shown in bright green overylaying the numerals.
* The dark yellow keys signal Web and Audio applications * *Application Keys* to control web browsers and audio players are dark purple but don't get too excited because these have weak support on operating systems I've looked at. Good luck.
* The light yellow keys signal the operating system * The light purple keys are various operating system keys such as NumLock and Mute and a button to navigate to My Computer (usually your home dir).
* The dark gray keys do nothing in case you bump them by accident * The dark gray keys do nothing in case you bump them by accident
![Ordinary media layout](ordinary-media.png) ![Ordinary media layout](ordinary-media.png)
This layer was inspired by the Media layer on the Ergodox EZ but takes it farther. The Fingerworks TouchStream keyboard had a very useful feature for controlling the text cursor easily and this layer does something similar. The left hand can move the mouse, the right hand moves the text cursor, in all four directions, in small or large increments. This greatly enhances navigation in text documents. This layer is a substantial extension of the Media layer on the Ergodox EZ default layout. The Fingerworks TouchStream keyboard had a very useful feature for controlling the text cursor easily and this layer does something similar. The left hand can move the mouse, the right hand moves the text cursor, in all four directions, in small or large increments. This greatly enhances navigation in text documents.
Moreover, the orange keys on the right overlay the numberpad from the Symbols Layer, such that in the Media Layer the same keys can be used as if they were a number pad in navigational mode (Num Lock off). For instance, in traditional number pads the '3' key became 'Page Down', and so it is here. This means a user can do text navigation without moving either hand. Keys to directly interact with the operating system are also found on this layer, such as volume and shutdown.
Alas, the yellow keys have at best spotty success with common software. Good luck with those but don't expect too much.
## Switching Between Layers ## ## Switching Between Layers ##
In addition to Symbols and Media there is the Capitals layer which is exactly the same as pressing the shift key. Each layer is accessed by a shift key on each edge of the keyboard and corresponds to one of the three LEDs on the keyboard: Capitals (red), Symbols (green), Media (blue). The color of a layer illuminates when the layer is active. In addition to Symbols and Media there is the Capitals layer which is exactly the same as pressing the shift key. Each layer is accessed by a shift key on each edge of the keyboard and corresponds to one of the three LEDs on the keyboard: Capitals (red), Symbols (green), Media (blue). The color of a layer illuminates when the layer is active.
Shift buttons work in the expected way: press them and all of the keys switch to that layer; release them and the keys switch back to the base layer. If you press both of a pair of shift keys, the layer will lock on until you press both shift keys again. For instance, the widely and rightly loathed Caps Lock is engaged by pressing both Capitals Shift buttons. All the Shift keys work this way. Shift buttons work in the expected way: press them and all of the keys switch to that layer; release them and the keys switch back to the base layer. Lock the shift keys using the Shift Lock button, which is the same as the Special Shift button.
Multiple layers can be turned on at once. The Capitals layer will affect characters on other layers to capitalize. Other layers, however, don't 'mix': Symbols blankets the base layout; Media blankets Symbols. Multiple layers can be turned on at once. The Capitals layer will affect characters on other layers to capitalize. Other layers, however, don't 'mix': Symbols blankets the base layout; Media blankets Symbols.
@ -77,27 +62,29 @@ Multiple layers can be turned on at once. The Capitals layer will affect charact
![Ordinary special layout](ordinary-special.png) ![Ordinary special layout](ordinary-special.png)
The Special Shift layer is mostly used to lock the shift keys but in order to make this layout more _ordinary_ there are a few special sequences which put some keys near their most common traditional locations.
### Escape ### ### Escape ###
The One True Location for the Escape key is segregated way up on the top left of the keyboard. The Ergodox does not have a physical button in such a location and the nearest one is home to the tilde (er, grave) which is commonly found there. In the Ordinary layout the Escape key is found on all layers in the prominent location in the corner next to the 5, whnich is easy to remember, and yet it isn't natural for those of us with muscle memory flicking our wrists up and to the left looking for Escape. The One True Location for the Escape key is segregated way up on the top left of the keyboard. The Ergodox does not have a physical button in such a location and the nearest one is home to the tilde (er, grave) which is commonly found there. In the Ordinary layout the Escape key is found on all layers in the prominent location in the corner next to the 5, which is easy to remember, and yet it isn't natural for those of us with muscle memory flicking our wrists up and to the left looking for Escape.
The Ordinary layout offers as a consolation prize a Special sequence for Escape: Special Shift + 1. This is natural so you can tap the top left button, then the button next to it and get Escape. This gesture works in all layers. The Ordinary layout offers as a consolation prize a Special sequence for Escape: Special Shift + 1. This is natural so you can tap the top left button, then the button next to it and get Escape. This gesture works in all layers.
### Backspace ### ### Backspace ###
At the top right corner of the Ergodox EZ you can a gesture similar to the special Escape sequence, using the 0 key, to produce a Backspace. Users of this keyboard and this layout are well advised to learn to use their thumbs for deleting text, but sometimes you are doing other computery things and just want to flick your digits up to the right and press backspace a bunch times. At the top right corner of the Ergodox EZ you can a gesture similar to the special Escape sequence using the 0 key to produce a Backspace. Users of this keyboard and this layout are well advised to learn to use their thumbs for deleting text, but sometimes you are doing other computery things and just want to flick your digits up to the right and press backspace a bunch times.
### RShift ### ### Other Characters ###
The Ordinary Layout locks layers by pressing both of a pair of shift keys. This interferes with the QMK firmware magic sequence, which is LShift+RShift. To work around this, both of the Capitals Shift keys produce a *Left Shift* keystroke. If for some reason a person needs *Right Shift* they can find it by pressing a Special Shift key, then the Capitals Shift key on the right side of the keyboard. The Escape and Backspace special sequences are so useful why not have a few more? You can find dash under 9, left bracket under o, and right bracket under p. That's pretty much all the characters from the top right corner of the keyboard which moved to make room for the columnar layout.
**** ****
The Ordinary Layout for the Ergodox EZ keyboard, v4 The Ordinary Layout for the Ergodox EZ keyboard, v4.20
Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com
No rights reserved. This software is in the public domain. Credit me if you are friendly but if you're a jerk don't bother. No rights reserved. This software is in the public domain. Credit me if you are friendly but if you're a jerk don't bother.
Details: readme.md Details: readme.md
https://github.com/nrrkeene/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/ordinary https://github.com/nrrkeene/qmk_firmware/tree/master/keyboards/ergodox/keymaps/ordinary

@ -1,8 +1,4 @@
/* /*
* PLEASE NOTE: This keymap will NOT work with the Infinity ErgoDox due to the fact that the mappings are
* based on the Matrix Layout in the ez.h file. If you want to use this for the infinity, you'll need to
* figure out where the keys are in the matrix and redo the layout arrays below.
*
* About this keymap: * About this keymap:
* *
* The Dvorak layout shown herestems from my early Kinesis years, using the Contour PS/2 with a Dvorak * The Dvorak layout shown herestems from my early Kinesis years, using the Contour PS/2 with a Dvorak
@ -14,9 +10,6 @@
* *
* I've enabled persistent keymaps for Qwerty, Dvorak and Colemak layers, similar to the default Planck * I've enabled persistent keymaps for Qwerty, Dvorak and Colemak layers, similar to the default Planck
* layouts. * layouts.
*
* For a better explanation of the layout matrices shown below, take a look at ../../ez/ez.h where the
* keymap is defined, beginning on line 81.
* *
*/ */
@ -38,213 +31,222 @@ extern keymap_config_t keymap_config;
#define QWERTY M(_QW) #define QWERTY M(_QW)
#define COLEMAK M(_CM) #define COLEMAK M(_CM)
// Fillers to make layering more clear
#define _______ KC_TRNS
#define XXXXXXX KC_NO
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_DV] = { // layer 0 : Dvorak /* Layer 0 : Dvorak
/* * ,--------------------------------------------------. ,--------------------------------------------------.
* ,--------------------------------------------------. ,--------------------------------------------------. * | ] | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | [ |
* | ] | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | [ | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | Tab | ' | , | . | P | Y | | | | F | G | C | R | L | \ |
* | Tab | ' | , | . | Y | Y | | | | F | G | C | R | L | \ | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | CapsLk | A | O | E | U | I |------| |------| D | H | T | N | S | - |
* | CapsLk | A | O | E | U | I |------| |------| D | H | T | N | S | - | * |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------|
* |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| * | LShift | ; | Q | J | K | X | | | | B | M | W | V | Z | RShift |
* | LShift | Z | X | C | V | X | | | | B | M | W | V | Z | RShift | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * | LGUI | ` | INS | Left | Rght | | Up | Dn | / | = | RGUI |
* | LGUI | ` | INS | Left | Rght | | Up | Dn | / | = | RGUI | * `----------------------------------' `----------------------------------'
* `----------------------------------' `----------------------------------' * ,-------------. ,-------------.
* ,-------------. ,-------------. * | LCTL | LALT | | RALT | RCTL |
* | LCtr | LAlt | | Ralt | RCtr | * ,------|------|------| |------+------+------.
* ,------|------|------| |------+------+------. * | | | Home | | PgUp | | |
* | | | Home | | PgUp | | | * | BkSp | Del |------| |------| Enter| Space|
* | BkSp | Del |------| |------| Enter| Space| * | | | End | | PgDn | | |
* | | | End | | PgDn | | | * `--------------------' `--------------------'
* `--------------------' `--------------------'
* *
*/ */
[_DV] = KEYMAP(
// left hand // left hand
{KC_RBRC, KC_TAB, KC_CAPS, KC_LSFT, KC_LGUI, KC_NO }, KC_RBRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
{KC_1, KC_QUOT, KC_A, KC_SCLN, KC_GRV, KC_END }, KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, XXXXXXX,
{KC_2, KC_COMM, KC_O, KC_Q, KC_INS, KC_DEL }, KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I,
{KC_3, KC_DOT, KC_E, KC_J, KC_LEFT, KC_BSPC}, KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, MO(_MD),
{KC_4, KC_P, KC_U, KC_K, KC_RGHT, KC_HOME}, KC_LGUI, KC_GRV, KC_INS, KC_LEFT, KC_RGHT,
{KC_5, KC_Y, KC_I, KC_X, KC_NO, KC_LCTL}, KC_LCTL, KC_LALT,
{KC_ESC, KC_NO, KC_NO, MO(_MD), KC_NO, KC_LALT}, KC_HOME,
KC_BSPC, KC_DEL, KC_END,
// right hand // right hand
{KC_ESC, KC_NO, KC_NO, MO(_KP), KC_NO, KC_RALT}, KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC,
{KC_6, KC_F, KC_D, KC_B, KC_NO, KC_RCTL}, XXXXXXX, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSLS,
{KC_7, KC_G, KC_H, KC_M, KC_UP, KC_PGUP}, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
{KC_8, KC_C, KC_T, KC_W, KC_DOWN, KC_SPC }, MO(_KP), KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
{KC_9, KC_R, KC_N, KC_V, KC_SLSH, KC_ENT }, KC_UP, KC_DOWN, KC_SLSH, KC_EQL, KC_RGUI,
{KC_0, KC_L, KC_S, KC_Z, KC_EQL, KC_PGDN}, KC_RALT, KC_RCTL,
{KC_LBRC, KC_BSLS, KC_MINS, KC_RSFT, KC_RGUI, KC_NO } KC_PGUP,
}, KC_PGDN, KC_ENT, KC_SPC
),
[_QW] = { // layer 1 : QWERTY
/* /* Layer 1: QWERTY
* ,--------------------------------------------------. ,--------------------------------------------------. * ,--------------------------------------------------. ,--------------------------------------------------.
* | = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - | * | = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | Tab | Q | W | E | R | T | | | | Y | U | I | O | P | \ | * | Tab | Q | W | E | R | T | | | | Y | U | I | O | P | \ |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | CapsLk | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | * | CapsLk | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
* |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| * |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------|
* | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | LGUI | ` | INS | Left | Rght | | Up | Dn | [ | ] | RGUI | * | LGUI | ` | INS | Left | Rght | | Up | Dn | / | = | RGUI |
* `----------------------------------' `----------------------------------' * `----------------------------------' `----------------------------------'
* ,-------------. ,-------------. * ,-------------. ,-------------.
* | LCtr | LAlt | | Ralt | RCtr | * | LCTL | LALT | | RALT | RCTL |
* ,------|------|------| |------+------+------. * ,------|------|------| |------+------+------.
* | | | Home | | PgUp | | | * | | | Home | | PgUp | | |
* | BkSp | Del |------| |------| Enter| Space| * | BkSp | Del |------| |------| Enter| Space|
* | | | End | | PgDn | | | * | | | End | | PgDn | | |
* `--------------------' `--------------------' * `--------------------' `--------------------'
*/ */
[_QW] = KEYMAP(
// left hand // left hand
{KC_EQL, KC_TAB, KC_CAPS, KC_LSFT, KC_LGUI, KC_NO }, KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
{KC_1, KC_Q, KC_A, KC_Z, KC_GRV, KC_END }, KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, XXXXXXX,
{KC_2, KC_W, KC_S, KC_X, KC_INS, KC_DEL }, KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
{KC_3, KC_E, KC_D, KC_C, KC_LEFT, KC_BSPC}, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(_MD),
{KC_4, KC_R, KC_F, KC_V, KC_RGHT, KC_HOME}, KC_LGUI, KC_GRV, KC_INS, KC_LEFT, KC_RGHT,
{KC_5, KC_T, KC_G, KC_B, KC_NO, KC_LCTL}, KC_LCTL, KC_LALT,
{KC_ESC, KC_NO, KC_NO, MO(_MD), KC_NO, KC_LALT}, KC_HOME,
KC_BSPC, KC_DEL, KC_END,
// right hand // right hand
{KC_ESC, KC_NO, KC_NO, MO(_KP), KC_NO, KC_RALT}, KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
{KC_6, KC_Y, KC_H, KC_N, KC_NO, KC_RCTL}, XXXXXXX, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
{KC_7, KC_U, KC_J, KC_M, KC_UP, KC_PGUP}, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
{KC_8, KC_I, KC_K, KC_COMM, KC_DOWN, KC_SPC }, MO(_KP), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
{KC_9, KC_O, KC_L, KC_DOT, KC_LBRC, KC_ENT }, KC_UP, KC_DOWN, KC_LBRC, KC_RBRC, KC_RGUI,
{KC_0, KC_P, KC_SCLN, KC_SLSH, KC_RBRC, KC_PGDN}, KC_LALT, KC_LCTL,
{KC_MINS, KC_BSLS, KC_QUOT, KC_RSFT, KC_RGUI, KC_NO } KC_PGUP,
}, KC_PGDN, KC_ENT, KC_SPC
),
[_CM] = { // layer 2 : Colemak
/* /* Layer 2 : Colemak
* ,--------------------------------------------------. ,--------------------------------------------------. * ,--------------------------------------------------. ,--------------------------------------------------.
* | = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - | * | = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | Tab | Q | W | F | P | G | | | | J | L | U | Y | ; | \ | * | Tab | Q | W | F | P | G | | | | J | L | U | Y | ; | \ |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | BkSpc | A | R | S | T | D |------| |------| H | N | E | I | O | ' | * | BkSpc | A | R | S | T | D |------| |------| H | N | E | I | O | ' |
* |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------| * |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------|
* | LShift | Z | X | C | V | B | | | | K | M | , | . | / | RShift | * | LShift | Z | X | C | V | B | | | | K | M | , | . | / | RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | LGUI | ` | INS | Left | Rght | | Up | Dn | [ | ] | RGUI | * | LGUI | ` | INS | Left | Rght | | Up | Dn | / | = | RGUI |
* `----------------------------------' `----------------------------------' * `----------------------------------' `----------------------------------'
* ,-------------. ,-------------. * ,-------------. ,-------------.
* | LCtr | LAlt | | Ralt | RCtr | * | LCTL | LALT | | RALT | RCTL |
* ,------|------|------| |------+------+------. * ,------|------|------| |------+------+------.
* | | | Home | | PgUp | | | * | | | Home | | PgUp | | |
* | BkSp | Del |------| |------| Enter| Space| * | BkSp | Del |------| |------| Enter| Space|
* | | | End | | PgDn | | | * | | | End | | PgDn | | |
* `--------------------' `--------------------' * `--------------------' `--------------------'
*/ */
[_CM] = KEYMAP(
// left hand // left hand
{KC_EQL, KC_TAB, KC_BSPC, KC_LSFT, KC_LGUI, KC_NO }, KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
{KC_1, KC_Q, KC_A, KC_Z, KC_GRV, KC_END }, KC_DELT, KC_Q, KC_W, KC_F, KC_P, KC_G, XXXXXXX,
{KC_2, KC_W, KC_R, KC_X, KC_INS, KC_DEL }, KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D,
{KC_3, KC_F, KC_S, KC_C, KC_LEFT, KC_BSPC}, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(_MD),
{KC_4, KC_P, KC_T, KC_V, KC_RGHT, KC_HOME}, KC_LGUI, KC_GRV, KC_INS, KC_LEFT, KC_RGHT,
{KC_5, KC_G, KC_D, KC_B, KC_NO, KC_LCTL}, KC_LCTL, KC_LALT,
{KC_ESC, KC_NO, KC_NO, MO(_MD), KC_NO, KC_LALT}, KC_HOME,
KC_BSPC, KC_DEL, KC_END,
// right hand // right hand
{KC_ESC, KC_NO, KC_NO, MO(_KP), KC_NO, KC_RALT}, KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
{KC_6, KC_J, KC_H, KC_K, KC_NO, KC_RCTL}, XXXXXXX, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
{KC_7, KC_L, KC_N, KC_M, KC_UP, KC_PGUP}, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
{KC_8, KC_U, KC_E, KC_COMM, KC_DOWN, KC_SPC }, MO(_KP), KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
{KC_9, KC_Y, KC_I, KC_DOT, KC_LBRC, KC_ENT }, KC_UP, KC_DOWN, KC_LBRC, KC_RBRC, KC_RGUI,
{KC_0, KC_SCLN, KC_O, KC_SLSH, KC_RBRC, KC_PGDN}, KC_LALT, KC_LCTL,
{KC_MINS, KC_BSLS, KC_QUOT, KC_RSFT, KC_RGUI, KC_NO } KC_PGUP,
}, KC_PGDN, KC_ENT, KC_SPC
),
[_MD] = { // layer 3 : Media layer
/* /* Layer 3 : Media layer
* ,--------------------------------------------------. ,--------------------------------------------------. * ,--------------------------------------------------. ,--------------------------------------------------.
* | TEENSY | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | | * | TEENSY | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | PrSc | ScLk | Paus | | | | | | Mute | Vol- | Vol+ | | | * | | | PrSc | ScLk | Paus | | | | | | Mute | Vol- | Vol+ | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | |------| |------| Stop | Prev | Play | Next | Sel | | * | | | | | | |------| |------| Stop | Prev | Play | Next | Sel | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | |Dvorak|Qwerty|Colemk| | | | | | | | | | | * | | |Dvorak|Qwerty|Colemk| | | | | | | | | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | | | | | * | | | | | | | | | | | |
* `----------------------------------' `----------------------------------' * `----------------------------------' `----------------------------------'
* ,-------------. ,-------------. * ,-------------. ,-------------.
* | | | | | | * | | | | | |
* ,------|------|------| |------+------+------. * ,------|------|------| |------+------+------.
* | | | | | | | | * | | | | | | | |
* | | |------| |------| | | * | | |------| |------| | |
* | | | | | | | | * | | | | | | | |
* `--------------------' `--------------------' * `--------------------' `--------------------'
*/ */
[_MD] = KEYMAP(
// left hand // left hand
{RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO }, RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11,
{KC_F1, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______,
{KC_F2, KC_PSCR, KC_TRNS, DVORAK, KC_TRNS, KC_TRNS}, _______, _______, _______, _______, _______, _______,
{KC_F3, KC_SLCK, KC_TRNS, QWERTY, KC_TRNS, KC_TRNS}, _______, _______, DVORAK, QWERTY, COLEMAK, _______, _______,
{KC_F4, KC_PAUS, KC_TRNS, COLEMAK, KC_TRNS, KC_TRNS}, _______, _______, _______, _______, _______,
{KC_F5, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS}, _______, _______,
{KC_F11, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_TRNS}, _______,
_______, _______, _______,
// right hand // right hand
{KC_F12, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_TRNS}, KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
{KC_F6, KC_TRNS, KC_MSTP, KC_TRNS, KC_NO, KC_TRNS}, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
{KC_F7, KC_MUTE, KC_MPRV, KC_TRNS, KC_TRNS, KC_TRNS}, KC_MSTP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSEL, _______,
{KC_F8, KC_VOLD, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS}, _______, _______, _______, _______, _______, _______, _______,
{KC_F9, KC_VOLU, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS}, _______, _______, _______, _______, _______,
{KC_F10, KC_TRNS, KC_MSEL, KC_TRNS, KC_TRNS, KC_TRNS}, _______, _______,
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO } _______,
}, _______, _______, _______
),
[_KP] = { // layer 4 : Keypad layer
/* /* Layer 4 : Keypad layer
* ,--------------------------------------------------. ,--------------------------------------------------. * ,--------------------------------------------------. ,--------------------------------------------------.
* | Power | | | | | | | | | | NmLk | KP / | KP * | KP - | | * | Power | | | | | | | | | | NmLk | KP = | KP / | KP * | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | Sleep | | | | | | | | | | KP 7 | KP 8 | KP 9 | KP + | | * | Sleep | | | | | | | | | | KP 7 | KP 8 | KP 9 | KP - | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | Wake | | | | | |------| |------| | KP 4 | KP 5 | KP 6 | KP + | | * | Wake | | | | | |------| |------| | KP 4 | KP 5 | KP 6 | KP + | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | | | | | | KP 1 | KP 2 | KP 3 |KP Ent| | * | | | | | | | | | | | KP 1 | KP 2 | KP 3 |KP Ent| |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | KP 0 | | KP . |KP Ent| | * | | | | | | | KP 0 | | KP . |KP Ent| |
* `----------------------------------' `----------------------------------' * `----------------------------------' `----------------------------------'
* ,-------------. ,-------------. * ,-------------. ,-------------.
* | | | | | | * | | | | | |
* ,------|------|------| |------+------+------. * ,------|------|------| |------+------+------.
* | | | | | | | | * | | | | | | | |
* | | |------| |------| | | * | | |------| |------| | |
* | | | | | | | | * | | | | | | | |
* `--------------------' `--------------------' * `--------------------' `--------------------'
*/ */
[_KP] = KEYMAP(
// left hand // left hand
{KC_PWR, KC_SLEP, KC_WAKE, KC_TRNS, KC_TRNS, KC_NO }, KC_PWR, _______, _______, _______, _______, _______, _______,
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, KC_SLEP, _______, _______, _______, _______, _______, _______,
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, KC_WAKE, _______, _______, _______, _______, _______,
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, _______, _______, _______, _______, _______, _______, _______,
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, _______, _______, _______, _______, _______,
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS}, _______, _______,
{KC_TRNS, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_TRNS}, _______,
_______, _______, _______,
// right hand // right hand
{KC_TRNS, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_TRNS}, _______, _______, KC_NLCK, KC_PEQL, KC_PSLS, KC_PAST, _______,
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS}, _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, _______,
{KC_NLCK, KC_P7, KC_P4, KC_P1, KC_P0, KC_TRNS}, _______, KC_P4, KC_P5, KC_P6, KC_PPLS, _______,
{KC_PSLS, KC_P8, KC_P5, KC_P2, KC_NO, KC_TRNS}, _______, _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______,
{KC_PAST, KC_P9, KC_P6, KC_P3, KC_PDOT, KC_TRNS}, KC_P0, _______, KC_PDOT, KC_PENT, _______,
{KC_PMNS, KC_PPLS, KC_PPLS, KC_PENT, KC_PENT, KC_TRNS}, _______, _______,
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO } _______,
}, _______, _______, _______
),
}; };

@ -1,9 +1,5 @@
# Xyverz's ErgoDox EZ Keymap # Xyverz's ErgoDox EZ Keymap
## Please Note:
This keymap will probably **not** work with the Infinity ErgoDox. It will need **substantial** modification in order to work on the Infinity. This is due to the fact that the mappings are based on the matrix positions in the keymap definition in the ez.h file. If you want to use this for the infinity, you'll need to figure out where the keys are in the matrix and redo the layout arrays below.
## About this keymap: ## About this keymap:
The Dvorak layout shown herestems from my early Kinesis years, using the Contour PS/2 with a Dvorak software layout. Because of this, the RBRC and LBRC were on opposite sides of the board in the corner keys. I've decided to continue using this layout with my ErgoDox. The Dvorak layout shown herestems from my early Kinesis years, using the Contour PS/2 with a Dvorak software layout. Because of this, the RBRC and LBRC were on opposite sides of the board in the corner keys. I've decided to continue using this layout with my ErgoDox.
@ -12,7 +8,11 @@ The QWERTY layout shown here is based entirely on the Kinesis Advantage layout,
I've enabled persistent keymaps for Qwerty, Dvorak and Colemak layers, similar to the default Planck layouts. I've enabled persistent keymaps for Qwerty, Dvorak and Colemak layers, similar to the default Planck layouts.
For a better explanation of the layout matrices shown below, take a look at ../../ez/ez.h where the keymap is defined, beginning on line 81. ## Still to do:
* Need to figure out a better position for the ESC key.
* Come up with a function for the empty keys shown in the alpha layers below.
* Fix the CapsLock, NumLock, and ScrLck LEDs.
### Layer 0: Dvorak layer ### Layer 0: Dvorak layer
@ -103,9 +103,9 @@ For a better explanation of the layout matrices shown below, take a look at ../.
### Keymap 4: Keypad layer ### Keymap 4: Keypad layer
,--------------------------------------------------.,--------------------------------------------------. ,--------------------------------------------------.,--------------------------------------------------.
| Power | | | | | | || | | NmLk | KP / | KP * | KP - | | | Power | | | | | | || | | NmLk | KP = | KP / | KP * | |
|--------+------+------+------+------+-------------||------+------+------+------+------+------+--------| |--------+------+------+------+------+-------------||------+------+------+------+------+------+--------|
| Sleep | | | | | | || | | KP 7 | KP 8 | KP 9 | KP + | | | Sleep | | | | | | || | | KP 7 | KP 8 | KP 9 | KP - | |
|--------+------+------+------+------+------| || |------+------+------+------+------+--------| |--------+------+------+------+------+------| || |------+------+------+------+------+--------|
| Wake | | | | | |------||------| | KP 4 | KP 5 | KP 6 | KP + | | | Wake | | | | | |------||------| | KP 4 | KP 5 | KP 6 | KP + | |
|--------+------+------+------+------+------| || |------+------+------+------+------+--------| |--------+------+------+------+------+------| || |------+------+------+------+------+--------|
@ -119,4 +119,4 @@ For a better explanation of the layout matrices shown below, take a look at ../.
| | | || | | | | | | || | | |
| | |------||------| | | | | |------||------| | |
| | | || | | | | | | || | | |
`--------------------'`--------------------' `--------------------'`--------------------'

@ -0,0 +1,17 @@
# Workman dead with spacefn (kc60 @ QMK)
## Layout reference
![workman dead with spacefn](./kc60-wm-dead.png)
## Build
To build this keymap, simply run `make KEYMAP=workman-dead`.
## Notes
* the default layout is `workman` (try it out, it's awesome!), but it can be changed to `qwerty` with the `rebel` key (the function layer won't change though)
* `comma` acts as a dead key, that means tapping/holding it will activate the **oneshot** `dead key` layer (marked red in the reference)
* hold `space` to access the `function` layer (marked blue in the reference)
* hold `tab` to activate the mouse layer
* the `function` layer contains mostly osx specific shortcuts
* on the right side of the bottom row `alt` and `super` are switched compared to a standard layout

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

@ -0,0 +1,183 @@
#include "kc60.h"
#define _WM 0
#define _QW 1
#define _DK 2
#define _FUN 3
#define _MS 4
#define _______ KC_NO
#define XXXXXXX KC_TRNS
#define _DK_ACT 0
#define _DK_REL 1
#define _KC_COMS 2
#define _KC_CENT 3
#define DK_ACT M(_DK_ACT) // activate dead key layer
#define DK_REL M(_DK_REL) // release dead key layer
#define KC_COMS M(_KC_COMS) // comma + space
#define KC_CENT M(_KC_CENT) // comma + enter
#define KC_TABM LT(_MS, KC_TAB) // press for tab, hold for mouse layer
#define KC_SPFN LT(_FUN, KC_SPC) // press for space, hold for function layer (aka spacefn)
#define KC_DFQW DF(_QW) // set default layer to qwerty
#define KC_DFWM DF(_WM) // set default layer to workman
#define KC_CMDQ LGUI(KC_Q) // command + q
#define KC_CMDD LGUI(KC_D) // command + d
#define KC_CMDA LGUI(KC_A) // command + a
#define KC_CMDS LGUI(KC_S) // command + s
#define KC_CMDZ LGUI(KC_Z) // command + z
#define KC_CMDX LGUI(KC_X) // command + x
#define KC_CMDC LGUI(KC_C) // command + c
#define KC_CMDV LGUI(KC_V) // command + v
#define KC_CSTB S(RCTL(KC_TAB)) // shift + control + tab
#define KC_C_TB RCTL(KC_TAB) // control + tab
#define KC_C_LF RCTL(KC_LEFT) // control + left
#define KC_C_RT RCTL(KC_RGHT) // control + right
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Workman
/*
* ,-----------------------------------------------------------.
* |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Bsp |
* |-----------------------------------------------------------|
* |Tab/M| Q| D| R| W| B| J| F| U| P| ;| [| ]| \ |
* |-----------------------------------------------------------|
* |Ctrl | A| S| H| T| G| Y| N| E| O| I| '| Return |
* |-----------------------------------------------------------|
* |Shift | Z| X| M| C| V| K| L| ,| .| /| Shift |
* |-----------------------------------------------------------|
* |Ctrl | Alt | GUI | Space/FN | Alt | GUI | Ctrl | qwerty |
* `-----------------------------------------------------------'
*/
[_WM] = KEYMAP( /* Workman */
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
KC_TABM, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, \
KC_LCTL, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT, _______, KC_ENT, \
KC_LSFT, _______, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, DK_ACT, KC_DOT, KC_SLSH, _______, KC_RSFT, \
KC_LCTL, KC_LALT, KC_LGUI, KC_SPFN, KC_RALT, KC_RGUI, KC_RCTL, KC_DFQW),
// QWERTY
/*
* ,-----------------------------------------------------------.
* |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Bsp |
* |-----------------------------------------------------------|
* |Tab/M| Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |
* |-----------------------------------------------------------|
* |Ctrl | A| S| D| F| G| H| J| K| L| ;| '| Return |
* |-----------------------------------------------------------|
* |Shift | Z| X| C| V| B| N| M| ,| .| /| Shift |
* |-----------------------------------------------------------|
* |Ctrl | Alt | GUI | Space/FN | Alt | GUI | Ctrl | workman |
* `-----------------------------------------------------------'
*/
[_QW] = KEYMAP( /* QWERTY */
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
KC_TABM, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, _______, KC_ENT, \
KC_LSFT, _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, DK_ACT, KC_DOT, KC_SLSH, _______, KC_RSFT, \
KC_LCTL, KC_LALT, KC_LGUI, KC_SPFN, KC_RALT, KC_RGUI, KC_RCTL, KC_DOWN),
// dead key layer
/*
* ,-----------------------------------------------------------.
* | | | | | | | | | | | | | | Bsp |
* |-----------------------------------------------------------|
* | | %| &| ?| +| @| $| _| [| ]| !| ~| ^| |
* |-----------------------------------------------------------|
* | | #| (| =| 0| {| }| 1| *| )| -| `| Return |
* |-----------------------------------------------------------|
* | | 6| 7| 8| 9| || \| 2| 3| 4| 5| |
* |-----------------------------------------------------------|
* |Ctrl | Alt | GUI | , | Alt | GUI | Ctrl | |
* `-----------------------------------------------------------'
*/
[_DK] = KEYMAP( /* dead key layer */
XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BSPC, \
XXXXXXX, KC_PERC, KC_AMPR, KC_QUES, KC_PLUS, KC_AT, KC_DLR, KC_UNDS, KC_LBRC, KC_RBRC, KC_EXLM, KC_TILD, KC_CIRC, _______, \
_______, KC_HASH, KC_LPRN, KC_EQL, KC_0, KC_LCBR, KC_RCBR, KC_1, KC_ASTR, KC_RPRN, KC_MINS, KC_GRV, _______, KC_CENT, \
_______, _______, KC_6, KC_7, KC_8, KC_9, KC_PIPE, KC_BSLS, KC_2, DK_REL, KC_4, KC_5, _______, _______, \
KC_LCTL, KC_LALT, KC_LGUI, KC_COMS, KC_RALT, KC_RGUI, KC_RCTL, _______),
// function layer
/*
* ,-----------------------------------------------------------.
* | | F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12|Del |
* |-----------------------------------------------------------|
* |Esc | Cq| Cd|cstb|ctb| | |pgd| up|pgu| | | |ins |
* |-----------------------------------------------------------|
* |Shift | Ca| Cs|clt|crt| | | lt| dw| rt|home|end| Bsp |
* |-----------------------------------------------------------|
* |Shift | Cz| Cx| | Cc| Cv| V-| V+|mute| | | |
* |-----------------------------------------------------------|
* |Ctrl | Alt | GUI | | Alt | GUI | Ctrl | Reset |
* `-----------------------------------------------------------'
*/
[_FUN] = KEYMAP( /* function layer */
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
KC_ESC, KC_CMDQ, KC_CMDD, KC_CSTB, KC_C_TB, _______, _______, KC_PGDN, KC_UP, KC_PGUP, _______, _______, _______, KC_INS, \
KC_LSFT, KC_CMDA, KC_CMDS, KC_C_LF, KC_C_RT, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, KC_END, _______, KC_BSPC, \
KC_LSFT, _______, KC_CMDZ, KC_CMDX, _______, KC_CMDC, KC_CMDV, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______, _______, \
KC_LCTL, KC_LALT, KC_LGUI, KC_TRNS, KC_RALT, KC_RGUI, KC_RCTL, RESET),
// mouse layer
/*
* ,-----------------------------------------------------------.
* | | | | | | | | | | | | | | |
* |-----------------------------------------------------------|
* | |fast|med|slow| | | | | up| | | | | |
* |-----------------------------------------------------------|
* | | | | | | | | lt| dw| rt| rc| | |
* |-----------------------------------------------------------|
* | | | | | | | | | | | | |
* |-----------------------------------------------------------|
* | | | | lc | | | | |
* `-----------------------------------------------------------'
*/
[_MS] = KEYMAP( /* mouse layer */
XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
XXXXXXX, KC_ACL2, KC_ACL1, KC_ACL0, _______, _______, _______, _______, KC_MS_U, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN2, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, KC_BTN1, _______, _______, _______, _______),
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
switch(id) {
case _KC_COMS:
if (record->event.pressed) {
return MACRO(T(COMM), T(SPC), END); // comma + space
}
break;
case _KC_CENT:
if (record->event.pressed) {
return MACRO(T(COMM), T(ENT), END); // comma + enter
}
break;
case _DK_ACT:
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) || keyboard_report->mods & MOD_BIT(KC_RSFT)) { // act as comma when shift is pressed (eg <)
register_code(KC_COMM);
} else { // activate oneshot dead key layer otherwise
layer_on(_DK);
set_oneshot_layer(_DK, ONESHOT_START);
}
} else { // make sure to deactive dead key layer on key release
clear_oneshot_layer_state(ONESHOT_PRESSED);
unregister_code(KC_COMM);
}
break;
case _DK_REL:
if (record->event.pressed) { // act as 3 on keypress
register_code(KC_3);
} else { // make sure to deactive dead key layer on key release
clear_oneshot_layer_state(ONESHOT_PRESSED);
unregister_code(KC_3);
}
break;
}
return MACRO_NONE;
};

@ -0,0 +1,77 @@
# MCU name
#MCU = at90usb1287
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
# change yes to no to disable
#
BOOTMAGIC_ENABLE ?= no # 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
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE ?= no # USB Nkey Rollover
BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
MIDI_ENABLE ?= no # MIDI controls
UNICODE_ENABLE ?= no # Unicode
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE ?= no # Audio output on port C6
CUSTOM_MATRIX = yes
SRC += matrix.c led.c
ifndef QUANTUM_DIR
include ../../Makefile
endif

@ -0,0 +1,162 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef CONFIG_H
#define CONFIG_H
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x6050
#define DEVICE_VER 0x0104
#define MANUFACTURER Costar
#define PRODUCT Majestouch
/* key matrix size */
#define MATRIX_ROWS 8
#define MATRIX_COLS 18
/*
* Keyboard Matrix Assignments
*
* Change this to how you wired your keyboard
* COLS: AVR pins used for columns, left to right
* ROWS: AVR pins used for rows, top to bottom
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
//#define MATRIX_ROW_PINS { D0, D5 }
//#define MATRIX_COL_PINS { F1, F0, B0 }
//#define UNUSED_PINS
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
// #define BACKLIGHT_PIN B7
// #define BACKLIGHT_BREATHING
// #define BACKLIGHT_LEVELS 3
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCING_DELAY 5
/* define if matrix has ghost (lacks anti-ghosting diodes) */
//#define MATRIX_HAS_GHOST
/* number of backlight levels */
/* 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
/*
* Force NKRO
*
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
* makefile for this to work.)
*
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
* until the next keyboard reset.
*
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
* fully operational during normal computer usage.
*
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
* power-up.
*
*/
//#define FORCE_NKRO
/*
* Magic Key Options
*
* Magic keys are hotkey commands that allow control over firmware functions of
* the keyboard. They are best used in combination with the HID Listen program,
* found here: https://www.pjrc.com/teensy/hid_listen.html
*
* The options below allow the magic key functionality to be changed. This is
* useful if your keyboard/keypad is missing keys and you want magic key support.
*
*/
/* key combination for magic key command */
#define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
/* control how magic key switches layers */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
/* override magic key keymap */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
//#define MAGIC_KEY_HELP1 H
//#define MAGIC_KEY_HELP2 SLASH
//#define MAGIC_KEY_DEBUG D
//#define MAGIC_KEY_DEBUG_MATRIX X
//#define MAGIC_KEY_DEBUG_KBD K
//#define MAGIC_KEY_DEBUG_MOUSE M
//#define MAGIC_KEY_VERSION V
//#define MAGIC_KEY_STATUS S
//#define MAGIC_KEY_CONSOLE C
//#define MAGIC_KEY_LAYER0_ALT1 ESC
//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
//#define MAGIC_KEY_LAYER0 0
//#define MAGIC_KEY_LAYER1 1
//#define MAGIC_KEY_LAYER2 2
//#define MAGIC_KEY_LAYER3 3
//#define MAGIC_KEY_LAYER4 4
//#define MAGIC_KEY_LAYER5 5
//#define MAGIC_KEY_LAYER6 6
//#define MAGIC_KEY_LAYER7 7
//#define MAGIC_KEY_LAYER8 8
//#define MAGIC_KEY_LAYER9 9
//#define MAGIC_KEY_BOOTLOADER PAUSE
//#define MAGIC_KEY_LOCK CAPS
//#define MAGIC_KEY_EEPROM E
//#define MAGIC_KEY_NKRO N
//#define MAGIC_KEY_SLEEP_LED Z
/*
* 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

@ -0,0 +1,51 @@
#include "kitten_paw.h"
enum layers {
DEFAULT,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[DEFAULT] = KEYMAP(\
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_INS,KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END,KC_PGDN, KC_P7, KC_P8, KC_P9,KC_PPLS, \
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \
KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3,KC_PENT, \
KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_MENU,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT)
};
const uint16_t PROGMEM fn_actions[] = {
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
register_code(KC_RSFT);
} else {
unregister_code(KC_RSFT);
}
break;
}
return MACRO_NONE;
};
void matrix_init_user(void) {
}
void matrix_scan_user(void) {
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return true;
}
void led_set_user(uint8_t usb_led) {
}

@ -0,0 +1,30 @@
#include "kitten_paw.h"
void matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
matrix_init_quantum();
matrix_init_user();
}
void matrix_scan_kb(void) {
// put your looping keyboard code here
// runs every cycle (a lot)
matrix_scan_quantum();
matrix_scan_user();
}
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
// put your per-action keyboard code here
// runs for every action, just before processing by the firmware
return process_record_user(keycode, record);
}
void led_set_kb(uint8_t usb_led) {
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
led_set_user(usb_led);
}

@ -0,0 +1,47 @@
#ifndef KITTEN_PAW_H
#define KITTEN_PAW_H
#include "quantum.h"
// This a shortcut to help you visually see your layout.
// The first section contains all of the arguements
// The second converts the arguments into a two-dimensional array
/*
Matrix col/row mapping
,----. ,-------------------. ,-------------------. ,-------------------. ,--------------.
| J6 | | I4 | H4 | H2 | H6 | | A7 | E6 | D2 | D4 | | B4 | B7 | B6 | B0 | | C7 | C5 | A5 |
`----' `-------------------' `-------------------' `-------------------' `--------------'
,-------------------------------------------------------------------------. ,--------------. ,-------------------.
| J4 | J7 | I7 | H7 | G7 | G4 | F4 | F7 | E7 | D7 | R7 | R4 | E4 | B2 | | L4 | O4 | Q4 | | K1 | L1 | Q1 | Q0 |
|-------------------------------------------------------------------------| |--------------| |-------------------|
| J2 | J5 | I5 | H5 | G5 | G2 | F2 | F5 | E5 | D5 | R5 | R2 | E2 | B3 | | K4 | O7 | Q7 | | K5 | L5 | Q5 | O5 |
|-------------------------------------------------------------------------| '--------------' |-------------- |
| O5 | J3 | I3 | H3 | G3 | G6 | F6 | F3 | E3 | D3 | R3 | R6 | B1 | | K2 | L2 | Q2 | |
|-------------------------------------------------------------------------| ,----. |-------------------|
| N2 | J1 | I1 | H1 | G1 | G0 | F0 | F1 | E1 | D1 | R0 | N3 | | O6 | | K3 | L3 | Q3 | O3 |
|-------------------------------------------------------------------------| ,--------------. |-------------- |
| A4 | P2 | C6 | K6 | C0 | M3 | D0 | A1 | | O0 | K0 | L0 | | L6 | Q6 | |
`-------------------------------------------------------------------------' `--------------' `-------------------'
*/
#define KEYMAP( \
KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, KK1, KL1, KQ1, KQ0, \
KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, KK5, KL5, KQ5, KO5, \
KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB1, KK2, KL2, KQ2, \
KN2, KI6, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, KK3, KL3, KQ3, KO3, \
KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0, KL6, KQ6 \
) \
{ \
{KC_NO, KB0, KC0, KD0,KC_NO, KF0, KG0,KC_NO,KC_NO,KC_NO, KK0, KL0,KC_NO,KC_NO, KO0,KC_NO, KQ0, KR0}, \
{ KA1, KB1,KC_NO, KD1, KE1, KF1, KG1, KH1, KI1, KJ1, KK1, KL1,KC_NO,KC_NO,KC_NO,KC_NO, KQ1,KC_NO}, \
{KC_NO, KB2,KC_NO, KD2, KE2, KF2, KG2, KH2, KI2, KJ2, KK2, KL2,KC_NO, KN2,KC_NO, KP2, KQ2, KR2}, \
{KC_NO, KB3,KC_NO, KD3, KE3, KF3, KG3, KH3, KI3, KJ3, KK3, KL3, KM3, KN3, KO3,KC_NO, KQ3, KR3}, \
{ KA4, KB4,KC_NO, KD4, KE4, KF4, KG4, KH4, KI4, KJ4, KK4, KL4,KC_NO,KC_NO, KO4,KC_NO, KQ4, KR4}, \
{ KA5,KC_NO, KC5, KD5, KE5, KF5, KG5, KH5, KI5, KJ5, KK5, KL5,KC_NO,KC_NO, KO5,KC_NO, KQ5, KR5}, \
{KC_NO, KB6, KC6,KC_NO, KE6, KF6, KG6, KH6, KI6, KJ6, KK6, KL6,KC_NO,KC_NO, KO6,KC_NO, KQ6, KR6}, \
{ KA7, KB7, KC7, KD7, KE7, KF7, KG7, KH7, KI7, KJ7,KC_NO,KC_NO,KC_NO,KC_NO, KO7,KC_NO, KQ7, KR7} \
}
#endif

@ -0,0 +1,47 @@
/*
Copyright 2014 Ralf Schmitt <ralf@bunkertor.net>
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 <avr/io.h>
#include "stdint.h"
#include "led.h"
/* LED pin configuration
*
* Scroll Lock PC5
* Caps Lock PC6
* Num Lock PB7
*
*/
void led_set(uint8_t usb_led) {
DDRB |= (1<<7);
DDRC |= (1<<5) | (1<<6);
if (usb_led & (1<<USB_LED_CAPS_LOCK))
PORTC &= ~(1<<6);
else
PORTC |= (1<<6);
if (usb_led & (1<<USB_LED_NUM_LOCK))
PORTB &= ~(1<<7);
else
PORTB |= (1<<7);
if (usb_led & (1<<USB_LED_SCROLL_LOCK))
PORTC &= ~(1<<5);
else
PORTC |= (1<<5);
}

@ -0,0 +1,164 @@
/*
Copyright 2014 Ralf Schmitt <ralf@bunkertor.net>
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/io.h>
#include <util/delay.h>
#include "print.h"
#include "debug.h"
#include "util.h"
#include "matrix.h"
#ifndef DEBOUNCING_DELAY
# define DEBOUNCING_DELAY 5
#endif
static uint8_t debouncing = DEBOUNCING_DELAY;
static matrix_row_t matrix[MATRIX_ROWS];
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
static uint8_t read_rows(void);
static void select_col(uint8_t col);
inline uint8_t matrix_rows(void) {
return MATRIX_ROWS;
}
inline uint8_t matrix_cols(void) {
return MATRIX_COLS;
}
/* Column pin configuration
*
* col: 0 1 2 3 4 5 6 7
* pin: PC7 PD5 PD3 PD1 PC2 PD6 PD4 PD2
*
* Rrr pin configuration
*
* These rrrs uses one 74HC154 4 to 16 bit demultiplexer (low
* active), together with 2 rrrs driven directly from the micro
* controller, to control the 18 rrrs. The rrrs are driven from
* pins B6,5,4,3,2,1,0.
*/
void matrix_init(void) {
DDRC &= ~0b10000100; // Row input pins
DDRD &= ~0b01111110;
PORTC |= 0b10000100;
PORTD |= 0b01111110;
DDRB |= 0b01111111; // Column output pins
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
matrix[i] = 0;
matrix_debouncing[i] = 0;
}
}
uint8_t matrix_scan(void) {
for (uint8_t col = 0; col < MATRIX_COLS; col++) {
select_col(col);
_delay_us(3);
uint8_t rows = read_rows();
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
bool curr_bit = rows & (1<<row);
if (prev_bit != curr_bit) {
matrix_debouncing[row] ^= ((matrix_row_t)1<<col);
debouncing = DEBOUNCING_DELAY;
}
}
}
if (debouncing) {
if (--debouncing) {
_delay_ms(1);
}
else {
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
matrix[i] = matrix_debouncing[i];
}
}
}
return 1;
}
bool matrix_is_modified(void) {
if (debouncing)
return false;
else
return true;
}
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++) {
xprintf("%02X: %032lb\n", row, bitrev32(matrix_get_row(row)));
}
}
uint8_t matrix_key_count(void) {
uint8_t count = 0;
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
count += bitpop32(matrix[i]);
}
return count;
}
static uint8_t read_rows(void) {
return
(PINC&(1<<7) ? 0 : (1<<0)) |
(PIND&(1<<5) ? 0 : (1<<1)) |
(PIND&(1<<3) ? 0 : (1<<2)) |
(PIND&(1<<1) ? 0 : (1<<3)) |
(PINC&(1<<2) ? 0 : (1<<4)) |
(PIND&(1<<2) ? 0 : (1<<5)) |
(PIND&(1<<4) ? 0 : (1<<6)) |
(PIND&(1<<6) ? 0 : (1<<7));
}
static void select_col(uint8_t col) {
switch (col) {
case 0: PORTB = (PORTB & ~0b01111111) | 0b01100100; break;
case 1: PORTB = (PORTB & ~0b01111111) | 0b01101100; break;
case 2: PORTB = (PORTB & ~0b01111111) | 0b01100010; break;
case 3: PORTB = (PORTB & ~0b01111111) | 0b01111010; break;
case 4: PORTB = (PORTB & ~0b01111111) | 0b01100110; break;
case 5: PORTB = (PORTB & ~0b01111111) | 0b01110110; break;
case 6: PORTB = (PORTB & ~0b01111111) | 0b01101110; break;
case 7: PORTB = (PORTB & ~0b01111111) | 0b01111110; break;
case 8: PORTB = (PORTB & ~0b01111111) | 0b01000001; break;
case 9: PORTB = (PORTB & ~0b01111111) | 0b00100001; break;
case 10: PORTB = (PORTB & ~0b01111111) | 0b01101010; break;
case 11: PORTB = (PORTB & ~0b01111111) | 0b01110010; break;
case 12: PORTB = (PORTB & ~0b01111111) | 0b01111100; break;
case 13: PORTB = (PORTB & ~0b01111111) | 0b01110100; break;
case 14: PORTB = (PORTB & ~0b01111111) | 0b01111000; break;
case 15: PORTB = (PORTB & ~0b01111111) | 0b01110000; break;
case 16: PORTB = (PORTB & ~0b01111111) | 0b01100000; break;
case 17: PORTB = (PORTB & ~0b01111111) | 0b01101000; break;
}
}

@ -0,0 +1,32 @@
kitten_paw keyboard firmware
======================
This is the firmware for the 2016 revision of the Kitten Paw controller by Bathroom Epiphanies.
Most of the boilerplate code is the work of [BathroomEpiphanies](https://github.com/BathroomEpiphanies).
NKRO doesn't work at the moment, I don't know if I will take the time to find out how to fix this, so far 6KRO is enough for me.
## Quantum MK Firmware
For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
## Building
Download or clone the whole firmware and navigate to the keyboards/kitten_paw folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
Depending on which keymap you would like to use, you will have to compile slightly differently.
### Default
To build with the default keymap, simply run `make`.
### Other Keymaps
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files.
To build the firmware binary hex file with a keymap just do `make` with `keymap` option like:
```
$ make keymap=[default|jack|<name>]
```
Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`

@ -16,6 +16,7 @@ AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
ONEHAND_ENABLE = yes # Enable one-hand typing
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend

@ -70,7 +70,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
{KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
{KC_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} {KC_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_FN0, KC_FN0, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
}, },
/* Colemak /* Colemak
@ -88,7 +88,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
{KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
{KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
{KC_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} {KC_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_FN0, KC_FN0, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
}, },
/* Dvorak /* Dvorak
@ -106,7 +106,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
{KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC}, {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC},
{KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH}, {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH},
{KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT }, {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT },
{KC_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} {KC_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_FN0, KC_FN0, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
}, },
/* Lower /* Lower
@ -186,7 +186,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
}; };
const uint16_t PROGMEM fn_actions[] = { const uint16_t PROGMEM fn_actions[] = {
ACTION_SWAP_HANDS_TAP_KEY(KC_SPC),
}; };
#ifdef AUDIO_ENABLE #ifdef AUDIO_ENABLE

@ -1,5 +1,15 @@
#include "planck.h" #include "planck.h"
#ifdef ONEHAND_ENABLE
__attribute__ ((weak))
const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
{{11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}},
{{11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}},
{{11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}},
{{11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
};
#endif
void matrix_init_kb(void) { void matrix_init_kb(void) {
// Turn status LED on // Turn status LED on
DDRE |= (1<<6); DDRE |= (1<<6);

@ -1,5 +1,16 @@
#include "preonic.h" #include "preonic.h"
#ifdef ONEHAND_ENABLE
__attribute__ ((weak))
const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
{{11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}},
{{11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}},
{{11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}},
{{11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
{{11, 4}, {10, 4}, {9, 4}, {8, 4}, {7, 4}, {6, 4}, {5, 4}, {4, 4}, {3, 4}, {2, 4}, {1, 4}, {0, 4}},
};
#endif
void matrix_init_kb(void) { void matrix_init_kb(void) {
// Turn status LED on // Turn status LED on

@ -39,6 +39,7 @@ These keyboards are part of the QMK repository, but their manufacturers are not
* [hhkb](/keyboards/hhkb) &mdash; The Happy Hacking keyboard can be hacked with a custom controller to run QMK. * [hhkb](/keyboards/hhkb) &mdash; The Happy Hacking keyboard can be hacked with a custom controller to run QMK.
* [jd45](/keyboards/jd45) &mdash; Another Geekhack community project, designed by jdcarpe. * [jd45](/keyboards/jd45) &mdash; Another Geekhack community project, designed by jdcarpe.
* [kc60](/keyboards/kc60) &mdash; A programmable Chinese-made keyboard, lost in the mists of time. * [kc60](/keyboards/kc60) &mdash; A programmable Chinese-made keyboard, lost in the mists of time.
* [kitten_paw](/keyboards/kitten_paw) &mdash; A replacement controller (2016 revision) for the Filco Majestouch by [Bathroom Epiphanies](https://github.com/BathroomEpiphanies)
* [phantom](/keyboards/phantom) &mdash; A tenkeyless kit by Teel, also from Geekhack. * [phantom](/keyboards/phantom) &mdash; A tenkeyless kit by Teel, also from Geekhack.
* [retro_refit](/keyboards/retro_refit) &mdash; Another creation by IBNobody. * [retro_refit](/keyboards/retro_refit) &mdash; Another creation by IBNobody.
* [satan](/keyboards/satan) &mdash; A GH60 variant. * [satan](/keyboards/satan) &mdash; A GH60 variant.

@ -27,7 +27,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Ctrl|Gui |Alt | Space |Alt |Gui |FN |Ctrl | * |Ctrl|Gui |Alt | Space |Alt |Gui |FN |Ctrl |
* `-----------------------------------------------------------' * `-----------------------------------------------------------'
*/ */
[_BL] = KEYMAP( [_BL] = KEYMAP_ANSI(
F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, \
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \
@ -47,7 +47,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | * | | | | | | | | |
* `-----------------------------------------------------------' * `-----------------------------------------------------------'
*/ */
[_FL] = KEYMAP( [_FL] = KEYMAP_ANSI(
#ifdef RGBLIGHT_ENABLE #ifdef RGBLIGHT_ENABLE
KC_GRV, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET, \ KC_GRV, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET, \
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC,BL_INC, BL_TOGG, \ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC,BL_INC, BL_TOGG, \

@ -29,7 +29,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Ctrl|Gui |Alt | Space |Alt |Gui |FN |Ctrl | * |Ctrl|Gui |Alt | Space |Alt |Gui |FN |Ctrl |
* `-----------------------------------------------------------' * `-----------------------------------------------------------'
*/ */
[_BL] = KEYMAP( [_BL] = KEYMAP_ANSI(
F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
MO(_FL), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \ MO(_FL), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
@ -49,27 +49,27 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | * | | | | | | | | |
* `-----------------------------------------------------------' * `-----------------------------------------------------------'
*/ */
[_FL] = KEYMAP( [_FL] = KEYMAP_ANSI(
#ifdef RGBLIGHT_ENABLE #ifdef RGBLIGHT_ENABLE
KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \ KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \
KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, F(1), F(2), F(3), F(4), F(5), F(6), F(7), F(8), KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, F(1), F(2), F(3), F(4), F(5), F(6), F(7), F(8), KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
#else #else
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_PGUP, KC_TRNS, KC_END, KC_MPRV, KC_MNXT, KC_MPLY, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_PGUP, KC_TRNS, KC_END, KC_MPRV, KC_MNXT, KC_MPLY, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, KC_HOME, LCTL(KC_LEFT), LCTL(KC_END), LCTL(KC_RIGHT), KC_TRNS, RESET, \ KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, KC_HOME, LCTL(KC_LEFT), LCTL(KC_END), LCTL(KC_RIGHT), KC_TRNS, RESET, \
KC_TRNS, KC_TRNS, F(9), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), KC_TRNS, KC_TRNS, F(9), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
#endif #endif
[_SL] = KEYMAP( [_SL] = KEYMAP_ANSI(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_PGUP, KC_TRNS, LSFT(KC_END), KC_MPRV, KC_MNXT, KC_MPLY, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_PGUP, KC_TRNS, LSFT(KC_END), KC_MPRV, KC_MNXT, KC_MPLY, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LSFT(KC_LEFT), LSFT(KC_DOWN), LSFT(KC_UP), LSFT(KC_RIGHT), KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LSFT(KC_LEFT), LSFT(KC_DOWN), LSFT(KC_UP), LSFT(KC_RIGHT), KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, LSFT(KC_HOME), LCTL(LSFT(KC_LEFT)), LCTL(LSFT(KC_END)), LCTL(LSFT(KC_RIGHT)), KC_TRNS, RESET, \ KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, LSFT(KC_HOME), LCTL(LSFT(KC_LEFT)), LCTL(LSFT(KC_END)), LCTL(LSFT(KC_RIGHT)), KC_TRNS, RESET, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
}; };
enum function_id { enum function_id {

@ -52,11 +52,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------' LEFT DWN RIGHT * `-----------------------------------------------------------' LEFT DWN RIGHT
*/ */
[_DEF] = KEYMAP_ISO_SPLITRSHIFT( [_DEF] = KEYMAP_ISO_SPLITRSHIFT(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
TABDUAL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ TABDUAL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
CAPSDUAL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, ENTERDUAL, \ CAPSDUAL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, ENTERDUAL, \
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, TG(_SFX), ARRUP, \ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, ARRUP, TG(_SFX), \
KC_LCTL, KC_LGUI, KC_LALT, SPACEDUAL, KC_RALT, ARRLEFT, ARRDOWN, ARRRIGHT), KC_LCTL, KC_LGUI, KC_LALT, SPACEDUAL, KC_RALT, ARRLEFT, ARRDOWN, ARRRIGHT),
/* Keymap 1: F-and-vim Layer, modified with Space (by holding space) /* Keymap 1: F-and-vim Layer, modified with Space (by holding space)
* ,-----------------------------------------------------------. * ,-----------------------------------------------------------.
@ -75,7 +75,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_PSCR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \ KC_PSCR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
_______, KC_PAUS, KC_UP, GER_BRC_L, GER_BRC_R, _______, _______, GER_PAR_L, GER_PAR_R, _______, _______, _______, _______, _______, \ _______, KC_PAUS, KC_UP, GER_BRC_L, GER_BRC_R, _______, _______, GER_PAR_L, GER_PAR_R, _______, _______, _______, _______, _______, \
_______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, KC_MPLY, \ _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, KC_MPLY, \
_______, _______, _______, _______, GER_ANG_L, GER_ANG_R, KC_SPACE, M(0), _______, _______, _______, _______, _______, KC_VOLU, \ _______, _______, _______, _______, GER_ANG_L, GER_ANG_R, KC_SPACE, M(0), _______, _______, _______, _______, KC_VOLU, _______, \
_______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT), _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT),
/* Keymap 2: Tab Layer w/ vim pageup, modified with Tab (by holding tab) /* Keymap 2: Tab Layer w/ vim pageup, modified with Tab (by holding tab)
@ -95,7 +95,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_WAKE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, \ KC_WAKE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, \
_______, _______, _______, _______, _______, _______, _______, GER_CUR_L, GER_CUR_R, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, GER_CUR_L, GER_CUR_R, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______, KC_ENT, \ _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______, KC_ENT, \
_______, _______, _______, _______, _______, _______, _______, M(1), _______, _______, _______, _______, _______, KC_PGUP, \ _______, _______, _______, _______, _______, _______, _______, M(1), _______, _______, _______, _______, KC_PGUP, _______, \
_______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END), _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END),
/* Keymap 3: Split right shift Numpad toggle Layer (by tapping the split rshift key) /* Keymap 3: Split right shift Numpad toggle Layer (by tapping the split rshift key)
@ -115,7 +115,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
RESET, _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, _______, _______, KC_BSPC, \ RESET, _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, _______, _______, KC_BSPC, \
_______, _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, KC_BSLS, \ _______, _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, KC_BSLS, \
_______, F(2), F(3), _______, _______, _______, _______, KC_1, KC_2, KC_3, _______, _______, XXXXXXX, KC_ENT, \ _______, F(2), F(3), _______, _______, _______, _______, KC_1, KC_2, KC_3, _______, _______, XXXXXXX, KC_ENT, \
_______, F(4), F(5), F(6), F(7), F(8), F(9), _______, _______, KC_0, _______, KC_SLSH, _______, KC_UP, \ _______, F(4), F(5), F(6), F(7), F(8), F(9), _______, _______, KC_0, _______, KC_SLSH, KC_UP, _______, \
_______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT), _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT),
}; };

@ -25,12 +25,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Ctrl|Gui |Alt | Space |Alt |Gui |FN |Ctrl | * |Ctrl|Gui |Alt | Space |Alt |Gui |FN |Ctrl |
* `-----------------------------------------------------------' * `-----------------------------------------------------------'
*/ */
[_BL] = KEYMAP( [_BL] = KEYMAP_ANSI(
F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT, MO(_RL), MO(_FL), KC_RCTL), KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_RL), MO(_FL), KC_RCTL),
/* Keymap _FL: Function Layer /* Keymap _FL: Function Layer
* ,-----------------------------------------------------------. * ,-----------------------------------------------------------.
@ -45,12 +45,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | * | | | | | | | | |
* `-----------------------------------------------------------' * `-----------------------------------------------------------'
*/ */
[_FL] = KEYMAP( [_FL] = KEYMAP_ANSI(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
KC_TRNS,KC_TRNS, KC_UP, KC_TRNS,KC_TRNS,KC_TRNS, KC_CALC,KC_TRNS,KC_INS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, \
KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_TRNS, \ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_APP, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_APP, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, KC_TRNS, \
KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
/* Keymap _RL: Function Layer /* Keymap _RL: Function Layer
* ,-----------------------------------------------------------. * ,-----------------------------------------------------------.
@ -65,19 +65,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | * | | | | | | | | |
* `-----------------------------------------------------------' * `-----------------------------------------------------------'
*/ */
[_RL] = KEYMAP( [_RL] = KEYMAP_ANSI(
#ifdef RGBLIGHT_ENABLE #ifdef RGBLIGHT_ENABLE
KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \ KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \
KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
#else #else
KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \ KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \
KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
#endif #endif
}; };

@ -26,25 +26,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Function layer // Function layer
[_FL] = KEYMAP_HHKB( [_FL] = KEYMAP_HHKB(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_NO, \ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_NO, \
KC_NO, KC_MPRV, KC_UP, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS, \ KC_NO, KC_MPRV, KC_UP, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS, \
KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, LT(_RGBL, KC_PGUP), KC_TRNS, \ KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, LT(_RGBL, KC_PGUP), KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_HOME, KC_PGDN, KC_END), KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_HOME, KC_PGDN, KC_END),
// RGB Layer // RGB Layer
[_RGBL] = KEYMAP_HHKB( [_RGBL] = KEYMAP_HHKB(
#ifdef RGBLIGHT_ENABLE #ifdef RGBLIGHT_ENABLE
RESET, 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, \ RESET, 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, BL_TOGG, BL_STEP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ KC_NO, BL_TOGG, BL_STEP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_NO, KC_NO, KC_TRNS, KC_TRNS,\ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_NO, KC_NO, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
#else #else
RESET, 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, \ RESET, 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, BL_TOGG, BL_STEP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ KC_NO, BL_TOGG, BL_STEP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS,\ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
#endif #endif
}; };

@ -3,15 +3,18 @@
#include "quantum.h" #include "quantum.h"
/* Satan GH60 matrix layout // readability
#define XXX KC_NO
/* Satan GH60 matrix layout (3c is right of 3d, 3d is shift)
* ,-----------------------------------------------------------. * ,-----------------------------------------------------------.
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d | * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d| 49|
* |-----------------------------------------------------------| * |-----------------------------------------------------------|
* | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d | * | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d |
* |-----------------------------------------------------------| * |-----------------------------------------------------------|
* | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d | * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2c|2d |
* |-----------------------------------------------------------| * |-----------------------------------------------------------|
* | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d | * | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d | 3c |
* |-----------------------------------------------------------| * |-----------------------------------------------------------|
* | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d | * | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d |
* `-----------------------------------------------------------' * `-----------------------------------------------------------'
@ -19,18 +22,45 @@
// The first section contains all of the arguments // The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array // The second converts the arguments into a two-dimensional array
#define KEYMAP( \ #define KEYMAP( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49,\
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
k40, k41, k42, k45, k4a, k4b, k4c, k4d \
) \
{ \
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \
{k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, XXX, k3d}, \
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d} \
}
/* Satan GH60 ANSI layout
* ,-----------------------------------------------------------.
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d |
* |-----------------------------------------------------------|
* | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d |
* |-----------------------------------------------------------|
* | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d |
* |-----------------------------------------------------------|
* | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d |
* |-----------------------------------------------------------|
* | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d |
* `-----------------------------------------------------------'
*/
#define KEYMAP_ANSI( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, \ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, \
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \
k40, k41, k42, k45, k4a, k4b, k4c, k4d \ k40, k41, k42, k45, k4a, k4b, k4c, k4d \
) \ ) \
{ \ { \
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, KC_NO, k2d}, \ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \
{k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d}, \ {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, XXX, k3d}, \
{k40, k41, k42, KC_NO, KC_NO, k45, KC_NO, KC_NO, KC_NO, KC_NO, k4a, k4b, k4c, k4d} \ {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \
} }
/* Satan HHKB matrix layout /* Satan HHKB matrix layout
@ -51,15 +81,15 @@
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49, \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, \ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, \
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
k40, k41, k42, k45, k4a, k4b, k4c, k4d \ k40, k41, k42, k45, k4a, k4b, k4c, k4d \
) \ ) \
{ \ { \
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, KC_NO, k2d}, \ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \
{k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \ {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
{k40, k41, k42, KC_NO, KC_NO, k45, KC_NO, KC_NO, KC_NO, k49, k4a, k4b, k4c, k4d} \ {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d} \
} }
/* ISO w/ split right shift key matrix layout /* ISO w/ split right shift key matrix layout
@ -70,24 +100,26 @@
* |-----------------------------------------------------------| * |-----------------------------------------------------------|
* | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2c|2d | * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2c|2d |
* |-----------------------------------------------------------| * |-----------------------------------------------------------|
* | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3c| 3d | * | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d | 3c|
* |-----------------------------------------------------------| * |-----------------------------------------------------------|
* | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d | * | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d |
* `-----------------------------------------------------------' * `-----------------------------------------------------------'
swap 3c and 3d. 3c is right of 3d in reality
*/ */
#define KEYMAP_ISO_SPLITRSHIFT( \ #define KEYMAP_ISO_SPLITRSHIFT( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, \ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
k40, k41, k42, k45, k4a, k4b, k4c, k4d \ k40, k41, k42, k45, k4a, k4b, k4c, k4d \
) \ ) \
{ \ { \
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
{k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \ {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
{k40, k41, k42, KC_NO, KC_NO, k45, KC_NO, KC_NO, KC_NO, KC_NO, k4a, k4b, k4c, k4d} \ {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \
} }
void matrix_init_user(void); void matrix_init_user(void);

@ -34,7 +34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
{KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) } {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) }
}, },
[_DV] = { /* Dvorak */ [_DV] = { /* Dvorak */
{KC_TAB, KC_COMM, KC_DOT, KC_SLSH, KC_Q, KC_Q, KC_Q, KC_Q, KC_Q, KC_Q, KC_Q, KC_BSPC }, {KC_TAB, KC_SLSH, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC },
{MO(_L1), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, MO(_L1) }, {MO(_L1), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, MO(_L1) },
{KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, MO(_L2) }, {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, MO(_L2) },
{KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) } {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) }

@ -11,7 +11,7 @@
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
K30, K31, K32, K33, K37, K38, K39, K3B \ K30, K31, K32, K33, K37, K38, K39, K3A, K3B \
) \ ) \
{ \ { \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \

@ -18,6 +18,7 @@ void set_unicode_input_mode(uint8_t os_target)
input_mode = os_target; input_mode = os_target;
} }
__attribute__((weak))
void unicode_input_start (void) { void unicode_input_start (void) {
switch(input_mode) { switch(input_mode) {
case UC_OSX: case UC_OSX:
@ -40,6 +41,7 @@ void unicode_input_start (void) {
wait_ms(UNICODE_TYPE_DELAY); wait_ms(UNICODE_TYPE_DELAY);
} }
__attribute__((weak))
void unicode_input_finish (void) { void unicode_input_finish (void) {
switch(input_mode) { switch(input_mode) {
case UC_OSX: case UC_OSX:

@ -43,6 +43,29 @@ Before you are able to compile, you'll need to install an environment for AVR de
## Build Environment Setup ## Build Environment Setup
### Windows 10
It's still recommended to use the method for Vista and later below. The reason for this is that the Windows 10 Subsystem for Linux lacks [USB support](https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/suggestions/13355724-unable-to-access-usb-devices-from-bash), so it's not possible to flash the firmware to the keyboard. Please add your vote to the link!
That said, it's still possible to use it for compilation. And recommended, if you need to compile much, since it's much faster than at least Cygwin (which is also supported, but currently lacking documentation). I haven't tried the method below, so I'm unable to tell.
Here are the steps
1. Install the Windows 10 subsystem for Linux, following [these instructions](http://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/).
2. If you have previously cloned the repository using the normal Git bash, you will need to clean up the line endings. If you have cloned it after 20th of August 2016, you are likely fine. To clean up the line endings do the following
1. Make sure that you have no changes you haven't committed by running `git status`, if you do commit them first
2. From within the Git bash run ´git rm --cached -r .`
3. Followed by `git reset --hard`
3. Start the "Bash On Ubuntu On Windows" from the start menu
4. With the bash open, navigate to your git checkout. The harddisk can be accessed from `/mnt` for example `/mnt/c` for the `c:\` drive.
5. Run `sudo util/install_dependencies.sh`.
6. After a while the installation will finish, and you are good to go
**Note** From time to time, the dependencies might change, so just run `install_dependencies.sh` again if things are not working.
**Warning:** If you edit Makefiles or shell scripts, make sure you are using an editor that saves the files with Unix line endings. Otherwise the compilation might not work.
### Windows (Vista and later) ### Windows (Vista and later)
1. If you have ever installed WinAVR, uninstall it. 1. If you have ever installed WinAVR, uninstall it.
2. Install [MHV AVR Tools](https://infernoembedded.com/sites/default/files/project/MHV_AVR_Tools_20131101.exe). Disable smatch, but **be sure to leave the option to add the tools to the PATH checked**. 2. Install [MHV AVR Tools](https://infernoembedded.com/sites/default/files/project/MHV_AVR_Tools_20131101.exe). Disable smatch, but **be sure to leave the option to add the tools to the PATH checked**.
@ -68,12 +91,36 @@ You can also try these instructions:
3. Install [DFU-Programmer][dfu-prog]. 3. Install [DFU-Programmer][dfu-prog].
### Linux ### Linux
Install AVR GCC, AVR libc, and dfu-progammer with your favorite package manager.
To ensure you are always up to date, you can just run `sudo utils/install_dependencies.sh`. That should always install all the dependencies needed.
You can also install things manually, but this documentation might not be always up to date with all requirements.
The current requirements are the following, but not all might be needed depending on what you do. Also note that some systems might not have all the dependencies available as packages, or they might be named differently.
```
build-essential
gcc
unzip
wget
zip
gcc-avr
binutils-avr
avr-libc
dfu-programmer
dfu-util
gcc-arm-none-eabi
binutils-arm-none-eabi
libnewlib-arm-none-eabi
git
```
Install the dependencies with your favorite package manager.
Debian/Ubuntu example: Debian/Ubuntu example:
sudo apt-get update sudo apt-get update
sudo apt-get install gcc-avr avr-libc dfu-programmer sudo apt-get install gcc unzip wget zip gcc-avr binutils-avr avr-libc dfu-programmer dfu-util gcc-arm-none-eabi binutils-arm-none-eabi libnewlib-arm-none-eabi
### Docker ### Docker
@ -721,7 +768,7 @@ Below these two modifications include the `dynamic_macro.h` header:
#include "dynamic_macro.h"` #include "dynamic_macro.h"`
Then define the `_DYN` layer with the following keys: `DYN_REC_START1`, `DYN_REC_PLAY1`,`DYN_REC_START2` and `DYN_REC_PLAY2`. It may also contain other keys, it doesn't matter apart from the fact that you won't be able to record these keys in the dynamic macros. Then define the `_DYN` layer with the following keys: `DYN_REC_START1`, `DYN_MACRO_PLAY1`,`DYN_REC_START2` and `DYN_MACRO_PLAY2`. It may also contain other keys, it doesn't matter apart from the fact that you won't be able to record these keys in the dynamic macros.
[_DYN]= { [_DYN]= {
{_______, DYN_REC_START1, DYN_MACRO_PLAY1, _______, _______, _______, _______, _______, _______, _______, _______, _______}, {_______, DYN_REC_START1, DYN_MACRO_PLAY1, _______, _______, _______, _______, _______, _______, _______, _______, _______},
@ -736,7 +783,11 @@ Add the following code to the very beginning of your `process_record_user()` fun
return false; return false;
} }
The usage should be pretty self-explanatory. For the details, please read the comments in the `dynamic_macro.h` header. To start recording the macro, press either `DYN_REC_START1` or `DYN_REC_START2`. To finish the recording, press the `_DYN` layer button. The handler awaits specifically for the `MO(_DYN)` keycode as the "stop signal" so please don't use any fancy ways to access this layer, use the regular `MO()` modifier. To replay the macro, press either `DYN_MACRO_PLAY1` or `DYN_MACRO_PLAY2`.
If the LED-s start blinking during the recording with each keypress, it means there is no more space for the macro in the macro buffer. To fit the macro in, either make the other macro shorter (they share the same buffer) or increase the buffer size by setting the `DYNAMIC_MACRO_SIZE` preprocessor macro (default value: 256; please read the comments for it in the header).
For the details about the internals of the dynamic macros, please read the comments in the `dynamic_macro.h` header.
## Additional keycode aliases for software-implemented layouts (Colemak, Dvorak, etc) ## Additional keycode aliases for software-implemented layouts (Colemak, Dvorak, etc)

@ -85,6 +85,10 @@ ifeq ($(strip $(BLUETOOTH_ENABLE)), yes)
OPT_DEFS += -DBLUETOOTH_ENABLE OPT_DEFS += -DBLUETOOTH_ENABLE
endif endif
ifeq ($(strip $(ONEHAND_ENABLE)), yes)
OPT_DEFS += -DONEHAND_ENABLE
endif
ifeq ($(strip $(KEYMAP_SECTION_ENABLE)), yes) ifeq ($(strip $(KEYMAP_SECTION_ENABLE)), yes)
OPT_DEFS += -DKEYMAP_SECTION_ENABLE OPT_DEFS += -DKEYMAP_SECTION_ENABLE

@ -41,6 +41,12 @@ void action_exec(keyevent_t event)
dprint("EVENT: "); debug_event(event); dprintln(); dprint("EVENT: "); debug_event(event); dprintln();
} }
#ifdef ONEHAND_ENABLE
if (!IS_NOEVENT(event)) {
process_hand_swap(&event);
}
#endif
keyrecord_t record = { .event = event }; keyrecord_t record = { .event = event };
#ifndef NO_ACTION_TAPPING #ifndef NO_ACTION_TAPPING
@ -53,6 +59,26 @@ void action_exec(keyevent_t event)
#endif #endif
} }
#ifdef ONEHAND_ENABLE
bool swap_hands = false;
void process_hand_swap(keyevent_t *event) {
static swap_state_row_t swap_state[MATRIX_ROWS];
keypos_t pos = event->key;
swap_state_row_t col_bit = (swap_state_row_t)1<<pos.col;
bool do_swap = event->pressed ? swap_hands :
swap_state[pos.row] & (col_bit);
if (do_swap) {
event->key = hand_swap_config[pos.row][pos.col];
swap_state[pos.row] |= col_bit;
} else {
swap_state[pos.row] &= ~(col_bit);
}
}
#endif
#if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS) #if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS)
bool disable_action_cache = false; bool disable_action_cache = false;
@ -440,6 +466,54 @@ void process_action(keyrecord_t *record, action_t action)
#endif #endif
case ACT_COMMAND: case ACT_COMMAND:
break; break;
#ifdef ONEHAND_ENABLE
case ACT_SWAP_HANDS:
switch (action.swap.code) {
case OP_SH_TOGGLE:
if (event.pressed) {
swap_hands = !swap_hands;
}
break;
case OP_SH_ON_OFF:
swap_hands = event.pressed;
break;
case OP_SH_OFF_ON:
swap_hands = !event.pressed;
break;
case OP_SH_ON:
if (!event.pressed) {
swap_hands = true;
}
break;
case OP_SH_OFF:
if (!event.pressed) {
swap_hands = false;
}
break;
#ifndef NO_ACTION_TAPPING
case OP_SH_TAP_TOGGLE:
/* tap toggle */
if (tap_count > 0) {
if (!event.pressed) {
swap_hands = !swap_hands;
}
} else {
swap_hands = event.pressed;
}
break;
default:
if (tap_count > 0) {
if (event.pressed) {
register_code(action.swap.code);
} else {
unregister_code(action.swap.code);
}
} else {
swap_hands = event.pressed;
}
#endif
}
#endif
#ifndef NO_ACTION_FUNCTION #ifndef NO_ACTION_FUNCTION
case ACT_FUNCTION: case ACT_FUNCTION:
action_function(record, action.func.id, action.func.opt); action_function(record, action.func.id, action.func.opt);
@ -652,6 +726,13 @@ bool is_tap_key(keypos_t key)
return true; return true;
} }
return false; return false;
case ACT_SWAP_HANDS:
switch (action.swap.code) {
case 0x00 ... 0xdf:
case OP_SH_TAP_TOGGLE:
return true;
}
return false;
case ACT_MACRO: case ACT_MACRO:
case ACT_FUNCTION: case ACT_FUNCTION:
if (action.func.opt & FUNC_TAP) { return true; } if (action.func.opt & FUNC_TAP) { return true; }
@ -692,6 +773,7 @@ void debug_action(action_t action)
case ACT_MACRO: dprint("ACT_MACRO"); break; case ACT_MACRO: dprint("ACT_MACRO"); break;
case ACT_COMMAND: dprint("ACT_COMMAND"); break; case ACT_COMMAND: dprint("ACT_COMMAND"); break;
case ACT_FUNCTION: dprint("ACT_FUNCTION"); break; case ACT_FUNCTION: dprint("ACT_FUNCTION"); break;
case ACT_SWAP_HANDS: dprint("ACT_SWAP_HANDS"); break;
default: dprint("UNKNOWN"); break; default: dprint("UNKNOWN"); break;
} }
dprintf("[%X:%02X]", action.kind.param>>8, action.kind.param&0xff); dprintf("[%X:%02X]", action.kind.param>>8, action.kind.param&0xff);

@ -65,6 +65,24 @@ bool process_record_quantum(keyrecord_t *record);
#if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS) #if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS)
extern bool disable_action_cache; extern bool disable_action_cache;
#endif #endif
/* Code for handling one-handed key modifiers. */
#ifdef ONEHAND_ENABLE
extern bool swap_hands;
extern const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS];
#if (MATRIX_COLS <= 8)
typedef uint8_t swap_state_row_t;
#elif (MATRIX_COLS <= 16)
typedef uint16_t swap_state_row_t;
#elif (MATRIX_COLS <= 32)
typedef uint32_t swap_state_row_t;
#else
#error "MATRIX_COLS: invalid value"
#endif
void process_hand_swap(keyevent_t *record);
#endif
void process_record_nocache(keyrecord_t *record); void process_record_nocache(keyrecord_t *record);
void process_record(keyrecord_t *record); void process_record(keyrecord_t *record);
void process_action(keyrecord_t *record, action_t action); void process_action(keyrecord_t *record, action_t action);

@ -108,6 +108,8 @@ enum action_kind_id {
/* Other Keys */ /* Other Keys */
ACT_USAGE = 0b0100, ACT_USAGE = 0b0100,
ACT_MOUSEKEY = 0b0101, ACT_MOUSEKEY = 0b0101,
/* One-hand Support */
ACT_SWAP_HANDS = 0b0110,
/* Layer Actions */ /* Layer Actions */
ACT_LAYER = 0b1000, ACT_LAYER = 0b1000,
ACT_LAYER_TAP = 0b1010, /* Layer 0-15 */ ACT_LAYER_TAP = 0b1010, /* Layer 0-15 */
@ -178,6 +180,11 @@ typedef union {
uint8_t opt :4; uint8_t opt :4;
uint8_t kind :4; uint8_t kind :4;
} func; } func;
struct action_swap {
uint8_t code :8;
uint8_t opt :4;
uint8_t kind :4;
} swap;
} action_t; } action_t;
@ -295,6 +302,7 @@ enum backlight_opt {
BACKLIGHT_STEP = 3, BACKLIGHT_STEP = 3,
BACKLIGHT_LEVEL = 4, BACKLIGHT_LEVEL = 4,
}; };
/* Macro */ /* Macro */
#define ACTION_MACRO(id) ACTION(ACT_MACRO, (id)) #define ACTION_MACRO(id) ACTION(ACT_MACRO, (id))
#define ACTION_MACRO_TAP(id) ACTION(ACT_MACRO, FUNC_TAP<<8 | (id)) #define ACTION_MACRO_TAP(id) ACTION(ACT_MACRO, FUNC_TAP<<8 | (id))
@ -306,7 +314,7 @@ enum backlight_opt {
#define ACTION_BACKLIGHT_STEP() ACTION(ACT_BACKLIGHT, BACKLIGHT_STEP << 8) #define ACTION_BACKLIGHT_STEP() ACTION(ACT_BACKLIGHT, BACKLIGHT_STEP << 8)
#define ACTION_BACKLIGHT_LEVEL(level) ACTION(ACT_BACKLIGHT, BACKLIGHT_LEVEL << 8 | (level)) #define ACTION_BACKLIGHT_LEVEL(level) ACTION(ACT_BACKLIGHT, BACKLIGHT_LEVEL << 8 | (level))
/* Command */ /* Command */
#define ACTION_COMMAND(id, opt) ACTION(ACT_COMMAND, (opt)<<8 | (addr)) #define ACTION_COMMAND(id, opt) ACTION(ACT_COMMAND, (opt)<<8 | (id))
/* Function */ /* Function */
enum function_opts { enum function_opts {
FUNC_TAP = 0x8, /* indciates function is tappable */ FUNC_TAP = 0x8, /* indciates function is tappable */
@ -314,5 +322,23 @@ enum function_opts {
#define ACTION_FUNCTION(id) ACTION(ACT_FUNCTION, (id)) #define ACTION_FUNCTION(id) ACTION(ACT_FUNCTION, (id))
#define ACTION_FUNCTION_TAP(id) ACTION(ACT_FUNCTION, FUNC_TAP<<8 | (id)) #define ACTION_FUNCTION_TAP(id) ACTION(ACT_FUNCTION, FUNC_TAP<<8 | (id))
#define ACTION_FUNCTION_OPT(id, opt) ACTION(ACT_FUNCTION, (opt)<<8 | (id)) #define ACTION_FUNCTION_OPT(id, opt) ACTION(ACT_FUNCTION, (opt)<<8 | (id))
/* OneHand Support */
enum swap_hands_pram_tap_op {
OP_SH_TOGGLE = 0xF0,
OP_SH_TAP_TOGGLE,
OP_SH_ON_OFF,
OP_SH_OFF_ON,
OP_SH_OFF,
OP_SH_ON,
};
#define ACTION_SWAP_HANDS() ACTION_SWAP_HANDS_ON_OFF()
#define ACTION_SWAP_HANDS_TOGGLE() ACTION(ACT_SWAP_HANDS, OP_SH_TOGGLE)
#define ACTION_SWAP_HANDS_TAP_TOGGLE() ACTION(ACT_SWAP_HANDS, OP_SH_TAP_TOGGLE)
#define ACTION_SWAP_HANDS_TAP_KEY(key) ACTION(ACT_SWAP_HANDS, key)
#define ACTION_SWAP_HANDS_ON_OFF() ACTION(ACT_SWAP_HANDS, OP_SH_ON_OFF)
#define ACTION_SWAP_HANDS_OFF_ON() ACTION(ACT_SWAP_HANDS, OP_SH_OFF_ON)
#define ACTION_SWAP_HANDS_ON() ACTION(ACT_SWAP_HANDS, OP_SH_ON)
#define ACTION_SWAP_HANDS_OFF() ACTION(ACT_SWAP_HANDS, OP_SH_OFF)
#endif /* ACTION_CODE_H */ #endif /* ACTION_CODE_H */

@ -1 +1 @@
Copy the Microsoft HV1 Docbook transform contents into this directory (i.e. with the XSLT files in the current folder). The HV1 transform proposal can be found at http://sourceforge.net/tracker/?func=detail&aid=3610290&group_id=21935&atid=373750 . Copy the Microsoft HV1 Docbook transform contents into this directory (i.e. with the XSLT files in the current folder). The HV1 transform proposal can be found at http://sourceforge.net/tracker/?func=detail&aid=3610290&group_id=21935&atid=373750 .

@ -1 +1 @@
Copy the Docbook XSLT docbook-xsl-1.78.1 release contents into this directory (i.e. with the root Docbook files in the current folder). The Docbook releases can be found at http://sourceforge.net/projects/docbook/files/docbook-xsl/ . Copy the Docbook XSLT docbook-xsl-1.78.1 release contents into this directory (i.e. with the root Docbook files in the current folder). The Docbook releases can be found at http://sourceforge.net/projects/docbook/files/docbook-xsl/ .

@ -1,45 +1,45 @@
<!-- <!--
LUFA Library LUFA Library
Copyright (C) Dean Camera, 2013. Copyright (C) Dean Camera, 2013.
dean [at] fourwalledcubicle [dot] com dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org www.lufa-lib.org
--> -->
<!-- Docbook XML to Microsoft Help Viewer 1.0 transform file --> <!-- Docbook XML to Microsoft Help Viewer 1.0 transform file -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:import href="../Docbook/mshelp/docbook.xsl"/> <xsl:import href="../Docbook/mshelp/docbook.xsl"/>
<xsl:output method="xml" indent="no"/> <xsl:output method="xml" indent="no"/>
<xsl:template match="emphasis[@role = 'keyword' or @role = 'keywordtype' or @role = 'keywordflow']"> <xsl:template match="emphasis[@role = 'keyword' or @role = 'keywordtype' or @role = 'keywordflow']">
<span class="hl-keyword" style="color: #0079C1"> <span class="hl-keyword" style="color: #0079C1">
<xsl:apply-templates/> <xsl:apply-templates/>
</span> </span>
</xsl:template> </xsl:template>
<xsl:template match="emphasis[@role = 'stringliteral' or @role = 'charliteral']"> <xsl:template match="emphasis[@role = 'stringliteral' or @role = 'charliteral']">
<span class="hl-string" style="color: #800000"> <span class="hl-string" style="color: #800000">
<xsl:apply-templates/> <xsl:apply-templates/>
</span> </span>
</xsl:template> </xsl:template>
<xsl:template match="emphasis[@role = 'comment']"> <xsl:template match="emphasis[@role = 'comment']">
<em class="hl-comment" style="color: #008000"> <em class="hl-comment" style="color: #008000">
<xsl:apply-templates/> <xsl:apply-templates/>
</em> </em>
</xsl:template> </xsl:template>
<xsl:template match="emphasis[@role = 'preprocessor']"> <xsl:template match="emphasis[@role = 'preprocessor']">
<span class="hl-preprocessor" style="color: #A000A0"> <span class="hl-preprocessor" style="color: #A000A0">
<xsl:apply-templates/> <xsl:apply-templates/>
</span> </span>
</xsl:template> </xsl:template>
<xsl:template match="emphasis[@role = 'normal' and ancestor::programlisting]"> <xsl:template match="emphasis[@role = 'normal' and ancestor::programlisting]">
<xsl:apply-templates /> <xsl:apply-templates />
</xsl:template> </xsl:template>
</xsl:stylesheet> </xsl:stylesheet>

@ -1,53 +1,53 @@
/* /*
LUFA Library LUFA Library
Copyright (C) Dean Camera, 2013. Copyright (C) Dean Camera, 2013.
dean [at] fourwalledcubicle [dot] com dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org www.lufa-lib.org
*/ */
.programlisting { .programlisting {
display: block; display: block;
margin-left: 15px; margin-left: 15px;
padding: 10px; padding: 10px;
background-color: #f4f4f4; background-color: #f4f4f4;
border: 1px solid #aaaaaa; border: 1px solid #aaaaaa;
font-family: "Consolas", "Courier New", sans-serif; font-family: "Consolas", "Courier New", sans-serif;
} }
code { code {
background-color: #f4f4f4; background-color: #f4f4f4;
font-family: "Consolas", "Courier New", sans-serif; font-family: "Consolas", "Courier New", sans-serif;
} }
.note, .warning, .tip { .note, .warning, .tip {
display: block; display: block;
margin-left: 15px; margin-left: 15px;
padding-left: 10px; padding-left: 10px;
padding-bottom: 5px; padding-bottom: 5px;
background-color: #f4f4f4; background-color: #f4f4f4;
border: 1px solid #aaaaaa; border: 1px solid #aaaaaa;
} }
table { table {
border: 1px solid #aaaaaa; border: 1px solid #aaaaaa;
border-collapse: collapse; border-collapse: collapse;
margin-left: 15px; margin-left: 15px;
font-size: 10pt; font-size: 10pt;
} }
table thead { table thead {
background-color: #f4f4f4; background-color: #f4f4f4;
} }
table thead th { table thead th {
padding: 5px; padding: 5px;
} }
table tbody td { table tbody td {
padding: 5px; padding: 5px;
} }
ul { ul {
padding-left: 20px; padding-left: 20px;
} }

@ -1,13 +1,13 @@
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"> <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
<Default Extension="vsixmanifest" ContentType="text/xml"/> <Default Extension="vsixmanifest" ContentType="text/xml"/>
<Default Extension="cache" ContentType="text/xml"/> <Default Extension="cache" ContentType="text/xml"/>
<Default Extension="png" ContentType="application/octet-stream"/> <Default Extension="png" ContentType="application/octet-stream"/>
<Default Extension="txt" ContentType="text/plain"/> <Default Extension="txt" ContentType="text/plain"/>
<Default Extension="xml" ContentType="text/xml"/> <Default Extension="xml" ContentType="text/xml"/>
<Default Extension="zip" ContentType="application/octet-stream"/> <Default Extension="zip" ContentType="application/octet-stream"/>
<Default Extension="dll" ContentType="application/octet-stream" /> <Default Extension="dll" ContentType="application/octet-stream" />
<Default Extension="pkgdef" ContentType="text/plain" /> <Default Extension="pkgdef" ContentType="text/plain" />
<Default Extension="htm" ContentType="text/html" /> <Default Extension="htm" ContentType="text/html" />
<Default Extension="msha" ContentType="text/html" /> <Default Extension="msha" ContentType="text/html" />
<Default Extension="mshc" ContentType="application/octet-stream"/> <Default Extension="mshc" ContentType="application/octet-stream"/>
</Types> </Types>

@ -1,18 +1,18 @@
<AsfContentProvider Version="1.0.0"> <AsfContentProvider Version="1.0.0">
<Identifier Id="0e160d5c-e331-48d9-850b-e0387912171b"> <Identifier Id="0e160d5c-e331-48d9-850b-e0387912171b">
<Org>FourWalledCubicle</Org> <Org>FourWalledCubicle</Org>
<ShortName>LUFA</ShortName> <ShortName>LUFA</ShortName>
<Author>Dean Camera</Author> <Author>Dean Camera</Author>
<Description/> <Description/>
<FollowFolderStructure>True</FollowFolderStructure> <FollowFolderStructure>True</FollowFolderStructure>
</Identifier> </Identifier>
<AsfContent Type="zip" Path="contents.zip"> <AsfContent Type="zip" Path="contents.zip">
<Content> <Content>
<Version>0</Version> <Version>0</Version>
<HelpURL/> <HelpURL/>
<Locator/> <Locator/>
<DbXMLPath>content.xml.cache</DbXMLPath> <DbXMLPath>content.xml.cache</DbXMLPath>
<Description/> <Description/>
</Content> </Content>
</AsfContent> </AsfContent>
</AsfContentProvider> </AsfContentProvider>

@ -1,33 +1,33 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Vsix xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2010"> <Vsix xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2010">
<Identifier Id="FourWalledCubicle.LUFA.0e160d5c-e331-48d9-850b-e0387912171b"> <Identifier Id="FourWalledCubicle.LUFA.0e160d5c-e331-48d9-850b-e0387912171b">
<Name>LUFA Library</Name> <Name>LUFA Library</Name>
<Author>Dean Camera</Author> <Author>Dean Camera</Author>
<Version>0</Version> <Version>0</Version>
<MoreInfoUrl>http://www.lufa-lib.org</MoreInfoUrl> <MoreInfoUrl>http://www.lufa-lib.org</MoreInfoUrl>
<Description xml:space="preserve">LUFA, the Lightweight USB Framework for AVRs.</Description> <Description xml:space="preserve">LUFA, the Lightweight USB Framework for AVRs.</Description>
<License>License.txt</License> <License>License.txt</License>
<Icon>LUFA_thumb.png</Icon> <Icon>LUFA_thumb.png</Icon>
<PreviewImage>LUFA.png</PreviewImage> <PreviewImage>LUFA.png</PreviewImage>
<SupportedProducts> <SupportedProducts>
<IsolatedShell Version="6.1">AtmelStudio</IsolatedShell> <IsolatedShell Version="6.1">AtmelStudio</IsolatedShell>
<IsolatedShell Version="6.2">AtmelStudio</IsolatedShell> <IsolatedShell Version="6.2">AtmelStudio</IsolatedShell>
</SupportedProducts> </SupportedProducts>
<SupportedFrameworkRuntimeEdition MinVersion="4.0" MaxVersion="4.5"/> <SupportedFrameworkRuntimeEdition MinVersion="4.0" MaxVersion="4.5"/>
<Locale>1033</Locale> <Locale>1033</Locale>
<AllUsers>false</AllUsers> <AllUsers>false</AllUsers>
</Identifier> </Identifier>
<References/> <References/>
<Content> <Content>
<VsPackage>LUFA.pkgdef</VsPackage> <VsPackage>LUFA.pkgdef</VsPackage>
<CustomExtension Type="MSHelp">helpcontentsetup.msha</CustomExtension> <CustomExtension Type="MSHelp">helpcontentsetup.msha</CustomExtension>
<CustomExtension Type="asf-manifest">asf-manifest.xml</CustomExtension> <CustomExtension Type="asf-manifest">asf-manifest.xml</CustomExtension>
</Content> </Content>
</Vsix> </Vsix>

@ -1,38 +1,38 @@
""" """
LUFA Library LUFA Library
Copyright (C) Dean Camera, 2013. Copyright (C) Dean Camera, 2013.
dean [at] fourwalledcubicle [dot] com dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org www.lufa-lib.org
""" """
import sys import sys
sys.path.append("ProjectGenerator") sys.path.append("ProjectGenerator")
def show_message(message): def show_message(message):
print("[Project Generator] %s" % message) print("[Project Generator] %s" % message)
sys.stdout.flush() sys.stdout.flush()
def main(lufa_root_path): def main(lufa_root_path):
try: try:
from asf_avrstudio5_interface import PythonFacade from asf_avrstudio5_interface import PythonFacade
except ImportError: except ImportError:
print("Fatal Error: The ASF project generator is missing.") print("Fatal Error: The ASF project generator is missing.")
return 1 return 1
p = PythonFacade(lufa_root_path) p = PythonFacade(lufa_root_path)
show_message("Checking database sanity...") show_message("Checking database sanity...")
p.check_extension_database_sanity(lufa_root_path) p.check_extension_database_sanity(lufa_root_path)
show_message("Building cache files...") show_message("Building cache files...")
p.generate_extension_cache_files(lufa_root_path) p.generate_extension_cache_files(lufa_root_path)
show_message("Cache files created.") show_message("Cache files created.")
return 0 return 0
if __name__ == "__main__": if __name__ == "__main__":
sys.exit(main(sys.argv[1])) sys.exit(main(sys.argv[1]))

@ -1,96 +1,96 @@
<!-- <!--
LUFA Library LUFA Library
Copyright (C) Dean Camera, 2013. Copyright (C) Dean Camera, 2013.
dean [at] fourwalledcubicle [dot] com dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org www.lufa-lib.org
--> -->
<!-- Atmel Studio framework integration file --> <!-- Atmel Studio framework integration file -->
<lufa> <lufa>
<extension-container> <extension-container>
<extension uuid="0e160d5c-e331-48d9-850b-e0387912171b" org="FourWalledCubicle" shortname="LUFA" version="" fullname="Lightweight USB Framework for AVRs (LUFA)"> <extension uuid="0e160d5c-e331-48d9-850b-e0387912171b" org="FourWalledCubicle" shortname="LUFA" version="" fullname="Lightweight USB Framework for AVRs (LUFA)">
<author name="Dean Camera" website="http://www.lufa-lib.org/" email="dean@fourwalledcubicle.com"/> <author name="Dean Camera" website="http://www.lufa-lib.org/" email="dean@fourwalledcubicle.com"/>
<description>Lightweight USB Framework for AVRs (LUFA), a USB software stack/framework.</description> <description>Lightweight USB Framework for AVRs (LUFA), a USB software stack/framework.</description>
<icon-image path="LUFA/DoxygenPages/Images/LUFA_thumb.png"/> <icon-image path="LUFA/DoxygenPages/Images/LUFA_thumb.png"/>
<preview-image path="LUFA/DoxygenPages/Images/LUFA.png"/> <preview-image path="LUFA/DoxygenPages/Images/LUFA.png"/>
<license caption="LUFA License" path="LUFA/License.txt"/> <license caption="LUFA License" path="LUFA/License.txt"/>
<release-notes caption="LUFA Information" url="http://www.lufa-lib.org"/> <release-notes caption="LUFA Information" url="http://www.lufa-lib.org"/>
<online-help> <online-help>
<index-page caption="LUFA Documentation" url="http://www.lufa-lib.org/documentation/"/> <index-page caption="LUFA Documentation" url="http://www.lufa-lib.org/documentation/"/>
<module-help-page scheme="append" baseurl="http://www.lufa-lib.org/documentation/"/> <module-help-page scheme="append" baseurl="http://www.lufa-lib.org/documentation/"/>
<module-guide-page scheme="append" baseurl="http://www.lufa-lib.org/documentation/"/> <module-guide-page scheme="append" baseurl="http://www.lufa-lib.org/documentation/"/>
</online-help> </online-help>
<dependencies/> <dependencies/>
</extension> </extension>
</extension-container> </extension-container>
<asf> <asf>
<device-alias-map name="lufa_avr8"> <device-alias-map name="lufa_avr8">
<device-support value="at90usb82"/> <device-support value="at90usb82"/>
<device-support value="atmega8u2"/> <device-support value="atmega8u2"/>
<device-support value="at90usb162"/> <device-support value="at90usb162"/>
<device-support value="atmega16u2"/> <device-support value="atmega16u2"/>
<device-support value="atmega16u4"/> <device-support value="atmega16u4"/>
<device-support value="atmega32u2"/> <device-support value="atmega32u2"/>
<device-support value="atmega32u4"/> <device-support value="atmega32u4"/>
<device-support value="at90usb646"/> <device-support value="at90usb646"/>
<device-support value="at90usb647"/> <device-support value="at90usb647"/>
<device-support value="at90usb1286"/> <device-support value="at90usb1286"/>
<device-support value="at90usb1287"/> <device-support value="at90usb1287"/>
</device-alias-map> </device-alias-map>
<device-alias-map name="lufa_xmega"> <device-alias-map name="lufa_xmega">
<device-support value="atxmega16a4u"/> <device-support value="atxmega16a4u"/>
<device-support value="atxmega32a4u"/> <device-support value="atxmega32a4u"/>
<device-support value="atxmega64a4u"/> <device-support value="atxmega64a4u"/>
<device-support value="atxmega128a4u"/> <device-support value="atxmega128a4u"/>
<device-support value="atxmega64a3u"/> <device-support value="atxmega64a3u"/>
<device-support value="atxmega128a3u"/> <device-support value="atxmega128a3u"/>
<device-support value="atxmega192a3u"/> <device-support value="atxmega192a3u"/>
<device-support value="atxmega256a3u"/> <device-support value="atxmega256a3u"/>
<device-support value="atxmega256a3bu"/> <device-support value="atxmega256a3bu"/>
<device-support value="atxmega128a1u"/> <device-support value="atxmega128a1u"/>
<device-support value="atxmega64b3"/> <device-support value="atxmega64b3"/>
<device-support value="atxmega128b3"/> <device-support value="atxmega128b3"/>
<device-support value="atxmega64b1"/> <device-support value="atxmega64b1"/>
<device-support value="atxmega128b1"/> <device-support value="atxmega128b1"/>
<device-support value="atxmega64c3"/> <device-support value="atxmega64c3"/>
<device-support value="atxmega128c3"/> <device-support value="atxmega128c3"/>
<!-- <device-support value="atxmega192c3"/> Wait for ASFP-3339 merge and release before enabling --> <!-- <device-support value="atxmega192c3"/> Wait for ASFP-3339 merge and release before enabling -->
<device-support value="atxmega256c3"/> <device-support value="atxmega256c3"/>
<device-support value="atxmega384c3"/> <device-support value="atxmega384c3"/>
<device-support value="atxmega16c4"/> <device-support value="atxmega16c4"/>
</device-alias-map> </device-alias-map>
<device-alias-map name="lufa_uc3"> <device-alias-map name="lufa_uc3">
<device-support value="at32uc3a364"/> <device-support value="at32uc3a364"/>
<device-support value="at32uc3a364s"/> <device-support value="at32uc3a364s"/>
<device-support value="at32uc3a464"/> <device-support value="at32uc3a464"/>
<device-support value="at32uc3a464s"/> <device-support value="at32uc3a464s"/>
<device-support value="at32uc3b064"/> <device-support value="at32uc3b064"/>
<device-support value="at32uc3b164"/> <device-support value="at32uc3b164"/>
<device-support value="at32uc3a0128"/> <device-support value="at32uc3a0128"/>
<device-support value="at32uc3a1128"/> <device-support value="at32uc3a1128"/>
<device-support value="at32uc3a3128"/> <device-support value="at32uc3a3128"/>
<device-support value="at32uc3a3128s"/> <device-support value="at32uc3a3128s"/>
<device-support value="at32uc3a4128"/> <device-support value="at32uc3a4128"/>
<device-support value="at32uc3a4128s"/> <device-support value="at32uc3a4128s"/>
<device-support value="at32uc3b0128"/> <device-support value="at32uc3b0128"/>
<device-support value="at32uc3b1128"/> <device-support value="at32uc3b1128"/>
<device-support value="at32uc3a0256"/> <device-support value="at32uc3a0256"/>
<device-support value="at32uc3a1256"/> <device-support value="at32uc3a1256"/>
<device-support value="at32uc3a3256"/> <device-support value="at32uc3a3256"/>
<device-support value="at32uc3a3256s"/> <device-support value="at32uc3a3256s"/>
<device-support value="at32uc3a4256"/> <device-support value="at32uc3a4256"/>
<device-support value="at32uc3a4256s"/> <device-support value="at32uc3a4256s"/>
<device-support value="at32uc3b0256"/> <device-support value="at32uc3b0256"/>
<device-support value="at32uc3b1256"/> <device-support value="at32uc3b1256"/>
<device-support value="at32uc3a0512"/> <device-support value="at32uc3a0512"/>
<device-support value="at32uc3a1512"/> <device-support value="at32uc3a1512"/>
<device-support value="at32uc3b0512"/> <device-support value="at32uc3b0512"/>
<device-support value="at32uc3b1512"/> <device-support value="at32uc3b1512"/>
</device-alias-map> </device-alias-map>
</asf> </asf>
</lufa> </lufa>

@ -1,34 +1,34 @@
<!-- <!--
LUFA Library LUFA Library
Copyright (C) Dean Camera, 2013. Copyright (C) Dean Camera, 2013.
dean [at] fourwalledcubicle [dot] com dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org www.lufa-lib.org
--> -->
<!-- Atmel Studio framework integration file --> <!-- Atmel Studio framework integration file -->
<lufa> <lufa>
<asf> <asf>
<module type="service" id="lufa.common" caption="LUFA Common Infrastructure"> <module type="service" id="lufa.common" caption="LUFA Common Infrastructure">
<device-support-alias value="lufa_avr8"/> <device-support-alias value="lufa_avr8"/>
<device-support-alias value="lufa_xmega"/> <device-support-alias value="lufa_xmega"/>
<device-support-alias value="lufa_uc3"/> <device-support-alias value="lufa_uc3"/>
<info type="gui-flag" value="hidden"/> <info type="gui-flag" value="hidden"/>
<build type="doxygen-entry-point" value="Group_Common"/> <build type="doxygen-entry-point" value="Group_Common"/>
<build type="include-path" value=".."/> <build type="include-path" value=".."/>
<build type="header-file" subtype="api" value="Version.h"/> <build type="header-file" subtype="api" value="Version.h"/>
<build type="distribute" subtype="license" value="License.txt"/> <build type="distribute" subtype="license" value="License.txt"/>
<build type="header-file" subtype="api" value="Common/Common.h"/> <build type="header-file" subtype="api" value="Common/Common.h"/>
<build type="header-file" value="Common/Architectures.h"/> <build type="header-file" value="Common/Architectures.h"/>
<build type="header-file" value="Common/ArchitectureSpecific.h"/> <build type="header-file" value="Common/ArchitectureSpecific.h"/>
<build type="header-file" value="Common/Attributes.h"/> <build type="header-file" value="Common/Attributes.h"/>
<build type="header-file" value="Common/BoardTypes.h"/> <build type="header-file" value="Common/BoardTypes.h"/>
<build type="header-file" value="Common/CompilerSpecific.h"/> <build type="header-file" value="Common/CompilerSpecific.h"/>
<build type="header-file" value="Common/Endianness.h"/> <build type="header-file" value="Common/Endianness.h"/>
</module> </module>
</asf> </asf>
</lufa> </lufa>

@ -1,114 +1,114 @@
<!-- <!--
LUFA Library LUFA Library
Copyright (C) Dean Camera, 2013. Copyright (C) Dean Camera, 2013.
dean [at] fourwalledcubicle [dot] com dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org www.lufa-lib.org
--> -->
<!-- Atmel Studio framework integration file --> <!-- Atmel Studio framework integration file -->
<lufa> <lufa>
<asf> <asf>
<board id="lufa.boards.dummy.avr8" vendor="LUFA" caption="AVR8 Architecture"> <board id="lufa.boards.dummy.avr8" vendor="LUFA" caption="AVR8 Architecture">
<device-support value="mega"/> <device-support value="mega"/>
<require idref="lufa.drivers.board"/> <require idref="lufa.drivers.board"/>
<require idref="lufa.drivers.board.info"/> <require idref="lufa.drivers.board.info"/>
</board> </board>
<board id="lufa.boards.dummy.xmega" vendor="LUFA" caption="XMEGA Architecture"> <board id="lufa.boards.dummy.xmega" vendor="LUFA" caption="XMEGA Architecture">
<device-support value="xmega"/> <device-support value="xmega"/>
<require idref="lufa.drivers.board"/> <require idref="lufa.drivers.board"/>
<require idref="lufa.drivers.board.info"/> <require idref="lufa.drivers.board.info"/>
</board> </board>
<board id="lufa.boards.dummy.uc3" vendor="LUFA" caption="UC3 Architecture"> <board id="lufa.boards.dummy.uc3" vendor="LUFA" caption="UC3 Architecture">
<device-support value="uc3"/> <device-support value="uc3"/>
<require idref="lufa.drivers.board"/> <require idref="lufa.drivers.board"/>
<require idref="lufa.drivers.board.info"/> <require idref="lufa.drivers.board.info"/>
</board> </board>
<module type="driver" id="lufa.drivers.board.info" caption="LUFA Board Hardware Information Driver"> <module type="driver" id="lufa.drivers.board.info" caption="LUFA Board Hardware Information Driver">
<device-support-alias value="lufa_avr8"/> <device-support-alias value="lufa_avr8"/>
<device-support-alias value="lufa_xmega"/> <device-support-alias value="lufa_xmega"/>
<device-support-alias value="lufa_uc3"/> <device-support-alias value="lufa_uc3"/>
<build type="doxygen-entry-point" value="Group_BoardInfo"/> <build type="doxygen-entry-point" value="Group_BoardInfo"/>
<require idref="lufa.common"/> <require idref="lufa.common"/>
<build type="include-path" value=".."/> <build type="include-path" value=".."/>
<build type="header-file" subtype="api" value="Drivers/Board/Board.h"/> <build type="header-file" subtype="api" value="Drivers/Board/Board.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board.leds" caption="LUFA Board LED Driver"> <module type="driver" id="lufa.drivers.board.leds" caption="LUFA Board LED Driver">
<device-support-alias value="lufa_avr8"/> <device-support-alias value="lufa_avr8"/>
<device-support-alias value="lufa_xmega"/> <device-support-alias value="lufa_xmega"/>
<device-support-alias value="lufa_uc3"/> <device-support-alias value="lufa_uc3"/>
<build type="doxygen-entry-point" value="Group_LEDs"/> <build type="doxygen-entry-point" value="Group_LEDs"/>
<require idref="lufa.common"/> <require idref="lufa.common"/>
<build type="include-path" value=".."/> <build type="include-path" value=".."/>
<build type="header-file" subtype="api" value="Drivers/Board/LEDs.h"/> <build type="header-file" subtype="api" value="Drivers/Board/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board.buttons" caption="LUFA Board Buttons Driver"> <module type="driver" id="lufa.drivers.board.buttons" caption="LUFA Board Buttons Driver">
<device-support-alias value="lufa_avr8"/> <device-support-alias value="lufa_avr8"/>
<device-support-alias value="lufa_xmega"/> <device-support-alias value="lufa_xmega"/>
<device-support-alias value="lufa_uc3"/> <device-support-alias value="lufa_uc3"/>
<build type="doxygen-entry-point" value="Group_Buttons"/> <build type="doxygen-entry-point" value="Group_Buttons"/>
<require idref="lufa.common"/> <require idref="lufa.common"/>
<build type="include-path" value=".."/> <build type="include-path" value=".."/>
<build type="header-file" subtype="api" value="Drivers/Board/Buttons.h"/> <build type="header-file" subtype="api" value="Drivers/Board/Buttons.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board.dataflash" caption="LUFA Board Dataflash Driver"> <module type="driver" id="lufa.drivers.board.dataflash" caption="LUFA Board Dataflash Driver">
<device-support-alias value="lufa_avr8"/> <device-support-alias value="lufa_avr8"/>
<device-support-alias value="lufa_xmega"/> <device-support-alias value="lufa_xmega"/>
<device-support-alias value="lufa_uc3"/> <device-support-alias value="lufa_uc3"/>
<build type="doxygen-entry-point" value="Group_Dataflash"/> <build type="doxygen-entry-point" value="Group_Dataflash"/>
<require idref="lufa.common"/> <require idref="lufa.common"/>
<build type="include-path" value=".."/> <build type="include-path" value=".."/>
<build type="header-file" subtype="api" value="Drivers/Board/Dataflash.h"/> <build type="header-file" subtype="api" value="Drivers/Board/Dataflash.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board.joystick" caption="LUFA Board Joystick Driver"> <module type="driver" id="lufa.drivers.board.joystick" caption="LUFA Board Joystick Driver">
<device-support-alias value="lufa_avr8"/> <device-support-alias value="lufa_avr8"/>
<device-support-alias value="lufa_xmega"/> <device-support-alias value="lufa_xmega"/>
<device-support-alias value="lufa_uc3"/> <device-support-alias value="lufa_uc3"/>
<build type="doxygen-entry-point" value="Group_Joystick"/> <build type="doxygen-entry-point" value="Group_Joystick"/>
<require idref="lufa.common"/> <require idref="lufa.common"/>
<build type="include-path" value=".."/> <build type="include-path" value=".."/>
<build type="header-file" subtype="api" value="Drivers/Board/Joystick.h"/> <build type="header-file" subtype="api" value="Drivers/Board/Joystick.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board.temperature" caption="LUFA Board Temperature Sensor Driver"> <module type="driver" id="lufa.drivers.board.temperature" caption="LUFA Board Temperature Sensor Driver">
<device-support-alias value="lufa_avr8"/> <device-support-alias value="lufa_avr8"/>
<device-support-alias value="lufa_xmega"/> <device-support-alias value="lufa_xmega"/>
<device-support-alias value="lufa_uc3"/> <device-support-alias value="lufa_uc3"/>
<build type="doxygen-entry-point" value="Group_Temperature"/> <build type="doxygen-entry-point" value="Group_Temperature"/>
<require idref="lufa.common"/> <require idref="lufa.common"/>
<require idref="lufa.drivers.peripheral.adc"/> <require idref="lufa.drivers.peripheral.adc"/>
<build type="c-source" value="Drivers/Board/Temperature.c"/> <build type="c-source" value="Drivers/Board/Temperature.c"/>
<build type="include-path" value=".."/> <build type="include-path" value=".."/>
<build type="header-file" subtype="api" value="Drivers/Board/Temperature.h"/> <build type="header-file" subtype="api" value="Drivers/Board/Temperature.h"/>
</module> </module>
</asf> </asf>
</lufa> </lufa>

@ -1,853 +1,853 @@
<!-- <!--
LUFA Library LUFA Library
Copyright (C) Dean Camera, 2013. Copyright (C) Dean Camera, 2013.
dean [at] fourwalledcubicle [dot] com dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org www.lufa-lib.org
--> -->
<!-- Atmel Studio framework integration file --> <!-- Atmel Studio framework integration file -->
<lufa> <lufa>
<asf> <asf>
<select-by-config id="lufa.drivers.board" name="lufa.drivers.board.name" default="none" caption="LUFA Board Support"> <select-by-config id="lufa.drivers.board" name="lufa.drivers.board.name" default="none" caption="LUFA Board Support">
<info type="description" value="summary"> <info type="description" value="summary">
Board hardware (LEDs, Buttons, etc.) drivers for the preconfigured LUFA boards. Note that only the boards Board hardware (LEDs, Buttons, etc.) drivers for the preconfigured LUFA boards. Note that only the boards
compatible with the currently selected device will be shown. compatible with the currently selected device will be shown.
To disable all hardware drivers silently, use NONE. To supply customer drivers, use USER (see manual). To disable all hardware drivers silently, use NONE. To supply customer drivers, use USER (see manual).
</info> </info>
<module type="driver" id="lufa.drivers.board#none" caption="Board Support - None"> <module type="driver" id="lufa.drivers.board#none" caption="Board Support - None">
<device-support value="avr"/> <device-support value="avr"/>
<build type="define" name="BOARD" value="BOARD_NONE"/> <build type="define" name="BOARD" value="BOARD_NONE"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#user" caption="Board Support - User Supplied"> <module type="driver" id="lufa.drivers.board#user" caption="Board Support - User Supplied">
<device-support value="avr"/> <device-support value="avr"/>
<build type="define" name="BOARD" value="BOARD_USER"/> <build type="define" name="BOARD" value="BOARD_USER"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#adafruit_u4" caption="Board Support - ADAFRUITU4"> <module type="driver" id="lufa.drivers.board#adafruit_u4" caption="Board Support - ADAFRUITU4">
<build type="doxygen-entry-point" value="Group_BoardInfo_ADAFRUITU4"/> <build type="doxygen-entry-point" value="Group_BoardInfo_ADAFRUITU4"/>
<device-support value="atmega32u4"/> <device-support value="atmega32u4"/>
<build type="define" name="BOARD" value="BOARD_ADAFRUITU4"/> <build type="define" name="BOARD" value="BOARD_ADAFRUITU4"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/ADAFRUITU4/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/ADAFRUITU4/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/ADAFRUITU4/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/ADAFRUITU4/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#atavrusbrf01" caption="Board Support - ATAVRUSBRF01"> <module type="driver" id="lufa.drivers.board#atavrusbrf01" caption="Board Support - ATAVRUSBRF01">
<build type="doxygen-entry-point" value="Group_BoardInfo_ATAVRUSBRF01"/> <build type="doxygen-entry-point" value="Group_BoardInfo_ATAVRUSBRF01"/>
<device-support value="at90usb1287"/> <device-support value="at90usb1287"/>
<build type="define" name="BOARD" value="BOARD_ATAVRUSBRF01"/> <build type="define" name="BOARD" value="BOARD_ATAVRUSBRF01"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/ATAVRUSBRF01/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/ATAVRUSBRF01/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/ATAVRUSBRF01/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/ATAVRUSBRF01/Buttons.h"/>
<build type="header-file" value="Drivers/Board/AVR8/ATAVRUSBRF01/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/ATAVRUSBRF01/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#benito" caption="Board Support - BENITO"> <module type="driver" id="lufa.drivers.board#benito" caption="Board Support - BENITO">
<build type="doxygen-entry-point" value="Group_BoardInfo_BENITO"/> <build type="doxygen-entry-point" value="Group_BoardInfo_BENITO"/>
<device-support value="at90usb162"/> <device-support value="at90usb162"/>
<build type="define" name="BOARD" value="BOARD_BENITO"/> <build type="define" name="BOARD" value="BOARD_BENITO"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/BENITO/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/BENITO/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/BENITO/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/BENITO/Buttons.h"/>
<build type="header-file" value="Drivers/Board/AVR8/BENITO/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/BENITO/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#big_multio" caption="Board Support - BIGMULTIO"> <module type="driver" id="lufa.drivers.board#big_multio" caption="Board Support - BIGMULTIO">
<build type="doxygen-entry-point" value="Group_BoardInfo_BIGMULTIO"/> <build type="doxygen-entry-point" value="Group_BoardInfo_BIGMULTIO"/>
<device-support value="atmega32u4"/> <device-support value="atmega32u4"/>
<build type="define" name="BOARD" value="BOARD_BIGMULTIO"/> <build type="define" name="BOARD" value="BOARD_BIGMULTIO"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/BIGMULTIO/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/BIGMULTIO/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/BIGMULTIO/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/BIGMULTIO/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#blackcat" caption="Board Support - BLACKCAT"> <module type="driver" id="lufa.drivers.board#blackcat" caption="Board Support - BLACKCAT">
<build type="doxygen-entry-point" value="Group_BoardInfo_BLACKCAT"/> <build type="doxygen-entry-point" value="Group_BoardInfo_BLACKCAT"/>
<device-support value="at90usb162"/> <device-support value="at90usb162"/>
<build type="define" name="BOARD" value="BOARD_BLACKCAT"/> <build type="define" name="BOARD" value="BOARD_BLACKCAT"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/BLACKCAT/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/BLACKCAT/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/BLACKCAT/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/BLACKCAT/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#bui" caption="Board Support - BUI"> <module type="driver" id="lufa.drivers.board#bui" caption="Board Support - BUI">
<build type="doxygen-entry-point" value="Group_BoardInfo_BUI"/> <build type="doxygen-entry-point" value="Group_BoardInfo_BUI"/>
<device-support value="at90usb646"/> <device-support value="at90usb646"/>
<build type="define" name="BOARD" value="BOARD_BUI"/> <build type="define" name="BOARD" value="BOARD_BUI"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/BUI/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/BUI/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/BUI/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/BUI/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#bumbleb" caption="Board Support - BUMBLEB"> <module type="driver" id="lufa.drivers.board#bumbleb" caption="Board Support - BUMBLEB">
<build type="doxygen-entry-point" value="Group_BoardInfo_BUMBLEB"/> <build type="doxygen-entry-point" value="Group_BoardInfo_BUMBLEB"/>
<device-support value="at90usb162"/> <device-support value="at90usb162"/>
<build type="define" name="BOARD" value="BOARD_BUMBLEB"/> <build type="define" name="BOARD" value="BOARD_BUMBLEB"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<require idref="lufa.drivers.board.joystick"/> <require idref="lufa.drivers.board.joystick"/>
<build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/Buttons.h"/>
<build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/Joystick.h"/> <build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/Joystick.h"/>
<build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#culv3" caption="Board Support - CULV3"> <module type="driver" id="lufa.drivers.board#culv3" caption="Board Support - CULV3">
<build type="doxygen-entry-point" value="Group_BoardInfo_CULV3"/> <build type="doxygen-entry-point" value="Group_BoardInfo_CULV3"/>
<device-support value="atmega32u4"/> <device-support value="atmega32u4"/>
<build type="define" name="BOARD" value="BOARD_CULV3"/> <build type="define" name="BOARD" value="BOARD_CULV3"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/CULV3/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/CULV3/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/CULV3/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/CULV3/Buttons.h"/>
<build type="header-file" value="Drivers/Board/AVR8/CULV3/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/CULV3/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#duce" caption="Board Support - DUCE"> <module type="driver" id="lufa.drivers.board#duce" caption="Board Support - DUCE">
<build type="doxygen-entry-point" value="Group_BoardInfo_DUCE"/> <build type="doxygen-entry-point" value="Group_BoardInfo_DUCE"/>
<device-support value="atmega32u2"/> <device-support value="atmega32u2"/>
<build type="define" name="BOARD" value="BOARD_DUCE"/> <build type="define" name="BOARD" value="BOARD_DUCE"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/DUCE/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/DUCE/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/DUCE/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/DUCE/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#evk527" caption="Board Support - EVK527"> <module type="driver" id="lufa.drivers.board#evk527" caption="Board Support - EVK527">
<build type="doxygen-entry-point" value="Group_BoardInfo_EVK527"/> <build type="doxygen-entry-point" value="Group_BoardInfo_EVK527"/>
<device-support value="atmega32u4"/> <device-support value="atmega32u4"/>
<build type="define" name="BOARD" value="BOARD_EVK527"/> <build type="define" name="BOARD" value="BOARD_EVK527"/>
<require idref="lufa.drivers.misc.at45db321c"/> <require idref="lufa.drivers.misc.at45db321c"/>
<require idref="lufa.drivers.peripheral.spi"/> <require idref="lufa.drivers.peripheral.spi"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<require idref="lufa.drivers.board.dataflash"/> <require idref="lufa.drivers.board.dataflash"/>
<require idref="lufa.drivers.board.joystick"/> <require idref="lufa.drivers.board.joystick"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/EVK527/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/EVK527/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/EVK527/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/EVK527/Buttons.h"/>
<build type="header-file" value="Drivers/Board/AVR8/EVK527/Dataflash.h"/> <build type="header-file" value="Drivers/Board/AVR8/EVK527/Dataflash.h"/>
<build type="header-file" value="Drivers/Board/AVR8/EVK527/Joystick.h"/> <build type="header-file" value="Drivers/Board/AVR8/EVK527/Joystick.h"/>
<build type="header-file" value="Drivers/Board/AVR8/EVK527/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/EVK527/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#jm_db_u2" caption="Board Support - JMDBU2"> <module type="driver" id="lufa.drivers.board#jm_db_u2" caption="Board Support - JMDBU2">
<build type="doxygen-entry-point" value="Group_BoardInfo_JMDBU2"/> <build type="doxygen-entry-point" value="Group_BoardInfo_JMDBU2"/>
<device-support value="atmega32u2"/> <device-support value="atmega32u2"/>
<build type="define" name="BOARD" value="BOARD_JMDBU2"/> <build type="define" name="BOARD" value="BOARD_JMDBU2"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/JMDBU2/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/JMDBU2/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/JMDBU2/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/JMDBU2/Buttons.h"/>
<build type="header-file" value="Drivers/Board/AVR8/JMDBU2/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/JMDBU2/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#leonardo" caption="Board Support - LEONARDO"> <module type="driver" id="lufa.drivers.board#leonardo" caption="Board Support - LEONARDO">
<build type="doxygen-entry-point" value="Group_BoardInfo_LEONARDO"/> <build type="doxygen-entry-point" value="Group_BoardInfo_LEONARDO"/>
<device-support value="atmega32u4"/> <device-support value="atmega32u4"/>
<build type="define" name="BOARD" value="BOARD_LEONARDO"/> <build type="define" name="BOARD" value="BOARD_LEONARDO"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/LEONARDO/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/LEONARDO/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/LEONARDO/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/LEONARDO/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#maximus" caption="Board Support - MAXIMUS"> <module type="driver" id="lufa.drivers.board#maximus" caption="Board Support - MAXIMUS">
<build type="doxygen-entry-point" value="Group_BoardInfo_MAXIMUS"/> <build type="doxygen-entry-point" value="Group_BoardInfo_MAXIMUS"/>
<device-support value="at90usb162"/> <device-support value="at90usb162"/>
<build type="define" name="BOARD" value="BOARD_MAXIMUS"/> <build type="define" name="BOARD" value="BOARD_MAXIMUS"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/MAXIMUS/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/MAXIMUS/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/MAXIMUS/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/MAXIMUS/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#micropendous_32u2" caption="Board Support - MICROPENDOUS_32U2"> <module type="driver" id="lufa.drivers.board#micropendous_32u2" caption="Board Support - MICROPENDOUS_32U2">
<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_32U2"/> <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_32U2"/>
<device-support value="atmega32u2"/> <device-support value="atmega32u2"/>
<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_32U2"/> <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_32U2"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/LEDs.h"/>
<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#micropendous_a" caption="Board Support - MICROPENDOUS_A"> <module type="driver" id="lufa.drivers.board#micropendous_a" caption="Board Support - MICROPENDOUS_A">
<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_A"/> <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_A"/>
<device-support value="at90usb1287"/> <device-support value="at90usb1287"/>
<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_A"/> <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_A"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#micropendous_1" caption="Board Support - MICROPENDOUS_1"> <module type="driver" id="lufa.drivers.board#micropendous_1" caption="Board Support - MICROPENDOUS_1">
<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_1"/> <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_1"/>
<device-support value="at90usb162"/> <device-support value="at90usb162"/>
<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_1"/> <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_1"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#micropendous_2" caption="Board Support - MICROPENDOUS_2"> <module type="driver" id="lufa.drivers.board#micropendous_2" caption="Board Support - MICROPENDOUS_2">
<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_2"/> <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_2"/>
<device-support value="atmega32u4"/> <device-support value="atmega32u4"/>
<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_2"/> <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_2"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#micropendous_3" caption="Board Support - MICROPENDOUS_3"> <module type="driver" id="lufa.drivers.board#micropendous_3" caption="Board Support - MICROPENDOUS_3">
<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_3"/> <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_3"/>
<device-support value="at90usb1287"/> <device-support value="at90usb1287"/>
<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_3"/> <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_3"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#micropendous_4" caption="Board Support - MICROPENDOUS_4"> <module type="driver" id="lufa.drivers.board#micropendous_4" caption="Board Support - MICROPENDOUS_4">
<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_4"/> <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_4"/>
<device-support value="at90usb1287"/> <device-support value="at90usb1287"/>
<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_4"/> <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_4"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#micropendous_dip" caption="Board Support - MICROPENDOUS_DIP"> <module type="driver" id="lufa.drivers.board#micropendous_dip" caption="Board Support - MICROPENDOUS_DIP">
<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_DIP"/> <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_DIP"/>
<device-support value="at90usb1287"/> <device-support value="at90usb1287"/>
<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_DIP"/> <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_DIP"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#micropendous_rev1" caption="Board Support - MICROPENDOUS_REV1"> <module type="driver" id="lufa.drivers.board#micropendous_rev1" caption="Board Support - MICROPENDOUS_REV1">
<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_REV1"/> <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_REV1"/>
<device-support value="at90usb1287"/> <device-support value="at90usb1287"/>
<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_REV1"/> <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_REV1"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/LEDs.h"/>
<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#micropendous_rev2" caption="Board Support - MICROPENDOUS_REV2"> <module type="driver" id="lufa.drivers.board#micropendous_rev2" caption="Board Support - MICROPENDOUS_REV2">
<build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_REV2"/> <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_REV2"/>
<device-support value="at90usb1287"/> <device-support value="at90usb1287"/>
<build type="define" name="BOARD" value="BOARD_MICROPENDOUS_REV2"/> <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_REV2"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/LEDs.h"/>
<build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#microsin_162" caption="Board Support - MICROSIN162"> <module type="driver" id="lufa.drivers.board#microsin_162" caption="Board Support - MICROSIN162">
<build type="doxygen-entry-point" value="Group_BoardInfo_MICROSIN162"/> <build type="doxygen-entry-point" value="Group_BoardInfo_MICROSIN162"/>
<device-support value="atmega162"/> <device-support value="atmega162"/>
<build type="define" name="BOARD" value="BOARD_MICROSIN162"/> <build type="define" name="BOARD" value="BOARD_MICROSIN162"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<build type="header-file" value="Drivers/Board/AVR8/MICROSIN162/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICROSIN162/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/MICROSIN162/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICROSIN162/LEDs.h"/>
<build type="header-file" value="Drivers/Board/AVR8/MICROSIN162/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICROSIN162/Buttons.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#minimus" caption="Board Support - MINIMUS"> <module type="driver" id="lufa.drivers.board#minimus" caption="Board Support - MINIMUS">
<build type="doxygen-entry-point" value="Group_BoardInfo_MINIMUS"/> <build type="doxygen-entry-point" value="Group_BoardInfo_MINIMUS"/>
<device-support value="atmega32u2"/> <device-support value="atmega32u2"/>
<build type="define" name="BOARD" value="BOARD_MINIMUS"/> <build type="define" name="BOARD" value="BOARD_MINIMUS"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<build type="header-file" value="Drivers/Board/AVR8/MINIMUS/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/MINIMUS/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/MINIMUS/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/MINIMUS/LEDs.h"/>
<build type="header-file" value="Drivers/Board/AVR8/MINIMUS/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/MINIMUS/Buttons.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#multio" caption="Board Support - MULTIO"> <module type="driver" id="lufa.drivers.board#multio" caption="Board Support - MULTIO">
<build type="doxygen-entry-point" value="Group_BoardInfo_MULTIO"/> <build type="doxygen-entry-point" value="Group_BoardInfo_MULTIO"/>
<device-support value="at90usb162"/> <device-support value="at90usb162"/>
<build type="define" name="BOARD" value="BOARD_MULTIO"/> <build type="define" name="BOARD" value="BOARD_MULTIO"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/MULTIO/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/MULTIO/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/MULTIO/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/MULTIO/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#olimex_162" caption="Board Support - OLIMEX162"> <module type="driver" id="lufa.drivers.board#olimex_162" caption="Board Support - OLIMEX162">
<build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEX162"/> <build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEX162"/>
<device-support value="at90usb162"/> <device-support value="at90usb162"/>
<build type="define" name="BOARD" value="BOARD_OLIMEX162"/> <build type="define" name="BOARD" value="BOARD_OLIMEX162"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<build type="header-file" value="Drivers/Board/AVR8/OLIMEX162/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/OLIMEX162/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/OLIMEX162/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/OLIMEX162/LEDs.h"/>
<build type="header-file" value="Drivers/Board/AVR8/OLIMEX162/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/OLIMEX162/Buttons.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#olimex_32u4" caption="Board Support - OLIMEX32U4"> <module type="driver" id="lufa.drivers.board#olimex_32u4" caption="Board Support - OLIMEX32U4">
<build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEX32U4"/> <build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEX32U4"/>
<device-support value="atmega32u4"/> <device-support value="atmega32u4"/>
<build type="define" name="BOARD" value="BOARD_OLIMEX32U4"/> <build type="define" name="BOARD" value="BOARD_OLIMEX32U4"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<build type="header-file" value="Drivers/Board/AVR8/OLIMEX32U4/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/OLIMEX32U4/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/OLIMEX32U4/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/OLIMEX32U4/LEDs.h"/>
<build type="header-file" value="Drivers/Board/AVR8/OLIMEX32U4/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/OLIMEX32U4/Buttons.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#olimex_isp_mkii" caption="Board Support - OLIMEXISPMK2"> <module type="driver" id="lufa.drivers.board#olimex_isp_mkii" caption="Board Support - OLIMEXISPMK2">
<build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEXISPMK2"/> <build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEXISPMK2"/>
<device-support value="at90usb162"/> <device-support value="at90usb162"/>
<build type="define" name="BOARD" value="BOARD_OLIMEXISPMK2"/> <build type="define" name="BOARD" value="BOARD_OLIMEXISPMK2"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<build type="header-file" value="Drivers/Board/AVR8/OLIMEXISPMK2/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/OLIMEXISPMK2/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/OLIMEXISPMK2/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/OLIMEXISPMK2/LEDs.h"/>
<build type="header-file" value="Drivers/Board/AVR8/OLIMEXISPMK2/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/OLIMEXISPMK2/Buttons.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#olimex_t32u4" caption="Board Support - OLIMEX_T32U4"> <module type="driver" id="lufa.drivers.board#olimex_t32u4" caption="Board Support - OLIMEX_T32U4">
<build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEXT32U4"/> <build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEXT32U4"/>
<device-support value="atmega32u4"/> <device-support value="atmega32u4"/>
<build type="define" name="BOARD" value="BOARD_OLIMEXT32U4"/> <build type="define" name="BOARD" value="BOARD_OLIMEXT32U4"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<build type="header-file" value="Drivers/Board/AVR8/OLIMEXT32U4/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/OLIMEXT32U4/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/OLIMEXT32U4/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/OLIMEXT32U4/LEDs.h"/>
<build type="header-file" value="Drivers/Board/AVR8/OLIMEXT32U4/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/OLIMEXT32U4/Buttons.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#rzusbstick" caption="Board Support - RZUSBSTICK"> <module type="driver" id="lufa.drivers.board#rzusbstick" caption="Board Support - RZUSBSTICK">
<build type="doxygen-entry-point" value="Group_BoardInfo_RZUSBSTICK"/> <build type="doxygen-entry-point" value="Group_BoardInfo_RZUSBSTICK"/>
<device-support value="at90usb1287"/> <device-support value="at90usb1287"/>
<build type="define" name="BOARD" value="BOARD_RZUSBSTICK"/> <build type="define" name="BOARD" value="BOARD_RZUSBSTICK"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/RZUSBSTICK/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/RZUSBSTICK/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/RZUSBSTICK/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/RZUSBSTICK/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#sparkfun_8u2" caption="Board Support - SPARKFUN8U2"> <module type="driver" id="lufa.drivers.board#sparkfun_8u2" caption="Board Support - SPARKFUN8U2">
<build type="doxygen-entry-point" value="Group_BoardInfo_SPARKFUN8U2"/> <build type="doxygen-entry-point" value="Group_BoardInfo_SPARKFUN8U2"/>
<device-support value="atmega8u2"/> <device-support value="atmega8u2"/>
<build type="define" name="BOARD" value="BOARD_SPARKFUN8U2"/> <build type="define" name="BOARD" value="BOARD_SPARKFUN8U2"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/SPARKFUN8U2/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/SPARKFUN8U2/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/SPARKFUN8U2/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/SPARKFUN8U2/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#stk525" caption="Board Support - STK525"> <module type="driver" id="lufa.drivers.board#stk525" caption="Board Support - STK525">
<build type="doxygen-entry-point" value="Group_BoardInfo_STK525"/> <build type="doxygen-entry-point" value="Group_BoardInfo_STK525"/>
<device-support value="at90usb1287"/> <device-support value="at90usb1287"/>
<device-support value="at90usb1286"/> <device-support value="at90usb1286"/>
<device-support value="at90usb647"/> <device-support value="at90usb647"/>
<device-support value="at90usb646"/> <device-support value="at90usb646"/>
<build type="define" name="BOARD" value="BOARD_STK525"/> <build type="define" name="BOARD" value="BOARD_STK525"/>
<require idref="lufa.drivers.misc.at45db321c"/> <require idref="lufa.drivers.misc.at45db321c"/>
<require idref="lufa.drivers.peripheral.spi"/> <require idref="lufa.drivers.peripheral.spi"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<require idref="lufa.drivers.board.dataflash"/> <require idref="lufa.drivers.board.dataflash"/>
<require idref="lufa.drivers.board.joystick"/> <require idref="lufa.drivers.board.joystick"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/STK525/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/STK525/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/STK525/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/STK525/Buttons.h"/>
<build type="header-file" value="Drivers/Board/AVR8/STK525/Dataflash.h"/> <build type="header-file" value="Drivers/Board/AVR8/STK525/Dataflash.h"/>
<build type="header-file" value="Drivers/Board/AVR8/STK525/Joystick.h"/> <build type="header-file" value="Drivers/Board/AVR8/STK525/Joystick.h"/>
<build type="header-file" value="Drivers/Board/AVR8/STK525/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/STK525/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#stk526" caption="Board Support - STK526"> <module type="driver" id="lufa.drivers.board#stk526" caption="Board Support - STK526">
<build type="doxygen-entry-point" value="Group_BoardInfo_STK526"/> <build type="doxygen-entry-point" value="Group_BoardInfo_STK526"/>
<device-support value="at90usb162"/> <device-support value="at90usb162"/>
<device-support value="at90usb82"/> <device-support value="at90usb82"/>
<device-support value="atmega32u2"/> <device-support value="atmega32u2"/>
<device-support value="atmega16u2"/> <device-support value="atmega16u2"/>
<device-support value="atmega8u2"/> <device-support value="atmega8u2"/>
<build type="define" name="BOARD" value="BOARD_STK526"/> <build type="define" name="BOARD" value="BOARD_STK526"/>
<require idref="lufa.drivers.misc.at45db642d"/> <require idref="lufa.drivers.misc.at45db642d"/>
<require idref="lufa.drivers.peripheral.spi"/> <require idref="lufa.drivers.peripheral.spi"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<require idref="lufa.drivers.board.dataflash"/> <require idref="lufa.drivers.board.dataflash"/>
<require idref="lufa.drivers.board.joystick"/> <require idref="lufa.drivers.board.joystick"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/STK526/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/STK526/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/STK526/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/STK526/Buttons.h"/>
<build type="header-file" value="Drivers/Board/AVR8/STK526/Dataflash.h"/> <build type="header-file" value="Drivers/Board/AVR8/STK526/Dataflash.h"/>
<build type="header-file" value="Drivers/Board/AVR8/STK526/Joystick.h"/> <build type="header-file" value="Drivers/Board/AVR8/STK526/Joystick.h"/>
<build type="header-file" value="Drivers/Board/AVR8/STK526/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/STK526/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#teensy" caption="Board Support - TEENSY"> <module type="driver" id="lufa.drivers.board#teensy" caption="Board Support - TEENSY">
<build type="doxygen-entry-point" value="Group_BoardInfo_TEENSY"/> <build type="doxygen-entry-point" value="Group_BoardInfo_TEENSY"/>
<device-support value="at90usb162"/> <device-support value="at90usb162"/>
<build type="define" name="BOARD" value="BOARD_TEENSY"/> <build type="define" name="BOARD" value="BOARD_TEENSY"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/TEENSY/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/TEENSY/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/TEENSY/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/TEENSY/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#teensy2" caption="Board Support - TEENSY2"> <module type="driver" id="lufa.drivers.board#teensy2" caption="Board Support - TEENSY2">
<build type="doxygen-entry-point" value="Group_BoardInfo_TEENSY2"/> <build type="doxygen-entry-point" value="Group_BoardInfo_TEENSY2"/>
<device-support value="at90usb646"/> <device-support value="at90usb646"/>
<build type="define" name="BOARD" value="BOARD_TEENSY2"/> <build type="define" name="BOARD" value="BOARD_TEENSY2"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/TEENSY/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/TEENSY/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/TEENSY/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/TEENSY/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#tul" caption="Board Support - TUL"> <module type="driver" id="lufa.drivers.board#tul" caption="Board Support - TUL">
<build type="doxygen-entry-point" value="Group_BoardInfo_TUL"/> <build type="doxygen-entry-point" value="Group_BoardInfo_TUL"/>
<device-support value="atmega32u4"/> <device-support value="atmega32u4"/>
<build type="define" name="BOARD" value="BOARD_TUL"/> <build type="define" name="BOARD" value="BOARD_TUL"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/TUL/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/TUL/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/TUL/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/TUL/Buttons.h"/>
<build type="header-file" value="Drivers/Board/AVR8/TUL/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/TUL/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#udip" caption="Board Support - UDIP"> <module type="driver" id="lufa.drivers.board#udip" caption="Board Support - UDIP">
<build type="doxygen-entry-point" value="Group_BoardInfo_UDIP"/> <build type="doxygen-entry-point" value="Group_BoardInfo_UDIP"/>
<device-support value="atmega32u2"/> <device-support value="atmega32u2"/>
<build type="define" name="BOARD" value="BOARD_UDIP"/> <build type="define" name="BOARD" value="BOARD_UDIP"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/UDIP/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/UDIP/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/UDIP/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/UDIP/Buttons.h"/>
<build type="header-file" value="Drivers/Board/AVR8/UDIP/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/UDIP/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#uno" caption="Board Support - UNO"> <module type="driver" id="lufa.drivers.board#uno" caption="Board Support - UNO">
<build type="doxygen-entry-point" value="Group_BoardInfo_UNO"/> <build type="doxygen-entry-point" value="Group_BoardInfo_UNO"/>
<device-support value="atmega8u2"/> <device-support value="atmega8u2"/>
<device-support value="atmega16u2"/> <device-support value="atmega16u2"/>
<build type="define" name="BOARD" value="BOARD_UNO"/> <build type="define" name="BOARD" value="BOARD_UNO"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/UNO/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/UNO/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/UNO/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/UNO/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#usb2ax" caption="Board Support - USB2AX"> <module type="driver" id="lufa.drivers.board#usb2ax" caption="Board Support - USB2AX">
<build type="doxygen-entry-point" value="Group_BoardInfo_USB2AX"/> <build type="doxygen-entry-point" value="Group_BoardInfo_USB2AX"/>
<device-support value="atmega32u2"/> <device-support value="atmega32u2"/>
<build type="define" name="BOARD" value="BOARD_USB2AX"/> <build type="define" name="BOARD" value="BOARD_USB2AX"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/USB2AX/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/USB2AX/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Buttons.h"/>
<build type="header-file" value="Drivers/Board/AVR8/USB2AX/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/USB2AX/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#usb2ax_v3" caption="Board Support - USB2AX_V3"> <module type="driver" id="lufa.drivers.board#usb2ax_v3" caption="Board Support - USB2AX_V3">
<build type="doxygen-entry-point" value="Group_BoardInfo_USB2AX_V3"/> <build type="doxygen-entry-point" value="Group_BoardInfo_USB2AX_V3"/>
<device-support value="atmega32u2"/> <device-support value="atmega32u2"/>
<build type="define" name="BOARD" value="BOARD_USB2AX_V3"/> <build type="define" name="BOARD" value="BOARD_USB2AX_V3"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/USB2AX/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/USB2AX/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Buttons.h"/>
<build type="header-file" value="Drivers/Board/AVR8/USB2AX/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/USB2AX/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#usb2ax_v3_1" caption="Board Support - USB2AX_V31"> <module type="driver" id="lufa.drivers.board#usb2ax_v3_1" caption="Board Support - USB2AX_V31">
<build type="doxygen-entry-point" value="Group_BoardInfo_USB2AX_V31"/> <build type="doxygen-entry-point" value="Group_BoardInfo_USB2AX_V31"/>
<device-support value="atmega32u2"/> <device-support value="atmega32u2"/>
<build type="define" name="BOARD" value="BOARD_USB2AX_V31"/> <build type="define" name="BOARD" value="BOARD_USB2AX_V31"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/USB2AX/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/USB2AX/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Buttons.h"/>
<build type="header-file" value="Drivers/Board/AVR8/USB2AX/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/USB2AX/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#usbfoo" caption="Board Support - USBFOO"> <module type="driver" id="lufa.drivers.board#usbfoo" caption="Board Support - USBFOO">
<build type="doxygen-entry-point" value="Group_BoardInfo_USBFOO"/> <build type="doxygen-entry-point" value="Group_BoardInfo_USBFOO"/>
<device-support value="atmega162"/> <device-support value="atmega162"/>
<build type="define" name="BOARD" value="BOARD_USBFOO"/> <build type="define" name="BOARD" value="BOARD_USBFOO"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/USBFOO/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/USBFOO/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/USBFOO/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/USBFOO/Buttons.h"/>
<build type="header-file" value="Drivers/Board/AVR8/USBFOO/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/USBFOO/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#usbkey" caption="Board Support - USBKEY"> <module type="driver" id="lufa.drivers.board#usbkey" caption="Board Support - USBKEY">
<build type="doxygen-entry-point" value="Group_BoardInfo_USBKEY"/> <build type="doxygen-entry-point" value="Group_BoardInfo_USBKEY"/>
<device-support value="at90usb1287"/> <device-support value="at90usb1287"/>
<build type="define" name="BOARD" value="BOARD_USBKEY"/> <build type="define" name="BOARD" value="BOARD_USBKEY"/>
<require idref="lufa.drivers.misc.at45db642d"/> <require idref="lufa.drivers.misc.at45db642d"/>
<require idref="lufa.drivers.peripheral.spi"/> <require idref="lufa.drivers.peripheral.spi"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<require idref="lufa.drivers.board.dataflash"/> <require idref="lufa.drivers.board.dataflash"/>
<require idref="lufa.drivers.board.joystick"/> <require idref="lufa.drivers.board.joystick"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/USBKEY/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/USBKEY/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/USBKEY/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/USBKEY/Buttons.h"/>
<build type="header-file" value="Drivers/Board/AVR8/USBKEY/Dataflash.h"/> <build type="header-file" value="Drivers/Board/AVR8/USBKEY/Dataflash.h"/>
<build type="header-file" value="Drivers/Board/AVR8/USBKEY/Joystick.h"/> <build type="header-file" value="Drivers/Board/AVR8/USBKEY/Joystick.h"/>
<build type="header-file" value="Drivers/Board/AVR8/USBKEY/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/USBKEY/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#usbtiny_mkii" caption="Board Support - USBTINYMKII"> <module type="driver" id="lufa.drivers.board#usbtiny_mkii" caption="Board Support - USBTINYMKII">
<build type="doxygen-entry-point" value="Group_BoardInfo_USBTINYMKII"/> <build type="doxygen-entry-point" value="Group_BoardInfo_USBTINYMKII"/>
<device-support value="at90usb162"/> <device-support value="at90usb162"/>
<build type="define" name="BOARD" value="BOARD_USBTINYMKII"/> <build type="define" name="BOARD" value="BOARD_USBTINYMKII"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/USBTINYMKII/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/USBTINYMKII/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/USBTINYMKII/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/USBTINYMKII/Buttons.h"/>
<build type="header-file" value="Drivers/Board/AVR8/USBTINYMKII/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/USBTINYMKII/LEDs.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#xplain_rev1" caption="Board Support - XPLAIN (HW Rev 1)"> <module type="driver" id="lufa.drivers.board#xplain_rev1" caption="Board Support - XPLAIN (HW Rev 1)">
<build type="doxygen-entry-point" value="Group_BoardInfo_XPLAIN_REV1"/> <build type="doxygen-entry-point" value="Group_BoardInfo_XPLAIN_REV1"/>
<device-support value="at90usb1287"/> <device-support value="at90usb1287"/>
<require idref="lufa.drivers.misc.at45db642d"/> <require idref="lufa.drivers.misc.at45db642d"/>
<require idref="lufa.drivers.peripheral.spi"/> <require idref="lufa.drivers.peripheral.spi"/>
<require idref="lufa.drivers.board.dataflash"/> <require idref="lufa.drivers.board.dataflash"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Dataflash.h"/> <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Dataflash.h"/>
<build type="header-file" value="Drivers/Board/AVR8/XPLAIN/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/LEDs.h"/>
<build type="define" name="BOARD" value="BOARD_XPLAIN_REV1"/> <build type="define" name="BOARD" value="BOARD_XPLAIN_REV1"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#xplain" caption="Board Support - XPLAIN (HW Rev 2+)"> <module type="driver" id="lufa.drivers.board#xplain" caption="Board Support - XPLAIN (HW Rev 2+)">
<build type="doxygen-entry-point" value="Group_BoardInfo_XPLAIN"/> <build type="doxygen-entry-point" value="Group_BoardInfo_XPLAIN"/>
<device-support value="at90usb1287"/> <device-support value="at90usb1287"/>
<require idref="lufa.drivers.misc.at45db642d"/> <require idref="lufa.drivers.misc.at45db642d"/>
<require idref="lufa.drivers.peripheral.spi"/> <require idref="lufa.drivers.peripheral.spi"/>
<require idref="lufa.drivers.board.dataflash"/> <require idref="lufa.drivers.board.dataflash"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Dataflash.h"/> <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Dataflash.h"/>
<build type="header-file" value="Drivers/Board/AVR8/XPLAIN/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/LEDs.h"/>
<build type="define" name="BOARD" value="BOARD_XPLAIN"/> <build type="define" name="BOARD" value="BOARD_XPLAIN"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#a3bu_xplained" caption="Board Support - A3BU_XPLAINED"> <module type="driver" id="lufa.drivers.board#a3bu_xplained" caption="Board Support - A3BU_XPLAINED">
<build type="doxygen-entry-point" value="Group_BoardInfo_A3BU_XPLAINED"/> <build type="doxygen-entry-point" value="Group_BoardInfo_A3BU_XPLAINED"/>
<device-support value="atxmega256a3bu"/> <device-support value="atxmega256a3bu"/>
<require idref="lufa.drivers.misc.at45db642d"/> <require idref="lufa.drivers.misc.at45db642d"/>
<require idref="lufa.drivers.peripheral.usart_spi"/> <require idref="lufa.drivers.peripheral.usart_spi"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<require idref="lufa.drivers.board.dataflash"/> <require idref="lufa.drivers.board.dataflash"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/Board.h"/> <build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/Board.h"/>
<build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/Buttons.h"/> <build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/Buttons.h"/>
<build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/Dataflash.h"/> <build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/Dataflash.h"/>
<build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/LEDs.h"/> <build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/LEDs.h"/>
<build type="define" name="BOARD" value="BOARD_A3BU_XPLAINED"/> <build type="define" name="BOARD" value="BOARD_A3BU_XPLAINED"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#b1_xplained" caption="Board Support - B1_XPLAINED"> <module type="driver" id="lufa.drivers.board#b1_xplained" caption="Board Support - B1_XPLAINED">
<build type="doxygen-entry-point" value="Group_BoardInfo_B1_XPLAINED"/> <build type="doxygen-entry-point" value="Group_BoardInfo_B1_XPLAINED"/>
<device-support value="atxmega128b1"/> <device-support value="atxmega128b1"/>
<require idref="lufa.drivers.misc.at45db642d"/> <require idref="lufa.drivers.misc.at45db642d"/>
<require idref="lufa.drivers.peripheral.usart_spi"/> <require idref="lufa.drivers.peripheral.usart_spi"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<require idref="lufa.drivers.board.dataflash"/> <require idref="lufa.drivers.board.dataflash"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/Board.h"/> <build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/Board.h"/>
<build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/Buttons.h"/> <build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/Buttons.h"/>
<build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/Dataflash.h"/> <build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/Dataflash.h"/>
<build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/LEDs.h"/> <build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/LEDs.h"/>
<build type="define" name="BOARD" value="BOARD_B1_XPLAINED"/> <build type="define" name="BOARD" value="BOARD_B1_XPLAINED"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#evk1100" caption="Board Support - EVK1100"> <module type="driver" id="lufa.drivers.board#evk1100" caption="Board Support - EVK1100">
<build type="doxygen-entry-point" value="Group_BoardInfo_EVK1100"/> <build type="doxygen-entry-point" value="Group_BoardInfo_EVK1100"/>
<device-support value="at32uc3a0512"/> <device-support value="at32uc3a0512"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<require idref="lufa.drivers.board.joystick"/> <require idref="lufa.drivers.board.joystick"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/UC3/EVK1100/Board.h"/> <build type="header-file" value="Drivers/Board/UC3/EVK1100/Board.h"/>
<build type="header-file" value="Drivers/Board/UC3/EVK1100/Buttons.h"/> <build type="header-file" value="Drivers/Board/UC3/EVK1100/Buttons.h"/>
<build type="header-file" value="Drivers/Board/UC3/EVK1100/Joystick.h"/> <build type="header-file" value="Drivers/Board/UC3/EVK1100/Joystick.h"/>
<build type="header-file" value="Drivers/Board/UC3/EVK1100/LEDs.h"/> <build type="header-file" value="Drivers/Board/UC3/EVK1100/LEDs.h"/>
<build type="define" name="BOARD" value="BOARD_EVK1100"/> <build type="define" name="BOARD" value="BOARD_EVK1100"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#evk1101" caption="Board Support - EVK1101"> <module type="driver" id="lufa.drivers.board#evk1101" caption="Board Support - EVK1101">
<build type="doxygen-entry-point" value="Group_BoardInfo_EVK1101"/> <build type="doxygen-entry-point" value="Group_BoardInfo_EVK1101"/>
<device-support value="at32uc3b0256"/> <device-support value="at32uc3b0256"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<require idref="lufa.drivers.board.joystick"/> <require idref="lufa.drivers.board.joystick"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/UC3/EVK1101/Board.h"/> <build type="header-file" value="Drivers/Board/UC3/EVK1101/Board.h"/>
<build type="header-file" value="Drivers/Board/UC3/EVK1101/Buttons.h"/> <build type="header-file" value="Drivers/Board/UC3/EVK1101/Buttons.h"/>
<build type="header-file" value="Drivers/Board/UC3/EVK1101/Joystick.h"/> <build type="header-file" value="Drivers/Board/UC3/EVK1101/Joystick.h"/>
<build type="header-file" value="Drivers/Board/UC3/EVK1101/LEDs.h"/> <build type="header-file" value="Drivers/Board/UC3/EVK1101/LEDs.h"/>
<build type="define" name="BOARD" value="BOARD_EVK1101"/> <build type="define" name="BOARD" value="BOARD_EVK1101"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#evk1104" caption="Board Support - EVK1104"> <module type="driver" id="lufa.drivers.board#evk1104" caption="Board Support - EVK1104">
<build type="doxygen-entry-point" value="Group_BoardInfo_EVK1104"/> <build type="doxygen-entry-point" value="Group_BoardInfo_EVK1104"/>
<device-support value="at32uc3a3256"/> <device-support value="at32uc3a3256"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/UC3/EVK1104/Board.h"/> <build type="header-file" value="Drivers/Board/UC3/EVK1104/Board.h"/>
<build type="header-file" value="Drivers/Board/UC3/EVK1104/Buttons.h"/> <build type="header-file" value="Drivers/Board/UC3/EVK1104/Buttons.h"/>
<build type="header-file" value="Drivers/Board/UC3/EVK1104/LEDs.h"/> <build type="header-file" value="Drivers/Board/UC3/EVK1104/LEDs.h"/>
<build type="define" name="BOARD" value="BOARD_EVK1104"/> <build type="define" name="BOARD" value="BOARD_EVK1104"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#uc3a3_xplained" caption="Board Support - UC3A3_XPLAINED"> <module type="driver" id="lufa.drivers.board#uc3a3_xplained" caption="Board Support - UC3A3_XPLAINED">
<build type="doxygen-entry-point" value="Group_BoardInfo_UC3_A3_XPLAINED"/> <build type="doxygen-entry-point" value="Group_BoardInfo_UC3_A3_XPLAINED"/>
<device-support value="at32uc3a3256"/> <device-support value="at32uc3a3256"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/UC3/UC3A3_XPLAINED/Board.h"/> <build type="header-file" value="Drivers/Board/UC3/UC3A3_XPLAINED/Board.h"/>
<build type="header-file" value="Drivers/Board/UC3/UC3A3_XPLAINED/Buttons.h"/> <build type="header-file" value="Drivers/Board/UC3/UC3A3_XPLAINED/Buttons.h"/>
<build type="header-file" value="Drivers/Board/UC3/UC3A3_XPLAINED/LEDs.h"/> <build type="header-file" value="Drivers/Board/UC3/UC3A3_XPLAINED/LEDs.h"/>
<build type="define" name="BOARD" value="BOARD_UC3A3_XPLAINED"/> <build type="define" name="BOARD" value="BOARD_UC3A3_XPLAINED"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#stange_isp" caption="Board Support - STANGE_ISP"> <module type="driver" id="lufa.drivers.board#stange_isp" caption="Board Support - STANGE_ISP">
<build type="doxygen-entry-point" value="Group_BoardInfo_STANGE_ISP"/> <build type="doxygen-entry-point" value="Group_BoardInfo_STANGE_ISP"/>
<device-support value="at90usb162"/> <device-support value="at90usb162"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/STANGE_ISP/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/STANGE_ISP/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/STANGE_ISP/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/STANGE_ISP/Buttons.h"/>
<build type="header-file" value="Drivers/Board/AVR8/STANGE_ISP/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/STANGE_ISP/LEDs.h"/>
<build type="define" name="BOARD" value="BOARD_STANGE_ISP"/> <build type="define" name="BOARD" value="BOARD_STANGE_ISP"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#c3_xplained" caption="Board Support - C3_XPLAINED"> <module type="driver" id="lufa.drivers.board#c3_xplained" caption="Board Support - C3_XPLAINED">
<build type="doxygen-entry-point" value="Group_BoardInfo_C3_XPLAINED"/> <build type="doxygen-entry-point" value="Group_BoardInfo_C3_XPLAINED"/>
<device-support value="atxmega384c3"/> <device-support value="atxmega384c3"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/XMEGA/C3_XPLAINED/Board.h"/> <build type="header-file" value="Drivers/Board/XMEGA/C3_XPLAINED/Board.h"/>
<build type="header-file" value="Drivers/Board/XMEGA/C3_XPLAINED/Buttons.h"/> <build type="header-file" value="Drivers/Board/XMEGA/C3_XPLAINED/Buttons.h"/>
<build type="header-file" value="Drivers/Board/XMEGA/C3_XPLAINED/LEDs.h"/> <build type="header-file" value="Drivers/Board/XMEGA/C3_XPLAINED/LEDs.h"/>
<build type="define" name="BOARD" value="BOARD_C3_XPLAINED"/> <build type="define" name="BOARD" value="BOARD_C3_XPLAINED"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#u2s" caption="Board Support - U2S"> <module type="driver" id="lufa.drivers.board#u2s" caption="Board Support - U2S">
<build type="doxygen-entry-point" value="Group_BoardInfo_U2S"/> <build type="doxygen-entry-point" value="Group_BoardInfo_U2S"/>
<device-support value="atmega32u2"/> <device-support value="atmega32u2"/>
<require idref="lufa.drivers.board.buttons"/> <require idref="lufa.drivers.board.buttons"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/U2S/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/U2S/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/U2S/Buttons.h"/> <build type="header-file" value="Drivers/Board/AVR8/U2S/Buttons.h"/>
<build type="header-file" value="Drivers/Board/AVR8/U2S/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/U2S/LEDs.h"/>
<build type="define" name="BOARD" value="BOARD_U2S"/> <build type="define" name="BOARD" value="BOARD_U2S"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#yun" caption="Board Support - YUN"> <module type="driver" id="lufa.drivers.board#yun" caption="Board Support - YUN">
<build type="doxygen-entry-point" value="Group_BoardInfo_YUN"/> <build type="doxygen-entry-point" value="Group_BoardInfo_YUN"/>
<device-support value="atmega32u4"/> <device-support value="atmega32u4"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/YUN/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/YUN/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/YUN/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/YUN/LEDs.h"/>
<build type="define" name="BOARD" value="BOARD_YUN"/> <build type="define" name="BOARD" value="BOARD_YUN"/>
</module> </module>
<module type="driver" id="lufa.drivers.board#yun" caption="Board Support - MICRO"> <module type="driver" id="lufa.drivers.board#yun" caption="Board Support - MICRO">
<build type="doxygen-entry-point" value="Group_BoardInfo_MICRO"/> <build type="doxygen-entry-point" value="Group_BoardInfo_MICRO"/>
<device-support value="atmega32u4"/> <device-support value="atmega32u4"/>
<require idref="lufa.drivers.board.leds"/> <require idref="lufa.drivers.board.leds"/>
<build type="header-file" value="Drivers/Board/AVR8/MICRO/Board.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICRO/Board.h"/>
<build type="header-file" value="Drivers/Board/AVR8/MICRO/LEDs.h"/> <build type="header-file" value="Drivers/Board/AVR8/MICRO/LEDs.h"/>
<build type="define" name="BOARD" value="BOARD_MICRO"/> <build type="define" name="BOARD" value="BOARD_MICRO"/>
</module> </module>
</select-by-config> </select-by-config>
</asf> </asf>
</lufa> </lufa>

@ -1,57 +1,57 @@
<!-- <!--
LUFA Library LUFA Library
Copyright (C) Dean Camera, 2013. Copyright (C) Dean Camera, 2013.
dean [at] fourwalledcubicle [dot] com dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org www.lufa-lib.org
--> -->
<!-- Atmel Studio framework integration file --> <!-- Atmel Studio framework integration file -->
<lufa> <lufa>
<asf> <asf>
<module type="component" id="lufa.drivers.misc.at45db321c" caption="LUFA AT45DB321C Dataflash Commands"> <module type="component" id="lufa.drivers.misc.at45db321c" caption="LUFA AT45DB321C Dataflash Commands">
<device-support-alias value="lufa_avr8"/> <device-support-alias value="lufa_avr8"/>
<device-support-alias value="lufa_xmega"/> <device-support-alias value="lufa_xmega"/>
<device-support-alias value="lufa_uc3"/> <device-support-alias value="lufa_uc3"/>
<build type="doxygen-entry-point" value="Group_AT45DB321C"/> <build type="doxygen-entry-point" value="Group_AT45DB321C"/>
<build type="include-path" value=".."/> <build type="include-path" value=".."/>
<build type="header-file" subtype="api" value="Drivers/Misc/AT45DB321C.h"/> <build type="header-file" subtype="api" value="Drivers/Misc/AT45DB321C.h"/>
</module> </module>
<module type="component" id="lufa.drivers.misc.at45db642d" caption="LUFA AT45DB642D Dataflash Commands"> <module type="component" id="lufa.drivers.misc.at45db642d" caption="LUFA AT45DB642D Dataflash Commands">
<device-support-alias value="lufa_avr8"/> <device-support-alias value="lufa_avr8"/>
<device-support-alias value="lufa_xmega"/> <device-support-alias value="lufa_xmega"/>
<device-support-alias value="lufa_uc3"/> <device-support-alias value="lufa_uc3"/>
<build type="doxygen-entry-point" value="Group_AT45DB321C"/> <build type="doxygen-entry-point" value="Group_AT45DB321C"/>
<build type="include-path" value=".."/> <build type="include-path" value=".."/>
<build type="header-file" subtype="api" value="Drivers/Misc/AT45DB642D.h"/> <build type="header-file" subtype="api" value="Drivers/Misc/AT45DB642D.h"/>
</module> </module>
<module type="service" id="lufa.drivers.misc.ringbuffer" caption="LUFA Ring Buffer"> <module type="service" id="lufa.drivers.misc.ringbuffer" caption="LUFA Ring Buffer">
<device-support-alias value="lufa_avr8"/> <device-support-alias value="lufa_avr8"/>
<device-support-alias value="lufa_xmega"/> <device-support-alias value="lufa_xmega"/>
<device-support-alias value="lufa_uc3"/> <device-support-alias value="lufa_uc3"/>
<build type="doxygen-entry-point" value="Group_RingBuff"/> <build type="doxygen-entry-point" value="Group_RingBuff"/>
<build type="include-path" value=".."/> <build type="include-path" value=".."/>
<build type="header-file" subtype="api" value="Drivers/Misc/RingBuffer.h"/> <build type="header-file" subtype="api" value="Drivers/Misc/RingBuffer.h"/>
</module> </module>
<module type="service" id="lufa.drivers.misc.ansi" caption="LUFA ANSI Terminal Commands"> <module type="service" id="lufa.drivers.misc.ansi" caption="LUFA ANSI Terminal Commands">
<device-support-alias value="lufa_avr8"/> <device-support-alias value="lufa_avr8"/>
<device-support-alias value="lufa_xmega"/> <device-support-alias value="lufa_xmega"/>
<device-support-alias value="lufa_uc3"/> <device-support-alias value="lufa_uc3"/>
<build type="doxygen-entry-point" value="Group_Terminal"/> <build type="doxygen-entry-point" value="Group_Terminal"/>
<build type="include-path" value=".."/> <build type="include-path" value=".."/>
<build type="header-file" subtype="api" value="Drivers/Misc/TerminalCodes.h"/> <build type="header-file" subtype="api" value="Drivers/Misc/TerminalCodes.h"/>
</module> </module>
</asf> </asf>
</lufa> </lufa>

@ -1,198 +1,198 @@
<!-- <!--
LUFA Library LUFA Library
Copyright (C) Dean Camera, 2013. Copyright (C) Dean Camera, 2013.
dean [at] fourwalledcubicle [dot] com dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org www.lufa-lib.org
--> -->
<!-- Atmel Studio framework integration file --> <!-- Atmel Studio framework integration file -->
<lufa> <lufa>
<asf> <asf>
<select-by-device id="lufa.drivers.peripheral.usart" caption="LUFA USART Driver"> <select-by-device id="lufa.drivers.peripheral.usart" caption="LUFA USART Driver">
<module type="driver" id="lufa.drivers.peripheral.usart#avr8" caption="LUFA USART Driver - AVR8"> <module type="driver" id="lufa.drivers.peripheral.usart#avr8" caption="LUFA USART Driver - AVR8">
<device-support-alias value="lufa_avr8"/> <device-support-alias value="lufa_avr8"/>
<build type="doxygen-entry-point" value="Group_Serial"/> <build type="doxygen-entry-point" value="Group_Serial"/>
<require idref="lufa.common"/> <require idref="lufa.common"/>
<require idref="lufa.drivers.misc.ansi"/> <require idref="lufa.drivers.misc.ansi"/>
<build type="c-source" value="Drivers/Peripheral/AVR8/Serial_AVR8.c"/> <build type="c-source" value="Drivers/Peripheral/AVR8/Serial_AVR8.c"/>
<build type="header-file" value="Drivers/Peripheral/AVR8/Serial_AVR8.h"/> <build type="header-file" value="Drivers/Peripheral/AVR8/Serial_AVR8.h"/>
<build type="include-path" value=".."/> <build type="include-path" value=".."/>
<build type="header-file" subtype="api" value="Drivers/Peripheral/Serial.h"/> <build type="header-file" subtype="api" value="Drivers/Peripheral/Serial.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.peripheral.usart#xmega" caption="LUFA USART Driver - AVR8"> <module type="driver" id="lufa.drivers.peripheral.usart#xmega" caption="LUFA USART Driver - AVR8">
<device-support-alias value="lufa_xmega"/> <device-support-alias value="lufa_xmega"/>
<build type="doxygen-entry-point" value="Group_Serial"/> <build type="doxygen-entry-point" value="Group_Serial"/>
<require idref="lufa.common"/> <require idref="lufa.common"/>
<require idref="lufa.drivers.misc.ansi"/> <require idref="lufa.drivers.misc.ansi"/>
<build type="c-source" value="Drivers/Peripheral/XMEGA/Serial_XMEGA.c"/> <build type="c-source" value="Drivers/Peripheral/XMEGA/Serial_XMEGA.c"/>
<build type="header-file" value="Drivers/Peripheral/XMEGA/Serial_XMEGA.h"/> <build type="header-file" value="Drivers/Peripheral/XMEGA/Serial_XMEGA.h"/>
<build type="include-path" value=".."/> <build type="include-path" value=".."/>
<build type="header-file" subtype="api" value="Drivers/Peripheral/Serial.h"/> <build type="header-file" subtype="api" value="Drivers/Peripheral/Serial.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.peripheral.usart#uc3" caption="LUFA USART Driver - UC3"> <module type="driver" id="lufa.drivers.peripheral.usart#uc3" caption="LUFA USART Driver - UC3">
<device-support-alias value="lufa_uc3"/> <device-support-alias value="lufa_uc3"/>
<build type="doxygen-entry-point" value="Group_Serial"/> <build type="doxygen-entry-point" value="Group_Serial"/>
<require idref="lufa.common"/> <require idref="lufa.common"/>
<require idref="lufa.drivers.misc.ansi"/> <require idref="lufa.drivers.misc.ansi"/>
<info type="gui-flag" value="hidden"/> <info type="gui-flag" value="hidden"/>
</module> </module>
</select-by-device> </select-by-device>
<select-by-device id="lufa.drivers.peripheral.spi" caption="LUFA SPI Driver"> <select-by-device id="lufa.drivers.peripheral.spi" caption="LUFA SPI Driver">
<module type="driver" id="lufa.drivers.peripheral.spi#avr8" caption="LUFA SPI Driver - AVR8"> <module type="driver" id="lufa.drivers.peripheral.spi#avr8" caption="LUFA SPI Driver - AVR8">
<device-support-alias value="lufa_avr8"/> <device-support-alias value="lufa_avr8"/>
<build type="doxygen-entry-point" value="Group_SPI"/> <build type="doxygen-entry-point" value="Group_SPI"/>
<require idref="lufa.common"/> <require idref="lufa.common"/>
<build type="header-file" value="Drivers/Peripheral/AVR8/SPI_AVR8.h"/> <build type="header-file" value="Drivers/Peripheral/AVR8/SPI_AVR8.h"/>
<build type="include-path" value=".."/> <build type="include-path" value=".."/>
<build type="header-file" subtype="api" value="Drivers/Peripheral/SPI.h"/> <build type="header-file" subtype="api" value="Drivers/Peripheral/SPI.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.peripheral.spi#xmega" caption="LUFA SPI Driver - XMEGA"> <module type="driver" id="lufa.drivers.peripheral.spi#xmega" caption="LUFA SPI Driver - XMEGA">
<device-support-alias value="lufa_xmega"/> <device-support-alias value="lufa_xmega"/>
<build type="doxygen-entry-point" value="Group_SPI"/> <build type="doxygen-entry-point" value="Group_SPI"/>
<require idref="lufa.common"/> <require idref="lufa.common"/>
<build type="header-file" value="Drivers/Peripheral/XMEGA/SPI_XMEGA.h"/> <build type="header-file" value="Drivers/Peripheral/XMEGA/SPI_XMEGA.h"/>
<build type="include-path" value=".."/> <build type="include-path" value=".."/>
<build type="header-file" subtype="api" value="Drivers/Peripheral/SPI.h"/> <build type="header-file" subtype="api" value="Drivers/Peripheral/SPI.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.peripheral.spi#uc3" caption="LUFA SPI Driver - UC3"> <module type="driver" id="lufa.drivers.peripheral.spi#uc3" caption="LUFA SPI Driver - UC3">
<device-support-alias value="lufa_uc3"/> <device-support-alias value="lufa_uc3"/>
<build type="doxygen-entry-point" value="Group_SPI"/> <build type="doxygen-entry-point" value="Group_SPI"/>
<require idref="lufa.common"/> <require idref="lufa.common"/>
<info type="gui-flag" value="hidden"/> <info type="gui-flag" value="hidden"/>
</module> </module>
</select-by-device> </select-by-device>
<select-by-device id="lufa.drivers.peripheral.usart_spi" caption="LUFA USART SPI Driver"> <select-by-device id="lufa.drivers.peripheral.usart_spi" caption="LUFA USART SPI Driver">
<module type="driver" id="lufa.drivers.peripheral.usart_spi#avr8" caption="LUFA USART SPI Driver - AVR8"> <module type="driver" id="lufa.drivers.peripheral.usart_spi#avr8" caption="LUFA USART SPI Driver - AVR8">
<device-support-alias value="lufa_avr8"/> <device-support-alias value="lufa_avr8"/>
<build type="doxygen-entry-point" value="Group_SerialSPI"/> <build type="doxygen-entry-point" value="Group_SerialSPI"/>
<require idref="lufa.common"/> <require idref="lufa.common"/>
<build type="header-file" value="Drivers/Peripheral/AVR8/SerialSPI_AVR8.h"/> <build type="header-file" value="Drivers/Peripheral/AVR8/SerialSPI_AVR8.h"/>
<build type="include-path" value=".."/> <build type="include-path" value=".."/>
<build type="header-file" subtype="api" value="Drivers/Peripheral/SerialSPI.h"/> <build type="header-file" subtype="api" value="Drivers/Peripheral/SerialSPI.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.peripheral.usart_spi#xmega" caption="LUFA USART SPI Driver - XMEGA"> <module type="driver" id="lufa.drivers.peripheral.usart_spi#xmega" caption="LUFA USART SPI Driver - XMEGA">
<device-support-alias value="lufa_xmega"/> <device-support-alias value="lufa_xmega"/>
<build type="doxygen-entry-point" value="Group_SerialSPI"/> <build type="doxygen-entry-point" value="Group_SerialSPI"/>
<require idref="lufa.common"/> <require idref="lufa.common"/>
<build type="header-file" value="Drivers/Peripheral/XMEGA/SerialSPI_XMEGA.h"/> <build type="header-file" value="Drivers/Peripheral/XMEGA/SerialSPI_XMEGA.h"/>
<build type="include-path" value=".."/> <build type="include-path" value=".."/>
<build type="header-file" subtype="api" value="Drivers/Peripheral/SerialSPI.h"/> <build type="header-file" subtype="api" value="Drivers/Peripheral/SerialSPI.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.peripheral.usart_spi#uc3" caption="LUFA USART SPI Driver - UC3"> <module type="driver" id="lufa.drivers.peripheral.usart_spi#uc3" caption="LUFA USART SPI Driver - UC3">
<device-support-alias value="lufa_uc3"/> <device-support-alias value="lufa_uc3"/>
<build type="doxygen-entry-point" value="Group_SerialSPI"/> <build type="doxygen-entry-point" value="Group_SerialSPI"/>
<require idref="lufa.common"/> <require idref="lufa.common"/>
<info type="gui-flag" value="hidden"/> <info type="gui-flag" value="hidden"/>
</module> </module>
</select-by-device> </select-by-device>
<select-by-device id="lufa.drivers.peripheral.twi" caption="LUFA TWI Master Driver"> <select-by-device id="lufa.drivers.peripheral.twi" caption="LUFA TWI Master Driver">
<module type="driver" id="lufa.drivers.peripheral.twi#avr8" caption="LUFA TWI Master Driver - AVR8"> <module type="driver" id="lufa.drivers.peripheral.twi#avr8" caption="LUFA TWI Master Driver - AVR8">
<device-support-alias value="lufa_avr8"/> <device-support-alias value="lufa_avr8"/>
<build type="doxygen-entry-point" value="Group_TWI"/> <build type="doxygen-entry-point" value="Group_TWI"/>
<require idref="lufa.common"/> <require idref="lufa.common"/>
<build type="c-source" value="Drivers/Peripheral/AVR8/TWI_AVR8.c"/> <build type="c-source" value="Drivers/Peripheral/AVR8/TWI_AVR8.c"/>
<build type="header-file" value="Drivers/Peripheral/AVR8/TWI_AVR8.h"/> <build type="header-file" value="Drivers/Peripheral/AVR8/TWI_AVR8.h"/>
<build type="include-path" value=".."/> <build type="include-path" value=".."/>
<build type="header-file" subtype="api" value="Drivers/Peripheral/TWI.h"/> <build type="header-file" subtype="api" value="Drivers/Peripheral/TWI.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.peripheral.twi#xmega" caption="LUFA TWI Master Driver - XMEGA"> <module type="driver" id="lufa.drivers.peripheral.twi#xmega" caption="LUFA TWI Master Driver - XMEGA">
<device-support-alias value="lufa_xmega"/> <device-support-alias value="lufa_xmega"/>
<build type="doxygen-entry-point" value="Group_TWI"/> <build type="doxygen-entry-point" value="Group_TWI"/>
<require idref="lufa.common"/> <require idref="lufa.common"/>
<build type="c-source" value="Drivers/Peripheral/XMEGA/TWI_XMEGA.c"/> <build type="c-source" value="Drivers/Peripheral/XMEGA/TWI_XMEGA.c"/>
<build type="header-file" value="Drivers/Peripheral/XMEGA/TWI_XMEGA.h"/> <build type="header-file" value="Drivers/Peripheral/XMEGA/TWI_XMEGA.h"/>
<build type="include-path" value=".."/> <build type="include-path" value=".."/>
<build type="header-file" subtype="api" value="Drivers/Peripheral/TWI.h"/> <build type="header-file" subtype="api" value="Drivers/Peripheral/TWI.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.peripheral.twi#uc3" caption="LUFA TWI Master Driver - UC3"> <module type="driver" id="lufa.drivers.peripheral.twi#uc3" caption="LUFA TWI Master Driver - UC3">
<device-support-alias value="lufa_uc3"/> <device-support-alias value="lufa_uc3"/>
<build type="doxygen-entry-point" value="Group_TWI"/> <build type="doxygen-entry-point" value="Group_TWI"/>
<require idref="lufa.common"/> <require idref="lufa.common"/>
<info type="gui-flag" value="hidden"/> <info type="gui-flag" value="hidden"/>
</module> </module>
</select-by-device> </select-by-device>
<select-by-device id="lufa.drivers.peripheral.adc" caption="LUFA ADC Driver"> <select-by-device id="lufa.drivers.peripheral.adc" caption="LUFA ADC Driver">
<module type="driver" id="lufa.drivers.peripheral.adc#avr8" caption="LUFA ADC Driver - AVR8"> <module type="driver" id="lufa.drivers.peripheral.adc#avr8" caption="LUFA ADC Driver - AVR8">
<device-support-alias value="lufa_avr8"/> <device-support-alias value="lufa_avr8"/>
<build type="doxygen-entry-point" value="Group_ADC"/> <build type="doxygen-entry-point" value="Group_ADC"/>
<require idref="lufa.common"/> <require idref="lufa.common"/>
<build type="header-file" value="Drivers/Peripheral/AVR8/ADC_AVR8.h"/> <build type="header-file" value="Drivers/Peripheral/AVR8/ADC_AVR8.h"/>
<build type="include-path" value=".."/> <build type="include-path" value=".."/>
<build type="header-file" subtype="api" value="Drivers/Peripheral/ADC.h"/> <build type="header-file" subtype="api" value="Drivers/Peripheral/ADC.h"/>
</module> </module>
<module type="driver" id="lufa.drivers.peripheral.adc#xmega" caption="LUFA ADC Driver - XMEGA"> <module type="driver" id="lufa.drivers.peripheral.adc#xmega" caption="LUFA ADC Driver - XMEGA">
<device-support-alias value="lufa_xmega"/> <device-support-alias value="lufa_xmega"/>
<build type="doxygen-entry-point" value="Group_ADC"/> <build type="doxygen-entry-point" value="Group_ADC"/>
<require idref="lufa.common"/> <require idref="lufa.common"/>
<info type="gui-flag" value="hidden"/> <info type="gui-flag" value="hidden"/>
</module> </module>
<module type="driver" id="lufa.drivers.peripheral.adc#uc3" caption="LUFA ADC Driver - UC3"> <module type="driver" id="lufa.drivers.peripheral.adc#uc3" caption="LUFA ADC Driver - UC3">
<device-support-alias value="lufa_uc3"/> <device-support-alias value="lufa_uc3"/>
<build type="doxygen-entry-point" value="Group_ADC"/> <build type="doxygen-entry-point" value="Group_ADC"/>
<require idref="lufa.common"/> <require idref="lufa.common"/>
<info type="gui-flag" value="hidden"/> <info type="gui-flag" value="hidden"/>
</module> </module>
</select-by-device> </select-by-device>
</asf> </asf>
</lufa> </lufa>

@ -1,32 +1,32 @@
<!-- <!--
LUFA Library LUFA Library
Copyright (C) Dean Camera, 2013. Copyright (C) Dean Camera, 2013.
dean [at] fourwalledcubicle [dot] com dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org www.lufa-lib.org
--> -->
<!-- Atmel Studio framework integration file --> <!-- Atmel Studio framework integration file -->
<lufa> <lufa>
<asf> <asf>
<module type="driver" id="lufa.drivers.usb" caption="LUFA USB Driver"> <module type="driver" id="lufa.drivers.usb" caption="LUFA USB Driver">
<device-support-alias value="lufa_avr8"/> <device-support-alias value="lufa_avr8"/>
<device-support-alias value="lufa_xmega"/> <device-support-alias value="lufa_xmega"/>
<device-support-alias value="lufa_uc3"/> <device-support-alias value="lufa_uc3"/>
<build type="doxygen-entry-point" value="Group_USB"/> <build type="doxygen-entry-point" value="Group_USB"/>
<build type="define" name="USE_LUFA_CONFIG_HEADER" value=""/> <build type="define" name="USE_LUFA_CONFIG_HEADER" value=""/>
<build type="module-config" subtype="path" value="CodeTemplates"/> <build type="module-config" subtype="path" value="CodeTemplates"/>
<build type="module-config" subtype="required-header-file" value="LUFAConfig.h"/> <build type="module-config" subtype="required-header-file" value="LUFAConfig.h"/>
<build type="include-path" value=".."/> <build type="include-path" value=".."/>
<build type="header-file" subtype="api" value="Drivers/USB/USB.h"/> <build type="header-file" subtype="api" value="Drivers/USB/USB.h"/>
<require idref="lufa.common"/> <require idref="lufa.common"/>
<require idref="lufa.drivers.usb.class"/> <require idref="lufa.drivers.usb.class"/>
<require idref="lufa.drivers.usb.core"/> <require idref="lufa.drivers.usb.core"/>
</module> </module>
</asf> </asf>
</lufa> </lufa>

@ -1,32 +1,32 @@
<!-- <!--
LUFA Library LUFA Library
Copyright (C) Dean Camera, 2013. Copyright (C) Dean Camera, 2013.
dean [at] fourwalledcubicle [dot] com dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org www.lufa-lib.org
--> -->
<!-- Atmel Studio framework integration file --> <!-- Atmel Studio framework integration file -->
<lufa> <lufa>
<asf> <asf>
<module type="service" id="lufa.drivers.usb.class" caption="LUFA USB Class Drivers"> <module type="service" id="lufa.drivers.usb.class" caption="LUFA USB Class Drivers">
<device-support-alias value="lufa_avr8"/> <device-support-alias value="lufa_avr8"/>
<device-support-alias value="lufa_xmega"/> <device-support-alias value="lufa_xmega"/>
<device-support-alias value="lufa_uc3"/> <device-support-alias value="lufa_uc3"/>
<info type="gui-flag" value="hidden"/> <info type="gui-flag" value="hidden"/>
<build type="doxygen-entry-point" value="Group_USBClassDrivers"/> <build type="doxygen-entry-point" value="Group_USBClassDrivers"/>
<require idref="lufa.drivers.usb.class.android"/> <require idref="lufa.drivers.usb.class.android"/>
<require idref="lufa.drivers.usb.class.audio"/> <require idref="lufa.drivers.usb.class.audio"/>
<require idref="lufa.drivers.usb.class.cdc"/> <require idref="lufa.drivers.usb.class.cdc"/>
<require idref="lufa.drivers.usb.class.hid"/> <require idref="lufa.drivers.usb.class.hid"/>
<require idref="lufa.drivers.usb.class.ms"/> <require idref="lufa.drivers.usb.class.ms"/>
<require idref="lufa.drivers.usb.class.midi"/> <require idref="lufa.drivers.usb.class.midi"/>
<require idref="lufa.drivers.usb.class.printer"/> <require idref="lufa.drivers.usb.class.printer"/>
<require idref="lufa.drivers.usb.class.rndis"/> <require idref="lufa.drivers.usb.class.rndis"/>
<require idref="lufa.drivers.usb.class.si"/> <require idref="lufa.drivers.usb.class.si"/>
</module> </module>
</asf> </asf>
</lufa> </lufa>

@ -1,85 +1,85 @@
<!-- <!--
LUFA Library LUFA Library
Copyright (C) Dean Camera, 2013. Copyright (C) Dean Camera, 2013.
dean [at] fourwalledcubicle [dot] com dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org www.lufa-lib.org
--> -->
<!-- Atmel Studio framework integration file --> <!-- Atmel Studio framework integration file -->
<lufa> <lufa>
<asf> <asf>
<module type="driver" id="lufa.drivers.usb.core.common" caption="LUFA USB Core Driver - Common"> <module type="driver" id="lufa.drivers.usb.core.common" caption="LUFA USB Core Driver - Common">
<device-support-alias value="lufa_avr8"/> <device-support-alias value="lufa_avr8"/>
<device-support-alias value="lufa_xmega"/> <device-support-alias value="lufa_xmega"/>
<device-support-alias value="lufa_uc3"/> <device-support-alias value="lufa_uc3"/>
<build type="doxygen-entry-point" value="Group_USBManagement"/> <build type="doxygen-entry-point" value="Group_USBManagement"/>
<info type="gui-flag" value="hidden"/> <info type="gui-flag" value="hidden"/>
<build type="header-file" value="Drivers/USB/Core/Device.h"/> <build type="header-file" value="Drivers/USB/Core/Device.h"/>
<build type="header-file" value="Drivers/USB/Core/Endpoint.h"/> <build type="header-file" value="Drivers/USB/Core/Endpoint.h"/>
<build type="header-file" value="Drivers/USB/Core/Host.h"/> <build type="header-file" value="Drivers/USB/Core/Host.h"/>
<build type="header-file" value="Drivers/USB/Core/Pipe.h"/> <build type="header-file" value="Drivers/USB/Core/Pipe.h"/>
<build type="header-file" value="Drivers/USB/Core/OTG.h"/> <build type="header-file" value="Drivers/USB/Core/OTG.h"/>
<build type="header-file" value="Drivers/USB/Core/USBController.h"/> <build type="header-file" value="Drivers/USB/Core/USBController.h"/>
<build type="header-file" value="Drivers/USB/Core/USBInterrupt.h"/> <build type="header-file" value="Drivers/USB/Core/USBInterrupt.h"/>
<build type="header-file" value="Drivers/USB/Core/EndpointStream.h"/> <build type="header-file" value="Drivers/USB/Core/EndpointStream.h"/>
<build type="header-file" value="Drivers/USB/Core/PipeStream.h"/> <build type="header-file" value="Drivers/USB/Core/PipeStream.h"/>
<build type="c-source" value="Drivers/USB/Core/ConfigDescriptors.c"/> <build type="c-source" value="Drivers/USB/Core/ConfigDescriptors.c"/>
<build type="header-file" value="Drivers/USB/Core/ConfigDescriptors.h"/> <build type="header-file" value="Drivers/USB/Core/ConfigDescriptors.h"/>
<build type="c-source" value="Drivers/USB/Core/DeviceStandardReq.c"/> <build type="c-source" value="Drivers/USB/Core/DeviceStandardReq.c"/>
<build type="header-file" value="Drivers/USB/Core/DeviceStandardReq.h"/> <build type="header-file" value="Drivers/USB/Core/DeviceStandardReq.h"/>
<build type="c-source" value="Drivers/USB/Core/Events.c"/> <build type="c-source" value="Drivers/USB/Core/Events.c"/>
<build type="header-file" value="Drivers/USB/Core/Events.h"/> <build type="header-file" value="Drivers/USB/Core/Events.h"/>
<build type="c-source" value="Drivers/USB/Core/HostStandardReq.c"/> <build type="c-source" value="Drivers/USB/Core/HostStandardReq.c"/>
<build type="header-file" value="Drivers/USB/Core/HostStandardReq.h"/> <build type="header-file" value="Drivers/USB/Core/HostStandardReq.h"/>
<build type="c-source" value="Drivers/USB/Core/USBTask.c"/> <build type="c-source" value="Drivers/USB/Core/USBTask.c"/>
<build type="header-file" value="Drivers/USB/Core/USBTask.h"/> <build type="header-file" value="Drivers/USB/Core/USBTask.h"/>
<build type="header-file" value="Drivers/USB/Core/USBMode.h"/> <build type="header-file" value="Drivers/USB/Core/USBMode.h"/>
<build type="header-file" value="Drivers/USB/Core/StdDescriptors.h"/> <build type="header-file" value="Drivers/USB/Core/StdDescriptors.h"/>
<build type="header-file" value="Drivers/USB/Core/StdRequestType.h"/> <build type="header-file" value="Drivers/USB/Core/StdRequestType.h"/>
<build type="c-source" value="Drivers/USB/Class/Common/HIDParser.c"/> <build type="c-source" value="Drivers/USB/Class/Common/HIDParser.c"/>
<build type="header-file" value="Drivers/USB/Class/Common/HIDParser.h"/> <build type="header-file" value="Drivers/USB/Class/Common/HIDParser.h"/>
<build type="header-file" value="Drivers/USB/Class/Common/HIDReportData.h"/> <build type="header-file" value="Drivers/USB/Class/Common/HIDReportData.h"/>
</module> </module>
<select-by-device id="lufa.drivers.usb.core" caption="LUFA USB Core Driver"> <select-by-device id="lufa.drivers.usb.core" caption="LUFA USB Core Driver">
<module type="driver" id="lufa.drivers.usb.core#avr8" caption="LUFA USB Core Driver - AVR8"> <module type="driver" id="lufa.drivers.usb.core#avr8" caption="LUFA USB Core Driver - AVR8">
<device-support-alias value="lufa_avr8"/> <device-support-alias value="lufa_avr8"/>
<info type="gui-flag" value="hidden"/> <info type="gui-flag" value="hidden"/>
<build type="doxygen-entry-point" value="Group_USBManagement_AVR8"/> <build type="doxygen-entry-point" value="Group_USBManagement_AVR8"/>
<require idref="lufa.drivers.usb.core.common"/> <require idref="lufa.drivers.usb.core.common"/>
<require idref="lufa.drivers.usb.core.avr8"/> <require idref="lufa.drivers.usb.core.avr8"/>
</module> </module>
<module type="driver" id="lufa.drivers.usb.core#xmega" caption="LUFA USB Core Driver - XMEGA"> <module type="driver" id="lufa.drivers.usb.core#xmega" caption="LUFA USB Core Driver - XMEGA">
<device-support-alias value="lufa_xmega"/> <device-support-alias value="lufa_xmega"/>
<info type="gui-flag" value="hidden"/> <info type="gui-flag" value="hidden"/>
<build type="doxygen-entry-point" value="Group_USBManagement_XMEGA"/> <build type="doxygen-entry-point" value="Group_USBManagement_XMEGA"/>
<require idref="lufa.drivers.usb.core.common"/> <require idref="lufa.drivers.usb.core.common"/>
<require idref="lufa.drivers.usb.core.xmega"/> <require idref="lufa.drivers.usb.core.xmega"/>
</module> </module>
<module type="driver" id="lufa.drivers.usb.core#uc3" caption="LUFA USB Core Driver - UC3"> <module type="driver" id="lufa.drivers.usb.core#uc3" caption="LUFA USB Core Driver - UC3">
<device-support-alias value="lufa_uc3"/> <device-support-alias value="lufa_uc3"/>
<info type="gui-flag" value="hidden"/> <info type="gui-flag" value="hidden"/>
<build type="doxygen-entry-point" value="Group_USBManagement_UC3"/> <build type="doxygen-entry-point" value="Group_USBManagement_UC3"/>
<require idref="lufa.drivers.usb.core.common"/> <require idref="lufa.drivers.usb.core.common"/>
<require idref="lufa.drivers.usb.core.uc3"/> <require idref="lufa.drivers.usb.core.uc3"/>
</module> </module>
</select-by-device> </select-by-device>
</asf> </asf>
</lufa> </lufa>

@ -1,43 +1,43 @@
<!-- <!--
LUFA Library LUFA Library
Copyright (C) Dean Camera, 2013. Copyright (C) Dean Camera, 2013.
dean [at] fourwalledcubicle [dot] com dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org www.lufa-lib.org
--> -->
<!-- Atmel Studio framework integration file --> <!-- Atmel Studio framework integration file -->
<lufa> <lufa>
<asf> <asf>
<module type="driver" id="lufa.drivers.usb.core.avr8" caption="LUFA USB Core Driver for AVR8"> <module type="driver" id="lufa.drivers.usb.core.avr8" caption="LUFA USB Core Driver for AVR8">
<device-support-alias value="lufa_avr8"/> <device-support-alias value="lufa_avr8"/>
<info type="gui-flag" value="hidden"/> <info type="gui-flag" value="hidden"/>
<build type="doxygen-entry-point" value="Group_USBManagement_AVR8"/> <build type="doxygen-entry-point" value="Group_USBManagement_AVR8"/>
<build type="c-source" value="Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_R.c"/> <build type="c-source" value="Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_R.c"/>
<build type="c-source" value="Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_W.c"/> <build type="c-source" value="Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_W.c"/>
<build type="c-source" value="Drivers/USB/Core/AVR8/Template/Template_Endpoint_RW.c"/> <build type="c-source" value="Drivers/USB/Core/AVR8/Template/Template_Endpoint_RW.c"/>
<build type="c-source" value="Drivers/USB/Core/AVR8/Template/Template_Pipe_RW.c"/> <build type="c-source" value="Drivers/USB/Core/AVR8/Template/Template_Pipe_RW.c"/>
<build type="c-source" value="Drivers/USB/Core/AVR8/Device_AVR8.c"/> <build type="c-source" value="Drivers/USB/Core/AVR8/Device_AVR8.c"/>
<build type="header-file" value="Drivers/USB/Core/AVR8/Device_AVR8.h"/> <build type="header-file" value="Drivers/USB/Core/AVR8/Device_AVR8.h"/>
<build type="c-source" value="Drivers/USB/Core/AVR8/Endpoint_AVR8.c"/> <build type="c-source" value="Drivers/USB/Core/AVR8/Endpoint_AVR8.c"/>
<build type="header-file" value="Drivers/USB/Core/AVR8/Endpoint_AVR8.h"/> <build type="header-file" value="Drivers/USB/Core/AVR8/Endpoint_AVR8.h"/>
<build type="c-source" value="Drivers/USB/Core/AVR8/Host_AVR8.c"/> <build type="c-source" value="Drivers/USB/Core/AVR8/Host_AVR8.c"/>
<build type="header-file" value="Drivers/USB/Core/AVR8/Host_AVR8.h"/> <build type="header-file" value="Drivers/USB/Core/AVR8/Host_AVR8.h"/>
<build type="c-source" value="Drivers/USB/Core/AVR8/Pipe_AVR8.c"/> <build type="c-source" value="Drivers/USB/Core/AVR8/Pipe_AVR8.c"/>
<build type="header-file" value="Drivers/USB/Core/AVR8/Pipe_AVR8.h"/> <build type="header-file" value="Drivers/USB/Core/AVR8/Pipe_AVR8.h"/>
<build type="header-file" value="Drivers/USB/Core/AVR8/OTG_AVR8.h"/> <build type="header-file" value="Drivers/USB/Core/AVR8/OTG_AVR8.h"/>
<build type="c-source" value="Drivers/USB/Core/AVR8/USBController_AVR8.c"/> <build type="c-source" value="Drivers/USB/Core/AVR8/USBController_AVR8.c"/>
<build type="header-file" value="Drivers/USB/Core/AVR8/USBController_AVR8.h"/> <build type="header-file" value="Drivers/USB/Core/AVR8/USBController_AVR8.h"/>
<build type="c-source" value="Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c"/> <build type="c-source" value="Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c"/>
<build type="header-file" value="Drivers/USB/Core/AVR8/USBInterrupt_AVR8.h"/> <build type="header-file" value="Drivers/USB/Core/AVR8/USBInterrupt_AVR8.h"/>
<build type="c-source" value="Drivers/USB/Core/AVR8/EndpointStream_AVR8.c"/> <build type="c-source" value="Drivers/USB/Core/AVR8/EndpointStream_AVR8.c"/>
<build type="header-file" value="Drivers/USB/Core/AVR8/EndpointStream_AVR8.h"/> <build type="header-file" value="Drivers/USB/Core/AVR8/EndpointStream_AVR8.h"/>
<build type="c-source" value="Drivers/USB/Core/AVR8/PipeStream_AVR8.c"/> <build type="c-source" value="Drivers/USB/Core/AVR8/PipeStream_AVR8.c"/>
<build type="header-file" value="Drivers/USB/Core/AVR8/PipeStream_AVR8.h"/> <build type="header-file" value="Drivers/USB/Core/AVR8/PipeStream_AVR8.h"/>
</module> </module>
</asf> </asf>
</lufa> </lufa>

@ -1,42 +1,42 @@
<!-- <!--
LUFA Library LUFA Library
Copyright (C) Dean Camera, 2013. Copyright (C) Dean Camera, 2013.
dean [at] fourwalledcubicle [dot] com dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org www.lufa-lib.org
--> -->
<!-- Atmel Studio framework integration file --> <!-- Atmel Studio framework integration file -->
<lufa> <lufa>
<asf> <asf>
<module type="driver" id="lufa.drivers.usb.core.uc3" caption="LUFA USB Core Driver for UC3"> <module type="driver" id="lufa.drivers.usb.core.uc3" caption="LUFA USB Core Driver for UC3">
<device-support-alias value="lufa_uc3"/> <device-support-alias value="lufa_uc3"/>
<info type="gui-flag" value="hidden"/> <info type="gui-flag" value="hidden"/>
<build type="doxygen-entry-point" value="Group_USBManagement_UC3"/> <build type="doxygen-entry-point" value="Group_USBManagement_UC3"/>
<build type="c-source" value="Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_R.c"/> <build type="c-source" value="Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_R.c"/>
<build type="c-source" value="Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_W.c"/> <build type="c-source" value="Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_W.c"/>
<build type="c-source" value="Drivers/USB/Core/UC3/Template/Template_Endpoint_RW.c"/> <build type="c-source" value="Drivers/USB/Core/UC3/Template/Template_Endpoint_RW.c"/>
<build type="c-source" value="Drivers/USB/Core/UC3/Template/Template_Pipe_RW.c"/> <build type="c-source" value="Drivers/USB/Core/UC3/Template/Template_Pipe_RW.c"/>
<build type="c-source" value="Drivers/USB/Core/UC3/Device_UC3.c"/> <build type="c-source" value="Drivers/USB/Core/UC3/Device_UC3.c"/>
<build type="header-file" value="Drivers/USB/Core/UC3/Device_UC3.h"/> <build type="header-file" value="Drivers/USB/Core/UC3/Device_UC3.h"/>
<build type="c-source" value="Drivers/USB/Core/UC3/Endpoint_UC3.c"/> <build type="c-source" value="Drivers/USB/Core/UC3/Endpoint_UC3.c"/>
<build type="header-file" value="Drivers/USB/Core/UC3/Endpoint_UC3.h"/> <build type="header-file" value="Drivers/USB/Core/UC3/Endpoint_UC3.h"/>
<build type="c-source" value="Drivers/USB/Core/UC3/Host_UC3.c"/> <build type="c-source" value="Drivers/USB/Core/UC3/Host_UC3.c"/>
<build type="header-file" value="Drivers/USB/Core/UC3/Host_UC3.h"/> <build type="header-file" value="Drivers/USB/Core/UC3/Host_UC3.h"/>
<build type="c-source" value="Drivers/USB/Core/UC3/Pipe_UC3.c"/> <build type="c-source" value="Drivers/USB/Core/UC3/Pipe_UC3.c"/>
<build type="header-file" value="Drivers/USB/Core/UC3/Pipe_UC3.h"/> <build type="header-file" value="Drivers/USB/Core/UC3/Pipe_UC3.h"/>
<build type="c-source" value="Drivers/USB/Core/UC3/USBController_UC3.c"/> <build type="c-source" value="Drivers/USB/Core/UC3/USBController_UC3.c"/>
<build type="header-file" value="Drivers/USB/Core/UC3/USBController_UC3.h"/> <build type="header-file" value="Drivers/USB/Core/UC3/USBController_UC3.h"/>
<build type="c-source" value="Drivers/USB/Core/UC3/USBInterrupt_UC3.c"/> <build type="c-source" value="Drivers/USB/Core/UC3/USBInterrupt_UC3.c"/>
<build type="header-file" value="Drivers/USB/Core/UC3/USBInterrupt_UC3.h"/> <build type="header-file" value="Drivers/USB/Core/UC3/USBInterrupt_UC3.h"/>
<build type="c-source" value="Drivers/USB/Core/UC3/EndpointStream_UC3.c"/> <build type="c-source" value="Drivers/USB/Core/UC3/EndpointStream_UC3.c"/>
<build type="header-file" value="Drivers/USB/Core/UC3/EndpointStream_UC3.h"/> <build type="header-file" value="Drivers/USB/Core/UC3/EndpointStream_UC3.h"/>
<build type="c-source" value="Drivers/USB/Core/UC3/PipeStream_UC3.c"/> <build type="c-source" value="Drivers/USB/Core/UC3/PipeStream_UC3.c"/>
<build type="header-file" value="Drivers/USB/Core/UC3/PipeStream_UC3.h"/> <build type="header-file" value="Drivers/USB/Core/UC3/PipeStream_UC3.h"/>
</module> </module>
</asf> </asf>
</lufa> </lufa>

@ -1,36 +1,36 @@
<!-- <!--
LUFA Library LUFA Library
Copyright (C) Dean Camera, 2013. Copyright (C) Dean Camera, 2013.
dean [at] fourwalledcubicle [dot] com dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org www.lufa-lib.org
--> -->
<!-- Atmel Studio framework integration file --> <!-- Atmel Studio framework integration file -->
<lufa> <lufa>
<asf> <asf>
<module type="driver" id="lufa.drivers.usb.core.xmega" caption="LUFA USB Core Driver for XMEGA"> <module type="driver" id="lufa.drivers.usb.core.xmega" caption="LUFA USB Core Driver for XMEGA">
<device-support-alias value="lufa_xmega"/> <device-support-alias value="lufa_xmega"/>
<info type="gui-flag" value="hidden"/> <info type="gui-flag" value="hidden"/>
<build type="doxygen-entry-point" value="Group_USBManagement_XMEGA"/> <build type="doxygen-entry-point" value="Group_USBManagement_XMEGA"/>
<build type="c-source" value="Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_R.c"/> <build type="c-source" value="Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_R.c"/>
<build type="c-source" value="Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_W.c"/> <build type="c-source" value="Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_W.c"/>
<build type="c-source" value="Drivers/USB/Core/XMEGA/Template/Template_Endpoint_RW.c"/> <build type="c-source" value="Drivers/USB/Core/XMEGA/Template/Template_Endpoint_RW.c"/>
<build type="c-source" value="Drivers/USB/Core/XMEGA/Device_XMEGA.c"/> <build type="c-source" value="Drivers/USB/Core/XMEGA/Device_XMEGA.c"/>
<build type="header-file" value="Drivers/USB/Core/XMEGA/Device_XMEGA.h"/> <build type="header-file" value="Drivers/USB/Core/XMEGA/Device_XMEGA.h"/>
<build type="c-source" value="Drivers/USB/Core/XMEGA/Endpoint_XMEGA.c"/> <build type="c-source" value="Drivers/USB/Core/XMEGA/Endpoint_XMEGA.c"/>
<build type="header-file" value="Drivers/USB/Core/XMEGA/Endpoint_XMEGA.h"/> <build type="header-file" value="Drivers/USB/Core/XMEGA/Endpoint_XMEGA.h"/>
<build type="c-source" value="Drivers/USB/Core/XMEGA/Pipe_XMEGA.c"/> <build type="c-source" value="Drivers/USB/Core/XMEGA/Pipe_XMEGA.c"/>
<build type="c-source" value="Drivers/USB/Core/XMEGA/USBController_XMEGA.c"/> <build type="c-source" value="Drivers/USB/Core/XMEGA/USBController_XMEGA.c"/>
<build type="header-file" value="Drivers/USB/Core/XMEGA/USBController_XMEGA.h"/> <build type="header-file" value="Drivers/USB/Core/XMEGA/USBController_XMEGA.h"/>
<build type="c-source" value="Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.c"/> <build type="c-source" value="Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.c"/>
<build type="header-file" value="Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.h"/> <build type="header-file" value="Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.h"/>
<build type="c-source" value="Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.c"/> <build type="c-source" value="Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.c"/>
<build type="header-file" value="Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.h"/> <build type="header-file" value="Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.h"/>
</module> </module>
</asf> </asf>
</lufa> </lufa>

@ -1,60 +1,60 @@
<!-- <!--
LUFA Library LUFA Library
Copyright (C) Dean Camera, 2013. Copyright (C) Dean Camera, 2013.
dean [at] fourwalledcubicle [dot] com dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org www.lufa-lib.org
--> -->
<!-- Atmel Studio framework integration file --> <!-- Atmel Studio framework integration file -->
<lufa> <lufa>
<asf> <asf>
<select-by-device id="lufa.platform" caption="LUFA Platform Specific Support"> <select-by-device id="lufa.platform" caption="LUFA Platform Specific Support">
<module type="service" id="lufa.platform#avr8" caption="LUFA Platform Specific Support - AVR8"> <module type="service" id="lufa.platform#avr8" caption="LUFA Platform Specific Support - AVR8">
<device-support-alias value="lufa_avr8"/> <device-support-alias value="lufa_avr8"/>
<build type="define" name="ARCH" value="ARCH_AVR8"/> <build type="define" name="ARCH" value="ARCH_AVR8"/>
<build type="doxygen-entry-point" value="Group_PlatformDrivers"/> <build type="doxygen-entry-point" value="Group_PlatformDrivers"/>
<build type="include-path" value=".."/> <build type="include-path" value=".."/>
<build type="header-file" subtype="api" value="Platform/Platform.h"/> <build type="header-file" subtype="api" value="Platform/Platform.h"/>
<require idref="lufa.common"/> <require idref="lufa.common"/>
</module> </module>
<module type="service" id="lufa.platform#xmega" caption="LUFA Platform Specific Support - XMEGA"> <module type="service" id="lufa.platform#xmega" caption="LUFA Platform Specific Support - XMEGA">
<device-support-alias value="lufa_xmega"/> <device-support-alias value="lufa_xmega"/>
<build type="define" name="ARCH" value="ARCH_XMEGA"/> <build type="define" name="ARCH" value="ARCH_XMEGA"/>
<build type="doxygen-entry-point" value="Group_PlatformDrivers"/> <build type="doxygen-entry-point" value="Group_PlatformDrivers"/>
<build type="include-path" value=".."/> <build type="include-path" value=".."/>
<build type="header-file" subtype="api" value="Platform/Platform.h"/> <build type="header-file" subtype="api" value="Platform/Platform.h"/>
<build type="distribute" value="Platform/XMEGA/XMEGAExperimentalInfo.txt" subtype="license"/> <build type="distribute" value="Platform/XMEGA/XMEGAExperimentalInfo.txt" subtype="license"/>
<require idref="lufa.platform.xmega"/> <require idref="lufa.platform.xmega"/>
<require idref="lufa.common"/> <require idref="lufa.common"/>
</module> </module>
<module type="service" id="lufa.platform#uc3" caption="LUFA Platform Specific Support - UC3"> <module type="service" id="lufa.platform#uc3" caption="LUFA Platform Specific Support - UC3">
<device-support-alias value="lufa_uc3"/> <device-support-alias value="lufa_uc3"/>
<build type="define" name="ARCH" value="ARCH_UC3"/> <build type="define" name="ARCH" value="ARCH_UC3"/>
<build type="doxygen-entry-point" value="Group_PlatformDrivers"/> <build type="doxygen-entry-point" value="Group_PlatformDrivers"/>
<build type="include-path" value=".."/> <build type="include-path" value=".."/>
<build type="header-file" subtype="api" value="Platform/Platform.h"/> <build type="header-file" subtype="api" value="Platform/Platform.h"/>
<build type="distribute" value="Platform/UC3/UC3ExperimentalInfo.txt" subtype="license"/> <build type="distribute" value="Platform/UC3/UC3ExperimentalInfo.txt" subtype="license"/>
<require idref="lufa.platform.uc3"/> <require idref="lufa.platform.uc3"/>
<require idref="lufa.common"/> <require idref="lufa.common"/>
</module> </module>
</select-by-device> </select-by-device>
</asf> </asf>
</lufa> </lufa>

@ -1,26 +1,26 @@
<!-- <!--
LUFA Library LUFA Library
Copyright (C) Dean Camera, 2013. Copyright (C) Dean Camera, 2013.
dean [at] fourwalledcubicle [dot] com dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org www.lufa-lib.org
--> -->
<!-- Atmel Studio framework integration file --> <!-- Atmel Studio framework integration file -->
<lufa> <lufa>
<asf> <asf>
<module type="driver" id="lufa.platform.uc3" caption="LUFA UC3 Platform Drivers"> <module type="driver" id="lufa.platform.uc3" caption="LUFA UC3 Platform Drivers">
<device-support-alias value="lufa_uc3"/> <device-support-alias value="lufa_uc3"/>
<info type="gui-flag" value="hidden"/> <info type="gui-flag" value="hidden"/>
<build type="doxygen-entry-point" value="Group_PlatformDrivers_UC3"/> <build type="doxygen-entry-point" value="Group_PlatformDrivers_UC3"/>
<build type="header-file" value="Platform/UC3/ClockManagement.h"/> <build type="header-file" value="Platform/UC3/ClockManagement.h"/>
<build type="header-file" value="Platform/UC3/InterruptManagement.h"/> <build type="header-file" value="Platform/UC3/InterruptManagement.h"/>
<build type="c-source" value="Platform/UC3/InterruptManagement.c"/> <build type="c-source" value="Platform/UC3/InterruptManagement.c"/>
<build type="asm-source" value="Platform/UC3/Exception.S"/> <build type="asm-source" value="Platform/UC3/Exception.S"/>
</module> </module>
</asf> </asf>
</lufa> </lufa>

@ -1,23 +1,23 @@
<!-- <!--
LUFA Library LUFA Library
Copyright (C) Dean Camera, 2013. Copyright (C) Dean Camera, 2013.
dean [at] fourwalledcubicle [dot] com dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org www.lufa-lib.org
--> -->
<!-- Atmel Studio framework integration file --> <!-- Atmel Studio framework integration file -->
<lufa> <lufa>
<asf xmlversion="1.0"> <asf xmlversion="1.0">
<module type="driver" id="lufa.platform.xmega" caption="LUFA XMEGA Platform Drivers"> <module type="driver" id="lufa.platform.xmega" caption="LUFA XMEGA Platform Drivers">
<device-support-alias value="lufa_xmega"/> <device-support-alias value="lufa_xmega"/>
<info type="gui-flag" value="hidden"/> <info type="gui-flag" value="hidden"/>
<build type="doxygen-entry-point" value="Group_PlatformDrivers_XMEGA"/> <build type="doxygen-entry-point" value="Group_PlatformDrivers_XMEGA"/>
<build type="header-file" value="Platform/XMEGA/ClockManagement.h"/> <build type="header-file" value="Platform/XMEGA/ClockManagement.h"/>
</module> </module>
</asf> </asf>
</lufa> </lufa>

@ -1,43 +1,43 @@
<!-- <!--
LUFA Library LUFA Library
Copyright (C) Dean Camera, 2013. Copyright (C) Dean Camera, 2013.
dean [at] fourwalledcubicle [dot] com dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org www.lufa-lib.org
--> -->
<!-- Atmel Studio framework integration file --> <!-- Atmel Studio framework integration file -->
<lufa> <lufa>
<asf> <asf>
<select-by-device id="common.utils.toolchain_config" caption="Toolchain configuration defaults"> <select-by-device id="common.utils.toolchain_config" caption="Toolchain configuration defaults">
<module type="build-specific" id="common.utils.toolchain_config#avr" caption="Toolchain configuration defaults for 8-bit AVR"> <module type="build-specific" id="common.utils.toolchain_config#avr" caption="Toolchain configuration defaults for 8-bit AVR">
<info type="gui-flag" value="hidden"/> <info type="gui-flag" value="hidden"/>
<device-support value="avr"/> <device-support value="avr"/>
<toolchain-config name="avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned" value="True" toolchain="avrgcc"/> <toolchain-config name="avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned" value="True" toolchain="avrgcc"/>
<toolchain-config name="avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned" value="True" toolchain="avrgcc"/> <toolchain-config name="avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned" value="True" toolchain="avrgcc"/>
<toolchain-config name="avrgcc.compiler.optimization.OtherFlags" value="-fdata-sections" toolchain="avrgcc"/> <toolchain-config name="avrgcc.compiler.optimization.OtherFlags" value="-fdata-sections" toolchain="avrgcc"/>
<toolchain-config name="avrgcc.compiler.optimization.PrepareFunctionsForGarbageCollection" value="True" toolchain="avrgcc"/> <toolchain-config name="avrgcc.compiler.optimization.PrepareFunctionsForGarbageCollection" value="True" toolchain="avrgcc"/>
<toolchain-config name="avrgcc.compiler.warnings.AllWarnings" value="True" toolchain="avrgcc"/> <toolchain-config name="avrgcc.compiler.warnings.AllWarnings" value="True" toolchain="avrgcc"/>
<toolchain-config name="avrgcc.compiler.miscellaneous.OtherFlags" value="-mrelax -std=gnu99 -fno-strict-aliasing -fno-jump-tables" toolchain="avrgcc"/> <toolchain-config name="avrgcc.compiler.miscellaneous.OtherFlags" value="-mrelax -std=gnu99 -fno-strict-aliasing -fno-jump-tables" toolchain="avrgcc"/>
<toolchain-config name="avrgcc.linker.optimization.GarbageCollectUnusedSections" value="True" toolchain="avrgcc"/> <toolchain-config name="avrgcc.linker.optimization.GarbageCollectUnusedSections" value="True" toolchain="avrgcc"/>
<toolchain-config name="avrgcc.linker.optimization.RelaxBranches" value="True" toolchain="avrgcc"/> <toolchain-config name="avrgcc.linker.optimization.RelaxBranches" value="True" toolchain="avrgcc"/>
</module> </module>
</select-by-device> </select-by-device>
<module type="build-specific" id="common.utils.toolchain_config#uc3" caption="Toolchain configuration defaults for 32-bit AVR"> <module type="build-specific" id="common.utils.toolchain_config#uc3" caption="Toolchain configuration defaults for 32-bit AVR">
<info type="gui-flag" value="hidden"/> <info type="gui-flag" value="hidden"/>
<device-support value="uc3"/> <device-support value="uc3"/>
<toolchain-config name="avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned" value="True" toolchain="avr32gcc"/> <toolchain-config name="avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned" value="True" toolchain="avr32gcc"/>
<toolchain-config name="avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned" value="True" toolchain="avr32gcc"/> <toolchain-config name="avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned" value="True" toolchain="avr32gcc"/>
<toolchain-config name="avr32gcc.compiler.optimization.OtherFlags" value="-fdata-sections" toolchain="avr32gcc"/> <toolchain-config name="avr32gcc.compiler.optimization.OtherFlags" value="-fdata-sections" toolchain="avr32gcc"/>
<toolchain-config name="avr32gcc.compiler.optimization.PrepareFunctionsForGarbageCollection" value="True" toolchain="avr32gcc"/> <toolchain-config name="avr32gcc.compiler.optimization.PrepareFunctionsForGarbageCollection" value="True" toolchain="avr32gcc"/>
<toolchain-config name="avr32gcc.compiler.warnings.AllWarnings" value="True" toolchain="avr32gcc"/> <toolchain-config name="avr32gcc.compiler.warnings.AllWarnings" value="True" toolchain="avr32gcc"/>
<toolchain-config name="avr32gcc.compiler.miscellaneous.OtherFlags" value="-mrelax -std=gnu99 -fno-strict-aliasing -mno-cond-exec-before-reload" toolchain="avr32gcc"/> <toolchain-config name="avr32gcc.compiler.miscellaneous.OtherFlags" value="-mrelax -std=gnu99 -fno-strict-aliasing -mno-cond-exec-before-reload" toolchain="avr32gcc"/>
<toolchain-config name="avr32gcc.linker.optimization.GarbageCollectUnusedSections" value="True" toolchain="avr32gcc"/> <toolchain-config name="avr32gcc.linker.optimization.GarbageCollectUnusedSections" value="True" toolchain="avr32gcc"/>
<toolchain-config name="avr32gcc.linker.optimization.RelaxBranches" value="True" toolchain="avr32gcc"/> <toolchain-config name="avr32gcc.linker.optimization.RelaxBranches" value="True" toolchain="avr32gcc"/>
</module> </module>
</asf> </asf>
</lufa> </lufa>

@ -1,93 +1,93 @@
/* /*
LUFA Library LUFA Library
Copyright (C) Dean Camera, 2012. Copyright (C) Dean Camera, 2012.
dean [at] fourwalledcubicle [dot] com dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org www.lufa-lib.org
*/ */
/* /*
Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com) Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com)
Permission to use, copy, modify, distribute, and sell this Permission to use, copy, modify, distribute, and sell this
software and its documentation for any purpose is hereby granted software and its documentation for any purpose is hereby granted
without fee, provided that the above copyright notice appear in without fee, provided that the above copyright notice appear in
all copies and that both that the copyright notice and this all copies and that both that the copyright notice and this
permission notice and warranty disclaimer appear in supporting permission notice and warranty disclaimer appear in supporting
documentation, and that the name of the author not be used in documentation, and that the name of the author not be used in
advertising or publicity pertaining to distribution of the advertising or publicity pertaining to distribution of the
software without specific, written prior permission. software without specific, written prior permission.
The author disclaim all warranties with regard to this The author disclaim all warranties with regard to this
software, including all implied warranties of merchantability software, including all implied warranties of merchantability
and fitness. In no event shall the author be liable for any and fitness. In no event shall the author be liable for any
special, indirect or consequential damages or any damages special, indirect or consequential damages or any damages
whatsoever resulting from loss of use, data or profits, whether whatsoever resulting from loss of use, data or profits, whether
in an action of contract, negligence or other tortious action, in an action of contract, negligence or other tortious action,
arising out of or in connection with the use or performance of arising out of or in connection with the use or performance of
this software. this software.
*/ */
/** \file /** \file
* \brief LUFA Library Configuration Header File * \brief LUFA Library Configuration Header File
* *
* This header file is used to configure LUFA's compile time options, * This header file is used to configure LUFA's compile time options,
* as an alternative to the compile time constants supplied through * as an alternative to the compile time constants supplied through
* a makefile. * a makefile.
* *
* For information on what each token does, refer to the LUFA * For information on what each token does, refer to the LUFA
* manual section "Summary of Compile Tokens". * manual section "Summary of Compile Tokens".
*/ */
#ifndef _LUFA_CONFIG_H_ #ifndef _LUFA_CONFIG_H_
#define _LUFA_CONFIG_H_ #define _LUFA_CONFIG_H_
#if (ARCH == ARCH_AVR8) #if (ARCH == ARCH_AVR8)
/* Non-USB Related Configuration Tokens: */ /* Non-USB Related Configuration Tokens: */
// #define DISABLE_TERMINAL_CODES // #define DISABLE_TERMINAL_CODES
/* USB Class Driver Related Tokens: */ /* USB Class Driver Related Tokens: */
// #define HID_HOST_BOOT_PROTOCOL_ONLY // #define HID_HOST_BOOT_PROTOCOL_ONLY
// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} // #define HID_STATETABLE_STACK_DEPTH {Insert Value Here}
// #define HID_USAGE_STACK_DEPTH {Insert Value Here} // #define HID_USAGE_STACK_DEPTH {Insert Value Here}
// #define HID_MAX_COLLECTIONS {Insert Value Here} // #define HID_MAX_COLLECTIONS {Insert Value Here}
// #define HID_MAX_REPORTITEMS {Insert Value Here} // #define HID_MAX_REPORTITEMS {Insert Value Here}
// #define HID_MAX_REPORT_IDS {Insert Value Here} // #define HID_MAX_REPORT_IDS {Insert Value Here}
// #define NO_CLASS_DRIVER_AUTOFLUSH // #define NO_CLASS_DRIVER_AUTOFLUSH
/* General USB Driver Related Tokens: */ /* General USB Driver Related Tokens: */
// #define ORDERED_EP_CONFIG // #define ORDERED_EP_CONFIG
#define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)
#define USB_DEVICE_ONLY #define USB_DEVICE_ONLY
// #define USB_HOST_ONLY // #define USB_HOST_ONLY
// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} // #define USB_STREAM_TIMEOUT_MS {Insert Value Here}
// #define NO_LIMITED_CONTROLLER_CONNECT // #define NO_LIMITED_CONTROLLER_CONNECT
// #define NO_SOF_EVENTS // #define NO_SOF_EVENTS
/* USB Device Mode Driver Related Tokens: */ /* USB Device Mode Driver Related Tokens: */
// #define USE_RAM_DESCRIPTORS // #define USE_RAM_DESCRIPTORS
#define USE_FLASH_DESCRIPTORS #define USE_FLASH_DESCRIPTORS
// #define USE_EEPROM_DESCRIPTORS // #define USE_EEPROM_DESCRIPTORS
// #define NO_INTERNAL_SERIAL // #define NO_INTERNAL_SERIAL
#define FIXED_CONTROL_ENDPOINT_SIZE 8 #define FIXED_CONTROL_ENDPOINT_SIZE 8
// #define DEVICE_STATE_AS_GPIOR {Insert Value Here} // #define DEVICE_STATE_AS_GPIOR {Insert Value Here}
#define FIXED_NUM_CONFIGURATIONS 1 #define FIXED_NUM_CONFIGURATIONS 1
// #define CONTROL_ONLY_DEVICE // #define CONTROL_ONLY_DEVICE
// #define INTERRUPT_CONTROL_ENDPOINT // #define INTERRUPT_CONTROL_ENDPOINT
// #define NO_DEVICE_REMOTE_WAKEUP // #define NO_DEVICE_REMOTE_WAKEUP
// #define NO_DEVICE_SELF_POWER // #define NO_DEVICE_SELF_POWER
/* USB Host Mode Driver Related Tokens: */ /* USB Host Mode Driver Related Tokens: */
// #define HOST_STATE_AS_GPIOR {Insert Value Here} // #define HOST_STATE_AS_GPIOR {Insert Value Here}
// #define USB_HOST_TIMEOUT_MS {Insert Value Here} // #define USB_HOST_TIMEOUT_MS {Insert Value Here}
// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} // #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here}
// #define NO_AUTO_VBUS_MANAGEMENT // #define NO_AUTO_VBUS_MANAGEMENT
// #define INVERTED_VBUS_ENABLE_LINE // #define INVERTED_VBUS_ENABLE_LINE
#else #else
#error Unsupported architecture for this LUFA configuration file. #error Unsupported architecture for this LUFA configuration file.
#endif #endif
#endif #endif

@ -3,114 +3,114 @@ index 51a79bb..42d07bd 100644
--- a/os/common/ports/ARMCMx/compilers/GCC/crt0_v6m.s --- a/os/common/ports/ARMCMx/compilers/GCC/crt0_v6m.s
+++ b/os/common/ports/ARMCMx/compilers/GCC/crt0_v6m.s +++ b/os/common/ports/ARMCMx/compilers/GCC/crt0_v6m.s
@@ -105,6 +105,13 @@ @@ -105,6 +105,13 @@
#define CRT0_CALL_DESTRUCTORS TRUE #define CRT0_CALL_DESTRUCTORS TRUE
#endif #endif
+/** +/**
+ * @brief Magic number for jumping to bootloader. + * @brief Magic number for jumping to bootloader.
+ */ + */
+#if !defined(MAGIC_BOOTLOADER_NUMBER) || defined(__DOXYGEN__) +#if !defined(MAGIC_BOOTLOADER_NUMBER) || defined(__DOXYGEN__)
+#define MAGIC_BOOTLOADER_NUMBER 0xDEADBEEF +#define MAGIC_BOOTLOADER_NUMBER 0xDEADBEEF
+#endif +#endif
+ +
/*===========================================================================*/ /*===========================================================================*/
/* Code section. */ /* Code section. */
/*===========================================================================*/ /*===========================================================================*/
@@ -124,6 +131,17 @@ @@ -124,6 +131,17 @@
.thumb_func .thumb_func
.global Reset_Handler .global Reset_Handler
Reset_Handler: Reset_Handler:
+ +
+#ifdef STM32_BOOTLOADER_ADDRESS +#ifdef STM32_BOOTLOADER_ADDRESS
+ /* jump to bootloader code */ + /* jump to bootloader code */
+ ldr r0, =__ram0_end__-4 + ldr r0, =__ram0_end__-4
+ ldr r1, =MAGIC_BOOTLOADER_NUMBER + ldr r1, =MAGIC_BOOTLOADER_NUMBER
+ ldr r2, [r0, #0] + ldr r2, [r0, #0]
+ str r0, [r0, #0] /* erase stored magic */ + str r0, [r0, #0] /* erase stored magic */
+ cmp r2, r1 + cmp r2, r1
+ beq Bootloader_Jump + beq Bootloader_Jump
+#endif /* STM32_BOOTLOADER_ADDRESS */ +#endif /* STM32_BOOTLOADER_ADDRESS */
+ +
/* Interrupts are globally masked initially.*/ /* Interrupts are globally masked initially.*/
cpsid i cpsid i
@@ -242,6 +260,21 @@ endfiniloop: @@ -242,6 +260,21 @@ endfiniloop:
ldr r1, =__default_exit ldr r1, =__default_exit
bx r1 bx r1
+#ifdef STM32_BOOTLOADER_ADDRESS +#ifdef STM32_BOOTLOADER_ADDRESS
+/* +/*
+ * Jump-to-bootloader function. + * Jump-to-bootloader function.
+ */ + */
+ +
+ .align 2 + .align 2
+ .thumb_func + .thumb_func
+Bootloader_Jump: +Bootloader_Jump:
+ ldr r0, =STM32_BOOTLOADER_ADDRESS + ldr r0, =STM32_BOOTLOADER_ADDRESS
+ ldr r1, [r0, #0] + ldr r1, [r0, #0]
+ mov sp, r1 + mov sp, r1
+ ldr r0, [r0, #4] + ldr r0, [r0, #4]
+ bx r0 + bx r0
+#endif /* STM32_BOOTLOADER_ADDRESS */ +#endif /* STM32_BOOTLOADER_ADDRESS */
+ +
#endif #endif
/** @} */ /** @} */
diff --git a/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s b/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s diff --git a/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s b/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s
index 4812a29..dca9f88 100644 index 4812a29..dca9f88 100644
--- a/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s --- a/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s
+++ b/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s +++ b/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s
@@ -140,6 +140,13 @@ @@ -140,6 +140,13 @@
#define CRT0_CPACR_INIT 0x00F00000 #define CRT0_CPACR_INIT 0x00F00000
#endif #endif
+/** +/**
+ * @brief Magic number for jumping to bootloader. + * @brief Magic number for jumping to bootloader.
+ */ + */
+#if !defined(MAGIC_BOOTLOADER_NUMBER) || defined(__DOXYGEN__) +#if !defined(MAGIC_BOOTLOADER_NUMBER) || defined(__DOXYGEN__)
+#define MAGIC_BOOTLOADER_NUMBER 0xDEADBEEF +#define MAGIC_BOOTLOADER_NUMBER 0xDEADBEEF
+#endif +#endif
+ +
/*===========================================================================*/ /*===========================================================================*/
/* Code section. */ /* Code section. */
/*===========================================================================*/ /*===========================================================================*/
@@ -164,6 +171,17 @@ @@ -164,6 +171,17 @@
.thumb_func .thumb_func
.global Reset_Handler .global Reset_Handler
Reset_Handler: Reset_Handler:
+ +
+#ifdef STM32_BOOTLOADER_ADDRESS +#ifdef STM32_BOOTLOADER_ADDRESS
+ /* jump to bootloader code */ + /* jump to bootloader code */
+ ldr r0, =__ram0_end__-4 + ldr r0, =__ram0_end__-4
+ ldr r1, =MAGIC_BOOTLOADER_NUMBER + ldr r1, =MAGIC_BOOTLOADER_NUMBER
+ ldr r2, [r0, #0] + ldr r2, [r0, #0]
+ str r0, [r0, #0] /* erase stored magic */ + str r0, [r0, #0] /* erase stored magic */
+ cmp r2, r1 + cmp r2, r1
+ beq Bootloader_Jump + beq Bootloader_Jump
+#endif /* STM32_BOOTLOADER_ADDRESS */ +#endif /* STM32_BOOTLOADER_ADDRESS */
+ +
/* Interrupts are globally masked initially.*/ /* Interrupts are globally masked initially.*/
cpsid i cpsid i
@@ -305,6 +323,21 @@ endfiniloop: @@ -305,6 +323,21 @@ endfiniloop:
/* Branching to the defined exit handler.*/ /* Branching to the defined exit handler.*/
b __default_exit b __default_exit
+#ifdef STM32_BOOTLOADER_ADDRESS +#ifdef STM32_BOOTLOADER_ADDRESS
+/* +/*
+ * Jump-to-bootloader function. + * Jump-to-bootloader function.
+ */ + */
+ +
+ .align 2 + .align 2
+ .thumb_func + .thumb_func
+Bootloader_Jump: +Bootloader_Jump:
+ ldr r0, =STM32_BOOTLOADER_ADDRESS + ldr r0, =STM32_BOOTLOADER_ADDRESS
+ ldr r1, [r0, #0] + ldr r1, [r0, #0]
+ mov sp, r1 + mov sp, r1
+ ldr r0, [r0, #4] + ldr r0, [r0, #4]
+ bx r0 + bx r0
+#endif /* STM32_BOOTLOADER_ADDRESS */ +#endif /* STM32_BOOTLOADER_ADDRESS */
+ +
#endif /* !defined(__DOXYGEN__) */ #endif /* !defined(__DOXYGEN__) */
/** @} */ /** @} */

Loading…
Cancel
Save