Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8729be5434 | ||
|
|
f698bbcd65 | ||
|
|
068b80383f | ||
|
|
3e0ec8b171 | ||
|
|
c1d30e4a57 | ||
|
|
0b591fd843 | ||
|
|
c9102f9e35 | ||
|
|
d5f44feb75 | ||
|
|
1edb8bf190 | ||
|
|
c55c646fa3 | ||
|
|
27e3458f44 | ||
|
|
8cdb4a9150 | ||
|
|
e721deb4a6 | ||
|
|
2411652a33 | ||
|
|
effc3e380f | ||
|
|
227c3b909a | ||
|
|
42a72c633b | ||
|
|
9f2bb11412 | ||
|
|
f5f0475f53 | ||
|
|
53a6501d71 | ||
|
|
a572323f94 | ||
|
|
323cd35767 | ||
|
|
f66e0a20f2 | ||
|
|
56c9b2480b | ||
|
|
e41147da92 | ||
|
|
2b06623fa0 | ||
|
|
7d49a17781 | ||
|
|
9dba705064 | ||
|
|
34b274360c | ||
|
|
5941f81e38 | ||
|
|
bfb5922f87 | ||
|
|
a98a91cf1b | ||
|
|
f42ec8aa86 | ||
|
|
678fae6cce | ||
|
|
38f204db30 | ||
|
|
e76eee2d0a | ||
|
|
7f35a62902 | ||
|
|
47f03bd5a4 | ||
|
|
70e60b0a0c | ||
|
|
fdee10b38e | ||
|
|
fd57ea0666 | ||
|
|
ab0db3c52d | ||
|
|
c3c5799909 | ||
|
|
975c48efe6 | ||
|
|
6dda0d6e34 | ||
|
|
48a68dcf10 | ||
|
|
b15a71beba | ||
|
|
05be1de1aa | ||
|
|
5b503cc543 | ||
|
|
69ec54f3a4 | ||
|
|
57113c7e49 | ||
|
|
5e86f087f8 | ||
|
|
933842067d | ||
|
|
c5264d6d89 | ||
|
|
5346cb2d20 | ||
|
|
c89565cc3d | ||
|
|
03516d5460 | ||
|
|
00596d55e3 | ||
|
|
749916e6e2 | ||
|
|
6ba2c74058 | ||
|
|
6ba73e0e04 |
No files matched your search
Vendored
+3
-2
@@ -11,6 +11,7 @@
|
|||||||
"*.h": "c",
|
"*.h": "c",
|
||||||
"*.c": "c",
|
"*.c": "c",
|
||||||
"*.cpp": "cpp",
|
"*.cpp": "cpp",
|
||||||
"*.hpp": "cpp"
|
"*.hpp": "cpp",
|
||||||
|
"xstddef": "c"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+1
-1
@@ -117,7 +117,7 @@ endif
|
|||||||
ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
|
ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
|
||||||
OPT_DEFS += -DRGB_MATRIX_ENABLE
|
OPT_DEFS += -DRGB_MATRIX_ENABLE
|
||||||
SRC += is31fl3731.c
|
SRC += is31fl3731.c
|
||||||
SRC += TWIlib.c
|
SRC += i2c_master.c
|
||||||
SRC += $(QUANTUM_DIR)/color.c
|
SRC += $(QUANTUM_DIR)/color.c
|
||||||
SRC += $(QUANTUM_DIR)/rgb_matrix.c
|
SRC += $(QUANTUM_DIR)/rgb_matrix.c
|
||||||
CIE1931_CURVE = yes
|
CIE1931_CURVE = yes
|
||||||
|
|||||||
+1
-1
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
## What is QMK Firmware?
|
## What is QMK Firmware?
|
||||||
|
|
||||||
QMK (*Quantum Mechanical Keyboard*) is an open source community that maintains QMK Firmware, QMK Flasher, qmk.fm, and these docs. QMK Firmware is a keyboard firmware based on the [tmk\_keyboard](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR controllers, and more specifically, the [OLKB product line](http://olkb.com), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/). It has also been ported to ARM chips using ChibiOS. You can use it to power your own hand-wired or custom keyboard PCB.
|
QMK (*Quantum Mechanical Keyboard*) is an open source community that maintains QMK Firmware, QMK Toolbox, qmk.fm, and these docs. QMK Firmware is a keyboard firmware based on the [tmk\_keyboard](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR controllers, and more specifically, the [OLKB product line](http://olkb.com), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/). It has also been ported to ARM chips using ChibiOS. You can use it to power your own hand-wired or custom keyboard PCB.
|
||||||
|
|
||||||
## How to Get It
|
## How to Get It
|
||||||
|
|
||||||
|
|||||||
@@ -43,6 +43,7 @@
|
|||||||
* [Pointing Device](feature_pointing_device.md)
|
* [Pointing Device](feature_pointing_device.md)
|
||||||
* [PS/2 Mouse](feature_ps2_mouse.md)
|
* [PS/2 Mouse](feature_ps2_mouse.md)
|
||||||
* [RGB Lighting](feature_rgblight.md)
|
* [RGB Lighting](feature_rgblight.md)
|
||||||
|
* [RGB Matrix](feature_rgb_matrix.md)
|
||||||
* [Space Cadet Shift](feature_space_cadet.md)
|
* [Space Cadet Shift](feature_space_cadet.md)
|
||||||
* [Space Cadet Shift Enter](feature_space_shift_cadet.md)
|
* [Space Cadet Shift Enter](feature_space_shift_cadet.md)
|
||||||
* [Stenography](feature_stenography.md)
|
* [Stenography](feature_stenography.md)
|
||||||
|
|||||||
@@ -81,7 +81,6 @@ These are the effects that are currently available:
|
|||||||
|
|
||||||
enum rgb_matrix_effects {
|
enum rgb_matrix_effects {
|
||||||
RGB_MATRIX_SOLID_COLOR = 1,
|
RGB_MATRIX_SOLID_COLOR = 1,
|
||||||
RGB_MATRIX_SOLID_REACTIVE,
|
|
||||||
RGB_MATRIX_ALPHAS_MODS,
|
RGB_MATRIX_ALPHAS_MODS,
|
||||||
RGB_MATRIX_DUAL_BEACON,
|
RGB_MATRIX_DUAL_BEACON,
|
||||||
RGB_MATRIX_GRADIENT_UP_DOWN,
|
RGB_MATRIX_GRADIENT_UP_DOWN,
|
||||||
@@ -94,6 +93,7 @@ These are the effects that are currently available:
|
|||||||
RGB_MATRIX_RAINBOW_MOVING_CHEVRON,
|
RGB_MATRIX_RAINBOW_MOVING_CHEVRON,
|
||||||
RGB_MATRIX_JELLYBEAN_RAINDROPS,
|
RGB_MATRIX_JELLYBEAN_RAINDROPS,
|
||||||
#ifdef RGB_MATRIX_KEYPRESSES
|
#ifdef RGB_MATRIX_KEYPRESSES
|
||||||
|
RGB_MATRIX_SOLID_REACTIVE,
|
||||||
RGB_MATRIX_SPLASH,
|
RGB_MATRIX_SPLASH,
|
||||||
RGB_MATRIX_MULTISPLASH,
|
RGB_MATRIX_MULTISPLASH,
|
||||||
RGB_MATRIX_SOLID_SPLASH,
|
RGB_MATRIX_SOLID_SPLASH,
|
||||||
@@ -118,7 +118,7 @@ A similar function works in the keymap as `rgb_matrix_indicators_user`.
|
|||||||
#define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (not recommened)
|
#define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (not recommened)
|
||||||
#define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
|
#define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
|
||||||
#define RGB_DISABLE_WHEN_USB_SUSPENDED false // turn off effects when suspended
|
#define RGB_DISABLE_WHEN_USB_SUSPENDED false // turn off effects when suspended
|
||||||
#define RGB_MATRIX_SKIP_FRAMES 1 // number of frames to skip when displaying animations (0 is full effect)
|
#define RGB_MATRIX_SKIP_FRAMES 1 // number of frames to skip when displaying animations (0 is full effect) if not defined defaults to 1
|
||||||
|
|
||||||
## EEPROM storage
|
## EEPROM storage
|
||||||
|
|
||||||
|
|||||||
@@ -19,8 +19,10 @@ First, you will need `TAP_DANCE_ENABLE=yes` in your `rules.mk`, because the feat
|
|||||||
This array specifies what actions shall be taken when a tap-dance key is in action. Currently, there are three possible options:
|
This array specifies what actions shall be taken when a tap-dance key is in action. Currently, there are three possible options:
|
||||||
|
|
||||||
* `ACTION_TAP_DANCE_DOUBLE(kc1, kc2)`: Sends the `kc1` keycode when tapped once, `kc2` otherwise. When the key is held, the appropriate keycode is registered: `kc1` when pressed and held, `kc2` when tapped once, then pressed and held.
|
* `ACTION_TAP_DANCE_DOUBLE(kc1, kc2)`: Sends the `kc1` keycode when tapped once, `kc2` otherwise. When the key is held, the appropriate keycode is registered: `kc1` when pressed and held, `kc2` when tapped once, then pressed and held.
|
||||||
|
* `ACTION_TAP_DANCE_DUAL_ROLE(kc, layer)`: Sends the `kc` keycode when tapped once, or moves to `layer`. (this functions like the `TO` layer keycode).
|
||||||
* `ACTION_TAP_DANCE_FN(fn)`: Calls the specified function - defined in the user keymap - with the final tap count of the tap dance action.
|
* `ACTION_TAP_DANCE_FN(fn)`: Calls the specified function - defined in the user keymap - with the final tap count of the tap dance action.
|
||||||
* `ACTION_TAP_DANCE_FN_ADVANCED(on_each_tap_fn, on_dance_finished_fn, on_dance_reset_fn)`: Calls the first specified function - defined in the user keymap - on every tap, the second function on when the dance action finishes (like the previous option), and the last function when the tap dance action resets.
|
* `ACTION_TAP_DANCE_FN_ADVANCED(on_each_tap_fn, on_dance_finished_fn, on_dance_reset_fn)`: Calls the first specified function - defined in the user keymap - on every tap, the second function on when the dance action finishes (like the previous option), and the last function when the tap dance action resets.
|
||||||
|
** `ACTION_TAP_DANCE_FN_ADVANCED_TIME(on_each_tap_fn, on_dance_finished_fn, on_dance_reset_fn, tap_specific_tapping_term)`: This functions identically to the `ACTION_TAP_DANCE_FN_ADVANCED` function, but uses a custom tapping term for it, instead of the predefined `TAPPING_TERM`.
|
||||||
|
|
||||||
The first option is enough for a lot of cases, that just want dual roles. For example, `ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_ENT)` will result in `Space` being sent on single-tap, `Enter` otherwise.
|
The first option is enough for a lot of cases, that just want dual roles. For example, `ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_ENT)` will result in `Space` being sent on single-tap, `Enter` otherwise.
|
||||||
|
|
||||||
|
|||||||
@@ -17,8 +17,10 @@ QMK has a staggering number of features for building your keyboard. It can take
|
|||||||
* [Pointing Device](feature_pointing_device.md) - Framework for connecting your custom pointing device to your keyboard.
|
* [Pointing Device](feature_pointing_device.md) - Framework for connecting your custom pointing device to your keyboard.
|
||||||
* [PS2 Mouse](feature_ps2_mouse.md) - Driver for connecting a PS/2 mouse directly to your keyboard.
|
* [PS2 Mouse](feature_ps2_mouse.md) - Driver for connecting a PS/2 mouse directly to your keyboard.
|
||||||
* [RGB Light](feature_rgblight.md) - RGB lighting for your keyboard.
|
* [RGB Light](feature_rgblight.md) - RGB lighting for your keyboard.
|
||||||
|
* [RGB Matrix](feature_rgb_matrix.md) - RGB Matrix lights for per key lighting.
|
||||||
* [Space Cadet](feature_space_cadet.md) - Use your left/right shift keys to type parenthesis and brackets.
|
* [Space Cadet](feature_space_cadet.md) - Use your left/right shift keys to type parenthesis and brackets.
|
||||||
* [Stenography](feature_stenography.md) - Put your keyboard into Plover mode for stenography use.
|
* [Stenography](feature_stenography.md) - Put your keyboard into Plover mode for stenography use.
|
||||||
|
* [Swap Hands](feature_swap_hands.md) - Mirror your keyboard for one handed usage.
|
||||||
* [Tap Dance](feature_tap_dance.md) - Make a single key do as many things as you want.
|
* [Tap Dance](feature_tap_dance.md) - Make a single key do as many things as you want.
|
||||||
* [Terminal](feature_terminal.md) - CLI interface to the internals of your keyboard.
|
* [Terminal](feature_terminal.md) - CLI interface to the internals of your keyboard.
|
||||||
* [Thermal Printer](feature_thermal_printer.md) - Connect a thermal printer to your keyboard to be able to toggle on a printed log of everything you type.
|
* [Thermal Printer](feature_thermal_printer.md) - Connect a thermal printer to your keyboard to be able to toggle on a printed log of everything you type.
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ The full syntax of the `make` command is `<keyboard_folder>:<keymap>:<target>`,
|
|||||||
The `<target>` means the following
|
The `<target>` means the following
|
||||||
* If no target is given, then it's the same as `all` below
|
* If no target is given, then it's the same as `all` below
|
||||||
* `all` compiles as many keyboard/revision/keymap combinations as specified. For example, `make planck/rev4:default` will generate a single .hex, while `make planck/rev4:all` will generate a hex for every keymap available to the planck.
|
* `all` compiles as many keyboard/revision/keymap combinations as specified. For example, `make planck/rev4:default` will generate a single .hex, while `make planck/rev4:all` will generate a hex for every keymap available to the planck.
|
||||||
* `dfu`, `teensy` or `dfu-util`, compile and upload the firmware to the keyboard. If the compilation fails, then nothing will be uploaded. The programmer to use depends on the keyboard. For most keyboards it's `dfu`, but for ChibiOS keyboards you should use `dfu-util`, and `teensy` for standard Teensys. To find out which command you should use for your keyboard, check the keyboard specific readme.
|
* `dfu`, `teensy`, `avrdude` or `dfu-util`, compile and upload the firmware to the keyboard. If the compilation fails, then nothing will be uploaded. The programmer to use depends on the keyboard. For most keyboards it's `dfu`, but for ChibiOS keyboards you should use `dfu-util`, and `teensy` for standard Teensys. To find out which command you should use for your keyboard, check the keyboard specific readme.
|
||||||
* **Note**: some operating systems need root access for these commands to work, so in that case you need to run for example `sudo make planck/rev4:default:dfu`.
|
* **Note**: some operating systems need root access for these commands to work, so in that case you need to run for example `sudo make planck/rev4:default:dfu`.
|
||||||
* `clean`, cleans the build output folders to make sure that everything is built from scratch. Run this before normal compilation if you have some unexplainable problems.
|
* `clean`, cleans the build output folders to make sure that everything is built from scratch. Run this before normal compilation if you have some unexplainable problems.
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -2,12 +2,13 @@
|
|||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<title>Document</title>
|
<title>QMK Firmware</title>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||||
<meta name="description" content="Description">
|
<meta name="description" content="Description">
|
||||||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
||||||
<link rel="stylesheet" href="//unpkg.com/docsify/lib/themes/vue.css" title="light">
|
<link rel="stylesheet" href="//unpkg.com/docsify/lib/themes/vue.css" title="light">
|
||||||
<link rel="stylesheet" href="qmk.css" title="dark" disabled>
|
<link rel="stylesheet" href="qmk.css" title="dark" disabled>
|
||||||
|
<link rel="stylesheet" href="sidebar.css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="app"></div>
|
<div id="app"></div>
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
.sidebar-toggle {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: auto;
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search {
|
||||||
|
margin-top: 40px;
|
||||||
|
}
|
||||||
@@ -1,232 +0,0 @@
|
|||||||
/*
|
|
||||||
* TWIlib.c
|
|
||||||
*
|
|
||||||
* Created: 6/01/2014 10:41:33 PM
|
|
||||||
* Author: Chris Herring
|
|
||||||
* http://www.chrisherring.net/all/tutorial-interrupt-driven-twi-interface-for-avr-part1/
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <avr/io.h>
|
|
||||||
#include <avr/interrupt.h>
|
|
||||||
#include "TWIlib.h"
|
|
||||||
#include "util/delay.h"
|
|
||||||
|
|
||||||
void TWIInit()
|
|
||||||
{
|
|
||||||
TWIInfo.mode = Ready;
|
|
||||||
TWIInfo.errorCode = 0xFF;
|
|
||||||
TWIInfo.repStart = 0;
|
|
||||||
// Set pre-scalers (no pre-scaling)
|
|
||||||
TWSR = 0;
|
|
||||||
// Set bit rate
|
|
||||||
TWBR = ((F_CPU / TWI_FREQ) - 16) / 2;
|
|
||||||
// Enable TWI and interrupt
|
|
||||||
TWCR = (1 << TWIE) | (1 << TWEN);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t isTWIReady()
|
|
||||||
{
|
|
||||||
if ( (TWIInfo.mode == Ready) | (TWIInfo.mode == RepeatedStartSent) )
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t TWITransmitData(void *const TXdata, uint8_t dataLen, uint8_t repStart)
|
|
||||||
{
|
|
||||||
if (dataLen <= TXMAXBUFLEN)
|
|
||||||
{
|
|
||||||
// Wait until ready
|
|
||||||
while (!isTWIReady()) {_delay_us(1);}
|
|
||||||
// Set repeated start mode
|
|
||||||
TWIInfo.repStart = repStart;
|
|
||||||
// Copy data into the transmit buffer
|
|
||||||
uint8_t *data = (uint8_t *)TXdata;
|
|
||||||
for (int i = 0; i < dataLen; i++)
|
|
||||||
{
|
|
||||||
TWITransmitBuffer[i] = data[i];
|
|
||||||
}
|
|
||||||
// Copy transmit info to global variables
|
|
||||||
TXBuffLen = dataLen;
|
|
||||||
TXBuffIndex = 0;
|
|
||||||
|
|
||||||
// If a repeated start has been sent, then devices are already listening for an address
|
|
||||||
// and another start does not need to be sent.
|
|
||||||
if (TWIInfo.mode == RepeatedStartSent)
|
|
||||||
{
|
|
||||||
TWIInfo.mode = Initializing;
|
|
||||||
TWDR = TWITransmitBuffer[TXBuffIndex++]; // Load data to transmit buffer
|
|
||||||
TWISendTransmit(); // Send the data
|
|
||||||
}
|
|
||||||
else // Otherwise, just send the normal start signal to begin transmission.
|
|
||||||
{
|
|
||||||
TWIInfo.mode = Initializing;
|
|
||||||
TWISendStart();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return 1; // return an error if data length is longer than buffer
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t TWIReadData(uint8_t TWIaddr, uint8_t bytesToRead, uint8_t repStart)
|
|
||||||
{
|
|
||||||
// Check if number of bytes to read can fit in the RXbuffer
|
|
||||||
if (bytesToRead < RXMAXBUFLEN)
|
|
||||||
{
|
|
||||||
// Reset buffer index and set RXBuffLen to the number of bytes to read
|
|
||||||
RXBuffIndex = 0;
|
|
||||||
RXBuffLen = bytesToRead;
|
|
||||||
// Create the one value array for the address to be transmitted
|
|
||||||
uint8_t TXdata[1];
|
|
||||||
// Shift the address and AND a 1 into the read write bit (set to write mode)
|
|
||||||
TXdata[0] = (TWIaddr << 1) | 0x01;
|
|
||||||
// Use the TWITransmitData function to initialize the transfer and address the slave
|
|
||||||
TWITransmitData(TXdata, 1, repStart);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
ISR (TWI_vect)
|
|
||||||
{
|
|
||||||
switch (TWI_STATUS)
|
|
||||||
{
|
|
||||||
// ----\/ ---- MASTER TRANSMITTER OR WRITING ADDRESS ----\/ ---- //
|
|
||||||
case TWI_MT_SLAW_ACK: // SLA+W transmitted and ACK received
|
|
||||||
// Set mode to Master Transmitter
|
|
||||||
TWIInfo.mode = MasterTransmitter;
|
|
||||||
case TWI_START_SENT: // Start condition has been transmitted
|
|
||||||
case TWI_MT_DATA_ACK: // Data byte has been transmitted, ACK received
|
|
||||||
if (TXBuffIndex < TXBuffLen) // If there is more data to send
|
|
||||||
{
|
|
||||||
TWDR = TWITransmitBuffer[TXBuffIndex++]; // Load data to transmit buffer
|
|
||||||
TWIInfo.errorCode = TWI_NO_RELEVANT_INFO;
|
|
||||||
TWISendTransmit(); // Send the data
|
|
||||||
}
|
|
||||||
// This transmission is complete however do not release bus yet
|
|
||||||
else if (TWIInfo.repStart)
|
|
||||||
{
|
|
||||||
TWIInfo.errorCode = 0xFF;
|
|
||||||
TWISendStart();
|
|
||||||
}
|
|
||||||
// All transmissions are complete, exit
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TWIInfo.mode = Ready;
|
|
||||||
TWIInfo.errorCode = 0xFF;
|
|
||||||
TWISendStop();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
// ----\/ ---- MASTER RECEIVER ----\/ ---- //
|
|
||||||
|
|
||||||
case TWI_MR_SLAR_ACK: // SLA+R has been transmitted, ACK has been received
|
|
||||||
// Switch to Master Receiver mode
|
|
||||||
TWIInfo.mode = MasterReceiver;
|
|
||||||
// If there is more than one byte to be read, receive data byte and return an ACK
|
|
||||||
if (RXBuffIndex < RXBuffLen-1)
|
|
||||||
{
|
|
||||||
TWIInfo.errorCode = TWI_NO_RELEVANT_INFO;
|
|
||||||
TWISendACK();
|
|
||||||
}
|
|
||||||
// Otherwise when a data byte (the only data byte) is received, return NACK
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TWIInfo.errorCode = TWI_NO_RELEVANT_INFO;
|
|
||||||
TWISendNACK();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TWI_MR_DATA_ACK: // Data has been received, ACK has been transmitted.
|
|
||||||
|
|
||||||
/// -- HANDLE DATA BYTE --- ///
|
|
||||||
TWIReceiveBuffer[RXBuffIndex++] = TWDR;
|
|
||||||
// If there is more than one byte to be read, receive data byte and return an ACK
|
|
||||||
if (RXBuffIndex < RXBuffLen-1)
|
|
||||||
{
|
|
||||||
TWIInfo.errorCode = TWI_NO_RELEVANT_INFO;
|
|
||||||
TWISendACK();
|
|
||||||
}
|
|
||||||
// Otherwise when a data byte (the only data byte) is received, return NACK
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TWIInfo.errorCode = TWI_NO_RELEVANT_INFO;
|
|
||||||
TWISendNACK();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TWI_MR_DATA_NACK: // Data byte has been received, NACK has been transmitted. End of transmission.
|
|
||||||
|
|
||||||
/// -- HANDLE DATA BYTE --- ///
|
|
||||||
TWIReceiveBuffer[RXBuffIndex++] = TWDR;
|
|
||||||
// This transmission is complete however do not release bus yet
|
|
||||||
if (TWIInfo.repStart)
|
|
||||||
{
|
|
||||||
TWIInfo.errorCode = 0xFF;
|
|
||||||
TWISendStart();
|
|
||||||
}
|
|
||||||
// All transmissions are complete, exit
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TWIInfo.mode = Ready;
|
|
||||||
TWIInfo.errorCode = 0xFF;
|
|
||||||
TWISendStop();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
// ----\/ ---- MT and MR common ----\/ ---- //
|
|
||||||
|
|
||||||
case TWI_MR_SLAR_NACK: // SLA+R transmitted, NACK received
|
|
||||||
case TWI_MT_SLAW_NACK: // SLA+W transmitted, NACK received
|
|
||||||
case TWI_MT_DATA_NACK: // Data byte has been transmitted, NACK received
|
|
||||||
case TWI_LOST_ARBIT: // Arbitration has been lost
|
|
||||||
// Return error and send stop and set mode to ready
|
|
||||||
if (TWIInfo.repStart)
|
|
||||||
{
|
|
||||||
TWIInfo.errorCode = TWI_STATUS;
|
|
||||||
TWISendStart();
|
|
||||||
}
|
|
||||||
// All transmissions are complete, exit
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TWIInfo.mode = Ready;
|
|
||||||
TWIInfo.errorCode = TWI_STATUS;
|
|
||||||
TWISendStop();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case TWI_REP_START_SENT: // Repeated start has been transmitted
|
|
||||||
// Set the mode but DO NOT clear TWINT as the next data is not yet ready
|
|
||||||
TWIInfo.mode = RepeatedStartSent;
|
|
||||||
break;
|
|
||||||
|
|
||||||
// ----\/ ---- SLAVE RECEIVER ----\/ ---- //
|
|
||||||
|
|
||||||
// TODO IMPLEMENT SLAVE RECEIVER FUNCTIONALITY
|
|
||||||
|
|
||||||
// ----\/ ---- SLAVE TRANSMITTER ----\/ ---- //
|
|
||||||
|
|
||||||
// TODO IMPLEMENT SLAVE TRANSMITTER FUNCTIONALITY
|
|
||||||
|
|
||||||
// ----\/ ---- MISCELLANEOUS STATES ----\/ ---- //
|
|
||||||
case TWI_NO_RELEVANT_INFO: // It is not really possible to get into this ISR on this condition
|
|
||||||
// Rather, it is there to be manually set between operations
|
|
||||||
break;
|
|
||||||
case TWI_ILLEGAL_START_STOP: // Illegal START/STOP, abort and return error
|
|
||||||
TWIInfo.errorCode = TWI_ILLEGAL_START_STOP;
|
|
||||||
TWIInfo.mode = Ready;
|
|
||||||
TWISendStop();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,82 +0,0 @@
|
|||||||
/*
|
|
||||||
* TWIlib.h
|
|
||||||
*
|
|
||||||
* Created: 6/01/2014 10:38:42 PM
|
|
||||||
* Author: Chris Herring
|
|
||||||
* http://www.chrisherring.net/all/tutorial-interrupt-driven-twi-interface-for-avr-part1/
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef TWILIB_H_
|
|
||||||
#define TWILIB_H_
|
|
||||||
// TWI bit rate (was 100000)
|
|
||||||
#define TWI_FREQ 400000
|
|
||||||
// Get TWI status
|
|
||||||
#define TWI_STATUS (TWSR & 0xF8)
|
|
||||||
// Transmit buffer length
|
|
||||||
#define TXMAXBUFLEN 20
|
|
||||||
// Receive buffer length
|
|
||||||
#define RXMAXBUFLEN 20
|
|
||||||
// Global transmit buffer
|
|
||||||
uint8_t TWITransmitBuffer[TXMAXBUFLEN];
|
|
||||||
// Global receive buffer
|
|
||||||
volatile uint8_t TWIReceiveBuffer[RXMAXBUFLEN];
|
|
||||||
// Buffer indexes
|
|
||||||
volatile int TXBuffIndex; // Index of the transmit buffer. Is volatile, can change at any time.
|
|
||||||
int RXBuffIndex; // Current index in the receive buffer
|
|
||||||
// Buffer lengths
|
|
||||||
int TXBuffLen; // The total length of the transmit buffer
|
|
||||||
int RXBuffLen; // The total number of bytes to read (should be less than RXMAXBUFFLEN)
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
Ready,
|
|
||||||
Initializing,
|
|
||||||
RepeatedStartSent,
|
|
||||||
MasterTransmitter,
|
|
||||||
MasterReceiver,
|
|
||||||
SlaceTransmitter,
|
|
||||||
SlaveReciever
|
|
||||||
} TWIMode;
|
|
||||||
|
|
||||||
typedef struct TWIInfoStruct{
|
|
||||||
TWIMode mode;
|
|
||||||
uint8_t errorCode;
|
|
||||||
uint8_t repStart;
|
|
||||||
}TWIInfoStruct;
|
|
||||||
TWIInfoStruct TWIInfo;
|
|
||||||
|
|
||||||
|
|
||||||
// TWI Status Codes
|
|
||||||
#define TWI_START_SENT 0x08 // Start sent
|
|
||||||
#define TWI_REP_START_SENT 0x10 // Repeated Start sent
|
|
||||||
// Master Transmitter Mode
|
|
||||||
#define TWI_MT_SLAW_ACK 0x18 // SLA+W sent and ACK received
|
|
||||||
#define TWI_MT_SLAW_NACK 0x20 // SLA+W sent and NACK received
|
|
||||||
#define TWI_MT_DATA_ACK 0x28 // DATA sent and ACK received
|
|
||||||
#define TWI_MT_DATA_NACK 0x30 // DATA sent and NACK received
|
|
||||||
// Master Receiver Mode
|
|
||||||
#define TWI_MR_SLAR_ACK 0x40 // SLA+R sent, ACK received
|
|
||||||
#define TWI_MR_SLAR_NACK 0x48 // SLA+R sent, NACK received
|
|
||||||
#define TWI_MR_DATA_ACK 0x50 // Data received, ACK returned
|
|
||||||
#define TWI_MR_DATA_NACK 0x58 // Data received, NACK returned
|
|
||||||
|
|
||||||
// Miscellaneous States
|
|
||||||
#define TWI_LOST_ARBIT 0x38 // Arbitration has been lost
|
|
||||||
#define TWI_NO_RELEVANT_INFO 0xF8 // No relevant information available
|
|
||||||
#define TWI_ILLEGAL_START_STOP 0x00 // Illegal START or STOP condition has been detected
|
|
||||||
#define TWI_SUCCESS 0xFF // Successful transfer, this state is impossible from TWSR as bit2 is 0 and read only
|
|
||||||
|
|
||||||
|
|
||||||
#define TWISendStart() (TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)|(1<<TWIE)) // Send the START signal, enable interrupts and TWI, clear TWINT flag to resume transfer.
|
|
||||||
#define TWISendStop() (TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN)|(1<<TWIE)) // Send the STOP signal, enable interrupts and TWI, clear TWINT flag.
|
|
||||||
#define TWISendTransmit() (TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWIE)) // Used to resume a transfer, clear TWINT and ensure that TWI and interrupts are enabled.
|
|
||||||
#define TWISendACK() (TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWIE)|(1<<TWEA)) // FOR MR mode. Resume a transfer, ensure that TWI and interrupts are enabled and respond with an ACK if the device is addressed as a slave or after it receives a byte.
|
|
||||||
#define TWISendNACK() (TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWIE)) // FOR MR mode. Resume a transfer, ensure that TWI and interrupts are enabled but DO NOT respond with an ACK if the device is addressed as a slave or after it receives a byte.
|
|
||||||
|
|
||||||
// Function declarations
|
|
||||||
uint8_t TWITransmitData(void *const TXdata, uint8_t dataLen, uint8_t repStart);
|
|
||||||
void TWIInit(void);
|
|
||||||
uint8_t TWIReadData(uint8_t TWIaddr, uint8_t bytesToRead, uint8_t repStart);
|
|
||||||
uint8_t isTWIReady(void);
|
|
||||||
|
|
||||||
#endif // TWICOMMS_H_
|
|
||||||
Executable
+149
@@ -0,0 +1,149 @@
|
|||||||
|
/* Library made by: g4lvanix
|
||||||
|
* Github repository: https://github.com/g4lvanix/I2C-master-lib
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <avr/io.h>
|
||||||
|
#include <util/twi.h>
|
||||||
|
|
||||||
|
#include "i2c_master.h"
|
||||||
|
|
||||||
|
#define F_SCL 400000UL // SCL frequency
|
||||||
|
#define Prescaler 1
|
||||||
|
#define TWBR_val ((((F_CPU / F_SCL) / Prescaler) - 16 ) / 2)
|
||||||
|
|
||||||
|
void i2c_init(void)
|
||||||
|
{
|
||||||
|
TWBR = (uint8_t)TWBR_val;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t i2c_start(uint8_t address)
|
||||||
|
{
|
||||||
|
// reset TWI control register
|
||||||
|
TWCR = 0;
|
||||||
|
// transmit START condition
|
||||||
|
TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
|
||||||
|
// wait for end of transmission
|
||||||
|
while( !(TWCR & (1<<TWINT)) );
|
||||||
|
|
||||||
|
// check if the start condition was successfully transmitted
|
||||||
|
if((TWSR & 0xF8) != TW_START){ return 1; }
|
||||||
|
|
||||||
|
// load slave address into data register
|
||||||
|
TWDR = address;
|
||||||
|
// start transmission of address
|
||||||
|
TWCR = (1<<TWINT) | (1<<TWEN);
|
||||||
|
// wait for end of transmission
|
||||||
|
while( !(TWCR & (1<<TWINT)) );
|
||||||
|
|
||||||
|
// check if the device has acknowledged the READ / WRITE mode
|
||||||
|
uint8_t twst = TW_STATUS & 0xF8;
|
||||||
|
if ( (twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK) ) return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t i2c_write(uint8_t data)
|
||||||
|
{
|
||||||
|
// load data into data register
|
||||||
|
TWDR = data;
|
||||||
|
// start transmission of data
|
||||||
|
TWCR = (1<<TWINT) | (1<<TWEN);
|
||||||
|
// wait for end of transmission
|
||||||
|
while( !(TWCR & (1<<TWINT)) );
|
||||||
|
|
||||||
|
if( (TWSR & 0xF8) != TW_MT_DATA_ACK ){ return 1; }
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t i2c_read_ack(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
// start TWI module and acknowledge data after reception
|
||||||
|
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWEA);
|
||||||
|
// wait for end of transmission
|
||||||
|
while( !(TWCR & (1<<TWINT)) );
|
||||||
|
// return received data from TWDR
|
||||||
|
return TWDR;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t i2c_read_nack(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
// start receiving without acknowledging reception
|
||||||
|
TWCR = (1<<TWINT) | (1<<TWEN);
|
||||||
|
// wait for end of transmission
|
||||||
|
while( !(TWCR & (1<<TWINT)) );
|
||||||
|
// return received data from TWDR
|
||||||
|
return TWDR;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t i2c_transmit(uint8_t address, uint8_t* data, uint16_t length)
|
||||||
|
{
|
||||||
|
if (i2c_start(address | I2C_WRITE)) return 1;
|
||||||
|
|
||||||
|
for (uint16_t i = 0; i < length; i++)
|
||||||
|
{
|
||||||
|
if (i2c_write(data[i])) return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
i2c_stop();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length)
|
||||||
|
{
|
||||||
|
if (i2c_start(address | I2C_READ)) return 1;
|
||||||
|
|
||||||
|
for (uint16_t i = 0; i < (length-1); i++)
|
||||||
|
{
|
||||||
|
data[i] = i2c_read_ack();
|
||||||
|
}
|
||||||
|
data[(length-1)] = i2c_read_nack();
|
||||||
|
|
||||||
|
i2c_stop();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length)
|
||||||
|
{
|
||||||
|
if (i2c_start(devaddr | 0x00)) return 1;
|
||||||
|
|
||||||
|
i2c_write(regaddr);
|
||||||
|
|
||||||
|
for (uint16_t i = 0; i < length; i++)
|
||||||
|
{
|
||||||
|
if (i2c_write(data[i])) return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
i2c_stop();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length)
|
||||||
|
{
|
||||||
|
if (i2c_start(devaddr)) return 1;
|
||||||
|
|
||||||
|
i2c_write(regaddr);
|
||||||
|
|
||||||
|
if (i2c_start(devaddr | 0x01)) return 1;
|
||||||
|
|
||||||
|
for (uint16_t i = 0; i < (length-1); i++)
|
||||||
|
{
|
||||||
|
data[i] = i2c_read_ack();
|
||||||
|
}
|
||||||
|
data[(length-1)] = i2c_read_nack();
|
||||||
|
|
||||||
|
i2c_stop();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void i2c_stop(void)
|
||||||
|
{
|
||||||
|
// transmit STOP condition
|
||||||
|
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
|
||||||
|
}
|
||||||
Executable
+22
@@ -0,0 +1,22 @@
|
|||||||
|
/* Library made by: g4lvanix
|
||||||
|
* Github repository: https://github.com/g4lvanix/I2C-master-lib
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef I2C_MASTER_H
|
||||||
|
#define I2C_MASTER_H
|
||||||
|
|
||||||
|
#define I2C_READ 0x01
|
||||||
|
#define I2C_WRITE 0x00
|
||||||
|
|
||||||
|
void i2c_init(void);
|
||||||
|
uint8_t i2c_start(uint8_t address);
|
||||||
|
uint8_t i2c_write(uint8_t data);
|
||||||
|
uint8_t i2c_read_ack(void);
|
||||||
|
uint8_t i2c_read_nack(void);
|
||||||
|
uint8_t i2c_transmit(uint8_t address, uint8_t* data, uint16_t length);
|
||||||
|
uint8_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length);
|
||||||
|
uint8_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length);
|
||||||
|
uint8_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length);
|
||||||
|
void i2c_stop(void);
|
||||||
|
|
||||||
|
#endif // I2C_MASTER_H
|
||||||
+10
-24
@@ -20,7 +20,7 @@
|
|||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
#include <util/delay.h>
|
#include <util/delay.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "TWIlib.h"
|
#include "i2c_master.h"
|
||||||
#include "progmem.h"
|
#include "progmem.h"
|
||||||
|
|
||||||
// This is a 7-bit address, that gets left-shifted and bit 0
|
// This is a 7-bit address, that gets left-shifted and bit 0
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
#define ISSI_BANK_FUNCTIONREG 0x0B // helpfully called 'page nine'
|
#define ISSI_BANK_FUNCTIONREG 0x0B // helpfully called 'page nine'
|
||||||
|
|
||||||
// Transfer buffer for TWITransmitData()
|
// Transfer buffer for TWITransmitData()
|
||||||
uint8_t g_twi_transfer_buffer[TXMAXBUFLEN];
|
uint8_t g_twi_transfer_buffer[20];
|
||||||
|
|
||||||
// These buffers match the IS31FL3731 PWM registers 0x24-0xB3.
|
// These buffers match the IS31FL3731 PWM registers 0x24-0xB3.
|
||||||
// Storing them like this is optimal for I2C transfers to the registers.
|
// Storing them like this is optimal for I2C transfers to the registers.
|
||||||
@@ -80,17 +80,11 @@ bool g_led_control_registers_update_required = false;
|
|||||||
|
|
||||||
void IS31FL3731_write_register( uint8_t addr, uint8_t reg, uint8_t data )
|
void IS31FL3731_write_register( uint8_t addr, uint8_t reg, uint8_t data )
|
||||||
{
|
{
|
||||||
g_twi_transfer_buffer[0] = (addr << 1) | 0x00;
|
g_twi_transfer_buffer[0] = reg;
|
||||||
g_twi_transfer_buffer[1] = reg;
|
g_twi_transfer_buffer[1] = data;
|
||||||
g_twi_transfer_buffer[2] = data;
|
|
||||||
|
|
||||||
// Set the error code to have no relevant information
|
//Transmit data until succesful
|
||||||
TWIInfo.errorCode = TWI_NO_RELEVANT_INFO;
|
while(i2c_transmit(addr << 1, g_twi_transfer_buffer,2) != 0);
|
||||||
// Continuously attempt to transmit data until a successful transmission occurs
|
|
||||||
//while ( TWIInfo.errorCode != 0xFF )
|
|
||||||
//{
|
|
||||||
TWITransmitData( g_twi_transfer_buffer, 3, 0 );
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void IS31FL3731_write_pwm_buffer( uint8_t addr, uint8_t *pwm_buffer )
|
void IS31FL3731_write_pwm_buffer( uint8_t addr, uint8_t *pwm_buffer )
|
||||||
@@ -100,29 +94,21 @@ void IS31FL3731_write_pwm_buffer( uint8_t addr, uint8_t *pwm_buffer )
|
|||||||
// transmit PWM registers in 9 transfers of 16 bytes
|
// transmit PWM registers in 9 transfers of 16 bytes
|
||||||
// g_twi_transfer_buffer[] is 20 bytes
|
// g_twi_transfer_buffer[] is 20 bytes
|
||||||
|
|
||||||
// set the I2C address
|
|
||||||
g_twi_transfer_buffer[0] = (addr << 1) | 0x00;
|
|
||||||
|
|
||||||
// iterate over the pwm_buffer contents at 16 byte intervals
|
// iterate over the pwm_buffer contents at 16 byte intervals
|
||||||
for ( int i = 0; i < 144; i += 16 )
|
for ( int i = 0; i < 144; i += 16 )
|
||||||
{
|
{
|
||||||
// set the first register, e.g. 0x24, 0x34, 0x44, etc.
|
// set the first register, e.g. 0x24, 0x34, 0x44, etc.
|
||||||
g_twi_transfer_buffer[1] = 0x24 + i;
|
g_twi_transfer_buffer[0] = 0x24 + i;
|
||||||
// copy the data from i to i+15
|
// copy the data from i to i+15
|
||||||
// device will auto-increment register for data after the first byte
|
// device will auto-increment register for data after the first byte
|
||||||
// thus this sets registers 0x24-0x33, 0x34-0x43, etc. in one transfer
|
// thus this sets registers 0x24-0x33, 0x34-0x43, etc. in one transfer
|
||||||
for ( int j = 0; j < 16; j++ )
|
for ( int j = 0; j < 16; j++ )
|
||||||
{
|
{
|
||||||
g_twi_transfer_buffer[2 + j] = pwm_buffer[i + j];
|
g_twi_transfer_buffer[1 + j] = pwm_buffer[i + j];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the error code to have no relevant information
|
//Transmit buffer until succesful
|
||||||
TWIInfo.errorCode = TWI_NO_RELEVANT_INFO;
|
while(i2c_transmit(addr << 1, g_twi_transfer_buffer,17) != 0);
|
||||||
// Continuously attempt to transmit data until a successful transmission occurs
|
|
||||||
while ( TWIInfo.errorCode != 0xFF )
|
|
||||||
{
|
|
||||||
TWITransmitData( g_twi_transfer_buffer, 16 + 2, 0 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -63,4 +63,19 @@
|
|||||||
K400, K401, K403, K406, K410, K411, K413, K414 \
|
K400, K401, K403, K406, K410, K411, K413, K414 \
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/* HHKB Variant */
|
||||||
|
#define LAYOUT_60_hhkb( \
|
||||||
|
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
|
||||||
|
K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
|
||||||
|
K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, \
|
||||||
|
K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
|
||||||
|
K401, K403, K406, K411, K413 \
|
||||||
|
) LAYOUT_all( \
|
||||||
|
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
|
||||||
|
K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
|
||||||
|
K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, K214, \
|
||||||
|
K300, KC_NO,K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
|
||||||
|
KC_NO,K401, K403, K406, KC_NO,K411, K413, KC_NO \
|
||||||
|
)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -19,6 +19,9 @@
|
|||||||
|
|
||||||
"LAYOUT_60_ansi_split_bs_rshift": {
|
"LAYOUT_60_ansi_split_bs_rshift": {
|
||||||
"layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":6}, {"label":"Alt", "x":10, "y":4, "w":1.5}, {"label":"Win", "x":11.5, "y":4}, {"label":"Menu", "x":12.5, "y":4}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}]
|
"layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":6}, {"label":"Alt", "x":10, "y":4, "w":1.5}, {"label":"Win", "x":11.5, "y":4}, {"label":"Menu", "x":12.5, "y":4}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}]
|
||||||
|
},
|
||||||
|
"LAYOUT_60_hhkb": {
|
||||||
|
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"~", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Delete", "x":13.5, "y":1, "w":1.5}, {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Os", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Os", "x":12.5, "y":4}]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -55,4 +55,4 @@ BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
|
|||||||
AUDIO_ENABLE ?= no
|
AUDIO_ENABLE ?= no
|
||||||
RGBLIGHT_ENABLE ?= yes
|
RGBLIGHT_ENABLE ?= yes
|
||||||
|
|
||||||
LAYOUTS = 60_ansi 60_iso 60_ansi_split_bs_rshift
|
LAYOUTS = 60_ansi 60_iso 60_ansi_split_bs_rshift 60_hhkb
|
||||||
@@ -14,16 +14,25 @@
|
|||||||
CHANGELOG:
|
CHANGELOG:
|
||||||
|
|
||||||
0.1 - Initial commit. Based off of Profet's default keymap.
|
0.1 - Initial commit. Based off of Profet's default keymap.
|
||||||
0.2 - Converted to a more Planck/Preonic keymap style file with
|
0.2 - Converted to a more Planck/Preonic keymap style file with
|
||||||
persistent layers enabled. Renamed layers to reflect OLKB maps.
|
persistent layers enabled. Renamed layers to reflect OLKB maps.
|
||||||
Added a TODO list.
|
Added a TODO list.
|
||||||
|
0.3 - Moved location of media & volume keys. Added Print Screen,
|
||||||
|
Scroll Lock and Pause keys. Added a WOW gaming layer that
|
||||||
|
changes the location of Ctrl & Alt to the thumb keys. Added
|
||||||
|
readme.
|
||||||
|
0.4 - After more useage, I realized that the ESC key was in the way
|
||||||
|
of my muscle memory (gee, thanks, Planck!) so I moved it to
|
||||||
|
the normal Caps Lock position, and moved Caps Lock to the same
|
||||||
|
position on the RAISE and LOWER layers. Added code to turn off
|
||||||
|
the Pro Micro LEDs after flashing.
|
||||||
|
0.5 - Converted keymap to LAYOUT standard.
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
|
|
||||||
* Make the layout more efficient, even if it means changing the RAISE
|
* Make the layout more efficient, even if it means changing the RAISE
|
||||||
and LOWER functionality.
|
and LOWER functionality.
|
||||||
* Add legends in comments for each layer. Maybe.
|
* Add legends in comments for each layer. Maybe.
|
||||||
* Add a gaming layer.
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -58,54 +67,57 @@ enum atreus52_keycodes {
|
|||||||
#define _______ KC_TRNS
|
#define _______ KC_TRNS
|
||||||
#define XXXXXXX KC_NO
|
#define XXXXXXX KC_NO
|
||||||
|
|
||||||
|
// Aliases to make the keymap clearer.
|
||||||
|
#define CTL_ENT CTL_T(KC_ENT)
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[_DVORAK] = LAYOUT( /* dvorak */
|
[_DVORAK] = LAYOUT ( /* dvorak */
|
||||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
|
||||||
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
|
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
|
||||||
KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
|
KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
|
||||||
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
|
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
|
||||||
KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, KC_LGUI, KC_ENT, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_RCTL
|
KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, KC_LGUI, KC_ENT, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_RCTL
|
||||||
),
|
),
|
||||||
|
|
||||||
[_QWERTY] = LAYOUT( /* qwerty */
|
[_QWERTY] = LAYOUT ( /* 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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
||||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL,
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL,
|
||||||
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_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_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_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, KC_LGUI, KC_ENT, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_RCTL
|
KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, KC_LGUI, KC_ENT, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_RCTL
|
||||||
),
|
),
|
||||||
|
|
||||||
[_COLEMAK] = LAYOUT( /* colemak */
|
[_COLEMAK] = LAYOUT ( /* colemak */
|
||||||
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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
|
||||||
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL,
|
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL,
|
||||||
KC_BSPC, 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_RSFT,
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||||
KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, KC_LGUI, KC_ENT, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_RCTL
|
KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, KC_LGUI, KC_ENT, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_RCTL
|
||||||
),
|
),
|
||||||
|
|
||||||
[_WOW] = LAYOUT( /* Dvorak with minor modifications for playing World of Warcraft */
|
[_WOW] = LAYOUT ( /* Dvorak with minor modifications for playing World of Warcraft */
|
||||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
|
||||||
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
|
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
|
||||||
KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
|
KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
|
||||||
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
|
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
|
||||||
KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, KC_LALT, CTL_T(KC_ENT), KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT
|
KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, KC_LALT, CTL_ENT, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT
|
||||||
),
|
),
|
||||||
|
|
||||||
[_LOWER] = LAYOUT(
|
[_LOWER] = LAYOUT (
|
||||||
KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12,
|
KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12,
|
||||||
KC_TILD, KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PIPE,
|
KC_TILD, KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PIPE,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_PLUS, KC_LCBR, KC_RCBR, _______,
|
KC_CAPS, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, KC_PLUS, KC_LCBR, KC_RCBR, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
|
_______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______,
|
||||||
_______, _______, KC_HOME, KC_END, _______, KC_DEL, _______, _______, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______
|
_______, _______, KC_HOME, KC_END, _______, KC_DEL, _______, _______, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______
|
||||||
),
|
),
|
||||||
[_RAISE] = LAYOUT(
|
[_RAISE] = LAYOUT (
|
||||||
KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12,
|
KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12,
|
||||||
KC_TILD, KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BSLS,
|
KC_TILD, KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BSLS,
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_EQL, KC_LBRC, KC_RBRC, _______,
|
KC_CAPS, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, KC_EQL, KC_LBRC, KC_RBRC, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______,
|
_______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______,
|
||||||
_______, _______, KC_HOME, KC_END, _______, KC_DEL, _______, _______, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______
|
_______, _______, KC_HOME, KC_END, _______, KC_DEL, _______, _______, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______
|
||||||
),
|
),
|
||||||
[_ADJUST] = LAYOUT(
|
[_ADJUST] = LAYOUT (
|
||||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
_______, _______, _______, _______, _______, _______, _______, QWERTY, COLEMAK, DVORAK, _______, WOW,
|
_______, _______, _______, _______, _______, _______, _______, QWERTY, COLEMAK, DVORAK, _______, WOW,
|
||||||
|
|||||||
@@ -0,0 +1,131 @@
|
|||||||
|
# Xyverz's Atreus62 Keymap
|
||||||
|
|
||||||
|
## About this keymap:
|
||||||
|
|
||||||
|
This is the Atreus62 keyboard layout by Xyverz aka u/Zrevyx on r/mk. I've blatantly stolen what works for me from the Planck and Preonic layouts and modified this file to fit me. Initial credet goes to u/profet23 for the doing all the work and adding this keyboard to QMK in the first place.
|
||||||
|
|
||||||
|
I've got Dvorak, Qwerty, and Colemak layouts at this time, with the possibility of adding more in the future.
|
||||||
|
|
||||||
|
The bottom row is fairly Kinesis-ish since the Contour and Advantage keyboards have been my daily drivers for the last 17 years. I hope You can get some enjoyment out of this layout should you chose it!
|
||||||
|
|
||||||
|
### CHANGELOG:
|
||||||
|
|
||||||
|
#### 0.1
|
||||||
|
* Initial commit. Based off of Profet's default keymap.
|
||||||
|
#### 0.2
|
||||||
|
* Converted to a more Planck/Preonic keymap style file with persistent layers enabled. Renamed layers to reflect OLKB maps.
|
||||||
|
* Added a TODO list.
|
||||||
|
#### 0.3
|
||||||
|
* Moved location of media & volume keys. Added Print Screen, Scroll Lock and Pause keys.
|
||||||
|
* Added a WOW gaming layer that changes the location of Ctrl & Alt to the thumb keys. Right thumb is Ctrl when held, Enter when tapped.
|
||||||
|
* Added readme.
|
||||||
|
#### 0.4
|
||||||
|
* Moved location of Escape key to Caps Lock position. Moved Caps Lock to same position on Raise/Lower Layers.
|
||||||
|
* Put Tilde/Grave in the upper-left corner
|
||||||
|
* Added code to turn off the red LEDs on the Pro Micro after flashing. They were annoying me.
|
||||||
|
|
||||||
|
### TODO:
|
||||||
|
|
||||||
|
* Make the layout more efficient, even if it means changing the RAISE
|
||||||
|
and LOWER functionality.
|
||||||
|
* Add legends in comments for each layer. Maybe.
|
||||||
|
* Enjoy this revision; figure out new things later.
|
||||||
|
|
||||||
|
### Layer 0: Dvorak layer
|
||||||
|
|
||||||
|
,-----------------------------------------. ,-----------------------------------------.
|
||||||
|
| Grv | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | \ |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| Tab | ' | , | . | P | Y | | F | G | C | R | L | / |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| Esc | A | O | E | U | I | | D | H | T | N | S | - |
|
||||||
|
|------+------+------+------+------+------|------.,------|------+------+------+------+------+------|
|
||||||
|
| Shft | ; | Q | J | K | X | Gui ||Enter | B | M | W | V | Z | Shft |
|
||||||
|
|------+------+------+------+------+------| || |------+------+------+------+------+------|
|
||||||
|
| Ctrl | Alt | Left | Rght | LOWER| BkSp |------'`------| Spc | RAISE| Up | Down | Gui | Ctrl |
|
||||||
|
`-----------------------------------------' `-----------------------------------------'
|
||||||
|
|
||||||
|
### Layer 1: QWERTY layer
|
||||||
|
|
||||||
|
,-----------------------------------------. ,-----------------------------------------.
|
||||||
|
| Grv | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| Tab | Q | W | E | R | T | | Y | U | I | O | P | Del |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| Esc | A | S | D | F | G | | D | H | T | N | S | ' |
|
||||||
|
|------+------+------+------+------+------|------.,------|------+------+------+------+------+------|
|
||||||
|
| Shft | Z | X | C | V | B | Gui ||Enter | N | M | , | . | / | Shft |
|
||||||
|
|------+------+------+------+------+------| || |------+------+------+------+------+------|
|
||||||
|
| Ctrl | Alt | Left | Rght | LOWER| BkSp |------'`------| Spc | RAISE| Up | Down | Gui | Ctrl |
|
||||||
|
`-----------------------------------------' `-----------------------------------------'
|
||||||
|
|
||||||
|
### Keymap 2: Colemak layer
|
||||||
|
|
||||||
|
,-----------------------------------------. ,-----------------------------------------.
|
||||||
|
| Grv | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| Tab | Q | W | F | P | G | | J | U | U | Y | ; | Del |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| Esc | A | R | S | T | D | | H | N | E | I | O | ' |
|
||||||
|
|------+------+------+------+------+------|------.,------|------+------+------+------+------+------|
|
||||||
|
| Shft | Z | X | C | V | B | Gui ||Enter | K | M | , | . | / | Shft |
|
||||||
|
|------+------+------+------+------+------| || |------+------+------+------+------+------|
|
||||||
|
| Ctrl | Alt | Left | Rght | LOWER| BkSp |------'`------| Spc | RAISE| Up | Down | Gui | Ctrl |
|
||||||
|
`-----------------------------------------' `-----------------------------------------'
|
||||||
|
|
||||||
|
### Keymap 3: WoW gaming layer
|
||||||
|
|
||||||
|
,-----------------------------------------. ,-----------------------------------------.
|
||||||
|
| Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | \ |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| Tab | ' | , | . | P | Y | | F | G | C | R | L | / |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| Caps | A | O | E | U | I | | D | H | T | N | S | - |
|
||||||
|
|------+------+------+------+------+------|------.,------|------+------+------+------+------+------|
|
||||||
|
| Shft | ; | Q | J | K | X | Alt ||Ctrl/ | B | M | W | V | Z | Shft |
|
||||||
|
|------+------+------+------+------+------| ||Enter |------+------+------+------+------+------|
|
||||||
|
| Ctrl | Alt | Left | Rght | LOWER| BkSp |------'`------| Spc | RAISE| Up | Down | Gui | Ctrl |
|
||||||
|
`-----------------------------------------' `-----------------------------------------'
|
||||||
|
|
||||||
|
### Keymap 4: LOWER layer
|
||||||
|
|
||||||
|
,-----------------------------------------. ,-----------------------------------------.
|
||||||
|
| F11 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F12 |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| ~ | ` | | | | | | | | | | | | |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| Caps | | Mute | Vol- | Vol+ | | | | | + | { | } | |
|
||||||
|
|------+------+------+------+------+------|------.,------|------+------+------+------+------+------|
|
||||||
|
| | | Prev | Play | Next | | || | | | PScr | ScLk | Pause| |
|
||||||
|
|------+------+------+------+------+------| || |------+------+------+------+------+------|
|
||||||
|
| | | Home | End | | Del |------'`------| Ins | | PgUp | PgDn | | |
|
||||||
|
`-----------------------------------------' `-----------------------------------------'
|
||||||
|
|
||||||
|
|
||||||
|
### Keymap 5: RAISE layer
|
||||||
|
|
||||||
|
,-----------------------------------------. ,-----------------------------------------.
|
||||||
|
| F11 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F12 |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| ~ | ` | | | | | | | | | | | \ |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| Caps | | Mute | Vol- | Vol+ | | | | | = | [ | ] | |
|
||||||
|
|------+------+------+------+------+------|------.,------|------+------+------+------+------+------|
|
||||||
|
| | | Prev | Play | Next | | || | | | PScr | ScLk | Pause| |
|
||||||
|
|------+------+------+------+------+------| || |------+------+------+------+------+------|
|
||||||
|
| | | Home | End | | Del |------'`------| Ins | | PgUp | PgDn | | |
|
||||||
|
`-----------------------------------------' `-----------------------------------------'
|
||||||
|
|
||||||
|
### Keymap 6: ADJUST layer
|
||||||
|
|
||||||
|
,-----------------------------------------. ,-----------------------------------------.
|
||||||
|
| | | | | | | | | | | | | |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| |RESET | | | | | | | | | | | |
|
||||||
|
|------+------+------+------+------+------| |------+------+------+------+------+------|
|
||||||
|
| | | | | | | | |Qwerty|Colemk|Dvorak| | WoW |
|
||||||
|
|------+------+------+------+------+------|------.,------|------+------+------+------+------+------|
|
||||||
|
| | | | | | | || | | | | | | |
|
||||||
|
|------+------+------+------+------+------| || |------+------+------+------+------+------|
|
||||||
|
| | | | | | |------'`------| | | | | | |
|
||||||
|
`-----------------------------------------' `-----------------------------------------'
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
#ifndef CONFIG_USER_H
|
||||||
|
#define CONFIG_USER_H
|
||||||
|
|
||||||
|
#include QMK_KEYBOARD_CONFIG_H
|
||||||
|
|
||||||
|
#define PREVENT_STUCK_MODIFIERS
|
||||||
|
#define SPACE_COUNT 3
|
||||||
|
|
||||||
|
#define TEMPLATE( \
|
||||||
|
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \
|
||||||
|
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, \
|
||||||
|
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
|
||||||
|
K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \
|
||||||
|
) { \
|
||||||
|
{ 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, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
|
||||||
|
{ K40, K41, K42, KC_NO, K44, K45, K46, KC_NO, K48, K49, KC_NO, K4B, K4C, KC_NO }\
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
// This space intentionally left blank
|
||||||
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
|
|||||||
|
|
||||||
make bigseries:default
|
make bigseries:default
|
||||||
|
|
||||||
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
See [build environment setup](https://docs.qmk.fm/install-build-tools) then the [make instructions](https://docs.qmk.fm/build-compile-instructions) for more information.
|
||||||
@@ -1 +1,30 @@
|
|||||||
#include "ca66.h"
|
#include "ca66.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
void bootmagic_lite(void)
|
||||||
|
{
|
||||||
|
// The lite version of TMK's bootmagic.
|
||||||
|
// 100% less potential for accidentally making the
|
||||||
|
// keyboard do stupid things.
|
||||||
|
|
||||||
|
// We need multiple scans because debouncing can't be turned off.
|
||||||
|
matrix_scan();
|
||||||
|
wait_ms(DEBOUNCING_DELAY);
|
||||||
|
matrix_scan();
|
||||||
|
|
||||||
|
// If the Esc (matrix 0,0) is held down on power up,
|
||||||
|
// reset the EEPROM valid state and jump to bootloader.
|
||||||
|
if ( matrix_get_row(0) & (1<<0) )
|
||||||
|
{
|
||||||
|
// Set the TMK/QMK EEPROM state as invalid.
|
||||||
|
eeconfig_disable();
|
||||||
|
// Jump to bootloader.
|
||||||
|
bootloader_jump();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_init_kb(void)
|
||||||
|
{
|
||||||
|
bootmagic_lite();
|
||||||
|
matrix_init_user();
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
LAYOUT(
|
||||||
|
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_BSLS, KC_GRV, KC_PGUP,
|
||||||
|
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_BSPC, KC_PGDN,
|
||||||
|
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_DEL,
|
||||||
|
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
|
||||||
|
KC_NO, KC_LALT, KC_LGUI, KC_NO, KC_SPC, KC_NO, KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
|
||||||
|
LAYOUT(
|
||||||
|
KC_PWR, 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_INS, KC_DEL, RESET,
|
||||||
|
KC_CAPS, RGB_RMOD,RGB_SMOD,RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_TOG, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_DOWN, 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),
|
||||||
|
};
|
||||||
|
|
||||||
|
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) {
|
||||||
|
if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
|
||||||
|
DDRD |= (1 << 1); PORTD &= ~(1 << 1);
|
||||||
|
} else {
|
||||||
|
DDRD &= ~(1 << 1); PORTD &= ~(1 << 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -6,9 +6,11 @@ Keyboard Maintainer: [James Underwood](https://github.com/ju0)
|
|||||||
Hardware Supported: naKey
|
Hardware Supported: naKey
|
||||||
Hardware Availability: [ckeys.org](https://ckeys.org)
|
Hardware Availability: [ckeys.org](https://ckeys.org)
|
||||||
|
|
||||||
|
To build this keyboard, follow the [build guide](https://ckeys.org/tutorials/nakey-numpad-build-guide/).
|
||||||
|
|
||||||
Make example for this keyboard (after setting up your build environment):
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
make nakey:default
|
make ckeys/nakey:default
|
||||||
|
|
||||||
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
||||||
|
|
||||||
@@ -18,7 +20,7 @@ For the full Quantum feature list, see [the parent readme](/).
|
|||||||
|
|
||||||
## Building
|
## Building
|
||||||
|
|
||||||
Download or clone the whole firmware and navigate to the root folder. Once your dev env is setup, you'll be able to type `make naKey-default` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
|
Download or clone the whole firmware and navigate to the root folder. Once your dev env is setup, you'll be able to type `make ckeys/nakey:default` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
|
||||||
|
|
||||||
(Note: replace naKey with the name of your keyboard.)
|
(Note: replace naKey with the name of your keyboard.)
|
||||||
|
|
||||||
@@ -26,7 +28,7 @@ Depending on which keymap you would like to use, you will have to compile slight
|
|||||||
|
|
||||||
### Default
|
### Default
|
||||||
|
|
||||||
To build with the default keymap, simply run `make naKey-default`.
|
To build with the default keymap, simply run `make ckeys/nakey:default`.
|
||||||
|
|
||||||
### Other Keymaps
|
### Other Keymaps
|
||||||
|
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -5,15 +5,15 @@ Obelus
|
|||||||
|
|
||||||
Keyboard Maintaintainers: [Ethan Madden](https://github.com/jetpacktuxedo), [James Underwood](https://github.com/ju0)
|
Keyboard Maintaintainers: [Ethan Madden](https://github.com/jetpacktuxedo), [James Underwood](https://github.com/ju0)
|
||||||
Hardware Supported: Obelus
|
Hardware Supported: Obelus
|
||||||
Hardware Availability: C-Keys soldering workshops, /u/MonkeyPlusPlus
|
Hardware Availability: [C-Keys soldering workshops](https://ckeys.org/workshops/), [/u/MonkeyPlusPlus](https://www.reddit.com/user/monkeyplusplus)
|
||||||
|
|
||||||
Make example for this keyboard (after setting up your build environment):
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
make obelus:default
|
make ckeys/obelus:default
|
||||||
|
|
||||||
Or to make and flash:
|
Or to make and flash:
|
||||||
|
|
||||||
make obelus:default:dfu
|
make ckeys/obelus:default:dfu
|
||||||
|
|
||||||
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) and [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) and [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
||||||
|
|
||||||
File renamed without changes.
@@ -0,0 +1,9 @@
|
|||||||
|
# Ckeys.org
|
||||||
|
|
||||||
|
[ckeys](https://ckeys.org/) is a mechanical keyboard based non profit, located in Seattle, Washington.
|
||||||
|
|
||||||
|
In addition, to hosting the [Seattle Mechanical Keyboard Meetups](https://ckeys.org/events/), they have [soldering workshops](https://ckeys.org/workshops/) featuring hardware hosted in this repository.
|
||||||
|
|
||||||
|
* Supported Hardware
|
||||||
|
* The Obelus - 4x4 Macropad
|
||||||
|
* naKey - Through hole numpad
|
||||||
@@ -2,77 +2,140 @@
|
|||||||
// It's based on the default keymap, but Dvorak!
|
// It's based on the default keymap, but Dvorak!
|
||||||
|
|
||||||
#include "66.h"
|
#include "66.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
#include "eeconfig.h"
|
||||||
|
|
||||||
// Used for SHIFT_ESC
|
extern keymap_config_t keymap_config;
|
||||||
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
|
|
||||||
|
|
||||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
// 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.
|
// 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
|
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||||
// entirely and just use numbers.
|
// entirely and just use numbers.
|
||||||
#define _BL 0
|
#define _QWERTY 0
|
||||||
#define _FL 1
|
#define _COLEMAK 1
|
||||||
#define _RS 2
|
#define _DVORAK 2
|
||||||
|
#define _FL 3
|
||||||
|
#define _CL 4
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
enum planck_keycodes {
|
||||||
/* Keymap _BL: (Base Layer) Default Layer
|
QWERTY = SAFE_RANGE,
|
||||||
* ,--------------------------------------------------------------------------. ,----.
|
COLEMAK,
|
||||||
* |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| [| ]| \| BS| |PGUP|
|
DVORAK
|
||||||
* |--------------------------------------------------------------------------| |----|
|
|
||||||
* | Tab| '| ,| .| P| Y| F| G| C| R| L| /| =| \| |PGDN|
|
|
||||||
* |--------------------------------------------------------------------------| `----'
|
|
||||||
* |_FL/Caps| A| O| E| U| I| H| D| H| T| N| S| - | Ent|
|
|
||||||
* |-----------------------------------------------------------------------------.
|
|
||||||
* |Shift| BS| ;| Q| J| K| X| B| M| W| V| Z| BS|Shift| UP|
|
|
||||||
* |------------------------------------------------------------------------|----|----.
|
|
||||||
* | Ctrl| Gui| Alt| MHen| Space| Space| Hen| Alt| Ctrl| _FL|LEFT|DOWN|RGHT|
|
|
||||||
* `----------------------------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
[_BL] = LAYOUT(
|
|
||||||
KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_GRV, KC_BSPC, KC_PGUP, \
|
|
||||||
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_PGDN, \
|
|
||||||
LT(_FL, KC_CAPS), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_NUHS, KC_ENT, \
|
|
||||||
KC_LSFT, KC_RO, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_SLSH, KC_RSFT, KC_UP, \
|
|
||||||
KC_LCTL, KC_LALT, KC_LGUI, KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RGUI, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
|
|
||||||
|
|
||||||
/* Keymap _FL: Function Layer
|
|
||||||
* ,--------------------------------------------------------------------------. ,----.
|
|
||||||
* | `| F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12| | Del| |BLIN|
|
|
||||||
* |--------------------------------------------------------------------------| |----|
|
|
||||||
* | | | | | | | | |PScr|SLck|Paus| | | | |BLDE|
|
|
||||||
* |--------------------------------------------------------------------------| `----'
|
|
||||||
* | | | _RS| | | | | | | | | | | |
|
|
||||||
* |-----------------------------------------------------------------------------.
|
|
||||||
* | | | | | | | | | | | | | | |PGUP|
|
|
||||||
* |------------------------------------------------------------------------|----|----.
|
|
||||||
* | | | | | | | | | | _FL|HOME|PGDN| END|
|
|
||||||
* `----------------------------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
[_FL] = LAYOUT(
|
|
||||||
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_TRNS, KC_DEL, BL_STEP, \
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
|
||||||
KC_TRNS, KC_TRNS, MO(_RS), 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_PGUP, \
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), KC_HOME, KC_PGDN, KC_END),
|
|
||||||
|
|
||||||
/* Keymap _RS: Reset layer
|
|
||||||
* ,--------------------------------------------------------------------------. ,----.
|
|
||||||
* | | | | | | | | | | | | | | | RGB| |VAL+|
|
|
||||||
* |--------------------------------------------------------------------------| |----|
|
|
||||||
* | | | | |RESET| | | | | | | | | | |VAL-|
|
|
||||||
* |--------------------------------------------------------------------------| `----'
|
|
||||||
* | | | _RS| | | | | | | | | | | |
|
|
||||||
* |-----------------------------------------------------------------------------.
|
|
||||||
* | | | | | | | | | | | | | | |SAT+|
|
|
||||||
* |------------------------------------------------------------------------|----|----.
|
|
||||||
* | | | | | | | | | | _FL|HUE-|SAT-|HUE+|
|
|
||||||
* `----------------------------------------------------------------------------------'
|
|
||||||
*/
|
|
||||||
[_RS] = LAYOUT(
|
|
||||||
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_VAI, \
|
|
||||||
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, RGB_VAD, \
|
|
||||||
KC_TRNS, KC_TRNS, MO(_RS), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
|
|
||||||
MO(_FL), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), RGB_SAI, \
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_MOD, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUD, RGB_SAD, RGB_HUI),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Useful defines
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
#define XXXXXXX KC_NO
|
||||||
|
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
|
||||||
|
#define FN_CAPS LT(_FL, KC_CAPS) // Tap for Caps Lock, Hold for Function Layer
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
/* Keymap _QWERTY: Base Layer (Default Layer)
|
||||||
|
* ,-----------------------------------------------------------. ,---.
|
||||||
|
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| BS| |PgU|
|
||||||
|
* |-----------------------------------------------------------| |---|
|
||||||
|
* |HpTab| Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |PgD|
|
||||||
|
* |-----------------------------------------------------------| `---'
|
||||||
|
* |FnCaps| A| S| D| F| G| H| J| K| L| ;| '| | Ent|
|
||||||
|
* |--------------------------------------------------------------.
|
||||||
|
* |Shift| | Z| X| C| V| B| N| M| ,| .| /|Shift| Fn| Up|
|
||||||
|
* |------------------------------------------------------------------.
|
||||||
|
* |Ctrl|Gui|Alt | | Space| Space| |Alt |Gui |Ctrl|Left|Down|Rgt|
|
||||||
|
* `------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
|
||||||
|
[_QWERTY] = LAYOUT (
|
||||||
|
KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_GRV, KC_BSPC, KC_PGUP, \
|
||||||
|
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_PGDN, \
|
||||||
|
FN_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT, \
|
||||||
|
KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_SLSH, KC_RSFT, KC_UP, \
|
||||||
|
KC_LCTL, KC_LALT, KC_LGUI, XXXXXXX, KC_SPC, KC_SPC, XXXXXXX, KC_RGUI, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
|
||||||
|
/* Keymap _COLEMAK: Base Layer
|
||||||
|
* ,-----------------------------------------------------------. ,---.
|
||||||
|
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `| |PgU|
|
||||||
|
* |-----------------------------------------------------------| |---|
|
||||||
|
* |HpTab| Q| W| F| P| G| J| L| U| Y| ;| [| ]| BS| |PgD|
|
||||||
|
* |-----------------------------------------------------------| `---'
|
||||||
|
* |FnCaps| A| R| S| T| D| H| N| E| I| O| '| | Ent|
|
||||||
|
* |--------------------------------------------------------------.
|
||||||
|
* |Shift| | Z| X| C| V| B| K| M| ,| .| /|Shift| Fn| Up|
|
||||||
|
* |------------------------------------------------------------------.
|
||||||
|
* |Ctrl|Gui|Alt | | Space| Space| |Alt |Gui |Ctrl|Left|Down|Rgt|
|
||||||
|
* `------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_COLEMAK] = LAYOUT (
|
||||||
|
KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_GRV, KC_BSPC, KC_PGUP, \
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \
|
||||||
|
FN_CAPS, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, XXXXXXX, KC_ENT, \
|
||||||
|
KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_SLSH, KC_RSFT, KC_UP, \
|
||||||
|
KC_LCTL, KC_LALT, KC_LGUI, XXXXXXX, KC_SPC, KC_SPC, XXXXXXX, KC_RGUI, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
|
||||||
|
/* Keymap _DVORAK: Base Layer
|
||||||
|
* ,-----------------------------------------------------------. ,---.
|
||||||
|
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| [| ]| \| `| |PgU|
|
||||||
|
* |-----------------------------------------------------------| |---|
|
||||||
|
* |HpTab| '| ,| .| P| Y| F| G| C| R| L| /| =| BS| |PgD|
|
||||||
|
* |-----------------------------------------------------------| `---'
|
||||||
|
* |FnCaps| A| O| E| U| I| D| H| T| N| S| -| | Ent|
|
||||||
|
* |--------------------------------------------------------------.
|
||||||
|
* |Shift| | ;| Q| J| K| X| B| M| W| V| Z|Shift| Fn| Up|
|
||||||
|
* |------------------------------------------------------------------.
|
||||||
|
* |Ctrl|Gui|Alt | | Space| Space| |Alt |Gui |Ctrl|Left|Down|Rgt|
|
||||||
|
* `------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_DVORAK] = LAYOUT (
|
||||||
|
KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_GRV, KC_BSPC, KC_PGUP, \
|
||||||
|
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_PGDN, \
|
||||||
|
FN_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, XXXXXXX, KC_ENT, \
|
||||||
|
KC_LSFT, XXXXXXX, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_SLSH, KC_RSFT, KC_UP, \
|
||||||
|
KC_LCTL, KC_LALT, KC_LGUI, XXXXXXX, KC_SPC, KC_SPC, XXXXXXX, KC_RGUI, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
|
||||||
|
|
||||||
|
/* Keymap _FL: Function Layer
|
||||||
|
*/
|
||||||
|
[_FL] = LAYOUT (
|
||||||
|
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, BL_STEP, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, _______, \
|
||||||
|
_______, _______, MO(_CL), _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, _______, KC_PGUP, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END),
|
||||||
|
|
||||||
|
/* Keymap _CL: Control layer
|
||||||
|
*/
|
||||||
|
[_CL] = LAYOUT (
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \
|
||||||
|
_______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAD, \
|
||||||
|
_______, _______, MO(_CL), _______, _______, _______, _______, QWERTY, COLEMAK, DVORAK, _______, _______, _______, _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAI, \
|
||||||
|
_______, _______, _______, _______, RGB_MOD, RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI),
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void persistent_default_layer_set(uint16_t default_layer) {
|
||||||
|
eeconfig_update_default_layer(default_layer);
|
||||||
|
default_layer_set(default_layer);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
switch (keycode) {
|
||||||
|
case QWERTY:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
persistent_default_layer_set(1UL<<_QWERTY);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case COLEMAK:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
persistent_default_layer_set(1UL<<_COLEMAK);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case DVORAK:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
persistent_default_layer_set(1UL<<_DVORAK);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#include "../config.h"
|
||||||
|
|
||||||
|
#define TAPPING_TERM 600 // ms
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
losinggeneration's Contra Layout
|
||||||
|
============================
|
||||||
|
|
||||||
|
This build uses the MIT layout.
|
||||||
|
|
||||||
|
See description of the layout in the common folder
|
||||||
|
[here](../../../../users/losinggeneration/README.md)
|
||||||
|
|
||||||
|
## Features
|
||||||
|
- Adjust
|
||||||
|
- Removed AGSwap, AGNorm, & Del
|
||||||
|
- Added Caps Lock, F1-F12 in a 4x3 grid, arrow cluster,
|
||||||
|
and layer transitions to the new layers.
|
||||||
|
- Moved Reset & Audio control to the right side
|
||||||
|
|
||||||
|
## Layouts
|
||||||
|
|
||||||
|
### Adjust (Lower + Raise)
|
||||||
|
|
||||||
|
```
|
||||||
|
,-----------------------------------------------------------------------------------.
|
||||||
|
| | F1 | F2 | F3 | F4 | | RESET| Game |Numpad|Mouse | |Sleep |
|
||||||
|
|------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
| | F5 | F6 | F7 | F8 | | |Qwerty|Colmak|Workmn|Dvorak| |
|
||||||
|
|------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
| CAPS | F9 | F10 | F11 | F12 | | | | | | Up | |
|
||||||
|
|------+------+------+------+------+-------------+------+------+------+------+------|
|
||||||
|
| | | | | | | | XXX | Left | Down |Right |
|
||||||
|
`-----------------------------------------------------------------------------------'
|
||||||
|
```
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2017 Danny Nguyen <[email protected]>
|
||||||
|
Copyright 2018 Harley Laue <[email protected]>
|
||||||
|
|
||||||
|
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
|
||||||
|
long with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CONFIG_USER_H
|
||||||
|
#define CONFIG_USER_H
|
||||||
|
|
||||||
|
#include QMK_KEYBOARD_CONFIG_H
|
||||||
|
#define USE_MIT_LAYOUT
|
||||||
|
|
||||||
|
#define TAPPING_TERM 250
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
#include "losinggeneration-config.h"
|
||||||
|
#include "losinggeneration-keymap.h"
|
||||||
|
|
||||||
|
extern keymap_config_t keymap_config;
|
||||||
|
|
||||||
|
#define MT_CAPS LSFT_T(KC_CAPS)
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
[_QWERTY] = CATMAP( QWERTY_LAYER ),
|
||||||
|
[_COLEMAK] = CATMAP( COLEMAK_LAYER ),
|
||||||
|
[_WORKMAN] = CATMAP( WORKMAN_LAYER ),
|
||||||
|
[_DVORAK] = CATMAP( DVORAK_LAYER ),
|
||||||
|
[_GAME] = CATMAP( GAME_LAYER ),
|
||||||
|
[_NUMPAD] = CATMAP( NUMPAD_LAYER ),
|
||||||
|
[_MOUSE] = CATMAP( MOUSE_LAYER ),
|
||||||
|
[_LOWER] = CATMAP( LOWER_LAYER ),
|
||||||
|
[_RAISE] = CATMAP( RAISE_LAYER ),
|
||||||
|
|
||||||
|
/* Adjust (Lower + Raise)
|
||||||
|
* ,-----------------------------------------------------------------------------------.
|
||||||
|
* | | F1 | F2 | F3 | F4 | | RESET| Game |Numpad|Mouse | |Sleep |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | F5 | F6 | F7 | F8 | | |Qwerty|Colmak|Workmn|Dvorak| |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | CAPS | F9 | F10 | F11 | F12 | | | | | | Up | |
|
||||||
|
* |------+------+------+------+------+------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | XXX | Left | Down |Right |
|
||||||
|
* `-----------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_ADJUST] = CATMAP( \
|
||||||
|
_______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , _______, RESET , TO_GAME, TO_NUM , TO_MS , _______, KC_SLEP, \
|
||||||
|
_______, KC_F5 , KC_F6 , KC_F7 , KC_F8 , _______, _______, QWERTY , COLEMAK, WORKMAN, DVORAK , _______, \
|
||||||
|
MT_CAPS, KC_F9 , KC_F10, KC_F11 , KC_F12 , _______, _______, _______, _______, _______, KC_UP , _______, \
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT \
|
||||||
|
)
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
# 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
|
||||||
|
#
|
||||||
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
|
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||||
|
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||||
|
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||||
|
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||||
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
|
MIDI_ENABLE = no # MIDI controls
|
||||||
|
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
|
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
|
||||||
|
|
||||||
|
ifndef QUANTUM_DIR
|
||||||
|
include ../../../../Makefile
|
||||||
|
endif
|
||||||
@@ -43,11 +43,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
|
#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
|
||||||
#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3, B0 }
|
#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, F4, B4, D7, D6, B3, B0 }
|
||||||
#define UNUSED_PINS
|
#define UNUSED_PINS
|
||||||
|
|
||||||
/* Backlight Setup */
|
/* Backlight Setup */
|
||||||
#define BACKLIGHT_PIN F4
|
#define BACKLIGHT_PIN B5
|
||||||
#define BACKLIGHT_LEVELS 6
|
#define BACKLIGHT_LEVELS 6
|
||||||
//#define BACKLIGHT_BREATHING
|
//#define BACKLIGHT_BREATHING
|
||||||
|
|
||||||
|
|||||||
+41
-10
@@ -1,19 +1,50 @@
|
|||||||
#include "do60.h"
|
#include "do60.h"
|
||||||
|
#include "led.h"
|
||||||
|
|
||||||
|
//extern inline void do60_caps_led_on(void);
|
||||||
|
//extern inline void do60_bl_led_on(void);
|
||||||
|
|
||||||
|
//extern inline void do60_caps_led_off(void);
|
||||||
|
//extern inline void do60_bl_led_off(void);
|
||||||
|
|
||||||
|
extern inline void setdefaultrgb(void);
|
||||||
|
|
||||||
|
|
||||||
extern inline void do60_caps_led_on(void);
|
void matrix_init_kb(void) {
|
||||||
extern inline void do60_bl_led_on(void);
|
// Keyboard start-up code goes here
|
||||||
|
// Runs once when the firmware starts up
|
||||||
|
matrix_init_user();
|
||||||
|
led_init_ports();
|
||||||
|
setdefaultrgb();
|
||||||
|
};
|
||||||
|
|
||||||
extern inline void do60_caps_led_off(void);
|
void matrix_scan_kb(void) {
|
||||||
extern inline void do60_bl_led_off(void);
|
// Looping keyboard code goes here
|
||||||
|
// This runs every cycle (a lot)
|
||||||
|
matrix_scan_user();
|
||||||
|
};
|
||||||
|
|
||||||
|
void led_init_ports(void) {
|
||||||
|
// Set caps lock LED pin as output
|
||||||
|
DDRB |= (1 << 2);
|
||||||
|
// Default to off
|
||||||
|
PORTB |= (1 << 2);
|
||||||
|
}
|
||||||
|
|
||||||
void led_set_kb(uint8_t usb_led) {
|
void led_set_kb(uint8_t usb_led) {
|
||||||
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
|
//if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
|
||||||
do60_caps_led_on();
|
// do60_caps_led_on();
|
||||||
} else {
|
//} else {
|
||||||
do60_caps_led_off();
|
// do60_caps_led_off();
|
||||||
}
|
//}
|
||||||
|
|
||||||
led_set_user(usb_led);
|
//led_set_user(usb_led);
|
||||||
|
|
||||||
|
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
|
||||||
|
// Turn capslock on
|
||||||
|
PORTB &= ~(1<<2);
|
||||||
|
} else {
|
||||||
|
// Turn capslock off
|
||||||
|
PORTB |= (1<<2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -7,21 +7,22 @@
|
|||||||
/* DO60 LEDs
|
/* DO60 LEDs
|
||||||
* GPIO pads
|
* GPIO pads
|
||||||
* 0 F7 not connected
|
* 0 F7 not connected
|
||||||
* 1 F6 RGB PWM Underglow
|
* 1 F6 not connected
|
||||||
* 2 F5 Backlight LED
|
* 2 F5 RGB PWM Underglow
|
||||||
* 3 F4 not connected
|
* 3 F4 Backlight LED
|
||||||
* B2 Capslock LED
|
* B2 Capslock LED
|
||||||
* B0 not connected
|
* B0 not connected
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
inline void do60_caps_led_on(void) { DDRB |= (1<<2); PORTB &= ~(1<<2); }
|
inline void do60_caps_led_on(void) { DDRB |= (1<<2); PORTB &= ~(1<<2); }
|
||||||
inline void do60_bl_led_on(void) { DDRF |= (1<<4); PORTF &= ~(1<<4); }
|
inline void do60_bl_led_on(void) { DDRF |= (1<<4); PORTF &= ~(1<<4); }
|
||||||
|
|
||||||
inline void do60_caps_led_off(void) { DDRB &= ~(1<<2); PORTB &= ~(1<<2); }
|
inline void do60_caps_led_off(void) { DDRB &= ~(1<<2); PORTB &= ~(1<<2); }
|
||||||
inline void do60_bl_led_off(void) { DDRF &= ~(1<<4); PORTF &= ~(1<<4); }
|
inline void do60_bl_led_off(void) { DDRF &= ~(1<<4); PORTF &= ~(1<<4); }
|
||||||
|
*/
|
||||||
|
|
||||||
|
inline void setdefaultrgb(void){ rgblight_sethsv(100,100,100); }
|
||||||
|
|
||||||
/* Do60 Keymap Definition Macro */
|
/* Do60 Keymap Definition Macro */
|
||||||
#define LAYOUT_all( \
|
#define LAYOUT_all( \
|
||||||
|
|||||||
@@ -8,21 +8,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
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_GRV, KC_BSPC, \
|
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_GRV, 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_NO, 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_NO, KC_ENT, \
|
||||||
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_NO, KC_UP, KC_SLSH, \
|
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_SLSH, KC_UP, KC_SLSH, \
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_NO, KC_BSPC, KC_RGUI, F(0), KC_LEFT, KC_DOWN, KC_RIGHT),
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_NO, KC_BSPC, KC_RGUI, F(0), KC_LEFT, KC_DOWN, KC_RIGHT),
|
||||||
|
|
||||||
// 1: Function Layer
|
// 1: Function Layer
|
||||||
[1] = LAYOUT_all(
|
[1] = LAYOUT_all(
|
||||||
RESET, 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_NO, KC_NO, \
|
RESET, 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_NO, KC_NO, \
|
||||||
KC_NO, RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, KC_HOME,KC_CALC,KC_NO, KC_INS, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_DEL, \
|
KC_NO, RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, BL_TOGG,BL_ON, BL_INC, KC_INS, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_DEL, \
|
||||||
KC_NO, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SMOD, KC_END, KC_PGDN,KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGUP, KC_NO, KC_ENT, \
|
KC_NO, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SMOD, BL_STEP,BL_OFF, BL_DEC, KC_NO, KC_NO, KC_HOME, KC_PGUP, KC_NO, KC_ENT, \
|
||||||
KC_LSFT, KC_NO, KC_NO, KC_APP, BL_STEP, KC_NO, KC_NO, KC_VOLD,KC_VOLU,KC_MUTE, KC_END, KC_RSFT, KC_NO , KC_PGUP, KC_INS, \
|
KC_LSFT, KC_NO, KC_NO, KC_APP, BL_STEP, KC_NO, KC_NO, KC_VOLD,KC_VOLU,KC_MUTE, KC_END, KC_RSFT, KC_NO , KC_PGUP, KC_INS, \
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC,KC_SPC, KC_DEL, KC_RGUI, F(0), KC_HOME, KC_PGDOWN,KC_END),
|
KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC,KC_SPC, KC_DEL, KC_RGUI, F(0), KC_HOME, KC_PGDOWN,KC_END),
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Custom Actions
|
// Custom Actions
|
||||||
const uint16_t PROGMEM fn_actions[] = {
|
const uint16_t PROGMEM fn_actions[] = {
|
||||||
[0] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay
|
[0] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -44,4 +44,4 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
|||||||
// Loop
|
// Loop
|
||||||
void matrix_scan_user(void) {
|
void matrix_scan_user(void) {
|
||||||
// Empty
|
// Empty
|
||||||
};
|
};
|
||||||
@@ -8,7 +8,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
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_NO, KC_BSPC, \
|
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_NO, 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_NO, 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_NO, KC_ENT, \
|
||||||
KC_LSFT, KC_NO, 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_UP, \
|
KC_LSFT, KC_NO, 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_SLSH, \
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC,KC_SPC, KC_DEL, KC_RGUI, F(0), KC_LEFT, KC_DOWN, KC_RIGHT),
|
KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC,KC_SPC, KC_DEL, KC_RGUI, F(0), KC_LEFT, KC_DOWN, KC_RIGHT),
|
||||||
|
|
||||||
// 1: Function Layer
|
// 1: Function Layer
|
||||||
|
|||||||
@@ -91,5 +91,20 @@
|
|||||||
{ K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \
|
{ K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_60_ansi( \
|
||||||
|
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, \
|
||||||
|
K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
|
||||||
|
K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
|
||||||
|
K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \
|
||||||
|
K400, K401, K403, K406, K410, K411, K413, K414 \
|
||||||
|
) { \
|
||||||
|
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014 }, \
|
||||||
|
{ K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
|
||||||
|
{ K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
|
||||||
|
{ K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, KC_NO }, \
|
||||||
|
{ K400, K401, KC_NO, K403, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, KC_NO, K413, K414 } \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -27,6 +27,10 @@
|
|||||||
|
|
||||||
"LAYOUT_all": {
|
"LAYOUT_all": {
|
||||||
"layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":2, "w":1.25}, {"label":"Shift", "x":0, "y":3}, {"x":1, "y":3}, {"label":"Z", "x":2, "y":3}, {"label":"X", "x":3, "y":3}, {"label":"C", "x":4, "y":3}, {"label":"V", "x":5, "y":3}, {"label":"B", "x":6, "y":3}, {"label":"N", "x":7, "y":3}, {"label":"M", "x":8, "y":3}, {"label":"<", "x":9, "y":3}, {"label":">", "x":10, "y":3}, {"label":"?", "x":11, "y":3}, {"label":"Shift", "x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"x":6, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"x":10, "y":4}, {"label":"Alt", "x":11, "y":4}, {"label":"Win", "x":12, "y":4}, {"label":"Menu", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}]
|
"layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":2, "w":1.25}, {"label":"Shift", "x":0, "y":3}, {"x":1, "y":3}, {"label":"Z", "x":2, "y":3}, {"label":"X", "x":3, "y":3}, {"label":"C", "x":4, "y":3}, {"label":"V", "x":5, "y":3}, {"label":"B", "x":6, "y":3}, {"label":"N", "x":7, "y":3}, {"label":"M", "x":8, "y":3}, {"label":"<", "x":9, "y":3}, {"label":">", "x":10, "y":3}, {"label":"?", "x":11, "y":3}, {"label":"Shift", "x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"x":6, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"x":10, "y":4}, {"label":"Alt", "x":11, "y":4}, {"label":"Win", "x":12, "y":4}, {"label":"Menu", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}]
|
||||||
|
},
|
||||||
|
|
||||||
|
"LAYOUT_60_ansi": {
|
||||||
|
"layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
#ifndef CONFIG_KEYMAP_H
|
||||||
|
#define CONFIG_KEYMAP_H
|
||||||
|
|
||||||
|
#include "../../config.h"
|
||||||
|
|
||||||
|
// help for fast typist+dual function keys?
|
||||||
|
#define PERMISSIVE_HOLD
|
||||||
|
|
||||||
|
/* speed up mousekeys a bit */
|
||||||
|
#define MOUSEKEY_DELAY 50
|
||||||
|
#define MOUSEKEY_INTERVAL 20
|
||||||
|
#define MOUSEKEY_MAX_SPEED 8
|
||||||
|
#define MOUSEKEY_TIME_TO_MAX 30
|
||||||
|
#define MOUSEKEY_WHEEL_MAX_SPEED 8
|
||||||
|
#define MOUSEKEY_WHEEL_TIME_TO_MAX 40
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,92 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
#include "xtonhasvim.h"
|
||||||
|
|
||||||
|
enum layers {
|
||||||
|
_QWERTY,
|
||||||
|
_FUN,
|
||||||
|
_MOVE,
|
||||||
|
_MOUSE
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
[_QWERTY] = LAYOUT(
|
||||||
|
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_NO, 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,
|
||||||
|
LCTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(_MOVE,KC_SCLN), KC_QUOT, KC_ENT,
|
||||||
|
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO,
|
||||||
|
KC_LCTL, KC_LALT, KC_LGUI, VIM_START, TG(_MOUSE), KC_SPC, KC_RGUI, KC_RALT, X_____X, KC_RCTL, MO(_FUN)),
|
||||||
|
|
||||||
|
[_FUN] = LAYOUT(
|
||||||
|
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,
|
||||||
|
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, RESET,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______,
|
||||||
|
TO(_QWERTY), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
|
||||||
|
|
||||||
|
[_MOVE] = LAYOUT(
|
||||||
|
X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X,
|
||||||
|
X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, KC_HOME, KC_PGDN, KC_PGUP, KC_END, X_____X, X_____X, X_____X, X_____X,
|
||||||
|
X_____X, X_____X, LGUI(KC_LBRC), LGUI(LSFT(KC_LBRC)), LGUI(LSFT(KC_RBRC)), LGUI(KC_RBRC), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, X_____X, X_____X, X_____X,
|
||||||
|
_______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, _______,
|
||||||
|
TO(_QWERTY), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
|
||||||
|
|
||||||
|
|
||||||
|
[_MOUSE] = LAYOUT(
|
||||||
|
X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X,
|
||||||
|
X_____X, X_____X, X_____X, KC_MS_UP, X_____X, X_____X, KC_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_UP, KC_MS_WH_RIGHT, X_____X, X_____X, X_____X, X_____X,
|
||||||
|
X_____X, X_____X,KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, X_____X, X_____X, KC_MS_BTN1, KC_MS_BTN2, KC_MS_BTN3, X_____X, X_____X, X_____X,
|
||||||
|
_______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, _______,
|
||||||
|
TO(_QWERTY), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
|
||||||
|
|
||||||
|
[_EDIT] = LAYOUT(
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||||
|
TO(_QWERTY), _______, _______, VIM_START, _______, _______, _______, _______, _______, _______, _______),
|
||||||
|
|
||||||
|
[_CMD] = LAYOUT(
|
||||||
|
X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X,
|
||||||
|
X_____X, X_____X, VIM_W, VIM_E, X_____X, X_____X, VIM_Y, VIM_U, VIM_I, VIM_O, VIM_P, X_____X, X_____X, X_____X,
|
||||||
|
VIM_ESC, VIM_A, VIM_S, VIM_D, X_____X, VIM_G, VIM_H, VIM_J, VIM_K, VIM_L, X_____X, X_____X, X_____X,
|
||||||
|
VIM_SHIFT, X_____X, X_____X, VIM_X, VIM_C, VIM_V, VIM_B, X_____X, X_____X, VIM_COMMA, VIM_PERIOD, X_____X, VIM_SHIFT,X_____X,
|
||||||
|
TO(_QWERTY), _______, _______, TO(_QWERTY), X_____X, X_____X, _______, _______, _______, _______, _______),
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#define LED_BIT 1 << 2
|
||||||
|
#define LED_MASK ~(1 << 2)
|
||||||
|
|
||||||
|
void user_led_on(void) {
|
||||||
|
DDRB |= LED_BIT;
|
||||||
|
PORTB &= LED_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
|
void user_led_off(void) {
|
||||||
|
DDRB &= ~LED_BIT;
|
||||||
|
PORTB &= LED_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
user_led_off();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t layer_state_set_user(uint32_t state) {
|
||||||
|
static uint32_t last_state = 0;
|
||||||
|
|
||||||
|
if(last_state != state) {
|
||||||
|
switch (biton32(state)) {
|
||||||
|
case _CMD:
|
||||||
|
user_led_on();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
user_led_off();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
last_state = state;
|
||||||
|
}
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
# Xton has a DZ60 and it's Vimtastic!
|
||||||
|
|
||||||
|
Mine has a split spacebar, no arrowkeys and an opaque case. Changes from the default layout:
|
||||||
|
|
||||||
|
* Vim mode toggled by hitting left spacebar (see `users/xtonhasvim`). Reusing the capslock LED to indicate VIM is on.
|
||||||
|
* Momentary directional control by holding down `;`.
|
||||||
|
* Mousekeys toggled with middle space button.
|
||||||
|
* Escape is dual-function with control (which replaces capslock AS IT SHOULD BE).
|
||||||
|
* Bottom left key is the "halp my kb doesn't work" key that always dumps you back to QWERTY.
|
||||||
|
|
||||||
@@ -53,4 +53,6 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
|||||||
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||||
AUDIO_ENABLE = no
|
AUDIO_ENABLE = no
|
||||||
RGBLIGHT_ENABLE = yes
|
RGBLIGHT_ENABLE = yes
|
||||||
|
|
||||||
|
LAYOUTS = 60_ansi
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
{ K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, KC_NO }, \
|
{ K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, KC_NO }, \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define LAYOUT_ansi( \
|
#define LAYOUT_60_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, \
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":2, "w":1.25}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
|
"layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":2, "w":1.25}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
|
||||||
},
|
},
|
||||||
|
|
||||||
"LAYOUT_ansi": {
|
"LAYOUT_60_ansi": {
|
||||||
"layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
|
"layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#include "e6v2.h"
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
// 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.
|
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
#include "e6v2.h"
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
[0] = LAYOUT_ansi(
|
[0] = LAYOUT_60_ansi(
|
||||||
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_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_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_SPACE, KC_RALT, MO(1), KC_MENU, KC_RCTL
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_RALT, MO(1), KC_MENU, KC_RCTL
|
||||||
),
|
),
|
||||||
[1] = LAYOUT_ansi(
|
[1] = LAYOUT_60_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,
|
||||||
RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS,
|
RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS,
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
|
||||||
|
|||||||
@@ -66,3 +66,5 @@ MIDI_ENABLE = no # MIDI controls
|
|||||||
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
|
||||||
AUDIO_ENABLE = no # Audio output on port C6
|
AUDIO_ENABLE = no # Audio output on port C6
|
||||||
|
|
||||||
|
LAYOUTS = 60_ansi
|
||||||
@@ -1 +1,3 @@
|
|||||||
DEFAULT_FOLDER = eagle_viper/v2
|
DEFAULT_FOLDER = eagle_viper/v2
|
||||||
|
|
||||||
|
LAYOUTS = 60_ansi
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
#include "eagle_viper.h"
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
/* layer 0: qwerty */
|
/* layer 0: qwerty */
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
/* Copyright 2017 MechMerlin <[email protected]>
|
|
||||||
*
|
|
||||||
* 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 "eagle_viper.h"
|
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
||||||
/* layer 0: qwerty */
|
|
||||||
[0] = LAYOUT_eagle(\
|
|
||||||
KC_GESC, 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_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, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
|
||||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RALT, KC_RGUI, KC_RCTL),
|
|
||||||
|
|
||||||
[1] = LAYOUT_eagle(\
|
|
||||||
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,
|
|
||||||
RGB_TOG, RGB_MOD, RGB_VAI, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, 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_HOME, KC_END, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_PGDN, KC_TRNS,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, TG(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
|
||||||
|
|
||||||
[2] = LAYOUT_eagle(\
|
|
||||||
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_UP,
|
|
||||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT),
|
|
||||||
};
|
|
||||||
|
|
||||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
|
||||||
return MACRO_NONE;
|
|
||||||
};
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
MechMerlin's Duck Eagle V2 Layout
|
|
||||||
======================
|
|
||||||
|
|
||||||
This is the preferred 60% layout used by u/merlin36, host of the MechMerlin YouTube channel.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## Keymap Notes
|
|
||||||
- Highly influenced by the KBP V60 and WKL B.Face standard layouts
|
|
||||||
- Does not support any form of inswitch lighting as Merlin hates them.
|
|
||||||
- Arrow toggle switch is FN + Space
|
|
||||||
- Reset is FN + R
|
|
||||||
|
|
||||||
### Build
|
|
||||||
To build this keymap, simply run `make eagle_viper/v2:mechmerlin` from the qmk_firmware directory.
|
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
#include "eagle_viper.h"
|
#include QMK_KEYBOARD_H
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
/* layer 0: qwerty */
|
/* layer 0: qwerty */
|
||||||
|
|||||||
@@ -0,0 +1,201 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
// Default ECO Layout
|
||||||
|
// KLE here : http://www.keyboard-layout-editor.com/#/gists/0733eca6b4cb88ff9d7de746803f4039
|
||||||
|
|
||||||
|
#include "eco.h"
|
||||||
|
#include "action_layer.h"
|
||||||
|
#include "eeconfig.h"
|
||||||
|
|
||||||
|
extern keymap_config_t keymap_config;
|
||||||
|
|
||||||
|
// 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 _QWERTY 0
|
||||||
|
#define _COLEMAK 1
|
||||||
|
#define _DVORAK 2
|
||||||
|
#define _LOWER 3
|
||||||
|
#define _RAISE 4
|
||||||
|
#define _ADJUST 16
|
||||||
|
|
||||||
|
enum planck_keycodes {
|
||||||
|
QWERTY = SAFE_RANGE,
|
||||||
|
COLEMAK,
|
||||||
|
DVORAK,
|
||||||
|
LOWER,
|
||||||
|
RAISE,
|
||||||
|
BACKLIT
|
||||||
|
};
|
||||||
|
|
||||||
|
// Fillers to make layering more clear
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
#define XXXXXXX KC_NO
|
||||||
|
|
||||||
|
// Aliases to make reading the keymap easier
|
||||||
|
#define GUIBSPC GUI_T(KC_BSPC) // GUI when held, BSPC when tapped.
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
|
/* Qwerty
|
||||||
|
* ,-------------------------------------------------------------------------------------------------.
|
||||||
|
* | Tab | Q | W | E | R | T | | | Y | U | I | O | P | Bksp |
|
||||||
|
* |------+------+------+------+------+------+------|------+------+------+------+------+------+------|
|
||||||
|
* | Esc | A | S | D | F | G | | | H | J | K | L | ; | " |
|
||||||
|
* |------+------+------+------+------+------+------|------+------+------+------+------+------+------|
|
||||||
|
* | Shift| Z | X | C | V | B | | | N | M | , | . | / |Shift |
|
||||||
|
* |------+------+------+------+------+------+------|------+------+------+------+------+------+------|
|
||||||
|
* | Ctrl | Alt | Left |Right |Lower | Bksp | GUI |Enter |Space |Raise | Up | Down | GUI |Enter |
|
||||||
|
* `-------------------------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_QWERTY] = KEYMAP(
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, KC_NO, 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_NO, KC_NO, 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_NO, KC_NO, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||||
|
KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, KC_LGUI, KC_ENT, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Colemak
|
||||||
|
* ,-------------------------------------------------------------------------------------------------.
|
||||||
|
* | Tab | Q | W | F | P | G | | | J | L | U | Y | ; | Bksp |
|
||||||
|
* |------+------+------+------+------+------+------|------+------+------+------+------+------+------|
|
||||||
|
* | Esc | A | R | S | T | D | | | H | N | E | I | O | " |
|
||||||
|
* |------+------+------+------+------+------+------|------+------+------+------+------+------+------|
|
||||||
|
* | Shift| Z | X | C | V | B | | | N | M | , | . | / |Shift |
|
||||||
|
* |------+------+------+------+------+------+------|------+------+------+------+------+------+------|
|
||||||
|
* | Ctrl | Alt | Left |Right |Lower | Bksp | GUI |Enter |Space |Raise | Up | Down | GUI |Enter |
|
||||||
|
* `-------------------------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_COLEMAK] = KEYMAP(
|
||||||
|
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_NO, KC_NO, 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_NO, KC_NO, 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_NO, KC_NO, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||||
|
KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, KC_LGUI, KC_ENT, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Dvorak
|
||||||
|
* ,-------------------------------------------------------------------------------------------------.
|
||||||
|
* | Tab | " | , | . | P | Y | | | F | G | C | R | L | / |
|
||||||
|
* |------+------+------+------+------+------+------|------+------+------+------+------+------+------|
|
||||||
|
* | Esc | A | O | E | U | I | | | D | H | T | N | S | - |
|
||||||
|
* |------+------+------+------+------+------+------|------+------+------+------+------+------+------|
|
||||||
|
* | Shift| ; | Q | J | K | X | | | B | M | W | V | Z | Shift|
|
||||||
|
* |------+------+------+------+------+------+------|------+------+------+------+------+------+------|
|
||||||
|
* | Ctrl | Alt | Left |Right |Lower | Bksp | GUI |Enter |Space |Raise | Up | Down | GUI |Enter |
|
||||||
|
* `-------------------------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_DVORAK] = KEYMAP(
|
||||||
|
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_NO, KC_NO, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
|
||||||
|
KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_NO, KC_NO, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
|
||||||
|
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_NO, KC_NO, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
|
||||||
|
KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, KC_LGUI, KC_ENT, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Lower
|
||||||
|
* ,-------------------------------------------------------------------------------------------------.
|
||||||
|
* | ~ | ! | @ | # | $ | % | | | ^ | & | * | ( | ) | |
|
||||||
|
* |------+------+------+------+------+------+------|------+------+------+------+------+------+------|
|
||||||
|
* | Caps | | Mute | Vol- | Vol+ | | | | F6 | F7 | F8 | F9 | F10 | F11 |
|
||||||
|
* |------+------+------+------+------+------+------|------+------+------+------+------+------+------|
|
||||||
|
* | | | Prev | Play | Next | | | | | | | | | |
|
||||||
|
* |------+------+------+------+------+------+------|------+------+------+------+------+------+------|
|
||||||
|
* | Brite| | Home | End | | Del | | | | | | | | |
|
||||||
|
* `-------------------------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_LOWER] = KEYMAP(
|
||||||
|
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_NO, KC_NO, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
|
||||||
|
KC_CAPS, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_NO, KC_NO, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
|
||||||
|
_______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, KC_NO, KC_NO, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, KC_HOME, KC_END, _______, KC_DEL, _______, _______, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______
|
||||||
|
),
|
||||||
|
|
||||||
|
/* Raise
|
||||||
|
* ,-------------------------------------------------------------------------------------------------.
|
||||||
|
* | | 1 | 2 | 3 | 4 | 5 | | | 6 | 7 | 8 | 9 | 0 | - |
|
||||||
|
* |------+------+------+------+------+------+------|------+------+------+------+------+------+------|
|
||||||
|
* | | F1 | F2 | F3 | F4 | F5 | | | F6 | F7 | F8 | F9 | F10 | F11 |
|
||||||
|
* |------+------+------+------+------+------+------|------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | | | | | | | |
|
||||||
|
* |------+------+------+------+------+------+------|------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | | | | | | | |
|
||||||
|
* `-------------------------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_RAISE] = KEYMAP(
|
||||||
|
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_NO, KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
|
||||||
|
KC_CAPS, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_NO, KC_NO, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||||
|
_______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, KC_NO, KC_NO, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, KC_HOME, KC_END, _______, KC_DEL, _______, _______, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______
|
||||||
|
),
|
||||||
|
|
||||||
|
|
||||||
|
/* Adjust
|
||||||
|
* ,-------------------------------------------------------------------------------------------------.
|
||||||
|
* | F11 | F1 | F2 | F3 | F4 | F5 | | | F6 | F7 | F8 | F9 | F10 | F12 |
|
||||||
|
* |------+------+------+------+------+------+------|------+------+------+------+------+------+------|
|
||||||
|
* | | Reset| | | | | | | |Qwerty|Colemk|Dvorak| | |
|
||||||
|
* |------+------+------+------+------+------+------|------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | | | | | | | |
|
||||||
|
* |------+------+------+------+------+------+------|------+------+------+------+------+------+------|
|
||||||
|
* | | | | | | | | | | | | | | |
|
||||||
|
* `-------------------------------------------------------------------------------------------------'
|
||||||
|
*/
|
||||||
|
[_ADJUST] = KEYMAP(
|
||||||
|
KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_NO, KC_NO, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12 ,
|
||||||
|
_______, RESET, _______, _______, _______, _______, KC_NO, KC_NO, _______, QWERTY, COLEMAK, DVORAK, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, KC_NO, KC_NO, _______, _______, _______, _______, _______, _______,
|
||||||
|
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||||
|
),
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
void persistent_default_layer_set(uint16_t default_layer) {
|
||||||
|
eeconfig_update_default_layer(default_layer);
|
||||||
|
default_layer_set(default_layer);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
switch (keycode) {
|
||||||
|
case QWERTY:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
persistent_default_layer_set(1UL<<_QWERTY);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case COLEMAK:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
persistent_default_layer_set(1UL<<_COLEMAK);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case DVORAK:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
persistent_default_layer_set(1UL<<_DVORAK);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case LOWER:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
layer_on(_LOWER);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
} else {
|
||||||
|
layer_off(_LOWER);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case RAISE:
|
||||||
|
if (record->event.pressed) {
|
||||||
|
layer_on(_RAISE);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
} else {
|
||||||
|
layer_off(_RAISE);
|
||||||
|
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# ECO Default Layout by u/That-Canadian
|
||||||
|
|
||||||
|
KLE here : http://www.keyboard-layout-editor.com/#/gists/0733eca6b4cb88ff9d7de746803f4039
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
|
||||||
|
|
||||||
|
# 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 = yes # Mouse keys(+4700)
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||||
|
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||||
|
COMMAND_ENABLE = no # 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
|
||||||
@@ -34,8 +34,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
// #define MASTER_RIGHT
|
// #define MASTER_RIGHT
|
||||||
// #define EE_HANDS
|
// #define EE_HANDS
|
||||||
|
|
||||||
#define TAPPING_TERM 120
|
/* Use RGB Underglow */
|
||||||
#define TAPPING_TOGGLE 3
|
|
||||||
|
|
||||||
#undef RGBLED_NUM
|
#undef RGBLED_NUM
|
||||||
#define RGBLIGHT_ANIMATIONS
|
#define RGBLIGHT_ANIMATIONS
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ extern keymap_config_t keymap_config;
|
|||||||
#define _ADJUST 4
|
#define _ADJUST 4
|
||||||
|
|
||||||
enum custom_keycodes {
|
enum custom_keycodes {
|
||||||
QWERTY = SAFE_RANGE, // デフォルトレイヤー用
|
QWERTY = SAFE_RANGE, // QWERTYレイヤーへ
|
||||||
MCR1, // マクロ1
|
MCR1, // マクロ1
|
||||||
MCR2, // マクロ2
|
MCR2, // マクロ2
|
||||||
MCR3, // マクロ3
|
MCR3, // マクロ3
|
||||||
@@ -35,14 +35,17 @@ enum custom_keycodes {
|
|||||||
#define KC_RASE LT(_RAISE, KC_HENK) // タップで変換 ホールドでRaise
|
#define KC_RASE LT(_RAISE, KC_HENK) // タップで変換 ホールドでRaise
|
||||||
#define KC_LSLB MT(MOD_LSFT, JP_LBRC) // タップで[ ホールドで左Shift
|
#define KC_LSLB MT(MOD_LSFT, JP_LBRC) // タップで[ ホールドで左Shift
|
||||||
#define KC_RSRB MT(MOD_RSFT, JP_RBRC) // タップで] ホールドで右Shift
|
#define KC_RSRB MT(MOD_RSFT, JP_RBRC) // タップで] ホールドで右Shift
|
||||||
#define KC_ALTB MT(MOD_LALT, KC_TAB) // タップでTAB ホールドで左ALT
|
#define KC_ALTB MT(MOD_LALT, KC_TAB) // タップでTAB ホールドで左Alt
|
||||||
#define KC_ESCA LT(_ADJUST,KC_ESC) // タップでESC ホールドでADJUSTレイヤーon
|
|
||||||
#define CTL_ZH CTL_T(KC_ZKHK) // タップで半角/全角 ホールドで左Control (Windows)
|
#define CTL_ZH CTL_T(KC_ZKHK) // タップで半角/全角 ホールドで左Control (Windows)
|
||||||
|
#define WN_CAPS S(KC_CAPS) // Caps Lock (Windows)
|
||||||
#define KC_ALPS LALT(KC_PSCR) // Alt + PrintScreen
|
#define KC_ALPS LALT(KC_PSCR) // Alt + PrintScreen
|
||||||
|
#define LOWER MO(_LOWER)
|
||||||
|
#define RAISE MO(_RAISE)
|
||||||
|
#define GAME DF(_GAME)
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
/* QWERTY
|
/* QWERTY // WindowsでJIS配列時のデフォルトキーマップ
|
||||||
* ,-------------------------------------------------------. ,-------------------------------------------------------.
|
* ,-------------------------------------------------------. ,-------------------------------------------------------.
|
||||||
* |Tab/Alt| Q | W | E | R | T | - | | ~ | Y | U | I | O | P | BSPC |
|
* |Tab/Alt| Q | W | E | R | T | - | | ~ | Y | U | I | O | P | BSPC |
|
||||||
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
@@ -50,97 +53,123 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||||||
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
* | [/Sft | Z | X | C | V | B | F2 | | Home | N | M | , | . | / | ]/Sft |
|
* | [/Sft | Z | X | C | V | B | F2 | | Home | N | M | , | . | / | ]/Sft |
|
||||||
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
* | TT | GUI | \ | Esc/ | LOWER | Enter | Del | | End | Space | RAISE | Left | Down | Up | Right |
|
* |WN CAPS| GUI | \ | Esc |無変換 | Enter | Del | | End | Space | 変換 | Left | Down | Up | Right |
|
||||||
* |(_GAME)| | |_ADJUST| 無変換| | | | | | 変換 | | | | |
|
* | | | | | LOWER | | | | | | RAISE | | | | |
|
||||||
* `-------------------------------------------------------' `-------------------------------------------------------'
|
* `-------------------------------------------------------' `-------------------------------------------------------'
|
||||||
*/
|
*/
|
||||||
|
|
||||||
[_QWERTY] = KEYMAP( \
|
[_QWERTY] = KEYMAP( \
|
||||||
KC_ALTB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MINS, JP_TILD, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
|
KC_ALTB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MINS, JP_TILD, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
|
||||||
CTL_ZH, KC_A, KC_S, KC_D, KC_F, KC_G, JP_LPRN, JP_RPRN, KC_H, KC_J, KC_K, KC_L, WN_SCLN, JP_QUOT, \
|
CTL_ZH, KC_A, KC_S, KC_D, KC_F, KC_G, JP_LPRN, JP_RPRN, KC_H, KC_J, KC_K, KC_L, WN_SCLN, JP_QUOT, \
|
||||||
KC_LSLB, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_F2, KC_HOME, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSRB, \
|
KC_LSLB, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_F2, KC_HOME, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSRB, \
|
||||||
TT(_GAME),KC_LGUI, JP_YEN, KC_ESCA, KC_LOWR, KC_ENT, KC_DEL, KC_END, KC_SPC, KC_RASE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
WN_CAPS, KC_LGUI, JP_YEN, KC_ESC, KC_LOWR, KC_ENT, KC_DEL, KC_END, KC_SPC, KC_RASE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||||
),
|
),
|
||||||
|
|
||||||
/* LOWER
|
/* LOWER // 数字入力用レイヤー
|
||||||
* ,-------------------------------------------------------. ,-------------------------------------------------------.
|
* ,-------------------------------------------------------. ,-------------------------------------------------------.
|
||||||
* |Tab/Alt| 1 | 2 | 3 | 4 | 5 | 6 | | Esc | 7 | 8 | 9 | O | = | BSPC |
|
* | | 1 | 2 | 3 | 4 | 5 | 6 | | Esc | 7 | 8 | 9 | . | = | |
|
||||||
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
* |ZH/Ctrl| F1 | F2 | F3 | F4 | F5 | F6 | | F2 | 4 | 5 | 6 | - | / | Enter |
|
* | | F1 | F2 | F3 | F4 | F5 | F6 | | F2 | 4 | 5 | 6 | - | / | Enter |
|
||||||
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
* | Shift | F7 | F8 | F9 | F10 | F11 | F12 | | Home | 1 | 2 | 3 | + | * | Shift |
|
* | Shift | F7 | F8 | F9 | F10 | F11 | F12 | | | 1 | 2 | 3 | + | * | Shift |
|
||||||
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
* |XXXXXXX| GUI |XXXXXXX| Esc | | Enter | Del | | End | 0 | . | Left | Down | Up | Right |
|
* | | |XXXXXXX| | | | | | | 0 | | | | | |
|
||||||
* `-------------------------------------------------------' `-------------------------------------------------------'
|
* `-------------------------------------------------------' `-------------------------------------------------------'
|
||||||
*/
|
*/
|
||||||
|
|
||||||
[_LOWER] = KEYMAP( \
|
[_LOWER] = KEYMAP( \
|
||||||
_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_ESC, KC_7, KC_8, KC_9, KC_0, JP_EQL, _______, \
|
_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_ESC, KC_7, KC_8, KC_9, KC_PDOT, JP_EQL, _______, \
|
||||||
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F2, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_PSLS, KC_ENT, \
|
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F2, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_PSLS, KC_ENT, \
|
||||||
KC_LSFT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PAST, KC_RSFT, \
|
KC_LSFT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PAST, KC_RSFT, \
|
||||||
_______, _______, XXXXXXX, KC_ESC, _______, _______, _______, _______, KC_P0, KC_PDOT, _______, _______, _______, _______ \
|
_______, _______, XXXXXXX, _______, _______, _______, _______, _______, KC_0, _______, _______, _______, _______, _______ \
|
||||||
),
|
),
|
||||||
|
|
||||||
/* RAISE
|
/* RAISE // 記号入力用レイヤー
|
||||||
* ,-------------------------------------------------------. ,-------------------------------------------------------.
|
* ,-------------------------------------------------------. ,-------------------------------------------------------.
|
||||||
* |Tab/Alt| ! | @ | # | $ | % | _ | | ` | ^ | & | Ins | \ |PrntScr| BSPC |
|
* | | ! | @ | # | $ | % | _ | | ` | ^ | & | Ins | \ |PrntScr| |
|
||||||
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
* |ZH/Ctrl|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| { | | } | Left | Down | Up | Right | ; | " |
|
* | |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| { | | } | Left | Down | Up | Right | ; | " |
|
||||||
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
* | Shift |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| |PageUp |XXXXXXX|XXXXXXX| < | > | ? | Shift |
|
* | Shift |M-PLAY |M-MUTE |VOL_DWN|VOL_UP |PREV_TR|NEXT_TR| |PageUp |XXXXXXX|XXXXXXX| < | > | ? | Shift |
|
||||||
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
* |XXXXXXX| GUI | | | Esc |XXXXXXX| Enter | Del | |PageDwn| Space | | Left | Down | Up | Right |
|
* | | | | | | | | | |PageDwn| | | | | | |
|
||||||
* `-------------------------------------------------------' `-------------------------------------------------------'
|
* `-------------------------------------------------------' `-------------------------------------------------------'
|
||||||
*/
|
*/
|
||||||
|
|
||||||
[_RAISE] = KEYMAP( \
|
[_RAISE] = KEYMAP( \
|
||||||
_______, KC_EXLM, JP_AT, KC_HASH, KC_DLR, KC_PERC, JP_UNDS, JP_GRV, JP_CIRC, JP_AMPR, KC_INS, JP_YEN, KC_ALPS, _______, \
|
_______, KC_EXLM, JP_AT, KC_HASH, KC_DLR, KC_PERC, JP_UNDS, JP_GRV, JP_CIRC, JP_AMPR, KC_INS, JP_YEN, KC_ALPS, _______, \
|
||||||
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, JP_LCBR, JP_RCBR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_SCLN, JP_DQT, \
|
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, JP_LCBR, JP_RCBR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_SCLN, JP_DQT, \
|
||||||
KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGUP, XXXXXXX, XXXXXXX, KC_LT, KC_GT, KC_QUES, KC_RSFT, \
|
KC_LSFT, KC_MPLY, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPRV, KC_MNXT, KC_PGUP, XXXXXXX, XXXXXXX, KC_LT, KC_GT, KC_QUES, KC_RSFT, \
|
||||||
_______, _______, JP_PIPE, KC_ESC, XXXXXXX, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______ \
|
_______, _______, JP_PIPE, _______, _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______ \
|
||||||
),
|
),
|
||||||
|
|
||||||
/* GAME
|
/* GAME // 左手はゲーム用レイヤー、右手はNumPad
|
||||||
* ,-------------------------------------------------------. ,-------------------------------------------------------.
|
* ,-------------------------------------------------------. ,-------------------------------------------------------.
|
||||||
* | Esc | Q | W | E | R | T |PrntScr| | | | | | | | |
|
* | Tab | Q | W | E | R | T |PrntScr| | Esc | 7 | 8 | 9 | . | = | BSPC |
|
||||||
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
* | Ctrl | A | S | D | F | G | F5 | | | | | | | | |
|
* | Ctrl | A | S | D | F | G | F1 | | F2 | 4 | 5 | 6 | - | / | Enter |
|
||||||
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
* | Shift | Z | X | C | V | B | F2 | |PageUp | | | | | | |
|
* | Shift | Z | X | C | V | B | F2 | | Home | 1 | 2 | 3 | + | * | Shift |
|
||||||
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
* | | GUI | Tab | Alt | Space | Enter | Del | |PageDwn| Space |XXXXXXX| Left | Down | Up | Right |
|
* | Del | GUI | Alt | Esc | LOWER | Space | Enter | | End | 0 | RAISE | Left | Down | Up | Right |
|
||||||
* `-------------------------------------------------------' `-------------------------------------------------------'
|
* `-------------------------------------------------------' `-------------------------------------------------------'
|
||||||
*/
|
*/
|
||||||
[_GAME] = KEYMAP( \
|
[_GAME] = KEYMAP( \
|
||||||
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_ALPS, _______, _______, _______, _______, _______, _______, _______, \
|
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_ALPS, KC_ESC, KC_P7, KC_P8, KC_P9, KC_PDOT, JP_EQL, KC_BSPC, \
|
||||||
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, JP_LBRC, _______, _______, _______, _______, _______, _______, _______, \
|
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_F1, KC_F2, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_PSLS, KC_ENT, \
|
||||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_F2, KC_PGUP, _______, _______, _______, _______, _______, _______, \
|
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_F2, KC_HOME, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PAST, KC_RSFT, \
|
||||||
_______, KC_LGUI, KC_TAB, KC_LALT, KC_SPC, KC_ENT, KC_DEL, KC_PGDN, _______, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
KC_DEL, KC_LGUI, KC_LALT, KC_ESC, LOWER, KC_SPC, KC_ENT, KC_PGDN, KC_P0, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||||
),
|
),
|
||||||
|
|
||||||
/* ADJUST
|
/* ADJUST // 設定用レイヤー (LOWER+RAISE)
|
||||||
* ,-------------------------------------------------------. ,-------------------------------------------------------.
|
* ,-------------------------------------------------------. ,-------------------------------------------------------.
|
||||||
* |RGB_TOG| MCR1 | MCR2 | MCR3 |XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|PLAY_M1|PLAY_M2|REC_M1 |REC_M2 |STP_REC| BSPC |
|
* |RGB_TOG| MCR1 | MCR2 | MCR3 |XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|PLAY_M1|PLAY_M2|REC_M1 |REC_M2 |STP_REC| BSPC |
|
||||||
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
* | RESET |RGB_MOD|_PLAIN |_BREATH|RGB_HuI|RGB_SaI|RGB_VaI| |XXXXXXX|QWERTY |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|
|
* | RESET | | | | | | | |XXXXXXX|XXXXXXX|QWERTY | GAME |XXXXXXX|XXXXXXX|XXXXXXX|
|
||||||
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
* | Shift |_RAINBW|_SNAKE |_GRADIE|RGB_HuD|RGB_SaD|RGB_VaD| |XXXXXXX| M-PLAY|M-MUTE |VOL_DWN|VOL_UP |PREV_TR|NEXT_TR|
|
* | Shift | | | | | | | |XXXXXXX| M-PLAY|M-MUTE |VOL_DWN|VOL_UP |PREV_TR|NEXT_TR|
|
||||||
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
* |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
* | DEBUG |XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|XXXXXXX| Left | Down | Up | Right |
|
* | DEBUG |XXXXXXX|XXXXXXX| | |XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX| | Left | Down | Up | Right |
|
||||||
* `-------------------------------------------------------' `-------------------------------------------------------'
|
* `-------------------------------------------------------' `-------------------------------------------------------'
|
||||||
*/
|
*/
|
||||||
|
|
||||||
[_ADJUST] = KEYMAP( \
|
[_ADJUST] = KEYMAP( \
|
||||||
RGB_TOG, MCR1, MCR2, MCR3, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, DYN_REC_START1, DYN_REC_START2, DYN_REC_STOP, KC_BSPC, \
|
RGB_TOG, MCR1, MCR2, MCR3, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, DYN_REC_START1, DYN_REC_START2, DYN_REC_STOP, KC_BSPC, \
|
||||||
RESET, RGB_MOD, RGB_M_P, RGB_M_B, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, QWERTY, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
|
RESET, RGB_MOD, RGB_M_P, RGB_M_B, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, QWERTY, GAME, XXXXXXX, XXXXXXX, XXXXXXX, \
|
||||||
KC_LSFT, RGB_M_R, RGB_M_SN,RGB_M_G, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, KC_MPLY, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPRV, KC_MNXT, \
|
KC_LSFT, RGB_M_R, RGB_M_SN,RGB_M_G, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, KC_MPLY, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPRV, KC_MNXT, \
|
||||||
DEBUG, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
DEBUG, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
|
||||||
),
|
),
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void persistent_default_layer_set(uint16_t default_layer) {
|
// RGB Underglow使用時のレイヤー毎のカラー切り替え
|
||||||
eeconfig_update_default_layer(default_layer);
|
uint32_t layer_state_set_keymap (uint32_t state) {
|
||||||
default_layer_set(default_layer);
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
rgblight_enable();
|
||||||
|
rgblight_setrgb_teal();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t layer_state_set_user(uint32_t state) {
|
||||||
|
state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
switch (biton32(state)) {
|
||||||
|
case _RAISE:
|
||||||
|
rgblight_setrgb_chartreuse(); // RAISE:シャルトリューズ
|
||||||
|
break;
|
||||||
|
case _LOWER:
|
||||||
|
rgblight_setrgb_pink(); // LOWER:ピンク
|
||||||
|
break;
|
||||||
|
case _ADJUST:
|
||||||
|
rgblight_setrgb_red(); // ADJUST:レッド
|
||||||
|
break;
|
||||||
|
default: // for any other layers, or the default layer
|
||||||
|
rgblight_setrgb_teal(); // 他:ティール
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
@@ -151,7 +180,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|||||||
switch (keycode) {
|
switch (keycode) {
|
||||||
case QWERTY:
|
case QWERTY:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
persistent_default_layer_set(1UL<<_QWERTY);
|
set_single_persistent_default_layer(_QWERTY);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
@@ -171,19 +200,19 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|||||||
break;
|
break;
|
||||||
case MCR1:
|
case MCR1:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
SEND_STRING("hogehoge"); // 送信文字列
|
SEND_STRING("hoge"); // 送信文字列
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
case MCR2:
|
case MCR2:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
SEND_STRING("hogehogehoge"SS_TAP(X_ENTER)); // 送信文字列
|
SEND_STRING("hogehoge"SS_TAP(X_ENTER)); // 送信文字列
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
case MCR3:
|
case MCR3:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
SEND_STRING("hoge@hoge.co.jp"); // 送信文字列
|
SEND_STRING("hoge@hoge.hoge"); // 送信文字列
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -6,62 +6,62 @@ Designed for Japanese Keyboardists using JIS on the Ergo42.
|
|||||||
|
|
||||||
````
|
````
|
||||||
QWERTY
|
QWERTY
|
||||||
,-------------------------------------------------------. ,-------------------------------------------------------.
|
,-------------------------------------------------------. ,-------------------------------------------------------.
|
||||||
|Tab/Alt| Q | W | E | R | T | - | | ~ | Y | U | I | O | P | BSPC |
|
|Tab/Alt| Q | W | E | R | T | - | | ~ | Y | U | I | O | P | BSPC |
|
||||||
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
|ZH/Ctrl| A | S | D | F | G | ( | | ) | H | J | K | L | : | ' |
|
|ZH/Ctrl| A | S | D | F | G | ( | | ) | H | J | K | L | : | ' |
|
||||||
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
| [/Sft | Z | X | C | V | B | F2 | | Home | N | M | , | . | / | ]/Sft |
|
| [/Sft | Z | X | C | V | B | F2 | | Home | N | M | , | . | / | ]/Sft |
|
||||||
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
| TT | GUI | \ | Esc/ | LOWER | Enter | Del | | End | Space | RAISE | Left | Down | Up | Right |
|
|WN CAPS| GUI | \ | Esc | MHEN/ | Enter | Del | | End | Space | HENK/ | Left | Down | Up | Right |
|
||||||
|(_GAME)| | |_ADJUST| –³•ÏŠ·| | | | | | •ÏŠ· | | | | |
|
| | | | | LOWER | | | | | | RAISE | | | | |
|
||||||
`-------------------------------------------------------' `-------------------------------------------------------'
|
`-------------------------------------------------------' `-------------------------------------------------------'
|
||||||
|
|
||||||
LOWER
|
LOWER
|
||||||
,-------------------------------------------------------. ,-------------------------------------------------------.
|
,-------------------------------------------------------. ,-------------------------------------------------------.
|
||||||
|Tab/Alt| 1 | 2 | 3 | 4 | 5 | 6 | | Esc | 7 | 8 | 9 | O | = | BSPC |
|
| | 1 | 2 | 3 | 4 | 5 | 6 | | Esc | 7 | 8 | 9 | . | = | |
|
||||||
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
| Ctrl | F1 | F2 | F3 | F4 | F5 | F6 | | F2 | 4 | 5 | 6 | - | / | Enter |
|
| | F1 | F2 | F3 | F4 | F5 | F6 | | F2 | 4 | 5 | 6 | - | / | Enter |
|
||||||
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
| Shift | F7 | F8 | F9 | F10 | F11 | F12 | | Home | 1 | 2 | 3 | + | * | Shift |
|
| Shift | F7 | F8 | F9 | F10 | F11 | F12 | | | 1 | 2 | 3 | + | * | Shift |
|
||||||
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
|XXXXXXX| GUI |XXXXXXX| Esc | | Enter | Del | | End | 0 | . | Left | Down | Up | Right |
|
| | |XXXXXXX| | | | | | | 0 | | | | | |
|
||||||
`-------------------------------------------------------' `-------------------------------------------------------'
|
`-------------------------------------------------------' `-------------------------------------------------------'
|
||||||
|
|
||||||
RAISE
|
RAISE
|
||||||
,-------------------------------------------------------. ,-------------------------------------------------------.
|
,-------------------------------------------------------. ,-------------------------------------------------------.
|
||||||
|Tab/Alt| ! | @ | # | $ | % | _ | | ` | ^ | & | Ins | \ |PrntScr| BSPC |
|
| | ! | @ | # | $ | % | _ | | ` | ^ | & | Ins | \ |PrntScr| |
|
||||||
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
| Ctrl |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| { | | } | Left | Down | Up | Right | ; | " |
|
| |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| { | | } | Left | Down | Up | Right | ; | " |
|
||||||
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
| Shift |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| |PageUp |XXXXXXX|XXXXXXX| < | > | ? | Shift |
|
| | M-PLAY|M-MUTE |VOL_DWN|VOL_UP |PREV_TR|NEXT_TR| |PageUp |XXXXXXX|XXXXXXX| < | > | ? | Shift |
|
||||||
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
|XXXXXXX| GUI | | | Esc |XXXXXXX| Enter | Del | |PageDwn| Space | | Left | Down | Up | Right |
|
| | | | | | | | | |PageDwn| | | | | | |
|
||||||
`-------------------------------------------------------' `-------------------------------------------------------'
|
`-------------------------------------------------------' `-------------------------------------------------------'
|
||||||
|
|
||||||
GAME
|
|
||||||
,-------------------------------------------------------. ,-------------------------------------------------------.
|
|
||||||
| Esc | Q | W | E | R | T |PrntScr| | | | | | | | |
|
|
||||||
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
|
||||||
| Ctrl | A | S | D | F | G | F5 | | | | | | | | |
|
|
||||||
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
|
||||||
| Shift | Z | X | C | V | B | F2 | |PageUp | | | | | | |
|
|
||||||
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
|
||||||
| | GUI | Tab | Alt | Space | Enter | Del | |PageDwn| Space |XXXXXXX| Left | Down | Up | Right |
|
|
||||||
`-------------------------------------------------------' `-------------------------------------------------------'
|
|
||||||
|
|
||||||
ADJUST
|
ADJUST
|
||||||
,-------------------------------------------------------. ,-------------------------------------------------------.
|
,-------------------------------------------------------. ,-------------------------------------------------------.
|
||||||
|RGB_TOG| MCR1 | MCR2 | MCR3 |XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|PLAY_M1|PLAY_M2|REC_M1 |REC_M2 |STP_REC| BSPC |
|
|RGB_TOG| MCR1 | MCR2 | MCR3 |XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|PLAY_M1|PLAY_M2|REC_M1 |REC_M2 |STP_REC| BSPC |
|
||||||
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
| RESET |RGB_MOD|_PLAIN |_BREATH|RGB_HuI|RGB_SaI|RGB_VaI| |XXXXXXX|QWERTY |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|
|
| RESET | | | | | | | |XXXXXXX|XXXXXXX|QWERTY | GAME |XXXXXXX|XXXXXXX|XXXXXXX|
|
||||||
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
| Shift |_RAINBW|_SNAKE |_GRADIE|RGB_HuD|RGB_SaD|RGB_VaD| |XXXXXXX| M-PLAY|M-MUTE |VOL_DWN|VOL_UP |PREV_TR|NEXT_TR|
|
| Shift | | | | | | | |XXXXXXX| M-PLAY|M-MUTE |VOL_DWN|VOL_UP |PREV_TR|NEXT_TR|
|
||||||
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
| DEBUG |XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|XXXXXXX| Left | Down | Up | Right |
|
| DEBUG |XXXXXXX|XXXXXXX| | |XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX| | Left | Down | Up | Right |
|
||||||
`-------------------------------------------------------' `-------------------------------------------------------'
|
`-------------------------------------------------------' `-------------------------------------------------------'
|
||||||
|
|
||||||
|
GAME
|
||||||
|
,-------------------------------------------------------. ,-------------------------------------------------------.
|
||||||
|
| Tab | Q | W | E | R | T |PrntScr| | Esc | 7 | 8 | 9 | . | = | BSPC |
|
||||||
|
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
|
| Ctrl | A | S | D | F | G | F1 | | F2 | 4 | 5 | 6 | - | / | Enter |
|
||||||
|
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
|
| Shift | Z | X | C | V | B | F2 | | Home | 1 | 2 | 3 | + | * | Shift |
|
||||||
|
|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
|
||||||
|
| Del | GUI | Alt | Esc | LOWER | Space | Enter | | End | 0 | RAISE | Left | Down | Up | Right |
|
||||||
|
`-------------------------------------------------------' `-------------------------------------------------------'
|
||||||
````
|
````
|
||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
Supports RGB Underglow and Dynamic Macros.
|
Supports RGB Underglow color sync to layer switching.
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2017 Luiz Ribeiro <[email protected]>
|
||||||
|
|
||||||
|
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 FACEW_CONFIG_H
|
||||||
|
#define FACEW_CONFIG_H
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
#define VENDOR_ID 0x20A0
|
||||||
|
#define PRODUCT_ID 0x422D
|
||||||
|
#define MANUFACTURER NotActuallyWinkeyless
|
||||||
|
#define PRODUCT facew
|
||||||
|
|
||||||
|
#define RGBLED_NUM 16
|
||||||
|
|
||||||
|
#define MATRIX_ROWS 8
|
||||||
|
#define MATRIX_COLS 11
|
||||||
|
|
||||||
|
#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4, B5, B6, B7 }
|
||||||
|
#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6}
|
||||||
|
#define UNUSED_PINS
|
||||||
|
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
#define DEBOUNCING_DELAY 5
|
||||||
|
|
||||||
|
#define NO_BACKLIGHT_CLOCK
|
||||||
|
#define BACKLIGHT_LEVELS 1
|
||||||
|
#define RGBLIGHT_ANIMATIONS
|
||||||
|
|
||||||
|
#define NO_UART 1
|
||||||
|
|
||||||
|
/* key combination for command */
|
||||||
|
#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2017 Luiz Ribeiro <[email protected]>
|
||||||
|
|
||||||
|
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 "facew.h"
|
||||||
|
#ifdef BACKLIGHT_ENABLE
|
||||||
|
#include "backlight.h"
|
||||||
|
#endif
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
#include "rgblight.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
|
#include "action_layer.h"
|
||||||
|
#include "i2c.h"
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
#ifdef RGBLIGHT_ENABLE
|
||||||
|
extern rgblight_config_t rgblight_config;
|
||||||
|
|
||||||
|
void rgblight_set(void) {
|
||||||
|
if (!rgblight_config.enable) {
|
||||||
|
for (uint8_t i = 0; i < RGBLED_NUM; i++) {
|
||||||
|
led[i].r = 0;
|
||||||
|
led[i].g = 0;
|
||||||
|
led[i].b = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
i2c_init();
|
||||||
|
i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
__attribute__ ((weak))
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void backlight_init_ports(void) {
|
||||||
|
DDRD |= (1<<0 | 1<<1 | 1<<4 | 1<<6);
|
||||||
|
PORTD &= ~(1<<0 | 1<<1 | 1<<4 | 1<<6);
|
||||||
|
}
|
||||||
|
|
||||||
|
void backlight_set(uint8_t level) {
|
||||||
|
if (level == 0) {
|
||||||
|
// Turn out the lights
|
||||||
|
PORTD &= ~(1<<0 | 1<<1 | 1<<4 | 1<<6);
|
||||||
|
} else {
|
||||||
|
// Turn on the lights
|
||||||
|
PORTD |= (1<<0 | 1<<1 | 1<<4 | 1<<6);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2017 Luiz Ribeiro <[email protected]>
|
||||||
|
|
||||||
|
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 FACEW_H
|
||||||
|
#define FACEW_H
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
#define LAYOUT_all( \
|
||||||
|
K61, K71, K72, K73, K74, K64, K65, K75, K76, K77, K78, K68, K66, K10, K60,\
|
||||||
|
K11, K01, K02, K03, K04, K14, K15, K05, K06, K07, K08, K18, K16, K20, \
|
||||||
|
K12, K21, K22, K23, K24, K34, K35, K25, K26, K27, K28, K38, K40, \
|
||||||
|
K19, K13, K41, K42, K43, K44, K54, K55, K45, K46, K47, K58, K49, K50,\
|
||||||
|
K09, K00, K39, K30, K59, K69, K57, K29\
|
||||||
|
){ \
|
||||||
|
{ KC_NO, K01, K02, K03, K04, K05, K06, K07, K08, K09, K00}, \
|
||||||
|
{ KC_NO, K11, K12, K13, K14, K15, K16, KC_NO, K18, K19, K10}, \
|
||||||
|
{ KC_NO, K21, K22, K23, K24, K25, K26, K27, K28, K29, K20}, \
|
||||||
|
{ KC_NO, KC_NO, KC_NO, KC_NO, K34, K35, KC_NO, KC_NO, K38, K39, K30}, \
|
||||||
|
{ KC_NO, K41, K42, K43, K44, K45, K46, K47, KC_NO, K49, K40}, \
|
||||||
|
{ KC_NO, KC_NO, KC_NO, KC_NO, K54, K55, KC_NO, K57, K58, K59, K50}, \
|
||||||
|
{ KC_NO, K61, KC_NO, KC_NO, K64, K65, K66, KC_NO, K68, K69, K60}, \
|
||||||
|
{ KC_NO, K71, K72, K73, K74, K75, K76, K77, K78, KC_NO, KC_NO}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_60_ansi( \
|
||||||
|
K61, K71, K72, K73, K74, K64, K65, K75, K76, K77, K78, K68, K66, K60,\
|
||||||
|
K11, K01, K02, K03, K04, K14, K15, K05, K06, K07, K08, K18, K16, K20, \
|
||||||
|
K12, K21, K22, K23, K24, K34, K35, K25, K26, K27, K28, K38, K40, \
|
||||||
|
K19, K41, K42, K43, K44, K54, K55, K45, K46, K47, K58, K49, \
|
||||||
|
K09, K00, K39, K30, K59, K69, K57, K29\
|
||||||
|
){ \
|
||||||
|
{ KC_NO, K01, K02, K03, K04, K05, K06, K07, K08, K09, K00}, \
|
||||||
|
{ KC_NO, K11, K12, KC_NO, K14, K15, K16, KC_NO, K18, K19, KC_NO}, \
|
||||||
|
{ KC_NO, K21, K22, K23, K24, K25, K26, K27, K28, K29, K20}, \
|
||||||
|
{ KC_NO, KC_NO, KC_NO, KC_NO, K34, K35, KC_NO, KC_NO, K38, K39, K30}, \
|
||||||
|
{ KC_NO, K41, K42, K43, K44, K45, K46, K47, KC_NO, K49, K40}, \
|
||||||
|
{ KC_NO, KC_NO, KC_NO, KC_NO, K54, K55, KC_NO, K57, K58, K59, KC_NO}, \
|
||||||
|
{ KC_NO, K61, KC_NO, KC_NO, K64, K65, K66, KC_NO, K68, K69, K60}, \
|
||||||
|
{ KC_NO, K71, K72, K73, K74, K75, K76, K77, K78, KC_NO, KC_NO}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,106 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2016 Luiz Ribeiro <[email protected]>
|
||||||
|
|
||||||
|
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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Please do not modify this file
|
||||||
|
|
||||||
|
#include <avr/io.h>
|
||||||
|
#include <util/twi.h>
|
||||||
|
|
||||||
|
#include "i2c.h"
|
||||||
|
|
||||||
|
void i2c_set_bitrate(uint16_t bitrate_khz) {
|
||||||
|
uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz);
|
||||||
|
if (bitrate_div >= 16) {
|
||||||
|
bitrate_div = (bitrate_div - 16) / 2;
|
||||||
|
}
|
||||||
|
TWBR = bitrate_div;
|
||||||
|
}
|
||||||
|
|
||||||
|
void i2c_init(void) {
|
||||||
|
// set pull-up resistors on I2C bus pins
|
||||||
|
PORTC |= 0b11;
|
||||||
|
|
||||||
|
i2c_set_bitrate(400);
|
||||||
|
|
||||||
|
// enable TWI (two-wire interface)
|
||||||
|
TWCR |= (1 << TWEN);
|
||||||
|
|
||||||
|
// enable TWI interrupt and slave address ACK
|
||||||
|
TWCR |= (1 << TWIE);
|
||||||
|
TWCR |= (1 << TWEA);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t i2c_start(uint8_t address) {
|
||||||
|
// reset TWI control register
|
||||||
|
TWCR = 0;
|
||||||
|
|
||||||
|
// begin transmission and wait for it to end
|
||||||
|
TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
|
||||||
|
while (!(TWCR & (1<<TWINT)));
|
||||||
|
|
||||||
|
// check if the start condition was successfully transmitted
|
||||||
|
if ((TWSR & 0xF8) != TW_START) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// transmit address and wait
|
||||||
|
TWDR = address;
|
||||||
|
TWCR = (1<<TWINT) | (1<<TWEN);
|
||||||
|
while (!(TWCR & (1<<TWINT)));
|
||||||
|
|
||||||
|
// check if the device has acknowledged the READ / WRITE mode
|
||||||
|
uint8_t twst = TW_STATUS & 0xF8;
|
||||||
|
if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void i2c_stop(void) {
|
||||||
|
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t i2c_write(uint8_t data) {
|
||||||
|
TWDR = data;
|
||||||
|
|
||||||
|
// transmit data and wait
|
||||||
|
TWCR = (1<<TWINT) | (1<<TWEN);
|
||||||
|
while (!(TWCR & (1<<TWINT)));
|
||||||
|
|
||||||
|
if ((TWSR & 0xF8) != TW_MT_DATA_ACK) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length) {
|
||||||
|
if (i2c_start(address)) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (uint16_t i = 0; i < length; i++) {
|
||||||
|
if (i2c_write(data[i])) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
i2c_stop();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2016 Luiz Ribeiro <[email protected]>
|
||||||
|
|
||||||
|
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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Please do not modify this file
|
||||||
|
|
||||||
|
#ifndef __I2C_H__
|
||||||
|
#define __I2C_H__
|
||||||
|
|
||||||
|
void i2c_init(void);
|
||||||
|
void i2c_set_bitrate(uint16_t bitrate_khz);
|
||||||
|
uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length);
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "FaceW",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "qmk",
|
||||||
|
"width": 15,
|
||||||
|
"height": 5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT_all": {
|
||||||
|
"layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
|
||||||
|
},
|
||||||
|
|
||||||
|
"LAYOUT_60_ansi": {
|
||||||
|
"layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2017 Luiz Ribeiro <[email protected]>
|
||||||
|
|
||||||
|
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 QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT_all(
|
||||||
|
KC_GESC, 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_BSLS, KC_GRV,
|
||||||
|
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_BSPC,
|
||||||
|
MO(1), 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_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL
|
||||||
|
),
|
||||||
|
[1] = LAYOUT_all(
|
||||||
|
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_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_HOME, KC_END, KC_DEL,
|
||||||
|
MO(1), 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_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_PGDN, KC_TRNS, KC_TRNS, MO(2),
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
[2] = LAYOUT_all(
|
||||||
|
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, 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,
|
||||||
|
MO(1), 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
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2017 Luiz Ribeiro <[email protected]>
|
||||||
|
|
||||||
|
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 QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT_all(
|
||||||
|
KC_GESC, 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_NO, 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_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_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, TG(2),
|
||||||
|
KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, MO(1), KC_RALT, KC_RGUI, KC_RCTL
|
||||||
|
),
|
||||||
|
[1] = LAYOUT_all(
|
||||||
|
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_NO, KC_DEL,
|
||||||
|
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,
|
||||||
|
MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||||
|
),
|
||||||
|
[2] = LAYOUT_all(
|
||||||
|
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_UP, KC_TRNS,
|
||||||
|
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT
|
||||||
|
),
|
||||||
|
|
||||||
|
[3] = LAYOUT_all(
|
||||||
|
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, 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, 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
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
MechMerlin's FaceW Sprit Edition Layout
|
||||||
|
======================
|
||||||
|
|
||||||
|
This is the preferred 60% layout used by u/merlin36, host of the [MechMerlin YouTube channel](www.youtube.com/mechmerlin).
|
||||||
|
|
||||||
|
## Keyboard Notes
|
||||||
|
- The FaceW Sprit Edition can be purchased on [mechanicalkeyboards.com](www.mechanicalkeyboards.com)
|
||||||
|
- Uses ps2avru instead of ps2avrgb
|
||||||
|
- To put in reset mode hold `q` while inserting the USB cable
|
||||||
|
- Use flashing instructions from ps2avrgb QMK port
|
||||||
|
|
||||||
|
## Keymap Notes
|
||||||
|
- Does not support any form of inswitch lighting as Merlin hates them.
|
||||||
|
- Arrow toggle switch to the right of right shift
|
||||||
|
- Reset is FN + Left Shift + R
|
||||||
|
|
||||||
|
### Build
|
||||||
|
To build this keymap, simply run `make facew:mechmerlin` from the qmk_firmware directory.
|
||||||
@@ -0,0 +1,106 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2017 Luiz Ribeiro <[email protected]>
|
||||||
|
|
||||||
|
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 <util/delay.h>
|
||||||
|
|
||||||
|
#include "matrix.h"
|
||||||
|
|
||||||
|
#ifndef DEBOUNCE
|
||||||
|
#define DEBOUNCE 5
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static uint8_t debouncing = DEBOUNCE;
|
||||||
|
|
||||||
|
static matrix_row_t matrix[MATRIX_ROWS];
|
||||||
|
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
|
||||||
|
|
||||||
|
void matrix_init(void) {
|
||||||
|
// all outputs for rows high
|
||||||
|
DDRB = 0xFF;
|
||||||
|
PORTB = 0xFF;
|
||||||
|
// all inputs for columns
|
||||||
|
DDRA = 0x00;
|
||||||
|
DDRC &= ~(0x111111<<2);
|
||||||
|
DDRD &= ~(1<<PIND7);
|
||||||
|
// all columns are pulled-up
|
||||||
|
PORTA = 0xFF;
|
||||||
|
PORTC |= (0b111111<<2);
|
||||||
|
PORTD |= (1<<PIND7);
|
||||||
|
|
||||||
|
// initialize matrix state: all keys off
|
||||||
|
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
|
||||||
|
matrix[row] = 0x00;
|
||||||
|
matrix_debouncing[row] = 0x00;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_set_row_status(uint8_t row) {
|
||||||
|
DDRB = (1 << row);
|
||||||
|
PORTB = ~(1 << row);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t bit_reverse(uint8_t x) {
|
||||||
|
x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa);
|
||||||
|
x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc);
|
||||||
|
x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0);
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t matrix_scan(void) {
|
||||||
|
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
|
||||||
|
matrix_set_row_status(row);
|
||||||
|
_delay_us(5);
|
||||||
|
|
||||||
|
matrix_row_t cols = (
|
||||||
|
// cols 0..7, PORTA 0 -> 7
|
||||||
|
(~PINA) & 0xFF
|
||||||
|
) | (
|
||||||
|
// cols 8..13, PORTC 7 -> 0
|
||||||
|
bit_reverse((~PINC) & 0xFF) << 8
|
||||||
|
) | (
|
||||||
|
// col 14, PORTD 7
|
||||||
|
((~PIND) & (1 << PIND7)) << 7
|
||||||
|
);
|
||||||
|
|
||||||
|
if (matrix_debouncing[row] != cols) {
|
||||||
|
matrix_debouncing[row] = cols;
|
||||||
|
debouncing = DEBOUNCE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (debouncing) {
|
||||||
|
if (--debouncing) {
|
||||||
|
_delay_ms(1);
|
||||||
|
} else {
|
||||||
|
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
|
||||||
|
matrix[i] = matrix_debouncing[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
matrix_scan_user();
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline matrix_row_t matrix_get_row(uint8_t row) {
|
||||||
|
return matrix[row];
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_print(void) {
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
# FaceW
|
||||||
|
|
||||||
|
A 60% no frills keyboard.
|
||||||
|
|
||||||
|
The FaceW is a special run of the WKL B.Face sourced from Sprit that doesn't have underglow RGB LEDs
|
||||||
|
but does have in switch LEDs. Also unlike the B.Face, it is based on ps2avru instead of ps2avrGB. It
|
||||||
|
is designed and manufactured in Korea. It originally uses BootMapperClient for programming but
|
||||||
|
can now also use QMK.
|
||||||
|
|
||||||
|
Keyboard Maintainer: [MechMerlin](www.github.com/mechmerlin)
|
||||||
|
Hardware Supported: FaceW Sprit Edition PCB
|
||||||
|
Hardware Availability: https://mechanicalkeyboards.com/shop/index.php?l=product_detail&p=1352
|
||||||
|
|
||||||
|
## Keyboard Notes
|
||||||
|
- The FaceW Sprit Edition can be purchased on [mechanicalkeyboards.com](www.mechanicalkeyboards.com)
|
||||||
|
- Uses ps2avru instead of ps2avrgb
|
||||||
|
- To put in reset mode hold `q` while inserting the USB cable
|
||||||
|
- When flashing, type `bootloadHID -r yourfile.hex` and wait awhile
|
||||||
|
|
||||||
|
Make example for this keyboard (after setting up your build environment):
|
||||||
|
|
||||||
|
make facew:default
|
||||||
|
|
||||||
|
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
# Copyright 2017 Luiz Ribeiro <[email protected]>
|
||||||
|
#
|
||||||
|
# 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/>.
|
||||||
|
|
||||||
|
# MCU name
|
||||||
|
MCU = atmega32a
|
||||||
|
PROTOCOL = VUSB
|
||||||
|
|
||||||
|
# unsupported features for now
|
||||||
|
NO_UART = yes
|
||||||
|
NO_SUSPEND_POWER_DOWN = yes
|
||||||
|
|
||||||
|
# processor frequency
|
||||||
|
F_CPU = 12000000
|
||||||
|
|
||||||
|
# Bootloader
|
||||||
|
# This definition is optional, and if your keyboard supports multiple bootloaders of
|
||||||
|
# different sizes, comment this out, and the correct address will be loaded
|
||||||
|
# automatically (+60). See bootloader.mk for all options.
|
||||||
|
BOOTLOADER = bootloadHID
|
||||||
|
|
||||||
|
# build options
|
||||||
|
BOOTMAGIC_ENABLE = yes
|
||||||
|
MOUSEKEY_ENABLE = yes
|
||||||
|
EXTRAKEY_ENABLE = yes
|
||||||
|
CONSOLE_ENABLE = yes
|
||||||
|
COMMAND_ENABLE = yes
|
||||||
|
BACKLIGHT_ENABLE = no
|
||||||
|
RGBLIGHT_ENABLE = no
|
||||||
|
RGBLIGHT_CUSTOM_DRIVER = yes
|
||||||
|
|
||||||
|
OPT_DEFS = -DDEBUG_LEVEL=0
|
||||||
|
|
||||||
|
# custom matrix setup
|
||||||
|
CUSTOM_MATRIX = yes
|
||||||
|
SRC = matrix.c i2c.c
|
||||||
|
|
||||||
|
# programming options
|
||||||
|
PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex
|
||||||
|
|
||||||
|
LAYOUTS = 60_ansi
|
||||||
@@ -0,0 +1,396 @@
|
|||||||
|
/* Name: usbconfig.h
|
||||||
|
* Project: V-USB, virtual USB port for Atmel's(r) AVR(r) microcontrollers
|
||||||
|
* Author: Christian Starkjohann
|
||||||
|
* Creation Date: 2005-04-01
|
||||||
|
* Tabsize: 4
|
||||||
|
* Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH
|
||||||
|
* License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
|
||||||
|
* This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __usbconfig_h_included__
|
||||||
|
#define __usbconfig_h_included__
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
General Description:
|
||||||
|
This file is an example configuration (with inline documentation) for the USB
|
||||||
|
driver. It configures V-USB for USB D+ connected to Port D bit 2 (which is
|
||||||
|
also hardware interrupt 0 on many devices) and USB D- to Port D bit 4. You may
|
||||||
|
wire the lines to any other port, as long as D+ is also wired to INT0 (or any
|
||||||
|
other hardware interrupt, as long as it is the highest level interrupt, see
|
||||||
|
section at the end of this file).
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ---------------------------- Hardware Config ---------------------------- */
|
||||||
|
|
||||||
|
#define USB_CFG_IOPORTNAME D
|
||||||
|
/* This is the port where the USB bus is connected. When you configure it to
|
||||||
|
* "B", the registers PORTB, PINB and DDRB will be used.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_DMINUS_BIT 3
|
||||||
|
/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected.
|
||||||
|
* This may be any bit in the port.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_DPLUS_BIT 2
|
||||||
|
/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected.
|
||||||
|
* This may be any bit in the port. Please note that D+ must also be connected
|
||||||
|
* to interrupt pin INT0! [You can also use other interrupts, see section
|
||||||
|
* "Optional MCU Description" below, or you can connect D- to the interrupt, as
|
||||||
|
* it is required if you use the USB_COUNT_SOF feature. If you use D- for the
|
||||||
|
* interrupt, the USB interrupt will also be triggered at Start-Of-Frame
|
||||||
|
* markers every millisecond.]
|
||||||
|
*/
|
||||||
|
#define USB_CFG_CLOCK_KHZ (F_CPU/1000)
|
||||||
|
/* Clock rate of the AVR in kHz. Legal values are 12000, 12800, 15000, 16000,
|
||||||
|
* 16500, 18000 and 20000. The 12.8 MHz and 16.5 MHz versions of the code
|
||||||
|
* require no crystal, they tolerate +/- 1% deviation from the nominal
|
||||||
|
* frequency. All other rates require a precision of 2000 ppm and thus a
|
||||||
|
* crystal!
|
||||||
|
* Since F_CPU should be defined to your actual clock rate anyway, you should
|
||||||
|
* not need to modify this setting.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_CHECK_CRC 0
|
||||||
|
/* Define this to 1 if you want that the driver checks integrity of incoming
|
||||||
|
* data packets (CRC checks). CRC checks cost quite a bit of code size and are
|
||||||
|
* currently only available for 18 MHz crystal clock. You must choose
|
||||||
|
* USB_CFG_CLOCK_KHZ = 18000 if you enable this option.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ----------------------- Optional Hardware Config ------------------------ */
|
||||||
|
|
||||||
|
/* #define USB_CFG_PULLUP_IOPORTNAME D */
|
||||||
|
/* If you connect the 1.5k pullup resistor from D- to a port pin instead of
|
||||||
|
* V+, you can connect and disconnect the device from firmware by calling
|
||||||
|
* the macros usbDeviceConnect() and usbDeviceDisconnect() (see usbdrv.h).
|
||||||
|
* This constant defines the port on which the pullup resistor is connected.
|
||||||
|
*/
|
||||||
|
/* #define USB_CFG_PULLUP_BIT 4 */
|
||||||
|
/* This constant defines the bit number in USB_CFG_PULLUP_IOPORT (defined
|
||||||
|
* above) where the 1.5k pullup resistor is connected. See description
|
||||||
|
* above for details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* --------------------------- Functional Range ---------------------------- */
|
||||||
|
|
||||||
|
#define USB_CFG_HAVE_INTRIN_ENDPOINT 1
|
||||||
|
/* Define this to 1 if you want to compile a version with two endpoints: The
|
||||||
|
* default control endpoint 0 and an interrupt-in endpoint (any other endpoint
|
||||||
|
* number).
|
||||||
|
*/
|
||||||
|
#define USB_CFG_HAVE_INTRIN_ENDPOINT3 1
|
||||||
|
/* Define this to 1 if you want to compile a version with three endpoints: The
|
||||||
|
* default control endpoint 0, an interrupt-in endpoint 3 (or the number
|
||||||
|
* configured below) and a catch-all default interrupt-in endpoint as above.
|
||||||
|
* You must also define USB_CFG_HAVE_INTRIN_ENDPOINT to 1 for this feature.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_EP3_NUMBER 3
|
||||||
|
/* If the so-called endpoint 3 is used, it can now be configured to any other
|
||||||
|
* endpoint number (except 0) with this macro. Default if undefined is 3.
|
||||||
|
*/
|
||||||
|
/* #define USB_INITIAL_DATATOKEN USBPID_DATA1 */
|
||||||
|
/* The above macro defines the startup condition for data toggling on the
|
||||||
|
* interrupt/bulk endpoints 1 and 3. Defaults to USBPID_DATA1.
|
||||||
|
* Since the token is toggled BEFORE sending any data, the first packet is
|
||||||
|
* sent with the oposite value of this configuration!
|
||||||
|
*/
|
||||||
|
#define USB_CFG_IMPLEMENT_HALT 0
|
||||||
|
/* Define this to 1 if you also want to implement the ENDPOINT_HALT feature
|
||||||
|
* for endpoint 1 (interrupt endpoint). Although you may not need this feature,
|
||||||
|
* it is required by the standard. We have made it a config option because it
|
||||||
|
* bloats the code considerably.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_SUPPRESS_INTR_CODE 0
|
||||||
|
/* Define this to 1 if you want to declare interrupt-in endpoints, but don't
|
||||||
|
* want to send any data over them. If this macro is defined to 1, functions
|
||||||
|
* usbSetInterrupt() and usbSetInterrupt3() are omitted. This is useful if
|
||||||
|
* you need the interrupt-in endpoints in order to comply to an interface
|
||||||
|
* (e.g. HID), but never want to send any data. This option saves a couple
|
||||||
|
* of bytes in flash memory and the transmit buffers in RAM.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_INTR_POLL_INTERVAL 1
|
||||||
|
/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
|
||||||
|
* interval. The value is in milliseconds and must not be less than 10 ms for
|
||||||
|
* low speed devices.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_IS_SELF_POWERED 0
|
||||||
|
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
|
||||||
|
* device is powered from the USB bus.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_MAX_BUS_POWER 500
|
||||||
|
/* Set this variable to the maximum USB bus power consumption of your device.
|
||||||
|
* The value is in milliamperes. [It will be divided by two since USB
|
||||||
|
* communicates power requirements in units of 2 mA.]
|
||||||
|
*/
|
||||||
|
#define USB_CFG_IMPLEMENT_FN_WRITE 1
|
||||||
|
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
|
||||||
|
* transfers. Set it to 0 if you don't need it and want to save a couple of
|
||||||
|
* bytes.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_IMPLEMENT_FN_READ 0
|
||||||
|
/* Set this to 1 if you need to send control replies which are generated
|
||||||
|
* "on the fly" when usbFunctionRead() is called. If you only want to send
|
||||||
|
* data from a static buffer, set it to 0 and return the data from
|
||||||
|
* usbFunctionSetup(). This saves a couple of bytes.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_IMPLEMENT_FN_WRITEOUT 0
|
||||||
|
/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoints.
|
||||||
|
* You must implement the function usbFunctionWriteOut() which receives all
|
||||||
|
* interrupt/bulk data sent to any endpoint other than 0. The endpoint number
|
||||||
|
* can be found in 'usbRxToken'.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_HAVE_FLOWCONTROL 0
|
||||||
|
/* Define this to 1 if you want flowcontrol over USB data. See the definition
|
||||||
|
* of the macros usbDisableAllRequests() and usbEnableAllRequests() in
|
||||||
|
* usbdrv.h.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_DRIVER_FLASH_PAGE 0
|
||||||
|
/* If the device has more than 64 kBytes of flash, define this to the 64 k page
|
||||||
|
* where the driver's constants (descriptors) are located. Or in other words:
|
||||||
|
* Define this to 1 for boot loaders on the ATMega128.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_LONG_TRANSFERS 0
|
||||||
|
/* Define this to 1 if you want to send/receive blocks of more than 254 bytes
|
||||||
|
* in a single control-in or control-out transfer. Note that the capability
|
||||||
|
* for long transfers increases the driver size.
|
||||||
|
*/
|
||||||
|
/* #define USB_RX_USER_HOOK(data, len) if(usbRxToken == (uchar)USBPID_SETUP) blinkLED(); */
|
||||||
|
/* This macro is a hook if you want to do unconventional things. If it is
|
||||||
|
* defined, it's inserted at the beginning of received message processing.
|
||||||
|
* If you eat the received message and don't want default processing to
|
||||||
|
* proceed, do a return after doing your things. One possible application
|
||||||
|
* (besides debugging) is to flash a status LED on each packet.
|
||||||
|
*/
|
||||||
|
/* #define USB_RESET_HOOK(resetStarts) if(!resetStarts){hadUsbReset();} */
|
||||||
|
/* This macro is a hook if you need to know when an USB RESET occurs. It has
|
||||||
|
* one parameter which distinguishes between the start of RESET state and its
|
||||||
|
* end.
|
||||||
|
*/
|
||||||
|
/* #define USB_SET_ADDRESS_HOOK() hadAddressAssigned(); */
|
||||||
|
/* This macro (if defined) is executed when a USB SET_ADDRESS request was
|
||||||
|
* received.
|
||||||
|
*/
|
||||||
|
#define USB_COUNT_SOF 1
|
||||||
|
/* define this macro to 1 if you need the global variable "usbSofCount" which
|
||||||
|
* counts SOF packets. This feature requires that the hardware interrupt is
|
||||||
|
* connected to D- instead of D+.
|
||||||
|
*/
|
||||||
|
/* #ifdef __ASSEMBLER__
|
||||||
|
* macro myAssemblerMacro
|
||||||
|
* in YL, TCNT0
|
||||||
|
* sts timer0Snapshot, YL
|
||||||
|
* endm
|
||||||
|
* #endif
|
||||||
|
* #define USB_SOF_HOOK myAssemblerMacro
|
||||||
|
* This macro (if defined) is executed in the assembler module when a
|
||||||
|
* Start Of Frame condition is detected. It is recommended to define it to
|
||||||
|
* the name of an assembler macro which is defined here as well so that more
|
||||||
|
* than one assembler instruction can be used. The macro may use the register
|
||||||
|
* YL and modify SREG. If it lasts longer than a couple of cycles, USB messages
|
||||||
|
* immediately after an SOF pulse may be lost and must be retried by the host.
|
||||||
|
* What can you do with this hook? Since the SOF signal occurs exactly every
|
||||||
|
* 1 ms (unless the host is in sleep mode), you can use it to tune OSCCAL in
|
||||||
|
* designs running on the internal RC oscillator.
|
||||||
|
* Please note that Start Of Frame detection works only if D- is wired to the
|
||||||
|
* interrupt, not D+. THIS IS DIFFERENT THAN MOST EXAMPLES!
|
||||||
|
*/
|
||||||
|
#define USB_CFG_CHECK_DATA_TOGGLING 0
|
||||||
|
/* define this macro to 1 if you want to filter out duplicate data packets
|
||||||
|
* sent by the host. Duplicates occur only as a consequence of communication
|
||||||
|
* errors, when the host does not receive an ACK. Please note that you need to
|
||||||
|
* implement the filtering yourself in usbFunctionWriteOut() and
|
||||||
|
* usbFunctionWrite(). Use the global usbCurrentDataToken and a static variable
|
||||||
|
* for each control- and out-endpoint to check for duplicate packets.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH 0
|
||||||
|
/* define this macro to 1 if you want the function usbMeasureFrameLength()
|
||||||
|
* compiled in. This function can be used to calibrate the AVR's RC oscillator.
|
||||||
|
*/
|
||||||
|
#define USB_USE_FAST_CRC 0
|
||||||
|
/* The assembler module has two implementations for the CRC algorithm. One is
|
||||||
|
* faster, the other is smaller. This CRC routine is only used for transmitted
|
||||||
|
* messages where timing is not critical. The faster routine needs 31 cycles
|
||||||
|
* per byte while the smaller one needs 61 to 69 cycles. The faster routine
|
||||||
|
* may be worth the 32 bytes bigger code size if you transmit lots of data and
|
||||||
|
* run the AVR close to its limit.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* -------------------------- Device Description --------------------------- */
|
||||||
|
|
||||||
|
#define USB_CFG_VENDOR_ID (VENDOR_ID & 0xFF), ((VENDOR_ID >> 8) & 0xFF)
|
||||||
|
/* USB vendor ID for the device, low byte first. If you have registered your
|
||||||
|
* own Vendor ID, define it here. Otherwise you may use one of obdev's free
|
||||||
|
* shared VID/PID pairs. Be sure to read USB-IDs-for-free.txt for rules!
|
||||||
|
* *** IMPORTANT NOTE ***
|
||||||
|
* This template uses obdev's shared VID/PID pair for Vendor Class devices
|
||||||
|
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
|
||||||
|
* the implications!
|
||||||
|
*/
|
||||||
|
#define USB_CFG_DEVICE_ID (PRODUCT_ID & 0xFF), ((PRODUCT_ID >> 8) & 0xFF)
|
||||||
|
/* This is the ID of the product, low byte first. It is interpreted in the
|
||||||
|
* scope of the vendor ID. If you have registered your own VID with usb.org
|
||||||
|
* or if you have licensed a PID from somebody else, define it here. Otherwise
|
||||||
|
* you may use one of obdev's free shared VID/PID pairs. See the file
|
||||||
|
* USB-IDs-for-free.txt for details!
|
||||||
|
* *** IMPORTANT NOTE ***
|
||||||
|
* This template uses obdev's shared VID/PID pair for Vendor Class devices
|
||||||
|
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
|
||||||
|
* the implications!
|
||||||
|
*/
|
||||||
|
#define USB_CFG_DEVICE_VERSION 0x00, 0x02
|
||||||
|
/* Version number of the device: Minor number first, then major number.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_VENDOR_NAME 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
|
||||||
|
#define USB_CFG_VENDOR_NAME_LEN 13
|
||||||
|
/* These two values define the vendor name returned by the USB device. The name
|
||||||
|
* must be given as a list of characters under single quotes. The characters
|
||||||
|
* are interpreted as Unicode (UTF-16) entities.
|
||||||
|
* If you don't want a vendor name string, undefine these macros.
|
||||||
|
* ALWAYS define a vendor name containing your Internet domain name if you use
|
||||||
|
* obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for
|
||||||
|
* details.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_DEVICE_NAME 'p', 's', '2', 'a', 'v', 'r', 'G', 'B'
|
||||||
|
#define USB_CFG_DEVICE_NAME_LEN 8
|
||||||
|
/* Same as above for the device name. If you don't want a device name, undefine
|
||||||
|
* the macros. See the file USB-IDs-for-free.txt before you assign a name if
|
||||||
|
* you use a shared VID/PID.
|
||||||
|
*/
|
||||||
|
/*#define USB_CFG_SERIAL_NUMBER 'N', 'o', 'n', 'e' */
|
||||||
|
/*#define USB_CFG_SERIAL_NUMBER_LEN 0 */
|
||||||
|
/* Same as above for the serial number. If you don't want a serial number,
|
||||||
|
* undefine the macros.
|
||||||
|
* It may be useful to provide the serial number through other means than at
|
||||||
|
* compile time. See the section about descriptor properties below for how
|
||||||
|
* to fine tune control over USB descriptors such as the string descriptor
|
||||||
|
* for the serial number.
|
||||||
|
*/
|
||||||
|
#define USB_CFG_DEVICE_CLASS 0
|
||||||
|
#define USB_CFG_DEVICE_SUBCLASS 0
|
||||||
|
/* See USB specification if you want to conform to an existing device class.
|
||||||
|
* Class 0xff is "vendor specific".
|
||||||
|
*/
|
||||||
|
#define USB_CFG_INTERFACE_CLASS 3 /* HID */
|
||||||
|
#define USB_CFG_INTERFACE_SUBCLASS 1 /* Boot */
|
||||||
|
#define USB_CFG_INTERFACE_PROTOCOL 1 /* Keyboard */
|
||||||
|
/* See USB specification if you want to conform to an existing device class or
|
||||||
|
* protocol. The following classes must be set at interface level:
|
||||||
|
* HID class is 3, no subclass and protocol required (but may be useful!)
|
||||||
|
* CDC class is 2, use subclass 2 and protocol 1 for ACM
|
||||||
|
*/
|
||||||
|
#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 0
|
||||||
|
/* Define this to the length of the HID report descriptor, if you implement
|
||||||
|
* an HID device. Otherwise don't define it or define it to 0.
|
||||||
|
* If you use this define, you must add a PROGMEM character array named
|
||||||
|
* "usbHidReportDescriptor" to your code which contains the report descriptor.
|
||||||
|
* Don't forget to keep the array and this define in sync!
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* #define USB_PUBLIC static */
|
||||||
|
/* Use the define above if you #include usbdrv.c instead of linking against it.
|
||||||
|
* This technique saves a couple of bytes in flash memory.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ------------------- Fine Control over USB Descriptors ------------------- */
|
||||||
|
/* If you don't want to use the driver's default USB descriptors, you can
|
||||||
|
* provide our own. These can be provided as (1) fixed length static data in
|
||||||
|
* flash memory, (2) fixed length static data in RAM or (3) dynamically at
|
||||||
|
* runtime in the function usbFunctionDescriptor(). See usbdrv.h for more
|
||||||
|
* information about this function.
|
||||||
|
* Descriptor handling is configured through the descriptor's properties. If
|
||||||
|
* no properties are defined or if they are 0, the default descriptor is used.
|
||||||
|
* Possible properties are:
|
||||||
|
* + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched
|
||||||
|
* at runtime via usbFunctionDescriptor(). If the usbMsgPtr mechanism is
|
||||||
|
* used, the data is in FLASH by default. Add property USB_PROP_IS_RAM if
|
||||||
|
* you want RAM pointers.
|
||||||
|
* + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found
|
||||||
|
* in static memory is in RAM, not in flash memory.
|
||||||
|
* + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash),
|
||||||
|
* the driver must know the descriptor's length. The descriptor itself is
|
||||||
|
* found at the address of a well known identifier (see below).
|
||||||
|
* List of static descriptor names (must be declared PROGMEM if in flash):
|
||||||
|
* char usbDescriptorDevice[];
|
||||||
|
* char usbDescriptorConfiguration[];
|
||||||
|
* char usbDescriptorHidReport[];
|
||||||
|
* char usbDescriptorString0[];
|
||||||
|
* int usbDescriptorStringVendor[];
|
||||||
|
* int usbDescriptorStringDevice[];
|
||||||
|
* int usbDescriptorStringSerialNumber[];
|
||||||
|
* Other descriptors can't be provided statically, they must be provided
|
||||||
|
* dynamically at runtime.
|
||||||
|
*
|
||||||
|
* Descriptor properties are or-ed or added together, e.g.:
|
||||||
|
* #define USB_CFG_DESCR_PROPS_DEVICE (USB_PROP_IS_RAM | USB_PROP_LENGTH(18))
|
||||||
|
*
|
||||||
|
* The following descriptors are defined:
|
||||||
|
* USB_CFG_DESCR_PROPS_DEVICE
|
||||||
|
* USB_CFG_DESCR_PROPS_CONFIGURATION
|
||||||
|
* USB_CFG_DESCR_PROPS_STRINGS
|
||||||
|
* USB_CFG_DESCR_PROPS_STRING_0
|
||||||
|
* USB_CFG_DESCR_PROPS_STRING_VENDOR
|
||||||
|
* USB_CFG_DESCR_PROPS_STRING_PRODUCT
|
||||||
|
* USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER
|
||||||
|
* USB_CFG_DESCR_PROPS_HID
|
||||||
|
* USB_CFG_DESCR_PROPS_HID_REPORT
|
||||||
|
* USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver)
|
||||||
|
*
|
||||||
|
* Note about string descriptors: String descriptors are not just strings, they
|
||||||
|
* are Unicode strings prefixed with a 2 byte header. Example:
|
||||||
|
* int serialNumberDescriptor[] = {
|
||||||
|
* USB_STRING_DESCRIPTOR_HEADER(6),
|
||||||
|
* 'S', 'e', 'r', 'i', 'a', 'l'
|
||||||
|
* };
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define USB_CFG_DESCR_PROPS_DEVICE 0
|
||||||
|
#define USB_CFG_DESCR_PROPS_CONFIGURATION USB_PROP_IS_DYNAMIC
|
||||||
|
//#define USB_CFG_DESCR_PROPS_CONFIGURATION 0
|
||||||
|
#define USB_CFG_DESCR_PROPS_STRINGS 0
|
||||||
|
#define USB_CFG_DESCR_PROPS_STRING_0 0
|
||||||
|
#define USB_CFG_DESCR_PROPS_STRING_VENDOR 0
|
||||||
|
#define USB_CFG_DESCR_PROPS_STRING_PRODUCT 0
|
||||||
|
#define USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER 0
|
||||||
|
#define USB_CFG_DESCR_PROPS_HID USB_PROP_IS_DYNAMIC
|
||||||
|
//#define USB_CFG_DESCR_PROPS_HID 0
|
||||||
|
#define USB_CFG_DESCR_PROPS_HID_REPORT USB_PROP_IS_DYNAMIC
|
||||||
|
//#define USB_CFG_DESCR_PROPS_HID_REPORT 0
|
||||||
|
#define USB_CFG_DESCR_PROPS_UNKNOWN 0
|
||||||
|
|
||||||
|
#define usbMsgPtr_t unsigned short
|
||||||
|
/* If usbMsgPtr_t is not defined, it defaults to 'uchar *'. We define it to
|
||||||
|
* a scalar type here because gcc generates slightly shorter code for scalar
|
||||||
|
* arithmetics than for pointer arithmetics. Remove this define for backward
|
||||||
|
* type compatibility or define it to an 8 bit type if you use data in RAM only
|
||||||
|
* and all RAM is below 256 bytes (tiny memory model in IAR CC).
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ----------------------- Optional MCU Description ------------------------ */
|
||||||
|
|
||||||
|
/* The following configurations have working defaults in usbdrv.h. You
|
||||||
|
* usually don't need to set them explicitly. Only if you want to run
|
||||||
|
* the driver on a device which is not yet supported or with a compiler
|
||||||
|
* which is not fully supported (such as IAR C) or if you use a differnt
|
||||||
|
* interrupt than INT0, you may have to define some of these.
|
||||||
|
*/
|
||||||
|
/* #define USB_INTR_CFG MCUCR */
|
||||||
|
/* #define USB_INTR_CFG_SET ((1 << ISC00) | (1 << ISC01)) */
|
||||||
|
/* #define USB_INTR_CFG_CLR 0 */
|
||||||
|
/* #define USB_INTR_ENABLE GIMSK */
|
||||||
|
/* #define USB_INTR_ENABLE_BIT INT0 */
|
||||||
|
/* #define USB_INTR_PENDING GIFR */
|
||||||
|
/* #define USB_INTR_PENDING_BIT INTF0 */
|
||||||
|
/* #define USB_INTR_VECTOR INT0_vect */
|
||||||
|
|
||||||
|
/* Set INT1 for D- falling edge to count SOF */
|
||||||
|
/* #define USB_INTR_CFG EICRA */
|
||||||
|
#define USB_INTR_CFG_SET ((1 << ISC11) | (0 << ISC10))
|
||||||
|
/* #define USB_INTR_CFG_CLR 0 */
|
||||||
|
/* #define USB_INTR_ENABLE EIMSK */
|
||||||
|
#define USB_INTR_ENABLE_BIT INT1
|
||||||
|
/* #define USB_INTR_PENDING EIFR */
|
||||||
|
#define USB_INTR_PENDING_BIT INTF1
|
||||||
|
#define USB_INTR_VECTOR INT1_vect
|
||||||
|
|
||||||
|
#endif /* __usbconfig_h_included__ */
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
This is the c configuration file for the keymap
|
||||||
|
|
||||||
|
Copyright 2012 Jun Wako <[email protected]>
|
||||||
|
Copyright 2015 Jack Humbert
|
||||||
|
|
||||||
|
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_USER_H
|
||||||
|
#define CONFIG_USER_H
|
||||||
|
|
||||||
|
#include "config_common.h"
|
||||||
|
|
||||||
|
/* Use I2C or Serial, not both */
|
||||||
|
|
||||||
|
#define USE_SERIAL
|
||||||
|
// #define USE_I2C
|
||||||
|
|
||||||
|
#define EE_HANDS
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
#include QMK_KEYBOARD_H
|
||||||
|
#include "action_layer.h"
|
||||||
|
#include "eeconfig.h"
|
||||||
|
|
||||||
|
extern keymap_config_t keymap_config;
|
||||||
|
|
||||||
|
// 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 _BASE 0
|
||||||
|
#define _FN1 1
|
||||||
|
#define _FN2 2
|
||||||
|
|
||||||
|
enum custom_keycodes {
|
||||||
|
QWERTY = SAFE_RANGE,
|
||||||
|
};
|
||||||
|
|
||||||
|
#define KC_ KC_TRNS
|
||||||
|
#define _______ KC_TRNS
|
||||||
|
#define XXXXXXX KC_NO
|
||||||
|
#define KC_FN1 MO(_FN1)
|
||||||
|
#define KC_FN2 MO(_FN2)
|
||||||
|
#define KC_SPFN1 LT(_FN1, KC_SPACE)
|
||||||
|
#define KC_SPFN2 LT(_FN2, KC_SPACE)
|
||||||
|
#define KC_BSFN1 LT(_FN1, KC_BSPC)
|
||||||
|
#define KC_BSFN2 LT(_FN2, KC_BSPC)
|
||||||
|
#define KC_RST RESET
|
||||||
|
#define KC_DBUG DEBUG
|
||||||
|
#define KC_RTOG RGB_TOG
|
||||||
|
#define KC_RMOD RGB_MOD
|
||||||
|
#define KC_RHUI RGB_HUI
|
||||||
|
#define KC_RHUD RGB_HUD
|
||||||
|
#define KC_RSAI RGB_SAI
|
||||||
|
#define KC_RSAD RGB_SAD
|
||||||
|
#define KC_RVAI RGB_VAI
|
||||||
|
#define KC_RVAD RGB_VAD
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[_BASE] = LAYOUT_kc(
|
||||||
|
//,----+----+----+----+----+----|----+----+----+----+----+----+----.
|
||||||
|
TAB ,QUOT,COMM,DOT , P , Y , F , G , C , R , L ,SLSH,MINS,
|
||||||
|
//|----`----`----`----`----`----|----`----`----`----`----`----`----|
|
||||||
|
ESC , A , O , E , U , I , D , H , T , N , S , ENTER ,
|
||||||
|
//|-----`----`----`----`----`----|----`----`----`----`----`--------|
|
||||||
|
LSFT ,SCLN, Q , J , K , X , B , M , W , V , Z , RSFT ,
|
||||||
|
//|-------`----`----`----`----`----|----`----`----`----`----`------|
|
||||||
|
LCTL ,LALT,LGUI ,FN2 , BSPC , SPC , FN1 ,RGUI ,RALT , RCTL
|
||||||
|
//`-----+----+-----+----+--------|--------+-----+-----+-----+------'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_FN1] = LAYOUT_kc(
|
||||||
|
//,----+----+----+----+----+----|----+----+----+----+----+----+----.
|
||||||
|
GRV , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,MINS,EQL ,
|
||||||
|
//|----`----`----`----`----`----|----`----`----`----`----`----`----|
|
||||||
|
CAPS ,RHUI,RSAI,RVAI,VOLU,LBRC,RBRC, , , ,SCLN, ,
|
||||||
|
//|-----`----`----`----`----`----|----`----`----`----`----`--------|
|
||||||
|
RMOD ,RHUD,RSAD,RVAD,VOLD,LCBR,RCBR, , , , UP , ,
|
||||||
|
//|-------`----`----`----`----`----|----`----`----`----`----`------|
|
||||||
|
RTOG , , , , DEL , INS , ,LEFT ,DOWN , RGHT
|
||||||
|
//`-----+----+-----+----+--------|--------+-----+-----+-----+------'
|
||||||
|
),
|
||||||
|
|
||||||
|
[_FN2] = LAYOUT_kc(
|
||||||
|
//,----+----+----+----+----+----|----+----+----+----+----+----+----.
|
||||||
|
TILD,EXLM, AT ,HASH,DLR ,PERC,CIRC,AMPR,ASTR,LPRN,RPRN,UNDS,PLUS,
|
||||||
|
//|----`----`----`----`----`----|----`----`----`----`----`----`----|
|
||||||
|
CAPS , , ,INS ,PGUP,HOME, F1 , F2 , F3 , F4 , F5 , F6 ,
|
||||||
|
//|-----`----`----`----`----`----|----`----`----`----`----`--------|
|
||||||
|
, , ,DEL ,PGDN,END , F7 , F8 , F9 ,F10 ,F11 , F12 ,
|
||||||
|
//|-------`----`----`----`----`----|----`----`----`----`----`------|
|
||||||
|
, , , , DEL , INS , , , ,
|
||||||
|
//`-----+----+-----+----+--------|--------+-----+-----+-----+------'
|
||||||
|
)
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
// This will disable the red LEDs on the ProMicros
|
||||||
|
DDRD &= ~(1<<5);
|
||||||
|
PORTD &= ~(1<<5);
|
||||||
|
DDRB &= ~(1<<0);
|
||||||
|
PORTB &= ~(1<<0);
|
||||||
|
};
|
||||||
|
|
||||||
@@ -87,4 +87,6 @@
|
|||||||
/* 7 */ { KA7, KB7, KC7, KD7, KE7, KF7, KG7, KH7, KI7, KJ7, KC_NO, KC_NO, KC_NO, KC_NO, KO7, KC_NO, KQ7, KR7 } \
|
/* 7 */ { KA7, KB7, KC7, KD7, KE7, KF7, KG7, KH7, KI7, KJ7, KC_NO, KC_NO, KC_NO, KC_NO, KO7, KC_NO, KQ7, KR7 } \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_tkl_ansi KEYMAP_TKL
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -68,4 +68,6 @@ AUDIO_ENABLE = no # Audio output on port C6
|
|||||||
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||||
|
|
||||||
CUSTOM_MATRIX = yes
|
CUSTOM_MATRIX = yes
|
||||||
SRC += matrix.c
|
SRC += matrix.c
|
||||||
|
|
||||||
|
LAYOUTS = tkl_ansi
|
||||||
@@ -0,0 +1,139 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2018 Yiancar
|
||||||
|
|
||||||
|
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 0x0257
|
||||||
|
#define DEVICE_VER 0x0001
|
||||||
|
#define MANUFACTURER Yiancar-Designs
|
||||||
|
#define PRODUCT HS60
|
||||||
|
#define DESCRIPTION GH60 compatible, tool free RGB keyboard
|
||||||
|
|
||||||
|
/* key matrix size */
|
||||||
|
#define MATRIX_ROWS 5
|
||||||
|
#define MATRIX_COLS 14
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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 { B0, B1, B2, B3, F7 }
|
||||||
|
#define MATRIX_COL_PINS { F1, F4, F5, E6, F0, B7, D2, D3, D5, D4, D6, D7, B4, B5 }
|
||||||
|
#define UNUSED_PINS { B6, C6, C7, F6 }
|
||||||
|
|
||||||
|
/* bootloader configuration */
|
||||||
|
|
||||||
|
#define QMK_ESC_OUTPUT B5 // usually COL
|
||||||
|
#define QMK_ESC_INPUT B2 // usually ROW
|
||||||
|
|
||||||
|
/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
|
||||||
|
#define DIODE_DIRECTION COL2ROW
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
|
||||||
|
* This is userful for the Windows task manager shortcut (ctrl+shift+esc).
|
||||||
|
*/
|
||||||
|
// #define GRAVE_ESC_CTRL_OVERRIDE
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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)) \
|
||||||
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Feature disable options
|
||||||
|
* These options are also useful to firmware size reduction.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* disable debug print */
|
||||||
|
//#define NO_DEBUG
|
||||||
|
|
||||||
|
/* disable print */
|
||||||
|
//#define NO_PRINT
|
||||||
|
|
||||||
|
/* Backlight options */
|
||||||
|
|
||||||
|
//This is experimental do not enable yet
|
||||||
|
//#define RGB_MATRIX_KEYPRESSES // reacts to keypresses (will slow down matrix scan by a lot)
|
||||||
|
|
||||||
|
#define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
|
||||||
|
#define RGB_DISABLE_WHEN_USB_SUSPENDED false // turn off effects when suspended
|
||||||
|
#define RGB_MATRIX_SKIP_FRAMES 0
|
||||||
|
|
||||||
|
#define DRIVER_ADDR_1 0b1110100
|
||||||
|
#define DRIVER_ADDR_2 0b1110101
|
||||||
|
|
||||||
|
#define DRIVER_COUNT 2
|
||||||
|
#define DRIVER_1_LED_TOTAL 30
|
||||||
|
#define DRIVER_2_LED_TOTAL 32
|
||||||
|
#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,496 @@
|
|||||||
|
/* Copyright 2018 Yiancar
|
||||||
|
*
|
||||||
|
* 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 "hs60.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
// Please ignore this is for upcoming features
|
||||||
|
/*#ifdef RAW_ENABLE
|
||||||
|
|
||||||
|
void raw_hid_receive( uint8_t *data, uint8_t length )
|
||||||
|
{
|
||||||
|
uint8_t command = data[0];
|
||||||
|
switch ( command )
|
||||||
|
{
|
||||||
|
case id_protocol_version:
|
||||||
|
{
|
||||||
|
msg_protocol_version *msg = (msg_protocol_version*)&data[1];
|
||||||
|
msg->version = PROTOCOL_VERSION;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#if USE_KEYMAPS_IN_EEPROM
|
||||||
|
case id_keymap_keycode_load:
|
||||||
|
{
|
||||||
|
msg_keymap_keycode_load *msg = (msg_keymap_keycode_load*)&data[1];
|
||||||
|
msg->keycode = keymap_keycode_load( msg->layer, msg->row, msg->column );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case id_keymap_keycode_save:
|
||||||
|
{
|
||||||
|
msg_keymap_keycode_save *msg = (msg_keymap_keycode_save*)&data[1];
|
||||||
|
keymap_keycode_save( msg->layer, msg->row, msg->column, msg->keycode);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case id_keymap_default_save:
|
||||||
|
{
|
||||||
|
keymap_default_save();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif // USE_KEYMAPS_IN_EEPROM
|
||||||
|
case id_backlight_config_set_values:
|
||||||
|
{
|
||||||
|
msg_backlight_config_set_values *msg = (msg_backlight_config_set_values*)&data[1];
|
||||||
|
backlight_config_set_values(msg);
|
||||||
|
backlight_config_save();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case id_backlight_config_set_alphas_mods:
|
||||||
|
{
|
||||||
|
msg_backlight_config_set_alphas_mods *msg = (msg_backlight_config_set_alphas_mods*)&data[1];
|
||||||
|
backlight_config_set_alphas_mods( msg->alphas_mods );
|
||||||
|
backlight_config_save();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case id_backlight_set_key_color:
|
||||||
|
{
|
||||||
|
msg_backlight_set_key_color *msg = (msg_backlight_set_key_color*)&data[1];
|
||||||
|
backlight_set_key_color(msg->row, msg->column, msg->hsv);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case id_system_get_state:
|
||||||
|
{
|
||||||
|
msg_system_state *msg = (msg_system_state*)&data[1];
|
||||||
|
msg->value = backlight_get_tick();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
// Unhandled message.
|
||||||
|
data[0] = id_unhandled;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return same buffer with values changed
|
||||||
|
raw_hid_send( data, length );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif*/
|
||||||
|
|
||||||
|
#ifdef HS60_ANSI
|
||||||
|
|
||||||
|
const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
|
||||||
|
/* Refer to IS31 manual for these locations
|
||||||
|
* driver
|
||||||
|
* | R location
|
||||||
|
* | | G location
|
||||||
|
* | | | B location
|
||||||
|
* | | | | */
|
||||||
|
{0, C1_1, C3_2, C4_2}, //A1
|
||||||
|
{0, C1_2, C2_2, C4_3}, //A2
|
||||||
|
{0, C1_3, C2_3, C3_3}, //A3
|
||||||
|
{0, C1_4, C2_4, C3_4}, //A4
|
||||||
|
{0, C1_5, C2_5, C3_5}, //A5
|
||||||
|
{0, C1_6, C2_6, C3_6}, //A6
|
||||||
|
{0, C1_7, C2_7, C3_7}, //A7
|
||||||
|
{0, C1_8, C2_8, C3_8}, //A8
|
||||||
|
{0, C9_1, C8_1, C7_1}, //A9
|
||||||
|
{0, C9_2, C8_2, C7_2}, //A10
|
||||||
|
{0, C9_3, C8_3, C7_3}, //A11
|
||||||
|
{0, C9_4, C8_4, C7_4}, //A12
|
||||||
|
{0, C9_5, C8_5, C7_5}, //A13
|
||||||
|
{0, C9_6, C8_6, C7_6}, //A14
|
||||||
|
{0, C9_7, C8_7, C6_6}, //A15
|
||||||
|
{0, C9_8, C7_7, C6_7}, //A16
|
||||||
|
|
||||||
|
{0, C1_9, C3_10, C4_10}, //B1
|
||||||
|
{0, C1_10, C2_10, C4_11}, //B2
|
||||||
|
{0, C1_11, C2_11, C3_11}, //B3
|
||||||
|
{0, C1_12, C2_12, C3_12}, //B4
|
||||||
|
{0, C1_13, C2_13, C3_13}, //B5
|
||||||
|
{0, C1_14, C2_14, C3_14}, //B6
|
||||||
|
{0, C1_15, C2_15, C3_15}, //B7
|
||||||
|
{0, C1_16, C2_16, C3_16}, //B8
|
||||||
|
{0, C9_9, C8_9, C7_9}, //B9
|
||||||
|
{0, C9_10, C8_10, C7_10}, //B10
|
||||||
|
{0, C9_11, C8_11, C7_11}, //B11
|
||||||
|
{0, C9_12, C8_12, C7_12}, //B12
|
||||||
|
{0, C9_13, C8_13, C7_13}, //B13
|
||||||
|
{0, C9_14, C8_14, C7_14}, //B14
|
||||||
|
|
||||||
|
{1, C1_1, C3_2, C4_2}, //C1
|
||||||
|
{1, C1_2, C2_2, C4_3}, //C2
|
||||||
|
{1, C1_3, C2_3, C3_3}, //C3
|
||||||
|
{1, C1_4, C2_4, C3_4}, //C4
|
||||||
|
{1, C1_5, C2_5, C3_5}, //C5
|
||||||
|
{1, C1_6, C2_6, C3_6}, //C6
|
||||||
|
{1, C1_7, C2_7, C3_7}, //C7
|
||||||
|
{1, C1_8, C2_8, C3_8}, //C8
|
||||||
|
{1, C9_1, C8_1, C7_1}, //C9
|
||||||
|
{1, C9_2, C8_2, C7_2}, //C10
|
||||||
|
{1, C9_3, C8_3, C7_3}, //C11
|
||||||
|
{1, C9_4, C8_4, C7_4}, //C12
|
||||||
|
{1, C9_5, C8_5, C7_5}, //C13
|
||||||
|
{1, C9_6, C8_6, C7_6}, //C14
|
||||||
|
{1, C9_7, C8_7, C6_6}, //C15
|
||||||
|
{1, C9_8, C7_7, C6_7}, //C16
|
||||||
|
|
||||||
|
{1, C1_9, C3_10, C4_10}, //D1
|
||||||
|
//D2
|
||||||
|
{1, C1_11, C2_11, C3_11}, //D3
|
||||||
|
{1, C1_12, C2_12, C3_12}, //D4
|
||||||
|
{1, C1_13, C2_13, C3_13}, //D5
|
||||||
|
{1, C1_14, C2_14, C3_14}, //D6
|
||||||
|
{1, C1_15, C2_15, C3_15}, //D7
|
||||||
|
{1, C1_16, C2_16, C3_16}, //D8
|
||||||
|
{1, C9_9, C8_9, C7_9}, //D9
|
||||||
|
{1, C9_10, C8_10, C7_10}, //D10
|
||||||
|
{1, C9_11, C8_11, C7_11}, //D11
|
||||||
|
{1, C9_12, C8_12, C7_12}, //D12
|
||||||
|
{1, C9_13, C8_13, C7_13}, //D13
|
||||||
|
{1, C9_14, C8_14, C7_14}, //D14
|
||||||
|
{1, C9_15, C8_15, C6_14}, //D15
|
||||||
|
{1, C9_16, C7_15, C6_15} //D16
|
||||||
|
};
|
||||||
|
|
||||||
|
const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
|
||||||
|
//
|
||||||
|
// C7, C6, C5, C4, C3, C2, C1, A7, A6, A5, A4, A3, A2, A1,
|
||||||
|
// C8, C9, C10, C11, C12, C13, C14, A8, A9, A10, A11, A12, A13, A15,
|
||||||
|
// D4, D5, D6, D7, D8, C16, C15, B5, B6, B7, B8, A16, ---, A14,
|
||||||
|
// D3, ---, D1, D9, D10, D11, D12, B4, B3, B2, B1, B9, ---, B10,
|
||||||
|
// D16, D15, D14, ---, ---, ---, D13, ---, ---, ---, B14, B13, B12, B11
|
||||||
|
/* {row | col << 4}
|
||||||
|
* | {x=0..224, y=0..64}
|
||||||
|
* | | modifier
|
||||||
|
* | | | */
|
||||||
|
{{0|(13<<4)}, {224, 0}, 1}, //A1-A16
|
||||||
|
{{0|(12<<4)}, {204, 0}, 0},
|
||||||
|
{{0|(11<<4)}, {187, 0}, 0},
|
||||||
|
{{0|(10<<4)}, {170, 0}, 0},
|
||||||
|
{{0|(9<<4)}, {153, 0}, 0},
|
||||||
|
{{0|(8<<4)}, {136, 0}, 0},
|
||||||
|
{{0|(7<<4)}, {119, 0}, 0},
|
||||||
|
{{1|(7<<4)}, {119, 16}, 0},
|
||||||
|
{{1|(8<<4)}, {136, 16}, 0},
|
||||||
|
{{1|(9<<4)}, {153, 16}, 0},
|
||||||
|
{{1|(10<<4)}, {170, 16}, 0},
|
||||||
|
{{1|(11<<4)}, {187, 16}, 0},
|
||||||
|
{{1|(12<<4)}, {204, 16}, 0},
|
||||||
|
{{2|(13<<4)}, {224, 32}, 1},
|
||||||
|
{{2|(12<<4)}, {224, 16}, 0},
|
||||||
|
{{2|(11<<4)}, {197, 32}, 0},
|
||||||
|
|
||||||
|
{{3|(10<<4)}, {170, 48}, 0}, //B1-B14
|
||||||
|
{{3|(9<<4)}, {153, 48}, 0},
|
||||||
|
{{3|(8<<4)}, {136, 48}, 0},
|
||||||
|
{{3|(7<<4)}, {119, 48}, 0},
|
||||||
|
{{2|(7<<4)}, {119, 32}, 0},
|
||||||
|
{{2|(8<<4)}, {136, 32}, 0},
|
||||||
|
{{2|(9<<4)}, {153, 32}, 0},
|
||||||
|
{{2|(10<<4)}, {170, 32}, 0},
|
||||||
|
{{3|(11<<4)}, {187, 48}, 0},
|
||||||
|
{{3|(13<<4)}, {214, 48}, 1},
|
||||||
|
{{4|(13<<4)}, {224, 64}, 1},
|
||||||
|
{{4|(12<<4)}, {204, 64}, 1},
|
||||||
|
{{4|(11<<4)}, {187, 64}, 1},
|
||||||
|
{{4|(10<<4)}, {170, 64}, 1},
|
||||||
|
|
||||||
|
{{0|(6<<4)}, {102, 0}, 0}, //C1-C16
|
||||||
|
{{0|(5<<4)}, { 85, 0}, 0},
|
||||||
|
{{0|(4<<4)}, { 68, 0}, 0},
|
||||||
|
{{0|(3<<4)}, { 51, 0}, 0},
|
||||||
|
{{0|(2<<4)}, { 34, 0}, 0},
|
||||||
|
{{0|(1<<4)}, { 17, 0}, 0},
|
||||||
|
{{0|(0<<4)}, { 0, 0}, 1},
|
||||||
|
{{1|(0<<4)}, { 0, 16}, 1},
|
||||||
|
{{1|(1<<4)}, { 17, 16}, 0},
|
||||||
|
{{1|(2<<4)}, { 34, 16}, 0},
|
||||||
|
{{1|(3<<4)}, { 51, 16}, 0},
|
||||||
|
{{1|(4<<4)}, { 68, 16}, 0},
|
||||||
|
{{1|(5<<4)}, { 85, 16}, 0},
|
||||||
|
{{1|(6<<4)}, {102, 16}, 0},
|
||||||
|
{{2|(6<<4)}, {102, 32}, 0},
|
||||||
|
{{2|(5<<4)}, { 85, 32}, 0},
|
||||||
|
|
||||||
|
{{3|(2<<4)}, { 32, 48}, 0}, //D1-D16
|
||||||
|
//D2
|
||||||
|
{{3|(0<<4)}, { 10, 48}, 1},
|
||||||
|
{{2|(0<<4)}, { 0, 32}, 1},
|
||||||
|
{{2|(1<<4)}, { 17, 32}, 0},
|
||||||
|
{{2|(2<<4)}, { 34, 32}, 0},
|
||||||
|
{{2|(3<<4)}, { 51, 32}, 0},
|
||||||
|
{{2|(4<<4)}, { 68, 32}, 0},
|
||||||
|
{{3|(3<<4)}, { 51, 48}, 0},
|
||||||
|
{{3|(4<<4)}, { 68, 48}, 0},
|
||||||
|
{{3|(5<<4)}, { 85, 48}, 0},
|
||||||
|
{{3|(6<<4)}, {102, 48}, 0},
|
||||||
|
{{4|(3<<4)}, {102, 64}, 0},
|
||||||
|
{{4|(2<<4)}, { 34, 68}, 1},
|
||||||
|
{{4|(1<<4)}, { 17, 68}, 1},
|
||||||
|
{{4|(0<<4)}, { 0, 68}, 1}
|
||||||
|
};
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
|
||||||
|
/* Refer to IS31 manual for these locations
|
||||||
|
* driver
|
||||||
|
* | R location
|
||||||
|
* | | G location
|
||||||
|
* | | | B location
|
||||||
|
* | | | | */
|
||||||
|
{0, C1_1, C3_2, C4_2}, //A1
|
||||||
|
{0, C1_2, C2_2, C4_3}, //A2
|
||||||
|
{0, C1_3, C2_3, C3_3}, //A3
|
||||||
|
{0, C1_4, C2_4, C3_4}, //A4
|
||||||
|
{0, C1_5, C2_5, C3_5}, //A5
|
||||||
|
{0, C1_6, C2_6, C3_6}, //A6
|
||||||
|
{0, C1_7, C2_7, C3_7}, //A7
|
||||||
|
{0, C1_8, C2_8, C3_8}, //A8
|
||||||
|
{0, C9_1, C8_1, C7_1}, //A9
|
||||||
|
{0, C9_2, C8_2, C7_2}, //A10
|
||||||
|
{0, C9_3, C8_3, C7_3}, //A11
|
||||||
|
{0, C9_4, C8_4, C7_4}, //A12
|
||||||
|
{0, C9_5, C8_5, C7_5}, //A13
|
||||||
|
{0, C9_6, C8_6, C7_6}, //A14
|
||||||
|
{0, C9_7, C8_7, C6_6}, //A15
|
||||||
|
{0, C9_8, C7_7, C6_7}, //A16
|
||||||
|
|
||||||
|
{0, C1_9, C3_10, C4_10}, //B1
|
||||||
|
{0, C1_10, C2_10, C4_11}, //B2
|
||||||
|
{0, C1_11, C2_11, C3_11}, //B3
|
||||||
|
{0, C1_12, C2_12, C3_12}, //B4
|
||||||
|
{0, C1_13, C2_13, C3_13}, //B5
|
||||||
|
{0, C1_14, C2_14, C3_14}, //B6
|
||||||
|
{0, C1_15, C2_15, C3_15}, //B7
|
||||||
|
{0, C1_16, C2_16, C3_16}, //B8
|
||||||
|
{0, C9_9, C8_9, C7_9}, //B9
|
||||||
|
{0, C9_10, C8_10, C7_10}, //B10
|
||||||
|
{0, C9_11, C8_11, C7_11}, //B11
|
||||||
|
{0, C9_12, C8_12, C7_12}, //B12
|
||||||
|
{0, C9_13, C8_13, C7_13}, //B13
|
||||||
|
{0, C9_14, C8_14, C7_14}, //B14
|
||||||
|
|
||||||
|
{1, C1_1, C3_2, C4_2}, //C1
|
||||||
|
{1, C1_2, C2_2, C4_3}, //C2
|
||||||
|
{1, C1_3, C2_3, C3_3}, //C3
|
||||||
|
{1, C1_4, C2_4, C3_4}, //C4
|
||||||
|
{1, C1_5, C2_5, C3_5}, //C5
|
||||||
|
{1, C1_6, C2_6, C3_6}, //C6
|
||||||
|
{1, C1_7, C2_7, C3_7}, //C7
|
||||||
|
{1, C1_8, C2_8, C3_8}, //C8
|
||||||
|
{1, C9_1, C8_1, C7_1}, //C9
|
||||||
|
{1, C9_2, C8_2, C7_2}, //C10
|
||||||
|
{1, C9_3, C8_3, C7_3}, //C11
|
||||||
|
{1, C9_4, C8_4, C7_4}, //C12
|
||||||
|
{1, C9_5, C8_5, C7_5}, //C13
|
||||||
|
{1, C9_6, C8_6, C7_6}, //C14
|
||||||
|
{1, C9_7, C8_7, C6_6}, //C15
|
||||||
|
{1, C9_8, C7_7, C6_7}, //C16
|
||||||
|
|
||||||
|
{1, C1_9, C3_10, C4_10}, //D1
|
||||||
|
{1, C1_10, C2_10, C4_11}, //D2
|
||||||
|
{1, C1_11, C2_11, C3_11}, //D3
|
||||||
|
{1, C1_12, C2_12, C3_12}, //D4
|
||||||
|
{1, C1_13, C2_13, C3_13}, //D5
|
||||||
|
{1, C1_14, C2_14, C3_14}, //D6
|
||||||
|
{1, C1_15, C2_15, C3_15}, //D7
|
||||||
|
{1, C1_16, C2_16, C3_16}, //D8
|
||||||
|
{1, C9_9, C8_9, C7_9}, //D9
|
||||||
|
{1, C9_10, C8_10, C7_10}, //D10
|
||||||
|
{1, C9_11, C8_11, C7_11}, //D11
|
||||||
|
{1, C9_12, C8_12, C7_12}, //D12
|
||||||
|
{1, C9_13, C8_13, C7_13}, //D13
|
||||||
|
{1, C9_14, C8_14, C7_14}, //D14
|
||||||
|
{1, C9_15, C8_15, C6_14}, //D15
|
||||||
|
{1, C9_16, C7_15, C6_15} //D16
|
||||||
|
};
|
||||||
|
|
||||||
|
const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
|
||||||
|
//
|
||||||
|
// C7, C6, C5, C4, C3, C2, C1, A7, A6, A5, A4, A3, A2, A1,
|
||||||
|
// C8, C9, C10, C11, C12, C13, C14, A8, A9, A10, A11, A12, A13, ---,
|
||||||
|
// D4, D5, D6, D7, D8, C16, C15, B5, B6, B7, B8, A16, A15, A14,
|
||||||
|
// D3, D2, D1, D9, D10, D11, D12, B4, B3, B2, B1, B9, ---, B10,
|
||||||
|
// D16, D15, D14, ---, ---, ---, D13, ---, ---, ---, B14, B13, B12, B11
|
||||||
|
/* {row | col << 4}
|
||||||
|
* | {x=0..224, y=0..64}
|
||||||
|
* | | modifier
|
||||||
|
* | | | */
|
||||||
|
{{0|(13<<4)}, {224, 0}, 1}, //A1-A16
|
||||||
|
{{0|(12<<4)}, {204, 0}, 0},
|
||||||
|
{{0|(11<<4)}, {187, 0}, 0},
|
||||||
|
{{0|(10<<4)}, {170, 0}, 0},
|
||||||
|
{{0|(9<<4)}, {153, 0}, 0},
|
||||||
|
{{0|(8<<4)}, {136, 0}, 0},
|
||||||
|
{{0|(7<<4)}, {119, 0}, 0},
|
||||||
|
{{1|(7<<4)}, {119, 16}, 0},
|
||||||
|
{{1|(8<<4)}, {136, 16}, 0},
|
||||||
|
{{1|(9<<4)}, {153, 16}, 0},
|
||||||
|
{{1|(10<<4)}, {170, 16}, 0},
|
||||||
|
{{1|(11<<4)}, {187, 16}, 0},
|
||||||
|
{{1|(12<<4)}, {204, 16}, 0},
|
||||||
|
{{2|(13<<4)}, {224, 8}, 1},
|
||||||
|
{{2|(12<<4)}, {204, 32}, 0},
|
||||||
|
{{2|(11<<4)}, {187, 32}, 0},
|
||||||
|
|
||||||
|
{{3|(10<<4)}, {170, 48}, 0}, //B1-B14
|
||||||
|
{{3|(9<<4)}, {153, 48}, 0},
|
||||||
|
{{3|(8<<4)}, {136, 48}, 0},
|
||||||
|
{{3|(7<<4)}, {119, 48}, 0},
|
||||||
|
{{2|(7<<4)}, {119, 32}, 0},
|
||||||
|
{{2|(8<<4)}, {136, 32}, 0},
|
||||||
|
{{2|(9<<4)}, {153, 32}, 0},
|
||||||
|
{{2|(10<<4)}, {170, 32}, 0},
|
||||||
|
{{3|(11<<4)}, {187, 48}, 0},
|
||||||
|
{{3|(13<<4)}, {214, 48}, 1},
|
||||||
|
{{4|(13<<4)}, {224, 64}, 1},
|
||||||
|
{{4|(12<<4)}, {204, 64}, 1},
|
||||||
|
{{4|(11<<4)}, {187, 64}, 1},
|
||||||
|
{{4|(10<<4)}, {170, 64}, 1},
|
||||||
|
|
||||||
|
{{0|(6<<4)}, {102, 0}, 0}, //C1-C16
|
||||||
|
{{0|(5<<4)}, { 85, 0}, 0},
|
||||||
|
{{0|(4<<4)}, { 68, 0}, 0},
|
||||||
|
{{0|(3<<4)}, { 51, 0}, 0},
|
||||||
|
{{0|(2<<4)}, { 34, 0}, 0},
|
||||||
|
{{0|(1<<4)}, { 17, 0}, 0},
|
||||||
|
{{0|(0<<4)}, { 0, 0}, 1},
|
||||||
|
{{1|(0<<4)}, { 0, 16}, 1},
|
||||||
|
{{1|(1<<4)}, { 17, 16}, 0},
|
||||||
|
{{1|(2<<4)}, { 34, 16}, 0},
|
||||||
|
{{1|(3<<4)}, { 51, 16}, 0},
|
||||||
|
{{1|(4<<4)}, { 68, 16}, 0},
|
||||||
|
{{1|(5<<4)}, { 85, 16}, 0},
|
||||||
|
{{1|(6<<4)}, {102, 16}, 0},
|
||||||
|
{{2|(6<<4)}, {102, 32}, 0},
|
||||||
|
{{2|(5<<4)}, { 85, 32}, 0},
|
||||||
|
|
||||||
|
{{3|(2<<4)}, { 32, 48}, 0}, //D1-D16
|
||||||
|
{{3|(1<<4)}, { 17, 48}, 0},
|
||||||
|
{{3|(0<<4)}, { 0, 48}, 1},
|
||||||
|
{{2|(0<<4)}, { 0, 32}, 1},
|
||||||
|
{{2|(1<<4)}, { 17, 32}, 0},
|
||||||
|
{{2|(2<<4)}, { 34, 32}, 0},
|
||||||
|
{{2|(3<<4)}, { 51, 32}, 0},
|
||||||
|
{{2|(4<<4)}, { 68, 32}, 0},
|
||||||
|
{{3|(3<<4)}, { 51, 48}, 0},
|
||||||
|
{{3|(4<<4)}, { 68, 48}, 0},
|
||||||
|
{{3|(5<<4)}, { 85, 48}, 0},
|
||||||
|
{{3|(6<<4)}, {102, 48}, 0},
|
||||||
|
{{4|(3<<4)}, {102, 64}, 0},
|
||||||
|
{{4|(2<<4)}, { 34, 68}, 1},
|
||||||
|
{{4|(1<<4)}, { 17, 68}, 1},
|
||||||
|
{{4|(0<<4)}, { 0, 68}, 1}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void bootmagic_lite(void)
|
||||||
|
{
|
||||||
|
// The lite version of TMK's bootmagic made by Wilba.
|
||||||
|
// 100% less potential for accidentally making the
|
||||||
|
// keyboard do stupid things.
|
||||||
|
|
||||||
|
// We need multiple scans because debouncing can't be turned off.
|
||||||
|
matrix_scan();
|
||||||
|
wait_ms(DEBOUNCING_DELAY);
|
||||||
|
matrix_scan();
|
||||||
|
|
||||||
|
// If the Esc and space bar are held down on power up,
|
||||||
|
// reset the EEPROM valid state and jump to bootloader.
|
||||||
|
// Assumes Esc is at [0,0] and spacebar is at [4,6].
|
||||||
|
// This isn't very generalized, but we need something that doesn't
|
||||||
|
// rely on user's keymaps in firmware or EEPROM.
|
||||||
|
if ( ( matrix_get_row(0) & (1<<0) ) &&
|
||||||
|
( matrix_get_row(4) & (1<<6) ) )
|
||||||
|
{
|
||||||
|
// Set the TMK/QMK EEPROM state as invalid.
|
||||||
|
eeconfig_disable();
|
||||||
|
//eeprom_set_valid(false);
|
||||||
|
// Jump to bootloader.
|
||||||
|
bootloader_jump();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_init_kb(void) {
|
||||||
|
// put your keyboard start-up code here
|
||||||
|
// runs once when the firmware starts up
|
||||||
|
|
||||||
|
bootmagic_lite();
|
||||||
|
|
||||||
|
// Please ignore this is for upcoming features
|
||||||
|
// If the EEPROM has the magic, the data is good.
|
||||||
|
// OK to load from EEPROM.
|
||||||
|
/*if (eeprom_is_valid())
|
||||||
|
{
|
||||||
|
backlight_config_load();
|
||||||
|
|
||||||
|
// TODO: do something to "turn on" keymaps in EEPROM?
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// If the EEPROM has not been saved before, or is out of date,
|
||||||
|
// save the default values to the EEPROM. Default values
|
||||||
|
// come from construction of the zeal_backlight_config instance.
|
||||||
|
backlight_config_save();
|
||||||
|
|
||||||
|
// Clear the LED colors stored in EEPROM
|
||||||
|
for ( int row=0; row < MATRIX_ROWS; row++ )
|
||||||
|
{
|
||||||
|
HSV hsv;
|
||||||
|
for ( int column=0; column < MATRIX_COLS; column++ )
|
||||||
|
{
|
||||||
|
hsv.h = rand() & 0xFF;
|
||||||
|
hsv.s = rand() & 0x7F;
|
||||||
|
hsv.v = 255;
|
||||||
|
backlight_set_key_color( row, column, hsv );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifdef USE_KEYMAPS_IN_EEPROM
|
||||||
|
keymap_default_save();
|
||||||
|
#endif
|
||||||
|
// Save the magic number last, in case saving was interrupted
|
||||||
|
eeprom_set_valid(true);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
matrix_init_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_scan_kb(void) {
|
||||||
|
|
||||||
|
matrix_scan_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
|
||||||
|
return process_record_user(keycode, record);
|
||||||
|
}
|
||||||
|
|
||||||
|
void led_set_kb(uint8_t usb_led) {
|
||||||
|
//backlight_set_indicator_state(usb_led);
|
||||||
|
}
|
||||||
|
|
||||||
|
void suspend_power_down_kb(void)
|
||||||
|
{
|
||||||
|
rgb_matrix_set_suspend_state(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void suspend_wakeup_init_kb(void)
|
||||||
|
{
|
||||||
|
rgb_matrix_set_suspend_state(false);
|
||||||
|
}
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
/* Copyright 2018 Yiancar
|
||||||
|
*
|
||||||
|
* 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 HS60_H
|
||||||
|
#define HS60_H
|
||||||
|
|
||||||
|
#define XXX KC_NO
|
||||||
|
|
||||||
|
#include "quantum.h"
|
||||||
|
|
||||||
|
// This a shortcut to help you visually see your layout.
|
||||||
|
|
||||||
|
#define LAYOUT_60_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, \
|
||||||
|
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, K46, 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, XXX }, \
|
||||||
|
{ 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, XXX, K3D }, \
|
||||||
|
{ K40, K41, K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, K4A, K4B, K4C, K4D } \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LAYOUT_60_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, K2C, \
|
||||||
|
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, K46, 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, XXX }, \
|
||||||
|
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
|
||||||
|
{ K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, K3D }, \
|
||||||
|
{ K40, K41, K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, K4A, K4B, K4C, K4D } \
|
||||||
|
}
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"keyboard_name": "HS60",
|
||||||
|
"url": "",
|
||||||
|
"maintainer": "qmk",
|
||||||
|
"width": 15,
|
||||||
|
"height": 5,
|
||||||
|
"layouts": {
|
||||||
|
"LAYOUT_60_iso": {
|
||||||
|
"layout": [{"label":"\u00ac", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"\u00a3", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
|
||||||
|
},
|
||||||
|
"LAYOUT_60_ansi": {
|
||||||
|
"layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2018 Yiancar
|
||||||
|
|
||||||
|
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_USER_H
|
||||||
|
#define CONFIG_USER_H
|
||||||
|
|
||||||
|
#include "../../config.h"
|
||||||
|
|
||||||
|
/* Include overwrites for specific keymap */
|
||||||
|
|
||||||
|
#define HS60_ANSI
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
/* Copyright 2018 Yiancar
|
||||||
|
*
|
||||||
|
* 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 QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
//This is the ANSI version of the PCB
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT_60_ansi( /* Base */
|
||||||
|
KC_GESC, 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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1) , KC_APP, KC_RCTL),
|
||||||
|
|
||||||
|
[1] = LAYOUT_60_ansi( /* FN */
|
||||||
|
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_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET , KC_TRNS,\
|
||||||
|
KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, 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, RGB_SPI, RGB_SPD, KC_TRNS,\
|
||||||
|
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||||
|
};
|
||||||
|
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
//user initialization
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
//user matrix
|
||||||
|
}
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
The default keymap for ANSI HS60
|
||||||
|
================================
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Default layer is normal ANSI and Fn layer is used for RGB functions, Volume control and arrow cluster
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
/* Copyright 2018 Yiancar
|
||||||
|
*
|
||||||
|
* 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 QMK_KEYBOARD_H
|
||||||
|
|
||||||
|
//This is the ISO version of the PCB
|
||||||
|
|
||||||
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
[0] = LAYOUT_60_iso( /* Base */
|
||||||
|
KC_GESC, 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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
|
||||||
|
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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1) , KC_APP, KC_RCTL),
|
||||||
|
|
||||||
|
[1] = LAYOUT_60_iso( /* FN */
|
||||||
|
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_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET , \
|
||||||
|
KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, 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, RGB_SPI, RGB_SPD, KC_TRNS, KC_TRNS,\
|
||||||
|
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||||
|
};
|
||||||
|
|
||||||
|
void matrix_init_user(void) {
|
||||||
|
//user initialization
|
||||||
|
}
|
||||||
|
|
||||||
|
void matrix_scan_user(void) {
|
||||||
|
//user matrix
|
||||||
|
}
|
||||||
|
|
||||||
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
Loaded 100 of 394 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user