aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilba6582 <Wilba6582@users.noreply.github.com>2018-09-28 00:40:44 +1000
committerJack Humbert <jack.humb@gmail.com>2018-09-27 10:40:44 -0400
commit13e166d9c42845e2622605e94d4a0c38fa5443a0 (patch)
tree9cde88ff3efd79a20be1e52ad7ffaf5c3ee7f848
parentf70f45ee677a2a39a759052a356e0c5d82e25424 (diff)
downloadqmk_firmware-13e166d9c42845e2622605e94d4a0c38fa5443a0.tar.gz
qmk_firmware-13e166d9c42845e2622605e94d4a0c38fa5443a0.zip
RAMA U80-A, wilba.tech WT60-A, WT65-A, WT80-A, IS31FL3736 driver (#3925)
* Initial commit of RAMA U80-A * Initial commit of RAMA U80-A * Moved IS31FL3736 driver, minor cleanups * Superficial stuff * Review changes * Refactored to use common code.
-rw-r--r--drivers/issi/is31fl3736.c306
-rw-r--r--drivers/issi/is31fl3736.h172
-rw-r--r--keyboards/rama/readme.md2
-rw-r--r--keyboards/rama/u80_a/config.h187
-rw-r--r--keyboards/rama/u80_a/info.json13
-rw-r--r--keyboards/rama/u80_a/keymaps/default/keymap.c22
-rw-r--r--keyboards/rama/u80_a/readme.md15
-rw-r--r--keyboards/rama/u80_a/rules.mk68
-rw-r--r--keyboards/rama/u80_a/u80_a.c17
-rw-r--r--keyboards/rama/u80_a/u80_a.h43
-rw-r--r--keyboards/wilba_tech/wt60_a/config.h187
-rw-r--r--keyboards/wilba_tech/wt60_a/info.json16
-rw-r--r--keyboards/wilba_tech/wt60_a/keymaps/ansi_split_bs_rshift/keymap.c38
-rw-r--r--keyboards/wilba_tech/wt60_a/keymaps/default/keymap.c38
-rw-r--r--keyboards/wilba_tech/wt60_a/readme.md15
-rw-r--r--keyboards/wilba_tech/wt60_a/rules.mk68
-rw-r--r--keyboards/wilba_tech/wt60_a/wt60_a.c17
-rw-r--r--keyboards/wilba_tech/wt60_a/wt60_a.h52
-rw-r--r--keyboards/wilba_tech/wt65_a/config.h187
-rw-r--r--keyboards/wilba_tech/wt65_a/info.json13
-rw-r--r--keyboards/wilba_tech/wt65_a/keymaps/default/keymap.c37
-rw-r--r--keyboards/wilba_tech/wt65_a/readme.md15
-rw-r--r--keyboards/wilba_tech/wt65_a/rules.mk68
-rw-r--r--keyboards/wilba_tech/wt65_a/wt65_a.c17
-rw-r--r--keyboards/wilba_tech/wt65_a/wt65_a.h41
-rw-r--r--keyboards/wilba_tech/wt80_a/config.h187
-rw-r--r--keyboards/wilba_tech/wt80_a/info.json13
-rw-r--r--keyboards/wilba_tech/wt80_a/keymaps/default/keymap.c22
-rw-r--r--keyboards/wilba_tech/wt80_a/readme.md15
-rw-r--r--keyboards/wilba_tech/wt80_a/rules.mk68
-rw-r--r--keyboards/wilba_tech/wt80_a/wt80_a.c17
-rw-r--r--keyboards/wilba_tech/wt80_a/wt80_a.h43
-rw-r--r--keyboards/wilba_tech/wt_main.c55
-rw-r--r--keyboards/wilba_tech/wt_mono_backlight.c116
-rw-r--r--keyboards/wilba_tech/wt_mono_backlight.h33
35 files changed, 2223 insertions, 0 deletions
diff --git a/drivers/issi/is31fl3736.c b/drivers/issi/is31fl3736.c
new file mode 100644
index 000000000..c5d431097
--- /dev/null
+++ b/drivers/issi/is31fl3736.c
@@ -0,0 +1,306 @@
1/* Copyright 2018 Jason Williams (Wilba)
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
18#ifdef __AVR__
19#include <avr/interrupt.h>
20#include <avr/io.h>
21#include <util/delay.h>
22#else
23#include "wait.h"
24#endif
25
26#include "is31fl3736.h"
27#include <string.h>
28#include "i2c_master.h"
29#include "progmem.h"
30
31
32
33// This is a 7-bit address, that gets left-shifted and bit 0
34// set to 0 for write, 1 for read (as per I2C protocol)
35// The address will vary depending on your wiring:
36// 00 <-> GND
37// 01 <-> SCL
38// 10 <-> SDA
39// 11 <-> VCC
40// ADDR1 represents A1:A0 of the 7-bit address.
41// ADDR2 represents A3:A2 of the 7-bit address.
42// The result is: 0b101(ADDR2)(ADDR1)
43#define ISSI_ADDR_DEFAULT 0x50
44
45#define ISSI_COMMANDREGISTER 0xFD
46#define ISSI_COMMANDREGISTER_WRITELOCK 0xFE
47#define ISSI_INTERRUPTMASKREGISTER 0xF0
48#define ISSI_INTERRUPTSTATUSREGISTER 0xF1
49
50#define ISSI_PAGE_LEDCONTROL 0x00 //PG0
51#define ISSI_PAGE_PWM 0x01 //PG1
52#define ISSI_PAGE_AUTOBREATH 0x02 //PG2
53#define ISSI_PAGE_FUNCTION 0x03 //PG3
54
55#define ISSI_REG_CONFIGURATION 0x00 //PG3
56#define ISSI_REG_GLOBALCURRENT 0x01 //PG3
57#define ISSI_REG_RESET 0x11// PG3
58#define ISSI_REG_SWPULLUP 0x0F //PG3
59#define ISSI_REG_CSPULLUP 0x10 //PG3
60
61#ifndef ISSI_TIMEOUT
62 #define ISSI_TIMEOUT 100
63#endif
64
65#ifndef ISSI_PERSISTENCE
66 #define ISSI_PERSISTENCE 0
67#endif
68
69// Transfer buffer for TWITransmitData()
70uint8_t g_twi_transfer_buffer[20];
71
72// These buffers match the IS31FL3736 PWM registers.
73// The control buffers match the PG0 LED On/Off registers.
74// Storing them like this is optimal for I2C transfers to the registers.
75// We could optimize this and take out the unused registers from these
76// buffers and the transfers in IS31FL3736_write_pwm_buffer() but it's
77// probably not worth the extra complexity.
78uint8_t g_pwm_buffer[DRIVER_COUNT][192];
79bool g_pwm_buffer_update_required = false;
80
81uint8_t g_led_control_registers[DRIVER_COUNT][24] = { { 0 }, { 0 } };
82bool g_led_control_registers_update_required = false;
83
84void IS31FL3736_write_register( uint8_t addr, uint8_t reg, uint8_t data )
85{
86 g_twi_transfer_buffer[0] = reg;
87 g_twi_transfer_buffer[1] = data;
88
89 #if ISSI_PERSISTENCE > 0
90 for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
91 if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) == 0)
92 break;
93 }
94 #else
95 i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT);
96 #endif
97}
98
99void IS31FL3736_write_pwm_buffer( uint8_t addr, uint8_t *pwm_buffer )
100{
101 // assumes PG1 is already selected
102
103 // transmit PWM registers in 12 transfers of 16 bytes
104 // g_twi_transfer_buffer[] is 20 bytes
105
106 // iterate over the pwm_buffer contents at 16 byte intervals
107 for ( int i = 0; i < 192; i += 16 ) {
108 g_twi_transfer_buffer[0] = i;
109 // copy the data from i to i+15
110 // device will auto-increment register for data after the first byte
111 // thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer
112 for ( int j = 0; j < 16; j++ ) {
113 g_twi_transfer_buffer[1 + j] = pwm_buffer[i + j];
114 }
115
116 #if ISSI_PERSISTENCE > 0
117 for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
118 if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT) == 0)
119 break;
120 }
121 #else
122 i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT);
123 #endif
124 }
125}
126
127void IS31FL3736_init( uint8_t addr )
128{
129 // In order to avoid the LEDs being driven with garbage data
130 // in the LED driver's PWM registers, shutdown is enabled last.
131 // Set up the mode and other settings, clear the PWM registers,
132 // then disable software shutdown.
133
134 // Unlock the command register.
135 IS31FL3736_write_register( addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 );
136
137 // Select PG0
138 IS31FL3736_write_register( addr, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL );
139 // Turn off all LEDs.
140 for ( int i = 0x00; i <= 0x17; i++ )
141 {
142 IS31FL3736_write_register( addr, i, 0x00 );
143 }
144
145 // Unlock the command register.
146 IS31FL3736_write_register( addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 );
147
148 // Select PG1
149 IS31FL3736_write_register( addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM );
150 // Set PWM on all LEDs to 0
151 // No need to setup Breath registers to PWM as that is the default.
152 for ( int i = 0x00; i <= 0xBF; i++ )
153 {
154 IS31FL3736_write_register( addr, i, 0x00 );
155 }
156
157 // Unlock the command register.
158 IS31FL3736_write_register( addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 );
159
160 // Select PG3
161 IS31FL3736_write_register( addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION );
162 // Set global current to maximum.
163 IS31FL3736_write_register( addr, ISSI_REG_GLOBALCURRENT, 0xFF );
164 // Disable software shutdown.
165 IS31FL3736_write_register( addr, ISSI_REG_CONFIGURATION, 0x01 );
166
167 // Wait 10ms to ensure the device has woken up.
168 #ifdef __AVR__
169 _delay_ms( 10 );
170 #else
171 wait_ms(10);
172 #endif
173}
174
175void IS31FL3736_set_color( int index, uint8_t red, uint8_t green, uint8_t blue )
176{
177 if ( index >= 0 && index < DRIVER_LED_TOTAL ) {
178 is31_led led = g_is31_leds[index];
179
180 g_pwm_buffer[led.driver][led.r] = red;
181 g_pwm_buffer[led.driver][led.g] = green;
182 g_pwm_buffer[led.driver][led.b] = blue;
183 g_pwm_buffer_update_required = true;
184 }
185}
186
187void IS31FL3736_set_color_all( uint8_t red, uint8_t green, uint8_t blue )
188{
189 for ( int i = 0; i < DRIVER_LED_TOTAL; i++ )
190 {
191 IS31FL3736_set_color( i, red, green, blue );
192 }
193}
194
195void IS31FL3736_set_led_control_register( uint8_t index, bool red, bool green, bool blue )
196{
197 is31_led led = g_is31_leds[index];
198
199 // IS31FL3733
200 // The PWM register for a matrix position (0x00 to 0xBF) can be
201 // divided by 8 to get the LED control register (0x00 to 0x17),
202 // then mod 8 to get the bit position within that register.
203
204 // IS31FL3736
205 // The PWM register for a matrix position (0x00 to 0xBF) is interleaved, so:
206 // A1=0x00 A2=0x02 A3=0x04 A4=0x06 A5=0x08 A6=0x0A A7=0x0C A8=0x0E
207 // B1=0x10 B2=0x12 B3=0x14
208 // But also, the LED control registers (0x00 to 0x17) are also interleaved, so:
209 // A1-A4=0x00 A5-A8=0x01
210 // So, the same math applies.
211
212 uint8_t control_register_r = led.r / 8;
213 uint8_t control_register_g = led.g / 8;
214 uint8_t control_register_b = led.b / 8;
215
216 uint8_t bit_r = led.r % 8;
217 uint8_t bit_g = led.g % 8;
218 uint8_t bit_b = led.b % 8;
219
220 if ( red ) {
221 g_led_control_registers[led.driver][control_register_r] |= (1 << bit_r);
222 } else {
223 g_led_control_registers[led.driver][control_register_r] &= ~(1 << bit_r);
224 }
225 if ( green ) {
226 g_led_control_registers[led.driver][control_register_g] |= (1 << bit_g);
227 } else {
228 g_led_control_registers[led.driver][control_register_g] &= ~(1 << bit_g);
229 }
230 if ( blue ) {
231 g_led_control_registers[led.driver][control_register_b] |= (1 << bit_b);
232 } else {
233 g_led_control_registers[led.driver][control_register_b] &= ~(1 << bit_b);
234 }
235
236 g_led_control_registers_update_required = true;
237
238}
239
240void IS31FL3736_mono_set_brightness( int index, uint8_t value )
241{
242 if ( index >= 0 && index < 96 ) {
243 // Index in range 0..95 -> A1..A8, B1..B8, etc.
244 // Map index 0..95 to registers 0x00..0xBE (interleaved)
245 uint8_t pwm_register = index * 2;
246 g_pwm_buffer[0][pwm_register] = value;
247 g_pwm_buffer_update_required = true;
248 }
249}
250
251void IS31FL3736_mono_set_brightness_all( uint8_t value )
252{
253 for ( int i = 0; i < 96; i++ )
254 {
255 IS31FL3736_mono_set_brightness( i, value );
256 }
257}
258
259void IS31FL3736_mono_set_led_control_register( uint8_t index, bool enabled )
260{
261 // Index in range 0..95 -> A1..A8, B1..B8, etc.
262
263 // Map index 0..95 to registers 0x00..0xBE (interleaved)
264 uint8_t pwm_register = index * 2;
265 // Map register 0x00..0xBE (interleaved) into control register and bit
266 uint8_t control_register = pwm_register / 8;
267 uint8_t bit = pwm_register % 8;
268
269 if ( enabled ) {
270 g_led_control_registers[0][control_register] |= (1 << bit);
271 } else {
272 g_led_control_registers[0][control_register] &= ~(1 << bit);
273 }
274
275 g_led_control_registers_update_required = true;
276}
277
278void IS31FL3736_update_pwm_buffers( uint8_t addr1, uint8_t addr2 )
279{
280 if ( g_pwm_buffer_update_required )
281 {
282 // Firstly we need to unlock the command register and select PG1
283 IS31FL3736_write_register( addr1, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 );
284 IS31FL3736_write_register( addr1, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM );
285
286 IS31FL3736_write_pwm_buffer( addr1, g_pwm_buffer[0] );
287 //IS31FL3736_write_pwm_buffer( addr2, g_pwm_buffer[1] );
288 }
289 g_pwm_buffer_update_required = false;
290}
291
292void IS31FL3736_update_led_control_registers( uint8_t addr1, uint8_t addr2 )
293{
294 if ( g_led_control_registers_update_required )
295 {
296 // Firstly we need to unlock the command register and select PG0
297 IS31FL3736_write_register( addr1, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5 );
298 IS31FL3736_write_register( addr1, ISSI_COMMANDREGISTER, ISSI_PAGE_LEDCONTROL );
299 for ( int i=0; i<24; i++ )
300 {
301 IS31FL3736_write_register(addr1, i, g_led_control_registers[0][i] );
302 //IS31FL3736_write_register(addr2, i, g_led_control_registers[1][i] );
303 }
304 }
305}
306
diff --git a/drivers/issi/is31fl3736.h b/drivers/issi/is31fl3736.h
new file mode 100644
index 000000000..cff50fd0d
--- /dev/null
+++ b/drivers/issi/is31fl3736.h
@@ -0,0 +1,172 @@
1/* Copyright 2018 Jason Williams (Wilba)
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 <stdint.h>
20#include <stdbool.h>
21
22
23// Simple interface option.
24// If these aren't defined, just define them to make it compile
25
26
27#ifndef DRIVER_COUNT
28#define DRIVER_COUNT 2
29#endif
30
31#ifndef DRIVER_LED_TOTAL
32#define DRIVER_LED_TOTAL 96
33#endif
34
35
36typedef struct is31_led {
37 uint8_t driver:2;
38 uint8_t r;
39 uint8_t g;
40 uint8_t b;
41} __attribute__((packed)) is31_led;
42
43extern const is31_led g_is31_leds[DRIVER_LED_TOTAL];
44
45void IS31FL3736_init( uint8_t addr );
46void IS31FL3736_write_register( uint8_t addr, uint8_t reg, uint8_t data );
47void IS31FL3736_write_pwm_buffer( uint8_t addr, uint8_t *pwm_buffer );
48
49void IS31FL3736_set_color( int index, uint8_t red, uint8_t green, uint8_t blue );
50void IS31FL3736_set_color_all( uint8_t red, uint8_t green, uint8_t blue );
51
52void IS31FL3736_set_led_control_register( uint8_t index, bool red, bool green, bool blue );
53
54void IS31FL3736_mono_set_brightness( int index, uint8_t value );
55void IS31FL3736_mono_set_brightness_all( uint8_t value );
56void IS31FL3736_mono_set_led_control_register( uint8_t index, bool enabled );
57
58// This should not be called from an interrupt
59// (eg. from a timer interrupt).
60// Call this while idle (in between matrix scans).
61// If the buffer is dirty, it will update the driver with the buffer.
62void IS31FL3736_update_pwm_buffers( uint8_t addr1, uint8_t addr2 );
63void IS31FL3736_update_led_control_registers( uint8_t addr1, uint8_t addr2 );
64
65#define A_1 0x00
66#define A_2 0x02
67#define A_3 0x04
68#define A_4 0x06
69#define A_5 0x08
70#define A_6 0x0A
71#define A_7 0x0C
72#define A_8 0x0E
73
74#define B_1 0x10
75#define B_2 0x12
76#define B_3 0x14
77#define B_4 0x16
78#define B_5 0x18
79#define B_6 0x1A
80#define B_7 0x1C
81#define B_8 0x1E
82
83#define C_1 0x20
84#define C_2 0x22
85#define C_3 0x24
86#define C_4 0x26
87#define C_5 0x28
88#define C_6 0x2A
89#define C_7 0x2C
90#define C_8 0x2E
91
92#define D_1 0x30
93#define D_2 0x32
94#define D_3 0x34
95#define D_4 0x36
96#define D_5 0x38
97#define D_6 0x3A
98#define D_7 0x3C
99#define D_8 0x3E
100
101#define E_1 0x40
102#define E_2 0x42
103#define E_3 0x44
104#define E_4 0x46
105#define E_5 0x48
106#define E_6 0x4A
107#define E_7 0x4C
108#define E_8 0x4E
109
110#define F_1 0x50
111#define F_2 0x52
112#define F_3 0x54
113#define F_4 0x56
114#define F_5 0x58
115#define F_6 0x5A
116#define F_7 0x5C
117#define F_8 0x5E
118
119#define G_1 0x60
120#define G_2 0x62
121#define G_3 0x64
122#define G_4 0x66
123#define G_5 0x68
124#define G_6 0x6A
125#define G_7 0x6C
126#define G_8 0x6E
127
128#define H_1 0x70
129#define H_2 0x72
130#define H_3 0x74
131#define H_4 0x76
132#define H_5 0x78
133#define H_6 0x7A
134#define H_7 0x7C
135#define H_8 0x7E
136
137#define I_1 0x80
138#define I_2 0x82
139#define I_3 0x84
140#define I_4 0x86
141#define I_5 0x88
142#define I_6 0x8A
143#define I_7 0x8C
144#define I_8 0x8E
145
146#define J_1 0x90
147#define J_2 0x92
148#define J_3 0x94
149#define J_4 0x96
150#define J_5 0x98
151#define J_6 0x9A
152#define J_7 0x9C
153#define J_8 0x9E
154
155#define K_1 0xA0
156#define K_2 0xA2
157#define K_3 0xA4
158#define K_4 0xA6
159#define K_5 0xA8
160#define K_6 0xAA
161#define K_7 0xAC
162#define K_8 0xAE
163
164#define L_1 0xB0
165#define L_2 0xB2
166#define L_3 0xB4
167#define L_4 0xB6
168#define L_5 0xB8
169#define L_6 0xBA
170#define L_7 0xBC
171#define L_8 0xBE
172
diff --git a/keyboards/rama/readme.md b/keyboards/rama/readme.md
index 4625eb1ef..c7ddf6d11 100644
--- a/keyboards/rama/readme.md
+++ b/keyboards/rama/readme.md
@@ -6,4 +6,6 @@ Firmware for keyboards designed by [RAMA WORKS](https://rama.works)
6 6
7[RAMA M60-A](https://rama.works/#/m60-a/) 7[RAMA M60-A](https://rama.works/#/m60-a/)
8 8
9[RAMA U80-A](https://rama.works/#/tkl-a/)
10
9[RAMA M10-B](https://www.massdrop.com/buy/rama-m10-a?mode=guest_open) 11[RAMA M10-B](https://www.massdrop.com/buy/rama-m10-a?mode=guest_open)
diff --git a/keyboards/rama/u80_a/config.h b/keyboards/rama/u80_a/config.h
new file mode 100644
index 000000000..bfd972828
--- /dev/null
+++ b/keyboards/rama/u80_a/config.h
@@ -0,0 +1,187 @@
1/* Copyright 2018 Jason Williams (Wilba)
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 0x5241 // "RW"
23#define PRODUCT_ID 0x080A // 80-A
24#define DEVICE_VER 0x0001
25#define MANUFACTURER RAMA.WORKS
26#define PRODUCT RAMA U80-A
27#define DESCRIPTION RAMA U80-A Keyboard
28
29/* key matrix size */
30#define MATRIX_ROWS 6
31#define MATRIX_COLS 17
32
33/*
34 * Keyboard Matrix Assignments
35 *
36 * Change this to how you wired your keyboard
37 * COLS: AVR pins used for columns, left to right
38 * ROWS: AVR pins used for rows, top to bottom
39 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
40 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
41 *
42*/
43#define MATRIX_ROW_PINS { F1, F0, E6, F4, F6, F7 }
44#define MATRIX_COL_PINS { F5, D5, B1, B2, B3, D3, D2, C7, C6, B6, B5, B4, D7, D6, D4, B7, B0 }
45#define UNUSED_PINS
46
47/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
48#define DIODE_DIRECTION ROW2COL
49
50// #define BACKLIGHT_PIN B7
51// #define BACKLIGHT_BREATHING
52// #define BACKLIGHT_LEVELS 3
53
54
55/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
56#define DEBOUNCING_DELAY 5
57
58/* define if matrix has ghost (lacks anti-ghosting diodes) */
59//#define MATRIX_HAS_GHOST
60
61/* number of backlight levels */
62
63/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
64#define LOCKING_SUPPORT_ENABLE
65/* Locking resynchronize hack */
66#define LOCKING_RESYNC_ENABLE
67
68/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
69 * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
70 */
71// #define GRAVE_ESC_CTRL_OVERRIDE
72
73/*
74 * Force NKRO
75 *
76 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
77 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
78 * makefile for this to work.)
79 *
80 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
81 * until the next keyboard reset.
82 *
83 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
84 * fully operational during normal computer usage.
85 *
86 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
87 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
88 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
89 * power-up.
90 *
91 */
92//#define FORCE_NKRO
93
94/*
95 * Magic Key Options
96 *
97 * Magic keys are hotkey commands that allow control over firmware functions of
98 * the keyboard. They are best used in combination with the HID Listen program,
99 * found here: https://www.pjrc.com/teensy/hid_listen.html
100 *
101 * The options below allow the magic key functionality to be changed. This is
102 * useful if your keyboard/keypad is missing keys and you want magic key support.
103 *
104 */
105
106/* key combination for magic key command */
107#define IS_COMMAND() ( \
108 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
109)
110
111/* control how magic key switches layers */
112//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
113//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
114//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
115
116/* override magic key keymap */
117//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
118//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
119//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
120//#define MAGIC_KEY_HELP1 H
121//#define MAGIC_KEY_HELP2 SLASH
122//#define MAGIC_KEY_DEBUG D
123//#define MAGIC_KEY_DEBUG_MATRIX X
124//#define MAGIC_KEY_DEBUG_KBD K
125//#define MAGIC_KEY_DEBUG_MOUSE M
126//#define MAGIC_KEY_VERSION V
127//#define MAGIC_KEY_STATUS S
128//#define MAGIC_KEY_CONSOLE C
129//#define MAGIC_KEY_LAYER0_ALT1 ESC
130//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
131//#define MAGIC_KEY_LAYER0 0
132//#define MAGIC_KEY_LAYER1 1
133//#define MAGIC_KEY_LAYER2 2
134//#define MAGIC_KEY_LAYER3 3
135//#define MAGIC_KEY_LAYER4 4
136//#define MAGIC_KEY_LAYER5 5
137//#define MAGIC_KEY_LAYER6 6
138//#define MAGIC_KEY_LAYER7 7
139//#define MAGIC_KEY_LAYER8 8
140//#define MAGIC_KEY_LAYER9 9
141//#define MAGIC_KEY_BOOTLOADER PAUSE
142//#define MAGIC_KEY_LOCK CAPS
143//#define MAGIC_KEY_EEPROM E
144//#define MAGIC_KEY_NKRO N
145//#define MAGIC_KEY_SLEEP_LED Z
146
147/*
148 * Feature disable options
149 * These options are also useful to firmware size reduction.
150 */
151
152/* disable debug print */
153//#define NO_DEBUG
154
155/* disable print */
156//#define NO_PRINT
157
158/* disable action features */
159//#define NO_ACTION_LAYER
160//#define NO_ACTION_TAPPING
161//#define NO_ACTION_ONESHOT
162//#define NO_ACTION_MACRO
163//#define NO_ACTION_FUNCTION
164
165/*
166 * MIDI options
167 */
168
169/* Prevent use of disabled MIDI features in the keymap */
170//#define MIDI_ENABLE_STRICT 1
171
172/* enable basic MIDI features:
173 - MIDI notes can be sent when in Music mode is on
174*/
175//#define MIDI_BASIC
176
177/* enable advanced MIDI features:
178 - MIDI notes can be added to the keymap
179 - Octave shift and transpose
180 - Virtual sustain, portamento, and modulation wheel
181 - etc.
182*/
183//#define MIDI_ADVANCED
184
185/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
186//#define MIDI_TONE_KEYCODE_OCTAVES 1
187
diff --git a/keyboards/rama/u80_a/info.json b/keyboards/rama/u80_a/info.json
new file mode 100644
index 000000000..cb61c89b8
--- /dev/null
+++ b/keyboards/rama/u80_a/info.json
@@ -0,0 +1,13 @@
1{
2 "keyboard_name": "RAMA U80-A",
3 "url": "https://rama.works/#/tkl-a/",
4 "maintainer": "Wilba",
5 "bootloader": "atmel-dfu",
6 "width": 18.25,
7 "height": 6.5,
8 "layouts": {
9 "LAYOUT_all": {
10 "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6.5, "y":0}, {"label":"F6", "x":7.5, "y":0}, {"label":"F7", "x":8.5, "y":0}, {"label":"F8", "x":9.5, "y":0}, {"label":"F9", "x":11, "y":0}, {"label":"F10", "x":12, "y":0}, {"label":"F11", "x":13, "y":0}, {"label":"F12", "x":14, "y":0}, {"label":"PrtSc", "x":15.25, "y":0}, {"label":"Scroll Lock", "x":16.25, "y":0}, {"label":"Pause", "x":17.25, "y":0}, {"label":"~", "x":0, "y":1.5}, {"label":"!", "x":1, "y":1.5}, {"label":"@", "x":2, "y":1.5}, {"label":"#", "x":3, "y":1.5}, {"label":"$", "x":4, "y":1.5}, {"label":"%", "x":5, "y":1.5}, {"label":"^", "x":6, "y":1.5}, {"label":"&", "x":7, "y":1.5}, {"label":"*", "x":8, "y":1.5}, {"label":"(", "x":9, "y":1.5}, {"label":")", "x":10, "y":1.5}, {"label":"_", "x":11, "y":1.5}, {"label":"+", "x":12, "y":1.5}, {"label":"Backspace", "x":13, "y":1.5}, {"x":14, "y":1.5}, {"label":"Insert", "x":15.25, "y":1.5}, {"label":"Home", "x":16.25, "y":1.5}, {"label":"PgUp", "x":17.25, "y":1.5}, {"label":"Tab", "x":0, "y":2.5, "w":1.5}, {"label":"Q", "x":1.5, "y":2.5}, {"label":"W", "x":2.5, "y":2.5}, {"label":"E", "x":3.5, "y":2.5}, {"label":"R", "x":4.5, "y":2.5}, {"label":"T", "x":5.5, "y":2.5}, {"label":"Y", "x":6.5, "y":2.5}, {"label":"U", "x":7.5, "y":2.5}, {"label":"I", "x":8.5, "y":2.5}, {"label":"O", "x":9.5, "y":2.5}, {"label":"P", "x":10.5, "y":2.5}, {"label":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"|", "x":13.5, "y":2.5, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.5}, {"label":"End", "x":16.25, "y":2.5}, {"label":"PgDn", "x":17.25, "y":2.5}, {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, {"label":"A", "x":1.75, "y":3.5}, {"label":"S", "x":2.75, "y":3.5}, {"label":"D", "x":3.75, "y":3.5}, {"label":"F", "x":4.75, "y":3.5}, {"label":"G", "x":5.75, "y":3.5}, {"label":"H", "x":6.75, "y":3.5}, {"label":"J", "x":7.75, "y":3.5}, {"label":"K", "x":8.75, "y":3.5}, {"label":"L", "x":9.75, "y":3.5}, {"label":":", "x":10.75, "y":3.5}, {"label":"\"", "x":11.75, "y":3.5}, {"label":"Enter", "x":12.75, "y":3.5, "w":2.25}, {"label":"Shift", "x":0, "y":4.5, "w":2.25}, {"label":"Z", "x":2.25, "y":4.5}, {"label":"X", "x":3.25, "y":4.5}, {"label":"C", "x":4.25, "y":4.5}, {"label":"V", "x":5.25, "y":4.5}, {"label":"B", "x":6.25, "y":4.5}, {"label":"N", "x":7.25, "y":4.5}, {"label":"M", "x":8.25, "y":4.5}, {"label":"<", "x":9.25, "y":4.5}, {"label":">", "x":10.25, "y":4.5}, {"label":"?", "x":11.25, "y":4.5}, {"label":"Shift", "x":12.25, "y":4.5, "w":1.75}, {"x":14, "y":4.5}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, {"x":3.75, "y":5.5, "w":6.25}, {"label":"Alt", "x":10, "y":5.5, "w":1.25}, {"label":"Win", "x":11.25, "y":5.5, "w":1.25}, {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, {"label":"\u2190", "x":15.25, "y":5.5}, {"label":"\u2193", "x":16.25, "y":5.5}, {"label":"\u2192", "x":17.25, "y":5.5}]
11 }
12 }
13}
diff --git a/keyboards/rama/u80_a/keymaps/default/keymap.c b/keyboards/rama/u80_a/keymaps/default/keymap.c
new file mode 100644
index 000000000..cf9225e3e
--- /dev/null
+++ b/keyboards/rama/u80_a/keymaps/default/keymap.c
@@ -0,0 +1,22 @@
1#include QMK_KEYBOARD_H
2
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4
5 [0] = LAYOUT_all(
6 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_SLCK, KC_PAUS,
7 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_BSPC, KC_INS, KC_HOME, KC_PGUP,
8 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, KC_END, KC_PGDN,
9 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,
10 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_TRNS, KC_UP,
11 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
12
13 [1] = LAYOUT_all(
14 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
15 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
16 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
17 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
18 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
19 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
20
21};
22
diff --git a/keyboards/rama/u80_a/readme.md b/keyboards/rama/u80_a/readme.md
new file mode 100644
index 000000000..c98d00cb6
--- /dev/null
+++ b/keyboards/rama/u80_a/readme.md
@@ -0,0 +1,15 @@
1# RAMA U80-A
2
3![RAMA U80-A](https://something.com/something.jpg)
4
5A TKL keyboard. [More info at RAMA WORKS](https://rama.works/#/tkl-a/)
6
7Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582)
8Hardware Supported: RAMA U80-A PCB
9Hardware Availability: [RAMA WORKS Store](https://ramaworks.store/)
10
11Make example for this keyboard (after setting up your build environment):
12
13 make rama/u80_a: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). \ No newline at end of file
diff --git a/keyboards/rama/u80_a/rules.mk b/keyboards/rama/u80_a/rules.mk
new file mode 100644
index 000000000..99224c247
--- /dev/null
+++ b/keyboards/rama/u80_a/rules.mk
@@ -0,0 +1,68 @@
1# project specific files
2SRC = drivers/issi/is31fl3736.c \
3 drivers/avr/i2c_master.c \
4 keyboards/wilba_tech/wt_mono_backlight.c \
5 keyboards/wilba_tech/wt_main.c
6
7# MCU name
8MCU = atmega32u4
9
10# Processor frequency.
11# This will define a symbol, F_CPU, in all source code files equal to the
12# processor frequency in Hz. You can then use this symbol in your source code to
13# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
14# automatically to create a 32-bit value in your source code.
15#
16# This will be an integer division of F_USB below, as it is sourced by
17# F_USB after it has run through any CPU prescalers. Note that this value
18# does not *change* the processor frequency - it should merely be updated to
19# reflect the processor speed set externally so that the code can use accurate
20# software delays.
21F_CPU = 16000000
22
23
24#
25# LUFA specific
26#
27# Target architecture (see library "Board Types" documentation).
28ARCH = AVR8
29
30# Input clock frequency.
31# This will define a symbol, F_USB, in all source code files equal to the
32# input clock frequency (before any prescaling is performed) in Hz. This value may
33# differ from F_CPU if prescaling is used on the latter, and is required as the
34# raw input clock is fed directly to the PLL sections of the AVR for high speed
35# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
36# at the end, this will be done automatically to create a 32-bit value in your
37# source code.
38#
39# If no clock division is performed on the input clock inside the AVR (via the
40# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
41F_USB = $(F_CPU)
42
43# Interrupt driven control endpoint task(+60)
44OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
45
46
47# Boot Section
48BOOTLOADER = atmel-dfu
49
50
51# Build Options
52# change yes to no to disable
53#
54BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
55MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
56EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
57CONSOLE_ENABLE = yes # Console for debug(+400)
58COMMAND_ENABLE = yes # Commands for debug and configuration
59# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
60SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
61# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
62NKRO_ENABLE = no # USB Nkey Rollover
63BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
64MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
65UNICODE_ENABLE = no # Unicode
66BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
67AUDIO_ENABLE = no # Audio output on port C6
68FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/rama/u80_a/u80_a.c b/keyboards/rama/u80_a/u80_a.c
new file mode 100644
index 000000000..ccff6d62c
--- /dev/null
+++ b/keyboards/rama/u80_a/u80_a.c
@@ -0,0 +1,17 @@
1/* Copyright 2018 Jason Williams (Wilba)
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// Nothing to see here, move along... ;-)
diff --git a/keyboards/rama/u80_a/u80_a.h b/keyboards/rama/u80_a/u80_a.h
new file mode 100644
index 000000000..26403ef34
--- /dev/null
+++ b/keyboards/rama/u80_a/u80_a.h
@@ -0,0 +1,43 @@
1/* Copyright 2018 Jason Williams (Wilba)
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 ____ KC_NO
22
23// Right switch of split backspace is at 3,13 and is the only switch
24// whose physical position doesn't match switch matrix position :-(
25// However, it also makes no sense to view the physical as 18 columns,
26// so the numbering goes 00 to 16. Deal with it.
27
28#define LAYOUT_all( \
29 K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, K016, \
30 K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K313, K114, K115, K116, \
31 K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, \
32 K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, \
33 K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K415, \
34 K500, K501, K502, K506, K510, K511, K512, K513, K514, K515, K516 \
35) { \
36 { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, ____, K014, K015, K016 }, \
37 { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116 }, \
38 { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216 }, \
39 { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, ____, ____, ____ }, \
40 { K400, ____, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, ____, K415, ____ }, \
41 { K500, K501, K502, ____, ____, ____, K506, ____, ____, ____, K510, K511, K512, K513, K514, K515, K516 } \
42}
43
diff --git a/keyboards/wilba_tech/wt60_a/config.h b/keyboards/wilba_tech/wt60_a/config.h
new file mode 100644
index 000000000..95f4c786e
--- /dev/null
+++ b/keyboards/wilba_tech/wt60_a/config.h
@@ -0,0 +1,187 @@
1/* Copyright 2018 Jason Williams (Wilba)
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 0x6582 // wilba.tech
23#define PRODUCT_ID 0x060A // 60-A
24#define DEVICE_VER 0x0001
25#define MANUFACTURER wilba.tech
26#define PRODUCT wilba.tech WT60-A
27#define DESCRIPTION wilba.tech WT60-A
28
29/* key matrix size */
30#define MATRIX_ROWS 5
31#define MATRIX_COLS 14
32
33/*
34 * Keyboard Matrix Assignments
35 *
36 * Change this to how you wired your keyboard
37 * COLS: AVR pins used for columns, left to right
38 * ROWS: AVR pins used for rows, top to bottom
39 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
40 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
41 *
42*/
43#define MATRIX_ROW_PINS { F0, E6, F4, F6, F7 }
44#define MATRIX_COL_PINS { F5, D5, B1, B2, B3, D3, D2, C7, C6, B6, B5, B4, D7, D6 }
45#define UNUSED_PINS
46
47/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
48#define DIODE_DIRECTION ROW2COL
49
50// #define BACKLIGHT_PIN B7
51// #define BACKLIGHT_BREATHING
52// #define BACKLIGHT_LEVELS 3
53
54
55/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
56#define DEBOUNCING_DELAY 5
57
58/* define if matrix has ghost (lacks anti-ghosting diodes) */
59//#define MATRIX_HAS_GHOST
60
61/* number of backlight levels */
62
63/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
64#define LOCKING_SUPPORT_ENABLE
65/* Locking resynchronize hack */
66#define LOCKING_RESYNC_ENABLE
67
68/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
69 * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
70 */
71// #define GRAVE_ESC_CTRL_OVERRIDE
72
73/*
74 * Force NKRO
75 *
76 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
77 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
78 * makefile for this to work.)
79 *
80 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
81 * until the next keyboard reset.
82 *
83 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
84 * fully operational during normal computer usage.
85 *
86 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
87 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
88 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
89 * power-up.
90 *
91 */
92//#define FORCE_NKRO
93
94/*
95 * Magic Key Options
96 *
97 * Magic keys are hotkey commands that allow control over firmware functions of
98 * the keyboard. They are best used in combination with the HID Listen program,
99 * found here: https://www.pjrc.com/teensy/hid_listen.html
100 *
101 * The options below allow the magic key functionality to be changed. This is
102 * useful if your keyboard/keypad is missing keys and you want magic key support.
103 *
104 */
105
106/* key combination for magic key command */
107#define IS_COMMAND() ( \
108 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
109)
110
111/* control how magic key switches layers */
112//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
113//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
114//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
115
116/* override magic key keymap */
117//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
118//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
119//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
120//#define MAGIC_KEY_HELP1 H
121//#define MAGIC_KEY_HELP2 SLASH
122//#define MAGIC_KEY_DEBUG D
123//#define MAGIC_KEY_DEBUG_MATRIX X
124//#define MAGIC_KEY_DEBUG_KBD K
125//#define MAGIC_KEY_DEBUG_MOUSE M
126//#define MAGIC_KEY_VERSION V
127//#define MAGIC_KEY_STATUS S
128//#define MAGIC_KEY_CONSOLE C
129//#define MAGIC_KEY_LAYER0_ALT1 ESC
130//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
131//#define MAGIC_KEY_LAYER0 0
132//#define MAGIC_KEY_LAYER1 1
133//#define MAGIC_KEY_LAYER2 2
134//#define MAGIC_KEY_LAYER3 3
135//#define MAGIC_KEY_LAYER4 4
136//#define MAGIC_KEY_LAYER5 5
137//#define MAGIC_KEY_LAYER6 6
138//#define MAGIC_KEY_LAYER7 7
139//#define MAGIC_KEY_LAYER8 8
140//#define MAGIC_KEY_LAYER9 9
141//#define MAGIC_KEY_BOOTLOADER PAUSE
142//#define MAGIC_KEY_LOCK CAPS
143//#define MAGIC_KEY_EEPROM E
144//#define MAGIC_KEY_NKRO N
145//#define MAGIC_KEY_SLEEP_LED Z
146
147/*
148 * Feature disable options
149 * These options are also useful to firmware size reduction.
150 */
151
152/* disable debug print */
153//#define NO_DEBUG
154
155/* disable print */
156//#define NO_PRINT
157
158/* disable action features */
159//#define NO_ACTION_LAYER
160//#define NO_ACTION_TAPPING
161//#define NO_ACTION_ONESHOT
162//#define NO_ACTION_MACRO
163//#define NO_ACTION_FUNCTION
164
165/*
166 * MIDI options
167 */
168
169/* Prevent use of disabled MIDI features in the keymap */
170//#define MIDI_ENABLE_STRICT 1
171
172/* enable basic MIDI features:
173 - MIDI notes can be sent when in Music mode is on
174*/
175//#define MIDI_BASIC
176
177/* enable advanced MIDI features:
178 - MIDI notes can be added to the keymap
179 - Octave shift and transpose
180 - Virtual sustain, portamento, and modulation wheel
181 - etc.
182*/
183//#define MIDI_ADVANCED
184
185/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
186//#define MIDI_TONE_KEYCODE_OCTAVES 1
187
diff --git a/keyboards/wilba_tech/wt60_a/info.json b/keyboards/wilba_tech/wt60_a/info.json
new file mode 100644
index 000000000..3b3614a8b
--- /dev/null
+++ b/keyboards/wilba_tech/wt60_a/info.json
@@ -0,0 +1,16 @@
1{
2 "keyboard_name": "wilba.tech WT60-A",
3 "url": "https://wilba.tech",
4 "maintainer": "Wilba",
5 "bootloader": "atmel-dfu",
6 "width": 15,
7 "height": 5,
8 "layouts": {
9 "LAYOUT_60_ansi": {
10 "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
11 },
12 "LAYOUT_60_ansi_split_bs_rshift": {
13 "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
14 }
15 }
16} \ No newline at end of file
diff --git a/keyboards/wilba_tech/wt60_a/keymaps/ansi_split_bs_rshift/keymap.c b/keyboards/wilba_tech/wt60_a/keymaps/ansi_split_bs_rshift/keymap.c
new file mode 100644
index 000000000..95e01fc2c
--- /dev/null
+++ b/keyboards/wilba_tech/wt60_a/keymaps/ansi_split_bs_rshift/keymap.c
@@ -0,0 +1,38 @@
1// ANSI split backspace/right shift layout for WT60-A
2#include QMK_KEYBOARD_H
3
4const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
5
6// Default layer
7[0] = LAYOUT_60_ansi_split_bs_rshift(
8 KC_ESC, 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_BSLS, KC_DEL,
9 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_BSPC,
10 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,
11 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
12 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL),
13
14// Fn1 Layer
15[1] = LAYOUT_60_ansi_split_bs_rshift(
16 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_INS, KC_DEL,
17 KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS,
18 KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
19 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
20 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
21
22// Fn2 Layer
23[2] = LAYOUT_60_ansi_split_bs_rshift(
24 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
25 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
26 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
27 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
28 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
29
30// Fn3 Layer
31[3] = LAYOUT_60_ansi_split_bs_rshift(
32 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
33 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
34 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
35 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
36 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
37
38};
diff --git a/keyboards/wilba_tech/wt60_a/keymaps/default/keymap.c b/keyboards/wilba_tech/wt60_a/keymaps/default/keymap.c
new file mode 100644
index 000000000..566736f5e
--- /dev/null
+++ b/keyboards/wilba_tech/wt60_a/keymaps/default/keymap.c
@@ -0,0 +1,38 @@
1// Default layout for WT60-A
2#include QMK_KEYBOARD_H
3
4const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
5
6// Default layer
7[0] = LAYOUT_60_ansi(
8 KC_ESC, 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,
9 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,
10 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,
11 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
12 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL),
13
14// Fn1 Layer
15[1] = LAYOUT_60_ansi(
16 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 ,
17 KC_CAPS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS,
18 KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_TRNS,
19 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, KC_TRNS,
20 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
21
22// Fn2 Layer
23[2] = LAYOUT_60_ansi(
24 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
25 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
26 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
27 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
28 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
29
30// Fn3 Layer
31[3] = LAYOUT_60_ansi(
32 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
33 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
34 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
35 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
36 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
37
38};
diff --git a/keyboards/wilba_tech/wt60_a/readme.md b/keyboards/wilba_tech/wt60_a/readme.md
new file mode 100644
index 000000000..d7a73165d
--- /dev/null
+++ b/keyboards/wilba_tech/wt60_a/readme.md
@@ -0,0 +1,15 @@
1# WILBA.TECH WT60-A
2
3![WILBA.TECH WT60-A](https://wilba.tech)
4
5WT60-A is a keyboard PCB supporting 60% layout. [More info at wilba.tech](https://wilba.tech/)
6
7Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582)
8Hardware Supported: WILBA.TECH WT65-A
9Hardware Availability: Custom keyboard group buys
10
11Make example for this keyboard (after setting up your build environment):
12
13 make wilba_tech/wt60_a: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). \ No newline at end of file
diff --git a/keyboards/wilba_tech/wt60_a/rules.mk b/keyboards/wilba_tech/wt60_a/rules.mk
new file mode 100644
index 000000000..99224c247
--- /dev/null
+++ b/keyboards/wilba_tech/wt60_a/rules.mk
@@ -0,0 +1,68 @@
1# project specific files
2SRC = drivers/issi/is31fl3736.c \
3 drivers/avr/i2c_master.c \
4 keyboards/wilba_tech/wt_mono_backlight.c \
5 keyboards/wilba_tech/wt_main.c
6
7# MCU name
8MCU = atmega32u4
9
10# Processor frequency.
11# This will define a symbol, F_CPU, in all source code files equal to the
12# processor frequency in Hz. You can then use this symbol in your source code to
13# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
14# automatically to create a 32-bit value in your source code.
15#
16# This will be an integer division of F_USB below, as it is sourced by
17# F_USB after it has run through any CPU prescalers. Note that this value
18# does not *change* the processor frequency - it should merely be updated to
19# reflect the processor speed set externally so that the code can use accurate
20# software delays.
21F_CPU = 16000000
22
23
24#
25# LUFA specific
26#
27# Target architecture (see library "Board Types" documentation).
28ARCH = AVR8
29
30# Input clock frequency.
31# This will define a symbol, F_USB, in all source code files equal to the
32# input clock frequency (before any prescaling is performed) in Hz. This value may
33# differ from F_CPU if prescaling is used on the latter, and is required as the
34# raw input clock is fed directly to the PLL sections of the AVR for high speed
35# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
36# at the end, this will be done automatically to create a 32-bit value in your
37# source code.
38#
39# If no clock division is performed on the input clock inside the AVR (via the
40# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
41F_USB = $(F_CPU)
42
43# Interrupt driven control endpoint task(+60)
44OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
45
46
47# Boot Section
48BOOTLOADER = atmel-dfu
49
50
51# Build Options
52# change yes to no to disable
53#
54BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
55MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
56EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
57CONSOLE_ENABLE = yes # Console for debug(+400)
58COMMAND_ENABLE = yes # Commands for debug and configuration
59# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
60SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
61# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
62NKRO_ENABLE = no # USB Nkey Rollover
63BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
64MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
65UNICODE_ENABLE = no # Unicode
66BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
67AUDIO_ENABLE = no # Audio output on port C6
68FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/wilba_tech/wt60_a/wt60_a.c b/keyboards/wilba_tech/wt60_a/wt60_a.c
new file mode 100644
index 000000000..ccff6d62c
--- /dev/null
+++ b/keyboards/wilba_tech/wt60_a/wt60_a.c
@@ -0,0 +1,17 @@
1/* Copyright 2018 Jason Williams (Wilba)
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// Nothing to see here, move along... ;-)
diff --git a/keyboards/wilba_tech/wt60_a/wt60_a.h b/keyboards/wilba_tech/wt60_a/wt60_a.h
new file mode 100644
index 000000000..8ac8d9216
--- /dev/null
+++ b/keyboards/wilba_tech/wt60_a/wt60_a.h
@@ -0,0 +1,52 @@
1/* Copyright 2018 Jason Williams (Wilba)
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 ____ KC_NO
22
23#define LAYOUT_60_ansi_split_bs_rshift( \
24 K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K213, \
25 K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \
26 K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, \
27 K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, \
28 K400, K401, K402, K406, K410, K411, K412, K413 \
29) { \
30 { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \
31 { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113 }, \
32 { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213 }, \
33 { K300, ____, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313 }, \
34 { K400, K401, K402, ____, ____, ____, K406, ____, ____, ____, K410, K411, K412, K413 } \
35}
36
37#define LAYOUT_60_ansi( \
38 K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, \
39 K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \
40 K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, \
41 K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, \
42 K400, K401, K402, K406, K410, K411, K412, K413 \
43) { \
44 { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \
45 { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113 }, \
46 { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, ____ }, \
47 { K300, ____, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, ____ }, \
48 { K400, K401, K402, ____, ____, ____, K406, ____, ____, ____, K410, K411, K412, K413 } \
49}
50
51
52
diff --git a/keyboards/wilba_tech/wt65_a/config.h b/keyboards/wilba_tech/wt65_a/config.h
new file mode 100644
index 000000000..fa919f186
--- /dev/null
+++ b/keyboards/wilba_tech/wt65_a/config.h
@@ -0,0 +1,187 @@
1/* Copyright 2018 Jason Williams (Wilba)
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 0x6582 // wilba.tech
23#define PRODUCT_ID 0x065A // 65-A
24#define DEVICE_VER 0x0001
25#define MANUFACTURER wilba.tech
26#define PRODUCT wilba.tech WT65-A
27#define DESCRIPTION wilba.tech WT65-A
28
29/* key matrix size */
30#define MATRIX_ROWS 5
31#define MATRIX_COLS 15
32
33/*
34 * Keyboard Matrix Assignments
35 *
36 * Change this to how you wired your keyboard
37 * COLS: AVR pins used for columns, left to right
38 * ROWS: AVR pins used for rows, top to bottom
39 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
40 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
41 *
42*/
43#define MATRIX_ROW_PINS { F0, E6, F4, F6, F7 }
44#define MATRIX_COL_PINS { F5, D5, B1, B2, B3, D3, D2, C7, C6, B6, B5, B4, D7, D6, D4 }
45#define UNUSED_PINS
46
47/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
48#define DIODE_DIRECTION ROW2COL
49
50// #define BACKLIGHT_PIN B7
51// #define BACKLIGHT_BREATHING
52// #define BACKLIGHT_LEVELS 3
53
54
55/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
56#define DEBOUNCING_DELAY 5
57
58/* define if matrix has ghost (lacks anti-ghosting diodes) */
59//#define MATRIX_HAS_GHOST
60
61/* number of backlight levels */
62
63/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
64#define LOCKING_SUPPORT_ENABLE
65/* Locking resynchronize hack */
66#define LOCKING_RESYNC_ENABLE
67
68/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
69 * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
70 */
71// #define GRAVE_ESC_CTRL_OVERRIDE
72
73/*
74 * Force NKRO
75 *
76 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
77 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
78 * makefile for this to work.)
79 *
80 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
81 * until the next keyboard reset.
82 *
83 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
84 * fully operational during normal computer usage.
85 *
86 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
87 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
88 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
89 * power-up.
90 *
91 */
92//#define FORCE_NKRO
93
94/*
95 * Magic Key Options
96 *
97 * Magic keys are hotkey commands that allow control over firmware functions of
98 * the keyboard. They are best used in combination with the HID Listen program,
99 * found here: https://www.pjrc.com/teensy/hid_listen.html
100 *
101 * The options below allow the magic key functionality to be changed. This is
102 * useful if your keyboard/keypad is missing keys and you want magic key support.
103 *
104 */
105
106/* key combination for magic key command */
107#define IS_COMMAND() ( \
108 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
109)
110
111/* control how magic key switches layers */
112//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
113//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
114//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
115
116/* override magic key keymap */
117//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
118//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
119//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
120//#define MAGIC_KEY_HELP1 H
121//#define MAGIC_KEY_HELP2 SLASH
122//#define MAGIC_KEY_DEBUG D
123//#define MAGIC_KEY_DEBUG_MATRIX X
124//#define MAGIC_KEY_DEBUG_KBD K
125//#define MAGIC_KEY_DEBUG_MOUSE M
126//#define MAGIC_KEY_VERSION V
127//#define MAGIC_KEY_STATUS S
128//#define MAGIC_KEY_CONSOLE C
129//#define MAGIC_KEY_LAYER0_ALT1 ESC
130//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
131//#define MAGIC_KEY_LAYER0 0
132//#define MAGIC_KEY_LAYER1 1
133//#define MAGIC_KEY_LAYER2 2
134//#define MAGIC_KEY_LAYER3 3
135//#define MAGIC_KEY_LAYER4 4
136//#define MAGIC_KEY_LAYER5 5
137//#define MAGIC_KEY_LAYER6 6
138//#define MAGIC_KEY_LAYER7 7
139//#define MAGIC_KEY_LAYER8 8
140//#define MAGIC_KEY_LAYER9 9
141//#define MAGIC_KEY_BOOTLOADER PAUSE
142//#define MAGIC_KEY_LOCK CAPS
143//#define MAGIC_KEY_EEPROM E
144//#define MAGIC_KEY_NKRO N
145//#define MAGIC_KEY_SLEEP_LED Z
146
147/*
148 * Feature disable options
149 * These options are also useful to firmware size reduction.
150 */
151
152/* disable debug print */
153//#define NO_DEBUG
154
155/* disable print */
156//#define NO_PRINT
157
158/* disable action features */
159//#define NO_ACTION_LAYER
160//#define NO_ACTION_TAPPING
161//#define NO_ACTION_ONESHOT
162//#define NO_ACTION_MACRO
163//#define NO_ACTION_FUNCTION
164
165/*
166 * MIDI options
167 */
168
169/* Prevent use of disabled MIDI features in the keymap */
170//#define MIDI_ENABLE_STRICT 1
171
172/* enable basic MIDI features:
173 - MIDI notes can be sent when in Music mode is on
174*/
175//#define MIDI_BASIC
176
177/* enable advanced MIDI features:
178 - MIDI notes can be added to the keymap
179 - Octave shift and transpose
180 - Virtual sustain, portamento, and modulation wheel
181 - etc.
182*/
183//#define MIDI_ADVANCED
184
185/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
186//#define MIDI_TONE_KEYCODE_OCTAVES 1
187
diff --git a/keyboards/wilba_tech/wt65_a/info.json b/keyboards/wilba_tech/wt65_a/info.json
new file mode 100644
index 000000000..f2b18dadd
--- /dev/null
+++ b/keyboards/wilba_tech/wt65_a/info.json
@@ -0,0 +1,13 @@
1{
2 "keyboard_name": "wilba.tech WT65-A",
3 "url": "https://wilba.tech",
4 "maintainer": "Wilba",
5 "bootloader": "atmel-dfu",
6 "width": 16,
7 "height": 5,
8 "layouts": {
9 "LAYOUT_all": {
10 "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"Del", "x":14, "y":0}, {"label":"Home", "x":15, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Backspace", "x":13.5, "y":1, "w":1.5}, {"label":"PgUp", "x":15, "y":1}, {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"PgDn", "x":15, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"\u2191", "x":14, "y":3}, {"label":"End", "x":15, "y":3}, {"label":"Fn", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"\u2190", "x":13, "y":4}, {"label":"\u2193", "x":14, "y":4}, {"label":"\u2192", "x":15, "y":4}]
11 }
12 }
13} \ No newline at end of file
diff --git a/keyboards/wilba_tech/wt65_a/keymaps/default/keymap.c b/keyboards/wilba_tech/wt65_a/keymaps/default/keymap.c
new file mode 100644
index 000000000..c5ae81168
--- /dev/null
+++ b/keyboards/wilba_tech/wt65_a/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
1#include QMK_KEYBOARD_H
2
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4
5 // Default layer
6 [0] = LAYOUT_all(
7 KC_ESC, 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_BSPC, KC_HOME,
8 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,
9 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,
10 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,
11 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
12
13 // Fn1 Layer
14 [1] = LAYOUT_all(
15 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, KC_DEL, KC_TRNS,
16 KC_CAPS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS,
17 KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_TRNS, KC_TRNS,
18 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS,
19 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
20
21 // Fn2 Layer
22 [2] = LAYOUT_all(
23 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
24 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
25 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
26 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
27 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
28
29 // Fn3 Layer
30 [3] = LAYOUT_all(
31 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
32 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
33 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
34 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
35 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
36};
37
diff --git a/keyboards/wilba_tech/wt65_a/readme.md b/keyboards/wilba_tech/wt65_a/readme.md
new file mode 100644
index 000000000..1551b55b5
--- /dev/null
+++ b/keyboards/wilba_tech/wt65_a/readme.md
@@ -0,0 +1,15 @@
1# WILBA.TECH WT65-A
2
3![WILBA.TECH WT65-A](https://wilba.tech)
4
5WT65-A is a keyboard PCB supporting 65% layout with 0.25U blocker. [More info at wilba.tech](https://wilba.tech/)
6
7Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582)
8Hardware Supported: WILBA.TECH WT65-A
9Hardware Availability: Custom keyboard group buys
10
11Make example for this keyboard (after setting up your build environment):
12
13 make wilba_tech/wt65_a: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). \ No newline at end of file
diff --git a/keyboards/wilba_tech/wt65_a/rules.mk b/keyboards/wilba_tech/wt65_a/rules.mk
new file mode 100644
index 000000000..99224c247
--- /dev/null
+++ b/keyboards/wilba_tech/wt65_a/rules.mk
@@ -0,0 +1,68 @@
1# project specific files
2SRC = drivers/issi/is31fl3736.c \
3 drivers/avr/i2c_master.c \
4 keyboards/wilba_tech/wt_mono_backlight.c \
5 keyboards/wilba_tech/wt_main.c
6
7# MCU name
8MCU = atmega32u4
9
10# Processor frequency.
11# This will define a symbol, F_CPU, in all source code files equal to the
12# processor frequency in Hz. You can then use this symbol in your source code to
13# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
14# automatically to create a 32-bit value in your source code.
15#
16# This will be an integer division of F_USB below, as it is sourced by
17# F_USB after it has run through any CPU prescalers. Note that this value
18# does not *change* the processor frequency - it should merely be updated to
19# reflect the processor speed set externally so that the code can use accurate
20# software delays.
21F_CPU = 16000000
22
23
24#
25# LUFA specific
26#
27# Target architecture (see library "Board Types" documentation).
28ARCH = AVR8
29
30# Input clock frequency.
31# This will define a symbol, F_USB, in all source code files equal to the
32# input clock frequency (before any prescaling is performed) in Hz. This value may
33# differ from F_CPU if prescaling is used on the latter, and is required as the
34# raw input clock is fed directly to the PLL sections of the AVR for high speed
35# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
36# at the end, this will be done automatically to create a 32-bit value in your
37# source code.
38#
39# If no clock division is performed on the input clock inside the AVR (via the
40# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
41F_USB = $(F_CPU)
42
43# Interrupt driven control endpoint task(+60)
44OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
45
46
47# Boot Section
48BOOTLOADER = atmel-dfu
49
50
51# Build Options
52# change yes to no to disable
53#
54BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
55MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
56EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
57CONSOLE_ENABLE = yes # Console for debug(+400)
58COMMAND_ENABLE = yes # Commands for debug and configuration
59# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
60SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
61# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
62NKRO_ENABLE = no # USB Nkey Rollover
63BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
64MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
65UNICODE_ENABLE = no # Unicode
66BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
67AUDIO_ENABLE = no # Audio output on port C6
68FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/wilba_tech/wt65_a/wt65_a.c b/keyboards/wilba_tech/wt65_a/wt65_a.c
new file mode 100644
index 000000000..ccff6d62c
--- /dev/null
+++ b/keyboards/wilba_tech/wt65_a/wt65_a.c
@@ -0,0 +1,17 @@
1/* Copyright 2018 Jason Williams (Wilba)
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// Nothing to see here, move along... ;-)
diff --git a/keyboards/wilba_tech/wt65_a/wt65_a.h b/keyboards/wilba_tech/wt65_a/wt65_a.h
new file mode 100644
index 000000000..9c3e6e12b
--- /dev/null
+++ b/keyboards/wilba_tech/wt65_a/wt65_a.h
@@ -0,0 +1,41 @@
1/* Copyright 2018 Jason Williams (Wilba)
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 ____ KC_NO
22
23// Right switch of split backspace is at 2,13 and is the only switch
24// whose physical position doesn't match switch matrix position :-(
25// However, it also makes no sense to view the physical as 16 columns,
26// so the numbering goes 00 to 14. Deal with it.
27
28#define LAYOUT_all( \
29 K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K213, K014, \
30 K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
31 K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, \
32 K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, \
33 K400, K401, K402, K406, K410, K411, K412, K413, K414 \
34) { \
35 { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
36 { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
37 { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214 }, \
38 { K300, ____, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \
39 { K400, K401, K402, ____, ____, ____, K406, ____, ____, ____, K410, K411, K412, K413, K414 } \
40}
41
diff --git a/keyboards/wilba_tech/wt80_a/config.h b/keyboards/wilba_tech/wt80_a/config.h
new file mode 100644
index 000000000..9687cb6d6
--- /dev/null
+++ b/keyboards/wilba_tech/wt80_a/config.h
@@ -0,0 +1,187 @@
1/* Copyright 2018 Jason Williams (Wilba)
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 0x6582 // wilba.tech
23#define PRODUCT_ID 0x080A // 80-A
24#define DEVICE_VER 0x0001
25#define MANUFACTURER wilba.tech
26#define PRODUCT wilba.tech WT80-A
27#define DESCRIPTION wilba.tech WT80-A
28
29/* key matrix size */
30#define MATRIX_ROWS 6
31#define MATRIX_COLS 17
32
33/*
34 * Keyboard Matrix Assignments
35 *
36 * Change this to how you wired your keyboard
37 * COLS: AVR pins used for columns, left to right
38 * ROWS: AVR pins used for rows, top to bottom
39 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
40 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
41 *
42*/
43#define MATRIX_ROW_PINS { F1, F0, E6, F4, F6, F7 }
44#define MATRIX_COL_PINS { F5, D5, B1, B2, B3, D3, D2, C7, C6, B6, B5, B4, D7, D6, D4, B7, B0 }
45#define UNUSED_PINS
46
47/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
48#define DIODE_DIRECTION ROW2COL
49
50// #define BACKLIGHT_PIN B7
51// #define BACKLIGHT_BREATHING
52// #define BACKLIGHT_LEVELS 3
53
54
55/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
56#define DEBOUNCING_DELAY 5
57
58/* define if matrix has ghost (lacks anti-ghosting diodes) */
59//#define MATRIX_HAS_GHOST
60
61/* number of backlight levels */
62
63/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
64#define LOCKING_SUPPORT_ENABLE
65/* Locking resynchronize hack */
66#define LOCKING_RESYNC_ENABLE
67
68/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
69 * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
70 */
71// #define GRAVE_ESC_CTRL_OVERRIDE
72
73/*
74 * Force NKRO
75 *
76 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
77 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
78 * makefile for this to work.)
79 *
80 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
81 * until the next keyboard reset.
82 *
83 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
84 * fully operational during normal computer usage.
85 *
86 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
87 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
88 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
89 * power-up.
90 *
91 */
92//#define FORCE_NKRO
93
94/*
95 * Magic Key Options
96 *
97 * Magic keys are hotkey commands that allow control over firmware functions of
98 * the keyboard. They are best used in combination with the HID Listen program,
99 * found here: https://www.pjrc.com/teensy/hid_listen.html
100 *
101 * The options below allow the magic key functionality to be changed. This is
102 * useful if your keyboard/keypad is missing keys and you want magic key support.
103 *
104 */
105
106/* key combination for magic key command */
107#define IS_COMMAND() ( \
108 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
109)
110
111/* control how magic key switches layers */
112//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
113//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
114//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
115
116/* override magic key keymap */
117//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
118//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
119//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
120//#define MAGIC_KEY_HELP1 H
121//#define MAGIC_KEY_HELP2 SLASH
122//#define MAGIC_KEY_DEBUG D
123//#define MAGIC_KEY_DEBUG_MATRIX X
124//#define MAGIC_KEY_DEBUG_KBD K
125//#define MAGIC_KEY_DEBUG_MOUSE M
126//#define MAGIC_KEY_VERSION V
127//#define MAGIC_KEY_STATUS S
128//#define MAGIC_KEY_CONSOLE C
129//#define MAGIC_KEY_LAYER0_ALT1 ESC
130//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
131//#define MAGIC_KEY_LAYER0 0
132//#define MAGIC_KEY_LAYER1 1
133//#define MAGIC_KEY_LAYER2 2
134//#define MAGIC_KEY_LAYER3 3
135//#define MAGIC_KEY_LAYER4 4
136//#define MAGIC_KEY_LAYER5 5
137//#define MAGIC_KEY_LAYER6 6
138//#define MAGIC_KEY_LAYER7 7
139//#define MAGIC_KEY_LAYER8 8
140//#define MAGIC_KEY_LAYER9 9
141//#define MAGIC_KEY_BOOTLOADER PAUSE
142//#define MAGIC_KEY_LOCK CAPS
143//#define MAGIC_KEY_EEPROM E
144//#define MAGIC_KEY_NKRO N
145//#define MAGIC_KEY_SLEEP_LED Z
146
147/*
148 * Feature disable options
149 * These options are also useful to firmware size reduction.
150 */
151
152/* disable debug print */
153//#define NO_DEBUG
154
155/* disable print */
156//#define NO_PRINT
157
158/* disable action features */
159//#define NO_ACTION_LAYER
160//#define NO_ACTION_TAPPING
161//#define NO_ACTION_ONESHOT
162//#define NO_ACTION_MACRO
163//#define NO_ACTION_FUNCTION
164
165/*
166 * MIDI options
167 */
168
169/* Prevent use of disabled MIDI features in the keymap */
170//#define MIDI_ENABLE_STRICT 1
171
172/* enable basic MIDI features:
173 - MIDI notes can be sent when in Music mode is on
174*/
175//#define MIDI_BASIC
176
177/* enable advanced MIDI features:
178 - MIDI notes can be added to the keymap
179 - Octave shift and transpose
180 - Virtual sustain, portamento, and modulation wheel
181 - etc.
182*/
183//#define MIDI_ADVANCED
184
185/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
186//#define MIDI_TONE_KEYCODE_OCTAVES 1
187
diff --git a/keyboards/wilba_tech/wt80_a/info.json b/keyboards/wilba_tech/wt80_a/info.json
new file mode 100644
index 000000000..a43acb2f5
--- /dev/null
+++ b/keyboards/wilba_tech/wt80_a/info.json
@@ -0,0 +1,13 @@
1{
2 "keyboard_name": "wilba.tech WT80-A",
3 "url": "https://wilba.tech",
4 "maintainer": "Wilba",
5 "bootloader": "atmel-dfu",
6 "width": 18.25,
7 "height": 6.5,
8 "layouts": {
9 "LAYOUT_all": {
10 "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6.5, "y":0}, {"label":"F6", "x":7.5, "y":0}, {"label":"F7", "x":8.5, "y":0}, {"label":"F8", "x":9.5, "y":0}, {"label":"F9", "x":11, "y":0}, {"label":"F10", "x":12, "y":0}, {"label":"F11", "x":13, "y":0}, {"label":"F12", "x":14, "y":0}, {"label":"PrtSc", "x":15.25, "y":0}, {"label":"Scroll Lock", "x":16.25, "y":0}, {"label":"Pause", "x":17.25, "y":0}, {"label":"~", "x":0, "y":1.5}, {"label":"!", "x":1, "y":1.5}, {"label":"@", "x":2, "y":1.5}, {"label":"#", "x":3, "y":1.5}, {"label":"$", "x":4, "y":1.5}, {"label":"%", "x":5, "y":1.5}, {"label":"^", "x":6, "y":1.5}, {"label":"&", "x":7, "y":1.5}, {"label":"*", "x":8, "y":1.5}, {"label":"(", "x":9, "y":1.5}, {"label":")", "x":10, "y":1.5}, {"label":"_", "x":11, "y":1.5}, {"label":"+", "x":12, "y":1.5}, {"label":"Backspace", "x":13, "y":1.5}, {"x":14, "y":1.5}, {"label":"Insert", "x":15.25, "y":1.5}, {"label":"Home", "x":16.25, "y":1.5}, {"label":"PgUp", "x":17.25, "y":1.5}, {"label":"Tab", "x":0, "y":2.5, "w":1.5}, {"label":"Q", "x":1.5, "y":2.5}, {"label":"W", "x":2.5, "y":2.5}, {"label":"E", "x":3.5, "y":2.5}, {"label":"R", "x":4.5, "y":2.5}, {"label":"T", "x":5.5, "y":2.5}, {"label":"Y", "x":6.5, "y":2.5}, {"label":"U", "x":7.5, "y":2.5}, {"label":"I", "x":8.5, "y":2.5}, {"label":"O", "x":9.5, "y":2.5}, {"label":"P", "x":10.5, "y":2.5}, {"label":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"|", "x":13.5, "y":2.5, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.5}, {"label":"End", "x":16.25, "y":2.5}, {"label":"PgDn", "x":17.25, "y":2.5}, {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, {"label":"A", "x":1.75, "y":3.5}, {"label":"S", "x":2.75, "y":3.5}, {"label":"D", "x":3.75, "y":3.5}, {"label":"F", "x":4.75, "y":3.5}, {"label":"G", "x":5.75, "y":3.5}, {"label":"H", "x":6.75, "y":3.5}, {"label":"J", "x":7.75, "y":3.5}, {"label":"K", "x":8.75, "y":3.5}, {"label":"L", "x":9.75, "y":3.5}, {"label":":", "x":10.75, "y":3.5}, {"label":"\"", "x":11.75, "y":3.5}, {"label":"Enter", "x":12.75, "y":3.5, "w":2.25}, {"label":"Shift", "x":0, "y":4.5, "w":2.25}, {"label":"Z", "x":2.25, "y":4.5}, {"label":"X", "x":3.25, "y":4.5}, {"label":"C", "x":4.25, "y":4.5}, {"label":"V", "x":5.25, "y":4.5}, {"label":"B", "x":6.25, "y":4.5}, {"label":"N", "x":7.25, "y":4.5}, {"label":"M", "x":8.25, "y":4.5}, {"label":"<", "x":9.25, "y":4.5}, {"label":">", "x":10.25, "y":4.5}, {"label":"?", "x":11.25, "y":4.5}, {"label":"Shift", "x":12.25, "y":4.5, "w":1.75}, {"x":14, "y":4.5}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, {"x":3.75, "y":5.5, "w":6.25}, {"label":"Alt", "x":10, "y":5.5, "w":1.25}, {"label":"Win", "x":11.25, "y":5.5, "w":1.25}, {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, {"label":"\u2190", "x":15.25, "y":5.5}, {"label":"\u2193", "x":16.25, "y":5.5}, {"label":"\u2192", "x":17.25, "y":5.5}]
11 }
12 }
13}
diff --git a/keyboards/wilba_tech/wt80_a/keymaps/default/keymap.c b/keyboards/wilba_tech/wt80_a/keymaps/default/keymap.c
new file mode 100644
index 000000000..cf9225e3e
--- /dev/null
+++ b/keyboards/wilba_tech/wt80_a/keymaps/default/keymap.c
@@ -0,0 +1,22 @@
1#include QMK_KEYBOARD_H
2
3const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
4
5 [0] = LAYOUT_all(
6 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_SLCK, KC_PAUS,
7 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_BSPC, KC_INS, KC_HOME, KC_PGUP,
8 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, KC_END, KC_PGDN,
9 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,
10 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_TRNS, KC_UP,
11 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
12
13 [1] = LAYOUT_all(
14 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
15 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
16 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
17 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
18 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
19 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
20
21};
22
diff --git a/keyboards/wilba_tech/wt80_a/readme.md b/keyboards/wilba_tech/wt80_a/readme.md
new file mode 100644
index 000000000..011805748
--- /dev/null
+++ b/keyboards/wilba_tech/wt80_a/readme.md
@@ -0,0 +1,15 @@
1# WILBA.TECH WT80-A
2
3![WILBA.TECH WT80-A](https://wilba./tech)
4
5WT80-A is a keyboard PCB supporting TKL layout with 0.25U gaps. [More info at wilba.tech](https://wilba.tech/)
6
7Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582)
8Hardware Supported: WILBA.TECH WT80-A
9Hardware Availability: Custom keyboard group buys
10
11Make example for this keyboard (after setting up your build environment):
12
13 make wilba_tech/wt80_a: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). \ No newline at end of file
diff --git a/keyboards/wilba_tech/wt80_a/rules.mk b/keyboards/wilba_tech/wt80_a/rules.mk
new file mode 100644
index 000000000..99224c247
--- /dev/null
+++ b/keyboards/wilba_tech/wt80_a/rules.mk
@@ -0,0 +1,68 @@
1# project specific files
2SRC = drivers/issi/is31fl3736.c \
3 drivers/avr/i2c_master.c \
4 keyboards/wilba_tech/wt_mono_backlight.c \
5 keyboards/wilba_tech/wt_main.c
6
7# MCU name
8MCU = atmega32u4
9
10# Processor frequency.
11# This will define a symbol, F_CPU, in all source code files equal to the
12# processor frequency in Hz. You can then use this symbol in your source code to
13# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
14# automatically to create a 32-bit value in your source code.
15#
16# This will be an integer division of F_USB below, as it is sourced by
17# F_USB after it has run through any CPU prescalers. Note that this value
18# does not *change* the processor frequency - it should merely be updated to
19# reflect the processor speed set externally so that the code can use accurate
20# software delays.
21F_CPU = 16000000
22
23
24#
25# LUFA specific
26#
27# Target architecture (see library "Board Types" documentation).
28ARCH = AVR8
29
30# Input clock frequency.
31# This will define a symbol, F_USB, in all source code files equal to the
32# input clock frequency (before any prescaling is performed) in Hz. This value may
33# differ from F_CPU if prescaling is used on the latter, and is required as the
34# raw input clock is fed directly to the PLL sections of the AVR for high speed
35# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
36# at the end, this will be done automatically to create a 32-bit value in your
37# source code.
38#
39# If no clock division is performed on the input clock inside the AVR (via the
40# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
41F_USB = $(F_CPU)
42
43# Interrupt driven control endpoint task(+60)
44OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
45
46
47# Boot Section
48BOOTLOADER = atmel-dfu
49
50
51# Build Options
52# change yes to no to disable
53#
54BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
55MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
56EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
57CONSOLE_ENABLE = yes # Console for debug(+400)
58COMMAND_ENABLE = yes # Commands for debug and configuration
59# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
60SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
61# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
62NKRO_ENABLE = no # USB Nkey Rollover
63BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
64MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
65UNICODE_ENABLE = no # Unicode
66BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
67AUDIO_ENABLE = no # Audio output on port C6
68FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/wilba_tech/wt80_a/wt80_a.c b/keyboards/wilba_tech/wt80_a/wt80_a.c
new file mode 100644
index 000000000..ccff6d62c
--- /dev/null
+++ b/keyboards/wilba_tech/wt80_a/wt80_a.c
@@ -0,0 +1,17 @@
1/* Copyright 2018 Jason Williams (Wilba)
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// Nothing to see here, move along... ;-)
diff --git a/keyboards/wilba_tech/wt80_a/wt80_a.h b/keyboards/wilba_tech/wt80_a/wt80_a.h
new file mode 100644
index 000000000..26403ef34
--- /dev/null
+++ b/keyboards/wilba_tech/wt80_a/wt80_a.h
@@ -0,0 +1,43 @@
1/* Copyright 2018 Jason Williams (Wilba)
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 ____ KC_NO
22
23// Right switch of split backspace is at 3,13 and is the only switch
24// whose physical position doesn't match switch matrix position :-(
25// However, it also makes no sense to view the physical as 18 columns,
26// so the numbering goes 00 to 16. Deal with it.
27
28#define LAYOUT_all( \
29 K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, K016, \
30 K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K313, K114, K115, K116, \
31 K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, \
32 K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, \
33 K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K415, \
34 K500, K501, K502, K506, K510, K511, K512, K513, K514, K515, K516 \
35) { \
36 { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, ____, K014, K015, K016 }, \
37 { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116 }, \
38 { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216 }, \
39 { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, ____, ____, ____ }, \
40 { K400, ____, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, ____, K415, ____ }, \
41 { K500, K501, K502, ____, ____, ____, K506, ____, ____, ____, K510, K511, K512, K513, K514, K515, K516 } \
42}
43
diff --git a/keyboards/wilba_tech/wt_main.c b/keyboards/wilba_tech/wt_main.c
new file mode 100644
index 000000000..f514dbefc
--- /dev/null
+++ b/keyboards/wilba_tech/wt_main.c
@@ -0,0 +1,55 @@
1/* Copyright 2018 Jason Williams (Wilba)
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 "quantum.h"
18#include "keyboards/wilba_tech/wt_mono_backlight.h"
19
20void bootmagic_lite(void)
21{
22 // The lite version of TMK's bootmagic.
23 // 100% less potential for accidentally making the
24 // keyboard do stupid things.
25
26 // We need multiple scans because debouncing can't be turned off.
27 matrix_scan();
28 wait_ms(DEBOUNCING_DELAY);
29 wait_ms(DEBOUNCING_DELAY);
30 matrix_scan();
31
32 // If the Esc (matrix 0,0) is held down on power up,
33 // reset the EEPROM valid state and jump to bootloader.
34 if ( matrix_get_row(0) & (1<<0) ) {
35 // Set the TMK/QMK EEPROM state as invalid.
36 eeconfig_disable();
37 // Jump to bootloader.
38 bootloader_jump();
39 }
40}
41
42void matrix_init_kb(void)
43{
44 bootmagic_lite();
45 backlight_init_drivers();
46 backlight_timer_init();
47 backlight_timer_enable();
48 matrix_init_user();
49}
50
51void matrix_scan_kb(void)
52{
53 backlight_update_pwm_buffers();
54 matrix_scan_user();
55}
diff --git a/keyboards/wilba_tech/wt_mono_backlight.c b/keyboards/wilba_tech/wt_mono_backlight.c
new file mode 100644
index 000000000..bf485bce1
--- /dev/null
+++ b/keyboards/wilba_tech/wt_mono_backlight.c
@@ -0,0 +1,116 @@
1/* Copyright 2018 Jason Williams (Wilba)
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 "wt_mono_backlight.h"
18#include "drivers/avr/i2c_master.h"
19#include "drivers/issi/is31fl3736.h"
20
21#include <avr/interrupt.h>
22
23#define ISSI_ADDR_DEFAULT 0x50
24
25bool g_suspend_state = false;
26
27// Global tick at 20 Hz
28uint32_t g_tick = 0;
29uint8_t g_config_effect_speed = 0;
30uint8_t g_config_brightness = 255;
31
32void backlight_init_drivers(void)
33{
34 // Initialize I2C
35 i2c_init();
36 IS31FL3736_init( ISSI_ADDR_DEFAULT );
37
38 for ( uint8_t index = 0; index < 96; index++ ) {
39 IS31FL3736_mono_set_led_control_register( index, true );
40 }
41 IS31FL3736_update_led_control_registers( ISSI_ADDR_DEFAULT, 0x00 );
42}
43
44
45// This is (F_CPU/1024) / 20 Hz
46// = 15625 Hz / 20 Hz
47// = 781
48#define TIMER3_TOP 781
49
50void backlight_timer_init(void)
51{
52 static uint8_t backlight_timer_is_init = 0;
53 if ( backlight_timer_is_init ) {
54 return;
55 }
56 backlight_timer_is_init = 1;
57
58 // Timer 3 setup
59 TCCR3B = _BV(WGM32) | // CTC mode OCR3A as TOP
60 _BV(CS32) | _BV(CS30); // prescale by /1024
61 // Set TOP value
62 uint8_t sreg = SREG;
63 cli();
64
65 OCR3AH = (TIMER3_TOP >> 8) & 0xff;
66 OCR3AL = TIMER3_TOP & 0xff;
67 SREG = sreg;
68}
69
70void backlight_timer_enable(void)
71{
72 TIMSK3 |= _BV(OCIE3A);
73}
74
75void backlight_timer_disable(void)
76{
77 TIMSK3 &= ~_BV(OCIE3A);
78}
79
80void backlight_set_suspend_state(bool state)
81{
82 g_suspend_state = state;
83}
84
85void backlight_effect_cycle_all(void)
86{
87 uint8_t offset = ( g_tick << g_config_effect_speed ) & 0xFF;
88
89 backlight_set_brightness_all( offset );
90}
91
92ISR(TIMER3_COMPA_vect)
93{
94 // delay 1 second before driving LEDs or doing anything else
95 static uint8_t startup_tick = 0;
96 if ( startup_tick < 20 ) {
97 startup_tick++;
98 return;
99 }
100
101 g_tick++;
102
103 //backlight_effect_cycle_all();
104 backlight_set_brightness_all( 255 );
105}
106
107void backlight_update_pwm_buffers(void)
108{
109 IS31FL3736_update_pwm_buffers(ISSI_ADDR_DEFAULT,0x00);
110}
111
112void backlight_set_brightness_all( uint8_t value )
113{
114 IS31FL3736_mono_set_brightness_all( value );
115}
116
diff --git a/keyboards/wilba_tech/wt_mono_backlight.h b/keyboards/wilba_tech/wt_mono_backlight.h
new file mode 100644
index 000000000..70031bedc
--- /dev/null
+++ b/keyboards/wilba_tech/wt_mono_backlight.h
@@ -0,0 +1,33 @@
1/* Copyright 2018 Jason Williams (Wilba)
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 <stdint.h>
20#include <stdbool.h>
21
22void backlight_init_drivers(void);
23
24void backlight_timer_init(void);
25void backlight_timer_enable(void);
26void backlight_timer_disable(void);
27
28void backlight_set_suspend_state(bool state);
29
30void backlight_update_pwm_buffers(void);
31
32void backlight_set_brightness_all( uint8_t value );
33