1
0
Fork 0

fixes s60_x keyboard

This commit is contained in:
Jack Humbert 2017-04-30 10:48:17 -04:00
parent 43aa59c703
commit d1d2b87f97
53 changed files with 44 additions and 31 deletions

View file

@ -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 = yes # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = no # 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.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View file

@ -0,0 +1,14 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
#include "../../config.h"
// keymap needs oneshot functionality
#undef NO_ACTION_ONESHOT
#undef IS_COMMAND
#define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
#endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 213 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View file

@ -0,0 +1,237 @@
/*
Copyright 2016 Julien Pecqueur <julien@peclu.net>
Copyright 2016 Felix Uhl <ifreilicht@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "s60_x.h"
//make keymap a little easier to read
#define _______ KC_TRNS
#define XXXXXXX KC_NO
#define ONESHOT_TAP_TOGGLE 2
#define ONESHOT_TIMEOUT 1
//uncomment to activate dead keys
//#define DONT_REVIVE_DEADKEYS 1
//Function keycodes for better readability
//SpaceFN
//OneShot LeftShift
//GamingMode Lock (disables SpaceFn and OneShot LShift)
//Function
//Mute microphone
#define KC_SPACEFN KC_FN0
#define KC_OSLS KC_FN3
#define KC_GMLK KC_FN1
#define KC_FUNC KC_FN2
#define MICMUTE RCTL(KC_LCTL)
enum function_codes {
F_SPACEFN = 0,
F_OSLS = 3,
F_GMLK = 1,
F_FUNC = 2
};
enum layer_names {
DEFAULT,
GAMING,
FUNCTION
};
enum languages {
GERMAN
};
#define LANGUAGE GERMAN
enum custom_keycodes {
KC_CM_A = SAFE_RANGE,
// KC_CM_B,
KC_CM_C,
// KC_CM_D,
KC_CM_E,
// KC_CM_F,
KC_CM_G,
// KC_CM_H,
KC_CM_I,
// KC_CM_J,
KC_CM_K,
KC_CM_L,
KC_CM_M,
KC_CM_N,
KC_CM_O,
KC_CM_P,
// KC_CM_Q,
KC_CM_R,
KC_CM_S,
// KC_CM_T,
KC_CM_U,
// KC_CM_V,
KC_CM_W,
// KC_CM_X,
KC_CM_Y,
KC_CM_Z
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layout 0: Default Layer
* ,-----------------------------------------------------------.
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \|Del|
* |-----------------------------------------------------------|
* |Tab | Q| W| E| R| T| Z| U| I| O| P| [| ]|BckSp|
* |-----------------------------------------------------------|
* |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return |
* |-----------------------------------------------------------|
* |Shift | Y| X| C| V| B| N| M| ,| .| /| Up |RSft|
* |-----------------------------------------------------------|
* |Fn2 |Gui |Alt | SpaceFn |Alt |Left|Down|Right|
* `-----------------------------------------------------------'
*/
[DEFAULT] = KEYMAP(
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_DEL, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Z, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
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_NUHS, KC_ENT, \
KC_LSFT, KC_NUBS, KC_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_UP, KC_RSFT, \
KC_FUNC, KC_LGUI, KC_LALT, KC_SPACEFN, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
),
/* Layout 1: Gaming Layer, SpaceFn disabled
* ,-----------------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------|
* | | | | | | | | | | | | | | |
* |-----------------------------------------------------------|
* | | | | | | | | | | | | | |
* |-----------------------------------------------------------|
* | | | | | | | | | | | | |Fn1 |
* |-----------------------------------------------------------|
* | |RSft| | Space | | | | |
* `-----------------------------------------------------------'
*/
[GAMING] = KEYMAP(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_GMLK, \
_______, KC_RSFT, _______, KC_SPC, _______, _______, _______, _______
),
/* Layout 2: Function Layer
* MicMute requires special software to be installed. Check readme.md for more information
* ,-----------------------------------------------------------.
* |` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|RES|
* |-----------------------------------------------------------|
* | | | | |Prv|Ply|Nxt| Ü | | Ö | |Prt|Slk|Pau |
* |-----------------------------------------------------------|
* | | Ä | ß | |Vl-|Mut|Vl+| | | | | |PEnt |
* |-----------------------------------------------------------|
* | | | | |MicMut|Cal| | | | |Pau |PUp |Fn1 |
* |-----------------------------------------------------------|
* | | | | | |Home|PDn |End |
* `-----------------------------------------------------------'
*/
[FUNCTION] = KEYMAP(
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_INS, RESET, \
_______, _______, KC_CM_W, KC_CM_E, KC_MPRV, KC_MPLY, KC_MNXT, KC_CM_U, KC_CM_I, KC_CM_O, KC_CM_P, KC_PSCR, KC_SLCK, KC_PAUS, \
_______, KC_CM_A, KC_CM_S, _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, KC_CM_K, KC_CM_L, _______, _______, _______, KC_PENT, \
_______, _______, KC_CM_Y, _______, KC_CM_C, MICMUTE, KC_CALC, KC_CM_N, KC_CM_M, _______, _______, _______, _______, KC_PGUP, KC_GMLK, \
_______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
),
};
/*
* Fn action definition
*/
const uint16_t PROGMEM fn_actions[] = {
[F_SPACEFN] = ACTION_LAYER_TAP_KEY(2, KC_SPACE), // SpaceFn layout 1
[F_GMLK] = ACTION_LAYER_TOGGLE(1), // Disable SpaceFn and Oneshot Shift
[F_FUNC] = ACTION_LAYER_MOMENTARY(2), // SpaceFn layout 1
[F_OSLS] = ACTION_MODS_ONESHOT(MOD_LSFT) // Oneshot Leftshift
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
return MACRO_NONE;
};
void matrix_init_user(void) {
}
void matrix_scan_user(void) {
}
bool process_german(uint16_t keycode, keyrecord_t *record) {
uint16_t send_code = 0;
if (record->event.pressed) {
switch (keycode) {
case KC_CM_A:
send_code = KC_Q;
break;
case KC_CM_O:
send_code = KC_P;
break;
case KC_CM_U:
send_code = KC_Y;
break;
case KC_CM_S:
send_code = KC_S;
break;
}
if (send_code == 0) {
return true;
}
else {
register_code(KC_RALT);
register_code(send_code);
unregister_code(send_code);
unregister_code(KC_RALT);
return false;
}
}
return true;
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
//revive dead keys
#ifndef DONT_REVIVE_DEADKEYS
bool shift_active = keyboard_report->mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_LSFT));
bool altgr_active = keyboard_report->mods & (MOD_BIT(KC_RALT));
if ((keycode == KC_QUOT && !altgr_active) ||
keycode == KC_GRV ||
(keycode == KC_6 && shift_active))
{
if (record->event.pressed) {
register_code(keycode);
unregister_code(keycode);
register_code(KC_SPACE);
unregister_code(KC_SPACE);
}
return false;
}
#endif
#if LANGUAGE == GERMAN
return process_german(keycode, record);
#else
return true;
#endif
}
void led_set_user(uint8_t usb_led) {
}

