]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
[Keyboard] Added French layer to handwired/2x5keypad (#7313)
authorJonathan Cameron <jmcameron@gmail.com>
Mon, 11 Nov 2019 17:26:14 +0000 (09:26 -0800)
committerJames Young <18669334+noroadsleft@users.noreply.github.com>
Mon, 11 Nov 2019 17:26:14 +0000 (09:26 -0800)
* 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

keyboards/handwired/2x5keypad/config.h
keyboards/handwired/2x5keypad/keymaps/default/keymap.c
keyboards/handwired/2x5keypad/rules.mk

index 6d09b5ed00f6cfcc50a28c9174552d919d2efc43..35a0fda8d1a93db6c0e9283743d9e51c8cd6a482 100644 (file)
@@ -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
index 808824f3a2543bcac6527c4831f595b19b45b22a..91a0e28f6a987f1f553d1506e8edadfb615256d7 100644 (file)
@@ -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;
        }
index b7027cd9e9dab03084decd430c9adb37acfb8dea..e62a0f24a82f7ff6f467eedcb8e0b4f75a9eca5d 100644 (file)
@@ -11,13 +11,17 @@ MCU = atmega32u4
 #   ATmega328P   USBasp
 BOOTLOADER = caterina
 
+
+AUDIO_ENABLE = no
+BACKLIGHT_ENABLE = no   # Enable keyboard backlight functionality
 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
+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 -
-BACKLIGHT_ENABLE = no   # Enable keyboard backlight functionality
-AUDIO_ENABLE = no
+
 RGBLIGHT_ENABLE = no
+SLEEP_LED_ENABLE = no   # Breathing sleep LED during USB suspend
+UNICODE_ENABLE = yes
+TAP_DANCE_ENABLE = yes