[Keyboard] Added French layer to handwired/2x5keypad (#7313)
* Added new 2x5 Keypad with 3 LEDs to indicate the selected layer. By Jonathan Cameron. * Minor refactor from suggestions from qmk team * Added * Moved to 'handwired' directory * Update readme.md * Update readme.md * Update readme.md * Update keyboards/handwired/2x5keypad/readme.md Co-Authored-By: fauxpark <fauxpark@gmail.com> * Switch to image offsite * Moved image offsite * Update keyboards/handwired/2x5keypad/keymaps/default/keymap.h Co-Authored-By: fauxpark <fauxpark@gmail.com> * Update keyboards/handwired/2x5keypad/2x5keypad.h Co-Authored-By: fauxpark <fauxpark@gmail.com> * Moved functions into .c file per suggestions * Cosmetic * Fixed function called, per suggestions. * Update keyboards/handwired/2x5keypad/2x5keypad.h Ok Co-Authored-By: fauxpark <fauxpark@gmail.com> * Moved LED functions to the top level since they can be used it various flavors * Declare those moved LED functions! * Update keyboards/handwired/2x5keypad/config.h Co-Authored-By: Drashna Jaelre <drashna@live.com> * First cut at French support * Added French layer (green) for accented and special French characters * Added french layer * Fixed typo * Updated to get more reasonable tap function
This commit is contained in:
parent
b2b947f815
commit
1d550552ca
3 changed files with 124 additions and 25 deletions
|
@ -37,6 +37,9 @@
|
|||
/* Locking resynchronize hack */
|
||||
#define LOCKING_RESYNC_ENABLE
|
||||
|
||||
/* Tap dancing params */
|
||||
#define TAPPING_TERM 250
|
||||
|
||||
/* key combination for command */
|
||||
/* DISABLED
|
||||
#define IS_COMMAND() ( \
|
||||
|
@ -44,9 +47,6 @@
|
|||
)
|
||||
*/
|
||||
|
||||
/* prevent stuck modifiers */
|
||||
|
||||
|
||||
#ifdef RGB_DI_PIN
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 0
|
||||
|
|
|
@ -7,27 +7,116 @@ enum layers {
|
|||
NORMAL_LAYER = 0,
|
||||
MEDIA_LAYER,
|
||||
TBD_LAYER2,
|
||||
TBD_LAYER3
|
||||
FRENCH_LAYER
|
||||
};
|
||||
|
||||
|
||||
/* Enum for the tap dancing keys */
|
||||
enum tap_codes {
|
||||
A_Q, E_Q, E_U, E_E,
|
||||
A_Y, I_I, O_C, U_U
|
||||
};
|
||||
|
||||
#define FR_A_GRAVE "00E0"
|
||||
#define FR_A_HAT "00E2"
|
||||
|
||||
#define FR_C_CIRCUM "00E7"
|
||||
|
||||
#define FR_E_AIGU "00E9"
|
||||
#define FR_E_GRAVE "00E8"
|
||||
#define FR_E_HAT "00EA"
|
||||
#define FR_E_UMLAUT "00EB"
|
||||
|
||||
#define FR_I_HAT "00EE"
|
||||
#define FR_I_UMLAUT "00EF"
|
||||
|
||||
#define FR_O_HAT "00F4"
|
||||
|
||||
#define FR_U_GRAVE "00F9"
|
||||
#define FR_U_HAT "00FB"
|
||||
#define FR_U_UMLAUT "00FC"
|
||||
|
||||
#define FR_Y_UMLAUT "00FF"
|
||||
|
||||
#define FR_L_QUOTE "00AB"
|
||||
#define FR_R_QUOTE "00BB"
|
||||
|
||||
void send_french_unicode_char(uint8_t count, char *once, char *twice)
|
||||
{
|
||||
if (count <= 1)
|
||||
send_unicode_hex_string(once);
|
||||
else
|
||||
send_unicode_hex_string(twice);
|
||||
}
|
||||
|
||||
void dance_a_q(qk_tap_dance_state_t *state, void *user_data)
|
||||
{
|
||||
send_french_unicode_char(state->count, FR_A_GRAVE, FR_L_QUOTE);
|
||||
}
|
||||
|
||||
void dance_e_q(qk_tap_dance_state_t *state, void *user_data)
|
||||
{
|
||||
send_french_unicode_char(state->count, FR_E_AIGU, FR_R_QUOTE);
|
||||
}
|
||||
|
||||
void dance_e_u(qk_tap_dance_state_t *state, void *user_data)
|
||||
{
|
||||
send_french_unicode_char(state->count, FR_E_GRAVE, FR_U_GRAVE);
|
||||
}
|
||||
|
||||
void dance_e_e(qk_tap_dance_state_t *state, void *user_data)
|
||||
{
|
||||
send_french_unicode_char(state->count, FR_E_HAT, FR_E_UMLAUT);
|
||||
}
|
||||
|
||||
void dance_a_y(qk_tap_dance_state_t *state, void *user_data)
|
||||
{
|
||||
send_french_unicode_char(state->count, FR_A_HAT, FR_Y_UMLAUT);
|
||||
}
|
||||
|
||||
void dance_i_i(qk_tap_dance_state_t *state, void *user_data)
|
||||
{
|
||||
send_french_unicode_char(state->count, FR_I_HAT, FR_I_UMLAUT);
|
||||
}
|
||||
|
||||
void dance_o_c(qk_tap_dance_state_t *state, void *user_data)
|
||||
{
|
||||
send_french_unicode_char(state->count, FR_O_HAT, FR_C_CIRCUM);
|
||||
}
|
||||
|
||||
void dance_u_u(qk_tap_dance_state_t *state, void *user_data)
|
||||
{
|
||||
send_french_unicode_char(state->count, FR_U_HAT, FR_U_UMLAUT);
|
||||
}
|
||||
|
||||
/* Define the tap dance actions for the french characters */
|
||||
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||
[A_Q] = ACTION_TAP_DANCE_FN(dance_a_q),
|
||||
[E_Q] = ACTION_TAP_DANCE_FN(dance_e_q),
|
||||
[E_U] = ACTION_TAP_DANCE_FN(dance_e_u),
|
||||
[E_E] = ACTION_TAP_DANCE_FN(dance_e_e),
|
||||
|
||||
[A_Y] = ACTION_TAP_DANCE_FN(dance_a_y),
|
||||
[I_I] = ACTION_TAP_DANCE_FN(dance_i_i),
|
||||
[O_C] = ACTION_TAP_DANCE_FN(dance_o_c),
|
||||
[U_U] = ACTION_TAP_DANCE_FN(dance_u_u)
|
||||
};
|
||||
|
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[NORMAL_LAYER]=
|
||||
LAYOUT(TO(1), WIN_TAB, KC_HOME, KC_UP, KC_END,
|
||||
WIN_LOCK, KC_MUTE, KC_LEFT, KC_DOWN, KC_RGHT),
|
||||
[NORMAL_LAYER] = LAYOUT(TO(1), WIN_TAB, KC_HOME, KC_UP, KC_END,
|
||||
WIN_LOCK, KC_MUTE, KC_LEFT, KC_DOWN, KC_RGHT),
|
||||
|
||||
[MEDIA_LAYER]=
|
||||
LAYOUT(TO(2), KC_CALC, KC_MPRV, KC_MNXT, KC_VOLU,
|
||||
KC_TRNS, KC_TRNS, KC_MSTP, KC_MPLY, KC_VOLD),
|
||||
[MEDIA_LAYER] = LAYOUT(TO(2), KC_CALC, KC_MPRV, KC_MNXT, KC_VOLU,
|
||||
KC_TRNS, KC_TRNS, KC_MSTP, KC_MPLY, KC_VOLD),
|
||||
|
||||
[TBD_LAYER2]=
|
||||
LAYOUT(TO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
[TBD_LAYER2] = LAYOUT(TO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
|
||||
|
||||
[TBD_LAYER3]=
|
||||
LAYOUT(TO(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
|
||||
[FRENCH_LAYER] = LAYOUT(TO(0), TD(A_Q), TD(E_Q), TD(E_U), TD(E_E),
|
||||
KC_TRNS, TD(A_Y), TD(I_I), TD(O_C), TD(U_U))
|
||||
};
|
||||
|
||||
|
||||
|
@ -44,6 +133,12 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
|||
*/
|
||||
|
||||
|
||||
void matrix_init_user(void)
|
||||
{
|
||||
set_unicode_input_mode(UC_WINC); /* See https://jayliu50.github.io/qmk-cheatsheet/ */
|
||||
}
|
||||
|
||||
|
||||
layer_state_t layer_state_set_user(layer_state_t state)
|
||||
{
|
||||
turn_off_leds();
|
||||
|
@ -61,7 +156,7 @@ layer_state_t layer_state_set_user(layer_state_t state)
|
|||
turn_on_led(BLUE_LED);
|
||||
break;
|
||||
|
||||
case TBD_LAYER3:
|
||||
case FRENCH_LAYER:
|
||||
turn_on_led(GREEN_LED);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -11,13 +11,17 @@ MCU = atmega32u4
|
|||
# ATmega328P USBasp
|
||||
BOOTLOADER = caterina
|
||||
|
||||
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||
CONSOLE_ENABLE= no # Console for debug
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover -
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
|
||||
AUDIO_ENABLE = no
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
CONSOLE_ENABLE= no # Console for debug
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover -
|
||||
|
||||
RGBLIGHT_ENABLE = no
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
UNICODE_ENABLE = yes
|
||||
TAP_DANCE_ENABLE = yes
|
||||
|
|
Loading…
Reference in a new issue