Browse Source

handwired/arrow_pad Refactor and Configurator support (#4498)

* handwired/arrow_pad: layout macro and keymap refactor

- Layout macros moved from the keymaps to arrow_pad.h.
- LAYOUT_pad21 refactored to only accept keys that are physical present (no KC_NO entries required in keymap)
- Keymaps now use #include QMK_KEYBOARD_H
- Keymaps refactored to use process_record_user function (from action_get_macro)

* handwired/arrow_pad: Readme cleanup

Fixed the make commands and updated the layout macro.

* handwired/arrow_pad: Configurator support
pull/4499/head
noroadsleft 5 years ago
committed by MechMerlin
parent
commit
952a30ef34
6 changed files with 265 additions and 296 deletions
  1. +30
    -0
      keyboards/handwired/arrow_pad/arrow_pad.h
  2. +62
    -0
      keyboards/handwired/arrow_pad/info.json
  3. +52
    -94
      keyboards/handwired/arrow_pad/keymaps/default/keymap.c
  4. +63
    -102
      keyboards/handwired/arrow_pad/keymaps/pad_21/keymap.c
  5. +52
    -94
      keyboards/handwired/arrow_pad/keymaps/pad_24/keymap.c
  6. +6
    -6
      keyboards/handwired/arrow_pad/readme.md

+ 30
- 0
keyboards/handwired/arrow_pad/arrow_pad.h View File

@ -10,4 +10,34 @@
#include <avr/io.h> #include <avr/io.h>
#include <stddef.h> #include <stddef.h>
// This is the 21-key keypad to 4x6 element matrix mapping
#define LAYOUT( \
KM_ESC, KM_TAB, KM_BSL, KM_ARR, \
KM_NUM, KM_FSL, KM_AST, KM_MIN, \
KM___7, KM___8, KM___9, KM_EQU, \
KM___4, KM___5, KM___6, KM_PLS, \
KM___1, KM___2, KM___3, ___ENT, \
KM___0, _____0, KM_DOT, KM_ENT \
) { \
{ KM_ESC, KM_TAB, KM_BSL, KM_ARR }, \
{ KM_NUM, KM_FSL, KM_AST, KM_MIN }, \
{ KM___7, KM___8, KM___9, KM_EQU }, \
{ KM___4, KM___5, KM___6, KM_PLS }, \
{ KM___1, KM___2, KM___3, KC_NO }, \
{ KM___0, KC_NO, KM_DOT, KM_ENT } \
}
// This is the 21-key keypad to 2x11 element matrix mapping
#define LAYOUT_pad21( \
KM_ESC, KM_TAB, KM_BSL, KM_ARR, \
KM_NUM, KM_FSL, KM_AST, KM_MIN, \
KM___7, KM___8, KM___9, \
KM___4, KM___5, KM___6, KM_PLS, \
KM___1, KM___2, KM___3, \
KM___0, KM_DOT, KM_ENT \
) { \
{ KM_ESC, KM_TAB, KM_BSL, KM_ARR, KM___7, KM___8, KM___9, KM_PLS, KM___1, KM___2, KM___3, }, \
{ KM_NUM, KM_FSL, KM_AST, KM_MIN, KM___4, KM___5, KM___6, KM_ENT, KC_NO, KM___0, KM_DOT, }, \
}
#endif #endif

+ 62
- 0
keyboards/handwired/arrow_pad/info.json View File

