aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTerryMathews <terry@terrymathews.net>2022-02-04 16:18:42 -0500
committerGitHub <noreply@github.com>2022-02-04 13:18:42 -0800
commit13821fdbd7809ee311b38d3a593165c275b44879 (patch)
treea9baf35b142e1a0ce71b91aa9a463638c9d3bdb8
parentf52cc210b88936b666ed649eb243de1e0f64d88e (diff)
downloadqmk_firmware-13821fdbd7809ee311b38d3a593165c275b44879.tar.gz
qmk_firmware-13821fdbd7809ee311b38d3a593165c275b44879.zip
[Keyboard] TKC Portico75 (#15114)
Co-authored-by: Joel Challis <git@zvecr.com> Co-authored-by: Drashna Jael're <drashna@live.com>
-rw-r--r--keyboards/tkc/portico75/config.h179
-rw-r--r--keyboards/tkc/portico75/info.json10
-rw-r--r--keyboards/tkc/portico75/keymaps/default/keymap.c31
-rw-r--r--keyboards/tkc/portico75/keymaps/via/keymap.c109
-rw-r--r--keyboards/tkc/portico75/keymaps/via/rules.mk11
-rw-r--r--keyboards/tkc/portico75/portico75.c188
-rw-r--r--keyboards/tkc/portico75/portico75.h60
-rw-r--r--keyboards/tkc/portico75/readme.md21
-rw-r--r--keyboards/tkc/portico75/rules.mk22
-rw-r--r--keyboards/wilba_tech/wt_rgb_backlight.c193
10 files changed, 822 insertions, 2 deletions
diff --git a/keyboards/tkc/portico75/config.h b/keyboards/tkc/portico75/config.h
new file mode 100644
index 000000000..48be10a42
--- /dev/null
+++ b/keyboards/tkc/portico75/config.h
@@ -0,0 +1,179 @@
1/*
2Copyright 2021 Terry Mathews
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20#include "config_common.h"
21
22/* USB Device descriptor parameter */
23#define VENDOR_ID 0x544B // TK
24#define PRODUCT_ID 0x0011
25#define DEVICE_VER 0x0001
26#define MANUFACTURER TKC
27#define PRODUCT Portico75
28
29/* key matrix size */
30#define MATRIX_ROWS 6
31#define MATRIX_COLS 15
32
33#define MATRIX_ROW_PINS \
34 { B0, E6, F0, F1, D3, D2 }
35#define MATRIX_COL_PINS \
36 { F4, F5, F6, F7, C7, C6, B6, B5, B4, D7, D6, D4, D5, B3, B7 }
37
38/*Rotary Encoder Pins*/
39#define ENCODERS_PAD_A \
40 { B1 }
41#define ENCODERS_PAD_B \
42 { B2 }
43
44/*Sets the number of pulses per increment*/
45#define ENCODER_RESOLUTION 2
46
47/* COL2ROW, ROW2COL*/
48#define DIODE_DIRECTION COL2ROW
49
50/* disable these deprecated features by default */
51#define NO_ACTION_MACRO
52#define NO_ACTION_FUNCTION
53
54#ifdef RGB_MATRIX_ENABLE
55# define RGB_MATRIX_LED_PROCESS_LIMIT 4
56# define RGB_MATRIX_LED_FLUSH_LIMIT 26
57# define DEBOUNCE 3
58# define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
59# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
60# define RGB_MATRIX_KEYPRESSES
61
62// RGB Matrix Animation modes. Explicitly enabled
63// For full list of effects, see:
64// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
65# define ENABLE_RGB_MATRIX_ALPHAS_MODS
66// # define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
67# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
68# define ENABLE_RGB_MATRIX_BREATHING
69// # define ENABLE_RGB_MATRIX_BAND_SAT
70# define ENABLE_RGB_MATRIX_BAND_VAL
71// # define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
72# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
73// # define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
74# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
75# define ENABLE_RGB_MATRIX_CYCLE_ALL
76# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
77# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
78# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
79# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
80# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
81# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
82# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
83# define ENABLE_RGB_MATRIX_DUAL_BEACON
84# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
85# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
86# define ENABLE_RGB_MATRIX_RAINDROPS
87# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
88# define ENABLE_RGB_MATRIX_HUE_BREATHING
89# define ENABLE_RGB_MATRIX_HUE_PENDULUM
90# define ENABLE_RGB_MATRIX_HUE_WAVE
91# define ENABLE_RGB_MATRIX_PIXEL_RAIN
92# define ENABLE_RGB_MATRIX_PIXEL_FLOW
93# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
94// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
95# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
96// # define ENABLE_RGB_MATRIX_DIGITAL_RAIN
97// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
98// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
99// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
100// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
101// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
102// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
103// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
104// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
105// # define ENABLE_RGB_MATRIX_SPLASH
106// # define ENABLE_RGB_MATRIX_MULTISPLASH
107// # define ENABLE_RGB_MATRIX_SOLID_SPLASH
108// # define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
109
110# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200
111# define DRIVER_ADDR_1 0b0110000
112# define DRIVER_COUNT 1
113# define DRIVER_1_LED_TOTAL 98
114# define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
115# define DRIVER_INDICATOR_LED_TOTAL 0
116#else
117// WT_RGB IS31FL3741 driver code
118# define DRIVER_COUNT 1
119# define DRIVER_LED_TOTAL 98
120
121# define RGB_BACKLIGHT_ENABLED 1
122
123// This conditionally compiles the backlight code for Portico75 specifics
124# define RGB_BACKLIGHT_PORTICO75
125
126// disable backlight when USB suspended (PC sleep/hibernate/shutdown)
127# define RGB_BACKLIGHT_DISABLE_WHEN_USB_SUSPENDED 1
128
129// disable backlight after timeout in minutes, 0 = no timeout
130# define RGB_BACKLIGHT_DISABLE_AFTER_TIMEOUT 0
131
132// the default brightness
133# define RGB_BACKLIGHT_BRIGHTNESS 255
134
135// the default effect (RGB test)
136# define RGB_BACKLIGHT_EFFECT 255
137
138// the default effect speed (0-3)
139# define RGB_BACKLIGHT_EFFECT_SPEED 0
140
141// the default color1 and color2
142# define RGB_BACKLIGHT_COLOR_1 \
143 { .h = 0, .s = 255 }
144# define RGB_BACKLIGHT_COLOR_2 \
145 { .h = 127, .s = 255 }
146
147# define RGB_BACKLIGHT_USE_SPLIT_BACKSPACE 0
148# define RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT 0
149# define RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT 0
150# define RGB_BACKLIGHT_USE_7U_SPACEBAR 0
151# define RGB_BACKLIGHT_USE_ISO_ENTER 0
152# define RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS 0
153# define RGB_BACKLIGHT_CAPS_LOCK_INDICATOR \
154 { .color = {.h = 0, .s = 0}, .index = 255 }
155# define RGB_BACKLIGHT_LAYER_1_INDICATOR \
156 { .color = {.h = 0, .s = 0}, .index = 255 }
157# define RGB_BACKLIGHT_LAYER_2_INDICATOR \
158 { .color = {.h = 0, .s = 0}, .index = 255 }
159# define RGB_BACKLIGHT_LAYER_3_INDICATOR \
160 { .color = {.h = 0, .s = 0}, .index = 255 }
161
162// These define which keys in the matrix are alphas/mods
163// Used for backlight effects so colors are different for
164// alphas vs. mods
165// Each value is for a row, bit 0 is column 0
166// Alpha=0 Mod=1
167# define RGB_BACKLIGHT_ALPHAS_MODS_ROW_0 0b0110000000000001
168# define RGB_BACKLIGHT_ALPHAS_MODS_ROW_1 0b0110000000000001
169# define RGB_BACKLIGHT_ALPHAS_MODS_ROW_2 0b0111000000000001
170# define RGB_BACKLIGHT_ALPHAS_MODS_ROW_3 0b0111100000000001
171# define RGB_BACKLIGHT_ALPHAS_MODS_ROW_4 0b1111111111111111
172
173// Backlight config starts after VIA's EEPROM usage,
174// dynamic keymaps start after this.
175# define VIA_EEPROM_CUSTOM_CONFIG_SIZE 31
176
177// VIA lighting is handled by the keyboard-level code
178# define VIA_CUSTOM_LIGHTING_ENABLE
179#endif
diff --git a/keyboards/tkc/portico75/info.json b/keyboards/tkc/portico75/info.json
new file mode 100644
index 000000000..5aaf21ffc
--- /dev/null
+++ b/keyboards/tkc/portico75/info.json
@@ -0,0 +1,10 @@
1{
2 "keyboard_name": "TKC Portico75",
3 "url": "",
4 "maintainer": "TerryMathews",
5 "layouts": {
6 "LAYOUT_75_ansi": {
7 "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":1.25, "y":0}, {"label":"F2", "x":2.25, "y":0}, {"label":"F3", "x":3.25, "y":0}, {"label":"F4", "x":4.25, "y":0}, {"label":"F5", "x":5.5, "y":0}, {"label":"F6", "x":6.5, "y":0}, {"label":"F7", "x":7.5, "y":0}, {"label":"F8", "x":8.5, "y":0}, {"label":"F9", "x":9.75, "y":0}, {"label":"F10", "x":10.75, "y":0}, {"label":"F11", "x":11.75, "y":0}, {"label":"F12", "x":12.75, "y":0}, {"label":"Del", "x":14, "y":0}, {"label":"Mute", "x":15, "y":0}, {"label":"~", "x":0, "y":1.25}, {"label":"!", "x":1, "y":1.25}, {"label":"@", "x":2, "y":1.25}, {"label":"#", "x":3, "y":1.25}, {"label":"$", "x":4, "y":1.25}, {"label":"%", "x":5, "y":1.25}, {"label":"^", "x":6, "y":1.25}, {"label":"&", "x":7, "y":1.25}, {"label":"*", "x":8, "y":1.25}, {"label":"(", "x":9, "y":1.25}, {"label":")", "x":10, "y":1.25}, {"label":"_", "x":11, "y":1.25}, {"label":"+", "x":12, "y":1.25}, {"label":"Backspace", "x":13, "y":1.25, "w":2}, {"label":"Home", "x":15, "y":1.25}, {"label":"Tab", "x":0, "y":2.25, "w":1.5}, {"label":"Q", "x":1.5, "y":2.25}, {"label":"W", "x":2.5, "y":2.25}, {"label":"E", "x":3.5, "y":2.25}, {"label":"R", "x":4.5, "y":2.25}, {"label":"T", "x":5.5, "y":2.25}, {"label":"Y", "x":6.5, "y":2.25}, {"label":"U", "x":7.5, "y":2.25}, {"label":"I", "x":8.5, "y":2.25}, {"label":"O", "x":9.5, "y":2.25}, {"label":"P", "x":10.5, "y":2.25}, {"label":"{", "x":11.5, "y":2.25}, {"label":"}", "x":12.5, "y":2.25}, {"label":"|", "x":13.5, "y":2.25, "w":1.5}, {"label":"PgUp", "x":15, "y":2.25}, {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, {"label":"A", "x":1.75, "y":3.25}, {"label":"S", "x":2.75, "y":3.25}, {"label":"D", "x":3.75, "y":3.25}, {"label":"F", "x":4.75, "y":3.25}, {"label":"G", "x":5.75, "y":3.25}, {"label":"H", "x":6.75, "y":3.25}, {"label":"J", "x":7.75, "y":3.25}, {"label":"K", "x":8.75, "y":3.25}, {"label":"L", "x":9.75, "y":3.25}, {"label":":", "x":10.75, "y":3.25}, {"label":"\"", "x":11.75, "y":3.25}, {"label":"Enter", "x":12.75, "y":3.25, "w":2.25}, {"label":"Shift", "x":0, "y":4.25, "w":2.25}, {"label":"Z", "x":2.25, "y":4.25}, {"label":"X", "x":3.25, "y":4.25}, {"label":"C", "x":4.25, "y":4.25}, {"label":"V", "x":5.25, "y":4.25}, {"label":"B", "x":6.25, "y":4.25}, {"label":"N", "x":7.25, "y":4.25}, {"label":"M", "x":8.25, "y":4.25}, {"label":"<", "x":9.25, "y":4.25}, {"label":">", "x":10.25, "y":4.25}, {"label":"?", "x":11.25, "y":4.25}, {"label":"Shift", "x":12.25, "y":4.25, "w":1.75}, {"label":"<i class='kb kb-Arrows-Up'></i>", "x":14.25, "y":4.5}, {"label":"Ctrl", "x":0, "y":5.25, "w":1.25}, {"label":"Win", "x":1.25, "y":5.25, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.25, "w":1.25}, {"x":3.75, "y":5.25, "w":6.25}, {"label":"Fn", "x":10, "y":5.25, "w":1.5}, {"label":"Ctrl", "x":11.5, "y":5.25, "w":1.5}, {"label":"<i class='kb kb-Arrows-Left'></i>", "x":13.25, "y":5.5}, {"label":"<i class='kb kb-Arrows-Down'></i>", "x":14.25, "y":5.5}, {"label":"<i class='kb kb-Arrows-Right'></i>", "x":15.25, "y":5.5}]
8 }
9 }
10}
diff --git a/keyboards/tkc/portico75/keymaps/default/keymap.c b/keyboards/tkc/portico75/keymaps/default/keymap.c
new file mode 100644
index 000000000..957716489
--- /dev/null
+++ b/keyboards/tkc/portico75/keymaps/default/keymap.c
@@ -0,0 +1,31 @@
1/*
2Copyright 2021 Terry Mathews
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18
19#include QMK_KEYBOARD_H
20
21
22const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
23 [0] = LAYOUT_75_ansi(
24 KC_ESC, 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_PSCR, KC_MUTE,
25 KC_GRV, 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_BSPC, KC_HOME,
26 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_BSLS, KC_DEL,
27 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
28 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
29 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
30 )
31};
diff --git a/keyboards/tkc/portico75/keymaps/via/keymap.c b/keyboards/tkc/portico75/keymaps/via/keymap.c
new file mode 100644
index 000000000..cee94c4a1
--- /dev/null
+++ b/keyboards/tkc/portico75/keymaps/via/keymap.c
@@ -0,0 +1,109 @@
1/*
2Copyright 2021 Terry Mathews
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18
19#include QMK_KEYBOARD_H
20
21#define ENCODERS 1
22
23#define ENCODERS_CW_KEY { { 14, 3 } }
24#define ENCODERS_CCW_KEY { { 14, 4 } }
25
26static uint8_t encoder_state[ENCODERS] = {0};
27static keypos_t encoder_cw[ENCODERS] = ENCODERS_CW_KEY;
28static keypos_t encoder_ccw[ENCODERS] = ENCODERS_CCW_KEY;
29
30// WT RGB-specific keys:
31// EF_INC, EF_DEC, // next/previous backlight effect
32// H1_INC, H1_DEC, // Color 1 hue increase/decrease
33// S1_INC, S1_DEC, // Color 1 saturation increase/decrease
34// H2_INC, H2_DEC, // Color 2 hue increase/decrease
35// S2_INC, S2_DEC, // Color 2 saturation increase/decrease
36// BR_INC, BR_DEC, // backlight brightness increase/decrease
37
38const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
39 [0] = LAYOUT_75_via(
40 KC_ESC, 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_PSCR, KC_MUTE,
41 KC_GRV, 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_BSPC, KC_HOME,
42 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_BSLS, KC_DEL,
43 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_VOLD,
44 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_VOLU,
45 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
46 ),
47#ifdef RGB_BACKLIGHT_PORTICO75
48 [1] = LAYOUT_75_via(
49 _______, EF_INC, EF_DEC, H1_INC, H1_DEC, S1_INC, S1_DEC, H2_INC, H2_DEC, S2_INC, S2_DEC, BR_INC, BR_DEC, _______, _______,
50 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
51 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
52 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
53 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
54 _______, _______, _______, _______, _______, MO(1), _______, _______, _______
55 ),
56#else
57 [1] = LAYOUT_75_via(
58 _______, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______,
59 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
60 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
61 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
62 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
63 _______, _______, _______, _______, _______, MO(1), _______, _______, _______
64 ),
65#endif
66 [2] = LAYOUT_75_via(
67 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
68 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
69 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
70 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
71 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
72 _______, _______, _______, _______, _______, _______, _______, _______, _______
73 ),
74 [3] = LAYOUT_75_via(
75 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
76 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
77 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
78 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
79 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
80 _______, _______, _______, _______, _______, _______, _______, _______, _______
81 )
82};
83
84void encoder_action_unregister(void) {
85 for (int index = 0; index < ENCODERS; ++index) {
86 if (encoder_state[index]) {
87 keyevent_t encoder_event = (keyevent_t) {
88 .key = encoder_state[index] >> 1 ? encoder_cw[index] : encoder_ccw[index],
89 .pressed = false,
90 .time = (timer_read() | 1)
91 };
92 encoder_state[index] = 0;
93 action_exec(encoder_event);
94 }
95 }
96}
97
98void encoder_action_register(uint8_t index, bool clockwise) {
99 keyevent_t encoder_event = (keyevent_t){.key = clockwise ? encoder_cw[index] : encoder_ccw[index], .pressed = true, .time = (timer_read() | 1)};
100 encoder_state[index] = (clockwise ^ 1) | (clockwise << 1);
101 action_exec(encoder_event);
102}
103
104void matrix_scan_user(void) { encoder_action_unregister(); }
105
106bool encoder_update_user(uint8_t index, bool clockwise) {
107 encoder_action_register(index, clockwise);
108 return false;
109};
diff --git a/keyboards/tkc/portico75/keymaps/via/rules.mk b/keyboards/tkc/portico75/keymaps/via/rules.mk
new file mode 100644
index 000000000..9680dd937
--- /dev/null
+++ b/keyboards/tkc/portico75/keymaps/via/rules.mk
@@ -0,0 +1,11 @@
1VIA_ENABLE = yes
2LTO_ENABLE = yes
3RGB_MATRIX_ENABLE = no # Use RGB matrix
4
5# project specific files
6SRC += keyboards/wilba_tech/wt_main.c \
7 keyboards/wilba_tech/wt_rgb_backlight.c \
8 quantum/color.c \
9 drivers/led/issi/is31fl3741.c
10
11QUANTUM_LIB_SRC += i2c_master.c
diff --git a/keyboards/tkc/portico75/portico75.c b/keyboards/tkc/portico75/portico75.c
new file mode 100644
index 000000000..812345b38
--- /dev/null
+++ b/keyboards/tkc/portico75/portico75.c
@@ -0,0 +1,188 @@
1/*
2Copyright 2021 Terry Mathews
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18
19#include "portico75.h"
20
21#ifdef RGB_MATRIX_ENABLE
22
23const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL] = {
24 {0, CS18_SW1, CS17_SW1, CS16_SW1},
25 {0, CS18_SW2, CS17_SW2, CS16_SW2},
26 {0, CS18_SW3, CS17_SW3, CS16_SW3},
27 {0, CS18_SW4, CS17_SW4, CS16_SW4},
28 {0, CS18_SW5, CS17_SW5, CS16_SW5},
29 {0, CS18_SW6, CS17_SW6, CS16_SW6},
30 {0, CS18_SW7, CS17_SW7, CS16_SW7},
31 {0, CS18_SW8, CS17_SW8, CS16_SW8},
32 {0, CS18_SW9, CS17_SW9, CS16_SW9},
33
34 {0, CS21_SW1, CS20_SW1, CS19_SW1},
35 {0, CS21_SW2, CS20_SW2, CS19_SW2},
36 {0, CS21_SW3, CS20_SW3, CS19_SW3},
37 {0, CS21_SW4, CS20_SW4, CS19_SW4},
38 {0, CS21_SW5, CS20_SW5, CS19_SW5},
39 {0, CS21_SW6, CS20_SW6, CS19_SW6}, //Encoder, NO_LED
40
41 {0, CS15_SW1, CS14_SW1, CS13_SW1},
42 {0, CS15_SW2, CS14_SW2, CS13_SW2},
43 {0, CS15_SW3, CS14_SW3, CS13_SW3},
44 {0, CS15_SW4, CS14_SW4, CS13_SW4},
45 {0, CS15_SW5, CS14_SW5, CS13_SW5},
46 {0, CS15_SW6, CS14_SW6, CS13_SW6},
47 {0, CS15_SW7, CS14_SW7, CS13_SW7},
48 {0, CS15_SW8, CS14_SW8, CS13_SW8},
49 {0, CS15_SW9, CS14_SW9, CS13_SW9},
50
51 {0, CS24_SW1, CS23_SW1, CS22_SW1},
52 {0, CS24_SW2, CS23_SW2, CS22_SW2},
53 {0, CS24_SW3, CS23_SW3, CS22_SW3},
54 {0, CS24_SW4, CS23_SW4, CS22_SW4},
55 {0, CS24_SW5, CS23_SW5, CS22_SW5},
56 {0, CS24_SW6, CS23_SW6, CS22_SW6},
57
58 {0, CS12_SW1, CS11_SW1, CS10_SW1},
59 {0, CS12_SW2, CS11_SW2, CS10_SW2},
60 {0, CS12_SW3, CS11_SW3, CS10_SW3},
61 {0, CS12_SW4, CS11_SW4, CS10_SW4},
62 {0, CS12_SW5, CS11_SW5, CS10_SW5},
63 {0, CS12_SW6, CS11_SW6, CS10_SW6},
64 {0, CS12_SW7, CS11_SW7, CS10_SW7},
65 {0, CS12_SW8, CS11_SW8, CS10_SW8},
66 {0, CS12_SW9, CS11_SW9, CS10_SW9},
67
68 {0, CS27_SW1, CS26_SW1, CS25_SW1},
69 {0, CS27_SW2, CS26_SW2, CS25_SW2},
70 {0, CS27_SW3, CS26_SW3, CS25_SW3},
71 {0, CS27_SW4, CS26_SW4, CS25_SW4},
72 {0, CS27_SW5, CS26_SW5, CS25_SW5},
73 {0, CS27_SW6, CS26_SW6, CS25_SW6},
74
75 {0, CS9_SW1, CS8_SW1, CS7_SW1},
76 {0, CS9_SW2, CS8_SW2, CS7_SW2},
77 {0, CS9_SW3, CS8_SW3, CS7_SW3},
78 {0, CS9_SW4, CS8_SW4, CS7_SW4},
79 {0, CS9_SW5, CS8_SW5, CS7_SW5},
80 {0, CS9_SW6, CS8_SW6, CS7_SW6},
81 {0, CS9_SW7, CS8_SW7, CS7_SW7},
82 {0, CS9_SW8, CS8_SW8, CS7_SW8},
83 {0, CS9_SW9, CS8_SW9, CS7_SW9},
84
85 {0, CS30_SW1, CS29_SW1, CS28_SW1},
86 {0, CS30_SW2, CS29_SW2, CS28_SW2},
87 {0, CS30_SW3, CS29_SW3, CS28_SW3},
88 {0, CS30_SW4, CS29_SW4, CS28_SW4},
89
90 {0, CS6_SW1, CS5_SW1, CS4_SW1},
91 {0, CS6_SW2, CS5_SW2, CS4_SW2},
92 {0, CS6_SW3, CS5_SW3, CS4_SW3},
93 {0, CS6_SW4, CS5_SW4, CS4_SW4},
94 {0, CS6_SW5, CS5_SW5, CS4_SW5},
95 {0, CS6_SW6, CS5_SW6, CS4_SW6},
96 {0, CS6_SW7, CS5_SW7, CS4_SW7},
97 {0, CS6_SW8, CS5_SW8, CS4_SW8},
98 {0, CS6_SW9, CS5_SW9, CS4_SW9},
99
100 {0, CS33_SW1, CS32_SW1, CS31_SW1},
101 {0, CS33_SW2, CS32_SW2, CS31_SW2},
102 {0, CS33_SW3, CS32_SW3, CS31_SW3},
103 {0, CS33_SW4, CS32_SW4, CS31_SW4},
104
105 {0, CS3_SW1, CS2_SW1, CS1_SW1},
106 {0, CS3_SW2, CS2_SW2, CS1_SW2},
107 {0, CS3_SW3, CS2_SW3, CS1_SW3},
108 {0, CS3_SW6, CS2_SW6, CS1_SW6},
109 {0, CS3_SW8, CS2_SW8, CS1_SW8},
110 {0, CS3_SW9, CS2_SW9, CS1_SW9},
111
112 {0, CS36_SW1, CS35_SW1, CS34_SW1},
113 {0, CS36_SW2, CS35_SW2, CS34_SW2},
114 {0, CS36_SW3, CS35_SW3, CS34_SW3},
115
116/*UNDERGLOW*/
117 {0, CS39_SW1, CS38_SW1, CS37_SW1},
118 {0, CS39_SW2, CS38_SW2, CS37_SW2},
119 {0, CS39_SW3, CS38_SW3, CS37_SW3},
120 {0, CS39_SW4, CS38_SW4, CS37_SW4},
121 {0, CS39_SW5, CS38_SW5, CS37_SW5},
122 {0, CS39_SW6, CS38_SW6, CS37_SW6},
123 {0, CS39_SW7, CS38_SW7, CS37_SW7},
124 {0, CS39_SW8, CS38_SW8, CS37_SW8},
125 {0, CS39_SW9, CS38_SW9, CS37_SW9},
126
127 {0, CS36_SW4, CS35_SW4, CS34_SW4},
128 {0, CS36_SW5, CS35_SW5, CS34_SW5},
129 {0, CS36_SW6, CS35_SW6, CS34_SW6},
130 {0, CS36_SW7, CS35_SW7, CS34_SW7},
131 {0, CS36_SW8, CS35_SW8, CS34_SW8},
132 {0, CS36_SW9, CS35_SW9, CS34_SW9},
133
134 {0, CS33_SW5, CS32_SW5, CS31_SW5},
135 {0, CS33_SW6, CS32_SW6, CS31_SW6},
136 {0, CS33_SW7, CS32_SW7, CS31_SW7},
137
138};
139led_config_t g_led_config = { {
140 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14},
141 { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29},
142 { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44},
143 { 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, NO_LED, NO_LED},
144 { 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, NO_LED, NO_LED},
145 { 71, 72, 73, NO_LED, NO_LED, 74, NO_LED, NO_LED, NO_LED, 75, 76, 77, 78, 79, NO_LED},
146}, {
147 {0,0},{18,0},{33,0},{48,0},{62,0},{81,0},{96,0},{110,0},{125,0},{143,0},{158,0},{173,0},{187,0},{205,0},{224,0},
148 {0,15},{15,15},{29,15},{44,15},{59,15},{74,15},{88,15},{103,15},{118,15},{132,15},{147,15},{162,15},{176,15},{198,15},{224,15},
149 {4,26},{22,26},{37,26},{51,26},{66,26},{81,26},{96,26},{110,26},{125,26},{140,26},{154,26},{169,26},{183,26},{202,26},{224,26},
150 {5,38},{25,38},{40,38},{54,38},{69,38},{84,38},{98,38},{113,38},{128,38},{143,38},{157,38},{172,38},{197,38},
151 {9,49},{33,49},{48,49},{62,49},{77,49},{92,49},{107,49},{121,49},{136,49},{151,49},{165,49},{186,49},{209,52},
152 {2,61},{20,61},{39,61},{94,61},{151,61},{173,61},{195,64},{209,64},{224,64},
153 {2,0},{46,0},{90,0},{134,0},{178,0},{222,0},{224,2},{224,32},{224,62},{2,64},{46,64},{90,64},{134,64},{178,64},{222,64},{0,2},{0,32},{0,62},
154}, {
155 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
156 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
157 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
158 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
159 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
160 4, 4, 4, 4, 4, 4, 4, 4, 4,
161 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
162} };
163
164__attribute__ ((weak))
165void rgb_matrix_indicators_user(void)
166{
167 if (host_keyboard_led_state().caps_lock)
168 {
169 rgb_matrix_set_color(45, 0xFF, 0xFF, 0xFF);
170 }
171}
172#endif
173
174#ifdef ENCODER_ENABLE
175bool encoder_update_kb(uint8_t index, bool clockwise) {
176 if (!encoder_update_user(index, clockwise)) {
177 return false;
178 }
179 if (index == 0) {
180 if (clockwise) {
181 tap_code_delay(KC_VOLU, 10);
182 } else {
183 tap_code_delay(KC_VOLD, 10);
184 }
185 }
186 return true;
187}
188#endif
diff --git a/keyboards/tkc/portico75/portico75.h b/keyboards/tkc/portico75/portico75.h
new file mode 100644
index 000000000..019fb07f7
--- /dev/null
+++ b/keyboards/tkc/portico75/portico75.h
@@ -0,0 +1,60 @@
1/*
2Copyright 2021 Terry Mathews
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18
19#pragma once
20
21#include "quantum.h"
22
23#ifdef RGB_BACKLIGHT_PORTICO75
24#include "keyboards/wilba_tech/wt_rgb_backlight_keycodes.h"
25#include "via.h"
26#endif
27
28#define XXX KC_NO
29
30#define LAYOUT_75_ansi( \
31 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
32 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
33 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, \
34 K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \
35 K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, \
36 K50, K51, K52, K55, K59, K5A, K5B, K5C, K5D \
37) { \
38 { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
39 { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
40 { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E }, \
41 { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, XXX, XXX }, \
42 { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, XXX, XXX }, \
43 { K50, K51, K52, XXX, XXX, K55, XXX, XXX, XXX, K59, K5A, K5B, K5C, K5D, XXX } \
44}
45
46#define LAYOUT_75_via( \
47 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
48 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
49 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, \
50 K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3E, \
51 K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4E, \
52 K50, K51, K52, K55, K59, K5A, K5B, K5C, K5D \
53) { \
54 { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
55 { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
56 { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E }, \
57 { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, XXX, K3E }, \
58 { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, XXX, K4E }, \
59 { K50, K51, K52, XXX, XXX, K55, XXX, XXX, XXX, K59, K5A, K5B, K5C, K5D, XXX } \
60}
diff --git a/keyboards/tkc/portico75/readme.md b/keyboards/tkc/portico75/readme.md
new file mode 100644
index 000000000..3bb5ad319
--- /dev/null
+++ b/keyboards/tkc/portico75/readme.md
@@ -0,0 +1,21 @@
1# TKC Portico75
2
3![TKC Portico75](https://i.imgur.com/Bkd0kYS.jpg)
4
5A 75% keyboard kit with per-key and underglow RGB lighting and an encoder knob.
6
7* Keyboard Maintainer: [TerryMathews](https://github.com/TerryMathews)
8* Hardware Supported: TKC Portico75 (ATmega32U4)
9* Hardware Availability: TBA
10
11Reset board into bootloader by holding down Esc key while plugging in USB-C cable.
12
13Make example for this keyboard (after setting up your build environment):
14
15 make tkc/portico75:default
16
17Flashing example for this keyboard:
18
19 make tkc/portico75:default:flash
20
21See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/tkc/portico75/rules.mk b/keyboards/tkc/portico75/rules.mk
new file mode 100644
index 000000000..e8a74c902
--- /dev/null
+++ b/keyboards/tkc/portico75/rules.mk
@@ -0,0 +1,22 @@
1# MCU name
2MCU = atmega32u4
3
4# Bootloader selection
5BOOTLOADER = atmel-dfu
6
7# Build Options
8# change yes to no to disable
9#
10BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
11MOUSEKEY_ENABLE = yes # Mouse keys
12EXTRAKEY_ENABLE = yes # Audio control and System control
13CONSOLE_ENABLE = no # Console for debug
14COMMAND_ENABLE = yes # Commands for debug and configuration
15NKRO_ENABLE = yes # Enable N-Key Rollover
16BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
17RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
18AUDIO_ENABLE = no # Audio output
19RGB_MATRIX_ENABLE = yes # Use RGB matrix
20RGB_MATRIX_DRIVER = IS31FL3741
21CIE1931_CURVE = yes
22ENCODER_ENABLE = yes
diff --git a/keyboards/wilba_tech/wt_rgb_backlight.c b/keyboards/wilba_tech/wt_rgb_backlight.c
index cc34a90c7..a696fe7ed 100644
--- a/keyboards/wilba_tech/wt_rgb_backlight.c
+++ b/keyboards/wilba_tech/wt_rgb_backlight.c
@@ -31,6 +31,7 @@
31 defined(RGB_BACKLIGHT_U80_A) || \ 31 defined(RGB_BACKLIGHT_U80_A) || \
32 defined(RGB_BACKLIGHT_DAWN60) || \ 32 defined(RGB_BACKLIGHT_DAWN60) || \
33 defined(RGB_BACKLIGHT_PORTICO) || \ 33 defined(RGB_BACKLIGHT_PORTICO) || \
34 defined(RGB_BACKLIGHT_PORTICO75) || \
34 defined(RGB_BACKLIGHT_WT60_B) || \ 35 defined(RGB_BACKLIGHT_WT60_B) || \
35 defined(RGB_BACKLIGHT_WT60_BX) || \ 36 defined(RGB_BACKLIGHT_WT60_BX) || \
36 defined(RGB_BACKLIGHT_WT60_C) || \ 37 defined(RGB_BACKLIGHT_WT60_C) || \
@@ -89,6 +90,9 @@ LED_TYPE g_ws2812_leds[WS2812_LED_TOTAL];
89#elif defined(RGB_BACKLIGHT_NK87) 90#elif defined(RGB_BACKLIGHT_NK87)
90#include "drivers/led/issi/is31fl3733.h" 91#include "drivers/led/issi/is31fl3733.h"
91#define BACKLIGHT_LED_COUNT 128 92#define BACKLIGHT_LED_COUNT 128
93#elif defined(RGB_BACKLIGHT_PORTICO75)
94#include "drivers/led/issi/is31fl3741.h"
95#define BACKLIGHT_LED_COUNT 98
92#else 96#else
93#include "drivers/led/issi/is31fl3731.h" 97#include "drivers/led/issi/is31fl3731.h"
94#if defined(RGB_BACKLIGHT_U80_A) 98#if defined(RGB_BACKLIGHT_U80_A)
@@ -701,6 +705,135 @@ const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL] = {
701 { 1, C9_16, C7_15, C6_15 }, 705 { 1, C9_16, C7_15, C6_15 },
702 { 1, C8_16, C7_16, C6_16 } 706 { 1, C8_16, C7_16, C6_16 }
703}; 707};
708
709#elif defined(RGB_BACKLIGHT_PORTICO75)
710// This is a 7-bit address, that gets left-shifted and bit 0
711// set to 0 for write, 1 for read (as per I2C protocol)
712#define ISSI_ADDR_1 0x30
713#define ISSI_ADDR_2
714
715const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL] = {
716/* Refer to IS31 manual for these locations
717 * driver
718 * | R location
719 * | | G location
720 * | | | B location
721 * | | | | */
722 {0, CS18_SW1, CS17_SW1, CS16_SW1},
723 {0, CS18_SW2, CS17_SW2, CS16_SW2},
724 {0, CS18_SW3, CS17_SW3, CS16_SW3},
725 {0, CS18_SW4, CS17_SW4, CS16_SW4},
726 {0, CS18_SW5, CS17_SW5, CS16_SW5},
727 {0, CS18_SW6, CS17_SW6, CS16_SW6},
728 {0, CS18_SW7, CS17_SW7, CS16_SW7},
729 {0, CS18_SW8, CS17_SW8, CS16_SW8},
730 {0, CS18_SW9, CS17_SW9, CS16_SW9},
731
732 {0, CS21_SW1, CS20_SW1, CS19_SW1},
733 {0, CS21_SW2, CS20_SW2, CS19_SW2},
734 {0, CS21_SW3, CS20_SW3, CS19_SW3},
735 {0, CS21_SW4, CS20_SW4, CS19_SW4},
736 {0, CS21_SW5, CS20_SW5, CS19_SW5},
737 {0, CS21_SW6, CS20_SW6, CS19_SW6}, //Encoder, NO_LED
738
739 {0, CS15_SW1, CS14_SW1, CS13_SW1},
740 {0, CS15_SW2, CS14_SW2, CS13_SW2},
741 {0, CS15_SW3, CS14_SW3, CS13_SW3},
742 {0, CS15_SW4, CS14_SW4, CS13_SW4},
743 {0, CS15_SW5, CS14_SW5, CS13_SW5},
744 {0, CS15_SW6, CS14_SW6, CS13_SW6},
745 {0, CS15_SW7, CS14_SW7, CS13_SW7},
746 {0, CS15_SW8, CS14_SW8, CS13_SW8},
747 {0, CS15_SW9, CS14_SW9, CS13_SW9},
748
749 {0, CS24_SW1, CS23_SW1, CS22_SW1},
750 {0, CS24_SW2, CS23_SW2, CS22_SW2},
751 {0, CS24_SW3, CS23_SW3, CS22_SW3},
752 {0, CS24_SW4, CS23_SW4, CS22_SW4},
753 {0, CS24_SW5, CS23_SW5, CS22_SW5},
754 {0, CS24_SW6, CS23_SW6, CS22_SW6},
755
756 {0, CS12_SW1, CS11_SW1, CS10_SW1},
757 {0, CS12_SW2, CS11_SW2, CS10_SW2},
758 {0, CS12_SW3, CS11_SW3, CS10_SW3},
759 {0, CS12_SW4, CS11_SW4, CS10_SW4},
760 {0, CS12_SW5, CS11_SW5, CS10_SW5},
761 {0, CS12_SW6, CS11_SW6, CS10_SW6},
762 {0, CS12_SW7, CS11_SW7, CS10_SW7},
763 {0, CS12_SW8, CS11_SW8, CS10_SW8},
764 {0, CS12_SW9, CS11_SW9, CS10_SW9},
765
766 {0, CS27_SW1, CS26_SW1, CS25_SW1},
767 {0, CS27_SW2, CS26_SW2, CS25_SW2},
768 {0, CS27_SW3, CS26_SW3, CS25_SW3},
769 {0, CS27_SW4, CS26_SW4, CS25_SW4},
770 {0, CS27_SW5, CS26_SW5, CS25_SW5},
771 {0, CS27_SW6, CS26_SW6, CS25_SW6},
772
773 {0, CS9_SW1, CS8_SW1, CS7_SW1},
774 {0, CS9_SW2, CS8_SW2, CS7_SW2},
775 {0, CS9_SW3, CS8_SW3, CS7_SW3},
776 {0, CS9_SW4, CS8_SW4, CS7_SW4},
777 {0, CS9_SW5, CS8_SW5, CS7_SW5},
778 {0, CS9_SW6, CS8_SW6, CS7_SW6},
779 {0, CS9_SW7, CS8_SW7, CS7_SW7},
780 {0, CS9_SW8, CS8_SW8, CS7_SW8},
781 {0, CS9_SW9, CS8_SW9, CS7_SW9},
782
783 {0, CS30_SW1, CS29_SW1, CS28_SW1},
784 {0, CS30_SW2, CS29_SW2, CS28_SW2},
785 {0, CS30_SW3, CS29_SW3, CS28_SW3},
786 {0, CS30_SW4, CS29_SW4, CS28_SW4},
787
788 {0, CS6_SW1, CS5_SW1, CS4_SW1},
789 {0, CS6_SW2, CS5_SW2, CS4_SW2},
790 {0, CS6_SW3, CS5_SW3, CS4_SW3},
791 {0, CS6_SW4, CS5_SW4, CS4_SW4},
792 {0, CS6_SW5, CS5_SW5, CS4_SW5},
793 {0, CS6_SW6, CS5_SW6, CS4_SW6},
794 {0, CS6_SW7, CS5_SW7, CS4_SW7},
795 {0, CS6_SW8, CS5_SW8, CS4_SW8},
796 {0, CS6_SW9, CS5_SW9, CS4_SW9},
797
798 {0, CS33_SW1, CS32_SW1, CS31_SW1},
799 {0, CS33_SW2, CS32_SW2, CS31_SW2},
800 {0, CS33_SW3, CS32_SW3, CS31_SW3},
801 {0, CS33_SW4, CS32_SW4, CS31_SW4},
802
803 {0, CS3_SW1, CS2_SW1, CS1_SW1},
804 {0, CS3_SW2, CS2_SW2, CS1_SW2},
805 {0, CS3_SW3, CS2_SW3, CS1_SW3},
806 {0, CS3_SW6, CS2_SW6, CS1_SW6},
807 {0, CS3_SW8, CS2_SW8, CS1_SW8},
808 {0, CS3_SW9, CS2_SW9, CS1_SW9},
809
810 {0, CS36_SW1, CS35_SW1, CS34_SW1},
811 {0, CS36_SW2, CS35_SW2, CS34_SW2},
812 {0, CS36_SW3, CS35_SW3, CS34_SW3},
813
814/*UNDERGLOW*/
815 {0, CS39_SW1, CS38_SW1, CS37_SW1},
816 {0, CS39_SW2, CS38_SW2, CS37_SW2},
817 {0, CS39_SW3, CS38_SW3, CS37_SW3},
818 {0, CS39_SW4, CS38_SW4, CS37_SW4},
819 {0, CS39_SW5, CS38_SW5, CS37_SW5},
820 {0, CS39_SW6, CS38_SW6, CS37_SW6},
821 {0, CS39_SW7, CS38_SW7, CS37_SW7},
822 {0, CS39_SW8, CS38_SW8, CS37_SW8},
823 {0, CS39_SW9, CS38_SW9, CS37_SW9},
824
825 {0, CS36_SW4, CS35_SW4, CS34_SW4},
826 {0, CS36_SW5, CS35_SW5, CS34_SW5},
827 {0, CS36_SW6, CS35_SW6, CS34_SW6},
828 {0, CS36_SW7, CS35_SW7, CS34_SW7},
829 {0, CS36_SW8, CS35_SW8, CS34_SW8},
830 {0, CS36_SW9, CS35_SW9, CS34_SW9},
831
832 {0, CS33_SW5, CS32_SW5, CS31_SW5},
833 {0, CS33_SW6, CS32_SW6, CS31_SW6},
834 {0, CS33_SW7, CS32_SW7, CS31_SW7}
835};
836
704#elif defined(RGB_BACKLIGHT_M6_B) 837#elif defined(RGB_BACKLIGHT_M6_B)
705 // Driver has fixed mapping of index to the red, green and blue LEDs 838 // Driver has fixed mapping of index to the red, green and blue LEDs
706#elif defined(RGB_BACKLIGHT_M10_C) 839#elif defined(RGB_BACKLIGHT_M10_C)
@@ -865,7 +998,7 @@ const Point g_map_led_to_point[BACKLIGHT_LED_COUNT] PROGMEM = {
865 {112,64}, {100,48}, {84,48}, {68,48}, {52,48}, {36,48}, {64,60}, {44,60}, {24,64}, 998 {112,64}, {100,48}, {84,48}, {68,48}, {52,48}, {36,48}, {64,60}, {44,60}, {24,64},
866 {108,32}, {92,32}, {76,32}, {60,32}, {44,32}, {28,32}, {255,255}, {10,48}, {4,64}, 999 {108,32}, {92,32}, {76,32}, {60,32}, {44,32}, {28,32}, {255,255}, {10,48}, {4,64},
867 // LD0..LD1762 1000 // LD0..LD1762
868 1001
869 {124,32}, {140,32}, {156,32}, {172,32}, {188,32}, {214,32}, {180,48}, {202,48}, {224,48}, 1002 {124,32}, {140,32}, {156,32}, {172,32}, {188,32}, {214,32}, {180,48}, {202,48}, {224,48},
870 {116,48}, {132,48}, {148,48}, {164,48}, {255,255}, {160,60}, {180,64}, {208,64}, {255,255} 1003 {116,48}, {132,48}, {148,48}, {164,48}, {255,255}, {160,60}, {180,64}, {208,64}, {255,255}
871}; 1004};
@@ -1260,6 +1393,25 @@ const Point g_map_led_to_point_polar[BACKLIGHT_LED_COUNT] PROGMEM = {
1260 { 121, 215 }, { 119, 164 }, { 117, 134 }, { 114, 104 }, { 109, 76 }, { 98, 50 }, { 71, 34 }, { 37, 41 }, { 22, 65 }, { 15, 93 }, { 11, 122 }, { 8, 162 }, { 7, 205 }, { 6, 233 }, 1393 { 121, 215 }, { 119, 164 }, { 117, 134 }, { 114, 104 }, { 109, 76 }, { 98, 50 }, { 71, 34 }, { 37, 41 }, { 22, 65 }, { 15, 93 }, { 11, 122 }, { 8, 162 }, { 7, 205 }, { 6, 233 },
1261 { 116, 236 }, { 113, 199 }, { 110, 164 }, { 82, 74 }, { 27, 106 }, { 20, 138 }, { 15, 183 }, { 13, 212 }, { 11, 240 } 1394 { 116, 236 }, { 113, 199 }, { 110, 164 }, { 82, 74 }, { 27, 106 }, { 20, 138 }, { 15, 183 }, { 13, 212 }, { 11, 240 }
1262}; 1395};
1396#elif defined(RGB_BACKLIGHT_PORTICO75)
1397const Point g_map_led_to_point[BACKLIGHT_LED_COUNT] PROGMEM = {
1398 { 0, 0 }, { 18, 0 }, { 33, 0 }, { 48, 0 }, { 62, 0 }, { 81, 0 }, { 96, 0 }, { 110, 0 }, { 125, 0 }, { 143, 0 }, { 158, 0 }, { 173, 0 }, { 187, 0 }, { 205, 0 }, { 224, 0 },
1399 { 0, 15 }, { 15, 15 }, { 29, 15 }, { 44, 15 }, { 59, 15 }, { 74, 15 }, { 88, 15 }, { 103, 15 }, { 118, 15 }, { 132, 15 }, { 147, 15 }, { 162, 15 }, { 176, 15 }, { 198, 15 }, { 224, 15 },
1400 { 4, 26 }, { 22, 26 }, { 37, 26 }, { 51, 26 }, { 66, 26 }, { 81, 26 }, { 96, 26 }, { 110, 26 }, { 125, 26 }, { 140, 26 }, { 154, 26 }, { 169, 26 }, { 183, 26 }, { 202, 26 }, { 224, 26 },
1401 { 5, 38 }, { 25, 38 }, { 40, 38 }, { 54, 38 }, { 69, 38 }, { 84, 38 }, { 98, 38 }, { 113, 38 }, { 128, 38 }, { 143, 38 }, { 157, 38 }, { 172, 38 }, { 197, 38 },
1402 { 9, 49 }, { 33, 49 }, { 48, 49 }, { 62, 49 }, { 77, 49 }, { 92, 49 }, { 107, 49 }, { 121, 49 }, { 136, 49 }, { 151, 49 }, { 165, 49 }, { 186, 49 }, { 209, 49 },
1403 { 2, 61 }, { 20, 61 }, { 39, 61 }, { 94, 61 }, { 151, 61 }, { 173, 61 }, { 195, 64 }, { 209, 64 }, { 224, 64 },
1404 { 2, 0 }, { 46, 0 }, { 90, 0 }, { 134, 0 }, { 178, 0 }, { 222, 0 }, { 224, 2 }, { 224, 32 }, { 224, 62 }, { 2, 64 }, { 46, 64 }, { 90, 64 }, { 134, 64 }, { 178, 64 }, { 222, 64 }, { 0, 2 }, { 0, 32 }, { 0, 62 }
1405};
1406const Point g_map_led_to_point_polar[BACKLIGHT_LED_COUNT] PROGMEM = {
1407 { 138, 240 }, { 140, 205 }, { 143, 176 }, { 146, 147 }, { 150, 122 }, { 159, 92 }, { 172, 74 }, { 188, 66 }, { 206, 71 }, { 222, 92 }, { 229, 115 }, { 234, 142 }, { 238, 168 }, { 241, 203 }, { 243, 240 },
1408 { 133, 233 }, { 134, 203 }, { 135, 175 }, { 137, 144 }, { 140, 115 }, { 144, 86 }, { 152, 61 }, { 171, 40 }, { 204, 37 }, { 226, 54 }, { 236, 80 }, { 241, 109 }, { 244, 136 }, { 246, 181 }, { 248, 233 },
1409 { 129, 223 }, { 130, 186 }, { 130, 155 }, { 131, 126 }, { 132, 96 }, { 135, 65 }, { 142, 35 }, { 177, 13 }, { 237, 30 }, { 245, 59 }, { 248, 87 }, { 250, 118 }, { 251, 147 }, { 251, 186 }, { 252, 231 },
1410 { 125, 221 }, { 124, 180 }, { 124, 149 }, { 123, 120 }, { 121, 89 }, { 118, 59 }, { 111, 31 }, { 57, 13 }, { 15, 35 }, { 8, 65 }, { 5, 94 }, { 4, 124 }, { 3, 176 },
1411 { 120, 215 }, { 118, 166 }, { 117, 136 }, { 114, 109 }, { 109, 80 }, { 99, 54 }, { 75, 37 }, { 44, 40 }, { 25, 61 }, { 17, 88 }, { 13, 115 }, { 9, 156 }, { 7, 203 },
1412 { 117, 234 }, { 115, 199 }, { 112, 162 }, { 86, 70 }, { 26, 100 }, { 18, 139 }, { 15, 183 }, { 13, 210 }, { 11, 240 },
1413 { 138, 236 }, { 145, 151 }, { 166, 80 }, { 215, 80 }, { 236, 151 }, { 243, 236 }, { 243, 239 }, { 0, 231 }, { 11, 239 }, { 116, 236 }, { 109, 151 }, { 88, 80 }, { 39, 80 }, { 18, 151 }, { 11, 236 }, { 138, 239 }, { 127, 231 }, { 116, 239 }
1414};
1263#elif defined(RGB_BACKLIGHT_M50_A) 1415#elif defined(RGB_BACKLIGHT_M50_A)
1264const Point g_map_led_to_point[BACKLIGHT_LED_COUNT] PROGMEM = { 1416const Point g_map_led_to_point[BACKLIGHT_LED_COUNT] PROGMEM = {
1265 // LA0..LA17 1417 // LA0..LA17
@@ -1303,7 +1455,7 @@ void map_led_to_point( uint8_t index, Point *point )
1303 point->y = pgm_read_byte(addr+1); 1455 point->y = pgm_read_byte(addr+1);
1304 1456
1305#if defined(RGB_BACKLIGHT_M6_B) || defined(RGB_BACKLIGHT_M10_C) || defined(RGB_BACKLIGHT_HS60) || defined(RGB_BACKLIGHT_NK65) || defined(RGB_BACKLIGHT_PORTICO) || \ 1457#if defined(RGB_BACKLIGHT_M6_B) || defined(RGB_BACKLIGHT_M10_C) || defined(RGB_BACKLIGHT_HS60) || defined(RGB_BACKLIGHT_NK65) || defined(RGB_BACKLIGHT_PORTICO) || \
1306 defined(RGB_BACKLIGHT_NK87) || defined(RGB_BACKLIGHT_NEBULA68) || defined(RGB_BACKLIGHT_NEBULA12) || defined(RGB_BACKLIGHT_KW_MEGA) 1458 defined(RGB_BACKLIGHT_PORTICO75) || defined(RGB_BACKLIGHT_NK87) || defined(RGB_BACKLIGHT_NEBULA68) || defined(RGB_BACKLIGHT_NEBULA12) || defined(RGB_BACKLIGHT_KW_MEGA)
1307 return; 1459 return;
1308#endif 1460#endif
1309 1461
@@ -1586,6 +1738,15 @@ const uint8_t g_map_row_column_to_led[MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
1586 { 44, 255, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 }, 1738 { 44, 255, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 },
1587 { 58, 59, 60, 255, 255, 255, 61, 255, 255, 255, 62, 63, 64, 65, 66 } 1739 { 58, 59, 60, 255, 255, 255, 61, 255, 255, 255, 62, 63, 64, 65, 66 }
1588}; 1740};
1741#elif defined(RGB_BACKLIGHT_PORTICO75)
1742const uint8_t g_map_row_column_to_led[MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
1743 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 },
1744 { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 },
1745 { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44 },
1746 { 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 255, 255 },
1747 { 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 255, 255 },
1748 { 71, 72, 73, 255, 255, 74, 255, 255, 255, 75, 76, 77, 78, 79, 255 }
1749};
1589#elif defined(RGB_BACKLIGHT_M50_A) 1750#elif defined(RGB_BACKLIGHT_M50_A)
1590// LA15, LA14, LA13, LA12, LA11, LA10, LA9, LB1, LB2, LB3, LB4, LB5, LB6 1751// LA15, LA14, LA13, LA12, LA11, LA10, LA9, LB1, LB2, LB3, LB4, LB5, LB6
1591// LA16, LA6, LA5, LA4, LA3, LA2, LA1, LB9, LB10, LB11, LB12, LB13, LB14 1752// LA16, LA6, LA5, LA4, LA3, LA2, LA1, LB9, LB10, LB11, LB12, LB13, LB14
@@ -1612,6 +1773,9 @@ void backlight_update_pwm_buffers(void)
1612{ 1773{
1613#if defined(RGB_BACKLIGHT_M6_B) 1774#if defined(RGB_BACKLIGHT_M6_B)
1614 IS31FL3218_update_pwm_buffers(); 1775 IS31FL3218_update_pwm_buffers();
1776#elif defined(RGB_BACKLIGHT_PORTICO75)
1777 IS31FL3741_update_pwm_buffers( ISSI_ADDR_1, 0 );
1778 IS31FL3741_update_led_control_registers( ISSI_ADDR_1, 0 );
1615#elif defined(RGB_BACKLIGHT_M10_C) 1779#elif defined(RGB_BACKLIGHT_M10_C)
1616 IS31FL3731_update_pwm_buffers( ISSI_ADDR_1, 0 ); 1780 IS31FL3731_update_pwm_buffers( ISSI_ADDR_1, 0 );
1617 IS31FL3731_update_led_control_registers( ISSI_ADDR_1, 0 ); 1781 IS31FL3731_update_led_control_registers( ISSI_ADDR_1, 0 );
@@ -1660,6 +1824,8 @@ void backlight_set_color( int index, uint8_t red, uint8_t green, uint8_t blue )
1660 IS31FL3733_set_color( index, red, green, blue ); 1824 IS31FL3733_set_color( index, red, green, blue );
1661#elif defined (RGB_BACKLIGHT_PORTICO) 1825#elif defined (RGB_BACKLIGHT_PORTICO)
1662 IS31FL3731_set_color( index, red, green, blue ); 1826 IS31FL3731_set_color( index, red, green, blue );
1827#elif defined (RGB_BACKLIGHT_PORTICO75)
1828 IS31FL3741_set_color( index, red, green, blue );
1663#elif defined(RGB_BACKLIGHT_NK87) 1829#elif defined(RGB_BACKLIGHT_NK87)
1664 // This is done to avoid indicator LEDs being set 1830 // This is done to avoid indicator LEDs being set
1665 if (( index != 63+64-1 ) && ( index != 48+64-1 )) { 1831 if (( index != 63+64-1 ) && ( index != 48+64-1 )) {
@@ -1693,6 +1859,11 @@ void backlight_set_color_all( uint8_t red, uint8_t green, uint8_t blue )
1693 for (int i = 0; i < BACKLIGHT_LED_COUNT; i++) { 1859 for (int i = 0; i < BACKLIGHT_LED_COUNT; i++) {
1694 IS31FL3731_set_color(i, red, green, blue); 1860 IS31FL3731_set_color(i, red, green, blue);
1695 } 1861 }
1862#elif defined (RGB_BACKLIGHT_PORTICO75)
1863 // This is done to avoid indicator LEDs being set
1864 for (int i = 0; i < BACKLIGHT_LED_COUNT; i++) {
1865 IS31FL3741_set_color(i, red, green, blue);
1866 }
1696#elif defined(RGB_BACKLIGHT_NK87) 1867#elif defined(RGB_BACKLIGHT_NK87)
1697 // This is done to avoid indicator LEDs being set 1868 // This is done to avoid indicator LEDs being set
1698 for (int i = 0; i < BACKLIGHT_LED_COUNT; i++) { 1869 for (int i = 0; i < BACKLIGHT_LED_COUNT; i++) {
@@ -1933,6 +2104,15 @@ void backlight_effect_alphas_mods(void)
1933 { 2104 {
1934 is_alpha = ( column < 16 ) && (( g_config.alphas_mods[row-1] & (1<<column) ) == 0); 2105 is_alpha = ( column < 16 ) && (( g_config.alphas_mods[row-1] & (1<<column) ) == 0);
1935 } 2106 }
2107#elif defined(RGB_BACKLIGHT_PORTICO75)
2108 if ( row == 0 )
2109 {
2110 is_alpha = ( ( 0b11100000111100001 & (1<<column) ) == 0);
2111 }
2112 else
2113 {
2114 is_alpha = ( column < 16 ) && (( g_config.alphas_mods[row-1] & (1<<column) ) == 0);
2115 }
1936#else 2116#else
1937 is_alpha = ( g_config.alphas_mods[row] & (1<<column) ) == 0; 2117 is_alpha = ( g_config.alphas_mods[row] & (1<<column) ) == 0;
1938#endif 2118#endif
@@ -2824,6 +3004,15 @@ void backlight_init_drivers(void)
2824 // This actually updates the LED drivers 3004 // This actually updates the LED drivers
2825 IS31FL3733_update_led_control_registers( ISSI_ADDR_1, 0 ); 3005 IS31FL3733_update_led_control_registers( ISSI_ADDR_1, 0 );
2826 IS31FL3733_update_led_control_registers( ISSI_ADDR_2, 1 ); 3006 IS31FL3733_update_led_control_registers( ISSI_ADDR_2, 1 );
3007#elif defined(RGB_BACKLIGHT_PORTICO75)
3008 IS31FL3741_init( ISSI_ADDR_1 );
3009 bool enabled = true;
3010 for ( int index = 0; index < DRIVER_LED_TOTAL; index++ )
3011 {
3012 IS31FL3741_set_led_control_register( index, enabled, enabled, enabled );
3013 }
3014 // This actually updates the LED drivers
3015 IS31FL3741_update_led_control_registers( ISSI_ADDR_1, 0 );
2827#elif defined(RGB_BACKLIGHT_KW_MEGA) 3016#elif defined(RGB_BACKLIGHT_KW_MEGA)
2828 IS31FL3733_init( ISSI_ADDR_1, 0 ); 3017 IS31FL3733_init( ISSI_ADDR_1, 0 );
2829 IS31FL3733_init( ISSI_ADDR_2, 0 ); 3018 IS31FL3733_init( ISSI_ADDR_2, 0 );