aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboards/centromere/centromere.c48
-rw-r--r--keyboards/centromere/centromere.h47
-rw-r--r--keyboards/centromere/config.h76
-rw-r--r--keyboards/centromere/keymaps/default/keymap.c69
-rw-r--r--keyboards/centromere/keymaps/default_u2/keymap.c68
-rw-r--r--keyboards/centromere/keymaps/default_u2/rules.mk12
-rw-r--r--keyboards/centromere/matrix.c153
-rw-r--r--keyboards/centromere/readme.md1
-rw-r--r--keyboards/centromere/rules.mk42
9 files changed, 516 insertions, 0 deletions
diff --git a/keyboards/centromere/centromere.c b/keyboards/centromere/centromere.c
new file mode 100644
index 000000000..8800e2ce6
--- /dev/null
+++ b/keyboards/centromere/centromere.c
@@ -0,0 +1,48 @@
1#include "centromere.h"
2
3void uart_init(void) {
4 SERIAL_UART_INIT();
5}
6
7void led_init(void) {
8#if MCU == atmega32u2
9 setPinOutput(C4); // Set red LED pin as output
10 setPinOutput(C5); // Set blue LED pin as output
11 setPinOutput(D1); // Set green LED pin as output
12
13 writePinHigh(C4); // Turn off red LED pin
14 writePinHigh(C5); // Turn off blue LED pin
15 writePinHigh(D1); // Turn off green LED pin
16
17#else
18
19 setPinOutput(F4); // Set red LED pin as output
20 setPinOutput(F5); // Set blue LED pin as output
21 setPinOutput(D1); // Set green LED pin as output
22
23 writePinHigh(F4); // Turn off red LED pin
24 writePinHigh(F5); // Turn off blue LED pin
25 writePinHigh(D1); // Turn off green LED pin
26
27#endif
28
29}
30
31void matrix_init_kb(void) {
32 // put your keyboard start-up code here
33 // runs once when the firmware starts up
34 matrix_init_user();
35 uart_init();
36 led_init();
37}
38
39#ifdef SWAP_HANDS_ENABLE
40__attribute__ ((weak))
41const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
42{{9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}},
43{{9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}},
44{{9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}},
45{{9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
46{{9, 4}, {8, 4}, {7, 4}, {6, 4}, {5, 4}, {4, 4}, {3, 4}, {2, 4}, {1, 4}, {0, 4}},
47};
48#endif
diff --git a/keyboards/centromere/centromere.h b/keyboards/centromere/centromere.h
new file mode 100644
index 000000000..826e8dde4
--- /dev/null
+++ b/keyboards/centromere/centromere.h
@@ -0,0 +1,47 @@
1#pragma once
2
3#include "quantum.h"
4
5#if MCU == atmega32u2
6#define red_led_off writePinHigh(C5)
7#define red_led_on writePinLow(C5)
8#define blu_led_off writePinHigh(C4)
9#define blu_led_on writePinLow(C4)
10
11#else
12#define red_led_off writePinHigh(F5)
13#define red_led_on writePinLow(F5)
14#define blu_led_off writePinHigh(F4)
15#define blu_led_on writePinLow(F4)
16
17#endif
18
19#define grn_led_off writePinHigh(D1)
20#define grn_led_on writePinLow(D1)
21
22#define set_led_off red_led_off; blu_led_off
23#define set_led_red red_led_on; grn_led_off; blu_led_off
24#define set_led_blue red_led_off; grn_led_off; blu_led_on
25#define set_led_green red_led_off; grn_led_on; blu_led_off
26#define set_led_yellow red_led_on; grn_led_on; blu_led_off
27#define set_led_magenta red_led_on; grn_led_off; blu_led_on
28#define set_led_cyan red_led_off; grn_led_on; blu_led_on
29#define set_led_white red_led_on; grn_led_on; blu_led_on
30
31
32// This a shortcut to help you visually see your layout.
33// The first section contains all of the arguments
34// The second converts the arguments into a two-dimensional array
35#define LAYOUT( \
36 k0a, k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0b, \
37 k1a, k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1b,\
38 k2a, k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2b,\
39 k32, k33, k34, k35, k36, k37 \
40) \
41 { \
42 { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09 }, \
43 { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19 }, \
44 { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29 }, \
45 { KC_NO, KC_NO, k32, k33, k34, k35, k36, k37, KC_NO, KC_NO }, \
46 { KC_NO, KC_NO, k2a, k1a, k0a, k0b, k1b, k2b, KC_NO, KC_NO } \
47 }
diff --git a/keyboards/centromere/config.h b/keyboards/centromere/config.h
new file mode 100644
index 000000000..c051843c5
--- /dev/null
+++ b/keyboards/centromere/config.h
@@ -0,0 +1,76 @@
1/*
2Copyright 2012 Jun Wako <wakojun@gmail.com>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20#include "config_common.h"
21
22/* USB Device descriptor parameter */
23
24#define VENDOR_ID 0xFEED
25#define PRODUCT_ID 0x6060
26#define DEVICE_VER 0x0001
27#define MANUFACTURER Southpaw Design
28#define PRODUCT centromere
29#define DESCRIPTION Q.M.K. keyboard firmware for Centromere
30
31/* key matrix size */
32#define MATRIX_ROWS 5
33#define MATRIX_COLS 10
34
35/* define if matrix has ghost */
36//#define MATRIX_HAS_GHOST
37
38/* number of backlight levels */
39//#define BACKLIGHT_LEVELS 3
40
41#define ONESHOT_TIMEOUT 500
42
43/*
44 * Feature disable options
45 * These options are also useful to firmware size reduction.
46 */
47
48/* disable debug print */
49//#define NO_DEBUG
50
51/* disable print */
52//#define NO_PRINT
53
54/* disable action features */
55//#define NO_ACTION_LAYER
56//#define NO_ACTION_TAPPING
57//#define NO_ACTION_ONESHOT
58//#define NO_ACTION_MACRO
59//#define NO_ACTION_FUNCTION
60
61//UART settings for communication with the RF microcontroller
62#define SERIAL_UART_BAUD 500000
63#define SERIAL_UART_DATA UDR1
64#define SERIAL_UART_UBRR (F_CPU / (16UL * SERIAL_UART_BAUD) - 1)
65#define SERIAL_UART_TXD_READY (UCSR1A & _BV(UDRE1))
66#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1))
67#define SERIAL_UART_INIT() do { \
68 /* baud rate */ \
69 UBRR1L = SERIAL_UART_UBRR; \
70 /* baud rate */ \
71 UBRR1H = SERIAL_UART_UBRR >> 8; \
72 /* enable TX and RX */ \
73 UCSR1B = _BV(TXEN1) | _BV(RXEN1); \
74 /* 8-bit data */ \
75 UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \
76 } while(0)
diff --git a/keyboards/centromere/keymaps/default/keymap.c b/keyboards/centromere/keymaps/default/keymap.c
new file mode 100644
index 000000000..ca235f61f
--- /dev/null
+++ b/keyboards/centromere/keymaps/default/keymap.c
@@ -0,0 +1,69 @@
1#include QMK_KEYBOARD_H
2
3enum centromere_layers
4{
5 _STD,
6 _NUM,
7 _FN
8};
9
10
11const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
12
13 [_STD] = LAYOUT( \
14 //,-----------------------------------------------------. ,-----------------------------------------------------.
15 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,\
16 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
17 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,\
18 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
19 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,\
20 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
21 KC_LGUI, MO(_FN), KC_SPC, KC_SPC,MO(_NUM), KC_RALT \
22 //`--------------------------' `--------------------------'
23
24 ),
25
26
27 [_NUM] = LAYOUT( \
28 //,-----------------------------------------------------. ,-----------------------------------------------------.
29 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,\
30 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
31 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,\
32 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
33 KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT, KC_ENT,\
34 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
35 KC_LGUI, MO(_FN), KC_SPC, KC_ENT,MO(_NUM), KC_RALT \
36 //`--------------------------' `--------------------------'
37 ),
38
39 [_FN] = LAYOUT( \
40 //,-----------------------------------------------------. ,-----------------------------------------------------.
41 KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,\
42 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
43 KC_LCTL, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_PIPE, KC_GRV,\
44 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
45 KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UNDS, KC_PLUS, KC_LBRC, KC_RBRC, KC_BSLS, KC_TILD,\
46
47 KC_LGUI, MO(_FN), KC_SPC, KC_ENT,MO(_NUM), KC_RALT \
48 //`--------------------------' `--------------------------'
49 ),
50
51};
52
53void matrix_scan_user(void) {
54 uint8_t layer = get_highest_layer(layer_state);
55
56 switch (layer) {
57 case _STD:
58 set_led_off;
59 break;
60 case _FN:
61 set_led_blue;
62 break;
63 case _NUM:
64 set_led_red;
65 break;
66 default:
67 break;
68 }
69};
diff --git a/keyboards/centromere/keymaps/default_u2/keymap.c b/keyboards/centromere/keymaps/default_u2/keymap.c
new file mode 100644
index 000000000..c704adc58
--- /dev/null
+++ b/keyboards/centromere/keymaps/default_u2/keymap.c
@@ -0,0 +1,68 @@
1#include QMK_KEYBOARD_H
2
3enum centromere_layers
4{
5 _STD,
6 _NUM,
7 _FN
8};
9
10const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
11
12 [_STD] = LAYOUT( \
13 //,-----------------------------------------------------. ,-----------------------------------------------------.
14 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,\
15 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
16 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,\
17 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
18 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,\
19 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
20 KC_LGUI, MO(_FN), KC_SPC, KC_SPC,MO(_NUM), KC_RALT \
21 //`--------------------------' `--------------------------'
22
23 ),
24
25
26 [_NUM] = LAYOUT( \
27 //,-----------------------------------------------------. ,-----------------------------------------------------.
28 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,\
29 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
30 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,\
31 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
32 KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT, KC_ENT,\
33 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
34 KC_LGUI, MO(_FN), KC_SPC, KC_ENT,MO(_NUM), KC_RALT \
35 //`--------------------------' `--------------------------'
36 ),
37
38 [_FN] = LAYOUT( \
39 //,-----------------------------------------------------. ,-----------------------------------------------------.
40 KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,\
41 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
42 KC_LCTL, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_PIPE, KC_GRV,\
43 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
44 KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UNDS, KC_PLUS, KC_LBRC, KC_RBRC, KC_BSLS, KC_TILD,\
45
46 KC_LGUI, MO(_FN), KC_SPC, KC_ENT,MO(_NUM), KC_RALT \
47 //`--------------------------' `--------------------------'
48 ),
49
50};
51
52void matrix_scan_user(void) {
53 uint8_t layer = get_highest_layer(layer_state);
54
55 switch (layer) {
56 case _STD:
57 set_led_off;
58 break;
59 case _FN:
60 set_led_blue;
61 break;
62 case _NUM:
63 set_led_red;
64 break;
65 default:
66 break;
67 }
68};
diff --git a/keyboards/centromere/keymaps/default_u2/rules.mk b/keyboards/centromere/keymaps/default_u2/rules.mk
new file mode 100644
index 000000000..5fdb02af5
--- /dev/null
+++ b/keyboards/centromere/keymaps/default_u2/rules.mk
@@ -0,0 +1,12 @@
1# MCU name
2MCU = atmega32u2
3
4# Bootloader selection
5# Teensy halfkay
6# Pro Micro caterina
7# Atmel DFU atmel-dfu
8# LUFA DFU lufa-dfu
9# QMK DFU qmk-dfu
10# ATmega32A bootloadHID
11# ATmega328P USBasp
12BOOTLOADER = atmel-dfu
diff --git a/keyboards/centromere/matrix.c b/keyboards/centromere/matrix.c
new file mode 100644
index 000000000..c5fc8db6c
--- /dev/null
+++ b/keyboards/centromere/matrix.c
@@ -0,0 +1,153 @@
1/*
2Copyright 2012 Jun Wako
3Copyright 2014 Jack Humbert
4
5This program is free software: you can redistribute it and/or modify
6it under the terms of the GNU General Public License as published by
7the Free Software Foundation, either version 2 of the License, or
8(at your option) any later version.
9
10This program is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with this program. If not, see <http://www.gnu.org/licenses/>.
17*/
18#include <stdint.h>
19#include <stdbool.h>
20#if defined(__AVR__)
21#include <avr/io.h>
22#endif
23#include "wait.h"
24#include "print.h"
25#include "debug.h"
26#include "util.h"
27#include "matrix.h"
28#include "timer.h"
29
30#if (MATRIX_COLS <= 8)
31# define print_matrix_header() print("\nr/c 01234567\n")
32# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
33# define matrix_bitpop(i) bitpop(matrix[i])
34# define ROW_SHIFTER ((uint8_t)1)
35#elif (MATRIX_COLS <= 16)
36# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
37# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
38# define matrix_bitpop(i) bitpop16(matrix[i])
39# define ROW_SHIFTER ((uint16_t)1)
40#elif (MATRIX_COLS <= 32)
41# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
42# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
43# define matrix_bitpop(i) bitpop32(matrix[i])
44# define ROW_SHIFTER ((uint32_t)1)
45#endif
46
47/* matrix state(1:on, 0:off) */
48static matrix_row_t matrix[MATRIX_ROWS];
49
50
51__attribute__ ((weak))
52void matrix_init_kb(void) {
53 matrix_init_user();
54}
55
56__attribute__ ((weak))
57void matrix_scan_kb(void) {
58 matrix_scan_user();
59}
60
61__attribute__ ((weak))
62void matrix_init_user(void) {
63}
64
65__attribute__ ((weak))
66void matrix_scan_user(void) {
67}
68
69inline
70uint8_t matrix_rows(void) {
71 return MATRIX_ROWS;
72}
73
74inline
75uint8_t matrix_cols(void) {
76 return MATRIX_COLS;
77}
78
79void matrix_init(void) {
80
81 matrix_init_quantum();
82}
83
84uint8_t matrix_scan(void)
85{
86 SERIAL_UART_INIT();
87
88 uint32_t timeout = 0;
89
90 //the s character requests the RF remote slave to send the matrix information
91 SERIAL_UART_DATA = 's';
92
93 //trust the external keystates, erase the last set of data
94 uint8_t uart_data[11] = {0};
95
96 //there are 10 bytes corresponding to 1w columns, and an end byte
97 for (uint8_t i = 0; i < 11; i++) {
98 //wait for the serial data, timeout if it's been too long
99 while(!SERIAL_UART_RXD_PRESENT){
100 timeout++;
101 if (timeout > 10000){
102 break;
103 }
104 }
105 uart_data[i] = SERIAL_UART_DATA;
106 }
107
108 //check for the end packet, the key state bytes use the LSBs, so 0xE0
109 //will only show up here if the correct bytes were recieved
110 if (uart_data[10] == 0xE0)
111 {
112 //shifting and transferring the keystates to the QMK matrix variable
113 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
114 matrix[i] = (uint16_t) uart_data[i*2] | (uint16_t) uart_data[i*2+1] << 5;
115 }
116 }
117
118
119 matrix_scan_quantum();
120 return 1;
121}
122
123inline
124bool matrix_is_on(uint8_t row, uint8_t col)
125{
126 return (matrix[row] & ((matrix_row_t)1<<col));
127}
128
129inline
130matrix_row_t matrix_get_row(uint8_t row)
131{
132 return matrix[row];
133}
134
135void matrix_print(void)
136{
137 print_matrix_header();
138
139 for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
140 phex(row); print(": ");
141 print_matrix_row(row);
142 print("\n");
143 }
144}
145
146uint8_t matrix_key_count(void)
147{
148 uint8_t count = 0;
149 for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
150 count += matrix_bitpop(i);
151 }
152 return count;
153}
diff --git a/keyboards/centromere/readme.md b/keyboards/centromere/readme.md
new file mode 100644
index 000000000..547ea60dd
--- /dev/null
+++ b/keyboards/centromere/readme.md
@@ -0,0 +1 @@
QMK Firmware for the Centromere keyboard. Centromere is a custom wireless ergonomic keyboard, with 6x3 columnar staggered keys and a 3 key thumb cluster. Centromere keyboards can utilize hot-swap Kailh sockets for MX switches, and either Choc or MX switches can be permanently soldered. There are two types of receiver that use two different MCU for the Centromere board, and you can define which one you are using by defining your rules.mk file appropriately, as shown in the default keymaps.
diff --git a/keyboards/centromere/rules.mk b/keyboards/centromere/rules.mk
new file mode 100644
index 000000000..fee99d363
--- /dev/null
+++ b/keyboards/centromere/rules.mk
@@ -0,0 +1,42 @@
1# MCU name
2MCU = atmega32u4
3
4# Processor frequency
5F_CPU = 8000000
6
7# Bootloader selection
8# Teensy halfkay
9# Pro Micro caterina
10# Atmel DFU atmel-dfu
11# LUFA DFU lufa-dfu
12# QMK DFU qmk-dfu
13# ATmega32A bootloadHID
14# ATmega328P USBasp
15BOOTLOADER = caterina
16
17# Build Options
18# comment out to disable the options.
19#
20BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
21MOUSEKEY_ENABLE = yes # Mouse keys
22EXTRAKEY_ENABLE = yes # Audio control and System control
23CONSOLE_ENABLE = yes # Console for debug
24COMMAND_ENABLE = yes # Commands for debug and configuration
25CUSTOM_MATRIX = yes # Remote matrix from the wireless bridge
26# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
27SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
28NKRO_ENABLE = yes # USB Nkey Rollover
29BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
30MIDI_ENABLE = no # MIDI controls
31UNICODE_ENABLE = yes # Unicode
32BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
33
34USB = /dev/ttyACM0
35
36# upload: build
37# $(CENTROMERE_UPLOAD_COMMAND)
38
39OPT_DEFS += -DCENTROMERE_PROMICRO
40
41# # project specific files
42SRC = matrix.c