@ -0,0 +1,62 @@
{
"keyboard_name": "arrow_pad",
"url": "",
"maintainer": "qmk",
"width": 4,
"height": 6,
"layouts": {
"LAYOUT": {
"layout": [
{"label":"KM_ESC", "x":0, "y":0},
{"label":"KM_TAB", "x":1, "y":0},
{"label":"KM_BSL", "x":2, "y":0},
{"label":"KM_ARR", "x":3, "y":0},
{"label":"KM_NUM", "x":0, "y":1},
{"label":"KM_FSL", "x":1, "y":1},
{"label":"KM_AST", "x":2, "y":1},
{"label":"KM_MIN", "x":3, "y":1},
{"label":"KM___7", "x":0, "y":2},
{"label":"KM___8", "x":1, "y":2},
{"label":"KM___9", "x":2, "y":2},
{"label":"KM_EQU", "x":3, "y":2},
{"label":"KM___4", "x":0, "y":3},
{"label":"KM___5", "x":1, "y":3},
{"label":"KM___6", "x":2, "y":3},
{"label":"KM_PLS", "x":3, "y":3},
{"label":"KM___1", "x":0, "y":4},
{"label":"KM___2", "x":1, "y":4},
{"label":"KM___3", "x":2, "y":4},
{"label":"___ENT", "x":3, "y":4},
{"label":"KM___0", "x":0, "y":5},
{"label":"_____0", "x":1, "y":5},
{"label":"KM_DOT", "x":2, "y":5},
{"label":"KM_ENT", "x":3, "y":5}
]
},
"LAYOUT_pad21": {
"layout": [
{"label":"KM_ESC", "x":0, "y":0},
{"label":"KM_TAB", "x":1, "y":0},
{"label":"KM_BSL", "x":2, "y":0},
{"label":"KM_ARR", "x":3, "y":0},
{"label":"KM_NUM", "x":0, "y":1},
{"label":"KM_FSL", "x":1, "y":1},
{"label":"KM_AST", "x":2, "y":1},
{"label":"KM_MIN", "x":3, "y":1},
{"label":"KM___7", "x":0, "y":2},
{"label":"KM___8", "x":1, "y":2},
{"label":"KM___9", "x":2, "y":2},
{"label":"KM___4", "x":0, "y":3},
{"label":"KM___5", "x":1, "y":3},
{"label":"KM___6", "x":2, "y":3},
{"label":"KM_PLS", "x":3, "y":2, "h":2},
{"label":"KM___1", "x":0, "y":4},
{"label":"KM___2", "x":1, "y":4},
{"label":"KM___3", "x":2, "y":4},
{"label":"KM___0", "x":0, "y":5, "w":2},
{"label":"KM_DOT", "x":2, "y":5},
{"label":"KM_ENT", "x":3, "y":4, "h":2}
]
}
}
}

+ 52
- 94
keyboards/handwired/arrow_pad/keymaps/default/keymap.c View File

