summaryrefslogtreecommitdiff
path: root/keyboards/roadkit/keymaps/flipphone
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/roadkit/keymaps/flipphone')
-rw-r--r--keyboards/roadkit/keymaps/flipphone/Makefile21
-rw-r--r--keyboards/roadkit/keymaps/flipphone/config.h8
-rw-r--r--keyboards/roadkit/keymaps/flipphone/keymap.c216
-rw-r--r--keyboards/roadkit/keymaps/flipphone/readme.md26
4 files changed, 271 insertions, 0 deletions
diff --git a/keyboards/roadkit/keymaps/flipphone/Makefile b/keyboards/roadkit/keymaps/flipphone/Makefile
new file mode 100644
index 0000000000..f4671a9d11
--- /dev/null
+++ b/keyboards/roadkit/keymaps/flipphone/Makefile
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/roadkit/keymaps/flipphone/config.h b/keyboards/roadkit/keymaps/flipphone/config.h
new file mode 100644
index 0000000000..df06a26206
--- /dev/null
+++ b/keyboards/roadkit/keymaps/flipphone/config.h
@@ -0,0 +1,8 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// place overrides here
+
+#endif \ No newline at end of file
diff --git a/keyboards/roadkit/keymaps/flipphone/keymap.c b/keyboards/roadkit/keymaps/flipphone/keymap.c
new file mode 100644
index 0000000000..b48d72e9ee
--- /dev/null
+++ b/keyboards/roadkit/keymaps/flipphone/keymap.c
@@ -0,0 +1,216 @@
+#include "roadkit.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+#ifdef BACKLIGHT_ENABLE
+ #include "backlight.h"
+#endif
+
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+
+void backlight_toggle(void){
+};
+
+enum roadkit_layers {
+ _NUMPAD,
+ _FPH,
+ _FPHNOISY,
+ _ADJUST,
+ _DYN
+};
+
+enum roadkit_keycodes {
+ NUMPAD = SAFE_RANGE,
+ FPH_1,
+ FPH_2,
+ FPH_3,
+ FPH_4,
+ FPH_5,
+ FPH_6,
+ FPH_7,
+ FPH_8,
+ FPH_9,
+ FN_0,
+ BACKLIT,
+ MACSLEEP,
+ DYNAMIC_MACRO_RANGE,
+};
+
+#include "dynamic_macro.h"
+
+// Fillers to make keymaps cleaner looking
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_NUMPAD] = /* Numpad */
+ KEYMAP(KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, \
+ KC_KP_4, KC_KP_5, KC_KP_6, \
+ KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, \
+ LT(_ADJUST, KC_KP_0), KC_KP_DOT),
+ [_FPH] = /* Quiet T9 */
+ KEYMAP(FPH_7, FPH_8, FPH_9, KC_KP_PLUS, \
+ FPH_4, FPH_5, FPH_6, \
+ FPH_1, FPH_2, FPH_3, SFT_T(KC_KP_ENTER), \
+ LT(_ADJUST, KC_SPACE), KC_KP_DOT),
+ [_FPHNOISY] = /* Noisy T9 */
+ KEYMAP(FPH_7, FPH_8, FPH_9, KC_KP_PLUS, \
+ FPH_4, FPH_5, FPH_6, \
+ FPH_1, FPH_2, FPH_3, SFT_T(KC_KP_ENTER), \
+ LT(_ADJUST, KC_SPACE), KC_KP_DOT),
+ [_ADJUST] = /* Adjustments */
+ KEYMAP(KC_NUMLOCK, TG(_FPHNOISY), TG(_FPH), TG(_NUMPAD), \
+ KC_BSPC, BACKLIT, KC_DEL, \
+ MACSLEEP, _______, _______, _______, \
+ _______, MO(_DYN)),
+ [_DYN] = /* DYNAMIC MACRO */
+ KEYMAP(DYN_REC_START1, DYN_REC_START2, _______, DYN_REC_STOP, \
+ _______, _______, _______, \
+ DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, _______, _______, \
+ _______, _______),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+uint16_t fph_tap_qty = false;
+uint16_t fph_keycode = 0; // stores which spacebar was used, either raise or lower...
+
+uint16_t get_render_keycode(uint16_t keycode, uint16_t tap_qty){ // maybe replace shift with "mods"
+ tap_qty--; // reduce by one to match array indexes.
+ switch(keycode){
+ case FPH_2:
+ {uint16_t kc[] = {KC_A, KC_B, KC_C};
+ if(tap_qty % 6 > 2)
+ return LSFT(kc[tap_qty % 3]);
+ return kc[tap_qty % 3];}
+ break;
+ case FPH_3:
+ {uint16_t kc[] = {KC_D, KC_E, KC_F};
+ if(tap_qty % 6 > 2)
+ return LSFT(kc[tap_qty % 3]);
+ return kc[tap_qty % 3];}
+ break;
+ case FPH_4:
+ {uint16_t kc[] = {KC_G, KC_H, KC_I};
+ if(tap_qty % 6 > 2)
+ return LSFT(kc[tap_qty % 3]);
+ return kc[tap_qty % 3];}
+ break;
+ case FPH_5:
+ {uint16_t kc[] = {KC_J, KC_K, KC_L};
+ if(tap_qty % 6 > 2)
+ return LSFT(kc[tap_qty % 3]);
+ return kc[tap_qty % 3];}
+ break;
+ case FPH_6:
+ {uint16_t kc[] = {KC_M, KC_N, KC_O};
+ if(tap_qty % 6 > 2)
+ return LSFT(kc[tap_qty % 3]);
+ return kc[tap_qty % 3];}
+ break;
+ case FPH_7:
+ {uint16_t kc[] = {KC_P, KC_Q, KC_R, KC_S};
+ if(tap_qty % 8 > 2)
+ return LSFT(kc[tap_qty % 4]);
+ return kc[tap_qty % 4];}
+ break;
+ case FPH_8:
+ {uint16_t kc[] = {KC_T, KC_U, KC_V};
+ if(tap_qty % 8 > 2)
+ return LSFT(kc[tap_qty % 4]);
+ return kc[tap_qty % 4];}
+ break;
+ case FPH_9:
+ {uint16_t kc[] = {KC_W, KC_X, KC_Y, KC_Z};
+ if(tap_qty % 8 > 2)
+ return LSFT(kc[tap_qty % 4]);
+ return kc[tap_qty % 4];}
+ break;
+ case FPH_1:
+ {uint16_t kc[] = {KC_COMM, LSFT(KC_SLSH), KC_EXLM, KC_AT, KC_MINS, KC_UNDS, KC_PLUS, \
+ KC_SCLN, LSFT(KC_SCLN), KC_QUOT, LSFT(KC_QUOT), KC_TILD, \
+ KC_PIPE, KC_BSLS, KC_HASH, LSFT(KC_4), KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, \
+ KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, LSFT(KC_COMM), LSFT(KC_DOT)};
+ return kc[tap_qty % 26];}
+ }
+ return KC_NO;
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_dynamic_macro(keycode, record)) {
+ return false;
+ }
+ uint8_t layer;
+ layer = biton32(layer_state);
+
+ switch (keycode) {
+ case FPH_1 ... FPH_9:
+ if(layer == _FPHNOISY){
+ if (record->event.pressed) {
+ if(fph_keycode != keycode) { // key change
+ fph_tap_qty = 0;
+ fph_keycode = keycode;
+ } else { // same key tapped again so erase and increment.
+ register_code(KC_BSPC);
+ unregister_code(KC_BSPC);
+ fph_tap_qty++;
+ }
+ uint16_t render_keycode = get_render_keycode(keycode, fph_tap_qty);
+ // find mods? Apply mods..
+ register_code(render_keycode);
+ unregister_code(render_keycode);
+ } else {
+ // do we need to do anything on key-release?
+ }
+ } else { // not noisy, be demure .
+ if (record->event.pressed) {
+ if(fph_keycode != keycode) { // key change, kill everything.
+ uint16_t render_keycode = get_render_keycode(fph_keycode, fph_tap_qty);
+ // find mods? Apply mods..
+ register_code(render_keycode);
+ unregister_code(render_keycode);
+ fph_keycode = keycode;
+ fph_tap_qty = 0;
+ } else { // same key tapped again so increment counter silently
+ fph_tap_qty++;
+ }
+ } else {
+ // do we need to do anything on key-release?
+ // maybe start a timer on this one?
+ }
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ }
+ return false;
+ break;
+ case MACSLEEP:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ register_code(KC_RCTL);
+ register_code(KC_POWER);
+ unregister_code(KC_POWER);
+ unregister_code(KC_RCTL);
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/roadkit/keymaps/flipphone/readme.md b/keyboards/roadkit/keymaps/flipphone/readme.md
new file mode 100644
index 0000000000..ad630be195
--- /dev/null
+++ b/keyboards/roadkit/keymaps/flipphone/readme.md
@@ -0,0 +1,26 @@
+# Flip Phone layout for Roadkit
+
+BEWARE, THIS DOES NOT WORK YET.
+
+Uses the numpad with classic cellular phone style letters assigned to the numbers.
+
+# LAYERS
+
+* Numpad - The layer that matches the caps mostly
+* FPH - Base layer for text
+* FPHNOISY - Text layer that outputs every character and then backspaces as they're replaced
+* DYN - dynamic macro layer for recording and playing macros
+
+## FPH
+
+Poke the "2" key twice and it makes "B".
+
+## FPHNOISY
+
+Poke the "2" key twice and it makes "A"+backspace+"B" so you can see it cycle through.
+
+## MACROS
+
+May be able to record macros with the T9 layer because the "KC_*"s are only sent
+at the end. Trying to do a macro with T9NOISY would probably fill up the buffer
+in just a few characters.