aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornickolaij <ni.jones999@gmail.com>2020-03-13 12:22:27 +1000
committerGitHub <noreply@github.com>2020-03-12 19:22:27 -0700
commitabd8e75cb730c89dfc3982ccda2ae88f5a56768c (patch)
treed5a817e78bffa4453adca04801472ace00908c30
parent904610718332d4526248221edc91be76f012c0e0 (diff)
downloadqmk_firmware-abd8e75cb730c89dfc3982ccda2ae88f5a56768c.tar.gz
qmk_firmware-abd8e75cb730c89dfc3982ccda2ae88f5a56768c.zip
[Keyboard] Abacus Keyboard ReMerge (#8308)
* added abacus keyboard * keymap updates * Update keyboards/abacus/config.h * Update keyboards/abacus/config.h * Update keyboards/abacus/keymaps/default/keymap.c * Update keyboards/abacus/keymaps/default/keymap.c * Update keyboards/abacus/keymaps/default/keymap.c * start cleaning up for merge * cleaned for merge * cleaned * cleaned * Update keyboards/abacus/abacus.h * Update keyboards/abacus/keymaps/default/keymap.c * Update keyboards/abacus/keymaps/default/readme.md * Update keyboards/abacus/readme.md * Update keyboards/abacus/readme.md * Update keyboards/abacus/rules.mk * Update keyboards/abacus/info.json * Update keyboards/abacus/info.json * Update keyboards/abacus/info.json * Update keyboards/abacus/readme.md * Update keyboards/abacus/info.json * Update keyboards/abacus/rules.mk * Update keyboards/abacus/rules.mk
-rw-r--r--keyboards/abacus/abacus.c17
-rw-r--r--keyboards/abacus/abacus.h41
-rw-r--r--keyboards/abacus/config.h133
-rw-r--r--keyboards/abacus/info.json62
-rw-r--r--keyboards/abacus/keymaps/default/keymap.c148
-rw-r--r--keyboards/abacus/keymaps/default/readme.md4
-rw-r--r--keyboards/abacus/readme.md15
-rw-r--r--keyboards/abacus/rules.mk36
8 files changed, 456 insertions, 0 deletions
diff --git a/keyboards/abacus/abacus.c b/keyboards/abacus/abacus.c
new file mode 100644
index 000000000..aef62aa92
--- /dev/null
+++ b/keyboards/abacus/abacus.c
@@ -0,0 +1,17 @@
1/* Copyright 2020 nickolaij
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 "abacus.h"
diff --git a/keyboards/abacus/abacus.h b/keyboards/abacus/abacus.h
new file mode 100644
index 000000000..7f221c3c3
--- /dev/null
+++ b/keyboards/abacus/abacus.h
@@ -0,0 +1,41 @@
1/* Copyright 2020 nickolaij
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#include "quantum.h"
19#define XXX KC_NO
20
21
22/* This is a shortcut to help you visually see your layout.
23 *
24 * The first section contains all of the arguments representing the physical
25 * layout of the board and position of the keys.
26 *
27 * The second converts the arguments into a two-dimensional array which
28 * represents the switch matrix.
29 */
30#define LAYOUT( \
31 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
32 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
33 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
34 k30, k31, k32, k33, k34, k35, k36, k37, k38 \
35) \
36{ \
37 { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
38 { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
39 { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
40 { k30, k31, k32, k33, XXX, XXX, k34, XXX, k35, k36, k37, k38} \
41}
diff --git a/keyboards/abacus/config.h b/keyboards/abacus/config.h
new file mode 100644
index 000000000..7fa989853
--- /dev/null
+++ b/keyboards/abacus/config.h
@@ -0,0 +1,133 @@
1/*
2Copyright 2020 nickolaij
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20#include "config_common.h"
21
22/* USB Device descriptor parameter */
23#define VENDOR_ID 0xFEED
24#define PRODUCT_ID 0x0000
25#define DEVICE_VER 0x0001
26#define MANUFACTURER nickolaij
27#define PRODUCT abacus
28#define DESCRIPTION A first attempt at a custom keyboard
29
30/* key matrix size */
31#define MATRIX_ROWS 4
32#define MATRIX_COLS 12
33
34/*
35 * Keyboard Matrix Assignments
36 *
37 * Change this to how you wired your keyboard
38 * COLS: AVR pins used for columns, left to right
39 * ROWS: AVR pins used for rows, top to bottom
40 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
41 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
42 *
43 */
44#define MATRIX_ROW_PINS { D3, D2, D4, C6 }
45#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, D7, B3, E6, B2, B4, B6, B5}
46#define UNUSED_PINS {B0}
47
48#define DIP_SWITCH_PINS { D0 }
49
50#define ENCODERS_PAD_A { F1 }
51#define ENCODERS_PAD_B { F0 }
52#define ENCODER_RESOLUTION 4
53
54/* COL2ROW, ROW2COL*/
55#define DIODE_DIRECTION COL2ROW
56#define RGB_DI_PIN D1
57
58#ifdef RGB_DI_PIN
59# define RGBLED_NUM 17
60# define RGBLIGHT_HUE_STEP 8
61# define RGBLIGHT_SAT_STEP 8
62# define RGBLIGHT_VAL_STEP 8
63# define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
64# define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
65/*== choose animations ==*/
66# define RGBLIGHT_EFFECT_BREATHING
67# define RGBLIGHT_EFFECT_RAINBOW_MOOD
68# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
69# define RGBLIGHT_EFFECT_SNAKE
70# define RGBLIGHT_EFFECT_KNIGHT
71# define RGBLIGHT_EFFECT_STATIC_GRADIENT
72/*== customize breathing effect ==*/
73/*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
74# define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
75/*==== use exp() and sin() ====*/
76# define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
77# define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
78#endif
79
80/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
81#define DEBOUNCE 5
82
83/* define if matrix has ghost (lacks anti-ghosting diodes) */
84//#define MATRIX_HAS_GHOST
85
86/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
87#define LOCKING_SUPPORT_ENABLE
88/* Locking resynchronize hack */
89#define LOCKING_RESYNC_ENABLE
90
91/*
92 * Feature disable options
93 * These options are also useful to firmware size reduction.
94 */
95
96/* disable debug print */
97//#define NO_DEBUG
98
99/* disable print */
100//#define NO_PRINT
101
102/* disable action features */
103//#define NO_ACTION_LAYER
104//#define NO_ACTION_TAPPING
105//#define NO_ACTION_ONESHOT
106
107/* disable these deprecated features by default */
108#ifndef LINK_TIME_OPTIMIZATION_ENABLE
109 #define NO_ACTION_MACRO
110 #define NO_ACTION_FUNCTION
111#endif
112/*
113 * MIDI options
114 */
115
116/* Prevent use of disabled MIDI features in the keymap */
117//#define MIDI_ENABLE_STRICT 1
118
119/* enable basic MIDI features:
120 - MIDI notes can be sent when in Music mode is on
121*/
122//#define MIDI_BASIC
123
124/* enable advanced MIDI features:
125 - MIDI notes can be added to the keymap
126 - Octave shift and transpose
127 - Virtual sustain, portamento, and modulation wheel
128 - etc.
129*/
130//#define MIDI_ADVANCED
131
132/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
133//#define MIDI_TONE_KEYCODE_OCTAVES 1
diff --git a/keyboards/abacus/info.json b/keyboards/abacus/info.json
new file mode 100644
index 000000000..dd4d15cd5
--- /dev/null
+++ b/keyboards/abacus/info.json
@@ -0,0 +1,62 @@
1{
2 "keyboard_name": "Abacus",
3 "url": "https://www.github.com/nickolaij",
4 "maintainer": "nickolaij",
5 "width": 12.75,
6 "height": 4,
7 "layouts": {
8 "LAYOUT": {
9 "key_count": 45,
10 "layout": [
11 {"label":"k00", "x":0, "y":0, "w":1},
12 {"label":"k01", "x":1, "y":0, "w":1},
13 {"label":"k02", "x":2, "y":0, "w":1},
14 {"label":"k03", "x":3, "y":0, "w":1},
15 {"label":"k04", "x":4, "y":0, "w":1},
16 {"label":"k05", "x":5, "y":0, "w":1},
17 {"label":"k06", "x":6, "y":0, "w":1},
18 {"label":"k07", "x":7, "y":0, "w":1},
19 {"label":"k08", "x":8, "y":0, "w":1},
20 {"label":"k09", "x":9, "y":0, "w":1},
21 {"label":"k0a", "x":10, "y":0, "w":1},
22 {"label":"k0b", "x":11, "y":0, "w":1.75},
23
24 {"label":"k10", "x":0, "y":1, "w":1.25},
25 {"label":"k11", "x":1.25, "y":1, "w":1},
26 {"label":"k12", "x":2.25, "y":1, "w":1},
27 {"label":"k13", "x":3.25, "y":1, "w":1},
28 {"label":"k14", "x":4.25, "y":1, "w":1},
29 {"label":"k15", "x":5.25, "y":1, "w":1},
30 {"label":"k16", "x":6.25, "y":1, "w":1},
31 {"label":"k17", "x":7.25, "y":1, "w":1},
32 {"label":"k18", "x":8.25, "y":1, "w":1},
33 {"label":"k19", "x":9.25, "y":1, "w":1},
34 {"label":"k1a", "x":10.25, "y":1, "w":1},
35 {"label":"k1b", "x":11.25, "y":1, "w":1.5},
36
37 {"label":"k20", "x":0, "y":2, "w":1.75},
38 {"label":"k21", "x":1.75, "y":2, "w":1},
39 {"label":"k22", "x":2.75, "y":2, "w":1},
40 {"label":"k23", "x":3.75, "y":2, "w":1},
41 {"label":"k24", "x":4.75, "y":2, "w":1},
42 {"label":"k25", "x":5.75, "y":2, "w":1},
43 {"label":"k26", "x":6.75, "y":2, "w":1},
44 {"label":"k27", "x":7.75, "y":2, "w":1},
45 {"label":"k28", "x":8.75, "y":2, "w":1},
46 {"label":"k29", "x":9.75, "y":2, "w":1},
47 {"label":"k2a", "x":10.75, "y":2, "w":1},
48 {"label":"k2b", "x":11.75, "y":2, "w":1},
49
50 {"label":"k30", "x":0, "y":3, "w":1.25},
51 {"label":"k31", "x":1.25, "y":3, "w":1},
52 {"label":"k32", "x":2.25, "y":3, "w":1},
53 {"label":"k33", "x":3.25, "y":3, "w":2.75},
54 {"label":"k34", "x":6, "y":3, "w":2.75},
55 {"label":"k35", "x":8.75, "y":3, "w":1},
56 {"label":"k36", "x":9.75, "y":3, "w":1},
57 {"label":"k37", "x":10.75, "y":3, "w":1},
58 {"label":"k38", "x":11.75, "y":3, "w":1}
59 ]
60 }
61 }
62}
diff --git a/keyboards/abacus/keymaps/default/keymap.c b/keyboards/abacus/keymaps/default/keymap.c
new file mode 100644
index 000000000..c1d5bd882
--- /dev/null
+++ b/keyboards/abacus/keymaps/default/keymap.c
@@ -0,0 +1,148 @@
1/* Copyright 2020 nickolaij
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#include QMK_KEYBOARD_H
17
18// wait DELAY ms before unregistering media keys
19#define MEDIA_KEY_DELAY 10
20
21// Defines names for use in layer keycodes and the keymap
22enum layer_names {
23 _BASE,
24 _UPPER,
25 _LOWER
26};
27
28// Defines the keycodes used by our macros in process_record_user
29enum custom_keycodes {
30 NICKURL = SAFE_RANGE,
31 ALTTAB
32};
33
34enum unicode_names {
35 LOVEEYES,
36 THINK,
37 UPSIDEDOWN,
38 NOMOUTH,
39 PARTY,
40 HEART,
41 EGGPLANT,
42 PEACH,
43 EMOJI100,
44 EMOJIB
45};
46
47const uint32_t PROGMEM unicode_map[] = {
48 [LOVEEYES] = 0x1f60d,
49 [THINK] = 0x1f914,
50 [UPSIDEDOWN] = 0x1f643,
51 [NOMOUTH] = 0x1f636,
52 [PARTY] = 0x1f973,
53 [HEART] = 0x1f495,
54 [EMOJI100] = 0x1f4af,
55 [PEACH] = 0x1f351,
56 [EGGPLANT] = 0x1f346,
57 [EMOJIB] = 0x1f171
58};
59
60
61
62const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
63 /* Base */
64 [_BASE] = LAYOUT(
65 KC_ESCAPE, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPACE,
66 KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_BSLASH,
67 KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_UP, KC_DELETE,
68 KC_LCTRL, KC_LGUI, MO(_UPPER), KC_SPACE, KC_ENTER, MO(_LOWER), KC_LEFT, KC_DOWN, KC_RIGHT
69 ),
70 [_UPPER] = LAYOUT(
71 KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
72 ALTTAB, _______, _______, _______, _______, _______, _______, _______, KC_LBRACKET, KC_RBRACKET, KC_QUOTE, KC_SLASH,
73 _______, _______, _______, _______, _______, _______, _______, _______, KC_MINUS, KC_EQUAL, _______, _______,
74 KC_LALT, _______, _______, _______, _______, _______, KC_HOME, _______, KC_END
75 ),
76 [_LOWER] = LAYOUT(
77 NICKURL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
78 _______, KC_F11, KC_F12, RGB_MODE_PLAIN, RGB_MODE_BREATHE, RGB_MODE_RAINBOW, RGB_MODE_SWIRL, RGB_MODE_SNAKE, RGB_MODE_KNIGHT, RGB_MODE_GRADIENT, XXXXXXX, RGB_TOG,
79 _______, X(LOVEEYES), X(THINK), X(UPSIDEDOWN), X(NOMOUTH), X(PARTY), X(PEACH), X(HEART), X(EGGPLANT), X(EMOJI100), X(EMOJIB), RGB_HUI,
80 KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______
81 )
82
83
84};
85
86bool process_record_user(uint16_t keycode, keyrecord_t *record) {
87 switch (keycode) {
88 case NICKURL:
89 if (record->event.pressed) {
90 SEND_STRING("https://www.github.com/nickolaij");
91 } else {
92 tap_code(KC_ENTER);
93 }
94 return true;
95 break;
96
97 case ALTTAB:
98 if (record->event.pressed) {
99 tap_code16(A(KC_TAB));
100 }
101 return true;
102 break;
103
104 default:
105 return true;
106
107 }
108}
109
110
111void dip_switch_update_user(uint8_t index, bool active) {
112 switch (index) {
113 case 0:
114 if(active) {
115 switch(get_highest_layer(layer_state)) {
116 case _BASE:
117 tap_code16(LCTL(KC_F));
118 break;
119 case _UPPER:
120 tap_code(KC_MUTE);
121 break;
122 case _LOWER:
123 tap_code(KC_MEDIA_PLAY_PAUSE);
124 break;
125 }
126 }
127 }
128}
129
130
131void matrix_init_user(void) {
132 set_unicode_input_mode(UC_WINC);
133}
134
135void encoder_update_user(uint8_t index, bool clockwise) {
136
137 switch(get_highest_layer(layer_state)) {
138 case _BASE:
139 clockwise ? tap_code(KC_PGDN) : tap_code(KC_PGUP);
140 break;
141 case _UPPER:
142 clockwise ? tap_code(KC_VOLU) : tap_code(KC_VOLD);
143 break;
144 case _LOWER:
145 clockwise ? tap_code(KC_MEDIA_NEXT_TRACK) : tap_code(KC_MEDIA_PREV_TRACK);
146 break;
147 }
148}
diff --git a/keyboards/abacus/keymaps/default/readme.md b/keyboards/abacus/keymaps/default/readme.md
new file mode 100644
index 000000000..0c6098f0e
--- /dev/null
+++ b/keyboards/abacus/keymaps/default/readme.md
@@ -0,0 +1,4 @@
1# The default keymap for Abacus
2
3This is made based on my first few days of playing with it and honing in on what feels right.
4I've repurposed the DIP switch function for the encoder switches and added some functionality for multiple layers also effecting the encoders output.
diff --git a/keyboards/abacus/readme.md b/keyboards/abacus/readme.md
new file mode 100644
index 000000000..1f58a25a4
--- /dev/null
+++ b/keyboards/abacus/readme.md
@@ -0,0 +1,15 @@
1# Abacus
2
3![abacus](https://i.imgur.com/IFtuWaK.jpg)
4
5A first attempt at a PCB design for a mechanical keyboard. Includes rotary encoder and RGB underglow.
6
7* Keyboard Maintainer: [nickolaij](https://github.com/nickolaij)
8* Hardware Supported: Abacus PCB, [Elite C Microcontroller](https://keeb.io/products/elite-c-usb-c-pro-micro-replacement-arduino-compatible-atmega32u4) or Pro Micro Microcontroller (Elite C has additional pins for encoder)
9* Hardware Availability: [Abacus PCB Github](https://github.com/nickolaij/Abacus_Rev2)
10
11Make example for this keyboard (after setting up your build environment):
12
13 make abacus:default
14
15See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/abacus/rules.mk b/keyboards/abacus/rules.mk
new file mode 100644
index 000000000..d31121669
--- /dev/null
+++ b/keyboards/abacus/rules.mk
@@ -0,0 +1,36 @@
1# MCU name
2MCU = atmega32u4
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
13
14# Build Options
15# change yes to no to disable
16#
17BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
18MOUSEKEY_ENABLE = no # Mouse keys
19EXTRAKEY_ENABLE = yes # Audio control and System control
20CONSOLE_ENABLE = yes # Console for debug
21COMMAND_ENABLE = yes # Commands for debug and configuration
22# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
23SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
24# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
25NKRO_ENABLE = no # USB Nkey Rollover
26BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
27RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
28MIDI_ENABLE = no # MIDI support
29BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
30AUDIO_ENABLE = no # Audio output on port C6
31FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
32HD44780_ENABLE = no # Enable support for HD44780 based LCDs
33UNICODEMAP_ENABLE = yes
34ENCODER_ENABLE = yes
35DIP_SWITCH_ENABLE = yes
36LTO_ENABLE = yes