@ -1,35 +1,18 @@
#include "arrow_pad.h"
#include QMK_KEYBOARD_H
#include "led.h" #include "led.h"
// This is the 21-key keypad to 2x11 element matrix mapping
#define LAYOUT( \
KM_ESC, KM_TAB, KM_BSL, KM_ARR, \
KM_NUM, KM_FSL, KM_AST, KM_MIN, \
KM___7, KM___8, KM___9, KM_EQU, \
KM___4, KM___5, KM___6, KM_PLS, \
KM___1, KM___2, KM___3, ___ENT, \
KM___0, _____0, KM_DOT, KM_ENT \
) { \
{ KM_ESC, KM_TAB, KM_BSL, KM_ARR }, \
{ KM_NUM, KM_FSL, KM_AST, KM_MIN }, \
{ KM___7, KM___8, KM___9, KM_EQU }, \
{ KM___4, KM___5, KM___6, KM_PLS }, \
{ KM___1, KM___2, KM___3, KC_NO }, \
{ KM___0, KC_NO, KM_DOT, KM_ENT } \
}
#define LAYER_BASE 0
#define LAYER_EDIT 1
#define LAYER_FUNCTION 2
#define MACRO_COPY_CUT 0
#define MACRO_SHIFT_CONTROL 1
#define MACRO_CONTROL_ALT 2
enum layers {
LAYER_BASE,
LAYER_EDIT,
LAYER_FUNCTION
};
#define M_COPY KC_FN5
#define M_SHFCT KC_FN6
#define M_CTALT KC_FN7
enum custom_keycodes {
M_COPY = SAFE_RANGE, // KC_FN5: MACRO_COPY_CUT
M_SHFCT, // KC_FN6: MACRO_SHIFT_CONTROL
M_CTALT // KC_FN7: MACRO_CONTROL_ALT
};
#define SC_UNDO LCTL(KC_Z) #define SC_UNDO LCTL(KC_Z)
#define SC_REDO LCTL(KC_Y) #define SC_REDO LCTL(KC_Y)
@ -42,13 +25,10 @@
#define SC_ACLS LALT(KC_F4) #define SC_ACLS LALT(KC_F4)
#define SC_CCLS LCTL(KC_F4) #define SC_CCLS LCTL(KC_F4)
#define _______ KC_TRNS
#define XXXXXXX KC_NO
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[LAYER_BASE] = LAYOUT( \ [LAYER_BASE] = LAYOUT( \
KC_ESC, KC_TAB, KC_BSLS, KC_FN0, \
KC_ESC, KC_TAB, KC_BSLS, MO(2), \
KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
KC_P7, KC_P8, KC_P9, KC_PEQL, \ KC_P7, KC_P8, KC_P9, KC_PEQL, \
KC_P4, KC_P5, KC_P6, KC_PPLS, \ KC_P4, KC_P5, KC_P6, KC_PPLS, \
@ -57,15 +37,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[LAYER_EDIT] = LAYOUT( \ [LAYER_EDIT] = LAYOUT( \
KC_ESC, KC_TAB, KC_SPC, _______, \ KC_ESC, KC_TAB, KC_SPC, _______, \
KC_FN1, SC_PSTE, SC_REDO, SC_UNDO, \
TG(1), SC_PSTE, SC_REDO, SC_UNDO, \
KC_HOME, KC_UP, KC_PGUP, KC_LALT, \ KC_HOME, KC_UP, KC_PGUP, KC_LALT, \
KC_LEFT, M_COPY, KC_RGHT, KC_LCTL, \ KC_LEFT, M_COPY, KC_RGHT, KC_LCTL, \
KC_END, KC_DOWN, KC_PGDN, XXXXXXX, \ KC_END, KC_DOWN, KC_PGDN, XXXXXXX, \
KC_BSPC, KC_PENT, KC_DEL, M_SHFCT),
KC_BSPC, KC_PENT, KC_DEL, M_SHFCT ),
[LAYER_FUNCTION] = LAYOUT( \ [LAYER_FUNCTION] = LAYOUT( \
KC_FN2, KC_FN3, KC_FN4, _______, \
KC_FN1, _______, _______, _______, \
BL_TOGG, BL_INC, BL_DEC, _______, \
TG(1), _______, _______, _______, \
_______, _______, _______, _______, \ _______, _______, _______, _______, \
_______, _______, _______, _______, \ _______, _______, _______, _______, \
_______, _______, _______, XXXXXXX, \ _______, _______, _______, XXXXXXX, \
@ -74,68 +54,46 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
}; };
const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_LAYER_MOMENTARY(LAYER_FUNCTION),
[1] = ACTION_LAYER_TOGGLE(LAYER_EDIT),
[2] = ACTION_BACKLIGHT_TOGGLE(),
[3] = ACTION_BACKLIGHT_INCREASE(),
[4] = ACTION_BACKLIGHT_DECREASE(),
[5] = ACTION_MACRO_TAP(MACRO_COPY_CUT),
[6] = ACTION_MACRO_TAP(MACRO_SHIFT_CONTROL),
[7] = ACTION_MACRO_TAP(MACRO_CONTROL_ALT),
};
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
{
}
bool process_record_user(uint16_t keycode, keyrecord_t * record) {
// MACRODOWN only works in this function
switch (keycode) {
case M_COPY:
if (record->event.pressed) {
register_code(KC_LCTL);
if (record->tap.count == 1) {
register_code(KC_C);
unregister_code(KC_C);
} else if (record->tap.count == 2) {
register_code(KC_X);
unregister_code(KC_X);
}
unregister_code(KC_LCTL);
}
break;
case M_SHFCT:
if (record->event.pressed) {
if (record->tap.count <= 2) register_mods(MOD_BIT(KC_LSFT));
if (record->tap.count == 2) register_mods(MOD_BIT(KC_LCTL));
if (record->tap.count == 3) register_code(KC_PENT);;
} else {
unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL));
unregister_code(KC_PENT);
}
break;
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch (id) {
case MACRO_COPY_CUT:
if (record->event.pressed) {
register_code(KC_LCTL);
if (record->tap.count == 1) {
register_code(KC_C);
unregister_code(KC_C);
}
else if (record->tap.count == 2) {
register_code(KC_X);
unregister_code(KC_X);
}
unregister_code(KC_LCTL);
}
break;
case MACRO_SHIFT_CONTROL:
if (record->event.pressed) {
if (record->tap.count <= 2) register_mods(MOD_BIT(KC_LSFT));
if (record->tap.count == 2) register_mods(MOD_BIT(KC_LCTL));
if (record->tap.count == 3) register_code(KC_PENT);;
}
else {
unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL));
unregister_code(KC_PENT);
}
break;
case MACRO_CONTROL_ALT:
if (record->event.pressed) {
if (record->tap.count < 2) register_mods(MOD_BIT(KC_LCTL));
if (record->tap.count >= 2) register_mods(MOD_BIT(KC_LALT));
}
else {
unregister_mods(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT));
}
break;
case M_CTALT:
if (record->event.pressed) {
if (record->tap.count < 2) register_mods(MOD_BIT(KC_LCTL));
if (record->tap.count >= 2) register_mods(MOD_BIT(KC_LALT));
} else {
unregister_mods(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT));
} }
break;
}
return MACRO_NONE;
return true;
} }
void led_set_user(uint8_t usb_led) void led_set_user(uint8_t usb_led)


