aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboards/melgeek/z70ultra/config.h53
-rw-r--r--keyboards/melgeek/z70ultra/info.json160
-rw-r--r--keyboards/melgeek/z70ultra/keymaps/default/keymap.c34
-rw-r--r--keyboards/melgeek/z70ultra/keymaps/via/keymap.c48
-rw-r--r--keyboards/melgeek/z70ultra/keymaps/via/rules.mk2
-rw-r--r--keyboards/melgeek/z70ultra/readme.md15
-rw-r--r--keyboards/melgeek/z70ultra/rev1/config.h37
-rw-r--r--keyboards/melgeek/z70ultra/rev1/rules.mk22
-rw-r--r--keyboards/melgeek/z70ultra/rules.mk1
-rw-r--r--keyboards/melgeek/z70ultra/z70ultra.c181
-rw-r--r--keyboards/melgeek/z70ultra/z70ultra.h51
11 files changed, 604 insertions, 0 deletions
diff --git a/keyboards/melgeek/z70ultra/config.h b/keyboards/melgeek/z70ultra/config.h
new file mode 100644
index 000000000..d5a9d0a89
--- /dev/null
+++ b/keyboards/melgeek/z70ultra/config.h
@@ -0,0 +1,53 @@
1/* Copyright 2020 MelGeek <melgeek001365@gmail.com>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#include "config_common.h"
20
21/* USB Device descriptor parameter */
22#define VENDOR_ID 0xEDED
23#define PRODUCT_ID 0x6570
24#define DEVICE_VER 0x0001
25#define MANUFACTURER MelGeek
26#define PRODUCT Z70Ultra
27
28/* COL2ROW, ROW2COL*/
29#define DIODE_DIRECTION COL2ROW
30
31/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
32#define DEBOUNCE 3
33
34/* disable these deprecated features by default */
35#define NO_ACTION_MACRO
36#define NO_ACTION_FUNCTION
37
38#define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
39#define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
40#define RGB_MATRIX_KEYPRESSES
41#define RGB_MATRIX_LED_PROCESS_LIMIT 4
42#define RGB_MATRIX_LED_FLUSH_LIMIT 26
43#define DISABLE_RGB_MATRIX_SPLASH
44#define DISABLE_RGB_MATRIX_MULTISPLASH
45#define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
46//#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_COLOR
47#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_ALL
48#define DRIVER_ADDR_1 0b0110000
49#define DRIVER_ADDR_2 0b0110000 // this is here for compliancy reasons.
50#define DRIVER_COUNT 1
51#define DRIVER_1_LED_TOTAL 69
52#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
53#define DRIVER_INDICATOR_LED_TOTAL 6
diff --git a/keyboards/melgeek/z70ultra/info.json b/keyboards/melgeek/z70ultra/info.json
new file mode 100644
index 000000000..9959e6384
--- /dev/null
+++ b/keyboards/melgeek/z70ultra/info.json
@@ -0,0 +1,160 @@
1{
2 "keyboard_name": "Z70Ultra",
3 "url": "",
4 "maintainer": "melgeek001365",
5 "width": 16,
6 "height": 5,
7 "layouts": {
8 "LAYOUT_65_ansi_blocker": {
9 "layout": [
10 {"x":0, "y":0},
11 {"x":1, "y":0},
12 {"x":2, "y":0},
13 {"x":3, "y":0},
14 {"x":4, "y":0},
15 {"x":5, "y":0},
16 {"x":6, "y":0},
17 {"x":7, "y":0},
18 {"x":8, "y":0},
19 {"x":9, "y":0},
20 {"x":10, "y":0},
21 {"x":11, "y":0},
22 {"x":12, "y":0},
23 {"x":13, "y":0, "w":2},
24 {"x":15, "y":0},
25
26 {"x":0, "y":1, "w":1.5},
27 {"x":1.5, "y":1},
28 {"x":2.5, "y":1},
29 {"x":3.5, "y":1},
30 {"x":4.5, "y":1},
31 {"x":5.5, "y":1},
32 {"x":6.5, "y":1},
33 {"x":7.5, "y":1},
34 {"x":8.5, "y":1},
35 {"x":9.5, "y":1},
36 {"x":10.5, "y":1},
37 {"x":11.5, "y":1},
38 {"x":12.5, "y":1},
39 {"x":13.5, "y":1, "w":1.5},
40 {"x":15, "y":1},
41
42 {"x":0, "y":2, "w":1.75},
43 {"x":1.75, "y":2},
44 {"x":2.75, "y":2},
45 {"x":3.75, "y":2},
46 {"x":4.75, "y":2},
47 {"x":5.75, "y":2},
48 {"x":6.75, "y":2},
49 {"x":7.75, "y":2},
50 {"x":8.75, "y":2},
51 {"x":9.75, "y":2},
52 {"x":10.75, "y":2},
53 {"x":11.75, "y":2},
54 {"x":12.75, "y":2, "w":2.25},
55 {"x":15, "y":2},
56
57 {"x":0, "y":3, "w":2.25},
58 {"x":2.25, "y":3},
59 {"x":3.25, "y":3},
60 {"x":4.25, "y":3},
61 {"x":5.25, "y":3},
62 {"x":6.25, "y":3},
63 {"x":7.25, "y":3},
64 {"x":8.25, "y":3},
65 {"x":9.25, "y":3},
66 {"x":10.25, "y":3},
67 {"x":11.25, "y":3},
68 {"x":12.25, "y":3, "w":1.75},
69 {"x":14, "y":3},
70 {"x":15, "y":3},
71
72 {"x":0, "y":4, "w":1.25},
73 {"x":1.25, "y":4, "w":1.25},
74 {"x":2.5, "y":4, "w":1.25},
75 {"x":3.75, "y":4, "w":6.25},
76 {"x":10, "y":4, "w":1.25},
77 {"x":11.25, "y":4, "w":1.25},
78 {"x":13, "y":4},
79 {"x":14, "y":4},
80 {"x":15, "y":4}
81 ]
82 },
83 "LAYOUT_ansi_split_space": {
84 "layout": [
85 {"x":0, "y":0},
86 {"x":1, "y":0},
87 {"x":2, "y":0},
88 {"x":3, "y":0},
89 {"x":4, "y":0},
90 {"x":5, "y":0},
91 {"x":6, "y":0},
92 {"x":7, "y":0},
93 {"x":8, "y":0},
94 {"x":9, "y":0},
95 {"x":10, "y":0},
96 {"x":11, "y":0},
97 {"x":12, "y":0},
98 {"x":13, "y":0, "w":2},
99 {"x":15, "y":0},
100
101 {"x":0, "y":1, "w":1.5},
102 {"x":1.5, "y":1},
103 {"x":2.5, "y":1},
104 {"x":3.5, "y":1},
105 {"x":4.5, "y":1},
106 {"x":5.5, "y":1},
107 {"x":6.5, "y":1},
108 {"x":7.5, "y":1},
109 {"x":8.5, "y":1},
110 {"x":9.5, "y":1},
111 {"x":10.5, "y":1},
112 {"x":11.5, "y":1},
113 {"x":12.5, "y":1},
114 {"x":13.5, "y":1, "w":1.5},
115 {"x":15, "y":1},
116
117 {"x":0, "y":2, "w":1.75},
118 {"x":1.75, "y":2},
119 {"x":2.75, "y":2},
120 {"x":3.75, "y":2},
121 {"x":4.75, "y":2},
122 {"x":5.75, "y":2},
123 {"x":6.75, "y":2},
124 {"x":7.75, "y":2},
125 {"x":8.75, "y":2},
126 {"x":9.75, "y":2},
127 {"x":10.75, "y":2},
128 {"x":11.75, "y":2},
129 {"x":12.75, "y":2, "w":2.25},
130 {"x":15, "y":2},
131
132 {"x":0, "y":3, "w":2.25},
133 {"x":2.25, "y":3},
134 {"x":3.25, "y":3},
135 {"x":4.25, "y":3},
136 {"x":5.25, "y":3},
137 {"x":6.25, "y":3},
138 {"x":7.25, "y":3},
139 {"x":8.25, "y":3},
140 {"x":9.25, "y":3},
141 {"x":10.25, "y":3},
142 {"x":11.25, "y":3},
143 {"x":12.25, "y":3, "w":1.75},
144 {"x":14, "y":3},
145 {"x":15, "y":3},
146
147 {"x":0, "y":4, "w":1.25},
148 {"x":1.25, "y":4, "w":1.25},
149 {"x":2.5, "y":4, "w":1.25},
150 {"x":3.75, "y":4, "w":3},
151 {"x":6.75, "y":4, "w":3},
152 {"x":9.75, "y":4, "w":1.5},
153 {"x":11.25, "y":4, "w":1.25},
154 {"x":13, "y":4},
155 {"x":14, "y":4},
156 {"x":15, "y":4}
157 ]
158 }
159 }
160}
diff --git a/keyboards/melgeek/z70ultra/keymaps/default/keymap.c b/keyboards/melgeek/z70ultra/keymaps/default/keymap.c
new file mode 100644
index 000000000..e954776db
--- /dev/null
+++ b/keyboards/melgeek/z70ultra/keymaps/default/keymap.c
@@ -0,0 +1,34 @@
1/* Copyright 2020 MelGeek <melgeek001365@gmail.com>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include QMK_KEYBOARD_H
18
19const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
20 [0] = LAYOUT_65_ansi_blocker( /* Base */
21 KC_GESC, 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,
22 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_PGUP,
23 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_PGDN,
24 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_END,
25 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
26 ),
27 [1] = LAYOUT_65_ansi_blocker( /* FN */
28 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______,
29 _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, KC_PSCR, KC_SLCK, KC_PAUS, RESET, _______,
30 _______, RGB_SPI, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, EEP_RST, _______,
31 _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, KC_VOLU, _______,
32 _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
33 ),
34};
diff --git a/keyboards/melgeek/z70ultra/keymaps/via/keymap.c b/keyboards/melgeek/z70ultra/keymaps/via/keymap.c
new file mode 100644
index 000000000..a822ecdef
--- /dev/null
+++ b/keyboards/melgeek/z70ultra/keymaps/via/keymap.c
@@ -0,0 +1,48 @@
1/* Copyright 2020 MelGeek <melgeek001365@gmail.com>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include QMK_KEYBOARD_H
18
19const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
20 [0] = LAYOUT_65_ansi_blocker( /* Base */
21 KC_GESC, 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,
22 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_PGUP,
23 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_PGDN,
24 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_END,
25 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
26 ),
27 [1] = LAYOUT_65_ansi_blocker( /* FN */
28 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______,
29 _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, KC_PSCR, KC_SLCK, KC_PAUS, RESET, _______,
30 _______, RGB_SPI, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, _______, EEP_RST, _______,
31 _______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, KC_VOLU, _______,
32 _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
33 ),
34 [2] = LAYOUT_65_ansi_blocker(
35 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
36 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
37 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
38 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
39 _______, _______, _______, _______, _______, _______, _______, _______, _______
40 ),
41 [3] = LAYOUT_65_ansi_blocker(
42 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
43 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
44 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
45 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
46 _______, _______, _______, _______, _______, _______, _______, _______, _______
47 )
48};
diff --git a/keyboards/melgeek/z70ultra/keymaps/via/rules.mk b/keyboards/melgeek/z70ultra/keymaps/via/rules.mk
new file mode 100644
index 000000000..36b7ba9cb
--- /dev/null
+++ b/keyboards/melgeek/z70ultra/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
1VIA_ENABLE = yes
2LTO_ENABLE = yes
diff --git a/keyboards/melgeek/z70ultra/readme.md b/keyboards/melgeek/z70ultra/readme.md
new file mode 100644
index 000000000..f772fcf06
--- /dev/null
+++ b/keyboards/melgeek/z70ultra/readme.md
@@ -0,0 +1,15 @@
1# Z70 Ultra
2
3![z70ultra](https://cdn.shopify.cn/s/files/1/0078/2863/5712/products/7aef4938a6ebf273c53516f8f9579858_1024x1024@2x.jpg?v=1574605157)
4
5A hotswap 65% RGB Custom Mechanical keyboard.
6
7* Keyboard Maintainer: [MelGeek](https://github.com/melgeek001365)
8* Hardware Supported: Z70 Ultra V1.4 20200422
9* Hardware Availability: [MelGeek](https://www.melgeek.com/)
10
11Make example for this keyboard (after setting up your build environment):
12
13 make melgeek/z70ultra/rev1:default
14
15See 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/melgeek/z70ultra/rev1/config.h b/keyboards/melgeek/z70ultra/rev1/config.h
new file mode 100644
index 000000000..459305175
--- /dev/null
+++ b/keyboards/melgeek/z70ultra/rev1/config.h
@@ -0,0 +1,37 @@
1/* Copyright 2020 MelGeek <melgeek001365@gmail.com>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19/* key matrix size */
20#define MATRIX_ROWS 6
21#define MATRIX_COLS 14
22
23/*
24 * Keyboard Matrix Assignments
25 *
26 * Change this to how you wired your keyboard
27 * COLS: AVR pins used for columns, left to right
28 * ROWS: AVR pins used for rows, top to bottom
29 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
30 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
31 *
32 */
33
34#define MATRIX_ROW_PINS { B12, B13, B14, B15, A3, B9 }
35#define MATRIX_COL_PINS { B11, B10, B1, A10, B5, B4, B3, A15, A2, A1, A0, C15, C14, C13 }
36#define UNUSED_PINS
37
diff --git a/keyboards/melgeek/z70ultra/rev1/rules.mk b/keyboards/melgeek/z70ultra/rev1/rules.mk
new file mode 100644
index 000000000..cd262021b
--- /dev/null
+++ b/keyboards/melgeek/z70ultra/rev1/rules.mk
@@ -0,0 +1,22 @@
1# MCU name
2MCU = STM32F303
3
4# Build Options
5# change yes to no to disable
6#
7BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
8MOUSEKEY_ENABLE = yes # Mouse keys
9EXTRAKEY_ENABLE = yes # Audio control and System control
10CONSOLE_ENABLE = no # Console for debug
11COMMAND_ENABLE = no # Commands for debug and configuration
12# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
13SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
14# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
15NKRO_ENABLE = yes # USB Nkey Rollover
16BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
17RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
18BLUETOOTH_ENABLE = no # Enable Bluetooth
19RGB_MATRIX_ENABLE = IS31FL3741 # Use RGB matrix
20NO_USB_STARTUP_CHECK = no # Disable initialization only when usb is plugged in
21
22LAYOUTS = 65_ansi_blocker
diff --git a/keyboards/melgeek/z70ultra/rules.mk b/keyboards/melgeek/z70ultra/rules.mk
new file mode 100644
index 000000000..8cc384b91
--- /dev/null
+++ b/keyboards/melgeek/z70ultra/rules.mk
@@ -0,0 +1 @@
DEFAULT_FOLDER = melgeek/z70ultra/rev1
diff --git a/keyboards/melgeek/z70ultra/z70ultra.c b/keyboards/melgeek/z70ultra/z70ultra.c
new file mode 100644
index 000000000..a98edd939
--- /dev/null
+++ b/keyboards/melgeek/z70ultra/z70ultra.c
@@ -0,0 +1,181 @@
1/* Copyright 2020 MelGeek <melgeek001365@gmail.com>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include "z70ultra.h"
18
19
20#ifdef RGB_MATRIX_ENABLE
21const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
22 {0, CS28_SW1, CS30_SW1, CS29_SW1}, /* RGB10 */
23 {0, CS28_SW2, CS30_SW2, CS29_SW2}, /* RGB11 */
24 {0, CS28_SW3, CS30_SW3, CS29_SW3}, /* RGB12 */
25 {0, CS28_SW4, CS30_SW4, CS29_SW4}, /* RGB13 */
26 {0, CS28_SW5, CS30_SW5, CS29_SW5}, /* RGB14 */
27 {0, CS28_SW6, CS30_SW6, CS29_SW6}, /* RGB15 */
28 {0, CS28_SW7, CS30_SW7, CS29_SW7}, /* RGB16 */
29 {0, CS28_SW8, CS30_SW8, CS29_SW8}, /* RGB17 */
30 {0, CS28_SW9, CS30_SW9, CS29_SW9}, /* RGB18 */
31 {0, CS31_SW1, CS33_SW1, CS32_SW1}, /* RGB28 */
32 {0, CS31_SW2, CS33_SW2, CS32_SW2}, /* RGB29 */
33 {0, CS31_SW3, CS33_SW3, CS32_SW3}, /* RGB30 */
34 {0, CS31_SW4, CS33_SW4, CS32_SW4}, /* RGB31 */
35 {0, CS31_SW5, CS33_SW5, CS32_SW5}, /* RGB32 */
36 {0, CS31_SW6, CS33_SW6, CS32_SW6}, /* RGB33 */
37 {0, CS25_SW1, CS27_SW1, CS26_SW1}, /* RGB1 */
38 {0, CS25_SW2, CS27_SW2, CS26_SW2}, /* RGB2 */
39 {0, CS25_SW3, CS27_SW3, CS26_SW3}, /* RGB3 */
40 {0, CS25_SW4, CS27_SW4, CS26_SW4}, /* RGB4 */
41 {0, CS25_SW5, CS27_SW5, CS26_SW5}, /* RGB5 */
42 {0, CS25_SW6, CS27_SW6, CS26_SW6}, /* RGB6 */
43 {0, CS25_SW7, CS27_SW7, CS26_SW7}, /* RGB7 */
44 {0, CS25_SW8, CS27_SW8, CS26_SW8}, /* RGB8 */
45 {0, CS25_SW9, CS27_SW9, CS26_SW9}, /* RGB9 */
46 {0, CS34_SW1, CS36_SW1, CS35_SW1}, /* RGB46 */
47 {0, CS34_SW2, CS36_SW2, CS35_SW2}, /* RGB47 */
48 {0, CS34_SW3, CS36_SW3, CS35_SW3}, /* RGB48 */
49 {0, CS34_SW4, CS36_SW4, CS35_SW4}, /* RGB49 */
50 {0, CS34_SW5, CS36_SW5, CS35_SW5}, /* RGB50 */
51 {0, CS31_SW7, CS33_SW7, CS32_SW7}, /* RGB34 */
52 {0, CS22_SW1, CS24_SW1, CS23_SW1}, /* RGB37 */
53 {0, CS22_SW2, CS24_SW2, CS23_SW2}, /* RGB38 */
54 {0, CS22_SW3, CS24_SW3, CS23_SW3}, /* RGB39 */
55 {0, CS22_SW4, CS24_SW4, CS23_SW4}, /* RGB40 */
56 {0, CS22_SW5, CS24_SW5, CS23_SW5}, /* RGB41 */
57 {0, CS22_SW6, CS24_SW6, CS23_SW6}, /* RGB42 */
58 {0, CS22_SW7, CS24_SW7, CS23_SW7}, /* RGB43 */
59 {0, CS22_SW8, CS24_SW8, CS23_SW8}, /* RGB44 */
60 {0, CS22_SW9, CS24_SW9, CS23_SW9}, /* RGB45 */
61 {0, CS34_SW9, CS36_SW9, CS35_SW9}, /* RGB54 */
62 {0, CS34_SW8, CS36_SW8, CS35_SW8}, /* RGB53 */
63 {0, CS34_SW7, CS36_SW7, CS35_SW7}, /* RGB52 */
64 {0, CS34_SW6, CS36_SW6, CS35_SW6}, /* RGB51 */
65 {0, CS31_SW8, CS33_SW8, CS32_SW8}, /* RGB35 */
66 {0, CS19_SW2, CS21_SW2, CS20_SW2}, /* RGB56 */
67 {0, CS19_SW4, CS21_SW4, CS20_SW4}, /* RGB60 */
68 {0, CS19_SW5, CS21_SW5, CS20_SW5}, /* RGB59 */
69 {0, CS19_SW6, CS21_SW6, CS20_SW6}, /* RGB60 */
70 {0, CS19_SW7, CS21_SW7, CS20_SW7}, /* RGB61 */
71 {0, CS19_SW8, CS21_SW8, CS20_SW8}, /* RGB62 */
72 {0, CS19_SW9, CS21_SW9, CS20_SW9}, /* RGB63 */
73 {0, CS19_SW3, CS21_SW3, CS20_SW3}, /* RGB57 */
74 {0, CS19_SW1, CS21_SW1, CS20_SW1}, /* RGB55 */
75 {0, CS37_SW5, CS39_SW5, CS38_SW5}, /* RGB23 */
76 {0, CS37_SW6, CS39_SW6, CS38_SW6}, /* RGB24 */
77 {0, CS37_SW7, CS39_SW7, CS38_SW7}, /* RGB25 */
78 {0, CS37_SW8, CS39_SW8, CS38_SW8}, /* RGB26 */
79 {0, CS31_SW9, CS33_SW9, CS32_SW9}, /* RGB36 */
80
81 {0, CS6_SW1, CS8_SW1, CS7_SW1}, /* RGB64 */
82 {0, CS6_SW3, CS8_SW3, CS7_SW3}, /* RGB66 */
83 {0, CS6_SW4, CS8_SW4, CS7_SW4}, /* RGB67 */
84 {0, CS6_SW5, CS8_SW5, CS7_SW5}, /* RGB69 */
85 {0, CS6_SW6, CS8_SW6, CS7_SW6}, /* RGB70 */
86 {0, CS6_SW2, CS8_SW2, CS7_SW2}, /* RGB65 */
87
88 {0, CS37_SW1, CS39_SW1, CS38_SW1}, /* RGB19 */
89 {0, CS37_SW2, CS39_SW2, CS38_SW2}, /* RGB20 */
90 {0, CS37_SW3, CS39_SW3, CS38_SW3}, /* RGB21 */
91 {0, CS37_SW4, CS39_SW4, CS38_SW4}, /* RGB22 */
92 {0, CS37_SW9, CS39_SW9, CS38_SW9}, /* RGB27 */
93};
94led_config_t g_led_config = {
95 {
96 /* C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 */
97 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, }, /* R0 */
98 { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, }, /* R1 */
99 { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, NO_LED, 42, }, /* R2 */
100 { 44, NO_LED, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, NO_LED, }, /* R3 */
101 { 58, 59, 60, NO_LED, 61, 62, 63, NO_LED, NO_LED, 64, 65, NO_LED, NO_LED, NO_LED, }, /* R4 */
102 { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 14, 29, 56, 43, 57, 66, 67, 68, }, /* R5 */
103 }, {
104 {0, 0}, {16, 0}, {32, 0}, {48, 0}, {64, 0}, {80, 0}, {96, 0}, {112, 0}, {128, 0}, {144, 0}, {160, 0}, {176, 0}, {192, 0}, {208, 0},
105 {0, 16}, {16, 16}, {32, 16}, {48, 16}, {64, 16}, {80, 16}, {96, 16}, {112, 16}, {128, 16}, {144, 16}, {160, 16}, {176, 16}, {192, 16}, {208, 16},
106 {0, 32}, {16, 32}, {32, 32}, {48, 32}, {64, 32}, {80, 32}, {96, 32}, {112, 32}, {128, 32}, {144, 32}, {160, 32}, {176, 32}, {192, 32},
107 {0, 48}, {16, 48}, {32, 48}, {48, 48}, {64, 48}, {80, 48}, {96, 48}, {112, 48}, {128, 48}, {144, 48}, {160, 48}, {176, 48},
108 {0, 64}, {16, 64}, {32, 64}, {48, 64}, {64, 64}, {80, 64}, {96, 64}, {112, 64},
109 {0, 80}, {16, 80}, {32, 80}, {48, 80}, {64, 80}, {80, 80}, {96, 80}, {112, 80},
110 }, {
111 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
112 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
113 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
114 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
115 4, 4, 4, 4, 4, 4, 4, 4,
116 4, 4, 4, 4, 4, 4, 4, 4,
117 }
118};
119
120const is31_led g_is31_indicator_leds[6] = {
121 {0, CS5_SW1, CS3_SW1, CS4_SW1}, /* RGB71 */
122 {0, CS5_SW2, CS3_SW2, CS4_SW2}, /* RGB72 */
123 {0, CS5_SW3, CS3_SW3, CS4_SW3}, /* RGB73 */
124 {0, CS5_SW4, CS3_SW4, CS4_SW4}, /* RGB74 */
125 {0, CS5_SW5, CS3_SW5, CS4_SW5}, /* RGB75 */
126 {0, CS5_SW6, CS3_SW6, CS4_SW6}, /* RGB76 */
127};
128
129bool led_update_kb(led_t led_state) {
130 if (led_update_user(led_state)) {
131 if (led_state.caps_lock) {
132 IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[2], 0xff, 0x00, 0x00);
133 IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[3], 0xff, 0x00, 0x00);
134 } else {
135 IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[2], 0x00, 0x00, 0x00);
136 IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[3], 0x00, 0x00, 0x00);
137 }
138
139 if (led_state.num_lock) {
140 IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[1], 0x00, 0xff, 0x00);
141 IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[4], 0x00, 0xff, 0x00);
142 } else {
143 IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[1], 0x00, 0x00, 0x00);
144 IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[4], 0x00, 0x00, 0x00);
145 }
146
147 if (led_state.scroll_lock) {
148 IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[0], 0x00, 0x00, 0xff);
149 IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[5], 0x00, 0x00, 0xff);
150 } else {
151 IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[0], 0x00, 0x00, 0x00);
152 IS31FL3741_set_pwm_buffer(&g_is31_indicator_leds[5], 0x00, 0x00, 0x00);
153 }
154
155 // flush the indicator to the buffer
156 IS31FL3741_update_pwm_buffers(DRIVER_ADDR_1, DRIVER_ADDR_1);
157 }
158 return true;
159}
160
161void matrix_init_kb(void) {
162 for (int i = 0; i < DRIVER_INDICATOR_LED_TOTAL; ++i) {
163 is31_led led = g_is31_indicator_leds[i];
164 IS31FL3741_set_scaling_registers(&led, 0xFF, 0xFF, 0xFF);
165 }
166
167 IS31FL3741_update_led_control_registers(DRIVER_ADDR_1, 0);
168
169 matrix_init_user();
170}
171
172void suspend_power_down_kb(void) {
173 rgb_matrix_set_suspend_state(true);
174 suspend_power_down_user();
175}
176
177void suspend_wakeup_init_kb(void) {
178 rgb_matrix_set_suspend_state(false);
179 suspend_wakeup_init_user();
180}
181#endif
diff --git a/keyboards/melgeek/z70ultra/z70ultra.h b/keyboards/melgeek/z70ultra/z70ultra.h
new file mode 100644
index 000000000..8f7a84584
--- /dev/null
+++ b/keyboards/melgeek/z70ultra/z70ultra.h
@@ -0,0 +1,51 @@
1/* Copyright 2020 MelGeek <melgeek001365@gmail.com>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#include "quantum.h"
20
21#define XXX KC_NO
22
23#define LAYOUT_65_ansi_blocker( \
24 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
25 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
26 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, \
27 K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
28 K40, K41, K42, K45, K49, K4A, K4C, K4D, K4E \
29) { \
30 { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
31 { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
32 { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, XXX, K2D }, \
33 { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, XXX }, \
34 { K40, K41, K42, XXX, XXX, K45, XXX, XXX, XXX, K49, K4A, XXX, XXX, XXX }, \
35 { XXX, XXX, XXX, XXX, XXX, XXX, K0E, K1E, K3D, K2E, K3E, K4C, K4D, K4E } \
36}
37
38#define LAYOUT_ansi_split_space( \
39 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
40 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
41 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, \
42 K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
43 K40, K41, K42, K44, K46, K49, K4A, K4C, K4D, K4E \
44) { \
45 { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
46 { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
47 { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, XXX, K2D }, \
48 { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, XXX }, \
49 { K40, K41, K42, XXX, K44, XXX, K46, XXX, XXX, K49, K4A, XXX, XXX, XXX }, \
50 { XXX, XXX, XXX, XXX, XXX, XXX, K0E, K1E, K3D, K2E, K3E, K4C, K4D, K4E } \
51}