View file

@ -0,0 +1,94 @@
# ANSI_QWERTZ
[Click here to go to the layers directly.](readme.md#1-layers)
This keymap was specifically designed to support keycaps with ANSI layout and legends, while retaining the possibility of inputting characters
with diacritics that are normally not used in the english language.
It currently relies on the US-International keyboard layout, which can be installed in any current operating system without the use of third party hardware.
##0 Features
* Input of letters with diacritics on familiar QWERTZ layout
* Support for ANSI-legend keycaps
* Option to "revive" all dead keys
* Dedicated arrow cluster
* SpaceFN for easy access to Function keys and diacritic input
* Locking "Gaming Mode" that disables SpaceFN and allows to bind GUI key in Games
* Reset key binding, no need to press hardware reset button to program
* Microphone Mute key (requires 3rd-party software, see below)
###0.0 Languages
The US-International Layout is currently required for the support of non-english languages. This keymap swaps Y and Z to provide the familiar QWERTZ position for characters when using that layout.
All diacritic characters are input by either holding `Space` or `Fn` and pressing the corresponding key. For languages that aren't yet supported explicitly,
one can also use AltGr to input the characters as intended by the US-Intl layout or the dead keys, if they're kept from being [revived](readme.md#04-revive-dead-keys).
The illustration below shows the "US International" layout available in the Language settings of Windows, Linux and Mac OS.
![KB_US-International](docs/KB_US-International.png)
Not all languages are supported by this layout. Linux also offers the "US International Alternative" layout,
which contains more dead keys to input pretty much every diacritic character in a language using latin letters. More information can be found [here](http://web.archive.org/web/20160818101234/http://dry.sailingissues.com/us-international-keyboard-layout.html).
![KB_US-International-Alternative](docs/KB_US-International-Alternative.png)
####0.0.0 Explicitly Supported Languages
* German
####0.0.1 Implicitly Supported Languages
This list only applies to Windows. Linux systems support all languages, see above. This list might be incomplete! Please add your language if you find it's supported.
* French
###0.1 SpaceFN
SpaceFN basically means that `Space` acts as a normal spacebar when tapped, but acts as a layer-key when held down.
This means that you can't hold space to output multiple spaces consecutively and that space only registers once released.
The advantage is that the spacebar is easier to reach than any other `Fn`-key could be.
###0.2 "Gaming Mode"
To alleviate the problems SpaceFN would cause when gaming, the Gaming Mode is pretty much a layer that can be turned on by pressing Fn+RShift.
This will turn the double-role Spacebar into a normal one, so the Fn-layer (and thus function and media keys) can only be accessed with the Fn-key.
It also turns the GUI-key (aka Win-key aka Super-key) into Right Shift, so it can be bound in Games. This is especially useful when playing with ESDF instead of WASD.
###0.3 Mute Microphone
The function layer has a "Mute Microphone"-key. As this is not an existing media key and you can't normally set a shortcut to this function,
you need to set this up in software before using it, see below. This key is bound to `RCtrl+LCtrl`, a keycombination that
no other program in existence uses for anything, at least to my knowledge. It also can't be pressed with this keymap in any other way.
####0.3.0 Linux
Follow [these instructions](http://askubuntu.com/a/13364).
#####0.3.1 Windows (Requires 3rd Party Software)
*DISCLAIMER: I take no responsibility for any potential harm caused by third party applications!*
You'll need a utility called "MicMute". It is available on [Sourceforge](https://sourceforge.net/projects/micmute/).
After installing and running the tool, you only need to use the "Setup Shortcut" option to bind the key to muting the microphone
and check whether your microphone is selected under "Devices".
###0.4 Revive Dead Keys
Some diacritics that are commonly used are dead keys on the international layouts, for example `` ` ``, `'`, or `"`.
The dead keys on the regular international layout (shown in red [here](readme.md#00-languages)) are revived with this keymap by automatically inserting a space if one of those characters is typed.
If you don't want this to be the case, uncomment the following line in `keymap.c` prior to compiling:
```
//#define DONT_REVIVE_DEADKEYS 1
```
##1 Layers
###1.0 Base Layer
The base layer is shown here for ANSI keysm, HHKB-style right shift and split backspace. If you use a 2U backspace key there, `Del` will not be available.
Again, the Y and Z keys are swapped, so you get the QWERTZ-positions of Y and Z when using the US-International layout.
![base_layer](docs/base_layer.PNG)
###1.1 Gaming layer
To turn this layer on, please use the combination `Fn+RShift`, not `Space+RShift`. If you do the latter, the Function layer will become stuck. You can press `Fn` once to unstick it if this happens to you. A solution is being worked on.
![gaming_layer](docs/gaming_layer.PNG)
###1.2 Function Layer
This is the function layer for German diacritics. It can be accessed via the `Fn` or by holding `Space` on the base layer.
![function_layer](docs/function_layer.PNG)