+ 63
- 102
keyboards/handwired/arrow_pad/keymaps/pad_21/keymap.c View File

@ -1,32 +1,18 @@
#include "arrow_pad.h"
#include QMK_KEYBOARD_H
#include "led.h" #include "led.h"
// This is the 21-key keypad to 2x11 element matrix mapping
#define LAYOUT( \
KM_ESC, KM_TAB, KM_BSL, KM_ARR, \
KM_NUM, KM_FSL, KM_AST, KM_MIN, \
KM___7, KM___8, KM___9, ___PLS, \
KM___4, KM___5, KM___6, KM_PLS, \
KM___1, KM___2, KM___3, ___ENT, \
KM___0, _____0, KM_DOT, KM_ENT \
) { \
{ KM_ESC, KM_TAB, KM_BSL, KM_ARR, KM___7, KM___8, KM___9, KM_PLS, KM___1, KM___2, KM___3, }, \
{ KM_NUM, KM_FSL, KM_AST, KM_MIN, KM___4, KM___5, KM___6, KM_ENT, KC_NO, KM___0, KM_DOT, }, \
}
#define LAYER_BASE 0
#define LAYER_EDIT 1
#define LAYER_FUNCTION 2
#define MACRO_COPY_CUT 0
#define MACRO_SHIFT_CONTROL 1
#define MACRO_CONTROL_ALT 2
enum layers {
LAYER_BASE,
LAYER_EDIT,
LAYER_FUNCTION
};
#define M_COPY KC_FN5
#define M_SHFCT KC_FN6
#define M_CTALT KC_FN7
enum custom_keycodes {
M_COPY = SAFE_RANGE, // KC_FN5: MACRO_COPY_CUT
M_SHFCT, // KC_FN6: MACRO_SHIFT_CONTROL
M_CTALT // KC_FN7: MACRO_CONTROL_ALT
};
#define SC_UNDO LCTL(KC_Z) #define SC_UNDO LCTL(KC_Z)
#define SC_REDO LCTL(KC_Y) #define SC_REDO LCTL(KC_Y)
@ -39,100 +25,75 @@
#define SC_ACLS LALT(KC_F4) #define SC_ACLS LALT(KC_F4)
#define SC_CCLS LCTL(KC_F4) #define SC_CCLS LCTL(KC_F4)
#define _______ KC_TRNS
#define XXXXXXX KC_NO
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[LAYER_BASE] = LAYOUT( \
KC_ESC, KC_TAB, KC_BSLS, KC_FN0, \
[LAYER_BASE] = LAYOUT_pad21( \
KC_ESC, KC_TAB, KC_BSLS, MO(2), \
KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
KC_P7, KC_P8, KC_P9, XXXXXXX, \
KC_P7, KC_P8, KC_P9, \
KC_P4, KC_P5, KC_P6, KC_PPLS, \ KC_P4, KC_P5, KC_P6, KC_PPLS, \
KC_P1, KC_P2, KC_P3, XXXXXXX, \
KC_P0, XXXXXXX, KC_PDOT, KC_PENT ),
KC_P1, KC_P2, KC_P3, \
KC_P0, KC_PDOT, KC_PENT ),
[LAYER_EDIT] = LAYOUT( \
[LAYER_EDIT] = LAYOUT_pad21( \
KC_ESC, KC_TAB, KC_SPC, _______, \ KC_ESC, KC_TAB, KC_SPC, _______, \
KC_FN1, SC_PSTE, SC_REDO, SC_UNDO, \
KC_HOME, KC_UP, KC_PGUP, XXXXXXX, \
TG(1), SC_PSTE, SC_REDO, SC_UNDO, \
KC_HOME, KC_UP, KC_PGUP, \
KC_LEFT, M_COPY, KC_RGHT, M_CTALT, \ KC_LEFT, M_COPY, KC_RGHT, M_CTALT, \
KC_END, KC_DOWN, KC_PGDN, XXXXXXX, \
KC_BSPC, XXXXXXX, KC_DEL, M_SHFCT),
KC_END, KC_DOWN, KC_PGDN, \
KC_BSPC, KC_DEL, M_SHFCT),
[LAYER_FUNCTION] = LAYOUT( \
KC_FN2, KC_FN3, KC_FN4, _______, \
KC_FN1, _______, _______, _______, \
_______, _______, _______, XXXXXXX, \
[LAYER_FUNCTION] = LAYOUT_pad21( \
BL_TOGG, BL_INC, BL_DEC, _______, \
TG(1), _______, _______, _______, \
_______, _______, _______, \
_______, _______, _______, _______, \ _______, _______, _______, _______, \
_______, _______, _______, XXXXXXX, \
RESET, XXXXXXX, _______, _______ ),
};
const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_LAYER_MOMENTARY(LAYER_FUNCTION),
[1] = ACTION_LAYER_TOGGLE(LAYER_EDIT),
[2] = ACTION_BACKLIGHT_TOGGLE(),
[3] = ACTION_BACKLIGHT_INCREASE(),
[4] = ACTION_BACKLIGHT_DECREASE(),
[5] = ACTION_MACRO_TAP(MACRO_COPY_CUT),
[6] = ACTION_MACRO_TAP(MACRO_SHIFT_CONTROL),
[7] = ACTION_MACRO_TAP(MACRO_CONTROL_ALT),
_______, _______, _______, \
RESET, _______, _______ ),
}; };
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
{
}
bool process_record_user(uint16_t keycode, keyrecord_t * record) {
// MACRODOWN only works in this function
switch (keycode) {
case M_COPY:
if (record->event.pressed) {
register_code(KC_LCTL);
if (record->tap.count == 1) {
register_code(KC_C);
unregister_code(KC_C);
} else if (record->tap.count == 2) {
register_code(KC_X);
unregister_code(KC_X);
}
unregister_code(KC_LCTL);
}
break;
case M_SHFCT:
if (record->event.pressed) {
if (record->tap.count <= 2) register_mods(MOD_BIT(KC_LSFT));
if (record->tap.count == 2) register_mods(MOD_BIT(KC_LCTL));
if (record->tap.count == 3) register_code(KC_PENT);;
} else {
unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL));
unregister_code(KC_PENT);
}
break;
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch (id) {
case MACRO_COPY_CUT:
if (record->event.pressed) {
register_code(KC_LCTL);
if (record->tap.count == 1) {
register_code(KC_C);
unregister_code(KC_C);
}
else if (record->tap.count == 2) {
register_code(KC_X);
unregister_code(KC_X);
}
unregister_code(KC_LCTL);
}
break;
case MACRO_SHIFT_CONTROL:
if (record->event.pressed) {
if (record->tap.count <= 2) register_mods(MOD_BIT(KC_LSFT));
if (record->tap.count == 2) register_mods(MOD_BIT(KC_LCTL));
if (record->tap.count == 3) register_code(KC_PENT);;
}
else {
unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL));
unregister_code(KC_PENT);
}
break;
case MACRO_CONTROL_ALT:
if (record->event.pressed) {
if (record->tap.count < 2) register_mods(MOD_BIT(KC_LCTL));
if (record->tap.count >= 2) register_mods(MOD_BIT(KC_LALT));
}
else {
unregister_mods(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT));
}
break;
case M_CTALT:
if (record->event.pressed) {
if (record->tap.count < 2) register_mods(MOD_BIT(KC_LCTL));
if (record->tap.count >= 2) register_mods(MOD_BIT(KC_LALT));
} else {
unregister_mods(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT));
} }
break;
}
return MACRO_NONE;
return true;
} }
void led_set_user(uint8_t usb_led) void led_set_user(uint8_t usb_led)


