summaryrefslogtreecommitdiffstats
path: root/keyboards/infinity60/keymaps/jpetermans/keymap.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/infinity60/keymaps/jpetermans/keymap.c')
-rw-r--r--keyboards/infinity60/keymaps/jpetermans/keymap.c280
1 files changed, 161 insertions, 119 deletions
diff --git a/keyboards/infinity60/keymaps/jpetermans/keymap.c b/keyboards/infinity60/keymaps/jpetermans/keymap.c
index 6f14b66cb..1afb7c067 100644
--- a/keyboards/infinity60/keymaps/jpetermans/keymap.c
+++ b/keyboards/infinity60/keymaps/jpetermans/keymap.c
@@ -1,6 +1,5 @@
#include "infinity60.h"
#include "led_controller.h"
-#include "keymap_jpetermans.h"
//Helpful Defines
#define _______ KC_TRNS
@@ -12,8 +11,33 @@
#define _MEDIA 3
#define _TILDE 4
+//IS31 chip has 8 available led pages, using 0 for all leds and 7 for single toggles
+#define max_pages 6
+
+enum ic60_keycodes {
+ NUMPAD,
+ FNAV,
+ MEDIA,
+ TILDE,
+ CTLALTDEL,
+ BACKLIGHT,
+ BRIGHT,
+ DIM,
+ BREATH,
+ ALL,
+ GAME,
+ MODE_SINGLE,
+ MODE_PAGE,
+ MODE_FLASH
+};
+
+uint8_t current_layer_global = 0;
+uint8_t led_mode_global = MODE_SINGLE;
+uint8_t backlight_status_global = 1; //init on/off state of backlight
+uint32_t led_layer_state = 0;
+
/* ==================================
- * KEYMAPS
+ * KEYMAPS
* ==================================*/
const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -35,19 +59,10 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSLS,KC_NO,\
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSPC, \
TT(_FNAV), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_ENT, \
- F(1), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,KC_NO, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,F(TILDE),KC_NO, \
KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,TG(_NUMPAD),MO(_MEDIA), KC_RCTL \
),
- /* F-, arrow, and media keys */
- [_FNAV] = KEYMAP( \
- KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,KC_NO,\
- KC_CAPS,_______,_______,_______,_______,_______,_______,KC_PGUP,KC_UP,KC_PGDN,KC_PSCR,_______,_______,KC_DEL, \
- _______,M(0),KC_BTN2,_______,_______,_______,KC_HOME,KC_LEFT,KC_DOWN,KC_RGHT,KC_INS,_______,_______, \
- _______,KC_APP,KC_BTN1,KC_CALC,_______,_______,KC_END,_______,_______,_______,_______,_______,KC_NO, \
- _______,_______,_______, _______, F(0),KC_NLCK,_______,_______ \
- ),
-
/* numpad */
[_NUMPAD] = KEYMAP( \
_______,_______,_______,_______,_______,_______,_______, KC_P7, KC_P8, KC_P9, KC_PSLS, _______,_______,_______,KC_NO,\
@@ -57,12 +72,21 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______,_______,_______, MO(_BASE), _______,_______,_______,_______ \
),
+ /* F-, arrow, and media keys */
+ [_FNAV] = KEYMAP( \
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,KC_NO,\
+ KC_CAPS,_______,_______,_______,_______,_______,_______,KC_PGUP,KC_UP,KC_PGDN,KC_PSCR,_______,_______,KC_DEL, \
+ _______,M(0),KC_BTN2,_______,_______,_______,KC_HOME,KC_LEFT,KC_DOWN,KC_RGHT,KC_INS,_______,_______, \
+ _______,KC_APP,KC_BTN1,KC_CALC,_______,_______,KC_END,_______,_______,_______,_______,_______,KC_NO, \
+ _______,_______,_______, _______, F(CTLALTDEL),KC_NLCK,_______,_______ \
+ ),
+
/* media */
[_MEDIA] = KEYMAP( \
- _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,KC_MUTE, KC_VOLD, KC_VOLU,_______,KC_NO,\
+ _______,F(MODE_SINGLE),F(MODE_PAGE),F(MODE_FLASH),_______,_______,_______, _______, _______, _______,KC_MUTE, KC_VOLD, KC_VOLU,_______,KC_NO,\
_______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,\
- _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______, \
- _______,_______,F(2),F(3),F(4),F(5),F(6),F(7), KC_MPRV, KC_MNXT,KC_MSTP, _______,KC_NO, \
+ _______,_______,_______,_______,_______,F(GAME),_______, _______, _______, _______,_______, _______,_______, \
+ _______,_______,F(ALL) ,F(BRIGHT),F(DIM),F(BACKLIGHT),_______, _______, KC_MPRV, KC_MNXT,KC_MSTP, _______,KC_NO, \
_______,_______,_______, KC_MPLY, _______,_______, _______,_______ \
),
/* ~ */
@@ -91,21 +115,20 @@ enum function_id {
enum macro_id {
ACTION_LEDS_ALL,
ACTION_LEDS_GAME,
- ACTION_LEDS_NAV,
- ACTION_LEDS_MEDIA,
- ACTION_LEDS_NUMPAD,
- ACTION_LEDS_TEST
+ ACTION_LEDS_BACKLIGHT,
+ ACTION_LEDS_BRIGHT,
+ ACTION_LEDS_DIM,
+ ACTION_LEDS_BREATH,
+ ACTION_LEDS_SINGLE,
+ ACTION_LEDS_PAGE,
+ ACTION_LEDS_FLASH,
};
-
+
/* ==================================
- * LED MAPPING
+ * LED MAPPING
* ==================================*/
/*
- Configuring led control can be done as
- 1. full keyboard at a time - define led array, or
- 2. individual led - send specific led address (defined in keymap.h)
-
Infinity60 LED MAP
11 12 13 14 15 16 17 18 21 22 23 24 25 26 27*
28 31 32 33 34 35 36 37 38 41 42 43 44 45
@@ -113,163 +136,182 @@ enum macro_id {
63 64 65 66 67 68 71 72 73 74 75 76 77*
78 81 82 83 84 85 86 87
*Unused in Alphabet Layout
-
- The full keyboard arrays map to the mcu's LED pages
- (8 available) desribed in led_controller.c
-
- 0x24 (pcb row 1) is first byte of PWM portion of LED page
- 0x34 (pcb row 2) is 17th byte of PWM portion of LED page
- array translates to row and column positions
*/
-//LED Layer indicator (1 per layer 3-7)
-const uint8_t led_single_layer[5] = {
- 12,13,14,15,16
-};
-//LED Page 1 - All off
-//LED Page 2 - All on
-//LED Page 3 - _Nav
-const uint8_t led_nav[33] = {
- 11,12,13,14,15,16,17,18,21,22,23,24,25,
- 28, 37,38,41,42,45,
- 46,47,48, 54,55,56,57,58,
- 64,65,66, 71,
- 84,85
-};
-//LED Page 4 - _Numpad
-const uint8_t led_numpad[17] = {
+//======== full page arrays =========
+//LED Page 1 - _Numpad
+//any change in array size needs to be mirrored in matrix_init_user
+uint8_t led_numpad[16] = {
18,21,22,23,
37,38,41,42,
55,56,57,58,
- 72,73,74,75,
- 85
+ 72,73,74,75
};
-//LED Page 5 - _Media
-const uint8_t led_media[12] = {
- 23,24,25,
- 38,
- 55,56,57,
- 73,74,75,
- 83, 86
+//LED Page 2 - _Nav
+uint8_t led_nav[12] = {
+ 38,
+ 47,48, 55,56,57,
+ 64,65,66
};
-//LED Page 6 - _Game
-const uint8_t led_game[5] = {
- //row 1
+//LED Page 3 - _Media
+uint8_t led_media[15] = {
+ 12,13,14, 23,24,25,
+ 65,66,67,68, 73,74,75,
+ 83, 86
+};
+//LED Page 4 - _Game "WASD"
+uint8_t led_game[5] = {
11,
- //row 2
- //row 3
- 32,
- //row 4
- 47, 48,
- //row 5
- 51
- //row 6
- //row 7
- //row 8
+ 32,
+ 47,48,51
};
+//======== qmk functions =========
const uint16_t fn_actions[] = {
- [0] = ACTION_KEY(LALT(LCTL(KC_DEL))),
- [1] = ACTION_LAYER_MODS(_TILDE, MOD_LSFT),
- [2] = ACTION_FUNCTION(ACTION_LEDS_ALL),
- [3] = ACTION_FUNCTION(ACTION_LEDS_GAME),
- [4] = ACTION_FUNCTION(ACTION_LEDS_MEDIA),
- [5] = ACTION_FUNCTION(ACTION_LEDS_NAV),
- [6] = ACTION_FUNCTION(ACTION_LEDS_NUMPAD),
- [7] = ACTION_FUNCTION(ACTION_LEDS_TEST)
-
-
+ [CTLALTDEL] = ACTION_KEY(LALT(LCTL(KC_DEL))),
+ [TILDE] = ACTION_LAYER_MODS(_TILDE, MOD_LSFT),
+ [ALL] = ACTION_FUNCTION(ACTION_LEDS_ALL),
+ [GAME] = ACTION_FUNCTION(ACTION_LEDS_GAME),
+ [BACKLIGHT] = ACTION_FUNCTION(ACTION_LEDS_BACKLIGHT),
+ [BRIGHT] = ACTION_FUNCTION(ACTION_LEDS_BRIGHT),
+ [DIM] = ACTION_FUNCTION(ACTION_LEDS_DIM),
+ [BREATH] = ACTION_FUNCTION(ACTION_LEDS_BREATH),
+ [MODE_SINGLE] = ACTION_FUNCTION(ACTION_LEDS_SINGLE),
+ [MODE_PAGE] = ACTION_FUNCTION(ACTION_LEDS_PAGE),
+ [MODE_FLASH] = ACTION_FUNCTION(ACTION_LEDS_FLASH),
};
/* custom action function */
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
- (void)opt;
msg_t msg;
+
switch(id) {
case ACTION_LEDS_ALL:
if(record->event.pressed) {
- // signal the LED controller thread
+ led_mode_global = led_mode_global == ALL ? MODE_SINGLE : ALL;
msg=(TOGGLE_ALL << 8) | 0;
chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
}
break;
- case ACTION_LEDS_GAME:
+
+ case ACTION_LEDS_BACKLIGHT:
if(record->event.pressed) {
- // signal the LED controller thread
- msg=(TOGGLE_LAYER_LEDS << 8) | 6;
+ backlight_status_global ^= 1;
+ msg=(TOGGLE_BACKLIGHT << 8) | (backlight_status_global);
chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
}
break;
- case ACTION_LEDS_MEDIA:
+
+ case ACTION_LEDS_GAME:
if(record->event.pressed) {
- // signal the LED controller thread
- msg=(TOGGLE_LAYER_LEDS << 8) | 5;
+ led_mode_global = led_mode_global == GAME ? MODE_SINGLE : GAME;
+
+ msg=(DISPLAY_PAGE << 8) | 4;
chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
}
break;
- case ACTION_LEDS_NAV:
+
+ case ACTION_LEDS_BRIGHT:
if(record->event.pressed) {
- // signal the LED controller thread
- msg=(OFF_LED << 8) | 12;
+ msg=(STEP_BRIGHTNESS << 8) | 1;
chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
}
break;
- case ACTION_LEDS_NUMPAD:
+
+ case ACTION_LEDS_DIM:
if(record->event.pressed) {
- // signal the LED controller thread
- msg=(ON_LED << 8) | 12;
+ msg=(STEP_BRIGHTNESS << 8) | 0;
chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
}
break;
- case ACTION_LEDS_TEST:
+
+ case ACTION_LEDS_BREATH:
if(record->event.pressed) {
- // signal the LED controller thread
- msg=(TOGGLE_LED << 8) | 12;
+ msg=(TOGGLE_BREATH << 8) | 0;
chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
}
break;
+
+ //set led_mode for matrix_scan to toggle leds
+ case ACTION_LEDS_SINGLE:
+ led_mode_global = MODE_SINGLE;
+ break;
+ case ACTION_LEDS_PAGE:
+ led_mode_global = MODE_PAGE;
+ break;
+ case ACTION_LEDS_FLASH:
+ led_mode_global = MODE_FLASH;
+ break;
+
}
}
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
- switch(id) {
- case 0:
- if (record->event.pressed) {
- }
- break;
- case 1:
- if (record->event.pressed) {
- }
- break;
- }
return MACRO_NONE;
};
+bool process_record_user (uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {
xprintf("init start");
led_controller_init();
-//TODO: do pages need to be written at init or ok on demand?
-/* Write pages */
- write_led_page(3, led_nav, 33);
- chThdSleepMilliseconds(5);
+ // Write predefined led pages.
+ write_led_page(_NUMPAD, led_numpad, 16);
+ chThdSleepMilliseconds(10);
- write_led_page(4, led_numpad, 17);
- chThdSleepMilliseconds(5);
+ write_led_page(_FNAV, led_nav, 12);
+ chThdSleepMilliseconds(10);
- write_led_page(5, led_media, 12);
- chThdSleepMilliseconds(5);
+ write_led_page(_MEDIA, led_media, 15);
+ chThdSleepMilliseconds(10);
- write_led_page(6, led_game, 5);
- chThdSleepMilliseconds(5);
+ write_led_page(4, led_game, 5);
+ chThdSleepMilliseconds(1000);
};
-// Runs constantly in the background, in a loop.
+// Loops constantly in the background.
void matrix_scan_user(void) {
+ uint8_t page;
+ uint8_t led_pin_byte;
+ msg_t msg;
-};
+ if (backlight_status_global == 0) {//backlight is off, skip the rest
+ return;
+ }
+
+ if (led_layer_state != layer_state && led_mode_global != GAME && led_mode_global != ALL) {
+ //check mode
+ //Turn on layer indicator or page depending on mode
+ switch(led_mode_global) {
+ case MODE_FLASH: //flash preset page leds then single indicator
+ page = biton32(layer_state) > max_pages ? 7 : biton32(layer_state);
+ msg=(DISPLAY_PAGE << 8) | (page);
+ chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
+ chThdSleepMilliseconds(500);
+ //flow to display single layer leds
+
+ case MODE_SINGLE: //light layer indicators for all active layers
+ led_pin_byte = layer_state & 0xFF;
+ msg=(DISPLAY_PAGE << 8) | 7;
+ chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
+ msg=(1<<16) | (SET_FULL_ROW << 8) | (led_pin_byte);
+ chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
+ break;
+
+ case MODE_PAGE: //display pre-defined led page
+ page = biton32(layer_state) > max_pages ? 7 : biton32(layer_state);
+ msg=(DISPLAY_PAGE << 8) | (page);
+ chMBPost(&led_mailbox, msg, TIME_IMMEDIATE);
+ break;
+ }
+ led_layer_state = layer_state;
+ }
+}