[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:
Jonathan Cameron 2019-11-11 09:26:14 -08:00 committed by James Young
parent b2b947f815
commit 1d550552ca
3 changed files with 124 additions and 25 deletions

View File

@ -37,6 +37,9 @@
/* Locking resynchronize hack */ /* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE #define LOCKING_RESYNC_ENABLE
/* Tap dancing params */
#define TAPPING_TERM 250
/* key combination for command */ /* key combination for command */
/* DISABLED /* DISABLED
#define IS_COMMAND() ( \ #define IS_COMMAND() ( \
@ -44,9 +47,6 @@
) )
*/ */
/* prevent stuck modifiers */
#ifdef RGB_DI_PIN #ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS #define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 0 #define RGBLED_NUM 0

View File

@ -7,27 +7,116 @@ enum layers {
NORMAL_LAYER = 0, NORMAL_LAYER = 0,
MEDIA_LAYER, MEDIA_LAYER,
TBD_LAYER2, 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] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[NORMAL_LAYER]= [NORMAL_LAYER] = LAYOUT(TO(1), WIN_TAB, KC_HOME, KC_UP, KC_END,
LAYOUT(TO(1), WIN_TAB, KC_HOME, KC_UP, KC_END, WIN_LOCK, KC_MUTE, KC_LEFT, KC_DOWN, KC_RGHT),
WIN_LOCK, KC_MUTE, KC_LEFT, KC_DOWN, KC_RGHT),
[MEDIA_LAYER]= [MEDIA_LAYER] = LAYOUT(TO(2), KC_CALC, KC_MPRV, KC_MNXT, KC_VOLU,
LAYOUT(TO(2), KC_CALC, KC_MPRV, KC_MNXT, KC_VOLU, KC_TRNS, KC_TRNS, KC_MSTP, KC_MPLY, KC_VOLD),
KC_TRNS, KC_TRNS, KC_MSTP, KC_MPLY, KC_VOLD),
[TBD_LAYER2]= [TBD_LAYER2] = LAYOUT(TO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
LAYOUT(TO(3), 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),
[TBD_LAYER3]= [FRENCH_LAYER] = LAYOUT(TO(0), TD(A_Q), TD(E_Q), TD(E_U), TD(E_E),
LAYOUT(TO(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TD(A_Y), TD(I_I), TD(O_C), TD(U_U))
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
}; };
@ -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) layer_state_t layer_state_set_user(layer_state_t state)
{ {
turn_off_leds(); turn_off_leds();
@ -61,7 +156,7 @@ layer_state_t layer_state_set_user(layer_state_t state)
turn_on_led(BLUE_LED); turn_on_led(BLUE_LED);
break; break;
case TBD_LAYER3: case FRENCH_LAYER:
turn_on_led(GREEN_LED); turn_on_led(GREEN_LED);
break; break;
} }

View File

@ -11,13 +11,17 @@ MCU = atmega32u4
# ATmega328P USBasp # ATmega328P USBasp
BOOTLOADER = caterina 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 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 RGBLIGHT_ENABLE = no
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
UNICODE_ENABLE = yes
TAP_DANCE_ENABLE = yes