+ 52
- 94
keyboards/handwired/arrow_pad/keymaps/pad_24/keymap.c View File

@ -1,35 +1,18 @@
#include "arrow_pad.h"
#include QMK_KEYBOARD_H
#include "led.h" #include "led.h"
// This is the 21-key keypad to 2x11 element matrix mapping
#define LAYOUT( \
KM_ESC, KM_TAB, KM_BSL, KM_ARR, \
KM_NUM, KM_FSL, KM_AST, KM_MIN, \
KM___7, KM___8, KM___9, KM_EQU, \
KM___4, KM___5, KM___6, KM_PLS, \
KM___1, KM___2, KM___3, ___ENT, \
KM___0, _____0, KM_DOT, KM_ENT \
) { \
{ KM_ESC, KM_TAB, KM_BSL, KM_ARR }, \
{ KM_NUM, KM_FSL, KM_AST, KM_MIN }, \
{ KM___7, KM___8, KM___9, KM_EQU }, \
{ KM___4, KM___5, KM___6, KM_PLS }, \
{ KM___1, KM___2, KM___3, KC_NO }, \
{ KM___0, KC_NO, KM_DOT, KM_ENT } \
}
#define LAYER_BASE 0
#define LAYER_EDIT 1
#define LAYER_FUNCTION 2
#define MACRO_COPY_CUT 0
#define MACRO_SHIFT_CONTROL 1
#define MACRO_CONTROL_ALT 2
enum layers {
LAYER_BASE,
LAYER_EDIT,
LAYER_FUNCTION
};
#define M_COPY KC_FN5
#define M_SHFCT KC_FN6
#define M_CTALT KC_FN7
enum custom_keycodes {
M_COPY = SAFE_RANGE, // KC_FN5: MACRO_COPY_CUT
M_SHFCT, // KC_FN6: MACRO_SHIFT_CONTROL
M_CTALT // KC_FN7: MACRO_CONTROL_ALT
};
#define SC_UNDO LCTL(KC_Z) #define SC_UNDO LCTL(KC_Z)
#define SC_REDO LCTL(KC_Y) #define SC_REDO LCTL(KC_Y)
@ -42,13 +25,10 @@
#define SC_ACLS LALT(KC_F4) #define SC_ACLS LALT(KC_F4)
#define SC_CCLS LCTL(KC_F4) #define SC_CCLS LCTL(KC_F4)
#define _______ KC_TRNS
#define XXXXXXX KC_NO
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[LAYER_BASE] = LAYOUT( \ [LAYER_BASE] = LAYOUT( \
KC_ESC, KC_TAB, KC_BSLS, KC_FN0, \
KC_ESC, KC_TAB, KC_BSLS, MO(2), \
KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
KC_P7, KC_P8, KC_P9, KC_PEQL, \ KC_P7, KC_P8, KC_P9, KC_PEQL, \
KC_P4, KC_P5, KC_P6, KC_PPLS, \ KC_P4, KC_P5, KC_P6, KC_PPLS, \
@ -57,15 +37,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[LAYER_EDIT] = LAYOUT( \ [LAYER_EDIT] = LAYOUT( \
KC_ESC, KC_TAB, KC_SPC, _______, \ KC_ESC, KC_TAB, KC_SPC, _______, \
KC_FN1, SC_PSTE, SC_REDO, SC_UNDO, \
TG(1), SC_PSTE, SC_REDO, SC_UNDO, \
KC_HOME, KC_UP, KC_PGUP, KC_LALT, \ KC_HOME, KC_UP, KC_PGUP, KC_LALT, \
KC_LEFT, M_COPY, KC_RGHT, KC_LCTL, \ KC_LEFT, M_COPY, KC_RGHT, KC_LCTL, \
KC_END, KC_DOWN, KC_PGDN, XXXXXXX, \ KC_END, KC_DOWN, KC_PGDN, XXXXXXX, \
KC_BSPC, KC_PENT, KC_DEL, M_SHFCT),
KC_BSPC, KC_PENT, KC_DEL, M_SHFCT ),
[LAYER_FUNCTION] = LAYOUT( \ [LAYER_FUNCTION] = LAYOUT( \
KC_FN2, KC_FN3, KC_FN4, _______, \
KC_FN1, _______, _______, _______, \
BL_TOGG, BL_INC, BL_DEC, _______, \
TG(1), _______, _______, _______, \
_______, _______, _______, _______, \ _______, _______, _______, _______, \
_______, _______, _______, _______, \ _______, _______, _______, _______, \
_______, _______, _______, XXXXXXX, \ _______, _______, _______, XXXXXXX, \
@ -74,68 +54,46 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
}; };
const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_LAYER_MOMENTARY(LAYER_FUNCTION),
[1] = ACTION_LAYER_TOGGLE(LAYER_EDIT),
[2] = ACTION_BACKLIGHT_TOGGLE(),
[3] = ACTION_BACKLIGHT_INCREASE(),
[4] = ACTION_BACKLIGHT_DECREASE(),
[5] = ACTION_MACRO_TAP(MACRO_COPY_CUT),
[6] = ACTION_MACRO_TAP(MACRO_SHIFT_CONTROL),
[7] = ACTION_MACRO_TAP(MACRO_CONTROL_ALT),
};
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
{
}
bool process_record_user(uint16_t keycode, keyrecord_t * record) {
// MACRODOWN only works in this function
switch (keycode) {
case M_COPY:
if (record->event.pressed) {
register_code(KC_LCTL);
if (record->tap.count == 1) {
register_code(KC_C);
unregister_code(KC_C);
} else if (record->tap.count == 2) {
register_code(KC_X);
unregister_code(KC_X);
}
unregister_code(KC_LCTL);
}
break;
case M_SHFCT:
if (record->event.pressed) {
if (record->tap.count <= 2) register_mods(MOD_BIT(KC_LSFT));
if (record->tap.count == 2) register_mods(MOD_BIT(KC_LCTL));
if (record->tap.count == 3) register_code(KC_PENT);;
} else {
unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL));
unregister_code(KC_PENT);
}
break;
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch (id) {
case MACRO_COPY_CUT:
if (record->event.pressed) {
register_code(KC_LCTL);
if (record->tap.count == 1) {
register_code(KC_C);
unregister_code(KC_C);
}
else if (record->tap.count == 2) {
register_code(KC_X);
unregister_code(KC_X);
}
unregister_code(KC_LCTL);
}
break;
case MACRO_SHIFT_CONTROL:
if (record->event.pressed) {
if (record->tap.count <= 2) register_mods(MOD_BIT(KC_LSFT));
if (record->tap.count == 2) register_mods(MOD_BIT(KC_LCTL));
if (record->tap.count == 3) register_code(KC_PENT);;
}
else {
unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL));
unregister_code(KC_PENT);
}
break;
case MACRO_CONTROL_ALT:
if (record->event.pressed) {
if (record->tap.count < 2) register_mods(MOD_BIT(KC_LCTL));
if (record->tap.count >= 2) register_mods(MOD_BIT(KC_LALT));
}
else {
unregister_mods(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT));
}
break;
case M_CTALT:
if (record->event.pressed) {
if (record->tap.count < 2) register_mods(MOD_BIT(KC_LCTL));
if (record->tap.count >= 2) register_mods(MOD_BIT(KC_LALT));
} else {
unregister_mods(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT));
} }
break;
}
return MACRO_NONE;
return true;
} }
void led_set_user(uint8_t usb_led) void led_set_user(uint8_t usb_led)


