~ruther/qmk_firmware

ad8dbd5ca5390ad9e441943b705684fce521bc15 — Joel Challis 6 years ago 237147c
ARM split - Add bootmagic/magic keycodes for setting handedness (#6545)

* Add docs on bootmagic/magic keycodes for setting handedness

* Clang format fixes

* Maintain backwards compatibility

* Maintain backwards compatibility
M docs/feature_bootmagic.md => docs/feature_bootmagic.md +6 -0
@@ 34,6 34,8 @@ Hold down the Bootmagic key (Space by default) and the desired hotkey while plug
|`X`               |Toggle key matrix debugging                  |
|`K`               |Toggle keyboard debugging                    |
|`M`               |Toggle mouse debugging                       |
|`L`               |Set "Left Hand" for EE_HANDS handedness      |
|`R`               |Set "Right Hand" for EE_HANDS handedness     |
|Backspace         |Clear the EEPROM                             |
|Caps Lock         |Toggle treating Caps Lock as Left Control    |
|Left Control      |Toggle swapping Caps Lock and Left Control   |


@@ 83,6 85,8 @@ Hold down the Bootmagic key (Space by default) and the desired hotkey while plug
|`MAGIC_UNSWAP_LCTL_LGUI`          |         |Unswap Left Control and Left GUI          |
|`MAGIC_SWAP_RCTL_RGUI`            |         |Swap Right Control and Right GUI          |
|`MAGIC_UNSWAP_RCTL_RGUI`          |         |Unswap Right Control and Right GUI        |
|`MAGIC_EE_HANDS_LEFT`             |         |Set "Left Hand" for EE_HANDS handedness   |
|`MAGIC_EE_HANDS_RIGHT`            |         |Set "Right Hand" for EE_HANDS handedness  |

## Configuration



@@ 98,6 102,8 @@ If you would like to change the hotkey assignments for Bootmagic, `#define` thes
|`BOOTMAGIC_KEY_DEBUG_MATRIX`            |`KC_X`       |Toggle matrix debugging                            |
|`BOOTMAGIC_KEY_DEBUG_KEYBOARD`          |`KC_K`       |Toggle keyboard debugging                          |
|`BOOTMAGIC_KEY_DEBUG_MOUSE`             |`KC_M`       |Toggle mouse debugging                             |
|`BOOTMAGIC_KEY_EE_HANDS_LEFT`           |`KC_L`       |Set "Left Hand" for EE_HANDS handedness            |
|`BOOTMAGIC_KEY_EE_HANDS_RIGHT`          |`KC_R`       |Set "Right Hand" for EE_HANDS handedness           |
|`BOOTMAGIC_KEY_SWAP_CONTROL_CAPSLOCK`   |`KC_LCTRL`   |Swap Left Control and Caps Lock                    |
|`BOOTMAGIC_KEY_CAPSLOCK_TO_CONTROL`     |`KC_CAPSLOCK`|Toggle treating Caps Lock as Left Control          |
|`BOOTMAGIC_KEY_SWAP_LALT_LGUI`          |`KC_LALT`    |Toggle swapping Left Alt and Left GUI (for macOS)  |

M docs/keycodes.md => docs/keycodes.md +30 -28
@@ 257,35 257,37 @@ This is a reference only. Each group of keys links to the page documenting their

## [Bootmagic](feature_bootmagic.md)

|Key                               |Aliases  |Description                         |
|----------------------------------|---------|------------------------------------|
|`MAGIC_SWAP_CONTROL_CAPSLOCK`     |         |Swap Caps Lock and Left Control     |
|`MAGIC_CAPSLOCK_TO_CONTROL`       |         |Treat Caps Lock as Control          |
|`MAGIC_SWAP_LCTL_LGUI`            |         |Swap Left Control and GUI           |
|`MAGIC_SWAP_RCTL_RGUI`            |         |Swap Right Control and GUI          |
|`MAGIC_SWAP_LALT_LGUI`            |         |Swap Left Alt and GUI               |
|`MAGIC_SWAP_RALT_RGUI`            |         |Swap Right Alt and GUI              |
|`MAGIC_NO_GUI`                    |         |Disable the GUI key                 |
|`MAGIC_SWAP_GRAVE_ESC`            |         |Swap <code>&#96;</code> and Escape  |
|`MAGIC_SWAP_BACKSLASH_BACKSPACE`  |         |Swap `\` and Backspace              |
|`MAGIC_HOST_NKRO`                 |         |Force NKRO on                       |
|`MAGIC_SWAP_ALT_GUI`              |`AG_SWAP`|Swap Alt and GUI on both sides      |
|Key                               |Aliases  |Description                                |
|----------------------------------|---------|-------------------------------------------|
|`MAGIC_SWAP_CONTROL_CAPSLOCK`     |         |Swap Caps Lock and Left Control            |
|`MAGIC_CAPSLOCK_TO_CONTROL`       |         |Treat Caps Lock as Control                 |
|`MAGIC_SWAP_LCTL_LGUI`            |         |Swap Left Control and GUI                  |
|`MAGIC_SWAP_RCTL_RGUI`            |         |Swap Right Control and GUI                 |
|`MAGIC_SWAP_LALT_LGUI`            |         |Swap Left Alt and GUI                      |
|`MAGIC_SWAP_RALT_RGUI`            |         |Swap Right Alt and GUI                     |
|`MAGIC_NO_GUI`                    |         |Disable the GUI key                        |
|`MAGIC_SWAP_GRAVE_ESC`            |         |Swap <code>&#96;</code> and Escape         |
|`MAGIC_SWAP_BACKSLASH_BACKSPACE`  |         |Swap `\` and Backspace                     |
|`MAGIC_HOST_NKRO`                 |         |Force NKRO on                              |
|`MAGIC_SWAP_ALT_GUI`              |`AG_SWAP`|Swap Alt and GUI on both sides             |
|`MAGIC_SWAP_CTL_GUI`              |`CG_SWAP`|Swap Ctrl and GUI on both sides (for macOS)|
|`MAGIC_UNSWAP_CONTROL_CAPSLOCK`   |         |Unswap Caps Lock and Left Control   |
|`MAGIC_UNCAPSLOCK_TO_CONTROL`     |         |Stop treating Caps Lock as Control  |
|`MAGIC_UNSWAP_LCTL_LGUI`          |         |Unswap Left Control and GUI         |
|`MAGIC_UNSWAP_RCTL_RGUI`          |         |Unswap Right Control and GUI        |
|`MAGIC_UNSWAP_LALT_LGUI`          |         |Unswap Left Alt and GUI             |
|`MAGIC_UNSWAP_RALT_RGUI`          |         |Unswap Right Alt and GUI            |
|`MAGIC_UNNO_GUI`                  |         |Enable the GUI key                  |
|`MAGIC_UNSWAP_GRAVE_ESC`          |         |Unswap <code>&#96;</code> and Escape|
|`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`|         |Unswap `\` and Backspace            |
|`MAGIC_UNHOST_NKRO`               |         |Force NKRO off                      |
|`MAGIC_UNSWAP_ALT_GUI`            |`AG_NORM`|Unswap Alt and GUI on both sides    |
|`MAGIC_UNSWAP_CTL_GUI`            |`CG_NORM`|Unswap Ctrl and GUI on both sides      |
|`MAGIC_TOGGLE_ALT_GUI`            |`AG_TOGG`|Toggle Alt and GUI swap on both sides  |
|`MAGIC_TOGGLE_CTL_GUI`            |`CG_TOGG`|Toggle Ctrl and GUI swap on both sides |
|`MAGIC_TOGGLE_NKRO`               |         |Turn NKRO on or off                    |
|`MAGIC_UNSWAP_CONTROL_CAPSLOCK`   |         |Unswap Caps Lock and Left Control          |
|`MAGIC_UNCAPSLOCK_TO_CONTROL`     |         |Stop treating Caps Lock as Control         |
|`MAGIC_UNSWAP_LCTL_LGUI`          |         |Unswap Left Control and GUI                |
|`MAGIC_UNSWAP_RCTL_RGUI`          |         |Unswap Right Control and GUI               |
|`MAGIC_UNSWAP_LALT_LGUI`          |         |Unswap Left Alt and GUI                    |
|`MAGIC_UNSWAP_RALT_RGUI`          |         |Unswap Right Alt and GUI                   |
|`MAGIC_UNNO_GUI`                  |         |Enable the GUI key                         |
|`MAGIC_UNSWAP_GRAVE_ESC`          |         |Unswap <code>&#96;</code> and Escape       |
|`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`|         |Unswap `\` and Backspace                   |
|`MAGIC_UNHOST_NKRO`               |         |Force NKRO off                             |
|`MAGIC_UNSWAP_ALT_GUI`            |`AG_NORM`|Unswap Alt and GUI on both sides           |
|`MAGIC_UNSWAP_CTL_GUI`            |`CG_NORM`|Unswap Ctrl and GUI on both sides          |
|`MAGIC_TOGGLE_ALT_GUI`            |`AG_TOGG`|Toggle Alt and GUI swap on both sides      |
|`MAGIC_TOGGLE_CTL_GUI`            |`CG_TOGG`|Toggle Ctrl and GUI swap on both sides     |
|`MAGIC_TOGGLE_NKRO`               |         |Turn NKRO on or off                        |
|`MAGIC_EE_HANDS_LEFT`             |         |Set "Left Hand" for EE_HANDS handedness    |
|`MAGIC_EE_HANDS_RIGHT`            |         |Set "Right Hand" for EE_HANDS handedness   |

## [Bluetooth](feature_bluetooth.md)


M quantum/quantum.c => quantum/quantum.c +7 -1
@@ 544,7 544,7 @@ bool process_record_quantum(keyrecord_t *record) {
#    endif
#endif
        case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_TOGGLE_ALT_GUI:
        case MAGIC_SWAP_LCTL_LGUI ... MAGIC_TOGGLE_CTL_GUI:
        case MAGIC_SWAP_LCTL_LGUI ... MAGIC_EE_HANDS_RIGHT:
            if (record->event.pressed) {
                // MAGIC actions (BOOTMAGIC without the boot)
                if (!eeconfig_is_enabled()) {


@@ 662,6 662,12 @@ bool process_record_quantum(keyrecord_t *record) {
                    case MAGIC_TOGGLE_NKRO:
                        keymap_config.nkro = !keymap_config.nkro;
                        break;
                    case MAGIC_EE_HANDS_LEFT:
                        eeconfig_update_handedness(true);
                        break;
                    case MAGIC_EE_HANDS_RIGHT:
                        eeconfig_update_handedness(false);
                        break;
                    default:
                        break;
                }

M quantum/quantum_keycodes.h => quantum/quantum_keycodes.h +2 -0
@@ 502,6 502,8 @@ enum quantum_keycodes {
    MAGIC_SWAP_CTL_GUI,
    MAGIC_UNSWAP_CTL_GUI,
    MAGIC_TOGGLE_CTL_GUI,
    MAGIC_EE_HANDS_LEFT,
    MAGIC_EE_HANDS_RIGHT,

    // always leave at the end
    SAFE_RANGE

M quantum/split_common/split_util.c => quantum/split_common/split_util.c +1 -2
@@ 7,7 7,6 @@
#include "quantum.h"

#ifdef EE_HANDS
#    include "tmk_core/common/eeprom.h"
#    include "eeconfig.h"
#endif



@@ 23,7 22,7 @@ __attribute__((weak)) bool is_keyboard_left(void) {
    setPinInput(SPLIT_HAND_PIN);
    return readPin(SPLIT_HAND_PIN);
#elif defined(EE_HANDS)
    return eeprom_read_byte(EECONFIG_HANDEDNESS);
    return eeconfig_read_handedness();
#elif defined(MASTER_RIGHT)
    return !is_keyboard_master();
#endif

M tmk_core/common/bootmagic.c => tmk_core/common/bootmagic.c +8 -0
@@ 122,6 122,14 @@ void bootmagic(void) {
        default_layer = eeconfig_read_default_layer();
        default_layer_set((layer_state_t)default_layer);
    }

    /* EE_HANDS handedness */
    if (bootmagic_scan_keycode(BOOTMAGIC_KEY_EE_HANDS_LEFT)) {
        eeconfig_update_handedness(true);
    }
    if (bootmagic_scan_keycode(BOOTMAGIC_KEY_EE_HANDS_RIGHT)) {
        eeconfig_update_handedness(false);
    }
}

/** \brief Scan Keycode

M tmk_core/common/bootmagic.h => tmk_core/common/bootmagic.h +6 -0
@@ 36,6 36,12 @@
#ifndef BOOTMAGIC_KEY_DEBUG_MOUSE
#    define BOOTMAGIC_KEY_DEBUG_MOUSE KC_M
#endif
#ifndef BOOTMAGIC_KEY_EE_HANDS_LEFT
#    define BOOTMAGIC_KEY_EE_HANDS_LEFT KC_L
#endif
#ifndef BOOTMAGIC_KEY_EE_HANDS_RIGHT
#    define BOOTMAGIC_KEY_EE_HANDS_RIGHT KC_R
#endif

/*
 * keymap config

M tmk_core/common/eeconfig.c => tmk_core/common/eeconfig.c +17 -2
@@ 153,8 153,8 @@ uint32_t eeconfig_read_kb(void) { return eeprom_read_dword(EECONFIG_KEYBOARD); }
 *
 * FIXME: needs doc
 */

void eeconfig_update_kb(uint32_t val) { eeprom_update_dword(EECONFIG_KEYBOARD, val); }

/** \brief eeconfig read user
 *
 * FIXME: needs doc


@@ 166,9 166,24 @@ uint32_t eeconfig_read_user(void) { return eeprom_read_dword(EECONFIG_USER); }
 */
void eeconfig_update_user(uint32_t val) { eeprom_update_dword(EECONFIG_USER, val); }

/** \brief eeconfig read haptic
 *
 * FIXME: needs doc
 */
uint32_t eeconfig_read_haptic(void) { return eeprom_read_dword(EECONFIG_HAPTIC); }
/** \brief eeconfig update user
/** \brief eeconfig update haptic
 *
 * FIXME: needs doc
 */
void eeconfig_update_haptic(uint32_t val) { eeprom_update_dword(EECONFIG_HAPTIC, val); }

/** \brief eeconfig read split handedness
 *
 * FIXME: needs doc
 */
bool eeconfig_read_handedness(void) { return !!eeprom_read_byte(EECONFIG_HANDEDNESS); }
/** \brief eeconfig update split handedness
 *
 * FIXME: needs doc
 */
void eeconfig_update_handedness(bool val) { eeprom_update_byte(EECONFIG_HANDEDNESS, !!val); }

M tmk_core/common/eeconfig.h => tmk_core/common/eeconfig.h +3 -0
@@ 107,4 107,7 @@ uint32_t eeconfig_read_haptic(void);
void     eeconfig_update_haptic(uint32_t val);
#endif

bool eeconfig_read_handedness(void);
void eeconfig_update_handedness(bool val);

#endif