Initial commit for Planck PCB Rev 1. - Backlight on PB7 controlled by Timer1 Fast PWM (no interrupts). - Backlight commands connected temporarily to top left keys. - Backlight init called from matrix.c, since there's no generic keyboard_init() override function.
5 files changed, 127 insertions(+), 35 deletions(-) M keyboard/planck/Makefile M keyboard/planck/config.h A keyboard/planck/keymap_wilba.c M keyboard/planck/led.c M keyboard/planck/matrix.c
M keyboard/planck/Makefile => keyboard/planck/Makefile +4 -2
@@ 50,7 50,8 @@ TARGET_DIR = . # project specific files SRC = keymap_common.c \ matrix.c \ led.c led.c \ backlight.c ifdef KEYMAP @@ SRC := keymap_$(KEYMAP).c $(SRC) 118,9 119,10 @@ MOUSEKEY_ENABLE = yes # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) CONSOLE_ENABLE = yes # Console for debug(+400) COMMAND_ENABLE = yes # Commands for debug and configuration # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE #SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality # Optimize size but this may cause error "relocation truncated to fit" #EXTRALDFLAGS = -Wl,--relax
M keyboard/planck/config.h => keyboard/planck/config.h +4 -0
@@ 34,6 34,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. /* define if matrix has ghost */ //#define MATRIX_HAS_GHOST /* number of backlight levels */ /* NOTE: this is the max value of 0..BACKLIGHT_LEVELS so really 16 levels. */ #define BACKLIGHT_LEVELS 15 /* Set 0 if debouncing isn't needed */ #define DEBOUNCE 5
A keyboard/planck/keymap_wilba.c => keyboard/planck/keymap_wilba.c +56 -0
@@ 0,0 1,56 @@ #include "keymap_common.h" const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = KEYMAP( /* Wilba */ FN27, FN28, FN29, E, R, T, Y, U, I, O, P, BSPC, TAB, A, S, D, F, G, H, J, K, L, SCLN, QUOT, LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, ENT, LCTL, LGUI, LALT, RSFT, FN1, SPC, FN2, LEFT, DOWN, UP, RGHT), [1] = KEYMAP( /* Wilba Alternate */ ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC, TAB, A, S, D, F, G, H, J, K, L, SCLN, QUOT, LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, ENT, LCTL, LGUI, LALT, RSFT, FN1, SPC, FN2, LEFT, DOWN, UP, RGHT), [2] = KEYMAP( /* Wilba LOWER */ TRNS, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, TRNS, TRNS, F11, F12, LBRC, RBRC, FN20, EQL, FN23, FN24, MINS, FN21, TRNS, TRNS, BSLS, GRV, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN1, TRNS, TRNS, MNXT, VOLD, VOLU, MPLY), [3] = KEYMAP( /* Wilba RAISE */ TRNS, FN10, FN11, FN12, FN13, FN14, FN15, FN16, FN17, FN18, FN19, TRNS, TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, TRNS, TRNS, FN25, FN22, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN2, TRNS, TRNS, TRNS, TRNS), }; const uint16_t PROGMEM fn_actions[] = { [1] = ACTION_LAYER_MOMENTARY(2), // LOWER [2] = ACTION_LAYER_MOMENTARY(3), // RAISE [3] = ACTION_DEFAULT_LAYER_SET(0), [4] = ACTION_DEFAULT_LAYER_SET(1), [10] = ACTION_MODS_KEY(MOD_LSFT, KC_1), // ! [11] = ACTION_MODS_KEY(MOD_LSFT, KC_2), // @ [12] = ACTION_MODS_KEY(MOD_LSFT, KC_3), // # [13] = ACTION_MODS_KEY(MOD_LSFT, KC_4), // $ [14] = ACTION_MODS_KEY(MOD_LSFT, KC_5), // % [15] = ACTION_MODS_KEY(MOD_LSFT, KC_6), // ^ [16] = ACTION_MODS_KEY(MOD_LSFT, KC_7), // & [17] = ACTION_MODS_KEY(MOD_LSFT, KC_8), // * [18] = ACTION_MODS_KEY(MOD_LSFT, KC_9), // ( [19] = ACTION_MODS_KEY(MOD_LSFT, KC_0), // ) [20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS), // _ [21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL), // + [22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV), // ~ [23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC), // { [24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC), // } [25] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS), // | [26] = ACTION_MODS_KEY(MOD_LSFT | MOD_RSFT, KC_PAUSE), [27] = ACTION_BACKLIGHT_TOGGLE(), [28] = ACTION_BACKLIGHT_INCREASE(), [29] = ACTION_BACKLIGHT_DECREASE() };
M keyboard/planck/led.c => keyboard/planck/led.c +13 -9
@@ 22,13 22,17 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. void led_set(uint8_t usb_led) { // if (usb_led & (1<<USB_LED_FUNCTION)) { // // Output high. // DDRF |= (1<<0); // PORTF |= (1<<0); // } else { // // Output low. // DDRF &= ~(1<<0); // PORTF &= ~(1<<0); // } // Using PE6 Caps Lock LED if (usb_led & (1<<USB_LED_CAPS_LOCK)) { // Output high. DDRE |= (1<<6); PORTE |= (1<<6); } else { // Output low. DDRE &= ~(1<<6); PORTE &= ~(1<<6); } }
M keyboard/planck/matrix.c => keyboard/planck/matrix.c +50 -24
@@ 27,6 27,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include "debug.h" #include "util.h" #include "matrix.h" #include "backlight.h" // TODO fix this dependency @@ #ifndef DEBOUNCE 57,6 58,13 @@ uint8_t matrix_cols(void) void matrix_init(void) { // To use PORTF disable JTAG with writing JTD bit twice within four cycles. MCUCR |= (1<<JTD); MCUCR |= (1<<JTD); // TODO fix this dependency backlight_init_ports(); // initialize row and col unselect_rows(); @@ init_cols(); 134,10 142,19 @@ uint8_t matrix_key_count(void) return count; } // // Planck PCB Rev 1 Pin Assignments // // Column: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 // Pin: F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 // static void init_cols(void) { DDRB &= ~(1<<6 | 1<<5 | 1<<4); PORTB |= (1<<6 | 1<<5 | 1<<4); DDRB &= ~(1<<4 | 1<<0); PORTB |= (1<<4 | 1<<0); DDRC &= ~(1<<7); PORTC |= (1<<7); DDRD &= ~(1<<7 | 1<<6 | 1<<4); PORTD |= (1<<7 | 1<<6 | 1<<4); @@ DDRF &= ~(1<<0 | 1<<1 | 1<<4 | 1<<5 | 1<<6 | 1<<7); 147,46 164,55 @@ static void init_cols(void) static matrix_row_t read_cols(void) { return (PIND&(1<<4) ? 0 : (1<<0)) | (PIND&(1<<6) ? 0 : (1<<1)) | (PIND&(1<<7) ? 0 : (1<<2)) | (PINB&(1<<4) ? 0 : (1<<3)) | (PINB&(1<<5) ? 0 : (1<<4)) | (PINB&(1<<6) ? 0 : (1<<5)) | (PINF&(1<<7) ? 0 : (1<<6)) | (PINF&(1<<6) ? 0 : (1<<7)) | (PINF&(1<<5) ? 0 : (1<<8)) | (PINF&(1<<4) ? 0 : (1<<9)) | (PINF&(1<<1) ? 0 : (1<<10)) | (PINF&(1<<0) ? 0 : (1<<11)); return (PINF&(1<<1) ? 0 : (1<<0)) | (PINF&(1<<0) ? 0 : (1<<1)) | (PINB&(1<<0) ? 0 : (1<<2)) | (PINC&(1<<7) ? 0 : (1<<3)) | (PINF&(1<<4) ? 0 : (1<<4)) | (PINF&(1<<5) ? 0 : (1<<5)) | (PINF&(1<<6) ? 0 : (1<<6)) | (PINF&(1<<7) ? 0 : (1<<7)) | (PIND&(1<<4) ? 0 : (1<<8)) | (PIND&(1<<6) ? 0 : (1<<9)) | (PINB&(1<<4) ? 0 : (1<<10)) | (PIND&(1<<7) ? 0 : (1<<11)); } static void unselect_rows(void) { DDRB &= ~(1<<0 | 1<<1 | 1<<2 | 1<<3); PORTB |= (1<<0 | 1<<1 | 1<<2 | 1<<3); DDRB &= ~(1<<5 | 1<<6); PORTB |= (1<<5 | 1<<6); DDRD &= ~(1<<0 | 1<<5); PORTD |= (1<<0 | 1<<5); } // // Planck PCB Rev 1 Pin Assignments // // Row: 0, 1, 2, 3 // Pin: D0, D5, B5, B6 // static void select_row(uint8_t row) { switch (row) { case 0: DDRB |= (1<<0); PORTB &= ~(1<<0); DDRD |= (1<<0); PORTD &= ~(1<<0); break; case 1: DDRB |= (1<<1); PORTB &= ~(1<<1); DDRD |= (1<<5); PORTD &= ~(1<<5); break; case 2: DDRB |= (1<<2); PORTB &= ~(1<<2); DDRB |= (1<<5); PORTB &= ~(1<<5); break; case 3: DDRB |= (1<<3); PORTB &= ~(1<<3); DDRB |= (1<<6); PORTB &= ~(1<<6); break; }