+ 6
- 6
keyboards/handwired/arrow_pad/readme.md View File

@ -94,13 +94,13 @@ More info can be found on [GeekHack](https://geekhack.org/index.php?topic=73632.
The second ArrowPad was a conversion from a 21-key Genovation keypad. It used a 2 row x 11 column matrix. The second ArrowPad was a conversion from a 21-key Genovation keypad. It used a 2 row x 11 column matrix.
``` ```
#define KEYMAP( \
#define LAYOUT_pad21( \
KM_ESC, KM_TAB, KM_BSL, KM_ARR, \ KM_ESC, KM_TAB, KM_BSL, KM_ARR, \
KM_NUM, KM_FSL, KM_AST, KM_MIN, \ KM_NUM, KM_FSL, KM_AST, KM_MIN, \
KM___7, KM___8, KM___9, ___PLS, \
KM___7, KM___8, KM___9, \
KM___4, KM___5, KM___6, KM_PLS, \ KM___4, KM___5, KM___6, KM_PLS, \
KM___1, KM___2, KM___3, ___ENT, \
KM___0, _____0, KM_DOT, KM_ENT \
KM___1, KM___2, KM___3, \
KM___0, KM_DOT, KM_ENT \
) { \ ) { \
{ KM_ESC, KM_TAB, KM_BSL, KM_ARR, KM___7, KM___8, KM___9, KM_PLS, KM___1, KM___2, KM___3, }, \ { KM_ESC, KM_TAB, KM_BSL, KM_ARR, KM___7, KM___8, KM___9, KM_PLS, KM___1, KM___2, KM___3, }, \
{ KM_NUM, KM_FSL, KM_AST, KM_MIN, KM___4, KM___5, KM___6, KM_ENT, KC_NO, KM___0, KM_DOT, }, \ { KM_NUM, KM_FSL, KM_AST, KM_MIN, KM___4, KM___5, KM___6, KM_ENT, KC_NO, KM___0, KM_DOT, }, \
@ -119,7 +119,7 @@ Download or clone the whole firmware and navigate to the keyboards/arrow_pad fol
Depending on which keymap you would like to use, you will have to compile slightly differently. Depending on which keymap you would like to use, you will have to compile slightly differently.
### Default ### Default
To build with the default keymap, simply run `make default`.
To build with the default keymap, simply run `make handwired/arrow_pad:default`.
### Other Keymaps ### Other Keymaps
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top readme.md) and existent keymap files. Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top readme.md) and existent keymap files.
@ -127,7 +127,7 @@ Several version of keymap are available in advance but you are recommended to de
To build the firmware binary hex file with a keymap just do `make` with a keymap like this: To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
``` ```
$ make [default|pad_21|pad_24|<name>]
$ make handwired/arrow_pad:[default|pad_21|pad_24|<name>]
``` ```
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder. Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.

Loading…
Cancel
Save