keymap.c (3412B)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | // Copyright 2026 jack@pngu.org // SPDX-License-Identifier: GPL-2.0-or-later #include "jack.h" // clang-format off #undef LAYOUT #define LAYOUT( \ k0G, k0F, k0E, k0D, k0C, k4C, k4D, k4E, k4F, k4G, \ k1G, k1F, k1E, k1D, k1C, k5C, k5D, k5E, k5F, k5G, \ k2G, k2F, k2E, k2D, k2C, k6C, k6D, k6E, k6F, k6G, \ k3F, k3D, k3C, k3B, k7B, k7C, k7D, k7F \ ) { \ {XXX, XXX, k0C, k0D, k0E, k0F, k0G}, \ {XXX, XXX, k1C, k1D, k1E, k1F, k1G}, \ {XXX, XXX, k2C, k2D, k2E, k2F, k2G}, \ {XXX, k3B, k3C, k3D, XXX, k3F, XXX}, \ {XXX, XXX, k4C, k4D, k4E, k4F, k4G}, \ {XXX, XXX, k5C, k5D, k5E, k5F, k5G}, \ {XXX, XXX, k6C, k6D, k6E, k6F, k6G}, \ {XXX, k7B, k7C, k7D, XXX, k7F, XXX} \ } const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [LAYER0] = LAYOUT_jack( ___LAYER00___, ___LAYER01___, ___LAYER02___, XXXXXXX, XXXXXXX, ___LAYER03___, XXXXXXX, XXXXXXX ), [LAYER1] = LAYOUT_jack( ___LAYER10___, ___LAYER11___, ___LAYER12___, _______, _______, ___LAYER13___, _______, _______ ), [LAYER2] = LAYOUT_jack( ___LAYER20___, ___LAYER21___, ___LAYER22___, _______, _______, ___LAYER23___, _______, _______ ), [LAYER3] = LAYOUT_jack( ___LAYER30___, ___LAYER31___, ___LAYER32___, _______, _______, ___LAYER33___, _______, _______ ) }; // clang-format on #ifdef OLED_ENABLE #define X_PIXEL_COUNT OLED_DISPLAY_HEIGHT - 1 #define MAX_WPM 160 uint32_t oled_timer = 0; void oled_timer_reset(void) { oled_timer = timer_read32(); } void oled_wpm_graph(void) { static uint8_t height = X_PIXEL_COUNT, vert_count = 0; static uint16_t graph_timer = 0; extern uint8_t oled_buffer[OLED_MATRIX_SIZE]; extern OLED_BLOCK_TYPE oled_dirty; if (timer_elapsed(graph_timer) > 100) { height = X_PIXEL_COUNT - ((get_current_wpm() / (float)MAX_WPM) * X_PIXEL_COUNT); for (uint8_t i = 0; i <= 1; i++) oled_write_pixel(3, height + i, true); if (vert_count == 3) { vert_count = 0; while (height <= X_PIXEL_COUNT) { oled_write_pixel(3, height, true); height++; } } else { for (uint8_t i = X_PIXEL_COUNT; i > height; i--) if (!(i % 3)) oled_write_pixel(3, i, true); vert_count++; } for (uint16_t y = 0; y < 8; y++) { for (uint16_t x = OLED_DISPLAY_WIDTH; x > 0; x--) { uint16_t i = y * OLED_DISPLAY_WIDTH + x; oled_buffer[i] = oled_buffer[i - 1]; oled_dirty |= ((OLED_BLOCK_TYPE)1 << (i / OLED_BLOCK_SIZE)); } } graph_timer = timer_read(); } } void oled_wpm(void) { oled_write(PSTR("WPM: "), false); oled_write_ln(get_u8_str(get_current_wpm(), ' '), false); } bool oled_task_user(void) { if (is_keyboard_master()) { if (timer_elapsed32(oled_timer) > THREE_MIN) { oled_off(); return false; } else oled_on(); } if (is_keyboard_left()) { oled_wpm_graph(); oled_wpm(); } return false; } bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { if (record->event.pressed) oled_timer_reset(); return true; } #endif |