aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Humbert <jack.humb@gmail.com>2015-08-16 17:56:15 -0400
committerJack Humbert <jack.humb@gmail.com>2015-08-16 17:56:15 -0400
commitc9cbff446f58262ef9c26b7ce280f37e36b15b9a (patch)
tree1917ebd3b78dfbad7a6555b5ce425c551ca356ca
parentc5a8287dea6f5d9d798d0ea5b43b08d2c362c71d (diff)
parente12c0de608be5b3239222735bb6403e0fda3fb26 (diff)
downloadqmk_firmware-c9cbff446f58262ef9c26b7ce280f37e36b15b9a.tar.gz
qmk_firmware-c9cbff446f58262ef9c26b7ce280f37e36b15b9a.zip
merging
-rw-r--r--keyboard/atomic/Makefile2
-rw-r--r--keyboard/atomic/backlight.c49
-rw-r--r--keyboard/atomic/keymap_common.h25
-rw-r--r--keyboard/atomic/keymap_grid.c40
-rw-r--r--keyboard/atomic/matrix.c94
-rw-r--r--keyboard/planck/Makefile8
-rw-r--r--keyboard/planck/PCB_GUIDE.md16
-rw-r--r--keyboard/planck/backlight.c61
-rw-r--r--keyboard/planck/common_keymaps/keymap_sean.c56
-rw-r--r--keyboard/planck/config.h5
-rw-r--r--keyboard/planck/extended_keymaps/extended_keymap_angerthosenear.c50
-rw-r--r--keyboard/planck/extended_keymaps/extended_keymap_joe.c78
-rw-r--r--keyboard/planck/matrix_handwired.c (renamed from keyboard/planck/matrix.c)0
-rw-r--r--keyboard/planck/matrix_pcb.c14
14 files changed, 367 insertions, 131 deletions
diff --git a/keyboard/atomic/Makefile b/keyboard/atomic/Makefile
index 12351b990..ed1d33176 100644
--- a/keyboard/atomic/Makefile
+++ b/keyboard/atomic/Makefile
@@ -47,8 +47,6 @@ TOP_DIR = ../..
47# Directory keyboard dependent files exist 47# Directory keyboard dependent files exist
48TARGET_DIR = . 48TARGET_DIR = .
49 49
50
51
52# # project specific files 50# # project specific files
53ifdef COMMON 51ifdef COMMON
54 52
diff --git a/keyboard/atomic/backlight.c b/keyboard/atomic/backlight.c
new file mode 100644
index 000000000..06f103b4a
--- /dev/null
+++ b/keyboard/atomic/backlight.c
@@ -0,0 +1,49 @@
1
2#include <avr/io.h>
3#include "backlight.h"
4
5#define CHANNEL OCR1C
6
7void backlight_init_ports()
8{
9
10 // Setup PB7 as output and output low.
11 DDRB |= (1<<7);
12 PORTB &= ~(1<<7);
13
14 // Use full 16-bit resolution.
15 ICR1 = 0xFFFF;
16
17 // I could write a wall of text here to explain... but TL;DW
18 // Go read the ATmega32u4 datasheet.
19 // And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on
20
21 // Pin PB7 = OCR1C (Timer 1, Channel C)
22 // Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0
23 // (i.e. start high, go low when counter matches.)
24 // WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0
25 // Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1
26
27 TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010;
28 TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
29
30 backlight_init();
31}
32
33void backlight_set(uint8_t level)
34{
35 if ( level == 0 )
36 {
37 // Turn off PWM control on PB7, revert to output low.
38 TCCR1A &= ~(_BV(COM1C1));
39 // CHANNEL = level << OFFSET | 0x0FFF;
40 CHANNEL = ((1 << level) - 1);
41 }
42 else
43 {
44 // Turn on PWM control of PB7
45 TCCR1A |= _BV(COM1C1);
46 // CHANNEL = level << OFFSET | 0x0FFF;
47 CHANNEL = ((1 << level) - 1);
48 }
49} \ No newline at end of file
diff --git a/keyboard/atomic/keymap_common.h b/keyboard/atomic/keymap_common.h
index 4a0bcfbb0..7c167eb51 100644
--- a/keyboard/atomic/keymap_common.h
+++ b/keyboard/atomic/keymap_common.h
@@ -110,19 +110,20 @@ extern const uint16_t fn_actions[];
110 110
111#define KEYMAP_AND_SWAP(args...) KEYMAP(args), KEYMAP_SWAP(args) 111#define KEYMAP_AND_SWAP(args...) KEYMAP(args), KEYMAP_SWAP(args)
112 112
113/* 113// GRD: Grid layout
114 Keymap for the Planck 48 key variant. 114
115 */ 115#define KEYMAP_GRD( \
116#define KEYMAP_48( \ 116 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
117 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \ 117 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
118 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \ 118 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, \
119 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \ 119 K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
120 K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B \ 120 K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E \
121) { \ 121) { \
122 { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B }, \ 122 { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E }, \
123 { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B }, \ 123 { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E }, \
124 { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B }, \ 124 { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E }, \
125 { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B }, \ 125 { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E }, \
126 { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47, KC_##K48, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E } \
126} 127}
127 128
128 129
diff --git a/keyboard/atomic/keymap_grid.c b/keyboard/atomic/keymap_grid.c
new file mode 100644
index 000000000..9d42272e6
--- /dev/null
+++ b/keyboard/atomic/keymap_grid.c
@@ -0,0 +1,40 @@
1#include "keymap_common.h"
2
3// GRD: Grid layout
4
5const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
6 [0] = KEYMAP_GRD(FN29, FN30, FN31, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSLS, GRV, \
7 TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSPC, DEL, \
8 CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, ENT, ENT, PGUP, \
9 LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, RSFT, UP, PGDN, \
10 LCTL, LALT, LGUI, SPC, SPC, SPC, SPC, SPC, SPC, RALT, APP, RCTL, LEFT, DOWN, RGHT), \
11
12};
13const uint16_t PROGMEM fn_actions[] = {
14 [1] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay
15 [3] = ACTION_DEFAULT_LAYER_SET(0),
16 [4] = ACTION_DEFAULT_LAYER_SET(1),
17
18 [9] = ACTION_MODS_KEY(MOD_LSFT | MOD_RSFT, KC_PAUSE),
19
20 [10] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
21 [11] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
22 [12] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
23 [13] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
24 [14] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
25 [15] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
26 [16] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
27 [17] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
28 [18] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
29 [19] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
30 [20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
31 [21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
32 [22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
33 [23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
34 [24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
35 [28] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
36
37 [29] = ACTION_BACKLIGHT_TOGGLE(),
38 [30] = ACTION_BACKLIGHT_INCREASE(),
39 [31] = ACTION_BACKLIGHT_DECREASE()
40};
diff --git a/keyboard/atomic/matrix.c b/keyboard/atomic/matrix.c
index 2f2dbdb10..01f66e90f 100644
--- a/keyboard/atomic/matrix.c
+++ b/keyboard/atomic/matrix.c
@@ -57,6 +57,16 @@ uint8_t matrix_cols(void)
57 57
58void matrix_init(void) 58void matrix_init(void)
59{ 59{
60 // To use PORTF disable JTAG with writing JTD bit twice within four cycles.
61 MCUCR |= (1<<JTD);
62 MCUCR |= (1<<JTD);
63
64 backlight_init_ports();
65
66 // Turn status LED on
67 DDRE |= (1<<6);
68 PORTE |= (1<<6);
69
60 // initialize row and col 70 // initialize row and col
61 unselect_rows(); 71 unselect_rows();
62 init_cols(); 72 init_cols();
@@ -134,60 +144,84 @@ uint8_t matrix_key_count(void)
134 return count; 144 return count;
135} 145}
136 146
147//
148// Atomic PCB Rev 0 Pin Assignments
149//
150// Column: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
151// Pin: F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7, D3, D2, D1
152//
153
137static void init_cols(void) 154static void init_cols(void)
138{ 155{
139 DDRB &= ~(1<<6 | 1<<5 | 1<<4); 156 DDRB &= ~(1<<4 | 1<<0);
140 PORTB |= (1<<6 | 1<<5 | 1<<4); 157 PORTB |= (1<<4 | 1<<0);
141 DDRD &= ~(1<<7 | 1<<6 | 1<<4); 158 DDRC &= ~(1<<7);
142 PORTD |= (1<<7 | 1<<6 | 1<<4); 159 PORTC |= (1<<7);
160 DDRD &= ~(1<<7 | 1<<6 | 1<<4 | 1<<3 | 1<<2 | 1<<1);
161 PORTD |= (1<<7 | 1<<6 | 1<<4 | 1<<3 | 1<<2 | 1<<1);
143 DDRF &= ~(1<<0 | 1<<1 | 1<<4 | 1<<5 | 1<<6 | 1<<7); 162 DDRF &= ~(1<<0 | 1<<1 | 1<<4 | 1<<5 | 1<<6 | 1<<7);
144 PORTF |= (1<<0 | 1<<1 | 1<<4 | 1<<5 | 1<<6 | 1<<7); 163 PORTF |= (1<<0 | 1<<1 | 1<<4 | 1<<5 | 1<<6 | 1<<7);
145
146} 164}
147 165
148static matrix_row_t read_cols(void) 166static matrix_row_t read_cols(void)
149{ 167{
150 return (PIND&(1<<4) ? 0 : (1<<0)) | 168 return (PINF&(1<<1) ? 0 : (1<<0)) |
151 (PIND&(1<<6) ? 0 : (1<<1)) | 169 (PINF&(1<<0) ? 0 : (1<<1)) |
152 (PIND&(1<<7) ? 0 : (1<<2)) | 170 (PINB&(1<<0) ? 0 : (1<<2)) |
153 (PINB&(1<<4) ? 0 : (1<<3)) | 171 (PINC&(1<<7) ? 0 : (1<<3)) |
154 (PINB&(1<<5) ? 0 : (1<<4)) | 172 (PINF&(1<<4) ? 0 : (1<<4)) |
155 (PINB&(1<<6) ? 0 : (1<<5)) | 173 (PINF&(1<<5) ? 0 : (1<<5)) |
156 (PINF&(1<<7) ? 0 : (1<<6)) | 174 (PINF&(1<<6) ? 0 : (1<<6)) |
157 (PINF&(1<<6) ? 0 : (1<<7)) | 175 (PINF&(1<<7) ? 0 : (1<<7)) |
158 (PINF&(1<<5) ? 0 : (1<<8)) | 176 (PIND&(1<<4) ? 0 : (1<<8)) |
159 (PINF&(1<<4) ? 0 : (1<<9)) | 177 (PIND&(1<<6) ? 0 : (1<<9)) |
160 (PINF&(1<<1) ? 0 : (1<<10)) | 178 (PINB&(1<<4) ? 0 : (1<<10)) |
161 (PINF&(1<<0) ? 0 : (1<<11)); 179 (PIND&(1<<7) ? 0 : (1<<11)) |
162 180 (PIND&(1<<3) ? 0 : (1<<12)) |
181 (PIND&(1<<2) ? 0 : (1<<13)) |
182 (PIND&(1<<1) ? 0 : (1<<14));
163} 183}
164 184
185
186//
187// Atomic PCB Rev 0 Pin Assignments
188//
189// Row: 0, 1, 2, 3, 4
190// Pin: D0, D5, B5, B6, C6
191//
192
165static void unselect_rows(void) 193static void unselect_rows(void)
166{ 194{
167 DDRB &= ~(1<<0 | 1<<1 | 1<<2 | 1<<3); 195 DDRB &= ~(1<<5 | 1<<6);
168 PORTB |= (1<<0 | 1<<1 | 1<<2 | 1<<3); 196 PORTB |= (1<<5 | 1<<6);
169 197 DDRD &= ~(1<<0 | 1<<5);
198 PORTD |= (1<<0 | 1<<5);
199 DDRC &= ~(1<<6);
200 PORTC |= (1<<6);
170} 201}
171 202
172static void select_row(uint8_t row) 203static void select_row(uint8_t row)
173{ 204{
174 switch (row) { 205 switch (row) {
175 case 0: 206 case 0:
176 DDRB |= (1<<0); 207 DDRD |= (1<<0);
177 PORTB &= ~(1<<0); 208 PORTD &= ~(1<<0);
178 break; 209 break;
179 case 1: 210 case 1:
180 DDRB |= (1<<1); 211 DDRD |= (1<<5);
181 PORTB &= ~(1<<1); 212 PORTD &= ~(1<<5);
182 break; 213 break;
183 case 2: 214 case 2:
184 DDRB |= (1<<2); 215 DDRB |= (1<<5);
185 PORTB &= ~(1<<2); 216 PORTB &= ~(1<<5);
186 break; 217 break;
187 case 3: 218 case 3:
188 DDRB |= (1<<3); 219 DDRB |= (1<<6);
189 PORTB &= ~(1<<3); 220 PORTB &= ~(1<<6);
190 break; 221 break;
191 222 case 4:
223 DDRC |= (1<<6);
224 PORTC &= ~(1<<6);
225 break;
192 } 226 }
193} 227}
diff --git a/keyboard/planck/Makefile b/keyboard/planck/Makefile
index 0da2a86c9..81c9be1e4 100644
--- a/keyboard/planck/Makefile
+++ b/keyboard/planck/Makefile
@@ -47,12 +47,18 @@ TOP_DIR = ../..
47# Directory keyboard dependent files exist 47# Directory keyboard dependent files exist
48TARGET_DIR = . 48TARGET_DIR = .
49 49
50# Default to PCB matrix
51ifndef MATRIX
52 MATRIX=matrix_pcb.c
53endif
50 54
55$(warning MATRIX: $(MATRIX))
51 56
52# # project specific files 57# # project specific files
53ifdef COMMON 58ifdef COMMON
54 59
55 SRC = keymap_common.c \ 60 SRC = keymap_common.c \
61 $(MATRIX) \
56 led.c \ 62 led.c \
57 backlight.c \ 63 backlight.c \
58 beeps.c 64 beeps.c
@@ -72,7 +78,7 @@ endif
72else 78else
73 79
74SRC = extended_keymap_common.c \ 80SRC = extended_keymap_common.c \
75 analog.c \ 81 $(MATRIX) \
76 led.c \ 82 led.c \
77 backlight.c \ 83 backlight.c \
78 beeps.c 84 beeps.c
diff --git a/keyboard/planck/PCB_GUIDE.md b/keyboard/planck/PCB_GUIDE.md
index 833e144b3..c3004c75a 100644
--- a/keyboard/planck/PCB_GUIDE.md
+++ b/keyboard/planck/PCB_GUIDE.md
@@ -3,26 +3,32 @@
3## Setting up the environment 3## Setting up the environment
4 4
5### Windows 5### Windows
61. Install [MHV AVR Tools][mhv] for AVR GCC compiler and [Cygwin][cygwin](or [MinGW][mingw]) for shell terminal. 61. Install [WinAVR Tools](http://sourceforge.net/projects/winavr/) for AVR GCC compiler.
72. Install [DFU-Programmer][dfu-prog] (the -win one). 72. Install [DFU-Programmer][dfu-prog] (the -win one).
83. Start DFU bootloader on the chip first time you will see 'Found New Hardware Wizard' to install driver. If you install device driver properly you can find chip name like 'ATmega32U4' under 'LibUSB-Win32 Devices' tree on 'Device Manager'. If not you will need to update its driver on 'Device Manager' to the `dfu-programmer` driver. 83. Start DFU bootloader on the chip first time you will see 'Found New Hardware Wizard' to install driver. If you install device driver properly you can find chip name like 'ATmega32U4' under 'LibUSB-Win32 Devices' tree on 'Device Manager'. If not you will need to update its driver on 'Device Manager' to the `dfu-programmer` driver.
9 9
10### Mac 10### Mac
111. Install [CrossPack](https://www.obdev.at/downloads/crosspack/CrossPack-AVR-20131216.dmg). 111. Install [CrossPack](http://www.obdev.at/products/crosspack/index.html) or install Xcode from the App Store and install the Command Line Tools from `Xcode->Preferences->Downloads`.
122. Install [DFU-Programmer][dfu-prog]. 122. Install [DFU-Programmer][dfu-prog].
13 13
14### Linux 14### Linux
151. Install AVR GCC with your favorite package manager. 151. Install AVR GCC with your favorite package manager.
162. Install [DFU-Programmer][dfu-prog]. 162. Install [DFU-Programmer][dfu-prog].
17 17
18##Verify Your Installation
191. Clone the following repository: https://github.com/jackhumbert/tmk_keyboard
202. Open a Terminal and `cd` into `tmk_keyboard/keyboard/planck`
213. Run `make`. This should output a lot of information about the build process.
22
18## Using the built-in functions 23## Using the built-in functions
19 24
20Here is a list of some of the functions avaiable from the command line: 25Here is a list of some of the functions available from the command line:
21 26
22* `make clean`: clean the environment - may be required in-between builds 27* `make clean`: clean the environment - may be required in-between builds
23* `make`: compile the code 28* `make`: compile the code
24* `make COMMON=true`: compile with the common (non-extended) keymap 29* `make COMMON=true`: compile with the common (non-extended) keymap
25* `make KEYMAP=<keymap>`: compile with the extended keymap file `extended_keymaps_extended_keymap_<keymap>.c` 30* `make MATRIX=<matrix_file>`: compile with the referenced matrix file. Default if unspecified is `matrix_pcb.c`. For handwired boards, use `matrix_handwired.c`.
31* `make KEYMAP=<keymap>`: compile with the extended keymap file `extended_keymaps/extended_keymap_<keymap>.c`
26* `make COMMON=true KEYMAP=<keymap>`: compile with the common keymap file `common_keymaps/keymap_<keymap>.c` 32* `make COMMON=true KEYMAP=<keymap>`: compile with the common keymap file `common_keymaps/keymap_<keymap>.c`
27* `make dfu`: build and flash the layout to the PCB 33* `make dfu`: build and flash the layout to the PCB
28* `make dfu-force`: build and force-flash the layout to the PCB (may be require for first flash) 34* `make dfu-force`: build and force-flash the layout to the PCB (may be require for first flash)
@@ -76,7 +82,7 @@ A number of other keycodes have been added that you may find useful:
76 82
77### Function layers 83### Function layers
78 84
79The extended keymap extends the number of function layers from 32 to the near-infinite value of 256. Rather than using `FN<num>` notation (still avaiable, but limited to `FN0`-`FN31`), you can use the `FUNC(<num>)` notation. `F(<num>)` is a shortcut for this. 85The extended keymap extends the number of function layers from 32 to the near-infinite value of 256. Rather than using `FN<num>` notation (still available, but limited to `FN0`-`FN31`), you can use the `FUNC(<num>)` notation. `F(<num>)` is a shortcut for this.
80 86
81The function actions are unchanged, and you can see the full list of them [here](https://github.com/jackhumbert/tmk_keyboard/blob/master/common/action_code.h). They are explained in detail [here](https://github.com/jackhumbert/tmk_keyboard/blob/master/doc/keymap.md#2-action). 87The function actions are unchanged, and you can see the full list of them [here](https://github.com/jackhumbert/tmk_keyboard/blob/master/common/action_code.h). They are explained in detail [here](https://github.com/jackhumbert/tmk_keyboard/blob/master/doc/keymap.md#2-action).
82 88
diff --git a/keyboard/planck/backlight.c b/keyboard/planck/backlight.c
new file mode 100644
index 000000000..f69364b2a
--- /dev/null
+++ b/keyboard/planck/backlight.c
@@ -0,0 +1,61 @@
1
2#include <avr/io.h>
3#include "backlight.h"
4
5#define CHANNEL OCR1C
6
7void backlight_init_ports()
8{
9
10 // Setup PB7 as output and output low.
11 DDRB |= (1<<7);
12 PORTB &= ~(1<<7);
13
14 // Use full 16-bit resolution.
15 ICR1 = 0xFFFF;
16
17 // I could write a wall of text here to explain... but TL;DW
18 // Go read the ATmega32u4 datasheet.
19 // And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on
20
21 // Pin PB7 = OCR1C (Timer 1, Channel C)
22 // Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0
23 // (i.e. start high, go low when counter matches.)
24 // WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0
25 // Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1
26
27 TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010;
28 TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
29
30 backlight_init();
31}
32
33void backlight_set(uint8_t level)
34{
35 if ( level == 0 )
36 {
37 // Turn off PWM control on PB7, revert to output low.
38 TCCR1A &= ~(_BV(COM1C1));
39 CHANNEL = 0x0;
40 // Prevent backlight blink on lowest level
41 PORTB &= ~(_BV(PORTB7));
42 }
43 else if ( level == BACKLIGHT_LEVELS )
44 {
45 // Prevent backlight blink on lowest level
46 PORTB &= ~(_BV(PORTB7));
47 // Turn on PWM control of PB7
48 TCCR1A |= _BV(COM1C1);
49 // Set the brightness
50 CHANNEL = 0xFFFF;
51 }
52 else
53 {
54 // Prevent backlight blink on lowest level
55 PORTB &= ~(_BV(PORTB7));
56 // Turn on PWM control of PB7
57 TCCR1A |= _BV(COM1C1);
58 // Set the brightness
59 CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
60 }
61} \ No newline at end of file
diff --git a/keyboard/planck/common_keymaps/keymap_sean.c b/keyboard/planck/common_keymaps/keymap_sean.c
index 4fe07f701..cb2ef8f13 100644
--- a/keyboard/planck/common_keymaps/keymap_sean.c
+++ b/keyboard/planck/common_keymaps/keymap_sean.c
@@ -14,44 +14,40 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
14 LSFT, LCTL, LALT, LGUI, FN1, SPC, FN2, LEFT, DOWN, UP, RGHT), 14 LSFT, LCTL, LALT, LGUI, FN1, SPC, FN2, LEFT, DOWN, UP, RGHT),
15 15
16 [2] = KEYMAP( /* fn1 lower */ 16 [2] = KEYMAP( /* fn1 lower */
17 F1, F2, F3, F4, F5, TRNS, TRNS, F6, F7, F8, F9, F10, 17 F1, F2, F3, F4, F5, NO, NO, F6, F7, F8, F9, F10,
18 1, 2, 3, 4, 5, F18, DEL, 6, 7, 8, 9, 0, 18 1, 2, 3, 4, 5, F18, DEL, 6, 7, 8, 9, 0,
19 FN3, FN4, TRNS, GRV, MINS, TRNS, TRNS, BSLS, LBRC, RBRC, TRNS, TRNS, 19 FN3, FN4, FN28, GRV, MINS, TRNS, INS, BSLS, LBRC, RBRC, TRNS, TRNS,
20 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN5, HOME, PGDN, PGUP, END), 20 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, HOME, PGDN, PGUP, END),
21 21
22 [3] = KEYMAP( /* fn2 raise */ 22 [3] = KEYMAP( /* fn2 raise */
23 F1, F2, F3, F4, F5, TRNS, TRNS, F6, F7, F8, F9, F10, 23 MRWD, MPLY, MFFD, NO, NO, FN21, FN22, EJCT, PWR, LSFT,PAUSE, RSFT,
24 F11, F12, F13, F14, F15, F18, DEL, F16, F17, F18, F19, F20, 24 FN11, FN12, FN13, FN14, FN15, F18, DEL, FN16, FN17, FN18, FN19, FN20,
25 FN3, FN4, TRNS, TRNS, TRNS, TRNS, TRNS, EJCT, PWR, LSFT,PAUSE, RSFT, 25 FN3, FN4, FN28, FN23, FN24, TRNS, INS, FN25, FN26, FN27, MPRV, MNXT,
26 LEFT, DOWN, UP, RGHT, FN5, TRNS, TRNS, MNXT, VOLD, VOLU, MUTE), 26 TRNS, TRNS, TRNS, TRNS, FN1, TRNS, FN2, NO, VOLD, VOLU, MUTE),
27
28 [4] = KEYMAP( /* lower + raise */
29 LEFT, DOWN, UP, RGHT, TRNS, TRNS, TRNS, TRNS, LEFT, DOWN, UP, RGHT,
30 HOME, PGDN, PGUP, END, TRNS, F18, DEL, TRNS, HOME, PGDN, PGUP, END,
31 FN3, FN4, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, EJCT, PWR, MPLY, RSFT,
32 TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, MNXT, VOLD, VOLU, MUTE),
33}; 27};
28
34const uint16_t PROGMEM fn_actions[] = { 29const uint16_t PROGMEM fn_actions[] = {
35 [1] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay LOWER 30 [1] = ACTION_LAYER_MOMENTARY(2), // to Fn overlay LOWER
36 [2] = ACTION_LAYER_MOMENTARY(3), // to Fn overlay RAISE 31 [2] = ACTION_LAYER_MOMENTARY(3), // to Fn overlay RAISE
37 [3] = ACTION_DEFAULT_LAYER_SET(0), 32 [3] = ACTION_DEFAULT_LAYER_SET(0),
38 [4] = ACTION_DEFAULT_LAYER_SET(1), 33 [4] = ACTION_DEFAULT_LAYER_SET(1),
39 [5] = ACTION_LAYER_MOMENTARY(4), // to Fn overlay LOWER + RAISE
40 34
41 [10] = ACTION_MODS_KEY(MOD_LSFT, KC_1), 35 [11] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
42 [11] = ACTION_MODS_KEY(MOD_LSFT, KC_2), 36 [12] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
43 [12] = ACTION_MODS_KEY(MOD_LSFT, KC_3), 37 [13] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
44 [13] = ACTION_MODS_KEY(MOD_LSFT, KC_4), 38 [14] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
45 [14] = ACTION_MODS_KEY(MOD_LSFT, KC_5), 39 [15] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
46 [15] = ACTION_MODS_KEY(MOD_LSFT, KC_6), 40 [16] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
47 [16] = ACTION_MODS_KEY(MOD_LSFT, KC_7), 41 [17] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
48 [17] = ACTION_MODS_KEY(MOD_LSFT, KC_8), 42 [18] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
49 [18] = ACTION_MODS_KEY(MOD_LSFT, KC_9), 43 [19] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
50 [19] = ACTION_MODS_KEY(MOD_LSFT, KC_0), 44 [20] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
51 [20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS), 45 [21] = ACTION_MODS_KEY(MOD_LSFT, KC_SLSH),
52 [21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL), 46 [22] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL),
53 [22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV), 47 [23] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV),
54 [23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC), 48 [24] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS),
55 [24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC), 49 [25] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),
56 [28] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS), 50 [26] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC),
51 [27] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC),
52 [28] = ACTION_MODS_KEY(MOD_LSFT | MOD_RSFT, KC_PAUSE),
57}; 53};
diff --git a/keyboard/planck/config.h b/keyboard/planck/config.h
index f621ac5ec..7e95afdde 100644
--- a/keyboard/planck/config.h
+++ b/keyboard/planck/config.h
@@ -35,8 +35,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
35//#define MATRIX_HAS_GHOST 35//#define MATRIX_HAS_GHOST
36 36
37/* number of backlight levels */ 37/* number of backlight levels */
38/* NOTE: this is the max value of 0..BACKLIGHT_LEVELS so really 16 levels. */ 38#define BACKLIGHT_LEVELS 3
39#define BACKLIGHT_LEVELS 15
40 39
41/* Set 0 if debouncing isn't needed */ 40/* Set 0 if debouncing isn't needed */
42#define DEBOUNCE 5 41#define DEBOUNCE 5
@@ -51,8 +50,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
51 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ 50 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
52) 51)
53 52
54
55
56/* 53/*
57 * Feature disable options 54 * Feature disable options
58 * These options are also useful to firmware size reduction. 55 * These options are also useful to firmware size reduction.
diff --git a/keyboard/planck/extended_keymaps/extended_keymap_angerthosenear.c b/keyboard/planck/extended_keymaps/extended_keymap_angerthosenear.c
new file mode 100644
index 000000000..34710d60d
--- /dev/null
+++ b/keyboard/planck/extended_keymaps/extended_keymap_angerthosenear.c
@@ -0,0 +1,50 @@
1#include "extended_keymap_common.h"
2
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4[0] = { /* Qwerty */
5 {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
6 {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT},
7 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT},
8 {KC_LCTL, KC_LGUI, KC_LALT, BL_STEP, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
9 // Space is repeated to accommadate for both spacebar wiring positions
10},
11[1] = { /* WASD + NumPad */
12 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P7, KC_P8, KC_P9, KC_PSLS, KC_PMNS, KC_TRNS},
13 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PAST, KC_PPLS, KC_TRNS},
14 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PDOT, KC_PENT, KC_TRNS},
15 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_SPC, KC_P0, FUNC(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
16},
17[2] = { /* RAISE */
18 {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS},
19 {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
20 {KC_TRNS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRNS},
21 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
22},
23[3] = { /* LOWER */
24 {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_DEL},
25 {KC_TRNS, FUNC(3), FUNC(4), LSFT(RSFT(KC_PAUSE)), KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)},
26 {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS},
27 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END}
28}
29};
30
31
32const uint16_t PROGMEM fn_actions[] = {
33 [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE
34 [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER
35
36 [3] = ACTION_DEFAULT_LAYER_SET(0),
37 [4] = ACTION_DEFAULT_LAYER_SET(1),
38
39};
40
41const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
42{
43 // MACRODOWN only works in this function
44 switch(id) {
45 case 0:
46 return MACRODOWN(T(CM_T), END);
47 break;
48 }
49 return MACRO_NONE;
50};
diff --git a/keyboard/planck/extended_keymaps/extended_keymap_joe.c b/keyboard/planck/extended_keymaps/extended_keymap_joe.c
index 9de6cf396..c560d8a3a 100644
--- a/keyboard/planck/extended_keymaps/extended_keymap_joe.c
+++ b/keyboard/planck/extended_keymaps/extended_keymap_joe.c
@@ -2,50 +2,49 @@
2 2
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4 [0] = { /* Joe colemak */ 4 [0] = { /* Joe colemak */
5 {FUNC(3), KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS}, 5 {F(3), KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS},
6 {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT }, 6 {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT },
7 {FUNC(15), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT}, 7 {F(15), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT},
8 {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, FUNC(1), KC_SPC, KC_SPC, FUNC(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} 8 {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, F(1), KC_SPC, KC_SPC, F(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
9 }, 9 },
10 [1] = { /* Joe soft Colemak */ 10 [1] = { /* Joe soft Colemak */
11 {FUNC(3), CM_Q, CM_W, CM_F, CM_P, CM_G, CM_J, CM_L, CM_U, CM_Y, CM_SCLN, KC_MINS}, 11 {F(3), CM_Q, CM_W, CM_F, CM_P, CM_G, CM_J, CM_L, CM_U, CM_Y, CM_SCLN, KC_MINS},
12 {KC_BSPC, CM_A, CM_R, CM_S, CM_T, CM_D, CM_H, CM_N, CM_E, CM_I, CM_O, KC_ENT }, 12 {KC_BSPC, CM_A, CM_R, CM_S, CM_T, CM_D, CM_H, CM_N, CM_E, CM_I, CM_O, KC_ENT },
13 {FUNC(15), CM_Z, CM_X, CM_C, CM_V, CM_B, CM_K, CM_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT}, 13 {F(15), CM_Z, CM_X, CM_C, CM_V, CM_B, CM_K, CM_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT},
14 {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, FUNC(1), KC_SPC, KC_SPC, FUNC(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} 14 {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, F(1), KC_SPC, KC_SPC, F(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
15 }, 15 },
16 [2] = { /* Joe NUMPAD */ 16 [2] = { /* Joe NUMPAD */
17 {FUNC(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LSFT(KC_9), LSFT(KC_0), KC_P7, KC_P8, KC_P9, KC_PSLS}, 17 {F(3), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, LSFT(KC_9), LSFT(KC_0), KC_P7, KC_P8, KC_P9, KC_PSLS},
18 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LSFT(KC_5), KC_PEQL, KC_P4, KC_P5, KC_P6, KC_PAST}, 18 {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, LSFT(KC_5), KC_PEQL, KC_P4, KC_P5, KC_P6, KC_PAST},
19 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PCMM, KC_P1, KC_P2, KC_P3, KC_PMNS}, 19 {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PCMM, KC_P1, KC_P2, KC_P3, KC_PMNS},
20 {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, FUNC(1), KC_TRNS, KC_TRNS, FUNC(2), KC_P0, KC_PDOT, KC_PENT, KC_PPLS} 20 {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, F(1), KC_TRNS, KC_TRNS, F(2), KC_P0, KC_PDOT, KC_PENT, KC_PPLS}
21 },
22 [3] = { /* Joe 1337 haxOr5*/
23 {F(3), KC_Q, KC_W, KC_F, KC_P, KC_6, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS},
24 {KC_BSPC, KC_4, KC_R, KC_5, KC_7, KC_D, KC_H, KC_N, KC_3, KC_1, KC_0, KC_ENT },
25 {F(15), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT},
26 {KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, F(1), KC_SPC, KC_SPC, F(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
21 }, 27 },
22 [4] = { /* Joe LOWER fn1 */ 28 [4] = { /* Joe LOWER fn1 */
23 {KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(28), FUNC(27), FUNC(26), FUNC(25)}, 29 {KC_GRV, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, M(3), M(2), M(1), M(0) },
24 {KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS }, 30 {KC_BSPC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS},
25 {KC_BSLS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_EQL }, 31 {KC_BSLS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LBRC, KC_RBRC, KC_EQL },
26 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_TRNS, KC_TRNS, FUNC(2), KC_HOME, KC_PGDN, KC_PGUP, KC_END } 32 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(1), KC_TRNS, KC_TRNS, F(2), KC_HOME, KC_PGDN, KC_PGUP, KC_END }
27 }, 33 },
28 [5] = { /* Joe UPPER fn2 */ 34 [5] = { /* Joe UPPER fn2 */
29 {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 }, 35 {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 },
30 {KC_DEL, KC_BTN1, KC_MS_U, KC_BTN2, KC_BTN3, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, RESET }, 36 {KC_DEL, KC_BTN1, KC_MS_U, KC_BTN2, KC_BTN3, KC_WH_U, KC_BTN4, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO },
31 {KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN4, KC_MENU, KC_CAPS, KC_INS, KC_PSCR, KC_TRNS, LCTL(KC_PGUP), LCTL(KC_PGDN) }, 37 {KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_L, KC_WH_D, KC_WH_R, KC_NO, KC_NO, KC_NO, LCTL(KC_PGUP), LCTL(KC_PGDN) },
32 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_TRNS, KC_TRNS, FUNC(2), LCTL(LALT(KC_LEFT)), LCTL(LALT(KC_DOWN)), LCTL(LALT(KC_UP)), LCTL(LALT(KC_RGHT))} 38 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(1), KC_NO, KC_NO, F(2), LCTL(LALT(KC_LEFT)), LCTL(LALT(KC_DOWN)), LCTL(LALT(KC_UP)), LCTL(LALT(KC_RGHT))}
33 }, 39 },
34 [6] = { /* Joe SPECIAL fn3 */ 40 [6] = { /* Joe SPECIAL fn3 */
35 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LCTL(LSFT(CM_U)), KC_TRNS, KC_TRNS, KC_SLEP}, 41 {KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO },
36 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET }, 42 {KC_NO, KC_MPLY, KC_MPRV, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET },
37 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, 43 {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO },
38 {FUNC(6), FUNC(7), FUNC(8), KC_TRNS, FUNC(1), KC_TRNS, KC_TRNS, FUNC(2), KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY} 44 {F(6), F(7), F(8), F(9), F(1), KC_TRNS, KC_TRNS, F(2), KC_POWER, KC_WAKE, KC_SLEP, LCTL(LALT(KC_L))}
39 } 45 }
40}; 46};
41 47
42enum macro_id {
43 M_Q0,
44 M_Q1,
45 M_Q2,
46 M_Q3
47};
48
49const uint16_t PROGMEM fn_actions[] = { 48const uint16_t PROGMEM fn_actions[] = {
50 [1] = ACTION_LAYER_MOMENTARY(4), // fn1 49 [1] = ACTION_LAYER_MOMENTARY(4), // fn1
51 [2] = ACTION_LAYER_MOMENTARY(5), // fn2 50 [2] = ACTION_LAYER_MOMENTARY(5), // fn2
@@ -57,32 +56,31 @@ const uint16_t PROGMEM fn_actions[] = {
57 [6] = ACTION_DEFAULT_LAYER_SET(0), 56 [6] = ACTION_DEFAULT_LAYER_SET(0),
58 [7] = ACTION_DEFAULT_LAYER_SET(1), 57 [7] = ACTION_DEFAULT_LAYER_SET(1),
59 [8] = ACTION_DEFAULT_LAYER_SET(2), 58 [8] = ACTION_DEFAULT_LAYER_SET(2),
59 [9] = ACTION_DEFAULT_LAYER_SET(3),
60 60
61 /* tab on tap, shift on hold */ 61 /* tab on tap, shift on hold */
62 [15] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_TAB), 62 [15] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_TAB),
63
64 /* smiley macros */
65 [25] = ACTION_MACRO(M_Q0),
66 [26] = ACTION_MACRO(M_Q1),
67 [27] = ACTION_MACRO(M_Q2),
68 [28] = ACTION_MACRO(M_Q3),
69}; 63};
70 64
71const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) 65const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
72{ 66{
73 switch (id) { 67 switch (id) {
74 case M_Q0: 68 case 0:
75 /* :) */ 69 /* :) */
76 return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_SCLN), TYPE(KC_0), UP(KC_LSFT), END ); 70 return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_SCLN), TYPE(KC_0), UP(KC_LSFT), END );
77 case M_Q1: 71 break;
72 case 1:
78 /* :( */ 73 /* :( */
79 return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_SCLN), TYPE(KC_9), UP(KC_LSFT), END ); 74 return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_SCLN), TYPE(KC_9), UP(KC_LSFT), END );
80 case M_Q2: 75 break;
76 case 2:
81 /* (: | :) */ 77 /* (: | :) */
82 return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_9), TYPE(KC_SCLN), TYPE(KC_SPC), TYPE(KC_SPC), TYPE(KC_SCLN), TYPE(KC_0), UP(KC_LSFT), TYPE(KC_LEFT), TYPE(KC_LEFT), TYPE(KC_LEFT), END ); 78 return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_9), TYPE(KC_SCLN), TYPE(KC_SPC), TYPE(KC_SPC), TYPE(KC_SCLN), TYPE(KC_0), UP(KC_LSFT), TYPE(KC_LEFT), TYPE(KC_LEFT), TYPE(KC_LEFT), END );
83 case M_Q3: 79 break;
80 case 3:
84 /* :( | ): */ 81 /* :( | ): */
85 return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_SCLN), TYPE(KC_9), TYPE(KC_SPC), TYPE(KC_SPC), TYPE(KC_0), TYPE(KC_SCLN), UP(KC_LSFT), TYPE(KC_LEFT), TYPE(KC_LEFT), TYPE(KC_LEFT), END ); 82 return MACRODOWN( DOWN(KC_LSFT), TYPE(KC_SCLN), TYPE(KC_9), TYPE(KC_SPC), TYPE(KC_SPC), TYPE(KC_0), TYPE(KC_SCLN), UP(KC_LSFT), TYPE(KC_LEFT), TYPE(KC_LEFT), TYPE(KC_LEFT), END );
83 break;
86 default: 84 default:
87 break; 85 break;
88 } 86 }
diff --git a/keyboard/planck/matrix.c b/keyboard/planck/matrix_handwired.c
index 2ae69c3c8..2ae69c3c8 100644
--- a/keyboard/planck/matrix.c
+++ b/keyboard/planck/matrix_handwired.c
diff --git a/keyboard/planck/matrix_pcb.c b/keyboard/planck/matrix_pcb.c
index 48510cd83..6f6ccd5c1 100644
--- a/keyboard/planck/matrix_pcb.c
+++ b/keyboard/planck/matrix_pcb.c
@@ -181,6 +181,13 @@ static matrix_row_t read_cols(void)
181 181
182} 182}
183 183
184//
185// Planck PCB Rev 1 Pin Assignments
186//
187// Row: 0, 1, 2, 3
188// Pin: D0, D5, B5, B6
189//
190
184static void unselect_rows(void) 191static void unselect_rows(void)
185{ 192{
186 DDRB &= ~(1<<5 | 1<<6); 193 DDRB &= ~(1<<5 | 1<<6);
@@ -190,13 +197,6 @@ static void unselect_rows(void)
190 197
191} 198}
192 199
193//
194// Planck PCB Rev 1 Pin Assignments
195//
196// Row: 0, 1, 2, 3
197// Pin: D0, D5, B5, B6
198//
199
200static void select_row(uint8_t row) 200static void select_row(uint8_t row)
201{ 201{
202 switch (row) { 202 switch (row) {